SC-办威海证-徵/电【131-2220-1112同号】本地哪里办威海证【Vq:7736661】『办.做.各.种.类.型.的.证.件』办毕业文凭学位不动产权做房产结婚离婚车辆登记教师-证/UDP 和 TCP 的区别大家都清楚。一个 TCP 通信,是需要三次握手的,在不得已使用 TCP 的情况下,会比使用 UDP 多出来很多额外开销:
TCP 建立连接需要进行三次网络通信;
TCP 建立连接需要传输 ~130 字节的数据;
TCP 销毁连接需要进行四次网络通信;
TCP 销毁连接需要传输 ~160 字节的数据;
如果是 DNS 刚刚提出的那几年里,TCP 确实没有在 DNS 中使用的必要,或者说仅仅当做一个紧急时刻的备份就行(有的 DNS 服务器甚至不支持 TCP)。
然而,时代变了!我们现在网络情况远比几十年前复杂,IPv4 就要被 IPv6 替代,人们对于数据安全也越来越重视。DNS 需要传递的数据越来越大,MTU 可能会直接截断数据,我们要想别的办法了。
MTU是啥
MTU (Maximum Transmit Unit),最大传输单元,即物理接口(数据链路层)提供给其上层最大一次传输数据的大小,比如 IP 层、MPLS 层等等,因为目前应用最多的接口是以太网,所以谈谈以太网口的 MTU 。
假定其上层协议是 IP ,缺省 MTU = 1500,意思是:整个 IP 包最大从这个接口发送出去的是 1500 个字节。可以通过配置修改成更大或更小的值,只要在系统的边界值以内即可,但是切记要在链路的两端都要修改,而且要大小一样,如果不一样,会造成大侧的数据被小侧丢弃!
较大的 MTU 带来更高的效率,因为每个网络数据包都承载更多的用户数据,而协议开销(例如报头或每个数据包的基本延迟)则保持不变。更高的效率意味着批量协议吞吐量的提高。较大的 MTU 还要求处理相同数量的数据的较少数据包。在某些系统中,按数据包处理可能是关键的性能限制。
但是,这种收益并非没有缺点。大数据包比小数据包占用慢速链接的时间更多,从而导致后续数据包的延迟更大,增加了网络延迟和延迟变化。例如,一个 1500 字节的数据包(以太网在网络层允许的最大数据包)占用了 14.4k ,需要调制解调器大约一秒钟的时间。
而且在存在通信错误的可能性的前提下,大数据包也会有额外的问题:如果不使用前向纠错功能,则数据包中单个位的损坏将要求重新传输整个数据包,这会增加成本。在给定的误码率下,较大的数据包更容易受到损坏。更大的有效负载使重发更大的数据包需要更长的时间。更加详细的内容,可以查看这份文件。
TCP 扶正
为了防止 MTU 直接截断 DNS 文件,直接将支持 TCP 作为 DNS 服务器的强制要求。
https://biz.ifeng.com/c/7ztFAcNJB9W
TCP 作为可靠的传输协议,通过序列号、重传等机制能够保证消息的不重不漏,消息接受方的 TCP 栈会对分片的数据重新进行拼装,DNS 等应用层协议可以直接使用处理好的完整数据。同时,当数据包足够大的时候,TCP 三次握手带来的额外开销比例就会越来越小,与整个包的大小相比就会趋近于 0。
当 DNS 数据包大小为 500 字节时,TCP 协议的额外开销为 ~41.2%;
当 DNS 数据包大小为 1100 字节时,TCP 协议的额外开销为 ~20.7%;
当 DNS 数据包大小为 2300 字节时,TCP 协议的额外开销为 ~10.3%;
当 DNS 数据包大小为 4800 字节时,TCP 协议的额外开销为 ~5.0%;
所以,我们在 DNS 中存储较多的内容时,TCP 三次握手以及协议头带来的额外开销就显得不是那么关键了,不过我们 TCP 三次握手带来的三次网络传输耗时还是没有办法避免的,这也是我们在目前的场景下不得不接受的现实。