Domain Name System
우리가 웹브라우저에 입력하는 주소를 도메인 네임이라고 하며, DNS란 이 주소를 IP 주소로 변경해주는 시스템이다.
IP 주소가 1.2.3.4
인 컴퓨터에서 5.6.7.8
인 컴퓨터로 접속하기 위해서는 웹 브라우저 주소창에 5.6.7.8
을 입력해서 접속해야한다. 5.6.7.8
에서 1.2.3.4
로 접속할 때도 마찬가지.
네이버를 예시로 들어보면, 네이버의 IP 주소는 125.209.222.141
이다. 따라서 네이버에 접속하려면 주소창에 http://125.209.222.141/
를 입력해야한다.
하지만 사용자가 이러한 IP주소를 일일이 기억하고 입력하기에는 많은 불편함이 따른다. 따라서 고안된 방식이 HOSTS.TXT 파일을 이용하는 방식이다.
HOSTS.TXT 파일이란 각각의 도메인네임과 이들의 IP주소를 하나하나 대응시켜서 저장해 놓은 텍스트파일이다.
유저들은 HOSTS.TXT 파일을 통해 도메인 네임을 입력하면 알맞은 IP 주소로 변경해서 접속할 수 있었다.
정보가 얼마 없었던 초창기에는 SRI-NIC (Standard Research Institue - Network Information Center) 라는 기관에서 HOSTS.TXT 파일을 관리했다. 인터넷에 연결된 각각의 사이트들은 FTP를 이용하여 주기적으로 이 파일을 복사해서 네트워크에 적용했다.
하지만 시간이 흐르면서 수많은 도메인 네임과 IP 주소가 생겼고 중앙에서 모든 호스트들의 변동 사항을 관리하는 것이 불가능해졌다. 기하급수적으로 늘어나며 수시로 변동되는 HOSTS.TXT 파일을 각 사이트들이 복제하여 적용하는 것은 심각한 자원의 낭비를 초래하였다. 따라서 대안으로 등장한 것이 DNS 개념이다.
사용자가 www.icann.org라는 도메인 네임을 입력했다고 해보자.
제일 먼저 Local DNS 서버에게 해당 도메인 네임에 해당하는 IP 주소가 있는지 질의한다.
Local DNS 서버는 기지국 DNS 서버라고 한다.
일반적으로 인터넷은 여러 통신사를 통해 연결하는데, 통신사들은 기본적으로 각자의 DNS 서버를 갖고 있다. (KT DNS, SK DNS ...)
만약 Local DNS 서버에 찾는 IP 주소가 있다면 바로 해당 주소로 접속할 수 있다.
하지만 Local DNS 서버에 필요한 IP 주소가 없다면, Local DNS 서버는 Root DNS 서버에게 해당 IP 주소를 알고 있는지 질의한다.
Root DNS 서버는 최상위에 위치한 DNS 서버이다.
Local DNS 서버로부터 질의를 받으면 Root DNS 서버는 node DNS서버에게로 차례차례 질의를 날린다.
만약 Root DNS 서버에도 찾는 주소가 없으면 Root DNS 서버는 Local DNS 서버에게 해당 주소가 없다고 알려준다. 이때 TLD (Top-Level Domain) 이름 서버 정보를 같이 알려준다.
TLD (Top-Level Domain) (최상위 도메인)
국가 코드 최상위 도메인, 일반 최상위 도메인으로 나뉜다.
- 국가 코드 최상위 도메인 (Country Code Top-Level Domain, ccTLD)
(.kr, .jp, .CN, .US 등등)- 일반 최상위 도메인((generic top-level domain, gTLD)
(.com, .net, .org 등등)
Local DNS 서버는 TLD 정보를 받아서 TDL 서버에게 IP 주소가 있는지 질의한다.
만약 TLD 서버도 IP 주소를 모른다면, 자기도 모른다는 응답과 함께 Second-level DNS 서버를 알려준다.
Local DNS 서버는 Second-level DNS 서버에게 IP 주소가 있는지 질의한다. Second-level DNS 서버는 해당 IP 주소를 알고있으므로 주소를 알려준다.
드디어 IP 주소를 알아낸 Local DNS 서버는 주소를 캐싱하고 웹브라우저에게 주소를 알려주고, 접속할 수 있게 된다.
이처럼 여러 DNS 서버에게 차례로 (재귀적으로) 질의하는 과정을 Recursive Query라고 한다.
이렇게 힘들게 IP 주소를 받아왔는데 나중에 또다시 해당 IP 주소로 접속하려고 할 때 똑같은 과정을 반복한다면 매우 비효율적일 것이다. (속도와 오버헤드 발생)
따라서 PC는 DNS Cache라는 Cache안에 자주 사용하는 도메인 네임과 IP 주소를 저장해놓는다.
Window의 경우 cmd에서 ipconfig/displaydns
를 통해 DNS Cache를 확인할 수 있다.
즉, 브라우저에 도메인 네임 주소를 입력하면 바로 Local DNS 서버에 질의하는 것이 아니라 먼저 DNS Cache를 탐색한 후, 없으면 Local DNS 서버에 질의한다.
DNS 서버는 크게 2가지 종류가 있다.
도메인에 대한 정보를 가지고 있지 않은 서버를 말한다.
Local DNS 서버 (기지국 DNS 서버)가 해당된다.
실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버이다. 그래서 권한의 의미인 Authoritative가 붙는다.
Root DNS 서버, Top-level DNS 서버, Second-level DNS 서버가 해당된다.