发生拥塞控制的原因:资源的需求>可用资源
作用:拥塞控制就是防止过多的数据包进入网络,这样可以使网络中的路由器或者链路不至于过载。拥塞控制的前提就是网络能够承受现有的网络负荷。
对比流量控制:拥塞控制是一个全局的过程,涉及到链路上的所有主机和路由。
流量控制往往指的是点对点通信的控制,是端对端的问题。
流量控制:
(1)tcp提供了一种机制可以让发送端根据接收端的实际接收能力来控制发送的速率,具体的操作是接收端主机向发送端主机通知自己可以接收数据的大小,于是发送会发送不超过这个限度的数据,该限度大小就被称为窗口大小。
(2)TCP首部中专门有个字段用来通知窗口大小,接收主机将自己可以接收缓冲区的大小放入这个字段通知发送端。这个字段越大说明网络的吞吐量越大。
接收端
(3)接收端缓冲区一旦面临溢出,窗口大小也会随之被设置为一个更小的值发送给发送端,从而控制发送的数据量,也就说发送端主机会根据接收端主机的缓冲区大小来对发送数据的大小进行控制。
拥塞控制:
计算机网络是一个共享网络,有可能因为其他主机间的通信造成网络拥堵,在网络出现拥堵时,如果突然发送一个较大的数据包可能导致整个网络的瘫痪。
拥塞窗口:发送方为一个动态变化的窗口叫做拥塞窗口,拥塞窗口的大小取决于网络的拥塞程度。发送让自己的发送窗口=MIN(拥塞窗口,接收方的接收窗口),但是发送窗口不是一直等于拥塞窗口,在网络情况好的情况下,拥塞窗口会不断增加,发送方的窗口自然也会随着增加,但是接收方的能力有限,在发送方的窗口达到某个大小时就不在发生变化了。
发送方如果确认网络拥塞:发送方发送一些报文时,如果发送没有在规定的时间间隔内收到接收方的应答,则就可以认为网络拥塞。
拥塞避免的思路:
(1)最初让拥塞窗口按照指数级增长,这样可以提高发送数据吞吐量;
(2)当拥塞窗口大小到达慢启动门限后,该成线性增长,目的是减少拥塞窗口的增长速度;
(3)当发送端检测的网络拥塞时,立即把拥塞窗口减小为1,把慢启动门限调整为出现拥塞时拥塞窗口的一半目的是可以减少向网络中注入的数据量。
(4) 重新开始指数级增长和线性增长。
实例:1.TCP连接进行初始化的时候,cwnd=1,ssthresh=16。
2.在慢启动算法开始时,cwnd的初始值是1,每次发送方收到一个ACK拥塞窗口就增加1,当ssthresh=cwnd时,就启动拥塞控制算法,拥塞窗口按照规律增长,
3.当cwnd=24时,网络出现超时,发送方收不到确认ACK,此时设置ssthresh=12,(二分之一cwnd),设置cwnd=1,然后开始慢启动算法,当cwnd=ssthresh=12,慢启动算法变为拥塞控制算法,cwnd按照线性的速度进行增长。
快速重传:发送端一旦接收一个确认应答后,又连续三次接收到相同的确认应答,则认为数据段已经丢失,需要进行重发,这时会立即进行重发二不必等到超时,这种机制比起超时机制可以提供更为快速的重传服务。
重传超时时间:最初默认为6s,之后通过报文的往返时延加上偏差确认。