gpt4 book ai didi

sockets - 数据包与 TCP 选择性确认的交互如何工作?

转载 作者:可可西里 更新时间:2023-11-01 02:31:41 25 4
gpt4 key购买 nike

谁能解释一下数据包与 TCP 选择性确认的交互是如何工作的?我在维基百科上找到了定义,但我无法清楚地了解选择性确认与肯定确认和否定确认相比的真正作用。

最佳答案

TCP 将它发送的信息分成多个段...本质上,段是不大于从另一端接收到的 TCP MSS(最大段大小)的当前值的数据 block 。这些 block 具有递增的序列号(基于 TCP session 中发送的总数据字节数),允许 TCP 知道什么时候在传输中丢失了东西;第一个 TCP 序列号是随机选择的,出于安全目的,它不应是伪随机数。大多数时候,您本地以太网的 MTU 小于 MSS,因此他们可以在您确认之前向您发送多个数据段。

按照标准化的时间顺序来思考这些事情会很有帮助...

首先是Positive Acknowledgement,这是一种告诉发送方您收到了数据的机制,您确认的序列号是他收到的每个 TCP block (也称为段)的最大字节序列已发送。

我将在下面进行演示,但在我的示例中,您会看到像 1、2、3、4、5 这样的小 TCP 段编号......实际上,这些字节序列编号会很大,递增,并且它们之间有间隙(但这是正常的……TCP 通常以至少 500 字节长的 block 发送数据)。

那么,假设发送方在发送您的第一个 ACK​​ 之前 xmits 段号 1,2,3,4,5。如果一切顺利,您发送 1、2、3、4、5 的 ACK,一切顺利。如果 2 丢失,一切都将暂停,直到发送方意识到 2 从未被确认;他知道,因为您为 1 发送了重复的 ACK。在适当的超时后,发送方再次发送 2、3、4、5。

然后提出了选择性确认作为提高效率的方法。在同一个示例中,您对 ACK 1 和 SACK 段 3 到 5 进行了处理(如果您使用嗅探器,您会看到来自您的 ACK 数据包类似于“ACK:1, SACK:3-5”)。这样,发件人知道它只需要重新传输 TCP 段 2 ......所以生活会更好。另外,请注意 SACK 定义了您收到的连续数据的边缘;但是,可以同时对多个非连续数据段进行 SACK。

Negative Acknowledgement 是一种仅告知发送方丢失数据的机制。如果您不告诉他们缺少某些东西,他们就会一直发送数据,直到您哭喊为止。

HTH,\m

关于sockets - 数据包与 TCP 选择性确认的交互如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com