我试图找出数据包丢失和数据包重复问题之间的区别。有谁知道'数据包重复'到底是什么?当在TCP中检测到丢失时,是否与重新发送数据包相同?
答案 0 :(得分:11)
没有。在TCP
中,“数据包”的传递是可靠的(我认为在这种情况下,术语数据应该更好,因为它是面向流的协议)。
数据包丢失和重复与面向UDP
的不可靠协议数据报有关。在UDP发送数据报时,这可能会重复,无序甚至根本不会到达。
与检测到丢失时重新发送数据包相同 TCP?
是和否。假设TCP在内部使用ack机制来检测丢失的数据,并自动重新发送它们。因此,丢失的数据对用户来说是透明的,并由协议本身处理。
有谁知道'数据包重复'到底是什么?
在某些情况下,IP
数据包可能会沿着到达目的地的路径重复。例如,路由器可以决定通过2个不同的网络接口转发传入流量。在这种情况下,可能会发生两个IP数据包都将到达目的地。
TCP
处理重复的IP
数据包问题,因此您不关心它们。
UDP
无法处理它们。当您收到数据报时,不能保证您之前没有收到过相同的数据报。你应该检查一下。
答案 1 :(得分:9)
有两件事你可能意味着重复数据包:有效负载的重复(正在发送的数据)或有效负载和标头的完全重复。 TCP将尝试重新发送它没有收到ACK的数据(来自接收方的确认数据包到达的确认)。但是,这会导致着名的“two Generals”问题,您无法确定实际到达的数据,或者您是否由于ACK数据包丢失而未获得ACK。接收方可能已收到数据包,并以ACK回复,但ACK随后丢失。在这种情况下,发送方将假定从未接收到数据包,并发送具有相同有效负载重复的另一个数据包。由于这种情况,像TCP这样的协议需要处理多次发送数据。在这种情况下,答案是“是”,它们是相同的。
重复数据包的第二件事可能意味着实际的100%重复数据包(有效负载和标头)。这可能是由于软件,硬件或路由问题或配置错误导致的错误。在这种情况下没有,这是一个有点不同的问题,而不是TCP从检测到数据包丢失发送具有重复有效负载的新数据包。在这种情况下,发送方只发送了一个数据包,但它在路由器或硬件接口的某处被复制。