CS/Network

애플리케이션 계층: DNS

olsohee 2024. 3. 26. 00:20

DNS, 네임서버

DNS는 Domain Name System의 약자로 도메인 이름과 IP 주소를 변환하는 역할을 하는 시스템이다.

 

DNS가 필요한 이유는 무엇일까? 용자가 복잡한 IP 주소를 기억하는 것은 어렵기 때문이다. 따라서 사용자가 도메인 이름을 입력하면, DNS를 통해 그에 해당하는 IP 주소를 알아오는 것이다.

 

네임서버는 도메인 이름과 그에 상응하는 IP 주소 간의 매핑 정보를 저장하고 관리하는 서버이다. 네임서버는 DNS를 통해 인터넷 상에서 사용된다.

도메인 네임 스페이스

그런데 만약 DNS를 운영하는 네임서버가 1개라면? 모든 트래픽이 하나의 서버로 몰려 IP 주소 반환 과정이 느릴 것이고, 이 서버가 다운되면 전세계 사람들이 이용하지 못하게 될 것이다. 따라서 DNS를 운영하는 네임서버는 여러 개로 구성되고, 이 서버들은 계층적인 구조로 되어 있다. 도메인 네임 스페이스는 여러 개의 네임서버가 계층적으로 구성된 구조를 추상화한 개념이다. 

  • 루트(Root): 도메인 네임 스페이스의 최상위에 위치하며, 모든 DNS 쿼리의 출발점이다. 사용자가 입력한 도메인을 관리하는 네임 서버의 IP 주소를 알려준다.
  • 최상위 도메인(Top-Level Domain, TLD): 루트 바로 아래에 위치한다. (ex, ".com")
  • 2차 수준 도메인(Second-Level Domain, 2LD): TLD 바로 아래에 위치한다. (ex, "naver.com")
  • 서브 도메인(Subdomain):  2차 수준 도메인 아래에 위치한다. (ex, "www", "mail", "blog")

Local DNS 서버

사용자가 도메인 이름을 입력했을 때 상응하는 IP 주소를 찾기 위해 가장 먼저 찾게 되는 DNS 서버이다. 기본적으로 컴퓨터의 LAN 선을 통해 인터넷이 연결되면, 인터넷을 사용할 수 있게 IP를 할당해주는 통신사(KT, LG, SK 등)가 있다. 그리고 각 통신사의 DNS 서버가 등록된다. 즉, KT를 사용하면 KT DNS가, SK를 사용하면 SK DNS가 셋팅된다. 

 

도메인 이름에 해당하는 IP 주소를 찾기 위해 먼저 Local DNS 서버에 접근하고, 없으면 Root 서버에 접근하게 된다.

DNS Resolver

이때 DNS 쿼리를 질의하는 주체는 DNS 클라이언트인데, 운영체제나 컴퓨터에 설치된 특정 응용 프로그램들이 DNS 클라이언트의 역할을 수행한다.

  • 대부분의 운영체제들은 DNS 클라이언트를 내장하고 있다. 
  • 대부분의 웹 브라우저는 사용자가 도메인 이름을 입력하면 내부적으로 DNS 클라이언트를 사용한다. 또 다른 예로 이메일 클라이언트가 있는데, 사용자가 이메일 주소를 입력하면 내부적으로 해당 이메일 주소에 대한 메일 서버를 찾기 위해 DNS 클라이언트를 사용한다.

DNS Resolver는 사용자의 컴퓨터나 네트워크에 위치한 DNS 클라이언트로, 사용자가 도메인 이름을 입력하면, 해당 도메인 이름을 IP 주소로 변환하기 위해 DNS 서버에 요청하여 질문하는 역할을 한다. 

동작 방식

  1. 사용자가 도메인 이름을 입력하면, 먼저 Local DNS Server의 캐시에서 해당 도메인에 대한 IP 주소를 확인한다. 
  2. 해당 정보가 존재하지 않거나 TTL(Time To Live)이 만료된 경우, Local DNS 서버는 루트 DNS 서버부터 시작하여 해당 도메인 이름에 대한 네임서버 정보를 요청한다.
  3. 루트 서버는 최상위 도메인(TLD)의 네임서버 정보를 제공한다.
  4. 최상위 도메인 네임서버는 도메인의 네임서버 정보를 제공한다.
  5. 이러한 과정은 요청한 도메인 이름의 IP 주소를 찾을 때까지 계속된다.

DNS 레코드

각 레코드는 name, value, type, TTL 4개의 필드로 구성된다. 그리고 이때 type은 A, NS, CNAME, MX 등이 될 수 있는데, A와 NS에 대해 알아보자.

  • NS(Name Server): 해당 도메인 이름을 관리하는 네임서버의 도메인 이름을 알려준다.
    • name: 도메인 이름
    • value: 해당 도메인을 관리하는 네임서버의 도메인 이름
  • A 레코드
    • name: 도메인 이름
    • value: IP 주소

예를 들어 사용자가 "hanyang.edu"를 입력하면 루트 서버에는 다음과 같이 저장되어 있다.

name value type TTL
.edu dns.edu NS ...
dns.edu 2.2.2.2 A  

 

  1. .edu를 관리하는 네임서버의 도메인 이름은 dns.edu이다. 그리고 dns.edu의 실제 IP 주소는 2.2.2.2이다.
  2. 다음으로 2.2.2.2로 접속하여 해당 서버에게 "hanyang.edu"의 IP 주소를 요청한다.
  3. 이런 과정을 반복하고, NS + A레코드가 아닌 A레코드만 받게 되면, 해당 IP 주소가 "hanyang.edu"의 IP 주소가 되는 것이다.

UDP

DNS도 HTTP와 같이 어플리케이션 계층의 프로토콜이다. 그러나 TCP를 사용하는 HTTP와 달리 DNS는 UDP를 사용한다.

 

그렇다면 UDP를 사용하는 이유는 무엇일까? 

  • UDP는 빠르지만 데이터 유실 가능성이 있다. 
  • DNS 통신에서는 데이터 유실 확률이 적다. 도메인 이름과 IP 주소를 갖는 데이터는 그 크기가 작기 때문에 유실 확률이 적고, 유실되더라도 그 데미지가 적다. (반면, HTTP 통신에서의 데이터는 그 크기가 크다.)
  • DNS는 결국 HTTP 통신을 위한 준비 과정이다. 따라서 굳이 매번 연결을 맺으며 통신하는 비용을 들일 필요가 없고, 빠른 통신이 좋다. 

Reference

'CS > Network' 카테고리의 다른 글

전송 계층: UDP, TCP  (1) 2024.03.26
소켓(Socket)  (0) 2024.03.26
애플리케이션 계층: HTTP  (0) 2024.03.26
PDU, SDU  (0) 2023.12.09
네트워크의 형태(PAN, LAN, MAN, WAN), ISP  (0) 2023.11.27