본문 바로가기
네트워크

[네트워크] Chap 2.5 - DNS

by 개발 고양이 2024. 11. 15.

DNS (Domain Name System)

우리가 특정 웹사이트에 접근하기 위해서는 해당 서버의 IP address를 알아야 하는데, 우리는"xxxx.com"과 같은 domain name (host name)밖에 모른다. 이 때 DNS를 이용하여 IP 주소를 찾을 수 있다.

 

DNS는 client-server 구조로 짜여진 L5의 application protocol로, L4로는 UDP를 사용한다.

IP address와 host name(URL or FQDN: Fully Qualified Domain Name)을 매핑시키는 역할을 한다.

 

IP address (32bit) : 머신이 읽을 수 있는 주소로, datagram 주소 지정에 사용
// 32bit는 IPv4이다 (0~255)

 

host name (URL or FQDN) : 사람이 사용하는 주소

 (ex. www.yahoo.com) ← 이 전체를 FQDN (Fully Qualified Domain Name) 이라고 한다.

      host이름 / 동네 이름

 

 

DNS의 가장 기본적인 기능은 IP주소를 알아내는 것이지만, hostname ↔ IP address 다 가능

  1. Forwarding DNS (정방향 DNS) : hostname → IP address
  2. Reverse DNS (역방향 DNS) : IP address → hostname (receiving mail server가 sending mail server를 인증하기 위해 사용됨)

DNS service, structure

DNS가 제공하는 service들

    1. Forwarding DNS (정방향 DNS) : hostname → IP address
    2. Reverse DNS (역방향 DNS) : IP address → hostname (receiving mail server가 sending mail server를 인증하기 위해 사용됨)hostname → IP address 변환
      DNS의 가장 기본적인 기능은 IP주소를 알아내는 것이지만, hostname ↔ IP address 다 가능
  • host aliasing
  • mail server aliasing
  • load distribution
    : 동일한 도메인에 접근하는 클라이언트들에게 IP address를 distributed하게 매핑시켜줌

 

centralize DNS로 쓰지 않는 이유

- single point of failure : 걔가 없어지면 망함

- traffic volume : 그 server로 밀려 들어오는 traffic들을 감당하기 어려움

- distant centralized database : 멀다 → 느리다

- maintenance : 유지보수가 어려움.

 


DNS : Distributed, hierarchical database

 

 

Root DNS Servers

- 최상위 서버

- TLD server의 (hostname & IP address) pair를 가지고 있음

 

TLD (Top-Level Domain) Servers

- authoritative server의 (hostname & IP address) pair를 가지고 있음

 

 

Authoritative domain servers

- 해당 기관 or ISP가 소유하고 있는 DNS 서버

- 최종 host들의 (hostname & IP address) pair를 가지고 있음

- organization or service provider에 의해 유지보수

 

 

LDNS (Local DNS name servers)

client와 같은 ISP에 속한 local한 DNS server이다.

각 지역의 ISP, company, university 등이 하나씩 소유 → default name server 라고도 함.

client가 DNS query를 보낼때, 직접 root server한테 보내지 않고 LDNS에 보낸다. 

일종의 proxy 역할을 한다. (특별히 어느 계층에 있는건 아님)

 


DNS name resolution - iterated & recursive

iterated query

1. client가 자신이 속한 ISP의 LDNS server에 DNS query를 보냄. 

 

2. LDNS가 root server에게 .edu의 TLD server의 IP 주소를 묻는다 (root hints file)

//만약 LDNS (proxy)가 최종 목적지의 IP address를 알고 있다면 바로 감

 

3. root server가 LDNS에게 .edu의 TDL server IP address를 알려줌

 

4,5. LDNS가 TDL server에게 authoritative DNS server의 IP address를 요청 후 받음

 

6,7. LDNS가 authoritative server에게 최종 host의 IP 주소를 요청, 받음.

 

8. 실려온 최종 IP address로 TCP connection을 맺는다.

 

iterated query 방식의 단점

: LDNS가 busy하다.

 

 

 

 

recursive query

 

requesting host가 LDNS 서버에 query를 보내면

root DNS server는 TLD server한테

TLD server는 authoritative server한테 요청한다.

 

 

5, 6, 7에서 다 최종 web server의 IP address가 실려간다.

 

 

 

 

 

 

 

 

 

 

recursive query 방식의 단점

: root DNS server의 overhead가 커진다.
: 윗계층의 traffic이 증가해 오버헤드가 커짐

=> 이런 이유 떄문에 server가 OK 해야지만 함. 항상 들어주지 않음.


DNS records

 

type = A

hostname으로 IP address를 알고 싶을때 사용한다

 

type = CNAME

별칭 host 이름 (host alias name)으로 실제 host 이름 (canonical name)을 알고싶을 때 사용한다

 

type = NS

도메인 이름으로 실제 host 이름을 알 수 있는 authoritative DNS 서버의 host name을 알고싶을 때 사용한다

 

type = MX
도메인 이름으로 메일 서버의 실제 host name을 알고 싶을 때 사용한다


DNS protocol, messages

맨 위부터 3줄까지가 header, 그 뒤가 payload이다.

 

identification

:16bit

:queyr를 보낼 때 지정한 id를 reply id에 복사
=> reply 를 받으면, 이 id 값을 보고 어떤 질문에 대한 reply인지 식별 가능

flag

:16bit로, 16개의 flag가 가능하다.아래 정보들이 담긴다.
- 현재 주고받는 데이터가 query인지 reply인지 구분
- recursion을 요구하는지 결정 (recursion desired)