提示:节物风光不相待。桑田碧海须臾改
前言
这一章主要学习数据链路层的功能和应用,功能中最主要的也是最重要的就是封装成帧和透明传输,封装成帧就是帮我过滤一下物理层,这里就是将物理层的几个bit封装成帧,帧就是数据链路层的传输单位或者说是传输单元,透明传输他想表达的不管我们分装好的帧是怎么样的一个组合,我们都能把他顺利的传输过去,就是链路层好像看不到他所传输的bit序列,我们在链路层传输的时候可能有一定的差错,差错主要是由于噪声引起的,位错就是bit发生了错误了,也就是1,0 发生错误,帧错误也就是帧发生丢失,乱序等,流量控制其实就是在控制发送方的速度,流量控制中我们会学习几个协议,这几个协议就是对流量控制的保证,可靠传输与其说是链路层的功能,倒不如说是链路层的特点,为了实现流量控制和可靠传输,我们引入了一个滑动窗口机制,流量控制也是为了满足差错控制,应用主要是学习两种链路以及链路层设备,介质访问控制就是说我要给你发送一个信息,如何避免别人发送的信息和我发送的信息发生碰撞,链路层设备主要学习的是交换机,网桥
3.1.1 数据链路层功能
数据链路层的主要功能就是将网络层交给他的数据报安全的无差错的交给相邻结点,就像是一个搬运工的角色,
数据链路层功能概述
举一个例子,假如有一个公司的boss网络层,他有一个小蜜数据链路层,网络层交给数据链路层五份文件,让他交给B公司的boss网络层,小秘就将五份文件交给了一个傻子物理层,但是她也知道物理层是一个傻子,所以交给物理层之前要先进行编号,丢失也好寻找,
物理层很傻,数据链路层需要未雨绸缪,进行一定的差错控制,相当于给网络层提供了一种无差错的服务,使得网络层感觉不会发生什么错误,数据链路层干的很好,为了实现这种无差错的功能,无确定无连接服务通常用于实时通信或者误码率比较低的一个通信信道,也就是源主机发送一个信息的时候,不用事先和目的主机连接,目的主机收到数据帧的时候也不用返回确认,若是帧丢失,数据链路层也不负责重发,而是交给上一层处理,这种无确认无连接是为了实时通信,为了更快,这种就需要传输层来解决信息出错的问题,有确认无连接服务,不用事先确认连接,但是目的主机收到数据帧的时候,要发回一个确认,若是源主机在规定时间内没有收到一个确认,就会把没有收到确认的帧重新发送一次,这种适合误码率较高的通信,比如无线通信,有确认面向连接就是需要先建立连接,然后发送数据帧之后需要目的主机发回一个确认信息,发送端只有收到一个确认帧之后才能发送下一个,要注意有连接的一定有确认。
为网络层提供服务
无确认的无连接服务
特点:源机器发送数据帧时不需先建立链路连接,目的机器收到数据帧时不需发回确认,对丢失的帧,数据链路层不负责重发而交给上层处理
使用范围:适用于实时通信或误码率较低的通信信道 以太网
有确认的无连接服务
特点:源机器发送数据帧时不需先建立链路连接,但目的机器收到数据 时必须发回确认,源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。
使用范围:适用于误码率较高的通信信道无线通信 无线通信
有确认的面向连接服务
特点:帧传输过程分为三个阶段:建立数据链路、传输帧、释放数据链路
目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧
使用范围:适用于通信要求(可靠性、实时性 ) 较高的场合
注意有连接的一定有确定,不存在无确定的面向连接的服务
链路管理
概述:数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于面向连接的服务
实现过程:首先确认对方已处于就绪状态,交换一些必要的信息以对帧序号初始化,建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接
帧定界,帧同步和透明传输
概述:两个工作站之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送
帧定界:将一段数据的前后分别添加首部和尾部身就构成了帧。首部和尾部中含有很多控制信息,其作用是确定帧的界限
帧同步:接收方应能从接收到的二进制比特流中区分出帧的起始与终止
透明传输:采取有效的措施解决误认为”传输结束“而丢弃后面的数据的问题
流量控制
概述:收发双方各自的工作速率和缓存空间的差异,出现发送方的发送能力大于接收方的接收能力的现象,如不对其进行流量控制就会导致数据丢失
实现:通过控制发送方的发送速度,从而实现流量控制
差错控制
使发送方确定接收方是否正确收到由其发送的数据的方法1、位错:数据中的某些位出现错误,2、帧错:帧的丢失、重复或失序等错误
解决方法解决位错:CRC循环余码,解决帧错: 自动重传请求(ARQ )
3.2.1 封装成帧和透明传输
封装成帧
封装成帧就是将网络层的ip数据报加头加尾形成一个帧,ip数据报也就成为了帧的数据部分,发送的时候就是从帧首部开始发送的,直到发送到帧尾部为止,组帧就是在发送方完成的事情,帧同步就是接收端识别帧的开始和结束,显然为了提高帧的传输效率,应当帧的数据部分尽可能的大于首部和尾部,但是也不能无限大,帧的最大传输单元叫做MTU,根据不同的协议它们的MTU也不相同,
透明传输
下面这句话就是若是某些达不到透明传输就使用一些手段来达到透明传输,透明传输的意思简单来说不会管它传输的是什么,无论是什么都将它原封不动的交给网络层来进行处理,
组帧的四种方式
为了使接收方能正确地接收并检查所传输的赖,发送方必须依据一定的规则把网络层递交的分组封装成帧
解决问题:帧定界,帧同步,透明传输等。
字符计数法
对于每一个帧,它的第一个都是规定了字节数,这样他就可以区分出每一个帧,但是这样就会有一个问题若是第一个帧的第一个字节发生错误,则后面帧的读取就会发生错误,
字符填充法
SOH就是指帧首部第一个标志的开始的字节,EOT就是帧尾部的结束字节,看到不同的bit组合来观察是帧开始还是结束,键盘上每一个键字都对应一个ASCII码,键盘上的ASCII和这8bit是不会有重复的,所以无论从键盘上敲击什么都可以放在帧的数据部分,而不会认为是一个EOT,但是当传送的帧是非ASCII的时候 则可能其中的0 1 组合就有与EOT相同的bit组合,从而把后面的丢弃,导致帧传输错误,也就是说通过一种方式(也就是添加一个转义字符DLE)当接收方当看到和EOT同样组合的时候也不会认为是一个EOT而是一个数据照常接收,直到遇到帧结束符才会停止接收,
字符填充就是在这些控制信息前加上一个转义字符,转义字符其实也是一个8位0 1bit的组合,就是告诉接收端你不用管后面是什么,你只需要正常接收就可以了,同样的SOH之前也加上一个转义字符,遇到转义字节同样的需要加一个转义字节,,直到遇到真正的结束EOT,将原始数据进行一个字节填充就可以放在链路上进行传输了,接收端再将收到的数据的ESC拿掉便可,
零比特填充法
主要和字节填充法的区别是首部和尾部,这里的首部和尾部的标识符是一样的,若是数据部分出现了和首部尾部同样的bit组合,我们需要只要遇到五个1 就往后面填一个零,接收端收到一个字段,首先要找到首部和尾部,来确定边界,然后再去扫描其中的数据部分,若是有5个1就把后面的0 删除,
零bit填充法很容易使用硬件来实现,性能优于字符填充法
违规编码法
使用条件
在物理层进行比特编码时,通常采用违规编码法
违规编码法只适用于采用元余编码的特殊编码环境
实现方法
正常情况下:曼彻斯特编码中比特“1”编码成“高-低”电平,比特“0”编码成“低-高”电平
违规编码:曼彻斯特编码中比特“1”编码成“高-高”电平,比特“0”码成“低-低”电平
具体事例 局域网IEEE 802标准
借用这些违规编码序列来定界帧的起始和终止
3.3.1 差错控制(检错编码)
对于不同链路可以使用不同的可靠传输机制的,
对于链路层的差错控制,我们是在任何一个节点的链路层都可以实现的,每一个结点和他下一个结点就构成了发送方和接收方之间的关系,只要这个关系一成立,接收方就应该对发送方发来的数据进行一个差错的检测,甚至是纠正,检错编码中我们主要学习两种奇偶校验码和循环冗余码CRC,现在普遍使用的是CRC,
奇偶校验码
若是同时有两个bit发生错误则不能检错
n-1位数据和1位校验位组成,校验位用于调节发送信息中的1的个数是偶数还是奇数
CRC循环冗余码
将要发送的数据分组,加上一个冗余码构成一个数据链路层的传输单元帧再进行发送,但是R位的冗余码是如何确认的呢,这里就需要双方商定一个除数,位数是r+1 位的,除数是题目给的,然后来求R位的冗余数据,首先我们要在发送的d位数据后面加上r位的0,然后除以生成多项式,这个除法是模二的除法,模二就是指加法不进位,减法不退位等同于异或,同零异一的运算,得到一个商和一个余数,这个余数就是r位的fcs,将这个填到r位0上面,然后再把这样一个帧发送到链路上面,接收方再除生成多项式,看余数是否为零然后用1101 0110 11 0000来除10011 这里是异或,同零异一,第一位若是0 则不需要写,
当不够减的时候就是余数了,此时将其放入刚才添加的尾部便可。
发送方某些数据被丢弃了,没有对这些帧进行处理,因此并不是发送端发送什么,接收端就收到什么,因此还不是可靠传输。
带r个校验位的多项式编码可以检测到所有长度小于或等于r的突发性错误
3.3.2 差错控制(纠错编码)
海明码
海明码和之前学的类似都是需要加上一些冗余码,奇偶校验码是在最低位加上一位或者几位,但是海明码这里需要按照一定的规则在数据位上安插校验码,接下来确定好位置即可插入校验码,所以也就需要求出校验码的值,还有一个问题就是接收方如何根据海明码来进行纠错,
海明距离
是取任意两个编码码距的最小值,若是遇到两个编码之间的码距是一,那么这个编码系统码距自然也就是1 了,若是码距是一的话,是检测不出来错误的,更不要说去纠正,若是码距为2,则若是有一位发生错误使得编码系统码距变成1了,自然也就能发现错误了,但是却不能纠错,所以若是需要检错d位bit的话,码距需要d+1 ,若是需要纠错d位的话需要的码距是2d+1,
1.确定校验码位数r
将m等于4带入,右边也就是最小是5,所以r最小是从3开始,这里求r使用的就是一个一个试,来看那个合适
2.确定校验码和数据的位置
3.求出校验码的值
海明码会采用一个通配符的形式,如这里的100 写成1**。也就是说四号校验码能管所有1**的数据位的,因此也就是相当于根据不同的校验位来进行分组,采用偶校验就是希望出现偶数个1,
检错并纠错
方法一
首先使用三个圈,分别标上1,2,4 然后三个圈中两个两个的交集来说相加,也就是3,5,6, 然后最后一个填上7,然后我们发现4 号与1号发生错误了,所以也就是错误发生在5,7 里面。但是2号并没有发生错误,所以错误位也就发生在5号
方法二
脑图时刻
3.4.1流量控制与可靠传输机制
数据链路层的流量控制
窗口公告就是告诉发送方此时还有的缓冲区还剩多少,控制一下你的速度不要发太多,
流量控制方法
停止等待流量控制
停止等待协议也可以看作是一个特殊的选择重传协议,不过是滑动窗口的大小都是1,在链路层的滑动窗口在发送过程中是固定的,传输层的窗口是不固定的,
滑动窗口流量控制
基本原理
发送方都维持一组连续的允许发送的帧的序号,称为发送窗口,接收方也维持一组连续的允许接收帧的序号,称为接收窗口
发送窗口用来对发送方进行流量控制
发送窗口的大小代表在还未收到对方确认信息的情况下发送方最多还可以发送多少个数据帧
接收窗口是为了控制可以接收那些数据帧和不可以接收那些帧
帧的序号落入接收窗口之内,将数据帧收下帧的序号落在接收窗口之外,则将其丢弃
机制特点
只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口才有可能(只有发送方收到确认帧之后一定)向前滑动
接收窗口的大小为1时,可保证帧的有序接收
数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的
可靠传输机制
通常使用确认和超时重传两种机制
基本概念
确认帧:是一种无数据的控制帧,这种控制帧使得接收方知道那些内容被正确接收
捎带待认:为了提高传输效率,将确认帧捎带在一个回复帧中
超时重传: 发送方在发送某个数据帧随后就开启一个计时器,一定时问内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止
自动重传请求 : 接收方请求发送方重传出错的的数据帧来恢复出错的帧是通信中用于处理信道所带来差错的方法
停止-等待( Stopand-Wait ) ARQ
后造N 顿( Go-Back-N) ARQ
选择性重传 ( Selective Repeat])ARQ
滑动窗口技术与请求重发技术的结合
滑动串口和停止等待解决流量控制的问题,因为若是接收方一直没有收到一个确认帧,发送窗口就一直圈在哪里,就相当于变相的控制了发送速率,可靠传输意思是发送方若是超时还是没有收到一个确认帧,则发送方重传帧,
可靠传输机制
文章来源:https://www.toymoban.com/news/detail-475752.html
脑图时刻
文章来源地址https://www.toymoban.com/news/detail-475752.html
到了这里,关于计算机网络第三章——数据链路层(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!