DNS의 계층적 구조
DNS는 하나의 거대한 데이터베이스가 아닙니다. 세계 곳곳에 분산된 수천 개의 서버가 계층을 이루며 협력합니다. 이 계층을 이해하면 DNS 조회가 왜 그토록 빠른지, 그리고 장애가 왜 잘 전파되지 않는지 알 수 있습니다.
도메인 이름의 구조
www.naver.com을 거꾸로 읽으면 계층이 보입니다. 맨 끝의 .(점)은 루트(root)를 의미합니다. 평소에는 생략하지만 항상 존재합니다. com은 최상위 도메인(Top-Level Domain, TLD)입니다. naver는 두 번째 레벨 도메인, www는 세 번째 레벨입니다.
. ← 루트
└── com ← TLD (최상위 도메인)
└── naver ← 2레벨 도메인
└── www ← 호스트명
각 계층마다 담당 네임서버가 있습니다. 루트 서버는 TLD 서버의 주소를 압니다. TLD 서버는 2레벨 도메인 서버의 주소를 압니다. 2레벨 도메인 서버는 실제 호스트의 IP 주소를 압니다.
루트 네임서버
루트 네임서버는 DNS 계층의 최상단입니다. 전 세계에 13개의 루트 서버 그룹이 있으며, 각 그룹은 애니캐스트(anycast) 기술로 수백 대의 서버를 운영합니다. 물리적으로는 훨씬 더 많습니다. a.root-servers.net부터 m.root-servers.net까지 이름이 붙어 있습니다.
루트 서버는 모든 도메인의 IP 주소를 알고 있지 않습니다. 단지 각 TLD를 담당하는 서버의 주소를 알고 있을 뿐입니다. .com에 대한 질문이 오면 .com TLD 서버의 주소를 알려줍니다.
재귀적 조회 과정
사용자의 컴퓨터가 www.naver.com의 IP를 알아내는 과정은 이렇습니다.
먼저 컴퓨터는 리졸버(resolver)에게 묻습니다. 리졸버는 인터넷 공급자(ISP) 또는 회사 네트워크에 있는 캐싱 DNS 서버입니다. 리졸버가 캐시에 답이 없으면 루트 서버에 묻습니다. 루트 서버는 .com TLD 서버의 주소를 돌려줍니다. 리졸버는 .com TLD 서버에 naver.com을 묻습니다. TLD 서버는 naver.com의 네임서버 주소를 돌려줍니다. 리졸버는 naver.com 네임서버에 www.naver.com의 IP를 묻습니다. 드디어 IP 주소가 반환됩니다.
여기서 용어를 하나 구분해 둡니다. 컴퓨터가 리졸버에게 '끝까지 알아서 답을 가져와 달라'고 한 번에 맡기는 것을 재귀 질의(recursive query)라고 합니다. 반면 리졸버가 루트·TLD·권한 서버에 차례로 물으며 한 단계씩 다음 서버를 안내받는 것은 반복 질의(iterative query)라고 합니다. 즉 이 절 제목의 '재귀'는 컴퓨터와 리졸버 사이의 관계를 가리키고, 리졸버가 실제로 수행하는 일은 여러 번의 반복 질의입니다.
이 과정이 매번 일어나면 느리겠지만, 각 단계의 결과는 TTL(Time To Live) 값이 만료될 때까지 리졸버에 캐시됩니다.
권한 네임서버
naver.com 네임서버처럼, 특정 도메인에 대한 최종 답을 갖고 있는 서버를 권한 네임서버(authoritative name server)라고 합니다. 도메인을 등록할 때 이 서버를 지정합니다. 도메인 관리자가 DNS 레코드를 추가하거나 수정하면 권한 네임서버에 반영됩니다.
권한 네임서버의 답은 믿을 수 있습니다. 반면 리졸버가 캐시에서 돌려주는 답은 TTL이 지나면 낡은 정보일 수 있습니다. 서버 IP를 바꿨는데 한동안 옛 IP로 연결되는 현상이 바로 이 캐시 때문입니다. 이 문제는 다음 절에서 실습을 통해 직접 확인합니다.
다음 절에서는 dig와 nslookup으로 이 계층 구조를 직접 들여다봅니다.