dns协议及帧格式

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
DNS协议运行在UDP/TCP协议之上,使用端口号53。
RFC1035 : https://tools.ietf.org/html/rfc1035

协议格式:
dns协议及帧格式_第1张图片

ID(2字节):response 报文和request报文 ID一致
Flags(2字节)这里写图片描述
QR(1bit):查询/响应的标志位,1为响应,0为查询
opcode(4bit):定义查询或响应的类型(0为标准的,1为反向的,2为服务器状态请求,3-15保留值)
AA(1bit):授权回答的标志位。该位在响应报文中有效,1表示域名服务器是权限服务器
TC(1bit):截断标志位。1表示响应已超过512字节并已被截断
RD(1bit):被请求报文设置,该位为1表示客户端希望得到递归回答,应答时使用相同的值返回。
RA(1bit):支持递归, 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询。
zero(3bit):保留字段。
rcode(4bit):返回码,表示响应的差错状态,通常为0和3,各取值含义如下:
0 无差错
1 报文格式差错(Format error)服务器不能理解的请求报文
2 服务器失败(Server failure)因为服务器的原因导致没办法处理的请求
3 名字错误(Name error) 只有对授权域名解析服务器有意义,指出解析的域名不存在
4 没有实现(Not Implemented)域名服务器不支持的查询类型
5 拒绝(Refused)服务器由于设置的策略据局给出应答
6 - 15 保留值
问题数(2字节):无符号16位整数表示报文请求段中的问题记录数。
应答数(2字节):无符号16位整数表示报文回答段中的回答记录数。
授权资源记录数: 无符号16位整数表示报文授权段中的授权记录数。
附加资源记录数:无符号16位整数表示报文附加段中的附加记录数。

查询问题区域
dns协议及帧格式_第2张图片

查询名长度不定,举个例子来说明更直观些,查询名为gemini.tuc.noao.edu的话,查询名字段如下:
这里写图片描述
查询类型(2字节):一般为A,具体取值参考如下

  • A (1) 期望获得查询名的IP地址。
    CNAME (5) 规范名称。
    PTR (12) 指针记录。
    HINFO (13) 主机信息。
    MX (15) 邮件交换记录。
    AXFR (252) 对区域转换的请求。
    ANY (255) 对所有记录的请求。

查询类(2字节):表示查询的协议类,

  • IN (1) 指互联网地址。

回答区域
dns协议及帧格式_第3张图片

如果回答区域有多条记录(如一个域名查询,返回多个ip),每条记录均为以上格式,贴一个wireshark 抓包的图片:
dns协议及帧格式_第4张图片

Answer区域,有两条记录,点开第一条记录,分别记录了
Name(域名)、Type(类型)、Class(类)、Time to live(生存时间)、Data length(资源数据长度), Address(资源数据)

本文参考链接:http://blog.chinaunix.net/uid-24875436-id-3088461.html

其他参考资料:
因特网的域名结构可参考:http://blog.csdn.net/yipiankongbai/article/details/25031461
dns 负载均衡可参考:http://blog.csdn.net/cywosp/article/details/38017027
dns基于TCP协议可参考:http://benbenxiongyuan.iteye.com/blog/1088085
EDNS可参考:http://blog.sina.com.cn/s/blog_5610604c0100p1qb.html 和
https://wenku.baidu.com/view/2184c6f465ce050877321344.html

你可能感兴趣的:(dns)