Tcp协议的拥塞控制如何实现

  • Post author:
  • Post category:其他


1.拥塞产生的原因

网络拥塞是由于一段时间内用户对于某一网络资源的请求超过了它能提供的固有容量的大小,网络传输性能就会下降,这就是拥塞。当网络发生拥塞时,一般会产生的问题有数据丢失,时延增加,吞吐量下降等。

产生拥塞的原因也显而易见,比如①存储空间限制:转发端口的输入端被多个高速输入流占用,而输出端口的转发送速率就显得较慢了,此时来不及转发的数据临时存储在存储空间,等到后面的数据流到达时存储空间此时已满就会丢弃从而造成数据丢失。②宽带容量的限制,信源宽带远大于链路宽带时就会造成数据包在节点处排队等待,造成网络拥塞。③ 处理器性能的影响。④不合理的路由规划等。

2.TCP协议如何进行拥塞控制

TCP协议是面向连接的可靠的传输层控制协议,建立点对点的连接通信,依靠传输报文段里的首部中的一些控制位字段标识来得知两端的数据传输情况,从而判断是否需要采取针对性措施来保证传输的可靠。

TCP拥塞控制采用四个算法来避免网络拥塞:

慢开始、拥塞避免、快重传、快恢复。



发送方需要维护一个叫做

拥塞窗口(

cwnd)


的状态变量,它能限制发送方任何时刻内确定能被发送出去的字节数。与由接收方维护的接收窗口大小不冲突。


慢开始:

慢开始时设置拥塞窗口值(cwnd)为1,发送方只能发送

1

个报文段;当收到确认后,将

cwnd

加倍,之后拥塞窗口在每接收到一个确认包时加倍,因此后面发送的报文段数为:

2



4



8

…。


拥塞避免:



cwnd值

达到慢开始阈值(ssthresh)时,慢开始算法就会转换为线性增长的阶段,每个轮次拥塞窗口值只增加1,,降低拥塞窗口的增长速度。如果出现了超时,则令慢开始阈值降为当前拥塞窗口的一半(

ssthresh = cwnd / 2

),然后开始执行快恢复。


快重传:

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。


快恢复:

当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,将当前拥塞窗口值的一半作为新的慢开始门限

ssthresh

值,并跳过慢启动阶段,直接进入拥塞控制阶段,使拥塞窗口缓慢地线性增大。 这便是快恢复




版权声明:本文为qq_55897122原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。