이번 시간에는 DNS Header 설명에 이어서 DNS 질의 Message에 대한 설명을 진행하겠습니다.
DNS Data(실제 전달될 Data)는 Data앞에 DNS Header가 붙게 됩니다. 이러한 DNS Header는 지난시간 DNS 통신에 대하여 ! 에 설명을 언급했습니다.
만약, DNS Header을 모르시거나, 혹은 DNS가 어떤 것인지 모르시는 분들은 아래의 링크를 참조해주셔서 Step by step으로 구독해주시기 바랍니다.
DNS시작하기 ! – https://jinheeahn.wordpress.com/2015/08/28/1-dns-시작하기
DNS 통신에 대하여! – https://jinheeahn.wordpress.com/2015/09/07/2-dns 통신에 대하여
DNS Header - https://jinheeahn.wordpress.com/2015/09/08/3-dns-message/
그리고 Wireshark DNS packet 잡기도 연재하였으니 아래의 링크를 확인해주세요.
Wireshark로 DNS pakcet 잡기 - https://jinheeahn.wordpress.com/2015/09/21/dns-wireshark pakcet 잡기
이제 DNS Question (질의 메세지)을 시작하겠습니다.
- 질의 메세지 구성
–Query name string , Type, class로 구성
–특징 : 질의는 저장할 필요가 없으므로 TTL 항목을 사용하지 않음.
- 질의 명 스트링(Query name string) : 가변길이, 최대길이는 63byte
–질의의 대상(즉, DNS 갱신 대상)인 영역 이름
–연이은 다수의 라벨로 구성
–각 라벨은 길이를 나타내는 1 바이트 필드로 시작
–`0` 나타나면, 이름의 끝을 의미
ex)이름 스트링이 www.ktword.co.kr 이면,
- 질의 타입(Query type) : 16 비트 (Client가 요청하는 질의 유형)
–1 (A) : 32bit IPv4 Address
–2 (NS) : 네임서버 도메인 네임 지정
–5 (CNAME) : Canonical Name (정식이름), 원래 도메인 네임을 매핑
–6 (SOA) : Start of Authority, Zone의 속성 정보 지정
–13 (HINFO) : 호스트의 CPU와 OS 정보
–28 (AAAA) : 128bit IPv6 Address
–15 (MX) : Mail exchange. 메일서버의 도메인 네임 지정
–252 (AXFR) : 전체 DNS 영역 전달에 대한 요청 (질의에서만 사용됨)
–255 (ANY) : 모든 레코드에 대한 요청 (질의에서만 사용됨)
–질의 등급(Query class) : 16 비트
- DNS가 사용하는 특정 프로토콜을 나타냄
–1 : IN (Internet) => 인터넷인 경우
–3 : CS => COAS network
–4 : HS => Hesoid server (MIT 개발)
위의 나열되어 있는 설명들과 같이 DNS 질의 메세지는 크게 Query name string , Type, class로 구성되어 있습니다.
자 이제, 질의 메세지가 어떻게 구성이 되어있는지 알았으니 DNS 질의 메세지가 진짜 저런 방식으로 구성이 되어있는지 확인이 필요하겠습니다. 실제 Packet을 확인해보아야 이해가 될테니 Wireshark tool로 Capture하여 확인해보면 될 것 같습니다.
지난 시간 Wireshark에 대하여 간략하게 소개를 드렸었습니다. (아래 링크 참조)
이번 시간에는 좀 더 정확한 Wireshark를 통해서 Packet 분석하는 방법을 알아보겠습니다.
Wireshark로 DNS pakcet 잡기 - https://jinheeahn.wordpress.com/2015/09/21/dns-wireshark pakcet 잡기
첨언을 드리자면, 이 Wireshark라는 Tool이 생각보다 굉장한 tool이라는 점을 말씀드립니다. 하지만 반대로 말하자면, 결국 네트워크 Software 엔지니어들은 Application을 제작 시 실제로는 Wireshark tool에 맞게 제작을 해야한다는 아쉬운(?)점이 있다는 점 명심하시기 바랍니다.
자, 아래의 그림과 같이 지난 게시글과 동일하게 Wireshark Pakcet을 잡아보았었습니다.
여기서 저는 "www.google.co.kr"에 대한 Packet을 Capture하여 분석하겠습니다.
위 Packet을 좀 더 풀어서 해석해드리면, 아래의 그림처럼 설명이 됩니다.
Packet 순서에 대해 간단하게 설명드리면, Frame -> Ethernet -> Internet -> User Datagram Protocol -> Domain Name System 순으로 Data가 Capture되어 있는 것을 보실 수 있습니다.
이 순서는 네트워크의 기초인 OSI 7계층 Protocol을 기반으로 된 것인데요. OSI 7계층은 실제로 많은 네트워크의 표준 Protocol로 사용되고 있습니다. 하지만, 실제 네트워크를 이용해본 결과, 통신을 할때 불필요한 Protocol Layer들이 존재하였는데요. 이 불필요한 Protocol Layer를 없애고 다시금 새로운 Protocol Layer를 만들었는데 이를 TCP/IP 4계층 Protocol이라 합니다.
이 TCP/IP 4계층 Protocol은 아래그림과 같이 Application, Transport(host-to-host), IP(Internet), Network Access(Ethernet Physical) 로 나뉘게 됩니다.
그래서 Wireshark로 Capture한 Packet을 보면 TCP/IP 4계층에 맞게 Packet이 구성되어진 것을 확인 할 수 있습니다.
Frame + Ethernet = Network Access(Ethernet Physical)
Internet = IP Packet
User Datagram Protocol = Transport (TCP / UDP)
Domain Name System = Application DNS
이러한 순서대로 작성된 Layer들이 최종 하나의 Packet의 형태로 제작되어 각 다른 Peer(컴퓨터)에 Data로 전송되게 됩니다.
아래 그림을 참조하시면 그림으로 설명되어 있는데요. 한번 직접 Capture해서 비교해보세요.
각 Layer에 대한 자세한 설명은 Google에 검색해보시면 무궁무진한 자료가 많으니 확인해주세요.
자, 이제 각 영역에 대해 간단한 설명을 드리겠습니다. (아래 그림 참조)
Ethernet 영역, IP 영역, Transport 영역에 대한 간단한 설명입니다.
이 설명이 어떤 설명인지 잘 모르시겠다면, TCP/IP 4계층의 보다 정확한 설명과 이해가 필요합니다.
Packet이 어떠한 순서대로 제작되는지 공부가 필요합니다.
이런 TCP/IP 4계층의 순서대로 Ethernet -> IP -> UDP를 거쳐 Layer를 하나씩 처리하면 최종 Data인 Application(DNS)가 나오게 됩니다.
아래 그림은 단순 이해를 쉽게하기 위해서 각 Packet이 어떤 것인지 설명하는 것이구요.
밑의 Hex 값의 각 번호는 화살표와 매칭되어 있으니 비교하시면서 확인해주시면 되겠습니다.
다음 시간은 DNS 응답 Packet에 대한 설명을 이어서 진행하겠습니다.