본문 바로가기

Computer Science/네트워크

[쉽게 배우는 데이터 통신과 네트워크] CH14. DNS

반응형
SMALL

01 DNS(Domain Name System) 서비스

인터넷의 규모가 커지면서 호스트 파일을 수작업으로 관리할 수 없게 되었고, 이를 계기로 DNS 서비스가 탄생하게 되었다.

 

1 IP 주소 체계

인터넷에서는 32비트의 이진수로 된 IP 주소로 호스트를 구분한다.

  • 32비트의 주소를 네 부분으로 나누어 8비트의 십진수인 www.xxx.yyy.zzz 형태로 표현한다.
  • Ex. 211.223.201.29

 

클래스 IP 주소 범위 네트워크 주소 호스트 주소
A 0~127 www xxx.yyy.zzz
B 128~191 www.xxx yyy.zzz
C 192~223 www.xxx.yyy zzz

🔼 IP 주소 클래스

  • IP 프로토콜의 유니캐스트 주소 체계는 클래스별로 구분할 수 있다.
  • 구분 기준은 네트워크 주소와 호스트 주소를 표시할 수 있는 비트의 크기이다.

 

IP 주소 클래스별 주소 표현 범위

  • 클래스 A : 호스트를 표현할 수 있는 주소 범위는 2^24로 매우 많은 호스트를 수용할 수 있다.
  • 클래스 B : 호스트를 16비트로 표현하기 때문에 2^16개를 지원한다.
  • 클래스 C : 호스트 주소를 표현하는 공간이 2^8으로 상대적으로 적은 수의 호스트를 수용한다.
  • 클래스 D : 멀티캐스팅을 지원한다. (A~C는 유니캐스팅 지원)
  • 호스트 주소를 표현하는 모든 비트의 값이 0이면 해당 서브넷 자체를, 모두 1이면 서브넷에 포함된 모든 호스트를 지칭한다.

 


2 DNS 필요성

  • 인터넷 사용자가 호스트를 지칭할 때는 문자형의 도메인 이름(Domain Name)으로 주소를 표현한다.
  • 도메인 이름을 네트워크에서 사용하기 위해 IP 주소로 변환하는 과정이 필요하다.
  • 다음과 문제점을 해결하기 위해 고안된 것이 DNS 서비스이다.
    • 컴퓨터 보급이 늘면서 호스트 파일을 수작업으로 관리하기 어려워졌다. (한 시스템에서 모든 호스트 정보를 유지하기가 불가능)
    • 도메인 이름을 중복 사용하지 않도록 통제하기 쉽지 않다.
  • 계층 구조를 지원하는 도메인 기반의 주소 표기 방법을 위한 분산 데이터베이스 시스템이다.

 

% nslookup information.korea.co.kr # 호스트의 IP 주소를 얻기 위한 명령어
Server: server.korea.co.kr # DNS 서버의 도메인 이름
Address: 211.223.201.30 # DNS 서버의 IP 주소
Name: information.korea.co.kr
Address: 211.223.201.29
%
  • nslookup 명령어
    • 유닉스 시스템에서 지원한다.
    • DNS를 이용해 주소 변환 요구를 수행하는 대화형 프로그램이다.
  • 도메인 이름이 information.korea.co.kr인 호스트의 IP 주소를 얻기 위한 명령 과정이다.
  • information.korea.co.kr의 IP 주소가 211.223.201.29임을 알 수 있다.

 

✔️ 도메인 네임 스페이스

  • 트리 구조의 네임 스페이스를 비롯해 데이터에 대한 이름 관련 규칙을 정의한다.
  • Ex. 인터넷에서 특정 도메인 이름을 사용하는 호스트의 IP 주소 자원을 요청하는 질의에 대해 IP 주소를 반환한다.

 

