第十五讲

Download Report

Transcript 第十五讲

拥塞控制
E-mail:[email protected]
主页:xgxy.cug.edu.cn/rjgcx/lzw
1
TCP重温
相同的讲义, 更加聚焦….
“Know This”
2
TCP Header
此段中携带数
据的起始序列
号 (字节偏
移)
This is the
number of the
first byte of
data in
packet!
Source port
Destination port
Sequence number
Acknowledgment
HdrLen 0
Flags
Advertised window
Checksum
Urgent pointer
Options (variable)
Data
3
TCP Header
Acknowledgme
nt (应答)给出
接收到的最高有
序序列号后的序
列号
“下一个是什么”
Source port
Destination port
Sequence number
Acknowledgment
HdrLen 0
Flags
Advertised window
Checksum
Urgent pointer
Options (variable)
Data
4
3次握手
Passive
Open
Active
Open
Client (initiator)
Server
listen()
connect()
accept()
5
序列号
主机A
ISN (初始序列号)
序列号 =首字节
TCP Data
TCP
HDR
TCP Data
主机B
应答(ACK) 序列
号 = 下一个期望
的字节
TCP
HDR
6
数据和ACK在同一包中
• 序列号指示包中的数据
– A中的包将数据带到B
• ACK表示接收到另一方向的数据
– 从B中接收到的acking数据
7
TCP头
Source port
Destination port
Sequence number
TCP滑动窗口用于
接收数据的可用
缓冲区空间.
被解释成应答字
段值之外的偏移
Acknowledgment
HdrLen 0
Flags
Advertised window
Checksum
Urgent pointer
Options (variable)
Data
8
TCP段(Segment)
IP Data
TCP Data (segment)
TCP Hdr
IP Hdr
• IP包
– 不大于最大传送单元 (MTU)
– 如, 在以太网中最多1,500字节
• TCP包
– IP包中带有TCP头和数据
– TCP头 20字节长
• TCP段(segment)
– 不多于最大段尺寸 (MSS) 字节
– 例, 流中的最大1460个连续的字节
– MSS = MTU – (IP头) – (TCP头)
9
拥塞控制概述
Ask Questions!!!!!
10
流控制 vs 拥塞控制
• 流控制防止一个快速发送端冲垮一个慢速接收端
• 拥塞控制防止一组发送端冲垮网络
11
有关此问题的大量文献
• 80年代中Jacobson用拥塞控制“拯救”了Internet
• 理论有助益的极少几个主题之一; 网络中很多受挫
的数学家
• 现在很少人关注(瓶颈是访问链路?)
• …但离学术上解决还很远
– 例. battle over “fairness” with Bob Briscoe…
12
拥塞是自然的
• 因为Internet流量是跳变的(bursty)!
• 如果两个包同时到达
– 结点只能发送一个
– … 对另一个只能是缓存或者丢弃
• 如果多个包在短时间内到达
– 结点跟不上到达的速度
– … 延时, 并且缓存区可能最终溢出
13
负载与延时
带有突然到达的典型查询系统
Average
Packet delay
Average
Packet loss
Load
必须平衡效率 versus 延时和丢失
Load
14
谁管拥塞?
• 网络?
• 端主机?
• 两者?
15
答案
• 端主机调整发送率
• 基于网络的反馈
• 探测网络来测得拥塞的水平
– 当没有拥塞时加速
– 当有拥塞时减速
16
缺点
• 次优 (总比最优点高或低)
• 依赖于端系统的合作
• 复杂的动力学
– 所有端系统同时调整
– 大型,复杂动力系统
– 能够工作真是一个奇迹!
17
TCP拥塞控制基础
• 拥塞窗口 (CWND)
– 在飞行中的未应答字节的最大号码
– 接收端窗口拥塞控制等价物
– MaxWindow = min{拥塞窗口, 接收端窗口}
 典型地假定接收端窗口比cwnd大很多
