在整个TCP层拥塞控制过程中,有七个参数起着决定性的作用,它们分别是:
1)发送端拥塞窗口:限制了源端一次最多可以发送的数据包的个数,在TCP拥塞控制中,这个参数起着关键性的作用。
2) 通告窗口:接收端在TCP建立初期为发送端设立的发送窗口大小,该参数只是在链接建立初期起作用。
3) 源端的发送窗口:决定源端每次实际上可以发送多少个数据包。
4) 慢启动阀值:慢启动阶段和拥塞避免阶段的分界点,初始值通常设为(216)字节。
5) 回路响应时间:一个数据包从源端发出,被接收端接收,接收端发出的应答包被源端接受,这一过程所需要的时间被称作回路响应时间。这一参数对网络性能有比较大的影响,这是网络具有时滞性的主要原因。
6) 超时重传计时器:每当一个数据包从源端发出,即启动一个计时器,当计时器到达规定时间时,源端仍然没有接收到该数据包的应答包,则认定该数据包丢失,源端重传该数据包,RTO通常设置为R1盯的数倍。
7) 快速重传阀值:决定源端是否进入快速重传阶段。当源端收到的重复确认包的个数超过该阀值的时候,触发源端的快速重传机制。
2.1.2 TCP拥塞控制的四个组成阶段
1)慢启动阶段
在早期开发的TCP协议当中,在源端建立一个新的TCP链接时,会立刻发送大量的数据包进入网络,网络的负载迅速增加,在很短的时问内各项网络资源就被耗尽,网络拥塞发生,各项性能急剧下降,实际有效的吞吐量迅速下降,最终导致此链接以及很多其他的链接无法获得很好的网络服务。产生这一问题的原因是源端对网络的运行状态毫不知情,因此过于贪婪地发送数据包。为了解决这一问题,TCP中增加了慢启动机制。顾名思义,就是缓慢地增加TCP源端的发送速率。当TCP源端新建立一个链接时,拥塞窗口被限制为一个数据包的大小,强制源端无法立即大量的发送数据包,而每当源端收到一个ACK应答包时,拥塞窗口就增加l,不断地持续下去。这样源端的拥塞窗口就会呈指数增长。这一机制使得源端可以在链接建立初期一定程度上限制自己的发送速率,以此来避免拥塞的发生。
2)拥塞避免阶段
当源端收到三个相同的ACK应答包时,判定网络拥塞发生。为避免拥塞加剧,源端进入拥塞避免阶段。此时慢启动阀值ssthresh将会被设置为当前cwnd值的一半,如果发生数据包超时,cwnd还会被设置为1。如果cwnd<ssthresh,TCP再次进入慢启动阶段。如果cwnd>=ssthresh,则进入拥塞避免阶段。与慢启动阶段不同的是,在拥塞避免阶段,源端每接收到一个ACK应答包时,拥塞窗口cwnd的大小只增加1/cwnd。这样的线性增长就避免了在慢启动阶段拥塞窗口的指数增长,防止在网络拥塞已经发生的情况下,源端继续发送大量的数据包进入网络,加剧拥塞程度。
3)快速重传阶段
当一个数据包从源端发出,在两种情况下接收端将无法及时接收到该数据包。第一种情况是该数据包在某一个中间节点处被丢弃,第二种情况是该数据包没有被丢弃,但是因为中间节点的缓冲区队列太长,该数据包依然在排队,而当后续的数据包被接收端接受之后,接收端收到的就是乱序的数据包。为此,接收端会向源端发出相应的重复确认。源端在收到一个重复确认之后,并不能判定该数据包是真的被丢弃了,还是数据流发生了失序。为此做出一个假定:即当源端收到三个以下的重复确认请求时,源端判定数据流发生失序。而当收到三个或者三个以上的重复确认请求时,源端判定发生数据包丢失,此时源端不需要等待超时重传立即重新发送该数据包,也即快速重传。文献综述