第三章 数据链路层
数据链路层功能概述
概述
- 考试重点
- 功能和应用
- 流量控制非常重要
数据链路层研究思想
- 数据的传输是不断的封装,解封装
- 我们在研究结点之间的同层之间通信时,可以理解为数据链路层直接对数据链路层的通信
数据链路层基本概念
- 链路:强调物理通道
- 数据链路:强调逻辑通道,硬件和软件控制着数据的传输协议
- 帧:链路层的协议数据单元
- 数据链路层就是负责将上层网络层的数据,安全无误的传输给相邻结点的数据链路层
数据链路层功能概述
- 基于物理层的服务,对网络层提供服务
- 可靠的传输,加强物理层的传输比特的功能
- 物理层可能出差错,数据链路层可以改造成逻辑上无差错,向上对网络层表现为无差错
功能
- 确认指的是确认机制,连接服务指的是建立连接,如果建立连接一定有确认机制
- 链路管理功能面向连接服务
封装成帧&透明传输
封装成帧
- 封装成帧:数据报的首尾添加帧定界符
- 首尾包含了很多的控制信息,帧定界符是其中之一,此外还有差错控制信息,流量控制信息,物理地址信息等
- 从帧首部开始接受到帧尾部,接收方可以区分出帧的起始和终止
- 数据链路层的帧长,我们应该尽可能让数据部分占比更大,但是链路层协议规定了数据部分的上限MTU,最大传送单元
- 组帧四种方法:字符计数法,字符字节填充法,零比特填充法,违规编码法
透明传输
- 不管数据里有什么,都能传输,即使传输数据里有和帧首尾相同的信息,也不影响
- 如何避免把数据误认为控制信息,需要采取一定的手段
字符计数法
- 简单,但是容易出问题,不常用
- 用第一个字节规定帧内部有多少个字符(包括帧首部自己)或字节
- 问题:一旦帧首的字节标错数了,后续的所有帧都会错乱
字符填充法
- 用特定的字符组合规定这是帧首帧尾,当识别出这样的比特组合之后,就能帧同步
- 如果是文本文件,即键盘输入的字符,都是ascii码,是不会和帧首尾的特定字符冲突的,可以透明传输
- 如果是非ascii码文件,数据种就有可能有比特组合和帧首尾的比特组合撞车,导致接收端错误识别
- 如果数据中出现与帧首尾冲突的情况,采用字符填充法
字符填充法实现
- 在数据中出现冲突的比特组合前面加上字节,表示转义
- 数据中如果有数据与转义字符相同的,也是在前面加上转义字符,
- 接收端在数据中识别到转义字符,就会把转义字符去掉,并正常把后面的字符当做数据接收
- 直到遇到真正的控制信息
零比特填充法
- 允许数据帧中包含任意个数的比特组合
- 帧首尾字节一样,都是01111110
- 如果发送数据时数据报中出现某一字节也是01111110,处理办法口诀5110
- 发送数据时,发现数据中有连续的5个1就在后面加个0,接收端接收时发现有连续5个1,就把后面的0删除
违规编码法
- 比较常用,实现起来比较简单
- 曼彻斯特编码每一个码元中一定会有一次电平跳变
- 我们可以用没有跳变的高高或低低来界定帧的起始和终止,就不会和数据部分有冲突
- 目前比较普遍使用的帧同步法:比特填充和违规编码法
差错控制(检错编码)
差错从何而来
- 全局性差错,局部性差错
- 局部性差错是主要原因,我们通过编码来解决
- 差错:位错,帧错
- 帧错:帧为单位的错误,可以使用帧编号,确认重传机制解决;通信质量好的有限传输链路无需使用确认重传机制;靠上层传输层来解决可靠保证
- 本节课主要讨论位错
数据链路的差错控制
- 发生在任何节点的链路层,每个节点和下一个节点构成了发送方和接收方,就有差错检测和纠错
- 检错编码中的循环冗余码CRC是目前主要的检错机制
- 纠错编码主要使用海明码
- 链路层编码和物理层编码的区别:
- 物理层编码针对单个比特,数据转数字信号,帧同步
- 数据链路层编码解决的是一组比特,通过冗余编码技术,实现一组二进制比特传输是否出现差错
- 冗余码:就是在原始数据中附加冗余位,通过一定的匹配规则,可以使接收端用来判断是否出错
检错编码–奇偶校验码
- 如果发送的是n位的信息元,那么前n-1位是原始数据,最后一位用来控制整体的1是奇数个还是偶数个
- 奇校验就是发送方用最后一位控制整体包含奇数个1,偶校验就是偶数个1,如果接收方发现1的奇偶数不对,就说明出错了
- 局限:如果数据中出现了偶数个1变0或0变1,接收方也无法检测到错误
检错编码–CRC循环冗余码
- 文字不好形容,做几道题就能理解
- 1.已知待传数据是d位,生成多项式(除数)是r+1位
- 生成多项式是题里给定的,可能是直接以数字01的形式,也可能是x的多项式
- 如果是x的多项式,自己给还原成数字的形式,即,补全x的系数,从最高次幂,补到0次幂,有就是1,没有就是0
- 2.在d位的待传数据后面加r个0,用这个整体除以生成多项式,除法采用模二除法,即,同0异1,得到余数就是r位FCS
- 3.把r位FCS填到d的后面,将这个整体的帧发送给接收方
- 4.接收方,把接收的帧,除以r+1位生成多项式,如果没有余数,表示正确接收,有余数表示错误,丢弃
举个栗子
- FCS的生成和接收端CRC检验都是由硬件实现的,处理迅速,不会延误数据传输
CRC循环冗余码 - 缺点:几乎可以保证,接收端数据链路层接受的帧都是没有差错的,因为出错的已经被丢弃了,所以可能还是会丢帧
- 只能说是无比特差错的传输,但不是可靠传输
- 可靠传输是数据链路层发送端发什么,接收端就接收什么
差错控制(纠错编码–海明码)
海明码工作流程
海明距离
- 海明距离(码距)
- 两个合法编码之间的,对应比特取值不同的个数;
- 有效编码集中的任意两个合法编码之间的海明距离的最小值
- 如果编码系统的码距是1,接收方无法检错,因为合法编码变动了一个比特,可能就成了另一个合法编码了
- 如果编码系统的码距是2,接收方可以检错出1个不合法编码,因为合法编码至少变化两个比特才可能成为另一个合法编码;所以接收方发现有1个比特不一样,肯定是不合法
- 如果编码系统的码距是2,接收方可以检测1位不合法,但是无法纠错,因为a合法编码变化1位成为了不合法编码x,b合法编码也可能变化了1位,成为了x,且满足a和b码距为2,因此若对x纠错,并不知道原理是a还是b;比如a是1101,b是1110,x是1111
- 如果码距是3,则可以检测2位比特错,纠正1位比特错;一个合法编码变化了1位,另一个码距为3的合法编码,至少要变化2位,才有可能成为这个错误编码;因此码距为3的时候,出现1位错误,可以对应唯一的原来的合法编码
- 结论:要想能检测d位,码距至少为d+1;要想能纠正d位,码距至少为2d+1;
- 记住公式就好,推导过程不考,考试不会考太深
海明码的工作流程
1.确定校验码位数r
- 数据信息m位,校验码r位
- 校验码有2的r次幂种取值,可以标记2的r次幂种错误情况
- 因此,m+r位的数可能有m+r种错误情况,外加1个全正确的情况,需要2的r次幂>=m+r+1,校验码就可以一一对应所有情况
- 根据不等式,已知m求r,枚举法一个个试即可
- 以要发送的数据为1100为例
2.确定校验码和数据的位置
- 从右向左编号,1到m+r,其中r位校验码的各个比特分别放在2的n次幂的位置上
3.求出校验码的值
- 附加一行二进制数,代表各个位置的编号
- 分组:x4负责编号开头为1的位置,x2负责编号中间为1的位置,x1负责编号结尾为1的;分的各个组包括校验位自身
- 以采用偶校验为例,我们要保证各个组的1的个数为偶数,通过校验位来控制;因此x4=0 x2=0 x1=1
- 得出完整海明码
4.检错并纠错
- 以第5位出错为例,接收方接到数据,开始检错,检错类似于奇偶校验
- 对各个分组检查1的个数是否为偶数(因为是偶校验),发现2号校验位对应的分组有问题
- 如何知道具体是哪一位出的问题?如图,将各个校验位对应的1.2.4放在3个圈中,两两重合相加,中间的是三个相加
- 纠错方法一:不满足校验的取交集,再与符合规则的分组差集,定位到了哪个位置出现的比特错误
- 纠错方法二:此时有各个分组的比特位,为了让各个分组再次满足偶校验,我们再增加一个x,控制各分组的1为偶数个,所以x4=1 x2=0 x1=1,把这个向量转置,横过来,得到101,101的十进制数是5,因此第五位错了;第五位现在是0,改为1就完成了纠正;需要注意,这里的x4 x2 x1不是前面的那个x4 x2 x1,这里x的是后加的
- 多做几道题就熟练了
b站视频提供了另外一种解决套路,可以参考学习
https://www.bilibili.com/video/BV1tL4y1h7Fd?spm_id_from=333.337.search-card.all.click&vd_source=d9e7e582a6a91288aa45784971f4839c
脑图时刻
流量控制与可靠传输机制(一)
数据链路层的流量控制
- 数据链路层的控制是点到点,即相邻节点之间的;传输层的流量控制是端到端,即主机之间的
流量控制的方法
- 停止等待协议可以看做是一个特殊的滑动窗口协议,因为他的窗口是1
- 停止等待协议的效率很低,必须一个等一个
- 如图可知,帧序号有重复,说明帧序号是重复利用的
- 发送窗口可以理解正在发送处理的数据
- 假设接收窗口有一个,当接收到数据回复确认后,接收窗口移动到下一个窗口,
- 发送窗口里的各个帧都可以发出去,接收窗口的各个帧需要都可以接收;发送窗口的帧序号只有接收确认了才可以移动到下一个,接收窗口接收到数据才可以移动到下一个
- 疑问?如果此时发送窗口234接收到确认了,1没有接收到,窗口还会继续滑动么?发送窗口的滑动机制是窗口里全部收到确认才会滑动,还是编号最小的那个接收确认了就会下一个位置滑动?同理接收窗口?
流量控制方法
- 在链路层的发送过程中,滑动窗口,即发送窗口和接收窗口的大小是固定值,不变的
可靠传输,滑动窗口,流量控制三者关系
- 滑动窗口可以解决可靠控制和流量传输,流量控制与可靠传输又相互交织在一起,不必太纠结三者的区别和关系
- 发送方如果到一定时间没有收到确认,会自动重传
脑图时刻
停止等待协议
停止等待协议究竟是哪一层
- 不用纠结
- 早期通信质量不好,链路层就会使用停止等待协议,后退N帧协议,选择重传协议,等
- 现在通信质量好了,可以把这个责任交给传输层实现,速度更快,延迟更小
- 不管在哪个层次,影响的是传输对象;如果在传输层,那么发送的数据就可以成为分组,在链路层,发送的数据就可以成为一个帧;只是对象上命名不同,本质上一样
停止等待协议
- 因为链路上,除了帧内会发生差错,即比特出错,底层信道还会出现丢包问题;所谓数据包在链路层就是帧,在传输层就是报文段,在网络层就是IP数据报或分组
- 研究停止等待协议(停等协议)的前提,为了便于研究,仅考虑一方发送数据,一方接收数据;也不要纠结数据在哪个层次,了解机制即可
- 停止等待就是每发送一个,等待对方确认后才发送下一个
- 停等协议应用情况:无差错,有差错
停等协议–无差错情况
- 发送,确认,发送,确认。。。
- 需要注意,帧的编号可以重复利用的
- 1bit用来编号就可以
停等协议–有差错情况1
- 上面是理想情况,实际会出现丢包,或者包出错
- 发送方发出帧以后,没有收到确认帧,超过了超时时间,就会重复发送帧
- RTT是往返传播试验,从发送方发送结束开始,到接到确认帧时的时间;计时器设置的超时时间比平均RTT略长一些
- 这个机制是自动的,所以叫自动重传机制
- 发送方发完帧之后,要保留副本的,以备重传
- 数据帧和确认帧一定要编号,用来解决帧的丢失,重复等问题
- 帧出错也类似,接收方检测帧出错也不会返回确认帧,然后发送方再进行超时重传
停等协议–有差错情况2
- ACK丢失,ACK就是确认帧,
停等协议–有差错情况3
- ACK迟到
- 发送方如果收到重复的确认帧就会正常丢弃,正常按自己的顺序继续发送数据帧或者等待确认帧
- 接收方如果收到重复的数据帧就会正常丢弃,并且再重传一次这个重复的确认帧
停等协议性能分析
- 信道利用率太低
- 图中的宽条表示,发送方发出数据帧也是有时间的,同理接收确认帧也是有时间的
- Ta相对比价小,如果题中没给,就不加上
信道利用率
脑图时刻
后退N帧协议(GBN)
- 停等协议弊端
- 等待时间过长,信道利用率低
- 可以在收到确认之前多发些数据帧
- 流水线技术,需要满足一定条件
后退N帧协议中的滑动窗口
- 停等协议,发送窗口1,接收窗口1;后退N帧协议,发送窗口>1,接收窗口1;选择重传协议,发送窗口>1,接收窗口>1
- 图中表示数据帧发出之后,还留有副本,发完0,继续发1,
- 接收方接收到确认0,返回确认帧0,窗口移动一位,接收方接收确认帧0,也往前移动一位
- 接收窗口可以在接收一组连续的允许接收的帧以后,只返回最大的帧序号,窗口也移动到这个最大的帧序号的下一位;
- 发送方接到这个帧需要,就知道前面的都已经确认了,窗口直接移动多位
GBN发送方必须响应的三件事
- 上层调用
- 确认机制:累计确认是重要考点,接收方无需每一个数据帧都确认,可以隔一会返回一个
- 超时事件,后退N帧机制:接收方必须按顺序接收,如果某一帧没有收到,那么后续的也全部丢弃,一直等待期待的下一帧;发送方发现某一帧迟迟得不到确认,直到超时,就会回退到这一帧开始重新往后发送这些没有确认的数据帧
GBN接收方要做的事
- 除了正确情况,其余情况都是,只发送最近的数据帧的ACK,而且只需要维护一个信息,就是期待的下一个帧序号信息
运行中的GBN协议
滑动窗口长度
- 帧的编号如果有n比特,那么最多可以表示2的n次方个数,编号范围0-2的n方
- 发送方的窗口最小为1,最大只能是2的n次方-1,如果超过2的n次方,窗口里就会编号重复;
- 如果窗口大小等于2的n次方,当发送方发送了窗口的全部的数据帧都丢失了,超时之后,再次重新发送,接收方不知道这是哪一个数据帧
GBN协议重点总结
- 累积确认,偶尔捎带确认是指,双方通信,接收方其实也是发送方,可以把确认信息偶尔放在发送的数据中
练习题1
练习题2
- 信道带宽是100Mb/s不代表甲的平均传输速率就是100,因为有等待确认的时间
- 甲发送窗口的全部数据需要80ms,甲从发送第一个数据帧到收到第一个确认帧需要100.08ms
- 甲只有收到第一个确认帧,才会继续发送数据,后面就是不停地重复循环
- 因此,相当于在100.08ms的时间内,甲发送了100010008bit的数据
GBN协议性能分析
- 相比停等协议提升了信道利用率
- 但是因为有回退N帧的机制,相比于选择重传协议还是传送效率低
脑图时刻
选择重传协议(SR)
GBN协议的弊端
- 累积确认
选择重传协议中的滑动窗口
SR发送方必须响应的三件事
- 发送方一直在盯着窗口内