1、网络拥塞
路由器的内存是有限的,若同一时间到达某个路由器的数据太多,这个路由器将无法接收所有的数据,只能将一部分丢弃;或者同一台路由器数据太多,后面到达的数据将要等待较长的时间才会被转发。
网络中的数据太多,导致某个路由器处理不过来或处理地太慢,这就是网络拥塞;
对于TCP,当发生数据丢失时,重传数据将延长数据到达的时间;同时,高频率的重传,也将导致网络的拥塞得不到缓解。
拥塞控制:
1) 在网络中发生拥塞时,减少向网络中发送数据的速度,防止造成恶性循环;
2) 在网络空闲时,提高发送数据的速度,最大限度地利用网络资源.
2、拥塞控制方法:
由发送数据的端系统自己来判断是否拥塞,然后调整传输速率。
例如:发送的数据已经超时却还没有接收到确认报文,数据往返时延过高,接收到对同一个数据段的重复确认
都可以认为是网络拥塞的现象;若发送端检测到这种现象,就应该降低发送数据的速率,若没有,则可以慢慢提高速率;
拥塞控制算法Reno: 慢启动、拥塞避免、快重传、快启动
- 慢启动阶段思路是不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小,在没有出现丢包时每收到一个 ACK 就将拥塞窗口大小加一(单位是 MSS,最大单个报文段长度),每轮次发送窗口增加一倍,呈指数增长,若出现丢包,则将拥塞窗口减半,进入拥塞避免阶段;
- 当窗口达到慢启动阈值或出现丢包时,进入拥塞避免阶段,窗口每轮次加一,呈线性增长;当收到对一个报文的三个重复的 ACK 时,认为这个报文的下一个报文丢失了,进入快重传阶段,要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方,可提高网络吞吐量约20%)而不要等到自己发送数据时捎带确认;
- 快重传完成后进入快恢复阶段,将慢启动阈值修改为当前拥塞窗口值的一半,同时拥塞窗口值等于慢启动阈值,然后进入拥塞避免阶段,重复上述过程。
3、滑动窗口原理
TCP
不是发送一个数据段,接收到确认后再发送另一个数据段;TCP是流水线的方式发送数据:
TCP
的每一个数据段都有一个序号,TCP
维护一个发送窗口来发送数据,这个窗口就是一个区间。
所有序号位于同一个窗口内的数据段会被一次性发送,不需要等待之前发送的数据段被确认。
最早发送出去的数据段被确认后,窗口就会向前移动,直到移动到第一个没有被确认的序号,这时候又会有新的数据段序号被包含在窗口中,然后被发送出去。
所以限制数据发送速率最好的方式就是限制窗口的大小。
在发送方的TCP
程序会跟踪和维护一个叫做拥塞窗口的变量,用来进行拥塞控制。拥塞窗口被称为cwnd
。
在TCP
发送端,所有被发送但是还没收到确认的数据段必须落在这个窗口中,所有,当网络拥塞时,TCP程序将减小cwnd
,而网络通畅时,增大cwnd
,以此来控制数据发送的速率。 如图TCP报文格式