这里详细研究一下OSI七层网络模型的第二层: 链路层.
数据链路层的作用
在两个网络实体之间提供数据链路连接的创建、维持和释放管理。
构成数据链路数据单元(frame
:数据帧或帧),并对帧定界、同步、收发顺序的控制。
传输过程中的网络流量控制
、差错检测
和差错控制
等方面。
设计数据链路层的原因?
在原始的物理线路上传输数据信号是有差错的,设计数据链路层的主要目的就是在原始有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,
将有差错的物理线路改进成逻辑上无差错的数据链路
,向网络层提供高质量的服务。
子层
逻辑控制层(LLC)
: 更高层,无物理媒介无关,用于设备间单个连接的错误控制,流量控制。介质访问层(MAC)
: 更底层,解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题。
链路管理
链路管理功能主要用于面向连接的服务。 当链路两端的节点要进行通信前,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持该连接。 如果出现差错,需要重新初始化,重新自动建立连接。 传输完毕后则要释放连接。 数据连路层连接的建立维持和释放就称作链路管理。
帧同步
为了使传输中发生差错后只将有错的有限数据进行重发,数据链路层将比特流组合成帧
为单位传送。
每个帧除了要传送的数据外,还包括校验码,以使接收方能发现传输中的差错。
帧的组织结构必须设计成使接收方能够明确地从物理层收到的比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。
由于网络传输中很难保证计时的正确和一致,所以不可采用依靠时间间隔关系来确定一帧的起始与终止的方法.
具体的帧同步方法有以下几种(由于字节计数法中COUNT字段的脆弱性以及字符填充法实现上的复杂性和不兼容性,较普遍使用的帧同步法是比特填充和违法编码法):
字节计数法
: 这是一种以一个特殊字符表示一帧的起始并以一个专门字段来标明帧内字节数的帧同步方法。接收方可以通过对该特殊字符的识别从比特流中区分出帧的起始并从专门字段中获知该帧中随后跟随的数据字节数,从而可确定出帧的终止位置。字符填充法
: 该法用一些特定的字符来定界一帧的起始与终止,为了不使数据信息位中出现的与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据字符前填充一个转义控制字符(DLE)以示区别,从而达到数据的透明性。但这种方法使用起来比较麻烦,而且所用的特定字符过份依赖于所采用的字符编码集,兼容性比较差
。比特填充法
:该法以一组特定的比特模式(如01111110)来标志一帧的起始与终止。为了不使信息位中出现的与特定比特模式相似的比特串被误判为帧的首尾标志,可以采用比特填充的方法。比如,采用特定模式01111110,则对信息位中的任何连续出现的五个“1”,发送方自动在其后插入一个“0”,而接收则做该过程的逆操作,即每接收到连续五个“1”,则自动删去其后所跟的“0”,以此恢复原始信息,实现数据传输的透明性。比特填充很容易由硬件来实现,性能优于字符填充方法。违法编码法
:该法在物理层采用特定的比特编码方法时采用。例如,一种被称作曼彻斯特编码的方法,是将数据比特“1”编码成“高-低”电平对,而将数据比特“0”编码成“低-高”电平对。而“高-高”电平对和“低-低”电平对在数据比特中是违法的。可以借用这些违法编码序列来定界帧的起始与终止。局域网IEEE 802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适用于采用冗余编码的特殊编码环境。
差错控制
首先帧上会带有差错编码(如奇偶校验码,检查和或CRC),接收到后可以用来判断帧是否在传输过程中发生了错误.发现了错误怎么办?重新发送
呗.
因此需要接收方在接收到一帧后,向发送方反馈是否正确接收
的消息.
那么如何判断某一帧是否丢失呢?很简单,引入计时器(Timer)
,超时了就认为丢失,然后重新发送.
既然可能重复发送,那自然可能同一帧会收到多次,怎么办呢?很简单,给每一帧加个序号
来去重.
具体的方法有以下几种:
-
反馈检测法(也称回送校验或回声法)
: 主要用在面向字符的异步传输中.双方进行数据传输时,接收方将接收到的数据重新发送回发送方,发送方判断数据是否一致,不一致就发送一个控制字符通知接收方删去出错的数据,并重新发送.
虽然原理简单,实现容易,可靠性高,但信道利用率低(但一般在面向字符的异步传输中,信道效率并不是主要的,因此仍被广泛采用).
-
自动重发法(ARQ)
: 实用的方法,可靠性高,信道利用率高,需要在发送的数据帧中附加检错码.具体有两种基本实现:空闲重发请求(也称停等法)
: 即每发送一帧后就停下等对方的确认返回再发送下一帧,否则计时器超时未收到确认帧,则重新发送.优点是缓冲空间小,仅需一个帧的存储空间,但效率较低(在简单的终端环境中被广泛采用).-
连续重发请求
: 即可以连续发送若干帧,同时它们变为待确认帧,收到确认后再从缓冲区删除,优点是效率高,但需要更大的缓冲区.出现差错后的处理有两种策略:Go-back-N
: 就是发送方连续发送,但如果某个帧超时没收到确认,则将这个帧及后面的都重新发送(即使后面可能发送过了),这种情况下发送方需要较大缓冲区,但接收方只需要一个帧的缓冲区.选择重发
: 就是只重新发送出错的帧,这种情况下发送方需要较大缓冲区,同时接收方也需要较大缓冲区.
流量控制
对于数据链路层来说,控制的是相邻两节点之间数据链路上的流量.
因为发送方与接收方工作速率是不一样的,万一发送的太快,前端的帧被后面的帧挤掉了,或因为缓冲区满了导致大量帧丢失怎么办呢?
因此就需要流量控制了,实际控制的是发送方的流量,使其它发送率不超过接收方的承受能力.
具体方案有:
XON/XOFF方案
: 此方案使用一对控制字符来实现流量控制,XON采用ASCII字符字集中的控制字符DC1,XOFF采用ASCII字符集中的控制字符DC3。当通信链上的接收方发生过过载时便向发送方发送一个XOFF字符后便暂时停止发送数据,等接收方处理完缓冲存储器中中的数据,过载恢复后,再向发送方发送一个XON字符,以通知发送方恢复数据发送。-
窗口机制
: 跟TCP的窗口有些类似所谓
发送窗口
就是指示发送方已发送但尚未确认的帧
序号队列的界
,其上、下界分别称为发送窗口的上、下沿,上、下沿的间距称为窗口尺寸
。接收方类似地有
接收窗口
,它指示允许接收的帧
的序号。接收窗口的上、下界也是随时间滑动的。
链接控制协议
上面说的基本上都是概念,现在要说具体的协议实现了.
主要分为两类:
异步协议
: 以字符
为独立的信息传输单位,在每个字符的起始处开始对字符内的比特实现同步,但字符与字符之间的间隔时间是不固定的(即字符之间是异步的).异步协议中因为每个传输字符都要添加诸如起始位、校验位及停止位等冗余位,故信道利用率很低,一般用于数据速率较低的场合。-
同步协议
: 以许多字符或许多比特组织成的数据块--帧
为传输单位.由于采用帧为传输单位,所以同步协议能更有效地利用信道,也便于实现差错控制、流量控制等功能。同步协议又可分为面向字符的同步协议
、面向比特的同步协议
及面向字节计数的同步协议
三种类型。二进制协议
: 这是面向字符
的同步协议-
高级控制协议(HDLC)
: 这是面向比特
的同步协议,特点:- 协议不依赖于任何一种字符编码集
- 数据报文可透明传输,用于实现透明传输的“0比特插入法”易于硬件实现
- 全双工通信,不必等待确认便可连续发送数据,有较高的数据链路传输效率
- 所有帧均采用CRC校验,对信息帧进行编号,可纺止漏收或重份,传输可靠性高
- 传输控制功能与处理功能分离,具有较大灵活性和较完善的控制功能
HDLC协议
HDLC的帧格式:
标志字段(F)
: 标志字段为01111110
的比特模式,用以标志帧的起始和前一帧的终止.-
地址字段(A)
: 地址字段的内容取决于所采用的操作方式。在操作方式中,有主站、从站、组合站之分。每一个从站和组合站都被分配一个唯一的地址。命令帧中的地址字段携带的是对方站的地址,而响应帧中的地址字段携带的是本站的地址。某一地址也可分配给不止一个站,这种地址称为
组地址
,利用一个组地址传输的帧能被组内所有站接收。但当一个站或组合站发送响应时,它仍应当用它唯一的地址。还可用全1地址来表示包含所有站的地址,称为
广播地址
,含有广播地址的帧传送给链路上所有的站。另外,还规定全0地址为无站地址
,这种地址不分配给任何站,仅作作测试。 -
控制字段(C)
: 有以下几种帧类型:信息帧(I帧)
: 控制字段第一位为0
监控帧(S帧)
: 控制字段前两位为10
无编号帧(U帧)
: 控制字段前两位为11
信息字段(I)
校验字段(FCS)
4种流行协议的发展历史
- 1982: DEC,Intel,Xerox制订了
EhternetII
的标准; - 1982: IEEE开始研究Ethernet的国际标准
IEEE802.3
; - 1983: 迫不及待的Novell基于IEEE的802.3的原始版开发了专用的
NovellEthernet
帧格式; - 1985: IEEE推出IEEE802.3规范;
- 后来为解决EthernetII与802.3帧格式的兼容问题推出折中的
IEEE802.3SNAP
格式。
协议一: EthernetII
D-MAC | S-MAC | 类型 | 数据 | CRC — | — | — | — | — 6字节 | 6字节 | 2字节 | 46-1500字节 | 4字节
说明:
- D-MAC: 目标mac地址
- S-MAC: 来源mac地址
- CRC: 帧校验
协议二: NovellEthernet
D-MAC | S-MAC | 长度 | 0xFFFFFF | 0xFFFFFF | 数据 | CRC — | — | — | — | — | — | — 6字节 | 6字节 | 2字节 | 1字节 | 1字节 | 44-1498字节 | 4字节
协议三: IEEE802.3/802.2
D-MAC | S-MAC | 长度 | DSAP | SSAP | cntl | 数据 | CRC — | — | — | — | — | — | — | — 6字节 | 6字节 | 2字节 | 1字节 | 1字节 | 1字节 | 43-1497字节 | 4字节
说明:
- DSAP(DestinationServiceAccessPoint): 目标接入点
- SSAP(SourceServiceAccessPoint): 来源接入点(通常与目标接入点相同)
- cntl: 控制域,表示帧的上层协议
协议四: IEEE802.3SNAP
D-MAC | S-MAC | 长度 | DSAP | SSAP | cntl | 厂商代码 | 类型 | 数据 | CRC — | — | — | — | — | — | — | — 6字节 | 6字节 | 2字节 | 1字节 | 1字节 | 1字节 | 3字节 | 2字节 | 38-1492字节 | 4字节
说明:
- 厂商代码: 通常与源mac地址前3字节相同,有时也设为0
- 类型: 与
EthernetII
的类型域相同 - 此外这种格式允许使用厂商自己的协议