다른 인터넷 프로토콜 처럼 DNS 호스트도 클라이언트와 서버 기능을 동시에 수행한다. 질의 요청을 수행하는 호스트는 해석기를 가지고 있어야 한다. 네임 서버도 다른 네임 서버에 정보를 요청할 수 있으므로 해석기를 사용한다. 해석기는 DNS 서비스의 네트워크 트래픽을 줄이려고 다양한 형식으로 캐시 데이터를 활용한다.
DNS 메시지
DNS 프로토콜을 사용하는 호스트는 DNS 데이터를 요청하거나, 반대로 응답할 때 DNS 메시지를 전송한다. DNS 프로토콜은 DNS 요청을 하는 호스트와 요청에 대한 응답 기능을 수행하는 호스트 사이의 상호 동작을 지원하기 위해 질의 메시지와 응답 메시지를 정의한다.
DSN 메시지의 구조
DNS 요청이 필요하면 DNS 메시지에 내용을 기록한다. 모두 다섯 부분으로 구성된 DNS메시지에서 Question 필드는 질의 레코드를 사용하고 나머지 Answer, Authority, Additional 필드는 자원 레코드를 사용한다.
Answer 필드는 질문에 대한 겨로가 자원레코드, Authority 필드는 인증을 가리키는 자원 레코드, Additional필드는 기타 정보를 의미하는 자원 레코드이다.
- Header(12바이트) : 정보 값에 따라 다른 필드의 사용 여부를 확인할 수 있다.
- Question : 질의 레코드가 하나 이상 존재할 수 있고, 질의 메시지와 응답 메시지 모두에서 사용된다.
- Answer : 서버가 클라이언트에 회신하는 응답이다. (응답 메시지)
- Authority : 질의에 대한 인증 권한이 있는 서버 정보를 제공한다. (응답 메시지)
- Additional : 해석기에 필요한 추가 정보를 제공한다. (응답 메시지)
DNS 헤더
DNS 메시지에서 Header 필드 정보는 반드시 필요하다.
- 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 레코드의 개수이다.
UDP의 제한
해석기와 네임 서버는 53번 포트를 기본으로 사용하여 UDP로 DNS 메시지를 전송한다. 이 때 DNS 메시지가 512바이트보다 작으면 UDP를 사용하는데 문제가 없지만, 이보다 크면 TCP를 사용하는데 이때도 DNS 메시지 전송은 53번 포트를 사용한다.
DNS 메시지가 512바이트보다 커 TCP를 사용할 때는 다음 두가지 경우를 고려할 수 있다.
- 응답 메시지가 512바이트보다 크다는 사실을 해석기가 미리 인지하는 경우로, 이 때는 처음부터 TCP 연결을 사용한다.
- 해석기가 사전에 인지하지 못한 상태에서 udp를 사용하는 경우이다. 이럴 때는 응답 메시지의 헤더에 있는 TC 플래그가 1로 지정되므로, 해석기가 TCP 연결을 설정하는 올바른다답을 요청할 수 있다.
DNS 프로토콜 동작 과정
질의 메시지
해석기가 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이다.
응답 메시지
질의 메시지를 수신한 네임 서버는 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
쉽게 배우는 데이터 통신과 컴퓨터 네트워크
https://soso-hyeon.tistory.com/112
[쉽게 배우는 데이터 통신과 네트워크] CH14. DNS
01 DNS(Domain Name System) 서비스인터넷의 규모가 커지면서 호스트 파일을 수작업으로 관리할 수 없게 되었고, 이를 계기로 DNS 서비스가 탄생하게 되었다. 1 IP 주소 체계인터넷에서는 32비트의 이진
soso-hyeon.tistory.com
'CS > Network' 카테고리의 다른 글
[Chapter 15] 전자 메일 (전자 메일 시스템 구조) (0) | 2025.02.19 |
---|---|
[Chapter 15] 전자 메일 (메일 처리) (0) | 2025.02.19 |
[Chapter 14] DNS (네임 서버와 해석기) (0) | 2025.02.18 |
[Chapter 14] DNS (도메인 네임 스페이스) (0) | 2025.02.18 |
[Chapter 14] DNS (DNS 서비스) (0) | 2025.02.18 |