OSI与TCP/IP第二层数据链路层功能及作用

OSI七层模型第二层:数据链路层,Data Link Layer

数据链路层工作在两台设备互联的这条链路之间,为每一段单独的链路解决数据传递的问题。

 

那么,一条链路上有什么呢?

首先搞清楚一个概念:不同类型的网络设备之间互联用的接口和连接介质是不一样的。

比如,两台电脑用一条网线连在一起,那连接物体就是电脑上的网卡和这条网线。

两台交换机用网线连在一起,连接物体就是交换机的接口和这条网线。

两台路由器用E1/T1的板卡和一条Serial线连在一起,连接物体就是这个板卡和这条串口线。

一台无线路由器发送无线SSID,一台手机通过这个SSID连接到路由器,那这个无线网卡空气就是连接物体。

如下图:数据在不同的连接介质上会有不同的帧格式(Frame)

数据链路层

 

一条链路上的关键点

回想一下大家使用较老的电脑操作系统时,如Windows XP,你电脑上的有线网卡和无线网卡如果不装驱动,就算连了网线也是无法使用网络的,这是因为电脑上的有线和无线网卡都是以太网卡,需要在数据链路层激活以太网协议对数据进行处理,如果没有安装网卡驱动程序,操作系统就无法在这个网卡上使用数据链路层完成以太网格式的封装校验处理,更无法将数据传出去。

切记,每条链路上如果网卡和接口的不同,设备驱动这个网卡和接口的驱动就不同,使用的协议也就不同,比如电脑上就是以太网协议,还有一些专业的网络设备有ATM协议、PPP协议、HDLC协议、Frame-Relay等协议。(如上图)

 

数据链路层的作用

数据链路层上面是网络层,而下面就是整个协议栈的最底层“物理层”,物理层负责将数据转化为信号,数据链路层负责将信号转化为数据然后交给网络层。

所以数据链路层是一个承上启下的衔接层。从网络参考模型的角度看,物理层之上的各层都有改善数据传输质量的责任,数据链路层是相邻物理层最近的一层,也是最重要的一层。

但关键点是地球环境复杂,不管物理层是光缆、电缆、还是无线电波,都会受到地球磁场、噪音、风雨雷电的影响,从而造成数据信号在物理介质里传输时产生错误,所以数据链路层要解决这些故障。

数据链路层自身当然无法解决物理线路和地球环境带来的物理故障,所以数据链路层利用一些机制来从逻辑上提供一个无差错的链路数据传输环境,如帧同步、重传、差错检测、差错控制、流量控制等方案。

OSI数据链路层层的PDU为:Frame(数据帧)

 


以下内容摘自互联网,来源未知,知道来源的请留言给我


 

数据链路层帧同步

为了使传输中发生差错后只将有错的有限数据进行重发,数据链路层将比特流组合成以帧为单位传送。每个帧除了要传送的数据外,还包括校验码,以使接收方能发现传输中的差错。帧的组织结构必须设计成使接收方能够 明确地从物理层收到的比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。由于网络传输中很难保证计时的正确和一致,所以不可采用依靠时间间隔关系来确定一帧的起始与终止的方法。

(1)字节计数法:这是一种以一个特殊字符表示一帧的起始并以一个专门字段来标明帧内字节数的帧同步方法。接收方可以通过对该特殊字符的识别从比特流中区分出帧的起始并从专门字段中获知该帧中随后跟随的数据字节数,从而可确定出帧的终止位置。面向字节计数的同步规程的典型代表是DEC公司的数字数据通信报文协议DDCMP(Digital Data Communications Message Protocol)。DDCMP采用的帧格式如下图。

DDCMP帧格式

DDCMP帧格式