• 适应拥塞窗口
– 当没有拥塞时增加: 优化探索
– 检测到拥塞时减少
18
侦测拥塞
• 网络能告诉源 (ICMP Source Quench)
– 危险, 因为在超载时,信号本身可能被丢弃(从而增加拥
塞)!
• 包延时上升 (负载-延时曲线的转折点)
– 小技巧: 噪声信号 (延时经常有大的变化)
• 包延时
– TCP已经需要检测失效安全信号
– 复杂性: 没有拥塞丢失(校验和错误)
19
不是所有的延时都一样
• 重复ACKs: 孤立丢失
– 仍然得到ACK
• 超时: 可能的灾难
– 重复包不够
– 必然遇到一些丢失
20
如何调整CWND?
• 大尺寸的窗口比小尺寸窗口结果更不好
– 大尺寸窗口: 包丢弃并重发
– 小尺寸窗口: 某种程度上带宽低一点
• 增加时线性进行(做加法), 减少时翻倍(AIMD)
– 当未拥塞时,慢慢增加 (exploration)
– 拥塞时,快速减少
• 后面还会讲
21
AIMD
• 增加时做加法(Additive increase)
– 最后窗口数据成功收到后, 增加one MS
• 成倍减少
– 丢包时,拥塞窗口减半
22
导致TCP“Sawtooth”
Window
Loss
halved
t
23
AIMD 启动太慢!
开始时需要一个小CWND以避免网络负载过重.
Window
It could take a long
time to get started!
t
24
“Slow Start”阶段
•开始时一个小的拥塞窗口
–初始时, CWND是1 MSS
–因此,初始传输率是MSS/RTT
•这可能太浪费时间
–可能比实际带宽小很多
–线性增加会花费很长的时间加速
•Slow-start状态(事实上是“fast start”)
–发送端开始于慢的速率(因此而得名)
–… 但直至丢包前,以指数增加
25
慢启动行为
每次来回时间CWND翻倍
简单实现:
每次应答, CWND += MSS
Src
1
D
2
A
D D
3 4
A A
D D
8
D
A
D
A
A
A
Dest
26
慢启动与TCP Sawtooth
Window
Loss
Exponential
“slow start”
t
为何称为slow-start? 因为TCP最开始没有拥塞控制机制.
源开始时仅发送整个窗口大小的数据.
27
这样做非常成功
• 导致理论上的疑惑:
如果TCP拥塞控制是答案,
那么什么是问题呢?
• 不是关于优化,而是关于鲁棒性
– 很难处理(capture)…
28
拥塞控制细节
29
增加CWND
• 每次成功窗口,增加MSS
• 每接收到一个ACK,增加MSS一部分
• # packets (thus ACKs) per window: CWND / MSS
• 每个ACK的增量:
CWND += MSS / (CWND / MSS)
• 名词: 拥塞避免
– 非常缓慢地增加
30
快速重传
• 发送端看到3个重复应答(dupACKs)
• 成倍减少: CWND减半
31
快速重传的CWND
cwnd = 1
cwnd = 2
cwnd = 3
cwnd = 4
3 duplicate
ACKs
cwnd = 2
32
超时检测丢包
• 发送端开启一个时钟运行RTO秒
• 每收到新数据的应答重启时钟
– 知道此…..
• 如果时钟超时:
– 设置 SSTHRESH  CWND / 2 (“Slow-Start Threshold”)
– 设置 CWND  MSS
– 重传首个丢失包
– 执行慢启动只到 CWND > SSTHRESH
– 此后,切换到Additive Increase
33
减少小结
• 在通过dupacks检测到丢包时,将CWND减半
– “快速重传”
• 在超时后,减半CWND 直到1 MSS
– 设置ssthresh为cwnd/2
• 永远不要将CWND减到比1 MSS还低
34
增加小结
• “Slow-start”: 每次收到ack对cwnd增加MSS
• 在以下任一情况下,离开slow-start领域:
– cwnd > SSThresh
– 丢包
• 进入AIMD领域
– 对每个窗口的应答数据,增加MSS
35
在超时后,重复Slow Start
Window
Fast
Retransmission
Slow start in operation until
it reaches half of previous
CWND, I.e., SSTHRESH
Timeout
SSThresh
Set to Here
t
Slow-start重启: CWND回到1 MSS, 但利用之前已知的
CWND值.
36
更高级的快速重启
• 设置 ssthresh 为 cwnd/2
• 设置 cwnd 为 cwnd/2 + 3
– 针对已经看到的3次重复应答(ack)
• 对每个附加的重复ACK,对cwnd增加1 MSS
• 在接收到新的ACK后, 将cwnd重置为ssthresh
37
5 Minute Break
Questions Before We Proceed?
38
Throughput Equation
In what follows refer to cwnd in units of MSS
39
简单模式计算 (已知!)
• 假定当cwnd到达W时,发生丢失
– 通过快速重传恢复
• 窗口: W/2, W/2+1, W/2+2, …W, W/2, …
– W/2 RTTs, then drop, then repeat
• 平均吞吐量: .75W(MSS/RTT)
– 每隔 (W/2)*(3W/4)丢一个包
– 丢包率 p = (8/3) W-2
• 吞吐量 = (MSS/RTT) sqrt(3/2p)
40
Why AIMD?
In what follows refer to cwnd in units of MSS
41
三个拥塞控制挑战
• 单个流调整以适应带宽瓶颈
– 没有任何先验知识
– Could be a Gbps link; could be a modem
• 单个流调整以适应带宽变化
– 当带宽减少时, 必须降低发送率
– 当带宽增加时, 必须增加发送率
• 多个流共享带宽
– 必须避免网络超载
– 并且,在多个流中“公平地”共享带宽
42
问题1: 单个流, 固定带宽
• 希望得到可用带宽的一阶估计
– 假定带宽固定
– 忽略其他流的存在
• 希望开始时慢速,但快速增加直到产生丢包
(“slow-start”)
• 调整:
– cwnd 初始时设置为 1 (MSS)
– 在接收到ACK时cwnd++
43
Slow-Start的问题
• Slow-start会产生许多丢包
– 约等于cwnd的大小 ~ BW*RTT
• 例:
– 某个点, cwnd 足够填满“管道pipe”
– 下次RTT, cwnd 将其之前的值翻倍
– 所有多余的包被丢弃!
• 一旦对带宽有了一个粗略的估计,就需要进行更精
细的调整
– 余下的设计讨论集中于此
44
问题2: 单个流,可变带宽
希望跟踪可用带宽
• 在其当前值附近振荡
• 如果从未发过比当前速率更高的,你将不知道是否有
更多的带宽可用
可能的变化: (in terms of change per RTT)
• 成倍增加或减少:
cwnd
cwnd * / a
cwnd
cwnd +- b
• 加法增加或减少:
45
四种可能
• AIAD: 缓慢增加,缓慢减少
• AIMD: 缓慢增加,快速减少
• MIAD: 快速增加,缓慢减少
– too many losses: eliminate
• MIMD: 快速增加,快速减少
46
问题3: 多个流
• 希望稳定状态时是 “公平的fair”
• 关于公平有多种说法, 但这里仅需要两个相同的流
最后带宽相同
• 这就淘汰了MIMD和AIAD
– 我们后面会看到…
• AIMD 是唯一余下的解!
– 并非真的, 但已经足够接近了….
47
缓冲和动态窗口
A
B
x
C = 50 pkts/RTT
•
无拥塞  x每次RTT增加一个包。
•
拥塞
 成倍减少x
