域名系统 -- DNS

2016-04-08 20:12:02   最后更新: 2016-04-18 20:34:26   访问数量:544




域名系统 DNS 是一种用于 TCP/IP 应用程序的分布式数据库,提供主机名到 IP 地址之间的转换和电子邮件的选录信息

DNS 提供了允许 Internet 上的查询服务器和客户程序相互通信的协议

DNS 的访问是通过一个地址解析器 resolver 来完成的,在 Unix 主机中,该解析器是通过两个库函数来访问的:

gethostbyname 和 gethostbyaddr,参看:

名字与地址转换函数

 

 

如上图所示,查询问题、回答、授权、额外信息这些字段都是根据上面的记录数动态扩展的,因此整个报文由 12 字节长度的首部和 4 个长度可变的字段组成

标识字段由客户程序设置并由服务器返回结果:

  • QR -- 0 表示查询报文,1 表示响应报文
  • opcode -- 0 表示标准查询,1 表示反向查询,2 表示服务器状态请求
  • AA -- 授权回答
  • TC -- 可截断,使用 UDP 时,表示如果总长度超过 512 字节,只返回前 512 字节
  • RD -- 期望递归,为 0 则当请求的 DNS 服务器没有一个授权的回答时,返回一个其他 DNS 服务器列表,以使客户进行迭代查询
  • RA -- 可用递归,为 1 则表示服务器支持递归查询
  • rcode -- 0 表示没有差错,3 表示名字差错

 

DNS 服务器都使用 53 端口通信,同时支持 UDP 和 TCP 访问,由于 UDP 无连接,在网络较差的环境中依然能够通信,由两端自行处理重发机制,这样的设计穿透能力更强,因此 DNS 主要使用 UDP 通信,当请求超过 512 字节时,由于 UDP 报文限制,所以会使用 TCP 来进行传输

有关 UDP 报文,参看:

用户数据报协议 -- UDP

 

上面提到了 UDP 请求不能超过 512 字节,这是为什么呢?

所有的主机必须能够重新组合最多为 576

字节的数据报,但实际上是应该能够重新组合与系统接口的MTU规格相同的数据报(RFC1122),因为TCP可以把数据分片,所以这个规定不会影响TCP,但对于不分片的

UDP,就必须限制在 576 字节内了,512 字节的限制则显然更为合理

 






技术帖      ip      tcp      udp      龙潭书斋      服务器      dns      域名     


京ICP备15018585号