먼저 DNS를 하기 전에 IP를 알아야 한다. Internet Protocol address의 약자로서 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 우해서 사용하는 특수한 번호이다. 즉 네트워킹이 가능한 장비를 식별하는 주소이다.
우리 집주소가 서울시/서대문구/~~길 인것처럼 아이피 주소도 123.123.123.123과 같이 구분된다. 이처럼 4마디로 구성되는 방식이 IPv4이며 아직까진 IPv4를 사용한다. 약 42억개의 주소를 나타낼 수 있다. 너무적은 숫자이기 때문에 IPv6 주소 체계가 나왔다. 이는 거의 무한대에 가깝다. 하지만 아직까지는 대체되지 않았다.
public IP 주소이다. 우편물로 치면 우체국에서 배달하는 실제 주소와 같다. 인터넷에 연결된 어느 누구라도 IP 주소를 토대로 1차 접근이 가능하다. 그래서 보안 장비가 반드시 필요하다. 하지만 인터넷 서비스 회사에서 보안 서비스를 제공하기에 걱정할 필요는 없다. 예시로 공유기가 있다.
공인되지 않은 주소, 외부에서 검색, 접근이 불가능한 주소이다. 사설 IP는 상세 주소처럼 생각하면 될 것이다. 사설 아이피를 사용하는 이유는 2가지가 있다.
하나는 IP 주소를 공유하기 이함이다. 이를 통해 주소 부족 문제를 해결할 수 있다. 공유기가 없으면 각각의 컴퓨터나 네트워크를 사용하는 기기들이 모두 공인 IP 주소를 사용해야 하지만 공유기가 있다면 1개 공인 IP 주소만 공유기에 할당하고 다른 기기들은 가상 IP 주소를 각각 할당 받아 인터넷에 접속할 수 있게 된다.
다른 하나는 보안 떄문이다. 사설 IP 주소가 할당된 컴퓨터 등은 외부에서 검색, 접근이 기본적으로 불가능하다. 일반적으로 공유기가 보안 장비의 역할도 수행하기 때문이다.
고정 IP 주소든 가상 IP 주소든 컴퓨터 등에 IP 주소를 설정하려면, 누군가 (주로 서버)가 IP 주소를 컴퓨터에 배급, 할당해 줘야 한다. 공인 IP 주소라면 해당 인터넷 서비스 업체의 주소 할당 서비스가, 사설 IP 주소라면 공유기가 이러한 역할을 한다. IP 주소를 할당 받는 기기들은 이를 자동으로 할지 수동으로 할지 선택할 수 있따.
여기서 고정 IP 주소는 직접 IP 주소를 입력해 주소를 설정하는 방식을 말한다. IP 주소가 변경되면 안되는 서버나 네트워크 프린터 등에 적합하다. 일반적으로 이러한 경우 외에는 사용할 기회가 없다.
유동 IP란 서버나 공유기가 보내주는 정보 그대로 컴퓨터에 자동 설정되는 방식이다. DHCP(Dynamic Host Configuration Protocol)서비스라 하는데 컴퓨터가 부팅하면 DHCP 서버에 IP 주소 할당을 요청, 이를 수신한 DHCP 서버가 해당 컴퓨터에 IP 주소 등 네트워크 정보를 전달, 컴퓨터는 자동으로 등록, 설정하게 된다. 매번 IP할당 요청이 발생할 때마다 IP 주소는 변경되지만, 이전에 할당 받았던 주소를 재할당 받는 경우가 더 많다. 공유기는 사설 IP 주소를 생성하여 각 컴퓨터 등에 자동 할당(DHCP 서비스)해주는 역할도 하고 있다.
같은 IP 주소 대역이라도 네트워크를 다양한 클래스로 나눌 수 있는데 이를 구분하는 기준이다. 사용자가 임의로 정하는게 아니라 IP 주소를 할당하는 인터넷 서비스 업체에서 제공하는 값을 그대로 입력해야 한다. IP 주소가 정확하더라도 서브넷 마스크가 틀리면 인터넷 접속이 불가능하다. 서브넷 마스크는 255.0.0.0(클래스 A) , 255.255.0.0 (클래스 B), 255.255.255.0(클래스 C)등의 형식으로 표기된다.
인터넷상의 모든 컴퓨터는 숫자를 이용하여 서로를 찾고 통신한다. 이러한 숫자를 IP 주소라고 한다. 웹 브라우저를 열고 웹 사이트로 이동할때 긴 숫자를 입력할 필요가 없다. 도메인 이름을 입력해도 원하는 웹사이트로 이동할 수 있다.
호스트를 식별하는 방법중 한가지는 호스트네임이다. www.naver.com, www.facebook.com 과 같은 호스트 네임은 기억하기 쉽다. 그러나 호스트 네임은 호스트 위치에 대한 정보를 거의 제공하지 않는다. 호스트 네임은 가변 길이의 알파뉴메릭 문자로 구성되므로 라우터가 처리하는 데 어려움이 있다. 이러한 이유로 호스트는 IP 주소로도 식별된다.
DNS와 IP 주소로 호스트를 식별하는 두 가지 방법이 있지만 사람은 호스트 네임 식별자, 라우터는 고정 길이의 계층구조를 가진 IP 주소를 좋아한다. 호스트 네임을 IP 주소로 변환해주는 디렉터리 서비스가 필요하다. 이것이 바로 인터넷 DNS(domain name system)이다.
DNS는 DNS 서버들이 계층구조로 구현된 분산 데이터베이스이고, 호스트가 분산 데이터베이스로 질의하도록 허락하는 애플리케이션 계층 프로토콜이다. DNS 서버는 주로 BIND(Berkely Internet Name Domain) 소프트웨어를 수행하는 유닉스 컴퓨터이다. DNS 프로토콜은 UDP 상에서 수행되고 포트번호 53을 이용한다.
DNS는 다른 애플리케이션 프로토콜들이 HTTP, SMTP, FTP 등 사용자가 제공한 호스트 네임을 IP 주소로 변환하기 위해 이용한다. www.someschool.com/index.html을 호출하면 어떤 일이 일어나는지 보자. 호스트는 IP 주소를 얻어야 한다.
자세한 내용은 https://aws.amazon.com/ko/route53/what-is-dns/ 를 참고하는게 더 좋다.
지연문제가 있지만 IP주소는 가까운 DNS서버에 캐시에 있어서 지연이 많이 없다. DNS는 호스트 네임을 IP주소로 변환하는 것 외에 다른 서비스도 제공한다.
클라이언트가 DNS로 보내고 DNS는 네트워크에 질의 메시지를 보낸다. 모든 DNS 질의와 응답 메시지는 포트 53의 UDP 데이터그램으로 보내진다. 수 msec에서 수 sec의 지연 후에 사용자 호스트의 DNS는 요청한 매핑에 해당하는 DNS 응답 메시지를 받는다. 이 매핑은 호출한 애플리케이션으로 전달된다.
DNS는 전 세계에 분산된 많은 DNS 서버뿐만 아니라 DNS 서버와 질의를 하는 호스트 사이에서 어떻게 통신하는지를 명시하는 애플리케이션 계층 프로토콜로 구성되어 있다.
확장성 문제를 다루기 위해 DNS는 많은 서버를 이용하고 이들을 계층 형태로 구성하며 전 세계에 분산시킨다. 먼저 루트 DNS서버가 있고 아래에 com DNS 서버, org DNS 서버, edu DNS 서버가 있다.
이외에도 중요한 형태로 로컬 DNS 서버가 있다. 로컬 DNS 서버는 서버들의 계층구조에 엄격하게 속하지는 않지만, DNS 구조의 중심에 있다. ISP들은 로컬 DNS 서버를 갖는다. 호스트가 ISP에 연결될 때, 그 ISP는 로컬 DNS 서버로부터 IP 주소를 호스트에게 제공한다. 이 내용도 https://aws.amazon.com/ko/route53/what-is-dns/ 에 자세하게 기록되어 있다.DNS resulver라고 되어있는게 그 예시이다. 일종의 프록시이다. 하지만 너무 많은 과정이 있다. 그래서 DNS 캐싱 방법을 사용해야 한다.
질의에는 재귀적 질의와 반복적 질의가 있다. 요청하는 호스트로부터 로컬 DNS 서버까지 질의는 재귀적이고, 나머지 질의는 반복적이다.
DNS는 지연 성능 향상과 네트워크의 DNS 메시지 수를 줄이기 위해 캐싱을 사용한다. 로컬 DNS 서버는 응답에 대한 정보를 저장할 수 있는데 만약 호스트 네임과 IP 주소 쌍이 DNS 서버에 저장되고 다른 호스트 네임으로 부터 같은 질의가 DNS 서버로 도착하면, DNS 서버는 호스트 네임에 대한 책임이 없을 때조차 원하는 IP 주소를 제공할 수 있다. 일정 기간 후 DNS 서버는 저장된 정보를 제공한다.