学习笔记|TCP协议——流量控制和拥塞控制

**
一、流量控制 **
1.1 什么是流量控制

Sender won’t overflow receiver’s buffer by transmitting too much, too fast. (防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理)
1.2 流量控制的一些知识点
(1)接收端抑制发送端的依据:接收端缓冲区的大小
(2)流量控制的目标是接收端,是怕接收端来不及处理
(3)流量控制的机制是丢包
1.3 怎么样实现流量控制?
使用滑动窗口
1.4 滑动窗口
滑动窗口是什么?
滑动窗口是类似于一个窗口一样的东西,是用来告诉发送端可以发送数据的大小或者说是窗口标记了接收端缓冲区的大小,这样就可以实现批量发送数据
为什么会出现滑动窗口
在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候
使用滑动窗口,就可以一次发送多条数据,从而就提高了性能
滑动窗口原理
TCP中采用滑动窗口来进行流量控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报。
滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
学习笔记|TCP协议——流量控制和拥塞控制
文章图片

(1)接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK来通知发送端
(2)窗口大小字段越大,说明网络的吞吐率越高
(3)窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,即就是说不需要接收端的应答,可以一次连续的发送数据
(4)操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉
ps:发送缓冲区如果太大,就会有空间开销
(5)接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端,发送端收到这个值后,就会减慢自己的发送速度
(6)如果接收端发现自己的缓冲区满了,就会将窗口的大小设置为0,此时发送端将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端
ps:在TCP的首部中,有一个16为窗口字段,此字段就是用来存放窗口大小信息的
滑动窗口的优点
可以高效可靠的发送大量的数据
1.1 超时重传
TCP服务必须能够重传超时时间内未收到确认报文段的TCP报文段。TCP为每个TCP模块都维护了一个重传定时器,定时器在第一次发送TCP报文段时启动,如果超时时间内未收到接收方的确认号报文段,TCP模块将重传TCP报文段并重置定时器。 至于下次重传的超时时间如何选择,以及最多重传几次,这是TCP的重传策略。 与TCP超时重连的策略相似。
流量控制的处理过程:
TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;
发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;
发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。
**
2、拥塞控制 **
2.1 什么是拥塞控制
too many sources sending too much data too fast for network to handle
防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞
流量控制虽然可以高效可靠的传送大量的数据,但是如果在刚开始阶段就发送大量的数据,可能会导致网络拥堵,因为网络上的计算机太多了。
TCP模块为了防止过多的数据注入网络,使网络中的路由器或链路不致于过载。以此提高网络利用率,降低丢包率,并抱证网络资源对每条数据流的公平性而采取的控制手段。
2.2 拥塞控制的实现
拥塞控制包含四部分内容:慢启动、拥塞避免、快速重传、快速恢复。
  • 慢启动: 网络传输刚开始时,并不知道网络的实际情况,所以采取一种试探的方式控制数据的发送速率。慢启动阶段,数据的发送速率以指数方式增长,即就是拥塞窗口的增长,每次都是收到确认报文段数量的2倍。可以看出慢启动并不慢,拥塞窗口增长的速度很快。所以,为其设置了一个慢启动门限,当达到门限时,就进入到拥塞避免阶段。
  • 拥塞避免: 当拥塞窗口的大小采用慢启动方式增长到慢启动门限时,就进入拥塞避免阶段,拥塞避免阶段不再以指数形式增长拥塞窗口,而是每经过一个往返时间RTT就将发送方的拥塞窗口+1, 使其增长速度减缓。按照线性方式增长。如果发生网络拥塞,比如丢包时,就将慢启动门限设为原来的一半,然后将拥塞窗口设置为1,开始执行慢启动算法。(较低的起点,指数级增长)。
  • 快速重传: 假设发送方发送的报文段分别为: M1,M2,M3,M4,M5,M6 , 当接收方收到M1和M2后,M3报文段丢失,接着收到的M4,M5,M6都不做处理,而是没接收到一个报文段就对M2重复确认,发送方接收到重复的三次确认报文段,就对其后的报文段进行重新发送,而不需要等待超时时间到达。当快速重传后,立即进入到快速恢复阶段。
  • 快速恢复:将慢启动门限设置为原来的一半,然后将拥塞窗口设置为现在的慢启动门限值,不再执行慢启动算法,而是直接进入拥塞避免阶段。使发送窗口成线性方式增大。
学习笔记|TCP协议——流量控制和拥塞控制
文章图片

学习笔记|TCP协议——流量控制和拥塞控制
文章图片

**
3、流量控制&拥塞控制的联系与区别 **
3.1 相同点
(1)现象都是丢包;
(2)实现机制都是让发送方发的慢一点,发的少一点
3.2 不同点
(1)丢包位置不同 流量控制丢包位置是在接收端上 拥塞控制丢包位置是在路由器上
(2)作用的对象不同 流量控制的对象是接收方,怕发送方发的太快,使得接收方来不及处理 拥塞控制的对象是网络,怕发送方发的太快,造成网络拥塞,使得网络来不及处理
【学习笔记|TCP协议——流量控制和拥塞控制】3.3 联系
  • 拥塞控制
    拥塞控制通常表示的是一个全局性的过程,它会涉及到网络中所有的主机、
    所有的路由器和降低网络传输性能的所有因素
  • 流量控制
    流量控制发生在发送端和接收端之间,只是点到点之间的控制
学习笔记|TCP协议——流量控制和拥塞控制
文章图片

    推荐阅读