DNS基本概念
DNS(Domain NameSystem,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS协议流程
DNS协议运行在TCP协议或者UDP协议之上,使用端口号53。DNS在进行区域传输的时候使用TCP协议(区域传送指的是一台备用服务器使用来自主服务器的数据同步自己的域数据库),其它时候则使用UDP协议。
查询过程:客户向DNS服务器的53端口发送UDP/TCP报文,DNS服务器收到后进行处理,并把结果记录仍以UDP/TCP报文的形式返回过来。
这里我们主要讨论使用UDP报文进行DNS查询的流程。
DNS协议格式
ID | Flages | Questions | Answer RRs | Authority RRs | Additional RRs |
Queries | |||||
Answers | |||||
Authoritative nameservers | |||||
Additional records |
ID:2字节,标识符,通过随机数标识该请求。
Flags:2字节,标志位设置
第1位:msg类型,0为请求(query) 1为响应(response)。
第2-5位:opcode,查询种类,0000表示标准query。
第6位:是否权威应答 (应答时才有意义)。
第7位:因为一个UDP报文为512字节,所以该位指示是否截断超过的部分。
第8位:是否请求递归(这个比特位被请求设置,应答的时候使用的相同的值返 回)。
第9位:由DNS回复返回指定,说明DNS服务器是否支持递归查询(这个比特位 在应答中设置或取消)。
第10-12位:保留位(设置为0)。
第13-16位:应答码(0:没有错误,1:格式错误,2:服务器错误,3:名字错误,4:服务器不支持,5:拒绝,6-15:保留值)。
Questions:2字节,报文请求段中的问题记录数;
AnswerRRs:2字节,报文回答段中的回答记录数;
AuthorityRRs:2字节,报文授权段中的授权记录数;
AdditionalRRs:2字节,报文附加段中的附加记录数;
Queries:查询请求内容(响应时不变即可)
Name:不定长,域名(例子:www.baidu.com需写作: 3www5baidu3com0)。
Type:2字节查询的资源记录类型。
Class:2字节指定信息的协议组。
Answers:查询响应内容,可以有0-n条(请求时为空即可)
Name:2字节(压缩编码)指向name第一次出现的地址且前两个bit为11
Type:2字节响应类型。
Class:2字节
TTL:4字节
Datalength:2字节,指接下来的data长度,单位为字节。
Address/CNAME:4字节地址/不定长域名
Authoritativenameservers:
Name:2字节(压缩编码)指向name第一次出现的地址且前两个bit为11
Type:2字节响应类型。此处为2(NS)
Class:2字节
TTL:4字节
Datalength:2字节,指接下来的data长度,单位为字节。
nameserver:此处为6字节,表示的,表示方法待研究。
Additionalrecords:
Name:2字节(压缩编码)指向name第一次出现的地址且前两个bit为11
Type:2字节响应类型。
Class:2字节,表示类型
TTL:4字节
Datalength:2字节,指接下来的data长度,单位为字节。
Address:此处为4字节地址
相关技术资料源自:
http://cjhust.blog.163.com/blog/static/1758271572014111875652363/http://blog.chinaunix.net/uid-12077794-id-91657.html
http://www.cnblogs.com/pied/p/3571055.html
http://www.cnblogs.com/pianoid/archive/2011/04/26/2029732.html