본문 바로가기
네트워크

DNS

by SpearZero 2024. 1. 22.

2.4 DNS: 인터넷의 디렉터리 서비스

인터넷 호스트는 호스트 이름(hostname)으로 식별할 수 있다.

호스트 이름은 영문자와 숫자로 되어있으므로 라우터가 처리하는데 어려움이 있다. 이러한 이유로 호스트는 IP 주소(IP address)로도 식별된다.

2.4.1 DNS가 제공하는 서비스

DNS(domain name system)는 호스트 이름을 IP 주소로 변환해준다.

DNS는

  1. DNS 서버들의 계층구조로 구현된 분산 데이터베이스이다.
  2. 호스트가 분산 데이터베이스로 질의하도록 허락하는 애플리케이션 프로토콜이다.

DNS 프로토콜은 UDP상에서 수행되고, 포트번호는 53번을 이용한다.

 

DNS는 호스트 이름을 IP 주소로 변환하는 것 외에 다음과 같은 중요한 추가 서비스를 제공한다.

  • 호스트 에일리어싱(host aliasing) : 별칭 호스트 이름에 대한 정식 호스트 이름을 얻기 위해 이용될 수 있다.
  • 메일 서버 에일리어싱(mail server aliasing) : 메일 서버에 대해 별칭 호스트 이름에 대한 정식 호스트 이름을 얻기 위해 이용될 수 있다. MX 레코드는 기업의 메일 서버와 웹 서버가 같은 호스트 이름을 갖는 것을 허용한다.
  • 부하 분산(load distribution) : 중복 웹 서버의 경우, 여러 IP 주소가 하나의 정식 호스트 이름과 연관되어 있다. DNS 데이터베이스는 이 IP 주소 집합을 갖고 있다. 클라이언트가 주소 집합으로 매핑하는 호스트 이름에 대한 DNS 질의를 하면, 서버는 IP 주소 집합 전체를 가지고 응답한다. 그러나 각 응답에서의 주소는 순환식으로 보낸다.

2.4.2 DNS 동작 원리 개요

DNS는 중앙 집중 방식을 사용하지 않는다. 그 이유는 다음과 같다.

  1. 서버의 고장 : 단일 서버이기 때문에 고장이나면 전체 인터넷이 동작하지 않음
  2. 트래픽 양 : 모든 DNS 질의를 처리해야 한다.
  3. 먼 거리의 중앙 집중 데이터베이스 : 단일 DNS 서버가 모든 질의 클라이언트로부터 가까울 수많은 없다. 거리에 따라 어느 곳은 심한 응답 지연을 겪을 수 있다.
  4. 유지관리 : 모든 인터넷 호스트에 대한 레코드를 유지하고 관리해야 한다.

중앙 집중 데이터베이스는 확장성이 전혀 없다. 결과적으로 DNS는 분산되도록 설계되었다.

분산 계층 데이터베이스

확장성 문제를 다루기 위해 DNS는 많은 서버를 이용하고 이들을 계층 형태로 구성하여 전 세계에 분산시킨다.

  • 루트 DNS 서버 : 1000개 이상의 루트 서버 인스턴스가 전세계에 흩어져 있다. 루트 서버들은 13개의 다른 루트 서버 복사체이고, 12개의 다른 기관에서 관리되며, 인터넷 할당 번호 관리기관에 의해 조정된다.
  • 최상위 레벨 도메인(TLD) 서버 : com, org. net, edu, gov 같은 상위 레벨 도메인과 kr, uk, fr, ca, jp 같은 모든 국가의 상위 레벨 도메인에 대한 TLD 서버가 있다. TLD 서버는 책임 DNS 서버에 대한 IP 주소를 제공한다.
  • 책임 DNS 서버 : 인터넷에서 접근하기 쉬운 호스트를 가진 모든 기관은 호스트 이름을 IP 주소로 매핑하는 공개적인 DNS 레코드를 제공해야 한다. 기관의 책임 DNS 서버는 이 DNS 레코드를 갖고 있다. 또한 기관은 이 레코드를 갖도록 자신의 책임 DNS 서버의 구현을 선택할 수 있고, 일부 서비스 제공자의 책임 DNS 서버에 이 레코드를 저장하도록 비용을 지불한다. 대부분의 대학과 큰 기업들은 자신의 기본 책임 DNS 서버와 보조책임DNS 서버를 유지하고 구현한다.

