题目
5-38:设TCP的 ssthresh 的初始值为8(单位为报文段)。当拥塞窗口[1]上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出 RTT=1到 RTT=15时的各拥塞窗口大小。你能说明拥塞窗口每一次变化的原因吗?
5-38:设TCP的 ssthresh 的初始值为8(单位为报文段)。当拥塞窗口[1]上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出 RTT=1到 RTT=15时的各拥塞窗口大小。你能说明拥塞窗口每一次变化的原因吗?
题目解答
答案
根据TCP拥塞控制[2]规则:
1. 初始ssthresh = 8,cwnd = 1。
2. RTT=1至RTT=4:慢开始,cwnd = 1, 2, 4, 8。
3. RTT=5至RTT=8:拥塞避免,cwnd = 9, 10, 11, 12。
4. RTT=9:超时,ssthresh = 6,cwnd = 1。
5. RTT=10至RTT=12:慢开始,cwnd = 2, 4, 6(cwnd = 6时达到ssthresh)。
6. RTT=13至RTT=15:拥塞避免,cwnd = 7, 8, 9。
最终结果:
RTT=1至RTT=15的cwnd值分别为:1, 2, 4, 8, 9, 10, 11, 12, 1, 2, 4, 6, 7, 8, 9。
解析
本题主要考察TCP拥塞控制机制中的慢开始和拥塞避免算法的应用。解题的关键在于理解这两种算法的工作原理以及在不同情况下拥塞窗口(cwnd)和慢开始门限(ssthresh)的变化规则。
具体步骤如下:
- 初始状态:
- 已知初始时
ssthresh = 8,拥塞窗口cwnd初始值为1。
- 已知初始时
- RTT = 1 到 RTT = 4(慢开始阶段):
- 慢开始算法的规则是,每经过一个往返时延(RTT),拥塞窗口
cwnd的值就会加倍。 - 当
RTT = 1时,cwnd = 1。 - 当
RTT = 2时,cwnd = 2 * 1 = 2。 - 当
RTT = 3时,cwnd = 2 * 2 = 4。 - 当
RTT = 4时,cwnd = 2 * 4 = 8,此时cwnd达到了ssthresh的值。
- 慢开始算法的规则是,每经过一个往返时延(RTT),拥塞窗口
- RTT = 5 到 RTT = 8(拥塞避免阶段):
- 当
cwnd达到ssthresh后,进入拥塞避免阶段。在拥塞避免阶段,每经过一个 RTT,cwnd的值增加1。 - 当
RTT = 5时,cwnd = 8 + 1 = 9。 - 当
RTT = 6时,cwnd = 9 + 1 = 10。 - 当
RTT = 7时,cwnd = 10 + 1 = 11。 - 当
RTT = 8时,cwnd = 11 + 1 = 12。
- 当
- RTT = 9(超时情况):
- 当网络发生超时(本题中
RTT = 9时发生超时),TCP 会采取措施进行拥塞控制。此时,将ssthresh的值设置为当前cwnd的一半,即ssthresh = 12 / 2 = 6,并将cwnd重新设置为1。
- 当网络发生超时(本题中
- RTT = 10 到 RTT = 12(再次进入慢开始阶段):
- 重新进入慢开始阶段,
cwnd按慢开始算法加倍增长。 - 当
RTT = 10时,cwnd = 2 * 1 = 2。 - 当
RTT = 11时,cwnd = 2 * 2 = 4。 - 当
RTT = 12时,cwnd = 2 * 4 = 8,但由于此时ssthresh = 6,cwnd不能超过ssthresh,所以cwnd调整为6。
- 重新进入慢开始阶段,
- RTT = 13 到 RTT = 15(再次进入拥塞避免阶段):
- 当
cwnd达到新的ssthresh后,再次进入拥塞避免阶段,cwnd按拥塞避免算法每次增加1。 - 当
RTT = 13时,cwnd = 6 + 1 = 7。 - 当
RTT = 14时,cwnd = 7 + 1 = 8。 - 当
RTT = 15时,cwnd = 8 + 1 = 9。
- 当