✔️ 네임 서버

  • 네임 스페이스의 트리 구조와 트리에 보관된 정보 집합체를 관리하는 프로그램이다.
  • 일반적으로 자신이 관리하는 도메인 공간에 관한 정보를 책임진다.
  • 전체 도메인 구조의 다른 부분 정보를 제공하기 위한 네임 서버 포인터를 가지고 있다.

 

✔️ 해석기

  • 네임 서버로부터 클라이언트의 요청 정보를 얻어내는 프로그램이다.
  • 최소 하나 이상의 네임 서버와 접촉하며, 네임 서버의 정보를 이용해 응용 프로그램의 질의에 응답한다.
  • 처음 접촉한 네임 서버에 도메인 정보가 없으면 다른 네임 서버에 접속해 계속 질의한다.

 


02 도메인 네임 스페이스

도메인 네임 스페이스는 DNS가 저장/관리하는 계층적 데이터베이스이다.

 

1 도메인 네임 스페이스의 구조

계층 구조의 네임 스페이스에서 호스트의 각 레이블은 점(.)으로 구분하고, 최상위부터 순차적으로 계층적 소속 관계를 나타낸다.

 

도메인 네임 스페이스(RFC 1034 참고)

  • 도메인 네임 스페이스는 계층적인 트리 구조를 지원한다.
  • 도메인 이름은 최하위 호스트의 레이블을 맨 왼쪽에 두고, 상위 노드로 이동하면서 점(.)으로 구분한 레이블 이름을 연속으로 붙인다.
    • Ex. 최하위에 위치한 xx 호스트의 도메인 이름은 xx.lcs.mit.edu이다.
    • edu와 같이 루트 바로 밑에 위치한 호스트는 TLD(Top Level Domain)이라 부르며, 도메인 이름의 맨 오른쪽에 위치한다.
  • 레벨이 같은 호스트는 저마다 이름이 유일해야 한다.
  • 레벨이 다르면 이름이 같아도 도메인 이름의 유일성이 보장된다.
  • 도메인이라는 명칭은 도메인 네임 스페이스에서 하부 트리 전체를 의미하며, 해당 도메인의 명칭은 하부 트리의 맨 상위에 위치한 호스트의 도메인 이름이다.

 

구분 설명
net 네트워크 지원 센터를 포함한 네트워크 관련 기관
com 상업적인 기관
biz com과 유사한 비즈니스 목적의 회사
info 정보 서비스 제공자
coop 협동조합
pro 전문가 관련 기관
aero 항공 관련 기관
int 국제기관
edu 교육기관
org 비영리 기관
museum 박물관 관련 기관
gov 미국의 연방정부 기관
mil 미국의 국방성 기관
name 개인

🔼 최상위 도메인의 분류

  • 최상위 도메인의 일반 도메인은 조직의 종류에 따라 분류된다.
  • 국가 코드 최상위 도메인도 정의해 사용한다.
    • Ex. 한국은 kr, 미국은 us, 일본은 jp의 형식으로 정의된다.
    • .com 도메인을 선호함에 따라 부족해지면서 특정 국가 코드의 의미가 .com 도메인을 대처하는 장점이 있다.

 

도메인 이름과 레이블

  • 레이블이 부여된 각 호스트는 도메인 이름을 갖는다.
  • 도메인 이름은 하위 호스트의 레이블부터 시작해 루트에 이르는 경로에 위치한 모든 호스트의 레이블을 점(.)으로 연결한 것이다.

 


2 데이터베이스 서비스

각 하부 도메인을 관리하는 호스트에 이름, 주소 검색 권한을 위임함으로써 DNS 구조가 단순해진다. 권한을 위임받은 도메인 관리 서버는 자신의 도메인 영역에 있는 모든 호스트에 관한 정보를 적절하게 유지해야 한다.

 

2.1 계층 구조의 네임 서버

