통신프로토콜 DNS(1)
1. DNS
- DNS란 Domain Name System의 약자로서 ip에 대한 name이나 name에 대한 ip를 알려주는 기능을 한다. DNS는 ARP와 다르게 ip에 대한 name이 mapping되어 있는 곳이 cache가 아닌 hosts file이다. 이 hosts file은 임의로 사용자가 수정하여 정보를 입력할 수가 있다.
⦁동작 과정
① hosts file에 mapping이 되어 있을 경우
- hosts file에 목적지의ip와 name이 mapping되어 있는 경우 단말이 목적지에 [ping 목적지name]의 명령어를 통해 ping을 보내게 되면 단말은 처음 자신이 name에 해당하는 ip가 있는지 없는지 확인하기 위해 hosts file을 열어 본다. hosts file에 name에 대한 ip주소가 있을 경우 그 ip에 ping을 보내기 위해 목적지의 Ethernet address를 알아낸다. ARP가 동작하게 되어 Ethernet address의 정보를 알아낸 후 단말은 목적지에 ping을 보낼 수 있게 된다.
- 이 경우 DNS server는 동작하지 않는다.
② hosts file에 mapping이 되어 있지 않을 경우
- hosts file에 ip와 name이 mapping되어 있지 않는 경우 단말에서 처음 자신의 DNS에 대한 Ethernet address를 알기 위해 ARP가 동작하고 Ethernet address를 알게 되면 단말은 자신이 알고 있는 name에 대한 ip를 알기 위해 DNS server에 DNS Query message를 보내게 된다. 그럼 DNS server는 자신이 가지고 있는 Database에 저장되어 있는 단말이 알고 싶어 하는 정보를 보내게 되는데 이때 발생하는 message가 DNS Reply message이다. 이런 과정을 통해 단말은 자신이 알고 싶어 하는 name에 대한 ip주소를 DNS server를 통해 알 수 있다.
- 단말과 DNS server의 동작 과정은 단말은 처음 hosts file을 확인 하게 되고 없으면 DNS server로 Query message를 보내게 되고 DNS server는 자신의 database를 확인하여 정보를 reply message를 통해 단말에게 알려준다. 이때 단말의 hosts file에 ip와 name이 mapping되어 있으면 단말은 DNS server에게 Query message를 보내지 않게 된다. DNS server의 port는 well known port로 53이다. 단말은 임의의 port번호를 사용한다.
- DNS는 name또는 ip를 뒤에서부터 찾아서 검색 하게 된다.(ex 200.0.1.4이란 ip는 4.1.0.200 in-addr arpa 순서대로 찾아가게 되고, lee.e-watch.ac.kr은 kr.ac.e-watch.lee 순서대로 찾아가게 된다.) gTLD는 name이 가지는 성격에 따라 TLD를 분류한 것이고 nTLD or ccTLD는 나라별로 TLD를 분류한 것이다. FQDN(Fully Qualified Domain Name)은 마지막에 . 이 찍혀있는 것을 말한다.(ex 4.1.0.200의 ip의 FQDN은 4.1.0.200. 이다.)
- ip주소에 대한 name을 찾는 PTR방법도 있는데 이때는 위에서 설명했다 시피 ip뒤에서부터 검색해서 in-addr → arpa 순으로 검색을 하는데 in-addr과 arpa는 ip에 대한 DNS server이다. ip에대한 name을 찾을 때는 항상 붙는다.
⦁ DNS message의 구조
- identification : message의 식별을 하기 위한 영역으로 random number가 들어간다.
• flag
- flages의 Q/R : Request인지 Response인지 구별해준다. Request일 경우 0 Response일 경우 1 이다.
- flages의 앞의 OPCode : Query의 종류를 나타낸다. inverse query일 경우 1이고 server status request일 경우 2, 마지막으로 표준 query일 경우 0이 저장되어 있다.
- flages의 AA : AA는 authoritative answer의 약자로서 answer RR의 영역에 저장되어 있는 정보가 authoritative DNS server가 저장하였는지 다른 DNS가 저장하였는지 알려주는 기능을 한다. authoritative DNS server가 저장하였을 경우 1이 들어가게 되고 다른 DNS server가 저장 한 경우 0이 들어가게 된다.
- flages의 TC : Response message의 길이가 512byte를 초과했는지 알려주는 영역이다. 512byte 초과했을 경우 1 이 들어가게 되고 512byte 이하일 경우 0이 들어가게 된다.
- flages의 RD : 귀환 방식의 mapping방식을 나타내주는 영역이다. 단말이 자신이 알고 싶어 하는 정보를 자신의 DNS가 찾아서 단말에게 알려주기를 원하면 1이 들어가게 된다. 따라서 단말은 Request를 보낸 후 Response가 올 때까지 아무것도 안하고 기다린다.
- flages의 RA : 단말이 원하는 귀환방식(RD)을 호환해주는지 알려주는 영역이다. 1일 경우 호환해줄 수 있다는 것을 나타낸다.
- 0 0 0 : 예약 필드로 기본적으로 0 0 0이 들어가있다.
- flages의 뒤의 OPCode : R code이다. 이것은 return code를 나타낸다. 제대로 Response한 경우는 0이 들어가게 되고 만약 Reply message에 Error가 발생할 경우 값이 들어가게 된다.
- number of questions : questions의 개수를 나타낸다. 보통 한 패킷 당 한 개의 question을 가진다.
- number of answer RRs : query에 대한 response가 발생할 경우 1이 들어가게 된다.
- number of authority RRs : 단말이 알고 싶어 하는 name에 대한 ip정보 또는 ip에대한 name을 가지고 있는 해당 DNS server가 직접 response가 발생하며 값이 저장되고 몇 개의 RR이 발생했는지 알려준다.
- number of additional RRs : 다른 DNS server에서도 response가 올 경우 표시 되고 몇 개의 RR이 발생했는지 알려준다.
• Questions
- Query name string : host name이 저장되어 잇다. host name에 저장될 때 각 부분의 제일 앞에 각 부분의 길이를 앞에 적고 뒤에 어떤 값이 들어가는지 적는다. 마지막 부분이 끝나면 0이 들어가게 된다.(ex infocom.inje.ac.kr일 경우 7infocom4inje2ac2kr0)
- Query type : Query type을 나타낸다. 1(A type)은 name에 대한 ip주소를 원할 때 저장되고(0x00 01), 2(NS type)은 자신이 알고 싶어 하는 name의 해당 DNS server(authoritative DNS server)가 ip주소를 알려주기를 원할 때 저장되고, 0x00 00(PTR)일 경우 ip주소에 대한 name을 알고 싶을 때 저장된다.
* RTP type은 ip주소에 대한 name을 알아낼 때 사용하는 방식이다. 동작원리는 기본 DNS동작원리와 같다.
- Query class : internet을 의미하는 0x00 01의 값이 저장되어 있다.
• Resource Record(RR)
- name string : Query name string과 같다. 이때 주의 할 점은 c0 xx이 들어가는데 이 c0은 magic number로 이름이 아니라 이름이 있는 위치가 뒤에 있다는 것을 나타낸다. xx는 name string의 위치를 나타내며 message의 처음부터 xx만큼 뒤부터 name string이 시작하는 것을 알려준다.
- Query type : 위의 Query type과 같다.
- Query class : 위의 Query class와 같다.
- TTL : Client cache에 RR의 정보가 저장되어 있을 수 있는 시간이다.
- Resource data length : Resource data의 길이를 나타낸다.
- Resource data : name에 대한 ip나 ip에 대한 name이 저장되게 된다.