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

时间:2010-12-25 07:22:59

标签: network-protocols

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

3 个答案:

答案 0 :(得分:7)

可能会出现不同的错误:

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

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

数据损坏

如果在每个数据包的标头中使用校验和字段,则UDP仅对数据包内的数据损坏具有抵抗力。基本上它需要标题,数据包内容和一些更多信息(如IP地址),将其解释为一个包含16位字的完整补码并将它们加起来UDP checksum

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

所有其他问题

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

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

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

答案 1 :(得分:2)

IP protocol级别(UDP和TDP都基于此级别),有一个校验和,用于确认数据包的内容是否有效。但是,在某些情况下,此校验和会检测到某些错误

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

答案 2 :(得分:1)

如果我从各个班级回忆起来,Greg是正确的,校验和是几个数据验证来源之一。但是,UDP(按其设计方式)并不总是100%可靠。这使得它非常适合流式传输数据(例如网络摄像头),因为丢失帧并不是什么大不了的事。虽然这会被视为TCP中的错误(然后必须重新发送帧,延迟所有后续帧),但UDP并不关心它,除非它被配置为。

如果需要接收所有数据,请求方的相关协议确保要求发送每个数据包,通常是按顺序发送。 Checksum在这里进行播放,然后检查每个部分以确保它是正确的(当数据部分错误偶数次时会出现小问题,因为校验和可能会产生误报,但这种情况非常罕见)。每次部件出现故障时,都会重新请求它,直到它们都被收到并且校验和给出了竖起大拇指。当接收到每个部分时,接收方的协议响应发送方,即外包很酷。如果发件人在一段时间内没有收到此响应,则会重新发送该数据包。