저번 시간에 DNS에 관한 몇가지 궁금한 부분과 DNS Server에 대한 설명을 개략적으로 설명하는 글이었습니다.
그렇다면, 이번시간에는 실제 구현할 부분의 DNS Client와 DNS Server가 어떠한 DNS Protocol을 사용하여 통신을 하는지, 그리고 통신을 하려면 무엇이 필요한지에 대한 설명을 진행하겠습니다.
위 그림을 보면, 우리가 실제 구현할 부분이라고 명시가 되어있습니다.
결국, 우리는 저번시간에 언급하였던 것처럼 DNS Client와 DNS Server간의 통신에 대해 알아보는 것입니다.
아래의 그림처럼 DNS Client과 DNS Local Server 사이에 "X"표시를 해놓은 것을 볼 수 있을 것입니다. 이렇게 한 이유는 "필요가 없다." 입니다.
기타 여러 자료를 참고하신다면, DNS Client와 DNS Server 사이에 Resolver(변환기)라는 매개체를 구성하여 통신하는 것을 보실 수가 있는데요. 이 Resolver가 필요한 경우는 실제 DNS의 전체적인 시스템을 구성하여 상용적인 용도로 이용할 경우에 필요할 것이라 생각됩니다.
하지만 우리는 Embedded를 이용하여 DNS라는 것이 어떻게 동작하고 어떠한 Protocol을 이용하여 통신하는지가 가장 중요한 목적인 것도 있고, 없어도 충분히 구현이 가능하기 때문에 굳이 사용할 이유는 없는 것 같습니다.
자, 이제 본격적으로 DNS에 대한 설명이 시작될텐데요. 만약, DNS에 관한 사전지식을 잘 모르신다면 아래의 링크들을 확인해주세요.
DNS시작하기 ! - https://jinheeahn.wordpress.com/2015/08/28/1-dns-시작하기
DNS 통신에 대하여! - https://jinheeahn.wordpress.com/2015/09/07/2-dns 통신에 대하여
지금부터 DNS의 Protocol (Message Form)에 대해서 알아보도록 하겠습니다.
** 아래의 설명이 이해가 가지 않으신다면, 네트워크 통신에 대한 사전 지식이 필요한 것입니다.
OSI 7계층 프로토콜 + TCP/IP 4계층 프로토콜에 대한 설명과, UDP Protocol에 관한 설명을 반드시 숙지 후에 아래의 설명을 읽어주세요. 그럼 더욱 효과적일 것입니다.
- DNS Message는 크게 질의 메세지(Query) or 응답 메세지(Response)로 구분됩니다.
질의 메시지 (2개의 영역만 있음) = Header + 질의
응답 메시지 (5개의 영역이 있음) = Header + (질의 + 응답 + 책임 + 부가정보)
- DNS 메시지 기본 Format
크게 5가지 영역으로 구분
Header 영역 – 12byte의 고정길이
Question 영역(질의) – (가변길이) DNS 질의 내용을 표시
Answer 영역(응답) – (가변길이) DNS 질의 사항에 대한 DNS 응답 RR을 표시
Authority 영역(책임) – (가변길이) DNS 응답 RR이 속한 도메인 존의 NS RR 정보
Additional 영역(부가) – (가변길이) 부가적인 RR 정보를 표시
- 특징
단일 기본 Format : 위 그림 처럼 DNS Packet Format은 단일 기본 구조를 사용.
크기 제한 : UDP 512 byte로 크기 제한. (512 byte 이상이면 TCP로 전환되어 재전송)
DNS는 Application 영역이며, TCP/UDP인 Transport Layer와, IP Packet으로 감싸져 전송됩니다.
IP 헤더 및 TCP/UDP 헤더에 대해서 잘 모르겠다면, 구글에서 OSI 7계층 & TCP/IP 계층에 대한 사전 지식이 요구되므로 따로 공부를 하시는 것을 추천드립니다.
DNS의 전체 메세지 포맷을 보았다면, 이제 첫번째로 중요한 DNS Header에 대해서 알아보도록 하겠습니다.
DNS Header가 있어야만 Protocol이 성립이 되고, DNS의 진짜 Data를 읽어 데이터 통신이 가능합니다. 그러므로 DNS Header 부분이 가장 중요하죠. (물론 진짜 Data도 중요합니다.)
- DNS Header
- DNS Message Header Section : 12 byte 고정
–트랜잭션 ID (16 bit)
고유 식별 ID , 이 식별 ID로 질의와 응답 메시지를 구분한다.
- Flags (16 bit)
- QR (Query/Response)
–메세지가 질의(0)인지 응답(1)인지 구분
- Op code (Operation code) : 4 비트
–0 : 표준 질의 (또는 표준 질의에 대한 응답)
–1 : 역 질의
–2 : 서버의 상태 요구
–4 : 통지
–5 : 갱신
- AA (Authoritative Answer, 책임 플래그)
–응답 메세지에 만 사용됨 , 1 : 네임서버 권한이 인정된 서버의 응답을 표시
- TC (Truncated)
–512 바이트 초과 여부 , 1 : 응답메세지가 512 바이트 이상이라서 512로 제한 이 경우에 클라이언트는 TCP 포트를 통해 질의를 재전송하게 됨
- RD (Recursion Desired, 재귀 요구 플래그)
–1 : 클라이언트가 재귀 질의를 원함 질의 메세지에서 지정되며, 응답 메세지에서 이를 반복함 .. 재귀질의가 요청되지 않으면, 반복질의로 간주하게 된다. (질의 전용)
- RA (Recursion Available, 재귀 유효 플래그)
–네임서버가 재귀 질의가 이용 가능한지를 나타냄 – 예약 (Reserved) : 통상 000으로 셋팅
–응답 메세지에만 사용된다.
- rCode (response code, 응답/오류 코드)
–0 => No Error
–1 => Format Error(질의를 이해할 수 없음)
–2 => ServFail(Server Failure), 3 => 도메인네임 존재 않음 등
- 질의 카운트 (Question)
- 질의의 수
- 일반적으로 Query 패킷당 하나의 Question 전송.
- 응답 카운트 (Answer)
- 응답 RR( Resource Record )의 수
- 네임서버 카운트 (Authority)
- 책임 RR( Resource Record )의 수
- 추가정보 카운트 (Additional)
- 추가 RR( Resource Record )의 수
ㅡ 추가 정보.
필자를 포함한 모든 네트워크 엔지니어분들은 Wireshark라는 Tool을 사용하여 Packet을 Capture하여 분석합니다. (무료이고, 가장 많이 사용하죠)
그런데, wireshark라는 tool을 이용하여 어떻게 패킷을 분석할까? 이 것에 대한 설명을 따로 포스팅을 하도록 하겠습니다.,
여기서 언급하고 싶은 것은, PC에서 DNS Protocol을 이용한 IP Packet을 보내고 받을 수 있으며, 이를 wireshark Tool로 Capture하여 원하는 Packet을 볼 수 있다는 것이 가능하다. 이겁니다.
PC -> 시작(윈도우 마크) -> cmd -> nslookup 타이핑 후 엔터 -> www.google.com 타이핑 후 엔터. 하여 PC로 원하는 Domain name의 IP 확인이 가능합니다. (아래 그림 참조)
다음 시간에는 DNS question(질의)의 Packet에 대한 설명으로 이어나가겠습니다.