UDP 检验和概述
UDP 检验和覆盖 UDP 首部和 UDP 数据。 回想 IP 首部的检验和,它只覆盖 IP 的首部 — 并不覆盖 IP 数据报中的任何数据。 UDP 和 TCP 在首部中都有覆盖它们首部和数据的检验和。 UDP 的检验和是可选的,而 TCP 的检验和是必需的。
UDP 检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。 其目的是为了发现 UDP 首部和数据在发送端到接收端之间发生的任何改动。
尽管 UDP 检验和是可选的,但是它们应该总是在用。 在 80 年代,一些计算机产商在默认条件下关闭 UDP 检验和的功能, 以提高使用 UDP协议的 NFS(Network File System)的速度。 在单个局域网中这可能是可以接受的,但是在数据报通过路由器时,通过对链路层数据帧进 行循环冗余检验(如以太网或令牌环数据帧)可以检测到大多数的差错,导致传输失败。 不管相信与否,路由器中也存在软件和硬件差错,以致于修改数据报中的数据。 如果关闭端到端的 UDP 检验和功能,那么这些差错在 UDP 数据报中就不能被检测出来。 另外,一些数据链路层协议(如 SLIP)没有任何形式的数据链路检验和。
很难知道某个特定系统是否打开了 UDP 检验和选项。 应用程序通常不可能得到接收到的 UDP 首部中的检验和。
UDP 检验和(事实上,TCP/IP 协议簇中所有的检验和)是简单的 16 bit 和。 它们检测不出交换两个 16 bit 的差错。
不要完全相信数据链路(如以太网,令牌环等)的 CRC 检验。 应该始终打开端到端的检验和功能。而且,如果你的数据很有价值,也不要完全相信 UDP 或 TCP 的检验和, 因为这些都只是简单的检验和,不能检测出所有可能发生的差错。
Ref
《TCP/IP 详解 卷 1:协议》第 1 章 概述 11.3 UDP 校验和