计算机网络学习笔记(3.数据链路层 4.网络层)

第三章 数据链路层

数据链路层功能概述

概述

  • 考试重点
  • 功能和应用
  • 流量控制非常重要

在这里插入图片描述
数据链路层研究思想

  • 数据的传输是不断的封装,解封装
  • 我们在研究结点之间的同层之间通信时,可以理解为数据链路层直接对数据链路层的通信

在这里插入图片描述
数据链路层基本概念

  • 链路:强调物理通道
  • 数据链路:强调逻辑通道,硬件和软件控制着数据的传输协议
  • 帧:链路层的协议数据单元
  • 数据链路层就是负责将上层网络层的数据,安全无误的传输给相邻结点的数据链路层

在这里插入图片描述
数据链路层功能概述

  • 基于物理层的服务,对网络层提供服务
  • 可靠的传输,加强物理层的传输比特的功能
  • 物理层可能出差错,数据链路层可以改造成逻辑上无差错,向上对网络层表现为无差错

在这里插入图片描述
功能

  • 确认指的是确认机制,连接服务指的是建立连接,如果建立连接一定有确认机制
  • 链路管理功能面向连接服务

在这里插入图片描述

封装成帧&透明传输

在这里插入图片描述
封装成帧

  • 封装成帧:数据报的首尾添加帧定界符
  • 首尾包含了很多的控制信息,帧定界符是其中之一,此外还有差错控制信息,流量控制信息,物理地址信息等
  • 从帧首部开始接受到帧尾部,接收方可以区分出帧的起始和终止
  • 数据链路层的帧长,我们应该尽可能让数据部分占比更大,但是链路层协议规定了数据部分的上限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发送方必须响应的三件事

  • 发送方一直在盯着窗口内
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值