애플리케이션 계층 3

BinaryHyeok·2023년 10월 25일
0

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

  • DNS(domain name system)
    • 호스트 이름을 IP 주소로 변환해주는 디렉터리 서비스
    • DNS 서버들의 계층구조로 구현된 분산 데이터베이스
    • 호스트가 분산 데이터베이스로 질의하도록 허락하는 애플리케이션 계층 프로토콜

사용자의 호스트에서 수행되는 브라우저가 URL www.abc.efg를 요청할 때 사용자의 호스트는 HTTP 요청 메시지를 웹 서버 www.abc.efg로 보낼 수 있도록 IP 주소를 얻어야 한다. 이 과정은 다음과 같이 수행된다.

  1. 사용자 컴퓨터는 DNS 애플리케이션의 클라이언트 측을 수행한다.
  2. 브라우저는 URL로부터 호스트 이름 www.abc.efg를 추출하고 그 호스트 이름을 DNS 애플리케이션의 클라이언트 측에 넘긴다.
  3. DNS 클라이언트는 DNS 서버로 호스트 이름을 포함하는 질의를 보낸다.
  4. DNS 클라이언트는 호스트 이름에 대한 IP 주소를 가진 응답을 받는다.
  5. 브라우저가 DNS로 부터 IP 주소를 받으면, 브라우저는 해당 IP 주소와 그 주소의 80번 포트에 위치하는 HTTP 서버 프로세스로 TCP 연결을 초기화 한다.

DNS는 호스트 이름을 IP 주소로 변환해주는 것 이외에도 다양한 추가 서비스를 제공한다.

  • host aliasing : 복잡한 호스트 이름을 가진 호스트는 하나 이상의 별명을 가질 수 있다. DNS는 호스트의 IP 주소뿐만 아니라 제시한 별칭 호스트 이름에 대한 정식 호스트 이름을 얻기 위해 이용될 수 있다.
  • mail server aliasing : DNS는 호스트의 IP 주소뿐만 아니라 제공된 별칭 호스트 이름에 대한 정식 호스트 이름을 얻기 위해 메일 애플리케이션에 의해 수행된다.
  • load distribution : DNS는 중복 웹 서버 같은 여러 중복 서버 사이에 부하를 분산하기 위해서도 사용되고 있다. 인기 사이트는 여러 서버에 중복되어 있어서, 각 서버가 다른 종단 시스템에서 수행되고 다른 IP 주소를 가진다. DNS 데이터베이스는 이러한 IP 주소 집합을 가지고 있으며, 클라이언트가 주소 집합으로 매핑하는 호스트 이름에 대한 DNS 질의를 하면 서버는 IP 주소 집합 전체를 가지고 응답한다. 각 응답에서 주소는 순환식으로 보낸다.

DNS 동작 원리 개요

DNS 서버가 모든 매핑을 포함하는 하나의 인터넷 네임 서버라고 생각한다면 다음과 같은 문제점들이 있다.

  • 서버의 고장 : 이 서버가 고장나면, 전체 인터넷이 동작하지 않는다.
  • 트래픽양 : 단일 DNS 서버가 모든 DNS 질의를 처리해야 한다.
  • 먼 거리의 중앙 집중 데이터베이스 : 단일 DNS 서버가 모든 질의 클라이언트로부터 가까울 수 없다. 이는 매우 먼 거리일 때 심각한 지연을 발생시킨다.
  • 유지관리

결과적으로 DNS는 분산되도록 설계되었다.

분산 계층 데이터베이스

확장성 문제를 다루기 위해 DNS는 많은 서버를 이용하고 이들을 계층 형태로 구성하며 전 세계에 분산시킨다. 다음 그림에서 DNS 계층으로 구성된 세 유형의 DNS가 있다.

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

Ex) 호스트 dd.abc.efg가 dd.xyz.xy의 IP주소를 원한다고 가정한다.

