UDP数据可能会损坏吗?我知道它可能会丢失。
答案 0 :(得分:21)
UDP数据包使用16位校验和。 UDP数据包不是不可能有腐败,但它不太可能。在任何情况下,它都不比TCP更容易受到腐败。
答案 1 :(得分:14)
首先,上面引用的“IP校验和”只是一个IP头校验和。它不保护有效载荷。请参阅RFC 791
其次,UDP允许使用NO校验和进行传输,这意味着16位校验和设置为0(即无)。请参阅RFC 768.(全零传输校验和值表示发送器未生成校验和)
第三,正如其他人所提到的,UDP有一个16位的checkSUM,这不是检测多位错误的最佳方法,但也不错。一个未被发现的错误当然可能会潜入,但不太可能。
答案 2 :(得分:6)
可能?绝对。未被发现? Unlikely,因为UDP采用校验和,需要多位错误才能显示有效。如果检测到错误,系统可能会丢弃数据包 - 这就是使用UDP的风险。
答案 3 :(得分:5)
UDP数据包也可能无序传送,因此如果您要在UDP之上设计协议,您也必须考虑到这一点。
答案 4 :(得分:3)
影响毫无戒心的程序员的一种常见形式的“腐败”是数据报截断。有关详细信息,请参阅Stevens的“Unix网络编程”(第2版第539页)
您可以查看MSG_TRUNC标志...
答案 5 :(得分:0)
简短的回答:是的。
详细答案:
大约7年前(也许是2011年?)我们发现,当在中国的一台计算机与韩国的另一台计算机之间交换UDP数据报时,UDP数据报无意间发生了变化。当然,UDP包头中的校验和也与有效负载变化有关。两台计算机中没有恶意软件。
我们发现无意更改仅在以下条件匹配时发生:
我不是确切原因,但我粗略猜测是China Golden Shield。
因此,我们将数据报收集算法添加到软件ProudNet中,问题就消失了。实施起来并不难。只需对数据报的前几个字节进行编码或混淆。