注意的点
阈值设定
TCP中拥塞控制的初始阈值的设定依据,以及最后断开连接后客户端等待时间2MSL设定的依据。
TCP拥塞控制的初始阈值的设定依据
TCP的拥塞控制算法主要基于四个主要组件:慢启动、拥塞避免、快速重传和快速恢复。这些组件都依赖于一个动态变量:拥塞窗口(cwnd)和拥塞阈值(ssthresh)。
在TCP连接初始化时,cwnd被设置为一个很小的值(通常为1或2个最大段大小),ssthresh被设置为一个很大的值(通常为65535字节或更大)。这样的设定允许慢启动阶段快速增加cwnd,从而让TCP连接更快地到达其最大吞吐量。
ssthresh的初始设定值是一个比较保守的选择,目的是尽可能避免在连接初期就引发网络拥塞。然而,一旦出现了实际的网络拥塞(通过丢包等情况检测到),ssthresh就会被设置为出现拥塞时的cwnd的一半。之后,如果没有进一步的拥塞,cwnd会继续按照拥塞避免算法增长,直到达到ssthresh,然后再次进入慢启动阶段。
TCP标准中的说法是:(更具体的数值设置基本没看到什么好的说法)
ssthresh 的初始值应该设置为任意高(例如,设置为最大可能的广告窗口的大小),但 ssthresh 必须减少以响应拥塞。将 ssthresh 设置得尽可能高,可以让网络条件(而不是某些任意主机限制)来决定发送速率。在终端系统对网络路径有深入了解的情况下,更仔细地设置初始 ssthresh 值可能会有好处(例如,使得终端主机不会沿路径造成拥塞)。
MSL的设定依据
MSL,或者最大段生存时间(Maximum Segment Lifetime),是TCP/IP网络中一个数据包在网络中能够存在的最长时间。在RFC 793中,MSL被定义为2分钟,但在现代网络中,这个时间通常被设置为30秒或更短。
TCP连接在关闭时,会进入TIME_WAIT状态,持续的时间是2个MSL。这是为了确保TCP连接的双方都能收到彼此的关闭通知,在这个期间,任何延迟的数据包都应该已经在网络中消失。这样可以防止旧的或重复的数据包在新的连接中被错误地接收。
这个2MSL等待期的设定是基于保守的网络设计原则,即尽可能避免由于网络延迟或数据包重传引起的问题。虽然在高速网络中,这个等待期可能看起来过长,但在可能存在大量网络延迟或数据包丢失的网络环境中,这个设定是非常有必要的。
- 作者:Olimi
- 链接:https://olimi.icu/c5d6c758fd074552b4f241dfe5d002cb
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。