8

我试图找出数据包丢失和数据包重复问题之间的区别。有谁知道“数据包重复”是什么意思?TCP检测到丢包时,和重传包一样吗?

4

2 回答 2

13

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

数据包丢失和重复是与面向数据报的不可靠协议相关的问题,例如UDP. 在 UDP 中,当您发送数据报时,这可能会重复、无序甚至根本不到达。

TCP检测到丢包时,和重传包一样吗?

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

有谁知道“数据包重复”是什么意思?

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

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

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

于 2012-10-13T09:26:13.217 回答
10

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

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

于 2012-10-13T09:49:32.687 回答