首页 > 解决方案 > TCP序列号如何在双向通信/滑动窗口中工作?

问题描述

我试图了解 TCP 的工作原理(当然不是详细的)。我在网上浏览易于理解的流程图时出现了一个问题,但找不到直接的答案。

让我们假设我们有一个很好的流程,其中所有内容都是同步的(忽略带有 FIN 和交叉数据包的结尾部分):

在此处输入图像描述

我想知道如果 A 和 B 都想同时发送数据包会发生什么(据我所知,TCP 是一个双向协议,因此每个实体都可以随时发送)。基本上序列号的行为方式。有交叉数据包。

我还读到 TCP 是一个 SWP(滑动窗口协议),我想知道在这种情况下 ACK 是如何形成的。TCP 响应的字节数基本上是 Seq 数,我真的无法想象在窗口内会发生这种情况(您可以按任何顺序接收)。是否为接收方和发送方使用两组序列号和两个窗口?

任何规范参考或其他有用的资源都非常受欢迎。

标签: tcpprotocolsnetwork-protocols

解决方案


我想知道如果 A 和 B 都想同时发送数据包会发生什么(据我所知,TCP 是一个双向协议,因此每个实体都可以随时发送)。基本上序列号的行为方式。有交叉数据包。

TCP 连接中的每一端都有自己的序列号。当 A 侧向 B 侧发送字节时,它会增加其Sequence Number字段,而 B 侧会增加其Acknowledgement字段以指示收到了哪些字节。当 B 侧向 A 侧发送数据时,情况正好相反 - B'sSequence Number递增,而 A's Acknowledgement。两者都可以同时发生。

我还读到 TCP 是一个 SWP(滑动窗口协议),我想知道在这种情况下 ACK 是如何形成的。TCP 响应的字节数基本上是 Seq 数,我真的无法想象在窗口内会发生这种情况(您可以按任何顺序接收)。是否为接收方和发送方使用两组序列号和两个窗口?

是的。两边都有自己独立的推拉窗。每一方的发送窗口根据从另一方收到的 ACK 提前,确认收到较早的序列号。


推荐阅读