在TCP协议中,在这种模式下,接收方是否可以获得具有序列号的数据包?

在TCP协议中,在这种模式下,接收方是否可以获得具有序列号的数据包?,tcp,Tcp,在TCP协议中,在这种模式下,接收方是否可以获得具有序列号的数据包 oldest newest | | v v 1 , 2, 3, 1, 2, 3 具体来说,有趣的一点是,在接收器获得数据包3之后,它获得的下一个数据包的序列号为1 我在这里想象的情况是,发送方发送数据包1、2、3的速度非常快。由于某些原因,接收器延迟收到这些数据包,因此无法及时确认这3个数据包。这会导致发送方再次重新发送1,2,3个数据包。这导致上述序列,

在TCP协议中,在这种模式下,接收方是否可以获得具有序列号的数据包

oldest         newest
|               |
v               v
1 , 2, 3, 1, 2, 3
具体来说,有趣的一点是,在接收器获得数据包3之后,它获得的下一个数据包的序列号为1

我在这里想象的情况是,发送方发送数据包1、2、3的速度非常快。由于某些原因,接收器延迟收到这些数据包,因此无法及时确认这3个数据包。这会导致发送方再次重新发送1,2,3个数据包。这导致上述序列,接收器看到模式1,2,3,1,2,3


这在TCP中是可能的,对吗?

当然可以。这在TCP中是可能的,因为在IP中也是可能的。IP数据包可以无序接收、复制或丢弃。当路由器与其上游路由器之间的链路断开时,这三个数据包可能位于路由器的缓冲区中。上游路由器可能会在另一条链路上重新传输这些数据包,而没有意识到第一个路由器也在传输这些数据包

IP不提供任何关于延迟、重复、数据包丢失或订购的保证。这就是TCP必须自己实现所有这些保证的原因

在TCP协议中,在这种模式下,接收方是否可以获得具有序列号的数据包

oldest         newest
|               |
v               v
1 , 2, 3, 1, 2, 3
取决于你对接收器的意思

如果你是指接收系统:是的,因为在网络层数据包可能会被复制、重新排序等


如果您是指应用程序:否,因为系统TCP/IP堆栈将处理重复项和重新排序,并仅以正确的顺序将原始字节流传递给应用程序的TCP套接字,而不传递重复项。注意,在这种情况下,接收器甚至不获取数据包:它只获取字节流,传输期间使用的数据包边界既不已知也不相关

当接收方收到一个已经确认的重复数据包时,它会做什么?忽略那个包?当接收方收到一个尚未确认的重复数据包时,它会做什么?忽略那个包?如果接收方已经确认了一个数据包,但确认丢失了,TCP会发生什么情况?发送方不会永远在无限循环中重新传输同一个数据包吗?@user855细节取决于是否协商了选择性确认。但基本思想是,接收方至少有时会重复其最后一次确认,以便发送方知道接收方实际收到了什么。另一方将忽略重复的ACK,因为否则,您可以通过发送额外的数据包来获得每一方响应额外数据包的位置。