数据链路层(3) 流量控制

摘要:
传输层的流量控制方法是接收方通过滑动窗口告诉发送方。停止等待协议停止等待协议会停止发送它发送的每一帧,并向左侧的发送方回复确认帧。在传输过程中,发送方的滑动窗口和接收方的接收窗口的大小是固定的。(1) 当发送方在停止等待协议无错误时向接收方发送数据帧时,它将向发送方回复0帧的ACK0确认帧。

一、流量控制

  当AB两台设备在发送数据,如果A设备有较高的发送速度,而B设备只有较低的接收速度,那么就会造成不匹配,容易造成传输错误,因此就需要流量控制。这种情况一般是由于B设备的缓冲区溢出而造成的。

  流量控制不止是链路层具备的功能,传输层也具备相应的功能。下面是链路层流量控制与传输层流量控制的区别:

  (1)数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的

  (2)数据链路层流量控制的手段是接收方收不下就不回复确认帧。传输层的流量控制手段是接收端通过滑动窗口告诉发送方

二、流量控制的方法

  数据链路层的流量控制方法主要是停止等待协议和滑动窗口协议,滑动窗口协议还包括后退N帧协议GBN和选择重协议SR

  

  停止-等待协议

  停止等待协议就是每发送完一个帧就停止发送,等待对方的确认帧,在收到确认帧后再发送下一个帧。下图实例:

    数据链路层(3) 流量控制第1张

  通过实例可以看到,当左边的发送端需要向右边的接收端发送数据帧M1,在右边的接收端在收到M1数据帧后,会向左边的发送端回复一个确认帧,当左边的发送端收到确认帧后,才开始发送M2数据帧,往复这样的过程来完成数据帧的发送,可以看就这种发送的方式是比较的低效的。

  

  三种流量控制协议滑动窗口的大小对比

  停止-等待协议  发送窗口大小 = 1,接收窗口大小 = 1;

  后退N帧协议GBN  发送窗口大小 > 1,接收窗口大小 =1;

  选择重传协议SR    发送窗口大小 > 1,接收窗口大小 >1;

  注:在链路层的滑动窗口控制协议中,在传输过程发送方滑动窗口的大小与接收方接收窗口的大小是固定值。

  流量控制总结

  (1)流量控制:控制发送速率,使接收方有足够的缓冲区来接收每一个帧。

  (2)滑动窗口就是用于流量控制的具体手段。

  (3)滑动窗口还可以解决可靠传输问题,因为它可以和自动重传功能搭配使用。

三、停止-等待协议

  停止-等待协议就是每发送完一个帧就停止发送,等待对方的确认帧,在收到确认帧后再发送下一个帧。

  停止-等待协议有两种应用情况分别是无差错的和有差错的

  (1)停止-等待协议无差错的情况

    数据链路层(3) 流量控制第2张

    当发送方向接收方发送数据帧,发送方发送0帧到接收方,接收方收到0帧后,会向发送方回复0帧的确认帧ACK 0,发送方收到回复的确认帧ACK 0后,然后再向接收方发送1帧,发送双方不断的进行发送和确认的操作而传输数据。

    

  (2)停止-等待协议有差错的情况

    1)发送方帧丢失

    数据链路层(3) 流量控制第3张

    当发送方向接收方发送数据帧,发送的0帧发送方已经收到,接着发送方向接收方发送1帧,但是数据1帧因传输问题丢失,所以接收方也就不能回复确认帧,发送方在没有收到确认帧的情况下,它也不会无限期的等待,而是发送方设置有超时计时器,当超时计时器超时,发送方会再次发送1帧,这次接收方收到了1帧,并向发送方回复ACK 1 帧,接收方收到确认帧传输就结束了。

  注:(1)超时计时器设置的重传时间应当比帧传输的平均RTT更长一些

     (2)发送方发完一个帧后,必须保留该帧的副本,如果没有收到回复帧,则立刻重传该帧。

    

    2)接收方确认帧丢失

    数据链路层(3) 流量控制第4张

    当发送方向接收方发送数据帧,接收方已收到发送方的帧,并向发送方发确认帧,但是确认帧在传输过程中丢失,发送方没有收到,此时接收方也是通过超传计时器计时,如果在规定的时间内没有收到确认帧,那么发送方则重新发送该帧,接收方收到帧并丢弃,则重发确认帧给发送方。

    注:通过上面的实例可以看到,停止-等待协议的信道利用率比较低,只是解决了可靠传输的问题。

    

