본문 바로가기
COMPUTER SCIENCE/Network

[Network] Application Layer - DNS

by 민트맛녹차 2022. 11. 23.

Internet host 는 hostname 을 사용하여 host 를 식별한다. hostname 의 예로 'www.google.com', 'www.naver.com' 등이 있다. hostname 은 가변 길이의 알파벳으로 이루어진 인간이 사용하는 표현이므로 router 가 처리하기에는 어려움이 있어  IP address 를 사용하여 host 를 식별할 수 있다. IP address 는 32bit 고정 길이의 주소로 엄격한 계층 구조를 가진다. 

 

Services Provided by DNS

우리는 인간이 사용하는 hostname 을 router 가 사용할 수 있게 IP address 로 바꾸어 주는 service 가 필요하고, 이러한 일을 하는 system 을 Domain Name System(DNS) 라고 한다. DNS 는 계층적인 DNS server 로 구현된 distributed database 이며 host 가 distributed protocol 에 query 하도록 하는 application-layer protocol 이다. UDP 를 사용하며 53 port 를 가진다. DNS 는 주로 다른 application-layer protocol 들이 hostname 을 IP address 로 변환할 때 사용된다.

DNS 는 hostname 을 IP address 로 바꾸는 것 이외에 몇 가지 service 를 추가적으로 제공한다.

  • Host aliasing : 복잡한 hostname 을 가진 host 는 한 개 이상의 alias name 들을 가질 수 있다. origin hostname 을 canonical hostname 이라고 하는데, DNS 는 alias name 을 통해 canonical hostname 과 IP address 를 얻을 수 있다.
  • Mail server aliasing : 우리가 실제로 사용하는 e-mail address 는 단순화된 형태의 alias name이고 mail server 의 canonical hostname 이 존재한다. DNS 는 alias name 을 통해 canonical hostname 과 IP address 를 얻을 수 있다.
  • Load distribution :  replicatied server 들은 다른 end system 과 다른 IP address 를 가지지만, 하나의 canonical hostname 을 가진다. DNS 는 replicated server 사이에서 traffic 을 분배하는 load distribution 을 수행한다.

DNS 의 가장 간단한 구조는 centralized design 지만, 다음과 같은 이유로 scale 이 불가능하기 때문에 DNS 는 distributed design 을 사용한다.

  • A single point of failure
  • traffic volume
  • distant centralized database
  • maintenance

 

Hierarchy of DNS Servers

DNS 는 hierachial 하고 distributed 된 많은 server 들을 사용한다. DNS server 의 계층 구조에 속해있는 server에는 root DNS server, top-level domain(TLD) DNS server, authoritative DNS server 가 있다.

'www.amazon.com' 의 IP address 를 찾는 간략한 과정은 다음과 같다.

  1. client 는 root server 에 query를 보내 'com' 의 TLD server 의 IP address 를 받는다.
  2. client 는 TLD server 에 query를 보내 'amazon.com' 의 authoritative server 의 IP address 를 받는다.
  3. client 는 authoritative server 에 query 를 보내 'www.amazon.com' 의 의 IP address 를 받는다. 

Root DNS Server

Root name server 는 TLD server 의 IP address 를 제공한다.

TLD Server

com, org, edu 와 같은 top-level domain 과 kr, uk, fr 같은 country top-level domain 들은 모두 TLD server 를 가진다. 

TLD server 는 authoritative DNS server 의 IP address 를 제공한다.

Authoritative DNS Server

hostname 을 IP address 로 매핑한 DNS record 를 제공하며 DNS record 를 보관한다.

Local DNS Server

위에 언급한 세 가지 server 들과 달리, local DNS server 는 계층 구조에 엄격하게 속하지 않지만 DNS architecture 의 중심 역할을 한다. ISP 는 local DNS server(default name server) 를 가지고 있어, host 가 ISP 에 연결하면 ISP 는 하나 이상의 local DNS server 의 IP address 를 제공한다. host 가 DNS query 를 날리면, local DNS server는 proxy 처럼 행동하여 query 를 받아 DNS server hierachy 로 query 를 forwarding 한다. 

 

How DNS Works

DNS 의 작동과정의 예를 보자. host 인 'cse.nyu.edu' 가 'gaia.cs.umass.edu' 의 IP address 를 원하고, 'cse.nyu.edu' 의 local DNS server 는 'dns.nyu.edu', 'gaia.cs.umass.edu' 의 authoritative DNS server 는 'dns.umass.edu' 라고 하자.

  1. host 인 'cse.nyu.edu' 는 local DNS server 인 'dns.nyu.edu' 로 query 를 보낸다. 이때 query message 에는 IP address 로 변경하고 싶은 hostname 인  'gaia.cs.umass.edu' 가 포함되어 있다.
  2. Local DNS server 는 root DNS server 로 query message 를 보낸다. 
  3. Root DNS server 는 'edu' 를 확인하여, 'edu' 에 대한 TLD server 들의 IP address 의 list 를 local DNS server 로 보낸다. 
  4. Local DNS server 는 TLD server 들 중 하나에 query message 를 보낸다.
  5. TLD server 는 'umass.edu' 를 확인하여, 'umass.edu' 에 대한 authoritative DNS server, 즉 'dns.umass.edu' 의 IP address 를 보낸다. 
  6. Local DNS server 는 authoritative DNS server 인 'dns.umass.edu' 에 query message 를 보낸다.
  7. Authoritative DNS server 는  'gaia.cs.umass.edu' 의 IP address 를 Local DNS server 에 보낸다.
  8. Local DNS server 는  'gaia.cs.umass.edu' 의 IP address 를 host 에게 보낸다.

이렇게 4개의 query message 와 4 개의 reply message, 총 8개의 DNS message 가 보내진다. 

위의 예는 TLD server 가 hostname 의 authoritative DNS server 를 알고있다는 가정이 있었다. 만약, TLD server 는  intermediate DNS server 만 알고 intermediate DNS server 가 authoritative DNS server 를 안다면 추가적인 query - reply 가 생겨 총 10 개의 DNS message 가 보내질 것이다.

 

DNS Caching

위의 예시는 DNS cache 를 고려하지 않은 예시였다. DNS 는 지연 성능을 향상시키고 DNS message 를 줄이기 위해 DNS caching 을 폭넓게 사용한다. DNS server 가 DNS reply 를 받을 때, mapping 을 local memory 에 캐시한다. 캐시된 hostname 에 대해 query 가 오면 DNS server 는 캐시된 정보를 사용해 추가적인 DNS 와의 작용 없이 IP address 를 return 한다. TLD server 는 보통 local DNS server 에 캐시되어 있어, root DNS server 는 잘 방문하지 않는다. hostname 과 IP address 의 mapping 은 영구하지 않기 때문에, 일정 기간이 지나면 DNS server 는 cached information 을 삭제한다.

DNS cache 의 예를 들어보자. 'gaia.cs.umass.edu' 에 대한 IP address가 local DNS server인 'dns.nyu.edu' 에 캐시되어 있다고 하자. host 가 local DNS server 에 'gaia.cs.umass.edu' 의 IP address 를 요청하면, 다른 server 와의 query chain 없이 IP address 를 return 한다.

 

 

참조
Computer Networking _ A Top Down Approach, 7th, converted

댓글