首页 > 编程知识 正文

dns协议的主要功能,udp广播需要端口号吗

时间:2023-05-06 01:01:19 阅读:167897 作者:137

为什么DNS协议使用UDP? 你只使用UDP吗? 那么,你有没有想过,既然UDP更快,为什么HTTP不使用UDP呢?

另外,为什么 DNS 协议使用 UDP 这个问题本身其实并不完全正确,DNS 并非只使用 UDP 协议,它同时占用了 UDP 和 TCP 的 53 端口,作为单个应用层的协议,DNS 同时使用两种传输协议也属实是个另类了。

让我们从TCP和UDP的比较说起DNS为什么同时使用TCP和UDP。 虽然一直以来都是热门话题,但我想大多数同学都忽略了一点。 稍后指出。

1 ) TCP需3次握手建立连接,4次挥手解除连接; 不需要UDP,面向无连接

2 ) TCP报头需要20个字节,UDP的开头只有8个字节

3 ) TCP有一套保证可靠传输的机制; UDP尽最大努力提供,不提供可靠的传输机制。 在数据传输中发生部分数据丢失的情况下,UDP协议本身无法进行任何检测或修复措施

4 )因为UDP中没有可靠的传输机制,所以比TCP速度要快得多。 在一些情况下,UDP是最有效的工作方式,并且通常用于即时消息,例如语音电话、即时消息等中。 TCP一般用于传输文件、收发邮件、远程登录等要求准确性的场景

上面这些是最基本的吧。

接下来讲的这个点,也就是很多人容易忽略的点,和 DNS 为什么需要同时使用 UDP 和 TCP 这个问题息息相关:

那就是TCP面向字节流,UDP面向消息

解释这句话,我们知道TCP有序列号的结构,发送方将一个大的HTTP消息按序列号分成几个段并加上TCP报头,即封装在TCP段中。 当接收侧接收到这些TCP消息段时,根据序号以原来的顺序重构HTTP消息。 这就是面向字节流的TCP。

关于UDP的消息指向,发送方的UDP对于从APP应用层传送来的HTTP消息增加UDP报头后,即封装成UDP消息,传递到网络层IP协议。 不拆分和合并主要是因为UDP没有类似TCP的序列号机制,而且缺省情况下只有一条UDP消息来标识消息。

UDP 这么做就会导致一个问题。

为了利用因特网上物理链路的最大传输单元=576字节,在物理链路上成功传输,UDP消息不应该超过576字节,因此UDP消息被限制为小于512字节。

因为DNS使用大面积UDP,所以当DNS消息超过512字节时,基于UDP的DNS消息仅被丢弃多馀的64字节,截断为512字节,并且用户获得的DNS消息不完整。

如何解决这个问题呢?

没错,最简单的方法是使用TCP。 速度可能比UDP慢,但是为了获得完整的DNS消息,速度慢也是可以容忍的。

在了解了DNS在什么情况下使用UDP和TCP,TCP是面向字节流的,UDP是面向消息的特性之后,域名解析时,也就是客户端询问DNS服务器以获得IP地址时,DNS协议的UDP和TCP

1)若客户端事先知道 DNS 响应报文的长度会大于 512 字节,则应当直接使用 TCP 建立连接

2)若客户端事先不知道 DNS 响应报文的长度通常首先使用UDP协议发送DNS查询消息,并且当DNS服务器接收到DNS应答消息的长度超过512字节时,将多余部分丢弃于UDP中(http://) 服务器将其部分丢弃的DNS消息头的TC标志位置作为1通知客户端,以便客户端在接收到TCP请求后重新发送,并从DNS服务器接收完整的响应消息。

当然了,在域名解析的时候,一般返回的 DNS 响应报文都不会超过 512 字节,用 UDP 传输即可实际上,如果配置了许多DNS服务器,则只支持UDP查询包。

但是,DNS不仅有域名解析的过程,还有区域传输的过程。 在进行区域传输时,DNS强制使用TCP协议。

什么是区域传输? 这必须提到主域名服务器和辅助域名服务器。

设置域名服务器时,服务器管理员可以选择将域名服务器指定为主服务器还是辅助服务器(也称为从服务器)。

主域名服务器负责维护一个区域的所有域名信息,是所有特定信息的权威信息源,数据可以修改。 主服务器直接从本地文件中获取此信息。 只有在主服务器上更改区域的DNS记录时,主服务器才能更新辅助服务器。

当主域名服务器出现故障、关闭或负载过重时

ng>,辅助域名服务器作为主域名服务器的备份提供域名解析服务。辅助域名服务器中的区域文件中的数据是从主域名服务器中复制过来的,无法自行修改。

其实就是主从的概念,各位应该也都比较熟悉了。主域名服务器用来写,辅助域名服务器用来读,提供负载均衡的能力,缓解主域名服务器的压力。

那么所谓区域传输(zone transfer) 呢,就是辅助域名服务器与主域名服务器通信,并同步数据信息的过程。

辅域名服务器会定时向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传输。区域传输使用 TCP 而不是 UDP,因为数据同步传送的数据量比一个 DNS 请求和响应报文的数据量要多得多。

文章开头提到的既然 UDP 更快,为什么 HTTP 不使用 UDP 呢?这个问题的答案也大抵如此。

由于互联网的不安全性,我们需要数字证书并携带数字签名来保证数据的安全性,为此,整个 HTTP 报文的大小已经远远超过 512 字节,无法使用 UDP 传输。

小结

综上,总结下,虽然 UDP 速度更快,DNS 协议也确实大面积使用了 UDP,但是由于 UDP 面向报文、只能传输小于 512 字节的特性,DNS 并非只使用了 UDP,具体的 TCP 和 UDP 使用场景如下:

DNS 在域名解析的过程中,会根据 DNS 响应报文的大小选择使用 TCP 还是 UDP。但是一般情况下,返回的 DNS 响应报文都不会超过 512 字节,所以事实上,很多 DNS 服务器进行配置的时候,也仅支持 UDP 查询包;
DNS 在进行区域传输的时候使用 TCP 协议。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。