【发布时间】:2012-10-04 00:26:24
【问题描述】:
我正在尝试找出数据包丢失和数据包重复问题之间的区别。有谁知道“数据包复制”是什么意思?是不是和TCP检测到丢包重传一样?
【问题讨论】:
标签: tcp udp network-protocols duplication packet-loss
我正在尝试找出数据包丢失和数据包重复问题之间的区别。有谁知道“数据包复制”是什么意思?是不是和TCP检测到丢包重传一样?
【问题讨论】:
标签: tcp udp network-protocols duplication packet-loss
没有。在TCP 中,“数据包”的传递是可靠的(我认为在这种情况下术语数据应该更好,因为它是一个面向流的协议)。
丢包和重复是与不可靠协议数据报相关的问题,如UDP。在 UDP 中,当您发送数据报时,它可能会重复到达、乱序甚至根本不到达。
检测到丢包时是否和重发包一样 TCP?
是和不是。假设 TCP 在内部使用 ack 机制来检测丢失的数据,并自动重新传输它们。所以丢失的数据对用户来说是透明的,由协议自己处理。
有人知道什么是“数据包复制”吗?
在某些情况下,IP 数据包可能会在到达目的地的路径上重复出现。例如,路由器可以决定通过 2 个不同的网络接口转发传入流量。在这种情况下,两个 IP 数据包都可能到达目的地。
TCP处理重复的IP数据包问题,所以你不用关心它们。
UDP 不处理它们。当您收到数据报时,不能保证您之前没有收到相同的数据报。你应该检查一下。
【讨论】:
有两种情况可能意味着重复数据包:有效负载(正在发送的数据)的重复或有效负载和标头的完全重复。 TCP 将尝试重新发送它没有收到 ACK(来自接收器的数据包到达正常的确认)的数据。但是,这会导致著名的“two Generals”问题,您永远无法确定数据实际到达,或者您只是因为 ACK 数据包丢失而没有收到 ACK。接收者可能已经收到了数据包,并回复了一个 ACK,但随后 ACK 丢失了。在这种情况下,发送方将假定该数据包从未收到,并发送另一个具有相同有效负载的数据包。由于这种情况,像 TCP 这样的协议需要处理多次发送的数据。在这种情况下,答案是“是”,它们是一样的。
第二件事重复数据包可能意味着实际 100% 重复数据包(有效负载和标头)。这可能是由于软件、硬件错误或路由问题或配置错误而发生的。在这种情况下不,这与 TCP 故意发送具有重复有效负载的新数据包以检测数据包丢失有点不同。在这种情况下,发送方只发送了一个数据包,但它在途中被路由器或硬件接口复制到了某个地方。
【讨论】: