‡Computer Science ‡/º 네트워크

[네트워크] DNS(Domain Name System)

Trudy | 송연 2024. 7. 15. 21:19

DNS (Domain Name System) 

 

 

먼저 사람을 어떻게 식별할까? 

사람을 식별할 수 있는 식별자는 이름, 주민등록번호, 여권 번호 등 여러 개가 있을 수 있다. 사람들을 이름이 아닌 주민등록번호나 여권 번호로 부르게 되면 매우 불편 할 것이고, 우리는 이름을 통해서 사람을 식별한다. 반면, 컴퓨터는 주민등록번호로 식별하는 것이 더 편할 것이다. 

 

위와 마찬가지로 인터넷 host나 router은 IP Address(32 bit)로 식별되지만, 사람들이 여기에 접속할 때 IP Address를 외우고 접근하기는 매우 힘들기 때문에 "도메인 주소"라는 이름을 부여한다. 

 

그렇다면 도메인 주소와 IP 주소를 어떻게 mapping하게 될까?

 

이를 책임져 주는 것이 DNS (Domain Name System) 이다.  

 

DNS (Domain Name System)

  • 여러 계층의 Name Server들로 구성된 분산 Database 형태
    • 서버가 한 개가 작동하지 않으면 다 다운되는 SPOF 문제를 해결한다.
    • 장애가 생길 때 부분만 복구하면 되니까 유지보수 측면에서도 좋다.
  • HostName - IP Address 변환을 함
  • Application-layer Protocol
    • Host와 DNS Server가 소통하면서 도메인 이름 문제를 해결한다. 
    • 중요한 인터넷 기능은 Application-layer(응용 계층)에 구현되어야 한다.
    • 복잡도가 높고 중요한건 Network의 끝자락에 위치해야 확장하기 쉽기 때문이다. 

DNS의 데이터베이스는 수십억 단위이다. 수십조를 처리할 수 있는 정도의 능력을 제공 해야 한다. 호스트들이 IP 주소를 다 알고 있지 않으니까 모두 DNS를 이용해야 하기 때문에 성능이 매우 중요하다. 

따라서 DNS는 분산이 구조적, 물리적으로 잘 되어 있고, 보안/신뢰성을 제공해야 한다. 

 

 

 

DNS = 분산되고 구조화된 Database

 

DNS는 위와 같은 그림의 형태로 분산되고 구조화된 Database 형태로 존재한다. 

 

예를 들어 Client가 www.amazon.com 를 접속하려고 하는 경우를 생각해보자.

 

1. www.amazon.com의 IP 주소를 DNS 서버에게 물어봐야한다.

2. .com인 것을 아니까 .com DNS 서버에 가서 물어본다. 

3. .com DNS 서버의 답변으로 amazon.com DNS 서버를 받게 된다. 

4. amazon.com DNS 서버에 가서 www.amazon.com 의 IP 주소를 물어본다. 

5. IP주소를 답변 받는다. 

 

     1️⃣ DNS: Root Name Servers

  • TLD 서버의 IP 주소들를 제공
  • 도메인 이름을 직접 해결하는 것은 아니지만, 모든 DNS 조회의 마지막 지점에서 출발점을 제공
  • 최후의 방편이므로 매우 매우 중요한 인터넷 기능
  • 인터넷은 이 Root Name Server가 없으면 기능하지 못할 것 
  • 인터넷은 이 Root Name Server가 없으면 기능하지 못할 것 
    • DNSSEC로 보안을 제공
    • ICANN으로 Root DNS Domain을 관리
    • 1000개 이상의 루트 서버가 전 세계적으로 서버가 복제되어 있음

 

     2️⃣ DNS: Top-Level Domain (TLD) Servers

  • 책임 서버(Authoritative DNS Server)의 IP 주소를 제공
  • .com, .org, .net, .edu, .aero, .jobs ...와 같은 상위 레벨 도메인과
  •  .cn, .uk, .fr, .jp ...와 같은  국가 도메인 (우리나라는 .kr)을 책임짐

     

     3️⃣ DNS: Authoritative DNS Servers (책임 서버)

  • Hostname에서 IP 주소를 Mapping해서 실제 IP 주소를 제공
  • 기관의 개인 DNS 서버
  • 해당하는 기관이 직접 책임 서버를 관리 해줘야 함

 

DNS Name Resolution (DNS Query) - 반복적, 재귀적 질의

 

DNS 서버는 해당 host에 대해 물어 볼 수 있는 서버의 주소를 알려준다. 

 

"나는 이 hostname 모르는데, 이 server에게 물어봐" 

 

따라서 IP주소를 찾을 때까지 DNS 서버에서 다른 DNS 서버를 오가면서 반복적이고, 재귀적인 질의를 하게된다.

 

 

🌟Local DNS Name Servers (DNS 캐시)

어떤 host가 google.com에 접속하려고 한다. 이때, google.com이라는 name의 IP 주소가 뭐냐고 query를 날릴 텐데, 이걸 어디에다 날릴까? 

Root -> TLD -> Authoritive 서버에 query를 날리는게 아니라, 사실은 local name server에 보낸다!

 

가장 가까이 있는 local DNS 서버에 먼저 질의를 한다. 

local DNS 서버에는 최근에 검색했던 local cache가 있어서 (hostname - IP 주소) 쌍을 저장하고 있다. 

 

각각의 ISP(Internet Service Provider)은 local DNS Server를 가지고 있다. 밑 명령어를 통해 찾을 수 있다. 

MacOS
% scutil --dns

Windows
> ipconfig /all

 

따라서, local DNS 서버는 캐시와 같은 개념이기 때문에 DNS 계층 구조에 엄격히 속하지 않는다. 

 

💡캐시의 관리

어떤 name server가 mapping (IP주소)를 알게 되면, 그것을 캐싱해서 저장한다. 

하지만 시간이 지나면 IP 주소가 바뀔 수 있기 때문에 TTL(Time to live)를 줘서 관리를 해준다. TLD 서버는 기본적으로 lcoal name server에 캐시가 되어 있다고 한다.