【计算机网络】数据链路层(一)
一、数据链路层的功能
数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
(一)为网络层提供服务
对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层通常可为网络层提供如下服务:
1) 无确认的无连接服务。
源机器发送数据帧时不需先建立链路连接,目的机器收到数据帧时不需发回确认。对丢失的帧,数据链路层不负责重发而交给上层处理。适用于实时通信或误码率较低的通信信道,如以太网
。
2)有确认的无连接服务。
源机器发送数据帧时不需先建立链路连接,但目的机器收到数据帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。该服务适用于误码率较高的通信信道,如无线通信
。
3)有确认的面向连接服务。
帧传输过程分为三个阶段:建立数据链路、传输帧、释放数据
链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧,因而该服务的可靠性最高。该服务适用于通信要求(可靠性、实时性)较高的场合。
注意: 有连接就一定要有确认,即不存在无确认的面向连接的服务。
(二)链路管理
数据链路层连接的建立、维持和释放过程
称为链路管理,它主要用于面向连接的服务。
链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。在多个站点共享同一物理信道的情况下(如在局域网中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。
(三)帧定界、帧同步与透明传输
封装成帧 就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
帧定界:首部和尾部包含许多的控制信息,他们的一个重要作用 —— 确定帧的界限。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
透明传输:是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨
碍数据传输的东西。
组帧的四种方法:
- 字符计数法,
- 字符(节)填充法,
- 零比特填充法,
- 违规编码法。
(四)流量控制
由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,如若此时不适当限制发送方的发送速率(即链路上的信息流量),前面来不及接收的帧将会被后面不断发送来的帧“淹没”,造成帧的丢失而出错。因此,流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。
这个过程需要通过某种反馈机制使发送方能够知道接收方是否能跟上自己,即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后继续发送。
流量控制并不是数据链路层特有的功能,许多高层协议中也提供此功能,只不过控制的对象不同而已。对于数据链路层来说,控制的是相邻两结点之间数据链路上的流量,而对于运输层来说,控制的则是从源端到目的端之间的流量。
主要的流量控制方法有:
- 停止-等待协议
- 后退N帧协议(GBN)
- 选择重传协议(SR)
(五)差错控制
由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常,这些错误可分为位错
和帧错
。
位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest,ARQ)方式来重传出错的帧。
具体做法是:让发送方将要发送的数据帧附加一定的 CRC冗余检错码一并发送,接收方则根据检错码对数据帧进行错误检测,若发现错误则丢弃,发送方超时重传该数据帧。这种差错控制方法称为ARQ法。ARQ法只需返回很少的控制信息就可有效地确认所发数据帧是否被正确接收。
帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。
二、组帧的方法
组帧主要解决帧定界、帧同步、透明传输的问题。
注意:组帧时既要加首部,又要加尾部
。原因是,在网络中信息是以帧为最小单位进行传输的,所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。
对于分组(即P数据报)仅是包含在帧中的数据部分,所以不需要加尾部来定界。
组帧的四种方法:
- 字符计数法,
- 字符(节)填充法,
- 零比特填充法,
- 违规编码法。
1. 字符计数法
帧首部使用一个计数字段(第一个字节,八位)来标明帧内字符数。
注意:帧首部的计数包含自身即表示计数的字符。
缺点:
这种方法最大的问题在于如果计数字段出错,即失去了帧边界划分的依据,那么接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,从而造成灾难性后果。
2. 字符填充的首尾定界符法
当传送的帧是由非ASCII码的文本文件组成时(二进制代码的程序或图像等)。就要采用字符填充方法实现透明传输。
字符填充法使用特定字符来定界一帧的开始与结束,控制字符SOH
放在帧的最前面,表示帧的首部开始,控制字符EOT
,表示帧的结束。为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符前面填充一个转义字符(ESC)来加以区分
- SOH:start of header
- EOT:end of transmission
帧的传输组装过程:
3. 零比特填充的首尾标记法
零比特填充法允许数据帧包含任意个数的比特,它使用一个特定的比特模式,即 01111110 来标志一帧的开始和结束。
在发送端,扫描整个信息字段,只要连续 5 个 1,就立即填入1 个 0。
零比特填充法很容易由硬件来实现,性能优于字符填充法。
4. 违规编码法
在物理层进行比特编码时,通常采用违规编码法。
例如,曼彻斯特编码方法将数据比特“1"编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对,而“高-高”电平
对和“低-低”电平
对在数据比特中是违规的(即没有采用)。可以借用这些违规编码序列来定界帧的起始和终止。局域网 IEEE 802标准(以太网)就采用了这种方法。
违规编码法不需要采用任何填充技术,便能实现数据传输的透明性,但它只适用于采用冗余编码的特殊编码环境。
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充和违规编码法