计算机网络——数据链路层(二)

文章目录

  • 计算机网络——数据链路层(二)
    • 五、基本数据链路协议1~3
      • 5.1 无限制的单工协议(协议1)
      • 5.2 无限制的单工协议(协议2)
      • 5.3 有错误信道的单工协议(协议3)
        • 5.3.1 肯定确认重传(PAR)
      • 5.4 提高效率
    • 六、滑动窗口协议
      • 6.1 举例
      • 6.2 滑动窗口的条件
      • 6.3 滑动窗口的基本概念
      • 6.4 协议4的滑动窗口基本工作原理
      • 6.5 几种情况下发送窗口滑动机制
        • 6.5.1 正常情况下
        • 6.5.2 异常情况一
        • 6.5.3 异常情况二
      • 6.6 协议4的信道利用率
      • 6.7 提高信道利用率
      • 6.8 确定合适的W
      • 6.9 面临的新问题
  • 计算机网络——数据链路层(三)

计算机网络——数据链路层(二)

五、基本数据链路协议1~3

假设以下几点:

  • 物理层、数据链路层和网络层各自是独立的处理进程
  • 机器A希望向B发送的是一个可靠的、面向连接的长数据流
  • 假设机器不会崩溃
  • 从网络层拿到的是纯数据

协议1~6共同使用的数据类型,调用的函数声明如下

计算机网络——数据链路层(二)_第1张图片
计算机网络——数据链路层(二)_第2张图片

数据链路层、网路层、物理层的数据传送接口定义

  • from_network_layer 从网络层得来的数据
  • to_physical_layer 向物理层发送数据
  • from_physical_layer 从物理层来的数据
  • to_network_layer 向网络层发数据

Wait_for_event:等待某个事件发生

Timer计时器

  • start_timer, stop_timer 重传定时器
  • start_ack_timer, stop_ack_timer 捎带确认定时器

帧结构

typedef struct{
	frame_kind kind;			//帧的类型
	seq_nr seq;					//帧的序列号
	seq_nr ack;					//帧的确认号
	packet info;				//分组、包
 }frame;

5.1 无限制的单工协议(协议1)

协议一做了这样的假设

  • 数据单向传输
  • 收发双方网络层都处于就绪状态
  • 处理时间忽略不计
  • 可用的缓存空间无限大
  • 完美信道,不损坏、不丢帧

这其实是一个“乌托邦”的环境

发送方
计算机网络——数据链路层(二)_第3张图片
发送方的循环里面一直等待网络层的数据,接收到后发送给物理层。

接收方
计算机网络——数据链路层(二)_第4张图片
接收方循环里面等待事件的到来,然后从物理层获取数据,然后发送给网络层。

事实上,真正的工程里面是不会有这么完美的环境的。

5.2 无限制的单工协议(协议2)

对于协议1,接收方可能被大量的数据所淹没,所以协议2就要解决这个问题。
解决方案就是:收方发送一个哑帧,发送方收到哑帧,表明收方允许接收数据,此时再次发送下一帧数据。
这实际是一个半双工协议
计算机网络——数据链路层(二)_第5张图片
发送方
计算机网络——数据链路层(二)_第6张图片
我们可以看到加上了一个wait_for_event,此作用就是为了等待哑帧。

接收方
计算机网络——数据链路层(二)_第7张图片
接收方在接收到后,向对方发送了一个哑帧。

5.3 有错误信道的单工协议(协议3)

协议三种,信道不再是不发生错误。
对于错误帧的情况,协议3的解决方法如下。
当发送方发送的时候,开启一个定时器,当接收一个正确帧然后向发送方发一个确认信号,定时器解除。
计算机网络——数据链路层(二)_第8张图片
当定时器超期会使发送方重传此帧。
这样也会引来一个新问题:定时器不恰当,确认帧还没到,定时器超期
对于这个问题的解决方法是:给每一帧独一无二的序号
同时这个序号还可以用来对帧的重排重组。

5.3.1 肯定确认重传(PAR)

刚才说的解决错误信道的机制叫肯定确认重传。
计算机网络——数据链路层(二)_第9张图片
发送方
计算机网络——数据链路层(二)_第10张图片
发送方添加的部分就是启动定时器和拆除定时器。

接收方
计算机网络——数据链路层(二)_第11张图片
接收方也添加了两句,其作用是在接受到数据后发送一个确认帧。

5.4 提高效率

上面的三个协议都是单工协议,工作效率都是比较低的。
以下列出几点提高效率的方法:

  • 全双工:两方互相发数据,没有明显的界限。
  • 捎带确认:将确认帧添加在自己发送给对方的数据里面。
  • 批发数据:在等待时间发送数据帧。

六、滑动窗口协议

两个窗口
发送窗口:对应着已经发送但还未确认的帧的序号。
接收窗口对应着期望接收的帧的序号。
计算机网络——数据链路层(二)_第12张图片

6.1 举例

例如 窗口大小为1

如上图 上面为发送方,下面是接收方。
第一次 接收方期望接收0号帧
计算机网络——数据链路层(二)_第13张图片
然后发送方的窗口里面存储这还没确定的帧。 计算机网络——数据链路层(二)_第14张图片
然后接收方发送一个确定帧,窗口滑动,期望得到1号帧
计算机网络——数据链路层(二)_第15张图片
然后发送方收到确定帧,窗口滑动
计算机网络——数据链路层(二)_第16张图片

6.2 滑动窗口的条件

  • 接收方收到帧后,首先核对是否为预期帧号,如果是的则接收并frame_expected+1,即滑动窗口。
  • 发送端收到确定帧,核对相应帧号next_frame_to_send,无误后从网络获取新的帧,并执行,next_frame_to_send+1移动窗口,如果不正确,则不移动。

如下图,为此时收发已经不分界限了。
计算机网络——数据链路层(二)_第17张图片
计算机网络——数据链路层(二)_第18张图片
下图为w=1的发送接收图解
计算机网络——数据链路层(二)_第19张图片

6.3 滑动窗口的基本概念

计算机网络——数据链路层(二)_第20张图片

6.4 协议4的滑动窗口基本工作原理

计算机网络——数据链路层(二)_第21张图片
计算机网络——数据链路层(二)_第22张图片

6.5 几种情况下发送窗口滑动机制

6.5.1 正常情况下

顺正顺序正常,按序接收发送。计算机网络——数据链路层(二)_第23张图片

6.5.2 异常情况一

对重复帧的差错控制,此异常主要表现在定时器设置断了,超期数据重传,收方发送收到的消息,然后发方定时器再次超时再次重传,由此往复。
计算机网络——数据链路层(二)_第24张图片

6.5.3 异常情况二

同步开始发送过程的差错控制,此异常双方同时发送数据,这样也会导致重复帧。
计算机网络——数据链路层(二)_第25张图片

6.6 协议4的信道利用率

计算机网络——数据链路层(二)_第26张图片

例如

计算机网络——数据链路层(二)_第27张图片
在这里插入图片描述
计算机网络——数据链路层(二)_第28张图片

6.7 提高信道利用率

计算机网络——数据链路层(二)_第29张图片
计算机网络——数据链路层(二)_第30张图片

6.8 确定合适的W

计算机网络——数据链路层(二)_第31张图片

6.9 面临的新问题

连续发送W个数据帧,其中有1帧出错,但其后续被成功发送。
处理策略:

  • 丢弃错帧及其后续帧 ——协议5
  • 丢弃错帧,缓存后续真确的帧 ——协议6

计算机网络——数据链路层(三)

计算机网络——数据链路层(三)

你可能感兴趣的:(计算机理论与基础,计算机网络)