TCP拥塞避免

(保留版权,欢迎转载。请保留出处,注明原始链接!谢谢。)

TCP/IP的精髓在TCP,TCP的精髓在拥塞避免。

发端TCP估计网络层的信道容量,结合收端TCP的提示窗口,动态调整包的发送速率,来主动避免/解除网络层可能/已经出现的拥塞现象。
0。基本概念:RTT | RTO,CWND | SSStresh。
RTT的测量:样本选取(每个连接仅测1次),计数方法(记录节拍分割点)和误差范围(1~2个节拍长度)。
RTO的估计:Jacobson算法( A <- 0.875A + 0125M, D <- 0.75D + 0.25|A - M|, RTO <- A + 4D),和Karn算法(为避免重传二义性,对重传数据的确认不更新RTO,沿用指数避让)。
CWND和SSStresh:在诸多拥塞对策算法中两者配合使用。
1。拥塞指征:(隐式)超时/重复确认,(显示)SACK和ECN。
2。拥塞对策:Taheo/Reno/NewReno/Bic/Cubic/Vegas等算法。
3。Reno算法举例:
a. 慢启动/拥塞避免
1). 初始CWND为1 MSS,SSStresh为64kb;
2). 发端TCP发送数据包不得超过min(CWND, RWND);
3). 当发现拥塞(超时和重复ACK)时,SSStresh <- max(2MSS, 1/2*min (CWND, RWND));并若是超时,则CWND <- 1MSS;(注:重复ACK并未引起CWND减小,因为重复ACK是由超前的数据包到达收端触发的,且认为发端TCP到收端TCP的路径仍然通畅。)
4). 当每有新的ACK到达(新的数据亦被确认)时:若CWND <= SSStresh,进入慢启动状态,CWND <- CWND + 1(CWND呈指数增长);若CWND > SSStresh,进入拥塞避免状态,CWND <- CWND + 1/CWND(CWND在一个RTT内至多增加1MSS)。
b. 快速重传/快速恢复
1). 收端TCP对于收到的超前数据包时(并不丢弃但也无法提交应用层,暂在TCP收端缓存内,会影响RWND吗?),但总会立刻回复ACK(重复ACK)呼吁其期望收到的数据包(可能中途丢失或者掉队乱序);
2). 当第1个重复ACK到达时,进入a的1).,但直到第3个重复ACK到达时:
i]. 立刻重发丢失的数据包(重复ACK期望的)
ii]. SSStresh <- 1/2*min (CWND, RWND),CWND <- SSStresh + 3;
3). 当第3+N个重复ACK到达时,CWND <- CWND + 1,若min(CWND,RWND)允许,则继续发送1个新数据包;(如果第3+3+1, +2, +3 ...个重复ACK到达时呢?此时CWND < SSStresh,是否仍然是“慢启动”呢?)
4). 当新的ACK到达时(对重传的数据包和后续发送的数据包的确认),CWND <- SSStresh,即2).的ii].中保存的值,从此进入拥塞避免状态。
4。Linux源代码分析(略)
5。抓包实验(略)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值