TCP和UDP如何检测传输错误?

use*_*221 6 network-protocols

我想知道这些协议如何检测数据传输过程中发生的错误?谢谢

Tob*_*obi 7

可能会出现不同的错误:

  • 数据包的顺序不正确
  • 丢包
  • 数据包内的数据损坏
  • 幻像数据包(接收者获取从未发送过的数据包)

UDP仅提供克服数据损坏的机制(这是IPv4中的可选功能,在IPv6中是强制性的).

数据腐败

如果在每个数据包的标头中使用校验和字段,则UDP仅抵抗数据包内数据的损坏.基本上它需要标头,数据包内容和一些更多的信息(如IP地址),将其解释为一个16位字的完整补码列表,并将它们汇总到UDP校验和.

TCP采用类似的方法来解决数据损坏问题.

所有其他问题

TCP为每个数据包都有所谓的序列号.序列号解决了字节数,因此如果发送方说"这是序列号为102的数据包",他说,他发送的数据包从流的字节102开始.接收器然后向接收器发送和确认.例如,如果分组具有10个字节的长度,则接收器将发送序列号为112的Ack,这意味着"我希望接收下一个分组以序列号112开始".每个具有不同序列号的数据包都是重复的(太低)或丢失的数据包(接收的序列号太高)或者是幻像(预期序列号和接收序列号的总不匹配).所以在所有序列号不匹配的情况下,

发送者等待接收者的确认.如果他在一段时间内没有收到预期的确认,他将重新发送数据包,因为他认为数据包在途中丢失了.

这只是一个非常简短的解释.这个话题比这里描述的要大一些;)


Gre*_*ill 2

IP 协议级别(UDP 和 TDP 均以此为基础),有一个校验和来确认数据包的内容是否有效。但是,在某些情况下,此校验和无法检测到某些错误。

通常在较高级别(例如传输文件时),会根据文件内容计算出更稳健的哈希值。这可以在整个文件上完成,也可以在某个大小的文件的各个块上完成(通常比单个 IP 数据包大得多)。

  • IP 级校验和仅检查 IP 标头中的错误。 (4认同)