dd.abc.efg에 대한 로컬 DNS가 dns.abc.efg이고, dd.xyz.xy에 대한 책임 DNS 서버는 dns.xyz.xy이다.

  1. dd.abc.efg가 자신의 DNS서버에게 DNS 질의 메시지를 보낸다. 질의에는 호스트 네임 dd.xyz.xy가 포함된다.
  2. 로컬 DNS 서버는 그 질의 메시지를 루트 DNS 서버에게 전달한다.
  3. 루트 DNS 서버는 xy를 인식하고, xy에 대한 책임을 가진 TLD 서버의 IP 주소 목록을 로컬 DNS 서버에게 보낸다.
  4. 로컬 DNS 서버는 질의 메시지를 TLD 서버로 보낸다.
  5. TLD 서버는 xyz.xy를 인식하고 dns.xyz.xy로 이름 지어진 책임 DNS 서버의 IP 주소로 응답한다.
  6. 마지막으로 로컬 DNS 서버는 dns.xyz.xy로 질의 메시지를 보내고, dd.xyz.xy로 응답한다.

이 예에서 하나의 호스트 이름 매핑을 얻기 위하여 질의 메시지 4번, 응답 메시지 4번으로 총 8번의 DNS 메시지가 보내졌다.

DNS 캐싱

DNS는 지연 성능 향상과 네트워크의 DNS 메시지 수를 줄이기 위해 캐싱을 사용한다. DNS 서버가 DNS 응답을 받았을 때, 로컬 메모리에 응답에 대한 정보를 저장할 수 있다. 위의 예에서 로컬 DNS 서버 dd.abc.efg는 임의의 DNS 서버로부터 응답을 받을 때마다 응답에 포함된 정보를 저장할 수 있다. 호스트 DNS와 IP 주소 사이의 매핑은 영구적인 것이 아니기 때문에 DNS서버는 일정 시간 이후에 저장된 정보를 제거한다.

DNS 레코드와 메시지

DNS 분산 데이터베이스를 구현한 DNS 서버들은 호스트 이름을 IP 주소로 매핑하기 위한 자원 레코드를 저장한다. 각 DNS는 하나 이상의 자원 레코드를 가진 메시지로 응답한다.
자원 레코드는 다음과 같은 필드를 포함하는 4개의 튜플로 이루어져 있다.

(Name, Value, Type, TTL)

TTL(time to live)은 자원 레코드의 생존 기간이다. Type에 따라 Name과 Value의 의미는 달라진다.

  • Type = A
    • Name: 호스트 이름
    • Value: 호스트 이름에 대한 IP 주소
    • Ex) (xyz.xy.com, 123.12.12.123, A)
  • Type = NS
    • Name: 도메인
    • Value: 도메인 내부의 호스트에 대한 IP 주소를 얻을 수 있는 방법을 아는 책임 DNS 서버의 호스트 이름
    • Ex) (xyz.com, dns.xyz.com, NS)
  • Type = CNAME
    • Name: 정식 호스트 이름
    • Value: 별칭 호스트 이름
    • Ex) (xyz.com, dd.xyz.com, CNAME)
  • Type = MX
    • 메일 서버의 호스트 이름이 간단한 별칭을 갖는 것을 허용
    • 메일 서버의 정식 이름을 얻기 위해 DNS 클라이언트는 MX 레코드에 대한 질의
    • 다른 서버의 정식 이름을 얻기 위해 DNS 클라이언트는 CNAME 레코드에 대한 질의

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

DNS의 통신 프로토콜

DNS는 TCP가 아닌 UDP를 사용한다. DNS를 통하여 IP 주소를 받아올 수 있게 되는데, TCP로 연결하게 된다면 IP를 가져오는 과정에서 여러번의 통신 연결 과정이 생기고 이는 오버헤드가 일어날 수 있다. 또한 메시지의 크기가 매우 작아 유실될 가능성도 낮으며, 유실되더라도 메시지의 크기가 작기 때문에 다시 수행하면 된다.
따라서 DNS는 UDP를 선택하였다.

Reference

KOCW - 컴퓨터 네트워크
컴퓨터 네트워킹 하향식 접근

0개의 댓글