一:数据链路层功能
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源机网络层来的数据可靠地传输到相邻节点的目标机网络层。
功能主要有:
1.如何将数据组合成数据块(帧头+数据(分组)+帧尾),在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;
2.如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;
3.以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
二:为网络层提供的服务
设计目标就是为网络层提供各种需要的服务。
1):实际的服务随系统的不同而不同,但是一般情况下,数据链路层会向网络层提供以下三种类型的服务:
1.无确认的无连接服务
2.有确认的无连接服务
3.有确认的面向连接服务
2):在OSI参考模型中,数据链路层向网络层提供服务如下:
1.定义操作连接的程序;
2.封装数据包为数据帧;
3.数据链路建立、维护与释放的链路管理工作;
4.数据链路层服务数据单元帧的传输;
5.差错检测与控制;
6.数据流量控制;
7.在多点连接或多条数据链路连接的情况下,提供数据链路端口标识的识别,支持网络层实体之间建立网络连接;
8.帧接收顺序控制。
三:成帧
为了使传输中发生差错后只将有错的有限数据进行重发,数据链路层将比特流组合成以帧为单位传送。
每个帧除了要传送的数据外,还包括校验码,以使接收方能发现传输中的差错。
帧的组织结构必须设计成使接收方能够明确地从物理层收到的比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。
由于网络传输中很难保证计时的正确和一致,所以不可采用依靠时间间隔关系来确定一帧的起始与终止的方法。
1):常用四中方法:
1.字节计数法,此方法是在帧头部中使用一个字符计数字段来标明帧内字符数。接收端根据这个计数值来确定该帧的结束位置和下一帧的开始位置。
2.含字节填充的分界符法,此方法是使用特殊字符作伪帧的起始和结束(数据中出现特殊字符需要转义,如0xFF->0xFE+0x01 0xFE->0xFE+0x00)。
3.含位填充的分界标志法,此方法是帧首尾标志法用一个特殊的位模式“01111110”(6个1)作为帧的开始和结束标志。当发送方在数据部分遇到 5 个连续的“1”时,就自动在其后插入一个“0”,即所谓的“逢五个 1 插 0”。当接收方遇到 5 个连续的“1”之后是一个“0”时,就删除该“0”,即所谓的“逢五个 1 删 0”。这样就保证了在帧的数据部分不会出现“01111110”位串,从而使接收方能准确地判断出帧边界。
4.物理层编码违例法,该法在物理层采用特定的比特编码方法时采用。例如,一种被称作曼彻斯特编码的方法,是将数据比特“1”编码成“高-低”电平对,而将数据比特“0”编码成“低-高”电平对。而“高-高”电平对和“低-低”电平对在数据比特中是违法的。可以借用这些违法编码序列来定界帧的起始与终止。
四:差错控制
数据链路层的一个重要工作就是如何管理好定时器和序列号,从而保证每一帧最终都恰好一次的被传递到目的机网络层。
1:差错编码
对差错编码(如奇偶校验码,检查和或CRC)的检查,可以判定一帧在传输过程中是否发生了错误。一旦发现错误,一般可以采用反馈重发的方法来纠正。
这就要求接收方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方所在此作出是不需要重新发送的决定,也即发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需重直至正确为止。
2:定时器
计时器(Timer)来限定接收方发回反馈信息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Tineout),则可认为传的帧已出错或丢失,继而要重新发送。
3:序列号
同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的危险。为了防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是已经接收但又重新发送来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都被正确地递交给目标网络层一次。
五:流量控制
流量控制并不是数据链路层所特有的功能,许多高层协议中也提供流时控功能,只不过流量控制的对象不同而已。
对于数据链路层来说,控制的是相邻两节点之间数据链路上的流量,而对于运输层来说,控制的则是从源到最终目的之间端的流量。
收发双方各自使用的设备工作速率和缓冲存储的空间的差异,可能出现发送方发送能力大于接收方接收能力的现象,如若此时不对发送方的发送速率(也即链路上的信息流量)作适当的限制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。
1):常用办法有两种:
1.基于反馈的流控制:接收方给发送发发现偶那个回的消息,允许它发送更多的数据,或者至少也要告诉发送方它的情况怎么样
2.基于速率的流控制:使用这种方法的协议有一种内置的机制,它限制发送发传输的速率而无需利用接收方的反馈信息。
六:链路管理
链路管理功能主要用于面向连接的服务。
当链路两端的节点要进行通信前,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持该连接。
如果出现差错,需要重新初始化,重新自动建立连接。
传输完毕后则要释放连接。
数据连路层连接的建立维持和释放就称作链路管理。
在多个站点共享同一物理信道的情况下(例如在LAN中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。
七:差错控制
用以使发送方确定接收方是否正确收到了由它发送的数据信息的方法称为反馈差错控制。
1:反馈检测法
这是一种无须使用任何特殊代码的错误检测法。
双方进行数据传输时,接收方将接收到的数据(可以是一个字符,也可以是一帧)重新发回发送方,由发送方检查是否与原始数据完全相符。
若不相符,则发送方发送一个控制字符(如DEL)通知接收方删去出错的数据,并重新发送该数据;
若相符,则发送不一个数据。反馈检测法原理简单、实现容易,也有较高的可靠性,但是,每个数据均被传输两次,信道利用率很低。
一般,在面向字符的异步传输中,信道效率并不是主要的,所以这种差错控制方法仍被广泛使用。
2:自动重发请求法(ARQ法)
实用的差错控制方法,应该既要传输可靠性高,又要信道利用率高。
为此让发送方将要发送的数据帧附加一定的冗余检错码一并发送,接收方则根据检错码对数据帧进行错误检测,
若发现错误,就返回请求重发的答,发送方收到请求重发的应答后,便重新传送该数据帧。
这种差错控制方法就称为自动请求法(Automatic Repeat reQuest),简称ARQ法。
ARQ法仅返回很少的控制信息,便可有效地确认所发数据帧是否被正确接收。
ARQ法有若干种实现方案,如空闲重发请求(Idle RQ)和连续重请求(Continuous RQ)是其中最基本的两种方案。
3:空闲重发请求,也称停等(stop-and -wait)法,
该方案规定发送方每发送一帧后就要停下等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧。
空闲重发请求方案的实现过程如下: 发送方每次仅将当前信息帧作为待确认帧保留在缓冲存储器中。
当发送方开始发送信息帧时,随即启动计时器。
当接收方检测到一个含有差错的信息帧时,便舍弃该帧。
当接收方收到无差错的信息帧后,即向发送方返回一个确认帧。
若发送方在规定时间内未能收到确认帧(即计时器超时),则应重发存于缓冲器中待确认信息帧。
若发送方在规定时间内收到确认帧,即将计时器清零,继而开始下一帧的发送。
4: 连续重发请求:连续重发请求方案是指发送方可以连续发送一系列信息帧,即不用等前一帧被确认便可发送下一帧。
发送方连续发送信息帧而不必等待确认帧的返回。发送方在重发表中保存所发送的每个帧的拷贝。
重发表按先进先出(FIFO)队列规则操作。接收方对每一个正确收到的信息帧返回一个确认帧。
每一个确认帧包含一个唯一的序号,随相应的确认帧返回。接收方保存一个接收次序表,它包含最后正确收到的信息帧的序号。
当发送方收到相应信息帧的确认帧后,从重发表中删除该信息帧。
当发送方检测出失序的确认帧(即第n号信息帧和第n+2号信息帧的确认帧已返回,而n+1号的确认帧未返回)后,便重发未被确认的信息帧。
错误处理的两种方法:
Go-back-N(退回N)法:当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的信息帧之后的所有未被确认的帧,或者当发送方发送了n帧后,若发现该n帧的前一帧在计时器超时后仍未返回其确认信息,则该帧被判定为出错或丢失。对接收方来说,因为这一帧出错,就不能以正确的序号向它的高层递交数据,对其后发送来的n帧也可能都不能接收而丢弃,因此,发送方发现这种情况,就不得不重新发送该出错帧及其后的n帧。
选择重发:当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧,一旦收到重新传来的帧后,就可与原已存于缓冲区中的其余帧一并按正确的顺序递交高层。
八:滑动窗口协议
1):捎带确认
数据在通道上传输,在多数实际的情况下,需要双向传输数据。一种可获得双工数据传输的方法是使用两条独立的信道,每一信道分别用作单工数据传输(传输方向不同)。如果这样做,就有了两条独立的物理电路,每条都有“正向”信道(用于传输数据),和一个“反向”信道(用于确认)。在这两种情况下,反向信道的带宽基本上都给浪费了。
较好的想法是使用同一条线路进行数据的双向传输。在同一线路上先后发送数据帧和控制帧,是对两条独立的数据通道进行了改进。当然,这样仍还有进一步改进可能。当一个主机1发送的数据帧到达主机2后,主机2的接收过程不是立即发送一个独立的控制帧进行应答,而是维持等待,直到向主机1传送下一个分组时,才将控制帧(确认信息)附加到即将发送的数据帧上。也就是说,确认是由下一个发送的数据帧上捎带传输的。这种暂时延迟待发确认,以便附加在下一个将发送的数据帧的技术叫做捎带。
主要优点在于:能较好地利用有效的信道带宽。然而,捎带也带来了单独确认所没有的复杂性。需要等待多长时间,才能把捎带确认的TPDU发送出去呢?如果数据等待时间超过了发送方的时间间隔,那么就会被重发,违背了进行确认的原意。
2):滑动窗口:需要发送方和接收方通过确认来保存可靠通信的协议方式常被称为滑动窗口协议,要遵循下述要求:协议必须要按分组传送顺序,把这些分组递交给目的机器,即协议必须按发送的顺序传输所有的TPDU。
发送窗口:发送方都维持了一个连续的允许发送的帧的序号。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
接收窗口:接收方也维持了一个连续的允许接收的帧的序号。
1:1位滑动窗口协议
当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。
该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。
由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。
由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。
2:使用后退N帧技术的协议
停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退n协议。
发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍没有收到确认帧,就要重发相应的数据帧。
后退n协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了错),这种做法又使传送效率降低。
3:使用选择性重传的协议
在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。
一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层(网络层)。
九:数据链路层协议
1):面向字符的链路层协议
1:ISO的IS1745,基本型传输控制规程及其扩充部分(BM和XBM)
2:IBM的二进制同步通信规程(BSC)
3:DEC的数字数据通信报文协议(DDCMP)
4:PPP点到点协议(Point-to-Point Portocol)
PPP三大成就:
1. 明确地划分出一帧的尾部和下一帧的头部的成帧方式。这种帧格式也处理错误检测工作。
2. 当线路不再需要时,挑出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。这个协议被称为链路控制协议LCP(link control protocol)。
3. 用独立于所使用的网络层协议的方法来商议使用网络层的哪些选项。对于每个所支持的网络层来说,所选择的方法有不同的网络控制协议NCP(network control protocol)。
PPP帧不仅能通过拨号电话线发送出去,而且还能通过SONET或真正面向位的HDLC线路(即路由器与路由器相连)发送出去。
帧格式:PPP帧格式和HDLC帧格式相似,二者主要区别:PPP是面向字符的,而HDLC是面向位的。
帧头(01111110)+地址字段(111111)+控制字段(00000011)+协议字段(代表信息字段类型)+信息字段+校验和(16位CRC)+帧尾(01111110)
其中:协议字段不同,后面的信息字段类型就不同。如:
0x0021——信息字段是IP数据报
0xC021——信息字段是链路控制数据LCP
0x8021——信息字段是网络控制数据NCP
0xC023——信息字段是安全性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段是安全性认证CHAP
注意,帧头不能采用HDLC所使用的零比特插入法,而是使用一种特殊的字符填充(转义)。
用户拨号接入ISP时,路由器的调制解调器对拨号做出应答,并建立一条物理连接。这时PC机向路由器发送一系列的LCP分组(封装成多个PPP帧)。这些分组及其响应选择了将要使用的一些PPP参数。
一旦双发对PPP参数达成一致后,再发送一序列NCP分组(用于配置网络层),接着就进行网络层培植,NCP给新接入的PC机分配一个临时的IP地址,这样PC机就成为Internet上一个主机了。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着LCP释放数据链路层连接,最后释放的是物理层的连接。
2):面向比特的链路层协议
1:IBM的SNA使用的数据链路协议SDLC同步数据链路控制(Synchronous Data Link Control protocol);
2:ANSI修改SDLC,提出ADCCP高级数据通讯控制规程(Advanced Data Communication Control Procedure);
3:ISO修改SDLC,提出HDLC高级数据链路控制(High-level Data Link Control)
特点:协议不依赖于任何一种字符编码集;数据报文可透明传输,用于实现透明传输的“0比特插入法”易于硬件实现;全双工通信,不必等待确认便可连续发送数据,有较高的数据链路传输效率;所有帧均采用CRC校验,对信息帧进行编号,可防止漏收或重份,传输可靠性高;传输控制功能与处理功能分离,具有较大灵活性和较完善的控制功能。
帧格式:帧头(01111110)+地址字段+控制字段(序列号,确认及其它用途)+信息字段+校验和(16位CRC)+帧尾(01111110).
4:CCITT修改HDLC,提出LAP链路访问规程(Link Access Procedure)作为X.25网络接口标准的一部分,后来改为LAPB。