DNS의 목적

DNS 서버는 ip 주소를 기억하기 어려우니까.
domain이나 hostname을 기억하고 사용하기 위해 사용된다.

DNS flow

dns server flow

DNS 서버들

Recursive Resolver:
브라우저나 앱을 통해 query를 받는 서버.
Authoritative nameserver에 도달할 때까지 request들을 만들어서 수행한다.

Root nameserver:
DNS root nameserver는 전 세계에 13개만 존재한다.
그렇지만 각 서버가 대규모 클러스터로 구성되어 안정적이게 서비스한다.

TLD nameserver:
top-level-domain server로 com, net 과 같은 hostname의 마지막 부분을 호스팅한다.

Authoritative nameserver:
final nameserver로서 요청한 hostname에 대해 ip주소를 가지고 있다면 반환한다.
실제로 DNS resource record를 가지고 있는 서버.

캐싱 (caching)

캐싱의 목적은 분명히 시간과 비용을 줄이기 위함.

Browser DNS caching:
브라우저에서 정해진 시간동안 DNS record를 캐싱하도록 설계되어있다.

OS level DNS caching:
OS 내부에 query를 핸들링하는 stub resolver (혹은 DNS client 라고 불리는)가 cache에 record가 있는지 확인한다.

또, recursive resolver도 caching 해놓은 record가 있는지 확인한다.

  • Authoritative nameserver의 주소를 갖는 NS record가 있으면 바로 저기로 간다.
  • 없으면 TLD의 cache가 있으면 TLD로 간다.

통신 (communication)

DNS는 기본적으로 UDP를 사용한다.
TCP handshake 등의 오버헤드를 줄이기 위해서 UDP로 고안되었다.

그래서 512 bytes를 약속처럼 사용하고 있는데,
이는 ipv4 표준에서 576 bytes 이상이면 여러 개의 ip packet으로 fragmented 되는 것과 관련이 있다.

  • 단일 packet일 경우 하나만 유실되면 전체 유실 등으로 핸들링이 편하기 때문.

최근에는 512 bytes를 넘어가기도 하는데 그럴땐 tcp를 사용한다.

reference

https://www.cloudflare.com/learning/dns/what-is-dns
https://www.lifewire.com/what-is-a-dns-server-2625854
https://www.lifewire.com/dns-root-name-servers-3971336
https://serverfault.com/questions/587625/why-dns-through-udp-has-a-512-bytes-limit