DNS
DNS【域名系统:(英文:Domain Name System,缩写:DNS)】是互联网的一项服务。 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS使用TCP和UDP端口53。
白话版
就是客户端(例如:浏览器)传入的网站域名,到DNS列表中找到对应的ip返回给客户端,然后客户端根据ip就可以找到对应的服务器,就可以向服务器发送请求了。
说的在直接点:DNS目的就是把对应服务器IP给客户端。最后客户端与服务器通信就没DNS什么事了。
DNS 报文格式
DNS报文格式,不论是请求报文,还是DNS服务器返回的应答报文,都使用统一的格式。
Header
报文头Question
查询的问题Answer
应答Authority
授权应答Additional
附加信息
DNS format
+--+--+--+--+--+--+--+
| Header |
+--+--+--+--+--+--+--+
| Question |
+--+--+--+--+--+--+--+
| Answer |
+--+--+--+--+--+--+--+
| Authority |
+--+--+--+--+--+--+--+
| Additional |
+--+--+--+--+--+--+--+
复制代码
Header 报文头
ID
:2
个字节(16bit
),标识字段,客户端会解析服务器返回的DNS应答报文,获取ID
值与请求报文设置的ID
值做比较,如果相同,则认为是同一个DNS会话。FLAGS
:2
个字节(16bit
)的标志字段。包含以下属性:QR
:0
表示查询报文,1
表示响应报文;opcode
: 通常值为0
(标准查询),其他值为1
(反向查询)和2
(服务器状态请求),[3,15]
保留值;AA
: 表示授权回答(authoritative answer)-- 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器;TC
: 表示可截断的(truncated)--用来指出报文比允许的长度还要长,导致被截断;RD
: 表示期望递归(Recursion Desired) -- 这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的;RA
: 表示支持递归(Recursion Available) -- 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询;Z
: 保留值,暂未使用;RCODE
: 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下:0
: 没有错误。1
: 报文格式错误(Format error) - 服务器不能理解请求的报文;2
: 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求;3
: 名字错误(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在;4
: 没有实现(Not Implemented) - 域名服务器不支持查询类型;5
: 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答.比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer);[6,15]
: 保留值,暂未使用。
QDCOUNT
: 无符号16bit
整数表示报文请求段中的问题记录数。ANCOUNT
: 无符号16bit
整数表示报文回答段中的回答记录数。NSCOUNT
: 无符号16bit
整数表示报文授权段中的授权记录数。ARCOUNT
: 无符号16bit
整数表示报文附加段中的附加记录数。
Header format
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
复制代码
Question 查询字段
QNAME
无符号8bit
为单位长度不限表示查询名(广泛的说就是:域名).QTYPE
无符号16bit
整数表示查询的协议类型.QCLASS
无符号16bit
整数表示查询的类,比如,IN
代表Internet.
Question format
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ... |
| QNAME |
| ... |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
复制代码