流量控制是数据链路层的一种功能,流量控制对数据链路上的帧的发送速率进行控制,以使接收方有足够的缓冲空间来接受每个帧。
流量控制的基本方法是由接收方控制发送方发送数据的速率
常见的流量控制方式有两种:停止-等待协议、滑动窗口协议
2.什么是可靠传输机制?可靠传输机制是为了使数据可以正确稳定的传输和接收而制定的规则。
数据链路层的可靠传输通常使用确认和超时重传两种机制来完成。
确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认。
超时重传是指发送方在发送某一个数据帧以后就开始一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止。
自动重传请求(Auto Repeat reQuest,ARQ),通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道所带来差错的方法之一。
3.什么是滑动窗口机制?传统自动重传请求分为三种,即停等式(Stop-and-Wait)ARQ、后退N帧(Go-Back-N)ARQ以及选择性重传(SelectiveRepeat)ARQ。
后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大,帧在线路上可以连续地流动,因此又称为连续ARQ协议。
滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。 4.可靠传输、流量控制、滑动窗口之间的关系
二、传输层的流量控制TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制(Flow Control)
接收窗口和拥塞窗口在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口rwnd,即调整TCP报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率。同时,发送方根据其对当前网络拥塞程序的估计而确定的窗口值,这称为拥塞窗口cwnd,其大小与网络的带宽和时延密切相关。 传输层和数据链路层的流量控制的区别
发送窗口动态变化窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。图中窗口大小为4个报文段,也就是400B。
发送前四个段的时候, 不需要等待任何ACK, 直接发送。
收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推。
操作系统内核为了维护这个滑动窗口, 需要开辟发送缓冲区来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉。
窗口越大, 则网络的吞吐率就越高。
虽然TCP有滑动窗口 能够高效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题。
因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. **在不清楚当前网络状态下, 贸然发送大量的数据,**是很有可能引起雪上加霜的。
拥塞控制,是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。
慢启动(慢开始)和拥塞避免拥塞控制和流量控制的区别:
拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
流量控制往往是指点对点的通信量的控制,即接收端控制发送端,它所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。
因此TCP引入 慢启动机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据。
少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞。
当TCP通信开始后, 网络吞吐量会逐渐上升,随着网络发生拥堵,吞吐量会立刻下降。
这种拥塞窗口的大小一旦到达网络拥塞的情况时,拥塞窗口的大小会直接一下子变为慢启动时的阈值,即1个MSS,但是这种情况其实是不科学的,因为我一次丢包有可能是正常的,这种正常的情况的发生有可能是网络闪断了,当网络闪断的时候,拥塞串口的大小就会被置为1,然后再慢启动,再进行拥塞控制,针对这种情况,现在的TCP版本需要一种快恢复的机制。
快恢复算法的原理如下:
四、延时应答/稍带应答 延时应答发送端收到连续三个冗余ACK (即重复确认)时,执行“乘法减小”算法,把慢开始门限ssthresh 设置为出现拥塞时发送方cwnd的一半。
与慢开始(慢开始算法将拥塞窗口cwnd设置为1)的不同之处是,它把cwnd的值设置为慢开始门限ssthresh改变后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。 由于跳过了cwnd从1起始的慢开始过程,所以被称为快恢复。
有确认应答机制以保证数据的可靠传输。但是是不是接受方接受到数据就立即返回ACK应答呢?
接收数据的主机如果每次都立刻回复确认应答的话,这时候的缓冲区中接收区的数据还没能够处理,缓存区的剩余大小就是窗口大小,可能会返回一个较小的窗口。那是因为刚接收完数据,缓冲区已满。
当某个接收端收到这个小窗口的通知以后,会以它为上限发送数据,从而又降低了网络的利用率(这其实是窗口控制特有的问题,专门术语叫做糊涂窗口综合征)。
为此,引入了一个方法,那就是收到数据以后并不立即返回确认应答,而是延迟一段时间的机制。
等待的时间
每个操作系统中设置的等待时间是不一样的。(200ms)
是不是所有的包都可以延时应答?
捎带应答1.数量限制:每隔两个包就应答一次
2.时间限制:超过最大延时时间就应答一次(200ms)
在延时应答的基础上,我们发现,接受方和发送方都是“一发一收”,所以,我们在发送数据的时候,我们把ACK搭顺风车的方式发送给对方了。
两机制的联系延时应答机制
接收方接收到了数据,发消息给发送方通知更改窗口大小,需等待一段时间。这段时间内如果应用层将数据从缓冲区接收走,那么接收方在恢复确认时,就可以通知发送方更大的窗口大小。稍带应答机制
运用于双方都想给对方发送数据的场景,快速的进行交互,就将ack放到PSH数据包中携带给对方。