控制字符SOH标志数据帧的起始。实际传输中,SOH前还要以两个或更多个同步字符来确定一帧的起始,有时也允许本帧的头紧接着上帧的尾,此时两帧间就不必再加同步字符。 count字段共有14位,用以指示帧中数据段中数据的字节数,14位二进制数的最大值为2-1=16383,所以数据最大长度为8×16383=131064。DDCMP协议就是靠这个字节计数来确定帧的终止位置的。DDCMP帧格式中的ACK、SEG、ADDR及FLAG中的第2位,CRC1、CRC2分别对标题部分和数据部分进行双重校验,强调标题部分单独校验的原因是,一旦标题部分中的CONUT字段出错,即失却了帧边界划分的依据,将造成灾难性的后果。由于采用字符计数方法来确定帧的终止边界不会引起数据及其它信息的混淆,因而不必采用任何措施便可实现数据的透明性(即任何数据均可不受限制地传输)。

(2)使用字符填充的首尾定界符法:该法用一些特定的字符来定界一帧的起始与终止,为了不使数据信息位中出现的与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据字符前填充一个转义控制字符(DLE)以示区别,从而达到数据的透明性。但这种方法使用起来比较麻烦,而且所用的特定字符过份依赖于所采用的字符编码集,兼容性比较差。

(3)使用比特填充的首尾标志法:该法以一组特定的比特模式(如01111110)来标志一帧的起始与终止。本章稍后要详细介绍的HDLC规程即采用该法。为了不使信息位中出现的与特定比特模式相似的比特串被误判为帧的首尾标志,可以采用比特填充的方法。比如,采用特定模式01111110,则对信息位中的任何连续出现的五个“1”,发送方自动在其后插入一个“0”,而接收则做该过程的逆操作,即每接收到连续五个“1”,则自动删去其后所跟的“0”,以此恢复原始信息,实现数据传输的透明性。比特填充很容易由硬件来实现,性能优于字符填充方法。

(4)违法编码法:该法在物理层采用特定的比特编码方法时采用。例如,一种被称作曼彻斯特编码的方法,是将数据比特“1”编码成“高-低”电平对,而将数据比特“0”编码成“低-高”电平对。而“高-高”电平对和“低-低”电平对在数据比特中是违法的。可以借用这些违法编码序列来定界帧的起始与终止。局域网IEEE 802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适用于采用冗余编码的特殊编码环境。由于字节计数法中COUNT字段的脆弱性以及字符填充法实现上的复杂性和不兼容性,较普遍使用的帧同步法是比特填充和违法编码法。

违法编码法

违法编码法

 

数据链路层差错控制

一个实用的通信系统必须具备发现(即检测)这种差错的能力,并采取某种措施纠正之,使差错被控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。

对差错编码(如奇偶校验码,检查和或CRC)的检查,可以判定一帧在传输过程中是否发生了错误。一旦发现错误,一般可以采用反馈重发的方法来纠正。这就要求接收方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方所在此作出是不需要重新发送的决定,也即发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重新发送直至正确为止。

物理信道的突发噪声可能完全“淹没”一帧,即使得整个数据帧或反馈信息帧丢失,这将导致发送方永远收不到接收方发来的反馈信息,从而使传输过程停滞.为了避免出现这种情况,通常引入计时器(Timer)来限定接收方发回反馈信息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Timeout),则可认为传的帧已出错或丢失,继而要重新发送。

由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的危险。为了防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是已经接收但又重新发送来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都被正确地递交给目标网络层一次。

用以使发送方确定接收方是否正确收到了由它发送的数据信息的方法称为反馈差错控制。通常采用反馈检测 自动重发请求(ARQ)两种基本方法实现。

 

反馈检测法

反馈检测法也称回送校验或“回声”法,主要用于面向字符的异步传输中,如终端与远程计算机间的通信,这是一种无须使用任何特殊代码的错误检测法。

双方进行数据传输时,接收方将接收到的数据(可以是一个字符,也可以是一帧)重新发回发送方,由发送方检查是否与原始数据完全相符。若不相符,则发送方发送一个控制字符(如DEL)通知接收方删去出错的数据,并重新发送该数据;若相符,则发送下一个数据。

反馈检测法原理简单、实现容易,也有较高的可靠性,但是,每个数据均被传输两次,信道利用率很低。一般,在面向字符的异步传输中,信道效率并不是主要的,所以这种差错控制方法仍被广泛使用。

 

自动重发法

