Data Engineering/Server

DNS의 원리와 과정에 대해서 알아보자

cstory-bo 2023. 12. 28. 22:09

DNS 원리

우선 DNS란,
도메인 네임(hostname)을 IP 주소로 바꿔주는 시스템이다.

도메인 네임은 단순히 사람이 기억하기 쉽게 되어있기 때문에 그것만으로는 정확한 서버를 찾아갈 수 없다.
그래서 컴퓨터가 인식할 수 있는 주소인 IP 주소가 필요하다.

크게 1) Resolver 2) Root Nameserver 3) TLD Namesercer 4) authoritative Nameserver
로 나눌 수 있다.

1. DNS Resolver(Recursor)

클라이언트로부터 요청을 받는 서버이다.
이때 이미 처리한 적있어 캐시에 남아있는 주소에 대해서는 빠르게 처리한다.

2. Root Nameserver

도메인네임(hostname) 중에서 .com 등 뒤에 부분을 보고
해당 주소에 대해 알 것 같은 TLD nameserver의 주소를 알려준다.

3. TLD nameserver

TLD는
Top Level Domain, 최상위 도메인을 의미한다.
hostname의 마지막 부분(.com 등)을 호스팅한다.
최종적으로 해당 도메인네임의 ip를 알고있을 것 같은 authoritative nameserver의 주소를 알려준다.

4. Authoritative nameserver

해당 도메인네임의 IP주소를 가지고있는 서버이다.
만약 서브도메인이 있으면 authoritative nameserver가 한 단계 더 추가된다.

 

Lookup Process

  1. 유저가 example.com hostname을 요청한다.
  2. DNS resolver가 요청을 받고 Root server에서 요청한다.
  3. Root server는 Resolver에게 해당 도메인에 대한 정보를 가지고 있을 것 같은 TLD 서버를 알려준다.
  4. Resolver는 Root server가 알려준 TLD 서버에게 요청한다.
  5. TLD 서버는 hostname의 IP 주소를 알고있을 것 같은 Authoriative nameserver를 Resolver에 알려준다.
  6. Resolver는 알려준 Authoritative server에게 hostname의 IP주소를 요청한다.
  7. 해당 도메인의 nameserver는 resolver에게 IP주소를 알려준다.
  8. DNS resolver는 이 IP주소를 브라우저에게 응답한다.
  9. 브라우저는 도메인의 IP주소로 HTTP requenst를 만든다.
  10. 해당 IP 서버가 HTTP 요청에 대한 응답을 브라우저에게 전달한다.

왜 .com 과 같은 뒤에 부분이 Top Level일까요?

dot(.)을 기준으로 도메인네임의 문법은 트리구조를 갖고있다.
주로 가장 뒷부분의 유니크한 값의 개수가 작으며 트리 구조상 높은 레벨의 수가 적은 것이 좋다.

=> hostname : subdomain.domain.topleveldomain 형식이다.

Linux에서의 DNS Setting

리눅스에서 DNS resolver에 대한 설정은 /etc/resolv.conf 에서 할 수 있다.
우분투의 경우 DNS 설정은 systemd-resolved.service 를 사용해서 수정해야한다.