8. 不需要这些花里胡哨的东西
协议简单介绍
看完TCP懵了, 没想到有如此多的特性, 已经多到有些麻烦了, 那么就搞一种最简化的设计, 什么功能都没有, 只保证一些最基本的, 有多基本:
看看上面的图, IP地址放在IP头里, 因此这种协议头只加了通信双方的端口, 包长, 以及一个checksum:
端口是通讯的最基本, 因此端口一定要加的
checksum: 保证一下数据没有被篡改过
包长: 还有个包长!
这下方便了, 我们在UDP协议里不搞流那一套, UDP简单到应用层让我发什么, 我就全用一条消息发出去, 那么UDP包就标准的代表了一条消息, 然后经过IP协议的MTU切一下就发出去
缺少的特性
UDP什么都不保证, TCP里搞的那些特性它全都没有:
不管有没有收到
不管包序
都没有连接的概念, 你想发你就丢出去
DNS
没有连接自然也没有握手, UDP甚至是没有握手的, 就直接丢出去了, 也正是因为没有握手这个特点, 它成了DNS的一个主要选项, 我们在DNS里面主要讲究的就是一个效率, 如果TCP的话要搞三次握手, 查域名服务器还要三次握手(1.5RTT)算上延时时间很长了, 关键是如果上一级域名服务器没有, 那还要继续向上爬, 那就又是一个1.5RTT, 因此对于一些冷门域名这还是非常浪费时间的.
用UDP查DNS也有自己的问题, DNS默认应答消息长度是512, 如果查询结果长度超过512多出来的部分不会拆成两个包而是直接丢弃, 因此DNS规定如果包丢了, 或者消息不完成整, 就会用TCP重试
Last updated
Was this helpful?