ARQ法:实用的差错控制方法,应该既要传输可靠性高,又要信道利用率高。为此让发送方将要发送的数据帧附加一定的冗余检错码一并发送,接收方则根据检错码对数据帧进行错误检测,若发现错误,就返回请求重发的答,发送方收到请求重发的应答后,便重新传送该数据帧。这种差错控制方法就称为自动请求法(Automatic Repeat reQuest),简称ARQ法。

ARQ法仅返回很少的控制信息,便可有效地确认所发数据帧是否被正确接收。ARQ法有若干种实现方案,如空闲重发请求(Idle RQ)和连续重请求(Continuous RQ)是其中最基本的两种方案。

 

空闲重发请求

Idle RQ:空闲重发请求方案也称停等(stop-and -wait)法,该方案规定发送方每发送一帧后就要停下等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧。

空闲重发请求方案的实现过程如下:

  • 发送方每次仅将当前信息帧作为待确认帧保留在缓冲存储器中。
  • 当发送方开始发送信息帧时,随即启动计时器。
  • 当接收方检测到一个含有差错的信息帧时,便舍弃该帧。
  • 当接收方收到无差错的信息帧后,即向发送方返回一个确认帧。
  • 若发送方在规定时间内未能收到确认帧(即计时器超时),则应重发存于缓冲器中待确认信息帧。
  • 若发送方在规定时间内收到确认帧,即将计时器清零,继而开始下一帧的发送。

从以上过程可以看出,空闲RQ方案的收、发双方仅须设置一个帧的缓冲存储空间,便可有效地实现数据重发并保证收接收方接收数据不会重份。空闲RQ方案最主要的优点就是所需的缓冲存储空间最小,因此在链路端使用简单终端的环境中被广泛采用。

 

连续重发请求

(Continuous RQ):连续重发请求方案是指发送方可以连续发送一系列信息帧,即不用等前一帧被确认便可发送下一帧。

这就需要一个较大的缓冲存储空间(称作重发表),用以存放若干待确认的信息帧。每当发送站收到对某信息帧的确认帧后,便从重发表中将该信息帧删除。所以,连续RQ方案的链路传输效率大大提高,但相应地需要更大的缓冲存储空间。

连续RQ方案的实现过程如下:

  • 发送方连续发送信息帧而不必等待确认帧的返回。
  • 发送方在重发表中保存所发送的每个帧的拷贝,重发表按先进先出(FIFO)队列规则操作。
  • 接收方对每一个正确收到的信息帧返回一个确认帧,每一个确认帧包含一个唯一的序号,随相应的确认帧返回。
  • 接收方保存一个接收次序表,它包含最后正确收到的信息帧的序号。
  • 当发送方收到相应信息帧的确认帧后,从重发表中删除该信息帧。
  • 当发送方检测出失序的确认帧(即第n号信息帧和第n+2号信息帧的确认帧已返回,而n+1号的确认帧未返回)后,便重发未被确认的信息帧。

实际操作过程中,两节点间采用双工方式将确认帧插在双方的发送信息帧中来传送的。上面的连续RQ过程是假定在不发生传输差错的情况下描述的。

如果差错出现,如何进一步处理可以有两种策略,即Go-back-N和选择重发。

Go-back-N是当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的信息帧之后的所有未被确认的帧,或者当发送方发送了n帧后,若发现该n帧的前一帧在计时器超时后仍未返回其确认信息,则该帧被判定为出错或丢失。对接收方来说,因为这一帧出错,就不能以正确的序号向它的高层递交数据,对其后发送来的n帧也可能都不能接收而丢弃,因此,发送方发现这种情况,就不得不重新发送该出错帧及其后的n帧,这就是Go-back-N(退回N)法名称的由来。Co-back-N法操作过程如下图所示:

Co-back-N法

Co-back-N法

图中假定发送完8号帧后,发现2号帧的确认返回在计时器超时后还未收到,则发送方只能退回从2号帧开始重发。Go-back-N可能将已正确传送到目的方的帧再传一遍,这显然是一种浪费。另一种更好的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧,一旦收到重新传来的帧后,就可与原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(Selective repeat)。

