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

本文详细介绍了数据链路层的基本数据链路协议,包括无限制的单工协议(协议1、2、3)以及面对错误信道的肯定确认重传(PAR)策略。接着探讨了滑动窗口协议的工作原理,分析了不同情况下的发送窗口滑动机制,并讨论了如何提高信道利用率和确定合适的窗口大小(W)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

假设以下几点:

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

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

在这里插入图片描述
在这里插入图片描述

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

  • 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)

协议一做了这样的假设

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

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

发送方
在这里插入图片描述
发送方的循环里面一直等待网络层的数据,接收到后发送给物理层。

接收方
在这里插入图片描述
接收方循环里面等待事件的到来,然后从物理层获取数据,然后发送给网络层。

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

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

对于协议1,接收方可能被大量的数据所淹没,所以协议2就要解决这个问题。
解决方案就是:收方发送一个哑帧,发送方收到哑帧,表明收方允许接收数据,此时再次发送下一帧数据。
这实际是一个半双工协议
在这里插入图片描述
发送方
在这里插入图片描述
我们可以看到加上了一个wait_for_event,此作用就是为了等待哑帧。

接收方
在这里插入图片描述
接收方在接收到后,向对方发送了一个哑帧。

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

协议三种,信道不再是不发生错误。
对于错误帧的情况,协议3的解决方法如下。
当发送方发送的时候,开启一个定时器,当接收一个正确帧然后向发送方发一个确认信号,定时器解除。
在这里插入图片描述
当定时器超期会使发送方重传此帧。
这样也会引来一个新问题:定时器不恰当,确认帧还没到,定时器超期
对于这个问题的解决方法是:给每一帧独一无二的序号
同时这个序号还可以用来对帧的重排重组。

5.3.1 肯定确认重传(PAR)

刚才说的解决错误信道的机制叫肯定确认重传。
在这里插入图片描述
发送方
在这里插入图片描述
发送方添加的部分就是启动定时器和拆除定时器。

接收方
在这里插入图片描述
接收方也添加了两句,其作用是在接受到数据后发送一个确认帧。

5.4 提高效率

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

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

六、滑动窗口协议

两个窗口
发送窗口:对应着已经发送但还未确认的帧的序号。
接收窗口对应着期望接收的帧的序号。
在这里插入图片描述

6.1 举例

例如 窗口大小为1

如上图 上面为发送方,下面是接收方。
第一次 接收方期望接收0号帧
在这里插入图片描述
然后发送方的窗口里面存储这还没确定的帧。 在这里插入图片描述
然后接收方发送一个确定帧,窗口滑动,期望得到1号帧
在这里插入图片描述
然后发送方收到确定帧,窗口滑动
在这里插入图片描述

6.2 滑动窗口的条件

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

如下图,为此时收发已经不分界限了。
在这里插入图片描述
在这里插入图片描述
下图为w=1的发送接收图解
在这里插入图片描述

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 面临的新问题

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值