四、后退N帧协议GBN  

  在讲述后退N帧协议GBN之前,我们先来看停止-等待协议,停止-等待协议就是每发送完一个帧就停止发送,等待对方的确认帧,在收到确认帧后再发送下一个帧。这样就会造成发送的效率非常的低,为了解决这个发送效率问题,就有了退N帧协议GBN。

  为了解决发送效率的问题,后退N帧协议GBN改变了滑动窗口的数量。

    数据链路层(3) 流量控制第5张

  现在我们通过实例来看看,后退N帧协议对滑动窗口做的改变,首先当发送方要发送数据时,它先准备6个滑动窗口,就是发送方蓝色的窗口,对应着0-5个帧。发送方先发出第0帧的数据(然后保留一份第0帧的附本),接着发送第1帧的数据(然后保留一份第1帧的附本),此时,第0帧先到达接收方,接收方收到第0帧后立刻回复第0帧的确认帧ACK 0,当发送方收到ACK 0时,滑动窗口就向后移动一格,现在则对应着1-6个帧,此时第1帧还在链路上传输,这样就提升了发送的效率,当然这只是图例,实现发送的过程是滑动窗口的数据都可以按顺序发送,收到确认帧则滑动窗口向后移动

  

  GBN发送方需要响应的三件事

  (1)上层的调用

  上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送,如果窗口已满,发送方只需将数据返回给上层,提示上层窗口已满,上层等一会再发送。(实际情况是发送方先缓存这些数据,窗口空闲时再发送

  (2)收到了一个ACK帧

  GBN协议中,对n帧的确认采用累积确认的方式,标明接收方已经收到n帧和它之前的全部帧

  (3)超时

  与停止-等待协议一样,如果出现超时,发送方重传所有已发送但未被确认的帧

  

  GBN接收方需要响应的事

  如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK确认帧,并将帧中的数据部分交付给上层。其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK,接收方无需缓存任何失序帧,只需要维护一个信息,就是下一个按序接收的帧序号意思是不是按序收到的帧都会被丢弃,并且不会回复确认帧

  接着我们来看看实例:

  数据链路层(3) 流量控制第6张

  当发送方向接收方发送数据,接收方收到0帧、1帧,并且都回复了确认帧,但是2帧传输过程丢失,虽然接收方收到第3、4、5帧它都会丢弃这些帧,只发送回复ACK 1(意思是只收到了0、1帧,请发送方发送第2帧),此时发送方第2帧设置的计时器超时,重新发送了2、3、4、5帧。

  

  GBN协议总结

  (1)累积确认:就是当接收方向发送方发出第n帧的确认信息,那么接收方就认为第n帧之前的所有帧接收方都已正确接收。

  (2)接收方只按顺序接收帧,不按顺序会被丢弃。接收方有一个计录需要接收帧的序号,如果不是它都不会接收直接丢弃。

  (3)发送方窗口最大为 2n - 1,接收窗口大小为1。

  GBN协议性能分析:因连续发送数据帧而提高了信道利用率(与停止-等待协议比较),但是在重传时把原来已经正确传送的数据帧重传,又降低了效率。

五、选择重传协议SR

   选择重传协议SR就是为解决后退N帧协议GBN数据帧丢失需要重传确认的问题,选择重传协议SR解决问题的办法是设置单个确认,同时加大接收窗口,设置接收缓存(缓存乱序帧)。以下是选择重传协议SR的图例:

    数据链路层(3) 流量控制第7张

  

  SR发送方需要响应的三件事

  (1)上层的调用

  上层要发送数据时,SR发送方先检查发送窗口可用于该帧的序号,如果序号位地发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回上层之后再传输。

  (2)收到了一个ACK帧

  如果收到ACK,加入该帧序号在窗口内,则SR发送方将被确认的帧标记为已接收,如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧,如果窗口移动到有序号并未发送的帧,则发送帧。

  (3)超时

  每个帧都有自己的定时器,当某帧确认超时,则只重传某帧。

  

  SR接收方需要响应的事

  来者不拒(窗口内的帧)

  SR接收方将确认一个正确接收的帧而不管其是否按序,失序的帧将被缓存,并反回给发送方一个该帧的确认帧,当序号最小的帧被接收,这时可以将一批按序帧交付给上层,则向前移动滑动窗口。图例:

    数据链路层(3) 流量控制第8张

  

  SR协议总结

  (1)对数据帧逐一确认,收一个确认一个。

  (2)只重传出错帧。

  (3)接收方有缓存。

  (4)滑动窗口大小 = WRmax = 2 (n - 1 ) 

免责声明:文章转载自《数据链路层(3) 流量控制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇初次体验Ubuntu之二tp配置+路由+基本操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

socket网络编程(一)——初识socket

出现一项技术,首先我们弄懂一下,为什么要出现。那么为什么要出现socket这玩意呢?可以很简单的用一句话来概括: 为了实现两台计算机的通信   1、socket诞生的原因 两台装有操作系统的机子要想实现通信,第一要联网,第二通信双方一定制定某种规则。我们平时最为常见的http请求也是一种通信协议,只不过它是属于应用层的。http协议将要发送的数据封装后,...

Wireshark图解教程

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样,Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码!!  wireshark的原名是Ethereal,新名字是2006年起用的。当时...

Beaglebone Back学习六(Can总线测试)

Can总线测试 1 Can总线   控制器局域网 (Controller Area Network, 简称 CAN 或 CANbus)是一种通信协议,其特点是允许网络上的设备直接互相通信,网络上不需要主机(Host)控制通信。是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898)。CAN总线原理是通过CAN总线、...

蓝牙协议栈详解

1.概述: 蓝牙协议规范遵循开放系统互连参考模型(OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次。 SIG所定义的蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现互操作。互操作的远端设备需要使用相同的协议栈,不同的应用需要不同的协议栈。但是,所有的应用都要使用蓝牙技术规范中的数据链路层和物理层。 2.完整的蓝牙协议栈 完整的蓝牙协议栈如图1所...

ActiveMQ教程(简介与安装)

  ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。   一、ActiveMq的特性:   ⒈ 多种语言和协议编写客户端。语言: Java,...

通信协议——Http、TCP、UDP

CP   HTTP   UDP:  都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 TCP   HTTP   UDP三者的关系: TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UD...