其工作过程如下图所示。图中2号帧的否认返回信息NAK2要求发送方选择重发2号帧。显然,选择重发减少了浪费但要求接收方有足够大的缓冲区容量。

Selective repeat

Selective Repeat

 

数据链路层流量控制

流量控制并不是数据链路层所特有的功能,许多高层协议中也提供流时控功能,只不过流量控制的对象不同而已。

比如,对于数据链路层来说,控制的是相邻两节点之间数据链路上的流量,而对于传输层来说,控制的则是从源到最终目的之间端的流量。由于收发双方各自使用的设备工作速率和缓冲存储的空间的差异,可能出现发送方发送能力大于接收方接收能力的现象,如若此时不对发送方的发送速率(也即链路上的信息流量)作适当的限制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。

由此可见,流量控制实际上是对发送方数据流量的控制,使其发送率不致超过接收方所能承受的能力。这个过程需要通过某种反馈机制使发送方知道接收方是否能跟上发送方,也即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后继续发送。

差错控制是数据链路层功能中的一个部分,另一个重要部分是流量控制。流量控制涉及链路上字符或帧的传输速率的控制,以使接收方在接收前有足够的缓冲存储空间来接受每一个字符或帧。

例如,在面向字符的终端--计算机链路中,若远程计算机为许多台终端服务,它就有可能因不能在高峰时按预定速率传输全部字符而暂时过载。同样,在面向帧的自动重发请求系统中,当待确认帧数量增加时,有可能超出缓冲器存储容量,也造成过载。

 

XON/XOFF方案

增加缓冲存储空间在某种程度上可以缓解收、发双方在传输速率上的差别,但这是一种被动的和消极的方法,实现起来有诸多的不便和限制。

因为一方面系统不允许开设过大的缓冲空间,另一方面对于速率显著失配并且又传送大型文件的场合,仍会出现缓冲存储空间不够。XON/XOFF方案则是一种相比之下更主动、积极的流量控制方法。

XON/XOFF方案中使用一对控制字符来实现流量控制,其中XON采用ASCII字符字集中的控制字符DC1、XOFF采用ASCII字符集中的控制字符DC3。当通信链上的接收方发生过过载时便向发送方发送一个XOFF字符后便暂时停止发送数据,等接收方处理完缓冲存储器中中的数据,过载恢复后,再向发送方发送一个XON字符,以通知发送方恢复数据发送。在一次数据传输过程中,XOFF、XON的周期可重复多次,但对用户是透明的。许多异步数据通信软件包均支持XON/XOFF协议。这种方案也可用于计算机向打印机或其它终端设备发送字符,在这种情况下,打印机或终端设备中的控制部件用以控制字符流量。

 

窗口机制

为了提高信道的有效利用率。如前节所述采用了发送方不等待确认帧返回就连续发送若干帧的方案,这样的发送过程就象一条连续的流水线,故又称为管道(pipelining)技术。

由于允许连续发送多个未被确认折帧,帧号就采用多位二进制数才能加以区分。因为凡被发送出去但沿尚未被确认的帧都可能出错或丢失而要求重发,因而这些帧都要保留下来。这就要求发送方有较大的发送缓冲区保留可能要求重发的未被确认的帧。但是缓冲区容量总是有限的,如果接收方不能以发送方的发送速率处理收到的帧,则还是可能用完缓冲容量而暂时过载。为此,可引入类似于空闲RQ方案的调整措施,其本质是在收到一确定帧之前,对发送方可发送的帧的数目加以限制,这是由发送方调整保留在重发表中的待确认帧的数目来实现的。如果接收方来不及对收到的帧进行处理,则接收方停发确认信息,此时送方的重发表增长,当达到重发表限度时,就不再发送新帧,直至再次收到确认信息为止。

