在该图中,我们特地举了一个奇数长度的数据报例子,因而在计算检验和时需要加上填
充字节。注意,U D P数据报的长度在检验和计算过程中出现两次。
如果检验和的计算结果为 0,则存入的值为全 1(6 5 5 3 5),这在二进制反码计算中是等效
的。如果传送的检验和为0,说明发送端没有计算检验和。
如果发送端没有计算检验和而接收端检测到检验和有差错,那么 U D P数据报就要被悄悄
地丢弃。不产生任何差错报文(当 I P层检测到I P首部检验和有差错时也这样做)。
U D P检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为
了发现U D P首部和数据在发送端到接收端之间发生的任何改动。
尽管U D P检验和是可选的,但是它们应该总是在用。在 8 0年代,一些计算机产商在默认
条件下关闭U D P检验和的功能,以提高使用 U D P协议的N F S(Network File System)的速度。
在单个局域网中这可能是可以接受的,但是在数据报通过路由器时,通过对链路层数据帧进
行循环冗余检验(如以太网或令牌环数据帧)可以检测到大多数的差错,导致传输失败。不
管相信与否,路由器中也存在软件和硬件差错,以致于修改数据报中的数据。如果关闭端到
端的U D P检验和功能,那么这些差错在 U D P数据报中就不能被检测出来。另外,一些数据链
路层协议(如S L I P)没有任何形式的数据链路检验和。
Host Requirements RFC声明,U D P检验和选项在默认条件下是打开的。它还声明,
如果发送端已经计算了检验和,那么接收端必须检验接收到的检验和(如接收到检验
和不为0)。但是,许多系统没有遵守这一点,只是在出口检验和选项被打开时才验证
接收到的检验和。