计算机系统(七):运输层(特别篇)——TCP拥塞控制

目录

7.5 TCP滑动窗口与拥塞控制

7.6 TCP拥塞控制 

7.6.1 慢启动

7.6.2 拥塞避免

7.6.3 快速恢复——拥塞控制优化

7.6.4 进一步优化 

7.7 拥塞控制补充

7.7.1 宏观模型 

7.7.2 窗口大小

7.7.3 Rate, fairness


7.5 TCP滑动窗口与拥塞控制

我们假设一个场景,发送方发送了滑动窗口内的所有段,但是段21在传输过程中丢失;31最先到达,被接收方顺利接收;41,51,61随后到达,未在一个RTT内被接收方接收。

此时接收方会发送ACK:21并将接收窗口剩余的大小发送给接收方,即Window:50

随后,段41和51逐步到达:

由于在定时器时间内发生了三次冗余的接收(没有收到21,但31,41和51都已收到)。会立刻触发快速重传:ACK + 3 DupACKs = Fast Retransmission


原始数据流+丢包控制

Flow+loss control 在单一的点对点链路上已经存在了很长时间。TCP最初借鉴了链路层拥塞控制的经验,但这导致了一些不好的设计决定。


两种类型的流量控制

Go-back-N(回退N步)
当一个数据包丢失时,回到它被传送的地方,并(重新)传送从该点开始的所有内容。
优势:接收者不需要存储/重新排序数据包。

Selective Repeat(选择性重传)

只重传丢失的数据包。
数据包不按顺序到达。接收者必须存储失序的数据包,以便将其按顺序发送给应用程序。 

更复杂,只有在数据包损失比较普遍的时候才有帮助。但是由于链路层对错误是有修复的,数据包损失并不普遍。


继续上面的滑动窗口情景,当快速重传发生时:

此时Window=0,相当于一个死锁:

  • 发送方不会再发送任何数据(窗口大小为0)。
  • 接收方不会收到任何数据,所以发送方不会发送任何ACK来增加窗口。

随后通过接收方滑动窗口内的段被上传给应用程序解除死锁状态:

接收者可以通过发送WindowUpdate来启动更新:


发送者可以通过发送一个ZeroWindowProbe来监控和启动更新: 

收到0大小的窗口时,发送方:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值