概述
目录
- 数据链路层的功能
- 为网络层提供服务
- 链路管理
- 帧定界、帧同步与透明传输
- 流量控制
- 差错控制
- 组帧
- 字符计数法
- 字符填充的首尾定界符法
- 零比特填充的首位标志法
- 违规编码法
- 差错控制
- 检错编码
- 奇偶校验码
- 循环冗余码
- 纠错编码
- 数据链路层基本概念:
结点:主机、路由器
链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
帧:链路层的协议数据单元,封装网络层数据报。
- 数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
数据链路层的功能
- 数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
为网络层提供服务
- 对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层通常可为网络层提供如下服务:
服务 | 含义 | 适用 |
---|---|---|
无确认的无连接服务 | 源机器发送数据帧时不需先建立链路连接,目的机器收到数据帧时不需要发回确认。对丢失的帧,数据链路层不负责重发而交给上层处理。 | 适用于实时通信或者误码率较低的通信信道,如以太网 |
有确认的无连接服务 | 源机器发送数据帧时不需先建立链路连接,但目的机器收到数据帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。 | 适用于误码率较高的通信信道,如无线通信 |
有确认的面向连接服务 | 帧传输过程分为三个阶段:建立数据链路、传输帧、释放数据链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧,因而该服务的可靠性最高。 | 适用于通信要求(可靠性、实时性)较高的场合 |
注意:有连接就一定要有确认,即不存在无确认的面向连接的服务。
链路管理
- 数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于面向连接的服务。链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。在多个站点共享同一物理信道的情况下(如在局域网中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。
帧定界、帧同步与透明传输
-
两台主机之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就构成了帧。因此,帧长等于数据部分的长度加上首部和尾部的长度。首部和尾部中含有很多控制信息,它们的一个重要作用是确定帧的界限,即帧定界。
-
帧同步指的是接收方应能从接收到的二进制比特流中区分出帧的起始与终止。为了提高帧的传输效率,应当使帧的数据部分的长度尽可能地大于首部和尾部地长度,但每种数据链路层协议都规定了帧地数据部分地长度上限——最大传送单元(MTU)。
-
如果在数据中恰好出现与帧定界符相同的比特组合(会误认为"传输结束"而丢弃后面的数据),那么就要采取有效的措施解决这个问题,即透明传输。透明传输就是不管所传数据是什么样的比特组合,都应当能在链路上传送。
流量控制
- 由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,如若此时不适当限制发送方的发送速率(即链路上的信息流量),前面来不及接收的帧将会被后面不断发送来的帧"淹没",造成帧的丢失而出错。因此,流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。
- 流量控制并不是数据链路层特有的功能,许多高层协议中也提供此功能,只不过控制的对象不同。对于数据链路层来说,控制的是相邻两结点之间数据链路上的流量;对于运输层而言,控制的则是从源端到目的端之间的流量。
差错控制
- 由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到其发送的数据的方法称为差错控制。通常,这些错误可分为位错和帧错。
- 位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC)方法发现位错,通过自动重传请求(ARQ)方式来重传出错的帧。具体做法是:让发送方将要发送的数据帧附加一定的CRC冗余检错码一并发送,接收方则根据检错码对数据帧进行错误检测,若发现错误则丢弃,发送方超时重传该数据帧。这种差错控制方法称为ARQ法。ARQ法仅需返回很少的控制信息就可有效地确认所发数据帧是否被正确接收。
组帧
- 数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高效率。为了使接收方能正确地接收并检查所传输的帧,发送方必须依据一定的规则把网络层递交的分组封装成帧(称为组帧)。组帧主要解决帧定界、帧同步、透明传输等问题。
- 注意:组帧时既要加首部,又要加尾部。原因是:在网络中信息是以帧为最小单位进行传输的,所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即IP数据报)仅是包含在帧中的数据部分,所以不需要 加尾部来定界。
字符计数法
- 字符计数法是指在帧头部使用一个计数字段来标明帧内字符数。目的结点的数据链路层收到字节计数值时,就知道后面跟随的字节数,从而可以确定帧结束的位置(计数字段提供的字节数包含自身所占用的一个字节)。
- 这种方法最大的问题在于如果计数字段出错,即失去了帧边界划分的依据,那么接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,从而造成灾难性后果。
字符填充的首尾定界符法
- 字符填充法使用特定字符来界定一帧的开始与结束,控制字符SOH放在帧的最前面,表示帧的首部开始,控制字符EOT表示帧的结束。
- 为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可以在特殊字符前面填充一个转义字符(ESC)来加以区分(注意,注意字符是ASCII码中的控制字符,是一个字符,而非"E"“S”"C"三个字符的组合),以实现数据的透明传输。接收方收到转义字符后,就知道其后面紧跟的是数据信息,而不是控制信息。
零比特填充的首位标志法
- 零比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式01111110来标志一帧的开始和结束。为了不使信息位中出现的比特流01111110被误判为帧的首尾标志,发送方的数据链路层在信息位中遇到5个连续的"1"时,将自动在后面插入一个"0";而接收方做该过程的逆过程,每收到5个连续的"1"时,自动删除后面紧跟的"0",以恢复原信息。
- 零比特填充法很容易由硬件来实现,性能优于字符填充法。
违规编码法
- 在物理层进行比特编码时,通常采用违规编码法。例如,曼彻斯特码将数据比特"1"编码成"高-低"电平对,将数据比特"0"编码成"低-高"电平对,而"高-高"电平对和"低-低"电平对在数据比特中是违规的(即没有采用)。可以借用这种违规编码序列来定界帧的起始和终止。局域网IEEE 802标准就采用了这种方法。
- 违规编码法不需要任何填充技术,便能实现数据传输的透明性,但它只适用于采用冗余编码的特殊编码环境。
- 由于字节计数法中计数字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是比特填充法和违规编码法。
差错控制
- 概括来说,传输中的差错都是由于噪声引起的
- 全局性:由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。
解决办法:提高信噪比来减少或避免干扰。(对传感器下手) - 局部性:外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
解决办法:通常利用编码技术来解决。
差
错
{
位
错
【
比
特
位
出
错
,
1
变
成
0
,
0
变
成
1
】
帧
错
{
丢
失
重
复
失
序
差错begin{cases} 位错【比特位出错,1变成0,0变成1】 \ 帧错begin{cases} 丢失 \ 重复 \ 失序 \ end{cases} end{cases}
差错⎩⎪⎪⎪⎨⎪⎪⎪⎧位错【比特位出错,1变成0,0变成1】帧错⎩⎪⎨⎪⎧丢失重复失序
差
错
控
制
{
检
错
编
码
{
奇
偶
校
验
码
循
环
冗
余
码
纠
错
编
码
—
海
明
码
差错控制begin{cases} 检错编码 begin{cases} 奇偶校验码 \ 循环冗余码 \ end{cases} \ 纠错编码—海明码 \ end{cases}
差错控制⎩⎪⎨⎪⎧检错编码{奇偶校验码循环冗余码纠错编码—海明码
检错编码
- 数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错。
- 检错编码都采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到的码字是否仍符合原规则来判断是否出错。
- 常见的检错编码有奇偶校验码和循环冗余码
奇偶校验码
- 奇偶校验码是奇校验码和偶校验码的统称,它由n-1位信息元和1位校验元组成,如果是奇校验码,那么在附加一个校验元以后,码长为n的码字中"1"的个数为奇数;如果是偶校验码,那么在附加一个校验元以后,码长为n的码字中"1"的个数为偶数。
- 它只能检测奇数位的出错情况,但并不知道哪些位出错了,也不能发现偶数位的出错情况。
循环冗余码
- 循环冗余码(CRC),又称为多项式码。CRC的工作方法是在发送端产生一个冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发送端形成循冗余码同样的算法进行校验,如果发现错误,则通知发送端重发。
纠错编码
- 在数据通信的过程中,解决差错问题的一种方法是在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。最常见的纠错码是海明码,其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置,为自动纠错提供依据。
- 两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距),一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的海明距离(码距)。
-
确定海明码的位数
-
确定校验位的分布
-
分组以形成校验关系
-
校验位取值
最后
以上就是踏实芝麻为你收集整理的计算机网络——第三章 数据链路层(Part Ⅰ)数据链路层的功能组帧差错控制的全部内容,希望文章能够帮你解决计算机网络——第三章 数据链路层(Part Ⅰ)数据链路层的功能组帧差错控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复