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?