TCP流量控制和拥塞控制

Posted by JimWang on 2021-02-10

TCP流量控制和拥塞控制

什么是拥塞控制和流量控制

流量控制:如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。

TCP的流量控制是利用滑动窗口机制实现的,接收方在返回的数据中会包含自己的接收窗口的大小,以控制发送方的数据发送。

拥塞控制:拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

两者的区别:流量控制是为了预防拥塞。如:在马路上行车,交警跟红绿灯是流量控制,当发生拥塞时,如何进行疏散,是拥塞控制

拥塞控制

方式一:慢启动和拥塞避免

1)慢启动,TCP发送端会维护一个拥塞窗口(congestionwindow),简称为cwnd。拥塞窗口初始为1个报文段,每经过一次RTT(数据完全发送完到确认的时间),窗口大小翻倍(指数增长,只是前期慢)

  • RTT(Round-Trip Time):往返时延。是指数据从网络一端传到另一端所需的bai时间。通常,时延由发送时延、传播时延、排队时延、处理时延四个部分组成。

2)拥塞避免,它思路是让拥塞窗口cwnd缓慢增大,发送方的cwnd达到阀值ssthresh(初始值由系统决定的)之后,每经过一个RTT就把拥塞窗口加一,而不是加倍(收到两个或四个确认,都是cwnd+1),cwnd呈线性增加(加法增大)

如果遇到网络拥塞,拥塞窗口阀值ssthresh变为网络拥挤时cwnd的一半,cwnd设置为1,重新进入慢启动阶段

image-20210210151606186

方式二:快重传和快恢复

1)快重传是当接收方收到了一个失序的报文,则立马报告给发送方,赶紧重传。假如接收方M1收到了,M2没有收到,之后的M3、M4、M5又发送了,此时接收方一共连续给发送方反馈了3个M1确认报文。那么快重传规定,发送方只要连续收到3个重复确认,立即重传对方发来的M2(重复确认报文的后一个报文)

image-20210210152010845

2)快恢复:当发送方连续收到三个重复确认,ssthresh减为当前cwnd的一半;由于发送方可能认为网络现在没有拥塞,因此与慢启动不同,把cwnd值设置为ssthresh减半之后的值,然后执行拥塞避免算法,cwnd线性增大

image-20210210152058896

流量控制

滑动窗口

发送窗口中有四个概念::已发送并收到确认的数据(不在发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之内)、允许发送但尚未发送的数据(位于发送窗口之内)、发送窗口之外的缓冲区内暂时不允许发送的数据。

接收窗口中也有四个概念:已发送确认并交付主机的数据(不在接收窗口和接收缓冲区之内)、未按序收到的数据(位于接收窗口之内)、允许的数据(位于接收窗口之内)、不允许接收的数据(位于发送窗口之内)。

image-20210210161026238

滑动窗口做流量控制用

  • 接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK报文来通知发送端,滑动窗口是接收端用来控制发送端发送数据的大小,从而达到流量控制
  • 其实发送方的窗口上限,是取值拥塞窗口和滑动窗口两者的最小值

image-20210210152602749

滑动窗口和拥塞窗口的相同与不同

相同点

  • 都是控制丢包现象,实现机制都是让发送方发得慢一点

不同点在于控制的对象不同

  • 流量控制的对象是接收方,怕发送方发的太快,使得接收方来不及处理
  • 拥塞控制的对象是网络,怕发送方发的太快,造成网络拥塞,使得网络来不及处理