什么是OSI模型数据链路层
什么是OSI模型数据链路层
数据链路层最基本的服务是将源机网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路层必须具备一系列相应的功能,它们主要有:如何将数据组合成数据块,在数据链路层中将这种数据块称为帧(Fram),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使之与接收方相匹配;在两个网络实体之间提供数据链路通路的建立、维持和释放管理。
1.帧同步功能
为了使传输中发生差错后只将出错的有限数据进行重发,数据链路层将比特流组织成以帧为单位传送。帧的组织结构必须设计成使接收方能够明确地从物理层收到的比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。由于网络传输中很难保证计时的正确和一致,所以不能采用依靠时间间隔关系来确定一帧的起始与终止的方法。下面介绍几种常用的帧同步法。
(1)字节计数法。这种帧同步方法以一个特殊字符表征一帧的起始,并以一个专门字段来标明帧内的字节数。接收方可以通过对该特殊字符的识别从比特流中区分出帧的起始,并从专门字段中获知该帧中随后跟随的数据字节数,从而可确定出帧的终止位置。
面向字节计数的同步规程的典型实例是DEC公司的数字数据通信报文协议DDcmp(Digital Data Communications Message Protocol)o DDcmP采用的帧格式如下:
格式中控制字符SOH标志数据帧的起始。 Count字段共有14位,用以指示帧中数据段中数据的字节数,数据段最大长度为8×(214-1)=131064位,长度必须为字节(EP 8位)的整倍数,DDCMP协议就是靠这个字节计数来确定帧的终止位置的。 DDCMP帧格式中的Ack、seg、addr及Flag中的第2位,它们的功能分别类似于本节稍后要详细介绍的hdlC中的N(R)、N(S)、Addr字段及P/F位。 CRC1、CRC2分别对标题部分和数据部分进行双重校验,强调标题部分单独校验的原因是,一旦标题部分中的Count字段出错,即失却了帧边界划分的依据,将造成灾难性的后果。
由于采用字符计数方法来确定帧的终止边界不会引起数据及其它信息的混淆,因而不必采用任何措施便可实现数据的透明性,即任何数据均可不受限制地传输。
(2)使用字符填充的首尾定界符法。该法用一些特定的字符来定界一帧的起始与终止,本节稍后要介绍的部C规程便是典型例子。为了不使数据信息位中出现的与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据字符前填充一个转义控制字符(DLE)以示区别,从而达到数据的透明性。但这种方法使用起来比较麻烦,而且所用的特定字符依赖于所采用的字符编码集,兼容性比较差。
(3)使用比特填充的首尾标志法。该法以一组特定的比特模式(如01111110)来标志一帧的起始与终止。本节稍后要详细介绍的E由LC规程即采用该法。为了不使信息位中出现的与该特定比特模式相似的比特串被误判为帧的首尾标志,可以采用比特填充的方法。比如,采用特定模式01111110,则对信息位中的任何连续出现的5个"1",发送方自动在其后插入一个"0",而接收方则做该过程的逆操作,即每接收到连续5个"1",则自动删去其后所跟的"0",以此恢复原始信息,实现数据传输的透明性。比特填充很容易由硬件来实现,性能优于字符填充方法。
(4)违法编码法。该法在物理层采用特定的比特编码方法时采用。例如,曼彻斯特编码方法,是将数据比特"1"编码成"高一低"电平对,将数据比特"0"编码成"低一高"电平对。而"高一高"电平对和"低低"电平对在数据比特中是违法的。可以借用这些违法编码序列来定界帧的起始与终止。局域IEEE802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适用于采用冗余编码的特殊编码环境。
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)以及字符填充法实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充法和违法编码法。
2.差错控制功能
通信系统必须具备发现(即检测)差错的能力,并采取措施纠正之,使差错控制在所能:允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。
接收方通过对差错编码(如奇偶校验码或αC码)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接收方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方据此做出是否需要重新发送的决定。发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需重发直至正确为止。
物理信道的突发噪声可能完全"淹没"一帧,即使得整个数据帧或反馈信息帧丢失,这将导致发送方永远收不到接收方发来的反馈信息,从而使传输过程停滞。为了避免出现这种情况,通常引人计时器(Timer)来限定接收方发回反馈信息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Timeout,则可认为传出的帧已出错或丢失,就要重新发送。
由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的危险。为了防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是已经接收但又重新发送来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都能被正确地递交给目标网络层一次。
3.流量控制功能
首先需要说明一下,流量控制并不是数据链路层特有的功能,许多高层协议中也提供流量控制功能,只不过流量控制的对象不同而已。比如,对于数据链路层来说,控制的是相邻两节点之间数据链路上的流量,而对于运输层来说,控制的则是从源到最终目的之间端对端的流量。
由于收发双方各自使用的设备工作速率和缓冲存储空间的差异,可能出现发送方发送能力大于接收方接收能力的现象,若此时不对发送方的发送速率(也即链路上的信息流量)做适当的限制,前面来不及接收的帧将被后面不断发送来的帧"淹没",从而造成帧的丢失而出错。由此可见,流量控制实际上是对发送方数据流量的控制,使其发送速率不致超过接收方所能承受的能力。这个过程需要通过某种反馈机制使发送方知道接收方是否能跟得上发送方的速率。也即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后再继续发送。本节稍后将要介绍的XON/XOFF方案和窗口机制就是两种常用的流量控制方法。
4.链路管理功能
链路管理功能主要用于面向连接的服务。在链路两端的节点要进行通信前,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接。在传输过程中则要维持该连接。如果出现差错,需要重新初始化,重新自动建立连接。传输完毕后则要释放连接。数据链路层连接的建立,维持和释放就称做链路管理。在多个站点共享同一物理信道的情况下(例如在局域网中),如何在要求通信的站点间分配和管理信道也属于数据链路层链路管理的范畴。