UDP数据可以被传送损坏吗?

问题描述:

UDP数据可能会损坏吗?我知道它有可能会丢失。UDP数据可以被传送损坏吗?

UDP数据包使用16位校验和。 UDP数据包发生腐败并不是不可能的,但它不太可能。无论如何,它不会比TCP更容易受到腐败。

+2

从技术上讲,校验和是可选的。从RFC 768开始:“所有零传输的校验和值意味着发送器不生成校验和(用于调试或不关心更高级别的协议)”。 – 2008-09-11 18:34:07

+0

是的,但是:a)我猜测校验和总是针对正常的,没有特别配置的UDP传输进行计算,b)如果数据包看起来具有正确的长度和校验和,那么它是正确的,否则系统不会将这样的数据包传送给呼叫者。对? – Ethouris 2016-11-15 12:45:29

可能吗?绝对。未被发现? Unlikely,因为UDP使用校验和来要求多位错误显示有效。如果检测到错误,系统可能会丢弃数据包 - 这就是使用UDP的风险。

UDP数据包也可能无序发送,所以如果你在UDP上设计一个协议,你也必须考虑到这一点。

影响不知情的程序员的“腐败”的常见形式是数据报截断。请参阅“UNIX网络编程”史蒂文斯的详细信息(在第2版第539页。)

你可能会检查MSG_TRUNC标志...

首先,在“IP校验和”上面提到的仅仅是一个IP标头校验和。它不保护有效载荷。参见RFC 791

其次,UDP允许传输无校验和,这意味着16位校验和被设置为0(即无)。参见RFC 768.(发送的所有零校验和值表示发送器不生成校验和)

第三,正如其他人所提到的,UDP有一个16位的校验和,这不是检测多位错误,但并不差。一个未被发现的错误当然可能潜入,但不太可能。