1 拥塞控制
拥塞(Congestion)
- 非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理”
- 表现:
- 分组丢失(路由器缓存溢出)
- 分组延迟过大(在路由器缓存中排队)
- 拥塞控制 vs. 流量控制
- A top-10 problem
2 拥塞的成因和代价
场景1
场景2
场景3
3 拥塞控制的方法
端到端拥塞控制
- 网络层不需要显式的提供支持
- 端系统通过观察loss,delay等网络行为判断是否发生拥塞
- TCP采取这种方法
网络辅助的拥塞控制
- 路由器向发送方显式地反馈网络拥塞信息
- 简单的拥塞指示(1bit):SNA,DECbit, TCP/IP ECN, ATM)
- 指示发送方应该采取何种速率
案例:ATM ABR拥塞控制
ABR:available bit rate
- ”弹性服务”
- 如果发送方路径“underloaded”,使用可用带宽
- 如果发送方路径拥塞,将发送速率降到最低保障速率
RM(resource management) cells
- 发送方发送
- 交换机设置RM cell位(网络辅助)
- NI bit: rate不许增长
- CI bit: 拥塞指示
- RM cell由接收方返回给发送方
- 在RM cell中有显式的速率(ER)字段:两个字节
- 拥塞的交换机可以将ER置为更低的值
- 发送方获知路径所能支持的最小速率
- 数据cell中的EFCI位: 拥塞的交换机将其设为1
- 如果RM cell前面的data cell的EFCI位被设为1,那么发送方在返回的RM cell中置CI位
4 TCP拥塞控制
TCP拥塞控制的基本原理
Sender限制发送速率
LastByteSent-LastByteAcked<= CongWin
rate ≈ CongWin/RTT Bytes/Sec
CongWin:
- 动态调整以改变发送速率
- 反映所感知到的网络拥塞
问题:如何感知网络拥塞?
- Loss事件=timeout或3个重复ACK
- 发生loss事件后,发送方降低速率
如何合理地调整发送速率?
- 加性增—乘性减: AIMD
- 慢启动: SS
加性增—乘性减: AIMD
- 原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
- 方法: AIMD
- Additive Increase: 每个RTT将CongWin增大一个MSS——拥塞避免
- Multiplicative Decrease: 发生loss后将CongWin减半
TCP慢启动: SS
TCP连接建立时,CongWin=1。
例:MSS=500 byte, RTT=200msec,初始速率=20k bps。
可用带宽可能远远高于初始速率:希望快速增长。
原理:当连接开始时,指数性增长。
- 指数性增长
- 每个RTT将CongWin翻倍
- 收到每个ACK进行操作
- 初始速率很慢,但是快速攀升
Threshold变量
Q:何时应该指数性增长切换为线性增长(拥塞避免)?
A: 当CongWin达到Loss事件前值的1/2时.
实现方法:
- 变量 Threshold
- Loss事件发生时, Threshold被设为Loss事件前CongWin值的1/2。
Loss事件的处理
- 3个重复ACKs:
- CongWin切到一半
- 然后线性增长
Timeout事件:
- CongWin直接设为1个MSS
- 然后指数增长
- 达到threshold后, 再线性增长
3个重复ACKs表示网络还能够传输一些 segments,timeout事件表明拥塞更为严重。
TCP控制算法
例题
一个TCP连接总是以1 KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16 KB时发生了超时,如果接下来的4个RTT(往返时间)时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是多少?
解:threshold=16/2=8 KB, CongWin=1 KB, 1个RTT后, CongWin=2 KB ,2个RTT后, CongWin=4 KB ,3个RTT后, CongWin=8 KB ,Slowstart is over; 4个RTT后, CongWin=9 KB。
5 TCP性能分析
TCP throughput: 吞吐率
给定拥塞窗口大小和RTT,TCP的平均吞吐率是多少?
- 忽略掉Slow start
- 假定发生超时时CongWin的大小为W,吞吐率是W/RTT
- 超时后,CongWin=W/2,吞吐率是W/2RTT
- 平均吞吐率为:0.75W/RTT
未来的TCP
举例:每个Segment有1500个byte, RTT是100ms,希望获得
10Gbps的吞吐率
- throughput = W*MSS*8/RTT, 则
- W=throughput*RTT/(MSS*8)
- throughput=10Gbps, 则W=83,333
- 窗口大小为83,333
TCP的公平性
公平性?如果K个TCP Session共享相同的瓶颈带宽R,那么每个Session的平均速率为R/K。
TCP具有公平性吗?是的。
公平性与UDP
- 多媒体应用通常不使用TCP,以免被拥塞控制机制限制速率
- 使用UDP:以恒定速率发送,能够容忍丢失
- 产生了不公平
研究:TCP friendly
公平性与并发TCP连接
- 某些应用会打开多个并发连接
- Web浏览器
- 产生公平性问题
例子:链路速率为R,已有9个连接
- 新来的应用请求1个TCP,获得R/10的速率
- 新来的应用请求11个TCP,获得R/2的速率