在计算与 TCP 机制相关的值时,我的理解存在一些漏洞。
比方说:
MSS = 1(最大段大小,接收方的 TCP 段的最大大小)
链路流量(吞吐量)= 2Mb/s
RTT = 100 毫秒
知道了,你有:
2Mb/s = cwnd / RTT
那么拥塞窗口是200ko。
我也知道发件人仅限于 min(cwnd, rwnd)。
我如何找到 rwnd?
如何找到阈值?
在计算与 TCP 机制相关的值时,我的理解存在一些漏洞。
比方说:
MSS = 1(最大段大小,接收方的 TCP 段的最大大小)
链路流量(吞吐量)= 2Mb/s
RTT = 100 毫秒
知道了,你有:
2Mb/s = cwnd / RTT
那么拥塞窗口是200ko。
我也知道发件人仅限于 min(cwnd, rwnd)。
我如何找到 rwnd?
如何找到阈值?
有不同的流量和速率控制机制,并且在一定程度上它们彼此分开工作。
接收器窗口与设备必须专用于该连接的缓冲区中有多少空间有关。当它从缓冲区获取数据并将其发送到等待程序时,它将清除缓冲区上的空间并不断更新其可用缓冲区上的发送方。所以我认为使用 RTT 或 cwnd 是不可能找到的。
通过阈值,我假设您的意思是 SSthresh。在足够长的时间内,它应该与连接瓶颈的速度非常接近。IE。在您的示例中应该是 2Mbps。
在传统的慢启动中,每次发送者收到它的一个段的 ACK 时,它都会加倍,直到它通过瓶颈速度并减速。因此,只要您假设初始值,您就可以通过多少 RTT(以及因此应该返回多少 ACK)来绘制它应该在哪里。
我建议阅读 TCP_IP 协议套件第 4 版。– B. Forouzan 对此进行了更完整的解释。
请注意,在广泛使用的 TCP 实现(称为 Cubic TCP)中,这其中的很多内容都被忽略了。它显着改变了慢启动和拥塞避免的工作方式。 https://en.wikipedia.org/wiki/CUBIC_TCP https://datatracker.ietf.org/doc/html/draft-rhee-tcp-cubic-00