更新时间:2024-05-21 11:11
慢开始算法是用于控制网络流量的算法。
慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16
发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此发送窗口的数值等于拥塞窗口的数值。
在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。
发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。
接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。发送端的 cwnd 从 2 增大到 4,并可发送 M3 ~ M6共 4个报文段
发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。
更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。
当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。
在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。
在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。
用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
MSS 是 TCP 报文段中的数据字段的最大长度。
TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。
MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
当 TCP 连接进行初始化时,将拥塞窗口置为 1。图1中的窗口单位不使用字节而使用报文段。