为了实现此方案,存放未确认帧的重发表中应设置未确认帧数目的最大限度,这一限度被称为链路的发送窗口。显然,如果窗口设置为1,即发送方缓冲能力公为一个帧,则传输控制方案就回到了空闲RQ方案,此时传输效率很低,故窗口限度应选为使接收方尽量能处理或接受收到的所有帧。当然选择时还必须考虑诸如帧的最大长度、可使用的缓冲存容量以及传输的比特速率等因素。重发表是一个连续序号的列表,对应发送方已发送但尚未确认的那些帧。这些帧的序号有一个最大值即发送窗口的限度。所谓发送窗口就是指示发送方已发送但尚未确认的帧序号队列的界,其上、下界分别称为发送窗口的上、下沿,上、下沿的间距称为窗口尺寸。接收方类似地有接收窗口,它指示允许接收的帧的序号。接收窗口的上、下界也是随时间滑动的。

Selective repeat数据链路层窗口流控机制发送方每次发送一帧后,待确认帧的数目便增1;同样,发送方每收到一个确认信息后,待确认帧的数目便减1。当重发计数值,即待确认帧的数目等于发送窗口时,便停止发送新的帧。一般帧号只取有限位二进制数,到一定时间后就又反复循环,若帧号配3位二进制,则帧号在0~7间循环。如果发送窗口限度取值为2,则发送过程如图3-4所示。图中发送方阴影表示发送窗口,接收方阴影则相应可视作接收窗口。当传送过程进行时,窗口位置一直在滑动,所以也称为滑动窗口(Slidding Window),或简称为滑窗。

滑动窗口的状态变化过程可叙述如下(假设发送窗口为2,接收窗口为1)。

  • 初始态,发送方没有帧发出,发送窗口前后沿相等。接收窗口限度为1,它允许接收0号帧。
  • 发送方已发送0号帧,此时发作口打开(即前沿加1),窗口对准0号,表示已发出但尚未收到确认返回信息。接收窗口状态同前,指示允许接收0帧。
  • 发送方在未收到0帧的确认返回信息前,继续发送1号帧。发送窗口状态不变。
  • 接收方已收到0帧,窗口滑动一格,表示准备接收1号帧。发送窗口状态不变。
  • 发送方已收到0号帧的确认返回信息,发送窗口后沿加1,表示从重发表中删除0号帧,接收窗口状态不变。
  • 发送方继续发送2帧,发送窗口前沿加1,表示2号帧也纳入待确认之列。接收窗口状态仍不变。
  • 接收方已收到1号帧,接收窗口滑动一格,表示准备接收2号帧。发送窗口状态不变。
  • 发送方收到接收方发来的1号帧收毕的确认信息,发送窗口后沿加1,表示从重发表中删除最早进入的1号帧,接收窗口状态不变。

一般说来,凡是在一定范围内到达的帧,那怕不按顺序,接收方也要接收下来。若把这个范围看成是接收窗口的话,则接收窗口的大小应该是大于1的,而Go-back-N正是接收窗口等于1的一个特例。选择重发也可以看作是一种滑动窗口协议,只不过其发送窗口和接收窗口都大于1。

若从滑动窗口的观点来统一看待空闲RQ、Go-back-N及选择重发三种协议,它们的差别公在于各自窗口的大小不同而已:

  • 空闲RQ:发送窗口=1,接收窗口=1
  • Go-back-N:发送窗口>1,接收窗口=1
  • 选择重发:发送窗口>1,接收窗口>1

若帧序号采用3位二进制编码,则最大序号为SMAX=2^3-1=7。对于有序接收方式,发送窗口最大尺寸选为SMAX;对于无笆接收方式,发送窗口最大尺寸至多是序号范围的一半。管理超时控制的计时器应等于发送缓冲器数,而不是序号空间的大小。实际上,每一个缓冲器应对应一个计时器,当计时器超时时,该对应缓冲器的内容重发。按收方必须设置的缓冲器数应该等于接收窗口尺寸,而不是序号空间的大小。

 

数据链路层链路管理

链路管理功能主要用于面向连接的服务。当链路两端的节点要进行通信前,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持该连接。如果出现差错,需要重新初始化,重新自动建立连接。传输完毕后则要释放连接。数据连路层连接的建立维持和释放就称作链路管理。在多个站点共享同一物理信道的情况下(例如在LAN中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。

未经允许不得转载:CTO十万个为什么 » OSI与TCP/IP第二层数据链路层功能及作用

赞 (0)