TCP流量控制与拥塞控制浅析
TCP流量控制
1. 流量控制的出现就是为了控制发送方发送速率不要太快,防止在接收方接受的时候出现数据丢失的情况。其主要利用了滑动窗口的方式在实现流量控制,由于TCP是双工协议,所以会话双方都会维系发送窗口和接受窗口。
2. 首先在双方建立(A、B)连接后,会进行窗口协商,B(接收方)将自己的窗口(recieve window )大小告诉给A,以此保证A发送窗发送数据大小不能大于B的接受窗口大小。假设接收方B收到了1-100字节的数据,B会发送ack=101的确认号(表示下次接受的数据从101开始),如果A发送201-300的数据,B依旧会发送ack=101的确认号,在发送ack时会顺带着rwnd的大小比如500,A在接收到了B回传的数据后计算出可以发送的字节数s=500-(101-1)=400。由此可根据接发方的窗口大小以及ack可以控制发送方的发送速度,防止包丢失。
TCP拥塞控制
1. 在TCP数据传输过程中可能会出现很多数据一下子涌入网络中,会使整个网络拥塞不堪,导致整个网络资源供应不足,整个性能下降,出现丢失数据严重的情况,从而使网络吞吐量极速下降;而如果采用一次性只传输一小段报文段数目,一直维持这种低速数据传输的话整个网络传输效率也是一个严重的问题,而TCP的拥塞控制就是在这两者之间进行一种权衡的方案,既能保证网络传输过程中数据的完整性、可靠性,又能稳定的提升网络传输效率,提高网络吞吐量,从而平衡整个网络性能。
2. 常用的拥塞控制方法
包括慢启动(slow-start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快恢复(fast recorver)。
2.1 慢启动
当发送方发送数据时,因不清楚整个网络出现拥塞情况的临界点,于是就从小到大增大cwnd的值,假如初始化为cwnd=1为一个报文段,当发送发发出M1数据,并收到接收方传输的M1确认数据即准备获取M2数据的确认数据后,将cwnd=2,于是就根据拥塞窗口大小,将传输数据扩大到M2、M3,当发送方接受到M2、M3确认信息后就酱cwnd=4。由此可见慢启动方式以2的倍数增大拥塞窗口的。
在慢启动开始时会设置一个慢开始门限ssthresh值。然后根据具体的门限值决定采用慢启动算法还是拥塞避免算法。
2.2 拥塞避免
不是采用慢启动2倍增加方式来增大拥塞窗口cwnd,拥塞采用在一个时间往返RTT一次只增加1的方式更加缓慢的增大拥塞窗口,这样可以防止网络过早出现拥塞。
2.3 快速重传
如果接受方连续给发送方发出3个重复的ACK,那么发送方不用等到重传计时到期,而是马上重新传递没被接受方确认的报文段
2.4 快速恢复
如果出现网络超时,或者连续受到3个重复ACK数据信息,TCP Tahoe版本采用了重传后进行“乘法减小”(即将cwnd的值设置为1,ssthreash值置为cwnd的一半,再进行慢启动)算法处理,而TCP Reno采用快速恢复的方式,即更改cwnd的值为ssthresh一半,再执行拥避免算法,缓慢的增大拥塞窗口。
由此可见在拥塞控制中,TCP综合采用了这四种算法来优化整个网络的效率,而并不是独立的依赖某一个单独的算法。