计算机网络的学习之流量控制和拥塞控制
流量控制
一般来说我们希望数据传输的速度能够快一点,但是当数据传输过快时接收方来不及处理就会引起丢包,所谓的流量控制就是让发送方发送数据的速度不要过快,要让接收方来得及接收。
- 发送方的窗口不能超过接收方给的接收窗口的大小。
- 当接收方发送零窗口,发送方就应该停止发送
- 续上面的问题当接收方有缓存时发送一个窗口大小,表示发送方可以发送了,但是当这个数据包在传输的过程中丢失了,那么:发送方以为接收方没有缓存空间等待,而接收方以为自己已经发送回复了所以等待发送方的数据,就会造成死锁
拥塞控制
当网络内部的可用资源小于需要的资源时就会发生拥塞,网络的资源有:链路容量(带宽),交换节点中的缓存容量和处理机等
拥塞是趋于恶化的:
当网络发生拥塞时最明显的表现就是丢包,比如因为缓存空间不足时会将多余的包丢弃掉,当发送方在规定的时间内未收到响应时肯定会引发超时重传机制,但是网络内部的拥塞并未解决此时重传的包只会给网络增加负担, 继续丢包发送端继续重传,所以网络会在短时间内瘫痪。
拥塞控制的方法
进行拥塞控制的算法:
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
拥塞控制也是基于窗口的的拥塞控制,发送方维持一个叫窗口的状态 cwnd 拥塞窗口的大小取决于网络的拥塞程度,发送方让自己的发送窗口等于拥塞窗口。
发送方拥塞窗口的控制原则
只要网络没有发生拥塞,拥塞窗口就可以扩大一些,以便把更多的分组发送出去。这样就可以提高网路的利用率。但是只要发生拥塞就必须要把拥塞窗口的大小调小一点,减少注入到网络中的分组数,以便缓解网络出现的拥塞。
拥塞判断
当发生拥塞时路由器会将来不及处理的分组丢掉,所以在发送端在规定的时间内肯定是收不到回复的所以会引发超时重传机制,将超时重传机制作为网络拥塞的判断标准。(因为传输出错而重传的概率是很小的 远小于 1%),所以我们将**重传作为拥塞的判断。
拥塞控制算法介绍
-
慢开始
- 由小到大逐渐增大注入网络当中的数据字节,也就是说:从小到大逐渐增大拥塞窗口的数值。(1 2 4 8 ...)
- 为了防止拥塞窗口增大过快引起网络的拥塞,需要设定一个“慢开始的门限 ssthresh” 状态变量,可以将ssthersh设置的大一些,例如发送窗口的最大容许值。
- 开始门限的用法如下:
- cwnd < ssthresh 慢开始
- cwnd = ssthresh 既可以慢开始,也可以拥塞避免。
- cwnd > sshersh 拥塞避免
-
拥塞避免
- 是让拥塞窗口缓慢增大,加法增大cwnd按线性规律缓慢增大,比慢增大缓慢很多。 +1
- 每次都是增加一个数,使网络不容易出现拥塞。
-
快重传
- 当发送方一连收到三个重复的确认,就可以知道现在网络并没有出现拥塞,只是接收方少收到了一个报文段因而立即重传,即“快重传”
- 发送方知道现在只是丢失了个别的报文段,于是不启动慢开始,而是执行快恢复算法。这时发送方第二次调整门限值 ssthersh = cwnd/2; 并开始执行避免拥塞算法。
-
快恢复
- 在前已经提到过快恢复的相关,就是当收到三个一连的重复确认时,发送方可以确认只是个别的报文段的丢失并不是拥塞,所以不用再启动慢开始来缓解拥塞。将门限设置为拥塞窗口的一半,并开始以避免拥塞算法线性增长。
发送窗口的大小: MIN(rwnd,cwnd) 也就是说不能大于接收方的窗口和拥塞窗口的中的最小值。