본문 바로가기
컴퓨터 지식/네트워크&프로토콜

[네트워크📶] DNS Message Format

by 서상혁 2020. 6. 15.

DNS란?

https://programming119.tistory.com/157

 

[네트워크📶] DNS란 / DNS Name Space / DNS Tree / TLD

DNS란 DNS(Domain Name System) 는 적용계층의 프로토콜 중 하나로 도메인 이름과 IP주소를 변환시킬 때 쓰는 프로토콜입니다. naver.com 이나 tistory.com 같은 사이트 URL도 우리같은 사용자가 눈에 보기 쉽게

programming119.tistory.com


DNS Zone File

https://programming119.tistory.com/158

 

[네트워크📶] DNS Zone File / NS LOOKUP 사용법 🎶

DNS란? https://programming119.tistory.com/157 [네트워크📶] DNS란 / DNS Name Space / DNS Tree / TLD DNS란 DNS(Domain Name System) 는 적용계층의 프로토콜 중 하나로 도메인 이름과 IP주소를 변환시킬 때..

programming119.tistory.com

 

 


 

DNS Message Format

 

 

DNS 는 적용 계층입니다.

전송 계층으로는 UDP를 사용합니다. (port 번호 : 53)

 

Header 와 Question 은 필수 요소입니다.

request 뿐만 아니라 response 에도 question 이 나옵니다.

 

Authority : reference를 뜻하며, 이 정보를 제공하는 서버

Additional : 추가 정보

 


 

DNS 의 Header 요소들

 

identifier : request 와 resoponse 구분  (0 or 1)

 

Opreation code :

- 0 : 대부분 0이며, Domain Name 을 통해 Resource Record 에 접근하겠다는 뜻 (standard query)

- 1 : 0과 반대방향으로 하겠다는 것이며, 반대 과정은 비용이 비싸 이제 안쓰입니다. (reverse query)

- 2 : server status report request 

- 4 : Primary server에게 zone transfer을 하라고 알리는 요청.

      zone file 카피를 secondary server에게 백업해라 라고 명령하는 요청. (polling과는 반대) (notify)

- 5 : Dynamic DNS 에서 쓰임 (update)

 

Authoritative Answer : 0은 권한 없는 응답을 의미하며 cached RR 이라는 뜻이다. 대부분 0이다. (0 or 1)

 

Truncated : 

 - 0 : 응답이 512 바이트 를 넘지 않을때. (일반적인 상황)

 - 1 : 응답이 512 바이트를 넘어, TCP로 전환해야 될 때.  Truncated = 1 인 응답을 받으면, TCP 방식으로 다시 요청을 한다. TXT 쿼리 타입으로 요청을 했을 때 종종 일어난다. (흔하지 않으므로 평소에는 그냥 UDP 사용)

 

Recursion Desired :

- 1 : 쿼리를 recursive 하게 찾는다는뜻이다. 단지 authority 말고 최종 결과를 알고 싶다.  pointer 작업을 띡 결과를 던지는 것이 아니라. 다른 DNS 서버에게도 물어봐서 final answer 을 얻어낸다. 이것을 안하면, 단지 pointer를 통한 reference를 전달할 수도 있다.

 

Recursion Available : 

- 1 : 서버가 recursion이 가능하다는 뜻이다. dirty work를 해서 (pointer 작업으로 계속 찾음) final answer을 얻어낸다.

 

Response code :

- 0 : 정상

- 1 : 형식 에러

- 2 : 서버 에러

- 3 : 해당 도메인이 존재하지 않는다.

 

 

DNS 의 Body

 

request 일 때

 

요청에서는 Question 부분만 붙어 있습니다.

Question 주요 요소에는 요청할 Domain name, Type 과 Class가 있습니다. 

 

Domain name : 요청할 도메인의 이름

 

그냥 일반적인 16진수 변환이 아니라 특별한 format이 있습니다.

www.cnn.com  을 예시로 들면

www가 3글자이므로 www 앞에 03 을 붙여줘야하고, cnn 도 3글자이므로 03 을 붙여줘야합니다.

www.cnn.com  = 03-77-77-77-03-63-6e-6e-03-63-6f-6d-00 (3www.3cnn.3com.)

대신, 이 방식은 도메인이 처음 사용됐을 때만 사용이됩니다. (response에서 사용)

같은 도메인이 또 사용이 된다면 포인터 방식을 이용해 접근합니다. 단 2바이트 만으로 같은 이름을 표현할 수 있습니다.

2바이트는 16비트로 이루어져있죠?

다시 사용될 때는 첫 2비트가 '11' 로 이루어져 있고, 이는 포인터로 쓸 것임을 의미합니다.

그 후, 6비트, 8비트는 각각 request에서 쓰였던 www.cnn.com  의 위치, 즉, offset을 의미합니다.

꼭 전체 DN이 아니더라 하더라도, 부분적으로도 다시 사용이 가능합니다.

 

Type : 앞서 게시글에 설명했던 Resource Record 타입들 (예시 : A(1) - IPv4 Address)

 

- (했던것들 생략) https://programming119.tistory.com/157

 

[네트워크📶] DNS란 / DNS Name Space / DNS Tree / TLD

DNS란 DNS(Domain Name System) 는 적용계층의 프로토콜 중 하나로 도메인 이름과 IP주소를 변환시킬 때 쓰는 프로토콜입니다. naver.com 이나 tistory.com 같은 사이트 URL도 우리같은 사용자가 눈에 보기 쉽게

programming119.tistory.com

 

- 255 : ANY (알 수 있는 모든 자료들을 줘라)

- 252 : polling의 경우에 쓰임 (Secondry 서버가 Primary 에게 Zone file 요청)

 

Class : 항상 0x0001 (인터넷 용이라는 뜻)

 

728x90

댓글