DNS 분산 데이터베이스

  • 최상위에 위치한 루트 네임 서버는 mil, edu, arpa처럼 바로 밑에 위치한 TLD(최상위 도메인)에 관한 정보만 관리한다.
  • 권한의 위임 과정은 하부 구조 전체에 대해 재귀적으로 적용된다.
  • 사각형 호스트는 전부 네임 서버이며, 하부에 관리하는 도메인이 존재한다.
  • 이웃하는 네임 서버끼리 정보가 필요할 때는 상위 네임 서버의 중개를 통해 정보를 얻는다.

 

2.2 도메인 영역

  • 임의의 네임 서버가 관리하는 영역을 존(Zone)이라 한다.
  • 특정 네임 서버가 자신의 하위에 위치한 도메인을 전적으로 관리하면 존과 도메인이 동일하지만, 하부에 새로운 도메인이 추가되면 두 영역이 일치하지 않는다.

 

도메인과 존

  • edu 도메인의 하부에 mit.edu라는 도메인이 존재하므로 edu 도메인에는 edu와 mit.edu 네임 서버가 모두 동작한다.
  • 따라서 edu 도메인에는 서로 구분되는 존이 2개 존재한다.
  • mit.edu 아래에 위치한 노드의 정보는 mit.edu 네임 서버가 전적으로 관리한다.

 


3 자원 레코드

DNS 서비스는 이름과 주소 정보를 저장하기 위한 데이터베이스이므로 레코드 개념이 필요하다. 이를 위하여 자원 레코드라는 개념을 사용해 DNS 데이터를 저장한다. DNS 네임 서버가 DNS 클라이언트(해석기)에 반환하는 데이터는 자원 레코드가 된다.

 

자원 레코드와 질의 레코드

  • Name(이름): 찾고자 하는 가변 길이의 도메인 이름
    • (a) 자원 레코드에 보관된 정보가 해당 도메인 이름과 연관되었음을 의미
    • (b) 원하는 도메인 이름을 기록한 후에 해당되는 정보를 찾도록 DNS 서버에 요청하는 용도
  • Type(유형): 16비트 크기, 자원의 종류
  • Class(클래스): 프로토콜 패밀리 (인터넷에서는 IN 값 사용)
  • TTL(생존 기간): 자원 레코드가 만기될 때까지의 유효 시간을 초 단위로 표시 (네트워크 트래픽 감소, 서버 과부하 방지 효과)
  • RD Length(RD 길이): 자원 데이터의 길이를 바이트 단위로 표현
  • RD(자원 데이터): 자원 레코드와 관계된 데이터가 기록되는데, 자원 레코드의 유형 값에 따라 내용의 구성과 크기가 달라짐

 

유형 설명
A 호스트의 IP 주소를 의미하며, 도메인 이름을 IP 주소로 변환하는 데 사용한다.
NS 도메인을 관장하는 인증된 네임 서버를 나타낸다.
CNAME 별명이 있는 호스트의 정식 이름을 의미한다.
SOA 존의 시작을 표시한다.
WKS 호스트가 제공하는 네트워크 서비스를 정의한다.
PTR 도메인 이름을 가리키는 포인터를 의미하며, IP 주소를 도메인 이름으로 변환하는 데 사용한다.
HINFO 호스트 정보를 의미하며, 호스트가 사용하는 하드웨어와 운영체제에 관한 정보를 제공한다.

🔼 자원 레코드의 유형

  • 도메인 네임 서버는 모든 정보를 자원 레코드에 저장하며, 서로 다른 목적을 달성하기 위해 자원 레코드 유형을 정의한다.

 


03 네임 서버와 해석기

인터넷에서 네임 서버는 여러 곳에 흩어져 있다. 이들 서버는 전체 네임 스페이스의 일부 정보를 전적으로 책임지며, 유기적인 연관 관계를 통해 전체 네임 서버의 정보를 일관성 있게 관리한다.

 

1 해석기

