TCP 序列号如何在双向 communication/sliding window 中工作?
How TCP sequence numbers work in bidirectional communication/sliding window?
我试图了解 TCP 的工作原理(当然不是很详细)。我正在上网寻找易于理解的流程图,出现了一个问题,但找不到直接的答案。
假设我们有一个很好的流程,其中所有内容都是同步的(忽略带有 FIN 和交叉数据包的结尾部分):
我想知道如果 A 和 B 都想同时发送数据包会发生什么(据我所知,TCP 是一种双向协议,因此每个实体都可以随时发送)。基本上序列号的行为方式。有交叉数据包。
我还读到 TCP 是一种 SWP(滑动 window 协议),我想知道在这种情况下 ACK 是如何形成的。 TCP 基本上以字节数作为 Seq 编号进行响应,我真的无法想象在 window(您可以按任何顺序接收)中会发生什么。实现是否使用两组序列号和两个 windows 用于接收方和发送方?
我们非常欢迎任何规范参考或其他有用的资源。
I would like to know what would happen if both A and B would want to
send packets at the same time (from what I understand TCP is a
bidirectional protocol so each entity can send whenever it wants).
Basically how the sequence numbers would behave. Having crossing data
packets.
TCP 连接的每一端都有自己的序列号。当 A 方向 B 方发送字节时,它会增加其 Sequence Number
字段,而 B 方会增加其 Acknowledgement
字段以指示接收到哪些字节。当 B 端向 A 端发送数据时,情况正好相反——B 的 Sequence Number
递增,A 的 Acknowledgement
。两者可以同时发生。
Also I read that TCP is a SWP (Sliding window protocol), I would like
to know how ACKs are formed in this case. TCP is responding with
number of bytes basically as Seq number, I can't really imagine how
that can happen inside a window (where you can receive in any order).
Is the implementation using two sets of seq numbers and two windows
for both receiver and sender?
是的。双方都有自己的独立滑动windows。每一方的发送 window 根据从另一方收到的 ACKs 提前,确认收到更早的序列号。
我试图了解 TCP 的工作原理(当然不是很详细)。我正在上网寻找易于理解的流程图,出现了一个问题,但找不到直接的答案。
假设我们有一个很好的流程,其中所有内容都是同步的(忽略带有 FIN 和交叉数据包的结尾部分):
我想知道如果 A 和 B 都想同时发送数据包会发生什么(据我所知,TCP 是一种双向协议,因此每个实体都可以随时发送)。基本上序列号的行为方式。有交叉数据包。
我还读到 TCP 是一种 SWP(滑动 window 协议),我想知道在这种情况下 ACK 是如何形成的。 TCP 基本上以字节数作为 Seq 编号进行响应,我真的无法想象在 window(您可以按任何顺序接收)中会发生什么。实现是否使用两组序列号和两个 windows 用于接收方和发送方?
我们非常欢迎任何规范参考或其他有用的资源。
I would like to know what would happen if both A and B would want to send packets at the same time (from what I understand TCP is a bidirectional protocol so each entity can send whenever it wants). Basically how the sequence numbers would behave. Having crossing data packets.
TCP 连接的每一端都有自己的序列号。当 A 方向 B 方发送字节时,它会增加其 Sequence Number
字段,而 B 方会增加其 Acknowledgement
字段以指示接收到哪些字节。当 B 端向 A 端发送数据时,情况正好相反——B 的 Sequence Number
递增,A 的 Acknowledgement
。两者可以同时发生。
Also I read that TCP is a SWP (Sliding window protocol), I would like to know how ACKs are formed in this case. TCP is responding with number of bytes basically as Seq number, I can't really imagine how that can happen inside a window (where you can receive in any order). Is the implementation using two sets of seq numbers and two windows for both receiver and sender?
是的。双方都有自己的独立滑动windows。每一方的发送 window 根据从另一方收到的 ACKs 提前,确认收到更早的序列号。