数据包丢失和数据包重复



我正在努力找出数据包丢失和数据包重复问题之间的区别。有人知道"数据包重复"是什么吗?当在TCP中检测到丢失时,这与重新传输数据包相同吗?

否。在TCP中,"数据包"的传递是可靠的(我认为在这种情况下,数据这个词应该更好,因为它是一个面向流的协议)。

数据包丢失和重复是与像UDP这样面向数据报的不可靠协议有关的问题。在UDP中,当你发送数据报时,它可能会重复、无序甚至根本没有到达。

当在TCP?

是和否。假设TCP在内部使用ack机制来检测丢失的数据,并自动重新扫描它们。因此,丢失的数据被传输给用户,并由协议本身处理。

有人知道"数据包复制"是怎么回事吗?

在某些情况下,可能会发生IP数据包在到达其目的地的路径上重复的情况。例如,路由器可以决定通过2个不同的网络接口转发传入流量。在这种情况下,两个IP数据包都可能到达目的地。

TCP处理重复的IP数据包问题,所以您不关心它们。

UDP无法处理它们。当你收到一个数据报时,不能保证你以前没有收到过相同的数据报。你应该检查一下。

有两件事可能是重复的数据包:有效负载(发送的数据)的重复或有效负载和标头的完全重复。TCP将尝试重新发送它没有收到ACK(来自接收器的确认数据包正常到达)的数据。然而,这导致了著名的"两个将军"问题,即你永远无法确定数据是否真的到达,或者如果你只是因为ACK数据包丢失而没有得到ACK。接收器本可以收到数据包,并回复ACK,但ACK随后丢失。在这种情况下,发送方将假定从未接收到该数据包,并发送另一个具有相同有效负载重复的数据包。由于这种情况,像TCP这样的协议需要处理多次发送的数据。在这种情况下,答案是"是的",它们是一样的。

第二件事是重复数据包可能意味着实际的100%重复数据包(有效负载和标头)。这可能是由于软件、硬件错误、路由问题或配置错误造成的。在这种情况下,不,这与TCP在检测到数据包丢失时有意发送具有重复有效负载的新数据包有点不同。在这种情况下,发送方只发送了一个数据包,但在发送过程中,它被路由器或硬件接口复制了。

最新更新