도메인 이름과 호스트 주소의 변환 정보를 원하는 네트워크 응용 프로그램은 해석기라 불리는 DNS 클라이언트에 정보 제공을 요청한다. 해석기는 가장 가까운 네임 서버와 접촉해 정보 제공을 요청하고, 해당 서버에 정보가 없으면 다른 네임 서버와 접촉해 정보를 찾는 과정을 반복한다.

 

1.1 인증 데이터

  • 인증 데이터는 해당 데이터를 직접 관리할 책임이 있는 네임 서버로부터 받은 정보를 의미한다.
  • 캐시 데이터는 이전 요청에 의해 호스트가 보관하던 데이터이며, 재사용할 목적으로 한동안 저장한다.
  • 일반적으로 인증 데이터는 현재의 네트워크 상태를 그대로 반영한 정확한 데이터이지만, 인터넷의 안정도를 감안할 때 캐시 데이터를 사용해도 크게 문제되지 않는다.
  • 데이터의 정확성을 위해 해당 정보의 인증 서버가 TTL(Time To Live)이라는 추가 정보를 제공한다.
    • TTL이 초과된 정보는 자동으로 무효 처리되므로, 인증 서버에 다시 정보를 요청해서 캐시 데이터를 갱신해야 한다.

 

1.2 존

  • 인증 데이터는 네임 스페이스의 특정 영역인 존(Zone)을 관리하는 네임 서버가 유지하고 관리한다.
  • 존은 자원 레코드에 포함되는 인증 데이터의 집합체로 정의되며, 다음 영역을 포함한다.
    • 존에 속하는 모든 호스트의 전체 자원 레코드 집합체
    • 존에 포함된 최상위 호스트
    • 위임 서브 존 (자신의 존에 속하지만, 인증이 위임된 경우)
    • 위임된 서브 존에 관한 글루 데이터 (서브 존의 네임 서버에 접근할 수 있도록 함)
  • 임의의 네임 서버는 캐시 데이터를 유지하기 때문에 자신의 관리 밖에 있는 호스트의 정보도 인증해줄 수 있다.

 

존과 서브 존

  • 해석기가 info.mit.edu 밑에 위치한 test.info.mit.edu 호스트의 정보를 알고 싶다고 가정한다.
  • 해석기는 dns.info.mit.edu의 주소를 찾기 위해 서브 존의 위임에 관련된 글루 데이터가 사용된다.
  • 상위 존의 네임 서버는 위임된 서브 존의 네임 서버에 관한 도메인 이름과 주소를 유지한다.
  • 해석기가 상위 존을 관리하는 네임 서버에 문의하여 서브 존의 네임 서버에 관한 정보를 얻는다.

 


2 요청의 처리

질의 요청이 처리되는 과정은 2가지로 나누어 생각할 수 있다.

  • 호스트가 DNS 정보를 요청할 때는 인증 데이터의 필요 여부를 명시할 수 있다.
  • 자신이 인증 데이터를 가지고 있으면 회신하고, 그렇지 않으면 다른 네임 서버의 포인트 정보를 회신한다. (재귀적 현상)

 

2.1 재귀적 처리

재귀적 처리와 비재귀적 처리

  • 최초의 해석기가 자신에게 요청한 것과 동일한 질의 요청을 다른 네임 서버에 전송해 원하는 결과를 찾는 과정을 반복한다.
  • 재귀적 처리(왼쪽) : 해석기1로부터 mit.edu 정보를 요청받은 로컬 네임 서버가 해당 호스트의 인증 정보를 보관하고 있는 네임 서버1과 재귀적으로 접촉하여 mit.edu의 IP 주소를 얻은 후 회신한다.
  • 비재귀적 처리(오른쪽) : 비재귀적인 요청에 대하여 로컬 네임 서버가 보관하고 있는 mit.edu의 캐시 정보를 회신한다.

 

2.2 반복적 처리

