Page 51 - Web性能权威指南
P. 51
࿋
ᇸ܋੨ ణՔ܋੨
܈ ၯᄓࢅ
৫ࢁ
图 3-2:UDP 首部(8 字节)
事实上,UDP 数据报中的源端口和校验和字段都是可选的。IP 分组的首部也有校验
和,应用程序可以忽略 UDP 校验和。也就是说,所有错误检测和错误纠正工作都可
以委托给上层的应用程序。说到底,UDP 仅仅是在 IP 层之上通过嵌入应用程序的
源端口和目标端口,提供了一个“应用程序多路复用”机制。明白了这一点,就可
以总结一下 UDP 的无服务是怎么回事了。
• 不保证消息交付
不确认,不重传,无超时。
• 不保证交付顺序
不设置包序号,不重排,不会发生队首阻塞。
• 不跟踪连接状态
不必建立连接或重启状态机。
• 不需要拥塞控制
不内置客户端或网络反馈机制。
TCP 是一个面向字节流的协议,能够以多个分组形式发送应用程序消息,且对分组
中的消息范围没有任何明确限制。因此,连接的两端存在一个连接状态,每个分组
都有序号,丢失还要重发,并且要按顺序交付。相对来说,UDP 数据报有明确的限
制:数据报必须封装在 IP 分组中,应用程序必须读取完整的消息。换句话说,数据
报不能分片。
UDP 是一个简单、无状态的协议,适合作为其他上层应用协议的辅助。实际上,这
个协议的所有决定都需要由上层的应用程序作出。不过,在急着去实现一个协议来
扮演 TCP 的角色之前,你还应该认真想一想这里涉及的复杂细节,比如 UDP 要与
很多中间设备打交道(NAT 穿透),再想一想设计网络协议的那些最佳实践。如果
没有周密的设计和规划,一流的构想也可能沦为二流的 TCP 实现。TCP 中的算法和
状态机已经经过了几十年的磨合与改进,而且吸收几十种并不那么容易重新实现的
机制。
UDP的构成 | 33