【问题标题】:How TCP sequence numbers work in bidirectional communication/sliding window?TCP序列号如何在双向通信/滑动窗口中工作?
【发布时间】:2021-06-27 20:05:08
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不认为这个问题是主题。您要求的规范是标准 - RFC 793。但基本上 TCP 是一个字节流,发​​送方 ACK 指定发送方字节流中的当前位置(有一些初始偏移量 - 握手中的初始序列号),并且 ACK 指出对等方字节流接收到的最后位置。窗口与此无关。
  • 每个方向都有一个单独的序号。

标签: tcp protocols network-protocols


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2023-03-22
    • 2013-12-01
    相关资源
    最近更新 更多