Rate (pkts/RTT)
60
50
40
30
Backlog in router (pkts)
Congested if > 20
20
10
487
460
433
406
379
352
325
298
271
244
217
190
163
136
109
82
55
28
1
0
48
AIMD 动态共享
x1
x2
A
D
B
E
无拥塞  x每次RTT增加一个包。
拥塞
 成倍减少x
60
Rates equalize  fair share
50
40
30
20
10
487
460
433
406
379
352
325
298
271
244
217
190
163
136
109
82
55
28
1
0
49
AIAD 动态共享
x1
x2
A
D
B
E
• 无拥塞  x每次RTT增加一个包。
• 拥塞
 x每次RTT减少一个包
60
50
40
30
20
10
487
460
433
406
379
352
325
298
271
244
217
190
163
136
109
82
55
28
1
0
50
拥塞控制的简单模型
• 两路TCP连接
2 user example
– 传输率 x1 and x2
• 效率: 和近似 1
User 2: x2
• 当sum>1时拥塞
overload
underload
• 公平性: x收敛
Efficiency
line
User 1: x1
51
Example
1
fairness
line
Efficient: x1+x2=1
Fair
• 总带宽 1
User 2: x2
Congested:
x1+x2=1.2
(0.2, 0.5)
(0.7, 0.5)
(0.5, 0.5)
Inefficient:
x1+x2=0.7
(0.7, 0.3)
Efficient: x1+x2=1
Not fair
User 1: x1
efficiency
line
1
52
AIAD
(x1h-aD+aI),
x2h-aD+aI))
• 增加: x + aI
• 减少: x - aD
(x1h,x2h)
User 2: x2
• 不收敛到公平
fairness
line
(x1h-aD,x2h-aD)
efficiency
line
User 1: x1
53
MIMD
fairness
line
• 增加: x*bI
(x1h,x2h)
• 减少: x*bD
User 2: x2
• 未收敛到公平
(bIbDx1h,
bIbDx2h)
(bdx1h,bdx2h)
efficiency
line
User 1: x1
54
AIMD
(x1h,x2h)
• 增加: x+aD
(bDx1h+aI,
bDx2h+aI)
User 2: x2
• 减少: x*bD
• 收敛到公平
fairness
line
(bDx1h,bDx2h)
efficiency
line
User 1: x1
55
其它拥塞控制主题
56
AIMD的问题
• 公正: Tput 与RTT成反比
• 公正: Tput 与流的个数成正比
• 公正依赖于合作
• 高速时无法工作 (HW3)
– 从丢包恢复太长时间
• 早期随机丢包
57
其他主题
• TCP兼容性
– 每个人都需要使用拥塞控制来实现共享公正
• 基于公式的拥塞控制
• Signaling congestion without packet drops
– ECN
• 涉及拥塞控制的路由器
– 确保公正 (对单个标准不必要)
– 计算公平共享 (而非平衡)
• 扩展TCP到更高速度
• 经济学模型 (Kelly)
58