为什么有的DNS使用的是UDP而不是TCP?

李坤然


回答这个问题,首先要解释一下dns的作用。dns是域名服务的缩写,用于将www.xxx.com此类网址或者域名翻译成ip地址的互联网基础服务,当然反过来翻译也可以。最主要的原因是互联网的任何访问都是基于ip地址的,但是ip地址不方便记忆,域名方便记忆,所以互联网使用者记住域名就好了,翻译的事情交给dns。这种网络基础协议使用非常之频道,几乎打开每个网页都要使用一次,甚至是多次。所以协议设计必须简单,高效。否则提供这种服务的服务器开销会非常大,组网的成本也会变得非常大。使用udp最大的好处就是不需要进行三次握手,将tcp的最低5次交互获取信息,变为2次交互获取信息。此外dns报文设计的也极为简单,几乎没什么验证或者加密的协议字段,而且完全使用明文,这都是为了减小其在提供服务时的网络开销。但是该协议使用到现在的弊病也非常明显,就是因为在udp协议层和应用层没有加密,dns解析报文非常容易被劫持,篡改。后续的dns协议将使用tcp协议,高层使用https。


山上的老白白


UDP和TCP

UDP和TCP是网络通信的两种基本协议,这两种协议各有优缺点。TCP采用连接式的通信方式,可进行多数据包的传输,并保证多数据包的传输顺序,防止丢包, TCP是一种信赖度较高的方式。但是,TCP传输延迟的问题比较明显,而且一次则只能向一台已建立连接的主机发送请求。TCP不适用于需要实时和多方通信的场合。UDP是非连接的传送方式,除了传送数据以外什么都不做。UDP的传输速度较快,但容易丢包。UDP比较适合进行单一数据包的传输,一个数据包大小是512字节,它的传输速度非常快,同时,UDP还可以同时向网段内多台主机发送数据包,这也使得UDP被很多需要实时和多方通信的应用所青睐。为了提高UDP数据传输的信赖度,在UDP的基础上,人们还开发了RTP等实时传输协议。



DNS的前世今生

网络通信依靠的是IP地址,但IP地址不太容易记忆。因此,人们给网络上的主机起了一些比较容易记忆的名称。最初,这些名称被保存在名为hosts.txt的文本文件中,这种方法现在仍然被保留着,比如,Linux上该文件被保存在/etc/hosts下。为了共享这些信息,人们把hosts.txt保存在FTP服务器上,并通过匿名访问实现统一管理。但是,这个文件迅速增大,同时,FTP服务器也不堪重负,于是,80年代初人们制定了DNS标准(RFC1034和RFC1035),对域名实施分布式管理。



DNS使用的协议

域名服务器同时使用TCP和UDP。进行域名解析的时候使用UDP,此时用一个UDP包就够了,延迟少响应快的优势可以最大限度地发挥出来。客户端或者辅助DNS需要同主DNS上的域名列表缓存进行同步时(一般3小时一次),则使用TCP协议,因为此时的数据已经远超一个UDP包的大小了。



随着IPv6的使用,域名解析的数据包已经超过了512字节,使用UDP进行域名解析就不那么可靠了,面对这个新课题,人们正在研究扩展UDP协议的办法。


日冲信息 黄


DNS是一种应用层协议。所有应用层协议都使用两种传输层协议之一UDP和TCP。TCP是可靠的,UDP不可靠。DNS应该是可靠的,但它使用UDP,为什么?

关于传输层上的TCP和UDP,有以下有趣的事实证明了上述情况。

1)UDP速度更快。TCP很慢,因为它需要3次握手。DNS服务器上的负载也是一个重要因素。DNS服务器(因为它们使用UDP)没有保持连接。

2)DNS请求通常非常小,非常适合UDP段。

3)UDP不可靠,但可以在应用层添加可靠性。应用程序可以使用UDP,并且可以通过在应用程序层使用超时和重新发送来实现可靠性。


三僡然
关注

    三僡然


    “网络极客”,全新视角、全新思路,带你遨游神奇的网络世界。


    • 很好的一个技术问题,DNS同时支持TCP和UDP,使用的是53这个端口;

    • 那么,很少有人知道DNS什么时候使用TCP,什么时候使用UDP协议。

    先来简单认识一下TCP和UDP协议,在来看看究竟什么时候使用吧。

    TCP/UDP协议

    TCP协议

    • TCP面向连接的可靠的传输协议,在数据传输之前需要建立三次握手;

    • 有点类似我们打的电话,通话之前需要先建立连接,双方确认在线后在进行数据传输。

    UDP协议

    • UDP面向非连接的不可靠的传输协议,不必建立连接,直接发送数据;

    • 有点类似我们的微信,发送之间无需确定对方是否在线,只需发送信息即可。


    DNS中对TCP和UDP的使用

    通过抓包软件,我们常看到的是UDP的数据包,那么究竟什么时候使用TCP协议呢?

    DNS的区域传输时使用TCP协议

    • 什么是DNS的区域传输,DNS服务器分为主DNS服务器和辅DNS服务器;

    • 在副DNS服务器和主DNS服务器进行通信,加载DNS信息时叫做DNS的区域传输。

    DNS的区域传输使用的是TCP协议,能够提供更加可靠的数据。

    DNS的域名解析时使用UDP协议

    • 用户端向DNS服务器发起域名解释,使用的是UDP协议;

    • UDP协议无需建立连接,能够提供更快的数据访问。


    关于DNS使用何种协议的更多问题?

    欢迎大家留言讨论,喜欢的点点关注。




    网络极客


    UDP是DNS的主要传输协议,事实上大部分基于报文的协议都是UDP的,TCP是流协议适合用来传送大数据。


    分享到:


    相關文章: