数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层通常可为网络层提供如下服务:
注意:有连接就一定要有确认,即不存在无确认的面向连接的服务。
数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于面向连接的服务链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。在多个站点共享同一物理信道的情况下(如在局域网中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。
两台主机之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就构成了帧。
因此,帧长等于数据部分的长度加上首部和尾部的长度。首部和尾部中含有很多控制信息,它们的一个重要作用是确定帧的界限,即帧定界。而帧同步指的是接收方应能从接收到的二进制比特流中区分出帧的起始与终止。
如在 HDLC协议中,用标识位F(01111110)来标识帧的开始和结束。通信过程中,检测到帧标识位F即认为是帧的开始,然后一旦检测到帧标识位F即表示帧的结束。HDILC 标准帧格式如图所示。
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能地大于首部和尾部的长度,但每种数据链路层协议都规定了帧的数据部分的长度上限——最大传送单元(MTU).
如果在数据中恰好出现与帧定界符相同的比特组合(会误认为“传输结束”而丢弃后面的数据),那么就要采取有效的措施解决这个问题,即透明传输。更确切地说,透明传输就是不管所传数据是什么样的比特组合,都应当能在链路上传送。
由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,如若此时不适当限制发送方的发送速率(即链路上的信息流量),前面来不及接收的帧将会被后面不断发送来的帧“淹没”,造成帧的丢失而出错。
因此,流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。
这个过程需要通过某种反馈机制使发送方能够知道接收方是否能跟上自己,即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后继续发送。
流量控制并不是数据链路层特有的功能,许多高层协议中也提供此功能,只不过控制的对象不同而已。对于数据链路层来说,控制的是相邻两结点之间数据链路上的流量,而对于运输层来说,控制的则是从源端到目的端之间的流量。
由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常,这些错误可分为位错和帧错。
位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest,ARQ)方式来重传出错的帧。
帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。
1.下列不属于数据链路层功能的是().
A.帧定界功能
B.电路管理功能
C.差错控制功能
D.流量控制功能
2.数据链路层协议的功能不包括( ).
A.定义数据格式
B.提供结点之间的可靠传输
C.控制对物理传输介质的访问
D.为终端结点隐蔽物理传输的细节
解析:数据链路层的主要功能包括组帧,组帧即定义数据格式,A正确。数据链路层在物理层提供的不可靠的物理连接上实现结点到结点的可靠性传输,B正确。控制对物理传输介质的访问由数据链路层的介质访问控制(MAC)子层完成,C正确。数据链路层不必考虑物理层如何实现比特传输的细节,因此D错误。
3.为了避免传输过程中帧的丢失,数据链路层采用的方法是( ).
A.帧编号机制
B.循环冗余校验码
C.汉明码
D.计时器超时重发
解析:为防止在传输过程中帧丢失,在可靠的数据链路层协议中,发送方对发送的每个数据帧设计一个定时器,当计时器到期而该帧的确认帧仍未到达时,发送方将重发该帧。为保证接收方不会接收到重复帧,需要对每个发送的帧进行编号;汉明码和循环冗余校验码都用于差错控制
4.数据链路层为网络层提供的服务不包括().
A.无确认的无连接服务
B.有确认的无连接服务
C.无确认的面向连接服务
D.有确认的面向连接服务
5.对于信道比较可靠且对实时性要求高的网络,数据链路层采用()比较合适。
A.无确认的无连接服务
B.有确认的无连接服务
C.无确认的面向连接服务
D.有确认的面向连接服务
解析:无确认的无连接服务是指源机器向目标机器发送独立的帧,目标机器并不对这些帧进行确认。事先并不建立逻辑连接,事后也不用释放逻辑连接。若由于线路上有噪声而造成某–帧丢失,则数据链路层并不会检测这样的丢帧现象,也不会回复。当错误率很低时,这一类服务非常合适,这时恢复任务可以留给上面的各层来完成。这类服务对于实时通信也是非常合适的,因为实时通信中数据的迟到比数据损坏更不好。
6.流量控制实际上是对()的控制。
A.发送方的数据流量
B.接收方的数据流量
C.发送、接收方的数据流量
D.链路上任意两结点间的数据流量
7.下述协议中,()不是数据链路层的标准。
A.ICMP
B.HDLC
C.PPP
D.SLIP
解析:网际控制报文协议(ICMP)是网络层协议,PPP是在SLIP基础上发展而来的,都是数据链路层协议。
8.假设物理信道的传输成功率是95%,而平均一个网络层分组需要10个数据链路层帧来发送。若数据链路层采用无确认的无连接服务,则发送网络层分组的成功率是().
A.40%
B.60%
C.80%
D.95%
解析:要成功发送一个网络层分组,需要成功发送10个数据链路层帧。成功发送10个数据链路层帧的概率是 ( 0.95 ) 10 ≈ 0.598 (0.95)^{10}\approx0.598 (0.95)10≈0.598,即大约只有60%的成功率。这个结论说明了在不可靠的信道上无确认的服务效率很低。为了提高可靠性,应该引入有确认的服务。
数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高效率。为了使接收方能正确地接收并检查所传输的帧,发送方必须依据一定的规则把网络层递交的分组封装成帧(称为组帧)。组帧主要解决帧定界、帧同步、透明传输等问题。通常有以下4种方法实现组帧。
★ \bigstar ★注意:组帧时既要加首部,又要加尾部。原因是,在网络中信息是以帧为最小单位进行传输的,所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即IP数据报)仅是包含在帧中的数据部分,所以不需要加尾部来定界。
字符计数法是指在帧头部使用一个计数字段来标明帧内字符数。目的结点的数据链路层收到字节计数值时,就知道后面跟随的字节数,从而可以确定帧结束的位置(计数字段提供的字节数包含自身所占用的一个字节)。
缺点:如果计数字段出错,即失去了帧边界划分的依据,那么接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,从而造成灾难性后果。
字符填充法使用特定字符来定界一帧的开始与结束,控制字符SOH放在帧的最前面,表示帧的首部开始,控制字符EOT表示帧的结束。为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符前面填充一个转义字符(ESC)来加以区分(注意,转义字符是ASCII 码中的控制字符,是一个字符,而非“E”"S”“C”三个字符的组合),以实现数据的透明传输。接收方收到转义字符后,就知道其后面紧跟的是数据信息,而不是控制信息。
如图所示的字符帧,帧的数据段中出现EOT或SOH字符,发送方在每个EOT或SOH字符前再插入一个ESC字符,接收方收到数据后会自己删除这个插入的ESC字符,结果仍得到原来的数据。这也正是字符填充法名称的由来。如果转义字符ESC也出现在数据中,那么解决方法仍是在转义字符前插入一个转义字符。
零比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即01111110来标志一帧的开始和结束。为了不使信息位中出现的比特流01111110被误判为帧的首尾标志,发送方的数据链路层在信息位中遇到5个连续的“1”时,将自动在其后插入一个“0";而接收方做该过程的逆操作,即每收到5个连续的“1”时,自动删除后面紧跟的“0”,以恢复原信息。
零比特填充法很容易由硬件来实现,性能优于字符填充法。
在物理层进行比特编码时,通常采用违规编码法。例如,曼彻斯特编码方法将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对,而==“高-高”电平对和“低-低”电平对在数据比特中是违规的==(即没有采用)。可以借用这些违规编码序列来定界帧的起始和终止。局域网IEEE802标准就采用了这种方法。
违规编码法不需要采用任何填充技术,便能实现数据传输的透明性,但它只适用于采用冗余编码的特殊编码环境。
由于字节计数法中计数字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是比特填充法和违规编码法。
1.在一个数据链路协议中使用下列字符编码:
A:01000111
B:11100011
ESC:11100000;
FLAG:01111110
在使用下列成帧方法的情况下,说明为传送4个字符A、B、ESC、FLAG所组织的帧而实际发送的二进制位序列(使用FLAG作为首尾标志,ESC作为转义字符).
1)字符计数法。
2)使用字符填充的首尾定界法。
3)使用比特填充的首尾标志法。
解析:
1)第一字节为所传输的字符计数5,转换为二进制为00000101,后面依次为A、B、ESC、FLAG的二进制编码(5个字节,40个bit):
00000101 01000111 11100011 11100000 01111110
2)首尾标志位FLAG(01111110),在所传输的数据中,若出现控制字符,则在该字符前插入转义字符ESC(11100000):
01111110 01000111 11100011 11100000 11100000 11100000 01111110 01111110
3)首尾标志位FLAG(01111110),在所传输的数据中,若连续出现5个“1”,则在其后插入“0”:
01111110 01000111 110100011 111000000 011111010 01111110
检错编码都采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使得码字遵从不变的规则。接收端根据收到的码字是否仍符合原规则来判断是否出错。
常见的检错编码有奇偶校验码和循环冗余码。
在数据通信的过程中,解决差错问题的一种方法是在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。
最常见的纠错编码是海明码,其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。
当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置,为自动纠错提供依据。
注: 2 0 = 1 , 2 1 = 2 , 2 2 = 4 2^0=1,2^1=2,2^2=4 20=1,21=2,22=4
★ \bigstar ★注:
令 x 4 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 0 , 可 解 得 x 4 = 1 令x_4\oplus0\oplus1\oplus1\oplus1=0,可解得x_4=1 令x4⊕0⊕1⊕1⊕1=0,可解得x4=1
令 x 2 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0 , 可 解 得 x 2 = 0 令x_2\oplus0\oplus0\oplus1\oplus1=0,可解得x_2=0 令x2⊕0⊕0⊕1⊕1=0,可解得x2=0
令 x 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 = 0 , 可 解 得 x 1 = 1 令x_1\oplus1\oplus0\oplus1\oplus1=0,可解得x_1=1 令x1⊕1⊕0⊕1⊕1=0,可解得x1=1
101 ( 二 进 制 ) = 5 ( 十 进 制 ) 101(二进制)=5(十进制) 101(二进制)=5(十进制)
1.通过提高信噪比可以减弱其影响的差错是().
A.随机差错 B.突发差错 C.数据丢失差错 D.干扰差错
解析:一般来说,数据的传输差错是由噪声引起的。通信信道的噪声可以分为两类:热噪声和冲击噪声。热噪声一般是信道固有的,引起的差错是随机差错,可以通过提高信噪比来降低它对数据传输的影响。冲击噪声-一般是由外界电磁干扰引起的,引起的差错是突发差错,它是引起传输差错的主要原因,无法通过提高信噪比来避免。
2下列有关数据链路层差错控制的叙述中,错误的是().
A、数据链路层只能提供差错检测,而不提供对差错的纠正
B.奇偶校验码只能检测出错误而无法对其进行修正,也无法检测出双位错误
C.CRC校验码可以检测出所有的单比特错误
D.海明码可以纠正一位差错
解析:链路层的差错控制有两种基本策略:检错编码和纠错编码。常见的纠错码有海明码,它可以纠正一位差错。
3.下列属于奇偶校验码特征的是().
A.只能检查出奇数个比特错误
B.能查出长度任意一个比特的错误
C.比CRC检验可靠
D.可以检查偶数个比特的错误
解析:奇偶校验的原理是通过增加冗余位来使得码字中“1”的个数保持为奇数或偶数的编码方法,它只能发现奇数个比特的错误。
4.字符S的ASCII编码从低到高依次为1100101,采用奇校验,在下述收到的传输后字符中,错误()不能检测。
A.11000011
B.11001010
C.11001100
D.11010011
解析:既然采用奇校验,那么传输的数据中1的个数若是偶数个则可检测出错误,若1的个数是奇数个,则检测不出错误,因此选D。
5.为了纠正2比特的错误,编码的海明距应该为().
A.2
B.3
C.4
D.5
解析: ⋆ \star ⋆海明码“纠错”d位,需要码距为2d+1的编码方案;“检错”d位,则只需码距为d+1.
6.对于10位要传输的数据,如果采用汉明校验码,那么需要增加的冗余信息位数是()
A.3
B.4
C.5
D.6
解析:在k比特信息位上附加r比特冗余信息,构成k+r比特的码字必须满足 2 r ≥ k + r + 1 2^r≥k+r+1 2r≥k+r+1。如果k的取值小于等于11且大于4,那么r=4。
7.下列关于循环冗余校验的说法中,()是错误的。
A.带r个校验位的多项式编码可以检测到所有长度小于等于r的突发性错误
B.通信双方可以无须商定就直接使用多项式编码
C.CRC校验可以使用硬件来完成
D.有一些特殊的多项式,因为其有很好的特性,而成了国际标准
解析:在使用多项式编码时,发送端和接收端必须预先商定–个生成多项式。发送端按照模2除法(异或),得到校验码,在发送数据时把该校验码加在数据后面。接收端收到数据后,也需要根据该生成多项式来验证数据的正确性。
8,要发送的数据是1101 0110 11,采用CRC校验,生成多项式是10011,那么最终发送的数据应是().
A.1101 0110 1110 10
B.1101 0110 1101 10
C.1101 0110 1111 10
D.1111 0011 0111 00
解析:假设一个帧有m位,其对应的多项式为G(x),则计算冗余码的步骤如下:
- 加0。假设G(x)的阶为r,在帧的低位端加上r个0。
- 模2除。利用模2除法,用G(x)对应的数据串去除①中计算出的数据串,得到的余数即为冗余码(共r位,前面的0不可省略)。
多项式以2为模运算。按照模⒉运算规则,加法不进位,减法不借位,它刚好是异或操作。乘除法类似于二进制运算,只是在做加减法时按模⒉规则进行。根据以上算法计算可得答案选C。
1.在数据传输过程中,若接收方收到的二进制比特序列为10110011010,接收双方采用的生成多项式 G ( x ) = x 4 + x 3 + 1 G(x)=x^4+x^3+1 G(x)=x4+x3+1,则该二进制比特序列在传输中是否出错?如果未出现差错,那么发送数据的比特序列和CRC检验码的比特序列分别是什么?
解析:
根据题意,生成多项式Gx)对应的二进制比特序列为11001。进行如下的二进制模2除法,被除数为10110011010,除数为11001:
所得余数为0,因此该二进制比特序列在传输过程中未出现差错。发送数据的比特序列是1011001,CRC检验码的比特序列是1010。
注意:CRC检验码的位数等于生成多项式G(x)的最高次数。
[1] 谢希仁. 计算机网络. 7版. 北京:电子工业出版社,2017
[2] 王道论坛. 2022计算机网络考研复习指导. 北京:电子工业出版社,2021