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
   46   47   48   49   50   51   52   53   54   55   56