拥塞控制原理
在学习TCP拥塞控制之前,首先看看拥塞控制的基本原理
拥塞控制非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理”
表现:
- 分组丢失(路由器缓存溢出)
- 分组延迟过大(在路由器缓存中排队)
拥塞控制和流量控制都是网络中的TOP 10问题。
拥塞的成因和代价:
1.当两个senders,两个receivers共享一个路由器时,假设路由器无限缓存。
在这样的场景下不存在丢包,没有重传。
这样的场景下,拥塞时分组延迟太大(在路由器中排队...)
2.还是一个路由器,但路由器的缓存有限,sender就会重传分组。
代价:对给定的"goodput",要做更多的工作(重传),由于丢失,造成资源的浪费
3.在多跳网络中,当分组被drop时,任何用于该分组的“上游”传输能力全都被浪费掉
拥塞控制的方法
端到端拥塞控制:
- 网络层(比如路由器等)不需要显示的提供支持
- 端系统通过观察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由接收方返回给发送方
TCP 拥塞控制
面临三个问题:
1.发送方如何限制发送速率
2.CongWin:
- 动态调整以改变发送速率
- 反映所感知到的网络拥塞
问题:如何感知网络拥塞?
- Loss事件 = timeout或3个重复ACK
- 发生loss事件后,发送方降低速率
如何合理地调整发送速率?
- 加性增——乘性减:AIMD
- 慢启动:SS
加性增——乘性减:AIMD
原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
方法:AIMD
- additive increase(增性加): 每个RTT将CongWin增大一个MSS——拥塞避免
MSS最大段长度 - Multiplicative Decrease(乘性减):发生loss后将CongWin减半
TCP慢启动:SS
-
TCP连接建立时,CongWin=1
例如:MSS=500byte,RTT=200msec,初始速率=20k bps -
可用带宽可能远远高于初始速率:希望快速增长
-
原理:当连接开始时,指数性增长(比加性增的线性增长要快的多)
-
指数性增长:
1.每个RTT将CongWin翻倍(初始时将拥塞窗口CongWin置为1)
2.收到每个ACK进行操作
-初始速率很慢,但是快速攀升
慢启动
Threshold变量
Loss事件的处理
3个重复ACKs:
- CongWin切到一半
- 然后线性增长
Timeout事件: - CongWin直接设为1个MSS
- 然后指数增长
- 达到threshold后,再线性增长
注:
- 3个重复ACKs表示网络还能够传输一些segments
- timeout事件表示拥塞更为严重
TCP性能分析
公平性与UDP
- 多媒体应用通常不使用TCP,以免被拥塞控制机制限制速率
- 使用UDP:以恒定速率发送,能够容忍丢失
- 产生了不公平
公平性与并发TCP连接
-
某些应用会打开多个并发连接
-
web浏览器
-
产生公平性问题
-
例子:链路速率为R,已有9个连接
-
假设新来的应用请求1个TCP,获得R/10的速率
-
假设新来的应用请求11个TCP,获得R/2的速率
传输层的总结
传输层服务的基本原理
- 复用/解复用
- 可靠数据传输
- 流量控制
- 拥塞控制
Internet的传输层
- UDP
- TCP
网友评论