재귀적 처리와 반복적 처리

  • (a) 재귀적 처리 : 정보를 요청받은 로컬 네임 서버1로부터 해당 호스트의 정보를 관리하는 로컬 네임 서버2까지의 과정이 재귀적으로 이루어진다.
  • (b) 반복적 처리 : 로컬 네임 서버1이 여러 네임 서버와 직접 접촉하여 원하는 정보를 얻고 있다.

 


04 DNS 프로토콜

1 DNS 메시지

DNS 프로토콜을 사용하는 호스트는 DNS 데이터를 요청하거나, 반대로 응답할 때 DNS 메시지를 전송한다.

 

1.1 DNS 메시지의 구조

DNS 메시지의 구조

  • Header(12바이트) : 정보 값에 따라 다른 필드의 사용 여부를 확인할 수 있다.
  • Question : 질의 레코드가 하나 이상 존재할 수 있고, 질의 메시지와 응답 메시지 모두에서 사용된다.
  • Answer : 서버가 클라이언트에 회신하는 응답이다. (응답 메시지)
  • Authority : 질의에 대한 인증 권한이 있는 서버 정보를 제공한다. (응답 메시지)
  • Additional : 해석기에 필요한 추가 정보를 제공한다. (응답 메시지)

 

1.2 DNS 헤더

DNS 헤더

  • Identification 필드 : 클라이언트의 질의에 대해 회신된 응답이 서로 연관되는지 확인해준다.
  • QR(Query Response) : 메시지 종류를 나타낸다. (0이면 질의 메시지, 1이면 응답 메시지)
  • OPcode : 질의나 응답의 종류를 나타낸다. (0은 표준 요청, 1은 역방향 요청, 2는 서버 상태에 대한 요청)
  • AA(Authoritative Answer) : 네임 서버가 인증 권한이 있는 서버임을 나타내므로 응답 메시지에만 사용된다.
  • TC(Truncated) : 1로 지정하면 응답의 크기가 UDP의 최대 크기인 512바이트를 초과하여 512 바이트 크기로 잘렸음을 알려준다.
  • RD(Recursion Desired) : 1이면 재귀적인 응답을 원한다는 뜻으로, 네임 서버가 지원 가능한지를 문의하는 것이다.
  • RA(Recursion Available) : 네임 서버가 재귀적인 응답을 지원한다는 의미이다. (응답 메시지)
  • Z : 예약 필드로 000으로 지정된다.
  • Rcode : 응답 메시지에서 응답 오류를 나타내는 데 사용되며, 0이면 오류가 없다는 의미이다.
  • QUCOUNT : DNS 메시지의 Question 필드에 있는 질의 요청의 개수이다.
  • ANCOUNT : 응답용 DNS 메시지에서 Answer 레코드의 개수이다.
  • AUCOUNT : 응답용 DNS 메시지에서 Authority 레코드의 개수이다.
  • ARCOUNT : 응답용 DNS 메시지에서 Additional 레코드의 개수이다.

 

1.3 UDP의 제한

UDP 메시지가 512바이트보다 커 TCP를 사용할 때는 2가지 경우를 고려할 수 있다.

  • 응답 메시지가 512바이트보다 크다는 사실을 해석기가 미리 인지하는 경우
  • 해석기가 사전에 인지하지 못한 상태에서 UDP를 사용하는 경우

 


2 DNS 프로토콜 동작 과정

2.1 질의 메시지

해석기가 www.korea.co.kr라는 호스트의 IP  주소를 찾으려고 로컬 네임 서버에 질의 메시지를 전송하는 경우를 가정한다. 

 

Identification: 0x337c
플래그: 0x0100 (QR=0, OPcode=0000, AA=0, TC=0, RD=1, RA=0, Z=000, Rcode=0000)
QUCOUNT: 1
ANCOUNT: 0
AUCOUNT: 0
ARCOUNT: 0
  • Header의 첫 번째에 위치한 Identification은 메시지 식별자로, UDP의 비순서적 전송 방식을 보완하려고 사용된다.
  • 해석기는 해당 번호를 사용해 서버의 응답을 순서대로 정렬하여 질의와 응답이 적절히 연결되도록 한다.
  • 플래그 값은 0x0100이다.
    • QR=0 : 질의 메시지
    • OPcode=0 : 표준 질의
    • RD=1 : 재귀적 응답임

 

