Skip to content
난이도 면접 빈출문제은행 4

DNS 2 ​

DNS에서 본 조회 흐름에 이어, 권한 네임 서버(authoritative name server)가 돌려주는 답이 무엇인지 다룬다. DNS(Domain Name System, 도메인 이름 시스템)의 답은 IP(Internet Protocol, 인터넷 프로토콜) 주소 같은 값을 담은, 종류가 정해진 레코드로 온다. 한 번 찾은 답은 곳곳에 캐시(cache)로 남겨 두기 때문에, 조회가 빠른 대신 레코드를 바꿔도 바로 퍼지지 않는다. 끝으로 DNS 메시지를 어떤 전송 방식으로 주고받는지 정리한다.

레코드 종류 ​

권한 네임 서버는 이름마다 리소스 레코드(resource record)를 가지고 있다. 레코드마다 종류가 있다. 주소를 담는 레코드는 IP 판에 따라 IPv4(Internet Protocol version 4, 인터넷 프로토콜 4판)용 A와 IPv6(Internet Protocol version 6, 인터넷 프로토콜 6판)용 AAAA로 나뉜다.

종류담는 것예
AIPv4 주소www → 192.0.2.10
AAAAIPv6 주소www → 2001:db8::10
CNAME다른 이름의 별칭blog → myblog.hosting.example
MX메일을 받을 서버example.com → mail.example.com
NS이 도메인을 맡는 네임 서버example.com → ns1.example.net
TXT자유 텍스트도메인 소유 확인, 메일 발신 정책

CNAME은 Canonical Name(정식 이름), MX는 Mail Exchange(메일 교환), NS는 Name Server의 줄임말이다. CNAME은 "이 이름은 저 이름과 같다"는 별칭이라, 리졸버(resolver)는 CNAME을 만나면 가리키는 이름을 다시 조회한다. 같은 이름에 CNAME과 다른 레코드를 함께 두지 않는 것이 규칙이다. 두 정보가 서로 다른 답을 내면 안 되기 때문이다.

TTL과 캐시: 변경이 늦게 퍼지는 이유 ​

레코드에는 TTL(Time To Live, 생존 시간)이 초 단위로 붙는다. 리졸버와 OS는 답을 받으면 TTL 동안 캐시에 두고, 그동안은 권한 네임 서버에 다시 묻지 않는다. 캐시 덕분에 대부분의 조회는 맨 위층의 루트 네임 서버(root name server)까지 가지 않고 가까운 곳에서 끝난다.

대가는 변경 전파다. A 레코드의 IP 주소를 바꿔도, 이미 옛 답을 캐시한 리졸버들은 TTL이 끝날 때까지 옛 주소를 계속 준다. 그래서 서버 이전을 앞두고는 적어도 원래 TTL만큼 앞서 TTL을 짧게 줄여 둔다. 그래야 긴 TTL로 캐시된 옛 답이 전환 전에 사라진다. 전환한 뒤에도 옛 답이 캐시에서 다 사라질 때까지는 옛 서버를 함께 살려 두고, 안정되면 TTL을 다시 늘린다. TTL이 짧으면 변경은 빨리 퍼지지만 권한 네임 서버로 가는 질의가 늘어난다.

전송: 주로 UDP 53 ​

DNS 질의는 주로 UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜) 53번 포트(port)로 보낸다. 질의와 답이 대개 작은 메시지 한 쌍이라, 연결을 맺는 과정 없이 한 번 주고받는 UDP가 빠르다. 답이 오지 않으면 클라이언트가 다시 보낸다.

TCP(Transmission Control Protocol, 전송 제어 프로토콜)도 같은 53번으로 쓴다. 처음 규격인 RFC(Request for Comments, 인터넷 표준 문서) 1035번은 UDP 메시지를 512바이트로 제한했고, 답이 그보다 크면 잘렸다는 표시를 붙여 보낸다. 그러면 클라이언트가 TCP로 다시 묻는다. 지금은 EDNS(Extension Mechanisms for DNS, DNS 확장 메커니즘)라는 확장 규격으로 UDP에서도 더 큰 답을 보낼 수 있지만, RFC 7766은 모든 DNS 구현이 TCP를 지원하도록 요구한다. 한 네임 서버가 맡는 도메인 범위를 영역(zone)이라 하는데, 이 영역의 레코드 전체를 다른 네임 서버로 복사하는 영역 전송(zone transfer)도 TCP를 쓴다.

면접 포인트 ​

  • "A, AAAA, CNAME 차이는?" → A는 IPv4 주소, AAAA는 IPv6 주소, CNAME은 다른 이름의 별칭이라 리졸버가 가리키는 이름을 다시 조회한다.
  • "DNS를 바꿨는데 왜 바로 반영이 안 되나요?" → 리졸버·OS 캐시가 TTL 동안 옛 답을 준다. 이전 전에 TTL을 낮춘다.
  • "DNS는 UDP만 쓰나요?" → 아니다. 큰 응답과 영역 전송은 TCP 53을 쓰고, TCP 지원은 필수다.

관련 문서