计算机网络--TCP协议流量控制、拥塞控制详解

一、序言

对TCP协议的介绍之前博文已经介绍过了可以看下https://blog.csdn.net/zhang09090606/article/details/114742646?spm=1001.2014.3001.5501

二、流量控制

1.简介:

流量控制顾名思义就是防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理

2.滑动窗口

2.1解决的问题:

在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候,而使用滑动窗口,就可以一次发送多条数据,从而就提高了性能

2.2.何为窗口?

窗口指可以通过的数据量,窗口越大吞吐量越大,    TCP的两端都有发送/接收缓存和发送/接收窗口,其中发送窗口可以用3个指针表示。而发送窗口的大小受TCP数据报中窗口大小的影响,TCP数据报中的窗口大小是接收端通知发送端其还可以接收多少数据,所以发送窗口根据接收的的窗口大小的值动态变化

窗口字段:在TCP的首部中,有一个16为窗口字段,此字段就是用来存放窗口大小信息的

 

2.3工作流程:

发送窗口和接受窗口大小是存在默认值的B S D默认设置发送和接受缓冲区的大小为2 0 4 8个字节。在4 . 3 B S D中双方被增加 为4 0 9 6个字节。在实际连接会根据实际动态改变

(1)  TCP建立连接的初始,当发送方收到第一个字节的确认后(也得到了网络情况和对方的接收窗口大小),接受端B会告诉发送端A自己的接收窗口大小,这里暂定为20字节

(2)连接建立完毕后发送端A向接收端B发送了11个字节31-41,滑动窗口位置不变

(3)接收端B接收是无序的,此时可能是先接受到了32.33,所以B发送确认号ack的时候依然发送31,表示B期望接收的下一个数据报的标示符是31

(4)当B收到31后连同之前接收到的数据报,发送确认号34,此时A的滑动窗口可以向前移动了。

(5) 如果发送窗口中的数据报都属于已发送但未被确认的话,那么A就不能再继续发送数据,而需要进行等待。

2.4.滑动窗口听移动规则

  • 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
  • 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。
  • 当右边缘向左移动时,称之为窗口收缩。(非常不希望出现的,某些实现是禁止的):表示本来可以发送的,现在不能发送;但是如果收缩的是那些已经发出的,就会有问题;为了避免,收端会等待到缓存中有更多缓存空间时才进行通信

2.5.发送方和接收方运行的流程图

2.6.其他知识点

1.操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉

2.接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK来通知发送端

3.接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端,发送端收到这个值后,就会减慢自己的发送速度

4.如果接收端发现自己的缓冲区满了,就会将窗口的大小设置为0,此时发送端将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端

5.发送方收到一个重复ack之后,其实无法确认是报文丢失还是报文段重新排序引起的,因此会等待少量重复ack到来,一般会等待3个或者以上。如果连续收到3个或以上的重复ack,则判定可能报文丢失了

6.如果B已经告诉A自己的缓冲区已满,于是A停止发送数据;等待一段时间后,B的缓冲区出现了富余,于是给A发送报文告诉A我的rwnd大小为400,但是这个报文不幸丢失了,于是就出现A等待B的通知||B等待A发送数据的死锁状态。为了处理这种问题,TCP引入了持续计时器(Persistence timer),当A收到对方的零窗口通知时,就启用该计时器,时间到则发送一个1字节的探测报文,对方会在此时回应自身的接收窗口大小,如果结果仍未0,则重设持续计时器,继续等待

 

二、拥塞控制

1.简介

我们 都知道晚上用网高峰期网速会很慢,试想一下原本网络就不好,然后你还一次性向网络倒那么多数据包,大家都别过去了都超时,然后超时时间到了又都重发,恶性循环下去使得原本就不富裕的网络更加雪上加霜,因此 TCP 你要自己学聪明,进行拥塞控制。 拥塞控制的目的就是防止过多的数据注入到网络中,网络堵塞使得包一直到不了接收端。网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载

2.拥塞控制的四个算法:

慢开始、拥塞避免

快重传、快恢复

3.慢开始和拥塞避免

 发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞

慢开始的工作流程

(1) 发送方维持一个叫做“拥塞窗口”的变量,该变量和接收端口共同决定了发送者的发送窗口;
(2)当主机开始发送数据时,避免一下子将大量字节注入到网络,造成或者增加拥塞,选择发送一个1字节的试探报文;
(3) 当收到第一个字节的数据的确认后,就发送2个字节的报文;
(4)若再次收到2个字节的确认,则发送4个字节,依次递增2的指数级;
(5)最后会达到一个提前预设的“慢开始门限”ssthresh,比如16,即一次发送了16个分组,此时触发拥塞避免算法

拥塞避免算法:

 所谓拥塞避免算法就是:每经过一个往返时间RTT就把发送方的拥塞窗口+1,即让拥塞窗口缓慢地增大,按照线性规律增长;
当出现网络拥塞,比如丢包时,将慢开始门限设为触发拥塞时窗口的一半,然后将cwnd设为1,执行慢开始算法(较低的起点,指数级增长)

4.快重传和快恢复

快重传和快恢复是优化了上面算法每次都拥塞会从1开始,减少因为拥塞导致的数据包丢失带来的重传时间,从而避免传递无用的数据到网络

如图所示前半部和上诉的算法一样,但是发生=拥塞时不是直接从1开始,而是直接从折半后新的ssthresh初开始进行拥塞避免,该版本为当前流行的算法,之前的从1开始已经废弃

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值