로컬 DNS 서버

  • ISP들은 로컬 DNS를 갖는다.
  • 호스트가 DNS에 질의를 보내면, 이 질의는 먼저 프록시로 동작하는 로컬 DNS 서버에게 전달되고, 그 로컬 DNS 서버는 이 질의를 DNS 서버에 전달한다.

반복적 질의

반복적 질의

재귀적 질의

재귀적 질의

DNS 캐싱

DNS는 지연 성능 향상과 네트워크의 DNS 메시지 수를 줄이기 위해 캐싱을 사용한다.

 

만약 호스트 이름과 IP 주소 쌍이 DNS 서버에 저장되고 다른 호스트 이름으로부터 같은 질의가 DNS 서버로 도착한다면, DNS 서버는 호스트 이름에 대한 책임이 없을 때조차 원하는 IP 주소를 제공할 수 있다. 호스트 DNS와 IP 주소 사이의 매핑과 호스트는 영구적인 것이 아니기 때문에 DNS 서버는 어떤 기간 이후에 저장된 정보를 제거한다.

2.4.3 DNS 레코드와 메시지

DNS 분산 데이터베이스를 구현한 DNS 서버들은 호스트 이름을 IP 주소로 매핑하기 위한 자원 레코드(resource record, RR)를 저장한다. 각 DNS는 하나 이상의 자원 레코드를 가진 메시지로 응답한다.

 

자원 레코드는 다음과 같은 필드를 포함하는 4개의 튜플(tuple)로 되어 있다.

 

(Name, Value, Type, TTL)

 

TTL은 자원 레코드의 생존 기간(time to live)이다.(자원이 캐시에서 제고되는 시간을 결정)

  • Type=A이면, Name은 호스트 이름, Value는 호스트 이름에 대한 IP 주소이다. 따라서 Type A레코드는 표준 호스트 이름과 IP 주소 매핑을 제공한다.
    • ex) (relay1.bar.foo.com, 145.37.93.126, A)
  • Type=NS이면, Name은 도메인이고 Value는 도메인 내부의 호스트에 대한 IP 주소를 얻을 수 있는 방법을 아는 책임 DNS 서버의 호스트 이름이다.
    • ex) (foo.com, dns.foo.com, NS)
  • Type=CNAME이면, Value는 별칭 호스트 이름 Name에 대한 정식 호스트 이름이다. 이 레코드는 질의 호스트에게 호스트 이름에 대한 정식 이름을 제공한다.
    • ex) (foo.com, relay1.bar.foo.com, CNAME)
  • Type=MX이면, Value는 별칭 호스트 이름 Name을 갖는 메일 서버의 정식 이름이다. MX 레코드는 메일 서버와 호스트 이름이 간단한 별칭을 갖는 것을 허용한다. 어떤 회사는 한 메일 서버와 다른 서버들이 같은 별칭을 가질 수 있다. 메일 서버의 정식 이름을 얻기 위해 DNS 클라이언트는 MX 레코드에 대한 질의를 한다. 다른 서버의 정식 이름을 엊기 위해 DNS 클라이언트는 CNAME 레코드에 대한 질의를 한다.
    • ex) (foo.com, mail.bar.foo.com, MX)

한 DNS 서버가 특별한 호스트 이름에 대한 책임 서버이면, 그 DNS 서버는 그 호스트 이름에 대한 Type A 레코드를 포함한다.

 

한 DNS 서버가 TLD 서버이면 그 서버는 호스트 이름을 포함하는 도메인에 대한 Type NS 레코드를 포함할 것이고, NS 레코드의 Value 필드에 DNS 서버의 IP 주소를 제공하는 Type A 레코드도 포함할 것이다.

  • 예를 들어, 호스트 gaia.cs.umass.edu에 대한 책임 서버가 아닌 TLD 서버를 가정하자. 그러면 이 서버는 호스트 gaia.cs.umass.edu를 포함하는 도메인에 대한 레코드, (umass.edu, dns.umass.edu, NS)를 포함할 것이다. TLD 서버는 또한 Type A 레코드를 포함하는데, 이는 DNS 서버 dns.umass.edu를 IP 주소 (dns.umass.edu, 128.119.40.111, A)로 매핑한다.

'네트워크' 카테고리의 다른 글

UDP  (0) 2024.01.29
트랜스포트 계층 개요, 다중화와 역다중화  (0) 2024.01.26
웹과 HTTP  (0) 2024.01.15
네트워크 애플리케이션의 원리  (1) 2024.01.10
프로토콜 계층과 서비스 모델  (0) 2024.01.07