Name: www.korea.co.kr
Type: A (Address)
Class: IN (인터넷)
  • QUCOUNT 값만 1이므로 헤더에 이어지는 필드는 Question에 관한 질의 레코드 하나임을 알 수 있다.
  • 찾는 정보가 www.korea.co.kr 호스트의 IP 주소라는 의미가 된다.

 

질의 메시지의 예

  • DNS 메시지로 형식화한 형태이다.
  • Header에는 이전 값이 기록되고, 질의 레코드의 도메인 이름에는 www.korea.co.kr이 기록되는데, 이름 끝에 0x00을 추가하여 이름의 마지막임을 표시해야 한다.
  • 도메인 유형 A는 값이 1이며, 도메인 클래스 IN도 값이 1이다.

 

2.2 응답 메시지

질의 메시지를 수신한 네임 서버는 DNS 클라이언트가 원하는 IP 주소를 찾아 응답 메시지로 회신한다.

 

Identification: 0x337c
플래그: 0x08180 (QR=1, OPcode=0000, AA=0, TC=0, RD=1, RA=1, Z=000, Rcode=0000)
QUCOUNT: 1
ANCOUNT: 2
AUCOUNT: 2
ARCOUNT: 0
  • Identification은 클라이언트의 값을 그대로 사용해야 한다.
  • 플래그는 0x8180 값으로 주어졌다.
    • QR = 1 : 응답 메시지
    • OPcode : 여전히 표준 질의 응답
    • RD = 1, RA = 1 : 재귀적 질의 응답
    • Rcode : 정보에 의해 오류는 발생하지 않음
  • 해석기의 요청을 받은 서버는 도메인의 인증 권한이 없는 것으로 가정되어 메시지에 재귀적 응답이 포함된다.
    • Question 자원 레코드 하나
    • Answer 자원 레코드 2개
    • 인증 권한이 있는 네임 서버를 가리키는 Authority 자원 레코드 2개
    • 부가 정보에 관한 자원 레코드는 회신되지 않음

 

Name: www.korea.co.kr
Type: A (Address)
Class: IN (인터넷)
  • Question 자원 레코드는 위와 같이 질의 레코드의 경우와 같다.

 

Name: www.korea.co.kr
Type: CNAME (Canonical Name for an Alias)
Class: IN (인터넷)
TTL: 2시간
RD Length: 2
RD: Primary name: korea.co.kr
Name: korea.co.kr
Type: A (Address)
Class: IN (인터넷)
TTL: 2시간
RD Length: 4
RD: Addr: 211.223.201.30
  • 응답 메시지에는 Answer 자원 레코드가 2개 존재한다.
    • CNAME : www.korea.co.kr은 별명(Alias)임을 알 수 있다.
    • 원하는 IP 주소는 211.223.201.30임을 알 수 있다.

 

Name: korea.co.kr
Type: NS (Authoritative Name Server)
Class: IN (인터넷)
TTL: 2시간
RD Length: 8
RD: Name Server: ns.ns1.kr
Name: korea.co.kr
Type: NS (Authoritative Name Server)
Class: IN (인터넷)
TTL: 2시간
RD Length: 10
RD: Name Server: nsbk.ns2.kr
  • Authority 자원 레코드의 내용이다.
  • TTL 값은 제공된 정보가 캐시 상태로 유지될 수 있는 최대 시간을 의미한다.
  • RD Length는 자원 데이터의 크기를 바이트로 나타낸다.
  • NS 유형은 인증 네임 서버의 도메인 이름을 보관한다.
  • CNAME 유형은 정식 명칭을 나타낸다.
  • A 유형은 IP 주소를 나타낸다.

 


Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크

반응형
LIST