达时,只要窗口是满的,增加拥塞窗口都是正确的处理方法 。
我们把这种改进称为TCP拥塞窗口校验(CWV),因为这总是保证拥塞窗口总反映当前
的网络状况,
3.1减小拥塞窗口的基本算法
在CWV算法中,一个要害的问题是在应用程序限制的流中,对每一个往返时间内,如
何将这些原则应用于降低拥塞窗口中去,我们使用TCP的重发超时器作为往返时间的合理
上限,并在每一个重发超时内迅速降低拥塞窗口大小 。
基本算法在TCP中可按如下进行实现:当TCP发送一个新包时,它检查自从前一包发
送后,是否已过了一个重发超时,假如是,则阕值设为窗口的3/4和当前阕值两者之间的最
大值,然后,自从前一包发送后过一个重发超时,则将拥塞窗口减半,另外,T_prev被设
置为当前时间,而W_used被重置为0,T_prev被用来决定自从发送的上一次网络限制或在
一段IDLE已经减小了窗口后的流逝的时间,当发送方是应用程序时,W_used保留自从发
送方为上一次网络限制来的被使用的最大拥塞窗口值 。
在最近IDLE时间内决定RTO的数目的机制可以通过一个计时器来实现,计时器在最
后一次的包发送后的每一个RTO内超时,而不是检查每一个包,在不同操作系统上的效率
将表现那一个更轻易实现 。
在TCP发送一个包以后,它会检查这个包是否填满了拥塞窗口,假如是,发送者是受
网络限制的,并把T_prev的值设为当前TCP的时钟,W_used被置为0 。
当TCP发送一个没有填满拥塞窗口的包时,并且TCP发送队列为空时,发送者是受应
用限制的,发送方检查未确认的帧是否比W_used大,假如是,W_used被置为未确认的帧
数,另外,TCP检查自从T_prev以来流逝的时间是否大于RTO,假如是,TCP在一个RTO
间隔内,但小于两个RTO内是应用程序限制,而不是网络限制的,在这种情况下,TCP将
阕值设为窗口的3/4和当前阕值两者之间的最大值,并将其拥塞窗口减小到(cwnd W_used)/2.
W_used被置为0,T_prev的值设为当前的时钟,这样直到另一个RTO流逝,才会进一步减
小拥塞窗口,因此,在应用程序限制时,CWV算法每个RTO减低拥塞窗口的大小 。
3.2减小拥塞窗口的伪码
Initially:
T_last=tcpnow,T_prev=tcpnow,W_used=0
Aftersendingadatasegment:
Iftcpnow-T_last>=RTO
(Thesenderhasbeenidle.)
ssthresh=max(ssthresh,3*cwnd/4)
Fori=1To(tcpnow-T_last)/RTO
win=min(cwnd,receiver"sdeclaredmaxwindow)
cwnd=max(win/2,MSS)
T_prev=tcpnow
W_used=0
T_last=tcpnow
Ifwindowisfull
T_prev=tcpnow
W_used=0
Else
Ifnomoredataisavailabletosend
W_used=max(W_used,amountofunacknowledgeddata)
Iftcpnow-T_prev>=RTO
(Thesenderhasbeenapplication-limited.)
ssthresh=max(ssthresh,3*cwnd/4)
win=min(cwnd,receiver"sdeclaredmaxwindow)
cwnd=(win W_used)/2
T_prev=tcpnow
W_used=0
4模拟
在网络模拟器[NS]中已将CWV作为一个选项加以实现,在对CWV的有效性检验时,可以
在"tcl/test"下运行"./test-all-tcp"命令 。模拟器显示了在TCP连接过了一段应用程序限
制后用CWV来降低拥塞窗口的大小,并在传输是应用限制时,来限制拥塞窗口的增加 。正如
在模拟器显示的,保持连接历史的阕值的使用是拥塞窗口有效性检验的要害部分 。在[HPF99]
对这些模拟有具体的讨论 。
5实验
在FREEBSD3.2的TCP实现中,我们实现了CWV机制,在[HPF99]对这些实验有具体
的讨论 。
第一个实验检测了在应用程序限制期间用拥塞窗口有效性检验的机制来限制窗口的增
推荐阅读
- 有借呗窗口只有备用金怎么回事
- TCP/IP:传输控制协议和网间协议
- 行业窗口期什么意思
- tcp三次握手及原理
- P800w视频实地测试
- 暴风影音闪电版不好拖动窗口大小怎么办 学会这几招就行
- 优酷如何小窗口播放 小窗播放设置方法
- BlueStacks安卓模拟器屏幕窗口大小的调整方法
- 端口号
- TCP/IP 引言
