If you want to write programs that can utilize DNS messages then you must understand the format. So where will you find all the queries and responses that DNS uses to resolve addresses? Well the majority are mostly contained within UDP, each message will be fully contained within a UDP datagram. They can also be relayed using TCP/IP but in this instance they are prefixed with a 2 byte value which indicates the length of the query or response. The extra 2 bytes are not included in this calculation – a point which is important!
All DNS communication exists with a format simply called a message. Every different function in DNS from simple queries to Smart DNS functions will all use this very same format. The format of the message follows this basic template –
- Question – For the Name Server
- Answer – Answering the Question
- Authority – Point Towards Authority
- Additional – Additional Information
Some sections will be missing depending on the query, however the header will always be present. This is because within the header you’ll find fields which specify which of the remaining sections are indeed present, also whether the message is a query or a response and finally if there are any specific codes present.
Each name of the sections following the header are derived from their actual use, it’s all pretty common sense stuff. The Question section is indeed a question directed at a Name Server, within this section are fields which define the question.
- QTYPE – Query Type
- QCLASS – Query Class
- QNAME – Query Domain Name
Specifically if you are programming or developing any application which relies on this functionality like the best Smart DNS service for example it is important to understand these classes properly. Also programmers will need to understand the specific format of the classes. The QNAME represents the domain name being queried as a sequence of labels. Each one of these labels consists of a length octet followed by a number.