谢谢网络极客的邀请。为什么有的DNS使用的是UDP而不是TCP?
UDP和TCP是网络通信的两种基本协议,这两种协议各有优缺点。TCP采用连接式的通信方式,可进行多数据包的传输,并保证多数据包的传输顺序,防止丢包, TCP是一种信赖度较高的方式。但是,TCP传输延迟的问题比较明显,而且一次则只能向一台已建立连接的主机发送请求。TCP不适用于需要实时和多方通信的场合。UDP是非连接的传送方式,除了传送数据以外什么都不做。UDP的传输速度较快,但容易丢包。UDP比较适合进行单一数据包的传输,一个数据包大小是512字节,它的传输速度非常快,同时,UDP还可以同时向网段内多台主机发送数据包,这也使得UDP被很多需要实时和多方通信的应用所青睐。为了提高UDP数据传输的信赖度,在UDP的基础上,人们还开发了RTP等实时传输协议。
网络通信依靠的是IP地址,但IP地址不太容易记忆。因此,人们给网络上的主机起了一些比较容易记忆的名称。最初,这些名称被保存在名为hosts.txt的文本文件中,这种方法现在仍然被保留着,比如,Linux上该文件被保存在/etc/hosts下。为了共享这些信息,人们把hosts.txt保存在FTP服务器上,并通过匿名访问实现统一管理。但是,这个文件迅速增大,同时,FTP服务器也不堪重负,于是,80年代初人们制定了DNS标准(RFC1034和RFC1035),对域名实施分布式管理。
域名服务器同时使用TCP和UDP。进行域名解析的时候使用UDP,此时用一个UDP包就够了,延迟少响应快的优势可以最大限度地发挥出来。客户端或者辅助DNS需要同主DNS上的域名列表缓存进行同步时(一般3小时一次),则使用TCP协议,因为此时的数据已经远超一个UDP包的大小了。
随着IPv6的使用,域名解析的数据包已经超过了512字节,使用UDP进行域名解析就不那么可靠了,面对这个新课题,人们正在研究扩展UDP协议的办法。
联系客服