包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似的协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。 UDP协议直接位于IP协议的上层。根据OSI参考模型,UDP和TCP都属于传输层协议。UDP协议不提供端到端的确认和重传功能,它不保证数据包一定能到达目的地,因此是不可靠协议。
UDP协议有以下特点:
● UDP是面向事务的协议,它用最少的传输量为应用程序向其它程序发送报文提供了一个途径。
● UDP是无连接的、不可靠的传输机制。在发送数据报前,UDP在发送和接收两者之间不建立连接。
● UDP让应用程序能直接访问网络层的数据报服务,例如分段和重组等网络层所提供的数据报服务。
● UDP使用IP协议作为数据传输机制的底层协议。
● UDP报头和数据都以与最初传输时相同的形式被传送到最终目的地。
● UDP不提供确认,也不对数据的到达顺序加以控制。因此UDP报文可能会丢失。 ● 不实现数据包的传送和重复检测。
● 当数据包在传送过程中发生错误时,UDP不能报告错误。
● 吞吐量不受拥塞控制算法的调节,只受应用程序生成数据的速率、传输带宽、发送端和接收端主机性能的限制。 四. UDP报文格式
下图显示了UDP报文格式。每个UDP报文称为一个用户数据报(User Datagram),用
户数据报分为两个部分:UDP首部和UDP数据。首部被分为四个16位的字段,分别代表源端口号﹑目的端口号﹑报文的长度以及UDP校验和。
图6-2 UDP报文格式
● 源端口:该字段表示发送端的端口号。如果源端口没有使用,那么此字段的值就被
指定为0。这是一个可选的字段。不同的应用程序使用不同的端口号,UDP协议使用端口号为不同的应用程序保留其各自的数据传输通道,从而实现了同一时间段内多个应用程序可以一起使用网络进行数据的发送和接收。
● 目的端口:该字段表示数据包被发往的目的端的端口号。
● 有效负载长度:该字段表示包括UDP首部和UDP数据在内的整个用户数据报的长度。该字段的最小值是8。数据报的最大尺寸随操作系统的不同而不同。在两字节字段中,理论上数据报最多可达65535字节。然而,一些UDP实现将数据报的大小限制到了8192字节。 ● 校验和:UDP的校验的校验范围包括伪首部(IP首部一部分字段)、UDP首部和UDP数据,该字段是可选的。如果该字段值为零就说明不进行校验。
五. UDP封装
当进程有报文要通过UDP发送时,它就把这个报文连同一对套接字地址以及数据的长度
传递给UDP。UDP收到数据后就加上UDP首部。然后UDP就把这用户数据报连同套接字地址一起传递给IP。IP加上自己的首部,在高层协议类型字段使用值17,指出该数据是从UDP协议来的。这个IP数据报再传递给数据链路层。数据链路层接收到IP数据报后,加上
自己的首部(可能还有尾部),再传给物理层。物理层把这些位编码为电信号或光信号,把它发送到远程的主机。如下图所示:
图6-3 UDP封装
六. UDP校验和
UDP校验和的计算与IP和ICMP校验和的计算不同。UDP校验和校验的范围包括三部分:
伪首部、UDP首部以及从应用层来的数据。
伪首部是IP首部的一部分,其中有些字段要填入0。用户数据报封装在IP数据包中。如下图所示:
图6-4 伪首部添加在UDP数据报上
若校验和不包括伪首部,用户数据报也可能是安全的和正确的。但是,若IP首部受到损
伤,则它可能被交付到错误的主机。
伪首部中包含高层协议类型字段是为了确保这个数据包是属于UDP而不是属于TCP(参
见实验七)的。使用UDP的进程和使用TCP的进程可以使用同一个端口号。UDP的高层协议类型字段是17。若在传输过程中这个值改变了,在接收端计算校验和时就可检测出来,UDP就可丢弃这个数据包。这样就不会交付给错误的协议。
1. 在发送端的校验和计算
在发送端按以下步骤计算校验和: (1)把伪首部填加到UDP用户数据报上。 (2)把校验和字段填入零。 (3)按16位长度将数据报分段。
(4)若分段总数不是偶数,则增加一个分段的填充(全0)。填充只是为了计算校验和,计算完毕后就把它丢弃。
(5)把所有16位的分段使用反码算术运算相加。
(6)把得到的结果取反码,它是一个16位的数,把这个数插入到校验和字段。 (7)把伪首部和填充丢掉。
(8)把UDP用户数据报交付给IP进行封装。
在伪首部中的各行的顺序对校验和的计算没有任何影响。此外,增加0也不影响计算的结果。
下图给出了一个计算UDP校验和的例子。这里假定用户数据报的长度是15字节,因此要添加一个全0的字节。
相关推荐: