数据链路层概述
数据链路层(Data Link Layer,DLL)是OSI七层参考模 型的第二层,属于低三层中的中间一层。数据链路可以粗 略地理解为数据通道。物理层要为终端设备间的数据通信 提供传输媒体及连接。
数据链路层协议是为收发对等实体间保持一致而制定的, 也为了顺利完成对网络层的服务。数据链路层协议分为 “面向字符”和“面向比特”两类。
1.面向字符的链路层协议
-
ISO的IS1747~1975:称为“数据通信系统的基本型控制 规程”,利用10个控制字符完成链路的建立、拆除及数据 交换。对帧的收发情况及差错恢复也是靠这些字符来完成 的。如基本型传输控制规程及其扩充部分(BM和XBM) 协议。
-
IBM的二进制同步通信规程(BSC)。
-
DEC的数字数据通信报文协议(DDCMP)。
-
PPP(点对点协议)。
2.面向比特的链路层协议
- IBM的SNA网络使用的数据链路协议SDLC (Synchronous Data Link Control),同步数据链路控制 协议);
- ANSI修改SDLC协议后,提出的ADCCP(Advanced Data Communication Control Procedure,高级数据通信 控制规程);
- ISO修改SDLC协议后,提出的HDLC(High-level Data Link Control,高级数据链路控制);
数据链路层的主要功能
数据链路层最基本的服务是将源计算机网络层传来的数据 可靠地传输到相邻节点的目标计算机的网络层。
主要的功能如下:
- 帧同步
- 差错控制
- 流量控制
- 链路管理
- 透明传输
帧同步
为了向网络层提供服务,数据链路层必须使用物理层提供 的服务。而物理层是以比特流进行传输的,这种比特流传 输并不保证在数据传输过程中没有错误,接收到的位数量 可能少于、等于或者多于发送的位数量。而且它们还可能 有不同的值,这时数据链路层为了能实现数据有效的差错 控制,就采用了一种“帧”的数据块进行传输。而要采帧 格式传输,就必须有相应的帧同步技术,这就是数据链路 层的“成帧”(也称为“帧同步”)功能。
1.字符计数法
这种帧同步方法是一种面向字节的同步规程,是利用帧头 部中的一个域来指定该帧中的字符数,以一个特殊字符表 征一帧的起始,并以一个专门字段来标明帧内的字符数。
同步原理
接收方可以通过对该特殊字符的识别从比特流中区分出帧 的起始,并从专门字段中获知该帧中随后跟随的数据字符 数,从而可确定出帧的终止位置。
例如:DEC公司的数据通信报协议
常见标志:
- SOH:报头开始标志
- STX:文本开始标志
- ETX:文本终止标志
- EOT:发送完毕标志
- ACK:确认标志
- DLE:转义标志
- CRC:循环冗余校验
2.字符填充的首位定界符法
该同步方法是用一些特定的字符来定界一帧的起始与终止, 充分解决了错误发生之后重新同步的问题。
同步原理
在这种帧同步方式中,为了不使数据信息位中与特定字符 相同的字符被误判为帧的首尾定界符,可以在这种数据帧 的帧头填充一个转义控制字符(DLE STX,Data Link Escape – Start of Text),在帧的结尾则以DLE ETX (Data Link Escape-End of Text)结束,以示区别,从而达到数据的透明性。
在实际应用中为逆逻辑
即:DLESTX为开始,DLEETX为结束,这会使得转义量大大减少。
3. 比特填充的首位定界符法
是以一组特定的比特模式 (如01111110)来标志一帧的起始与终止,它允许任意 长度的位码,也允许任意每个字符有任意长度的位。它的 工作原理是在每一帧的开始和结束位置都加上一个特殊的 位模式,如01111110。当发送方的数据链路层传到数据 中5个“1” (因为特定模式中是有5个连续“1”)时, 自动在输出位流中填充一个“0”。在接收方,当收到连 续5个“1”,并且后面位是“0”时,自动删除该“0”位。 就好像字节填充过程对于双方计算机中的网络层是完全透明的一样。
4.违法编码
该法在物理层采用特定的比特编码方法时采用。例如,曼 彻斯特编码方法,是将数据比特“1”编码成“高—低” 电平对,将数据比特“0”编码成“低—高”电平对。而 “高—高”电平对和“低—低”电平对在数据比特中是违 法的。可以借用这些违法编码序列来界定帧的起始与终止。 局域网IEEE 802标准中就采用了这种方法。
差错控制
在解决了标识每一帧的起始和结束位置问题之后,还需要 解决数据传输中的差错控制问题。就是如何确保所有的数 据帧最终在递交给目标计算机上的网络层时,能保证数据 的完整性,并且保持正确的顺序。
在差错控制功能中,主要采取纠错码、检错码、反馈检测、 自动重发等重传技术。
通信信道的噪声分为两类:热噪声和冲击噪声
差错编码方案
差错校验是采用某种手段去发现并纠正传输错误,发现差 错甚至能纠正差错的常用方法是对被传送的信息进行适当 的编码,它是给信息码元加上冗余码元,并使冗余码元与 信息码元之间具备某种关系,然后将信息码元和冗余码元 一起通过信道发出。接收端接收到这两种码元后,检验它 们之间的关系是否符合发送端建立的关系,这样就可以检验传输差错,甚至可以纠错。能校验差错的编码称检错码 (Error-detecting Code),可以纠错的编码称纠错码 (Error-correcting Code)。
奇偶校验
奇偶校验(Parity Check)是检验所传输的数据是否被正 确接收的一种简单方法。发送方根据发送的字符后附加一 个校验位0或1,接收方检查此位是否还保持数据位的正确 关系,以判断是否正确传输,奇偶校验有奇校验和偶校验 等方式。
例如:100101 的偶校验:1。数据中有三个1再增加一个1,1的个数为偶数即可
CRC校验
循环冗余校验(Cyclic Redundancy Check,CRC)即 CRC校验,它是数据链路层中广泛采用的校验方式,在数据后面附加上用于差错校验的冗余码,在数据链路层的帧 结构中称为帧校验序列(Frame Check Sequence, FCS)。
冗余码的位数常用的有12、16和32位,一般附加的用于 校验的冗余码的位数越多,检错能力就越强,但传输的额 外开销也越大。
例如:约定检错码为:m = 10011,数据为 r = 10101100冗余码的计算:
已知检错码m有5位
- 在10101100后增加 m-1 =4个0,即为:r1 = 101011000000;
- 将增加之后的数据 r1 和检错码 m 异或取值,例如数据前五位:10101异或10011=00110
- 将前两位0去除剩下110
- 再将110用 r1 五位之后的补齐,得到下一次异或数据:11010以此类推,得到最终无法异或
- 得到00011,取最后四位为冗余码,即0011;
- 最终传输到对端数据为:101011000011;
有时检错码会以: C = x 4 + x + 1 C=x^4+x+1 C=x4+x+1 以多项式的系数为检错码:10011 。
海明验证
在纠错码方案中,“海明码”是一种典型的纠错方案。海 明码是一种可以纠正一位或多位差错的编码。它利用在信 息位为m位,增加r位冗余位,构成一个n=m+r位的码字, 然后用r个监督关系式产生的r个校正因子来区分无错和在 码字中的n个不同位置的一位错。它必须满足以下关系式:
2
r
−
1
≥
m
+
r
2^r-1\geq m+r
2r−1≥m+r
其中
2
r
2^r
2r为编码能力,即有几种类型,减去1是减掉了全部正确的情况。
校验位必须放在权得位置,即:1、2、4、8……
例如:数据为:1101,使用海明校验(采用偶校验),求出其海明编码。
已知有4位有效信息即m = 4;
根据公式:
2
r
−
1
≥
m
+
r
2^r-1\geq m+r
2r−1≥m+r求得r = 3,那么n = 3+4 = 7;
若定义信息为:a[3];
校验位为:b[2];
那么各序号之间得对应关系为:
海明序号 | 海明编码 |
---|---|
1 | b[0] |
2 | b[1] |
3 | a[0] |
4 | b[2] |
5 | a[1] |
6 | a[2] |
7 | a[3] |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
√ | √ | √ | √ | |||
√ | √ | √ | √ | |||
√ | √ | √ | √ | |||
1 | 1 | 0 | 1 |
检验码求算:
- 找的b[0]列对应得√,
- 在这一行中有3、5、7列有值,
- 对他们进行偶校验,得到b[0]=1
以此类推求算出所有检验码,b = [1, 0, 0]
所以最终发送到对端得数据为:1010101