1 简介
数据链路层主要目的是在原始的有差错的物理传输线路上,采用差错检测、差错控制、流量控制等方法,将有差错的物理线路改造成无差错的数据链路,以便向网络层提供高质量的服务。
2 结构
在TCP/IP体系结构中数据链路层就一层,但在局域网体系结构中可细分为两层,分别为逻辑链路控制子层(Logical Link Control,LLC)和介质访问控制子层(Medium Access Control,MAC)。
2.1 SAP
SAP(Service Access Point服务访问点)指的是上层访问相邻下层所提供的服务点,是领层实体间实现相互通信的逻辑接口,位于两层边界处。每一层都有SAP,为每层的首字母加上SAP
- PSAP(Physical layer Service Access Point):物理层SAP,指网络通信中设备的具体物理接口。
- DLSAP(Data Link Control layer ServiceAccess Point):数据链路层SAP,指各个物理接口的MAC地址。
- NSAP(Network layer Service Access Point):网络层SAP,指物理接口上配置的网络地址(如IP地址)。
- TSAP(Transport layerService Access Point):传输层SAP,指网络应用通信所用的传输层端口。
- SLSAP( Session layer Service Access Point):会话层SAP,指具体网络应用会话进程。
- PLSAP(Presentation layer ServiceAccess Point):表示层SAP,指网络应用进程中的用户标识
2.2 MAC
MAC(Medium Access Control介质访问控制)主要用来控制不同用户数据传输中对物量层传输介质的访问,主要包括:
- 数据帧的封装/卸装
- 帧的寻址和识别
- 帧的接收与发送
- 帧的差错控制
- 介质访问冲突控制
2.3 LLC
LLC(Logical Link Control逻辑链路控制)主要用来解决与传输介质访问无关的问题,为网络层提供服务,主要包括:
- 逻辑连路的建立和释放
- 提供网强行层接口(SAP)
- 数据传输差错控制
- 给数据帧加上传输序号
3 功能
3.1 数据链路管理
LLC层的边路管理主要针对面向有连接服务类型,主要分为三个阶段:
- 链路的建立:首先确认对方已就绪,然后交换必要的信息进行初始化,最后建立连接
- 链路的保持:传输过程中链路需要保持,出现差错需要重新建立连接
- 链路的释放:传输完毕需要释放所占用的数据连接
3.2 封装成帧
3.2.1 数据包的帧封装
网络层传输的包在数据链路层中传输的是帧,网络层的包到达数据链路层后,数据链路层将在网络层的数据包前加帧头部和数据包尾部加帧尾部。数据包封装成帧时大小受数据链路层协议的MTU(Maximum Transfer Unit 最大传输单元)限制。
3.2.2 比特流的帧组装
比特流的帧组装目的是将物理层比特流组装成帧,常用的帧组装方法如下:
3.2.2.1 字节计数法
通过一个特殊字符代码帧开始,以一个专门字段标识当前帧字节数,通过这两个字段可以确定每个帧的结束位置。常用的面向字节计数同步的协议DDCMP(Digital DataCommunications Message Protocol,数字数据通信报协议),如下图所示,其中SOH字段代码帧开始,COUNT代表DATA字段大小
3.2.2.2 字符填充的首尾定界符法
通过特定的控制字符标识一个帧的开始和结束,如果数据中带有控制字符,则需要填充一个转义字符。常用的字符填充协议如IBM的BSC协议使用SYN标记开始,使用EXT标记结束
3.2.2.3 比特填充的首尾定界符法
通过一个特定的比特串来标识一个帧的开始和结束,为了防止数据中出现与帧开始和结束的比特串相同的情况,需要使用比特填充。例如:使用0111 1110 来标识帧的开始和结束,为了防止与数据重复,当数据中出现连续5个1时,需要在发送端自动插入一个0,接收端每接到连续5个1时,自动去掉其后的0。
例:
标识符:01111110
数据:011011111101111100
经过封装的帧:01111110
0110111110
10111110
00 01111110
3.2.2.4 违法编码法
通过物理层的违法编码来标识一个帧的开始和结束。例如:曼切斯特编码方法中1采用高-低电平,0采用低-高电平,如果出现高-高电平或低低电平则是违法的,因此可以使用这些违法编码来标识帧的开始和结束。
3.3 透明传输
透明传输指不管数据是什么样的比特组合,都应该能够在链路中传送,如果数据中的比特组合与控制信息相同,则必须采用适当的措施,来保证接收端不会误判这些数据。例如:比特填充中自动填充的0,字符填充中的转义字符等。
3.4 差错控制
差错控制指的是数据链路层需要具备两种能力,一是发现差错的能力,二是纠正错误的能力。
3.4.1 差错检测
3.4.1.1 奇偶校验码(PCC)
奇偶校验码(PCC)为奇校验和偶校验的统称,是通过在原信息码后加一位校验码,用来检测单个错误的方法。例如:
1)当使用奇校验时,如果数据中的1的个数为偶数,则需要在末位添加一个1,保证1的个数是奇数;
校验方法:奇校验
校验数据:11000000
校验码:1
最终数据:110000001
2)如果使用偶校验时,如果数据中的1的个数是奇数,则需要在末位添加一个1,保证1的个数是偶数。
校验方法:偶校验
校验数据:10000000
校验码:1
最终数据:100000001
3.4.1.2 循环冗余校验(CRC)
CRC校验原理是在要发送的帧后面附加一个校验码,该校验码是通过选定的除数,对发送的帧进行模2除法生成,将生成的新帧发给接收端,接收端通过同样的除数进行模2除法,如果余数为零,则代表正确,如果有余数,则代表出现了差错。该校验方法分为以下三步:
1)选定除数
2)对发送的数据(附加除数-1位个0)以模2除法的方式除以选定的除数
3)将得到的校验码附加在发送的数据(不包含附加的0)后面
4)接收端收到数据后,以同样的除数对接收到的数据进行模2除法,余数为0则正确,否则为异常
模2除法简介
假设被除数为:101001,除数为:1101
110101
------------------
101001000 # 因为除数为1101,则附加3个0,首位为1,则除数为1101,商为1
1101
---------
1110 # 首位为1,则除数为1101,商为1
1101
---------
0111 # 首位为0,则除数为0000,商为0
0000
---------
1110 # 首位为1,则除数为1101,商为1
1101
---------
0110 # 首位为0,则除数为0000,商为0
0000
---------
1100 # 首位为1,则除数为1101,商为1
1101
---------
001 # 结果的位数小于除数时,001为余数
- 当被除数首位为1时,商为1
- 当被除数首位为0时,商为0
- 模2除法相当于按位异或,相同则为0,不同则为1,只有首位为0时,才能右移
- 计算时每次右移一位,当被除数的位数小于除数时,结果为余数
由上面计算结果可知,结果为001,则传送数据为 101001001
接收端收到数据后(101001001),同样以模2除法除以相同的除数
假设被除数为:101001001,除数为:1101
110101
------------------
101001001 # 首位为1,则除数为1101,商为1
1101
---------
1110 # 首位为1,则除数为1101,商为1
1101
---------
0111 # 首位为0,则除数为0000,商为0
0000
---------
1110 # 首位为1,则除数为1101,商为1
1101
---------
0110 # 首位为0,则除数为0000,商为0
0000
---------
1101 # 首位为1,则除数为1101,商为1
1101
---------
000 # 结果的位数小于除数时,000为余数,因为0为余数,所以传输过程无误
3.4.1.3 反馈检测法
反馈检测法要求接受端在接收到的每个数据帧均需向发送端一个数据帧,代表已接收,该数据帧与原始帧一致。
发送端收到反馈帧后,经过比对,如果发现有误,则接收端会向发送端发送一个DEL字符,申请发送端重发。
1)计时器(Timer)
为了解决发送端发送数据时,接收端没有收到数据的情况,发送端会通过引入计时器,在超时后,重新发送数据
2)帧编号
为了解决接收端收到数据,但是发送端因为没有收到反馈,重复发送的问题,发送端会引入帧编号,接收端通过比对帧编号判定是否已经接收的数据重复来到,如果重复数据,则直接丢弃。
3.4.2 差错纠正
3.5 流量控制
3.5.1 XON/XOFF流量控制
XON/XOFF(Transmitter On/ Transmitter Off,继续传输/停止传输)流量控制是通过对发送端的传输速率进行控制,来达到与接收端数据处理速率匹配。其主要的流程是:
1)当接收端认为不能继续接收数据时,则向发送端发送XOFF控制字符,发送端收到后,则停止传送数据;
2)当接收端认为可以继续接收数据时,则发送XON控制字符,发送端收到后,则继续传送数据。
3.5.2 滑动窗口机制
滑动窗口机制中的窗口指发送端和接收端的缓存空间大小,滑动指缓存空间存放的未处理帧数是变化的。
1)发送端在收到接收端的确认帧后,会删除缓存中的待重发帧
2)接收端在向发送端发送确认帧后,也会删除原来保存在缓存中的帧
4 协议
4.1 BSC协议(面向字符)
BSC协议中使用字符填充的首尾定界符法,每个数据块头使用一个或多个SYN来标记数据块开始,使用ETX来标记数据块的结束。BSC协议中定义了十种特殊字符作为数据块的开始和结束,以及传输过程的控制信息
控制字符 | 描述信息 |
---|---|
ACK | Acknowledge,确认标识,由接收端发出,作为收到报文的响应 |
DLE | Data Link Escape,转义字符,当报文中出现控制字符时,需要在前面加一个DLE转义 |
ENQ | Enquire,询问标志,用来请求远程站点给出响应 |
EOT | End Of Transmission,发送完毕标志,用来表示文本发送结束并拆除链路 |
ETB | End Of Transmission Block,用于标志每个数据块的结束位置,当报文要拆分成多个块传输时才有 |
ETX | End Of Text,文本终止标志,标志报文文本的结束 |
NAK | Negative Acknowledge,否认标志,由接收端发送,作为对未正确接收报文的响应 |
SOH | Start Of Head,报头开始标志,用来表示报文的开始,只有第一个数据块中有此标志 |
STX | Start Of Text,文本开始的标志,代表标题的结束及报文文本的开始,每个数据块均有此标志 |
SYN | Synchronous,字符同步标志,用以实现通信双方的字符同步,每个数据块均有此标志,通常有两个 |
报文格式示例:
注:
1)BCC(Block Check Character)代表是的块校验字符,一般为单字节或双字节的CRC(循环校验码)
2)BCC校验的报文区间位为STX至ETX或ETB之间
3)如果报文中出现了控制字符,则需要在前面加一个DLE转义字符
4)如果报文中出现了转义字符,则需要在前面加一个DLE转义字符,相当于两个DLE字符
4.2 HDLC协议(面向比特)
4.3 PPP协议(面向字符)
PPP(Point to Point Protocol,点对点协议)是一种广域网数据链路层协议。