浅谈数据链路层协议

浅谈数据链路层协议

摘 要 数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到目标节点的网络层,实现点到点连接。数据链路层具有两个子层,分别是逻辑链路控制(LLC)子层和介质访问控制(MAC)子层,前者主要处理两个站点之间帧的交换,提供可靠的帧传递并做差错控制,流量控制等,后者提供介质访问控制服务,主要解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题等。本文主要详细讲述数据链路层使用的一些协议的相关问题,如组帧方式、差错控制、介质访问控制、MAC寻址方式等。
关键词 数据链路层;协议;组帧;差错控制;介质访问控制;MAC寻址

一、引言
随着人类社会的不断发展进步,全球信息化时代已经到来,人们对信息的要求越来越高,为了更有效、更可靠、更安全地传输、处理信息,研究计算机通信网络变得非常有必要。计算机通信网络中,信息的传输都是从一端的封装开始,到另一端的解封装结束。计算机通信网络中的连接常采用分层的方式实现。分层后,各层工作独立,层之间通过接口联系,下层服务于上层,降低协议工作的复杂程度,且灵活性好,任何一层的改变不影响其它层,易于维护,另外,每层的实现技术可以不同,减少了实现的复杂度,还便于标准化。计算机通信网络中常用的分层方式有三种,即OSI七层模型和TCP/IP(DoD)四层模型,以及综合两种模型的五层模型。图1示出了三种参考模型的映射关系。
在这里插入图片描述

图1 三种参考模型的映射关系
在有关讨论的基础之上,我们能够更准确地讨论网络的体系结构。构成网络体系结构的抽象对象称为协议,每种协议都定义了两种接口,一是为同一计算机上想使用其通信服务的其他对象定义的一个服务接口,这个服务接口定义了本地对象可以在该协议上执行的操作,即自身提供的服务;其次是为另一台机器上对等实体定义的一个对等接口,这个对等接口定义了对等实体之间实现通信服务而交换的信息的格式和含义。从图1中我们也可以发现传输层和网络层是参考模型的两个核心层,但数据链路层同样重要,不可或缺。数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其具有两个子层,分别是逻辑链路控制(LLC)子层和介质访问控制(MAC)子层,有各自的功能。本文主要详细讲述数据链路层为实现其功能而使用的一些协议,如组帧方式、差错控制、介质访问控制、MAC寻址方式等。

二、组帧
参考模型的每一层将建立各自的协议数据单元(PDU),数据链路层的PDU称之为帧,那么是如何组帧的呢?主要有三种方式,下面将结合相关协议简单介绍。
第一种组帧方式是面向字节的协议,他把每一帧看成一个字节集,以字节为单位确认帧体(IP分组)的位置,这种方式又分为两种结构,一种是BISYNC协议、PPP协议等使用起止标记法,另一种是DDCMP协议使用的字节计数法。图2中分别示出了BISYNC协议和DDCMP协议定义的帧格式。BISYNC使用特定起止字符表示帧的开始与结束,一帧的开始由一个特定的SYN(同步)字符表示,其后帧的数据部分包含在两个特殊的起止字符STX(正文开始)与ETX(正文结束)之间,SOH(首部开始)字段功能与STX一致。这样存在的问题是,帧体Body内可能也出现与ETX字符相同的字节,这时接收方会提前认为帧结束,导致差错帧的出现。通过利用转义字符对帧体内的“ETX字符”转义可有效的解决这个问题,这种解决方式称之为字符填充法。PPP协议具有相似的结构和处理方法,只是起止字符仅在帧的首尾两处添加,且起止字符用同一个特定的标志字段“01111110”表示。
在这里插入图片描述
在这里插入图片描述

图2 BISYNC帧格式(上)和DDCMP帧格式(下)
DDCMP协议中采用的字节计数法,用一个特定的Count字段来指明帧体中包含的字节数,接收方通过这个字段确定帧的结束位置。但这种方式存在一个致命性的缺点,一旦接收方接收方的序列中Count字段出现误码,则不能够正确的检测到帧的结束位置,这种差错称为组帧差错(起止标记法也可能出现这种错误)。另外,组帧差错还可能引起后续帧的错误接收,导致差错传播,问题就会很多了。
第二种组帧方式是面向比特的协议(HDLC),与面向字节的协议不同,他不关心字节的边界,把帧当做比特的集合,以比特序列为单位确定帧的起始位置(该序列可跨字节边界)。图3示出了HDLC帧格式,其也用特定的比特序列“01111110”表示帧的开始与结束,但同样这一序列也可出现在帧体中,HDLC采用比特填充法解决这一问题。在发送方,除试图发送起止符时外,其余任何时候发送5个连续1以后,就在发送下一比特之前插入一个0。在接收方,如果已经收到了5个连续的1,在观察下一比特,如果是0,则一定是填充的0,去掉之,如果是1,则继续观察下一比特,如果是0,则为帧结束标志,否则一定是出现了误码(当然前边的几个比特判断时也可能出现误码),则丢弃整个帧。这几种方式,在判断帧体位置的必要字段出现误码时,受到的影响都会比较大。第三种组帧方式是基于时间的组帧,多用于同步光纤网络(SONET),主要采用复用的方式,在此不再详细介绍。
在这里插入图片描述

图3 HDLC帧格式

三、差错控制
由于噪声和干扰的存在,接收方接收到的帧中会发生误码,为了可靠的帧传输,因此在图2、图3所示的帧格式中,我们都可以看到一个CRC字段,这个字段就是是用于检验传输差错的。具有检错检验功能的技术有两种,一是检错编码,二是纠错编码,前者只能检测错误,这时接收方只能丢弃差错帧,需要发送方重发数据帧,而后者接收方可以自己根据纠错码纠正错误(能力有限,超过能力范围也要重发)。但实际上,纠错编码的开销比较大,复杂度高,往往不采用,比如海明编码。检验传输差错最常用的算法是循环冗余检验(CRC)算法,另外比较常用的简单算法还有二维奇偶校验和校验和(一般不用于数据链路层)等。
任何的差错检验算法的基本思想都是在帧中加入冗余比特来确定是否存在差错,这些冗余比特不传输信息,只用于差错检测,其差错检验能力与码间的海明距离决定。编码规则在此不予详细介绍,但需要明确的是,一是由于所用的冗余比特位也能出现误码,这时即使信息比特位无误码,接收方也会判定此帧出现误码,将其丢弃,要求发送方重发该帧,这相当于“没事找事(误判)”,再者信息比特位与冗余比特位还可能会同时发生误码,最终结果导致接收方判定此帧无误码,继续接受下一帧,这就相当于漏判,但这两种情况出现的可能都比较小,尤其后者更小,因此系统性能还是非常好的。
为了可靠传输,接收方一旦检测到错误,就必须将差错帧丢弃,然后要求发送方重传,通过确认和超时两种机制可以控制是否重传。确认机制是指接收方收到一帧后,如果检测其无差错,则直接向发送方发送或捎带发送一个确认信号ACK信号,发送端收到ACK时,则表明帧发送成功。如果在规定的一段时间内,发送方仍未收到ACK,则判定为超时,重传该帧。使用确认和超时实现可靠传输的策略称为自动请求重发(ARQ),常用的ARQ算法也有三种。
最简单的一种ARQ算法为停止-等待算法,他的思想很简单,就是在发送方发送一帧后,除非在规定的时间内收到该帧的确认才继续传下一帧,否则超时重传该帧。确认和超时机制存在一个问题,如果确认帧在传输过程中丢失了,则超时后,发送方会重传该帧,接收方接收后可能认为这是下一帧,从而导致重复的问题,因此传输过程中必须对帧进行编号,这在所有ARQ算法中都是必须的。另外,停止-等待算法有一个显著缺点,就是他每次只传输一帧,而且还要等待确认,即可能浪费了链路容量,又浪费了时间,效率较低。
为解决效率低的问题,一种新的ARQ算法——滑动窗口算法应运而生,这种算法运行发送方一次性最多发送窗口大小的帧数,接收方对每一帧都要确认。图4分别示出了停止-等待算法和滑动窗口算法的时间线。这种算法,超时后重传有两种机制,一种是回退N帧,即将第一个超时帧及其后的所有帧全部重传,采用此机制时,确认机制可用累计确认原则,另一种是选择性重传,只重传超时帧,这时应注意保证帧的顺序。这种ARQ算法要注意选择合适的窗口尺寸,并对帧合理编号,进行流量控制。
在这里插入图片描述
在这里插入图片描述

图4 停止-等待算法(上)和滑动窗口算法的时间线(下)
最后一种ARQ算法是并发逻辑信道,仍采用简单的停止-等待算法,但能保持信道满载,效率较高,但其不能保持帧的顺序,也没有流量控制,因此目前应用不多。
值得注意的是,当前有许多数据链路层技术中都忽略了差错控制功能,而在高层协议中提供可靠传输,比如传输层、应用层,但究竟在哪一层提供可靠传输依赖于很多因素,本节所提到的思想不仅只适用于数据链路层,也适用于其它层。

四、介质访问控制
信道资源一般都是有限的,但也由多用户共享,这时如果不合理的分配,就会导致冲突的产生,通过多路访问协议动态分配信道资源,可以减小冲突发生的可能,提高信道利用率。多路访问协议包括随机访问协议和受控访问协议,前者各站点间随机占用信道,可能出想冲突,后者站点被分配占用信道,主要通过信道复用方式实现,不会发生冲突。典型的随机访问协议包括ALOHA协议、CSMA协议、CSMA/CD协议、CSMA/CA协议等,受控访问协议包括TDM、FDM等。本文主要介绍随机访问协议。
ALOHA协议分为纯ALOHA协议和分隙ALOHA协议。纯ALOHA协议中,任何一个站都可以在帧生成后立即发送(可能冲突),并通过信号的反馈,检测信道,以确定发送是否成功。如发送失败,则经随机延时后再发送。这样不关心信道状态就直接发送数据,在任意时刻都可能造成冲突的产生。分隙ALOHA是把时间分成时隙,时隙的长度对应一帧的传输时间。新帧的产生是随机的,但分隙ALOHA不允许随机发送,凡帧的发送必须在时隙的起点,因此,冲突只发生在时隙的起点,冲突发生时只浪费一个时隙,且一旦某个站占用时隙并发送成功,则在该时隙内不会出现冲突。这时,冲突只会发生在时隙的起点,因此降低了冲突发生的可能,但信道利用率都还是不太高。
CSMA协议是指载波侦听多路访问协议,特点是先听后发,他包括非持续式、1-持续式、p-持续式三种方式。非持续式是指经侦听,如果介质空闲,开始发送,否则等待一个随机分布的时间,然后再侦听,这样可能会有一段时间没有数据传送,造成浪费。1-持续式是指经侦听,如介质空闲,则发送,否则持续侦听,一旦空闲立即发送,如果发生冲突,等待一个随机分布的时间再进行侦听,这样如果两个以上的站点等待发生,则一旦介质空闲必然发生冲突。p-持续是指在1-持续式的基础上,改为如果介质空闲,那么以p的概率发送,以(1–p)的概率延迟一个时间单元发送,这种方式再次降低了冲突的可能。但要注意的是,由于传播延迟时间的存在,任何方式在数据发出以后仍可能会遇到冲突。
典型以太网(802.3)使用总线型结构,具有强大的生命力,以太网的多路访问协议使用带冲突检测(CD)的CSMA实现。CSMA/CD的特点是先听后发、边发边听,与CSMA不同的是在其基础上所有工作站在发送的同时也接收自己的信号,监测发送的情况,一旦收到的信号与发出的不一致,就说明发生了冲突。发送站感知冲突后立即停止帧的发送,并且发一个简短的堵塞信号(称强化冲突信号),通知网上各站已经发生冲突,本站及网上所有站都等待一段随机分布的时间,然后再按CSMA/CD方式重发该帧,这段时间可以用二进制指数后退算法确定。冲突不确定性使整个以太网平均数据率远小于以太网最高数据率。同样由于传播延时数据的存在,CSMA/CD存在一个冲突窗口:网络的最大冲突检测时间应为两倍两个最远距离站点间的传输时间,为实现冲突检测,时隙宽度应等于冲突窗口,发送有效帧的时间应大于冲突窗口。
在这里插入图片描述
在这里插入图片描述

图5 隐藏节点问题(上)和暴露节点问题(下)
与以太网不同,在无线网络中考虑图5中的两种情况,两圆分别代表A、C的通信范围。在左图中,假设A、C同时均想与B通信,但A、C之间不会觉察到对方,经侦听后发现B空闲,因此都会向B发送了一个帧,这时两个帧会在B处发生冲突,这种问题称为隐藏节点问题。在右图中,B可以和A、C通信,C可以和B、D通信,若某一时刻A正在与B通信,C想和D通信,但是此时C会侦听到这一通信,因此他不会直接和D通信,然而它与D的通信不会影响A与B的通信,造成资源的浪费,这种问题称为暴露节点问题。
为解决这两种问题,802.11中使用了带冲突避免(CA)的CSMA。CSMA/CA协议实现时,如果侦听到信道空闲时,并不是立即发送,而是等待一段时间再发送数据,然后先发送一个很小的信道检测帧RTS,如果收到最近的接入点返回的CTS,就认为信道是空闲的,然后再发送数据。发送数据时,仍首先检测信道是否有使用,如果检测出信道空闲,则再等待一段随机时间后,才送出数据;接收端如果正确收到此帧,则经过一段时间间隔后,向发送端发送确认帧ACK;发送端收到ACK帧,确定数据正确传输,在经历一段时间间隔后,再发送数据。CSMA/CA协议通过了RTS-CTS机制和ACK机制减小了冲突发生的可能。
CSMA/CD主要着眼点在冲突的检测,当检测到冲突时,进行相应的处理,要求设备能一边检测一边发送数据。CSMA/CA主要着眼点在冲突的避免,协议里也看到经常是等待一段时间再做动作,通过退避尽量去避免冲突,还有就是先发送一些特别小的信道检测帧来测试信道是否有冲突。

五、MAC寻址
以以太网为例,发送方在发送一帧后,该帧进入总线,进而连接到总线上的各设备(一般是网络适配器,又称网卡)均可收到该帧,网卡进一步确认该帧是否为发向自己的帧,若是则传递给主机,否则丢弃。那么在数据链路层,网卡是如何确认帧是否是发向自己的呢?主要是通过MAC地址,MAC地址是物理地址,由48位构成,其中前24位由网卡制造厂商向IEEE申请,后24位由制造厂商唯一分配,在网卡制造时被烧写在ROM中,不可更改,且全球唯一。图6示出了以太网的帧格式,所有的帧格式都类似这样,其中Dest addr和Src addr字段分别表示目的MAC地址和源MAC地址,用于唯一识别源主机和目的主机。
在这里插入图片描述

扫描二维码关注公众号,回复: 11685192 查看本文章

图6 以太网帧格式
另外,Preamble字段表示前同步码,一般为7个字节的1和0交替序列加上一个字节的帧起始符(使用面向比特的组帧方式)。Type字段表示上层所使用的的协议,如IP协议为2048。CRC字段表示循环冗余校验码,用于检测差错,校验范围不包括同步码。Body表示帧体,以太网定义的帧体,至少包含46字节数据最多包含1500字节数据。设置最小帧体数据长度,是由于CSMA/CD协议中冲突窗口的存在,帧必须足够长才可能检测到冲突,长度不足时应该填充。设置最大帧体数据长度,是由于如果数据帧太长就会出现有的工作长时间不能发送数据,而且可能超出接受放的缓冲区大小,造成缓冲溢出,超长时可以采取分组的策略。对主机来说,帧不包括前同步码和CRC等,因为发送方网卡在发送帧之前才加上前同步码、CRC字段和后同步码,接收方网卡接收后再去掉他们。
网络中具有很多的LAN段,不同的LAN段之间一般通过网桥或者交换机连接。网桥和交换机属于二层交换设备,通过检查MAC地址做出转发帧的决策,他们不关心上层协议,不会检查网络层,IPv4、IPv6、OSI分组等均可穿越他们。下面主要介绍网桥的工作原理。网桥连接不同类型的LAN时,可以进行一些转换的功能,比如通过重新封装改变帧格式、通过缓存改变数据传输速率、通过切割和重组改变帧长度等等。网桥不关心帧的内容,只负责正确的转发操作,因此是透明的,他将多个LAN连接在一起,接收所有与他相连的LAN帧。当一个帧到达网桥时,他必须作出丢弃还是转发的决策,如果是转发,他还要知道向哪个LAN转发。通过这种方式可以过滤部分交通流量,减少冲突的机会,改善网络性能。
决策是通过在其内部的一张MAC地址表中查找MAC地址作出的。初始时,这张表是空的。网桥通过逆向学习逐步完善地址表,他从到达帧的源地址认识到源地址对应的那台机是在帧来的那个LAN上,进而把它写入MAC地址表。另外,由于网络的拓扑是变化的,因此无论何时,凡往表中加入记录,也必须同时打下时戳,新到达帧的源地址在表中已有记录,将时戳更新为当前时间,网桥也周期性地扫描表,将那些超时的记录从表中删除。
当一帧到达时,网桥查找地址表,比较目的MAC地址,如果源LAN和目的LAN相同,则丢弃该帧,如果源LAN和目的LAN不同,则转发该帧,如果目的LAN未知,则广播该帧,同时通过逆向学习维护MAC地址表。但是为了可靠传输,网络中采用了冗余结构,可能有环路出现,如果不加控制,将会造成广播风暴、帧重复传送、MAC地址库不稳定等问题。为了一个无环路的网络拓扑,采用了生成树协议,它规定每个网络一个根网桥,每个网桥一个根端口,每网段一个指定端口,非指定端口不被使用,但是,当逻辑STP树上的某点出故障了,非指定端口将会被重新启用。要注意的是,生成树算法能在有物理环路的网络中,生成一棵没有逻辑环路的生成树,但并不能保证其中的路径是最优的,这是STP算法所付出的代价。这种帧寻址交换的思想在上层也可使用,比如路由交换中的IP寻址等。
交换机可以理解为多端口的网桥,其工作原理与网桥相同,可以替代物理层的集线器设备。由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽。与网桥相比,交换机具有更快的数据传输速率。网桥在转发数据帧时,通常要先接收到完整的帧并检测后才开始转发该帧,而交换机有储存转发、直接转发、分片转发等三种帧转发模式,例如,直接转发是只要确认转发目的端口,就直接边收边发,不需要等待完全接收后再转发。

六、总结
数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到目标节点的网络层,实现点到点连接。数据链路层使用多种协议实现了其功能,包括组帧、差错控制、介质访问控制、MAC寻址等。
数据链路层的PDU称之为帧,常用的组帧方式有三种,分别是面向字节的协议、面向比特的协议和基于时钟的组帧,三种组帧方式用于不同的场景。接收方通过检错码来检测帧是否出现差错,一旦出现差错需要发送方重传。常用的差错控制机制有确认和超时,使用这两种机制的算法称为ARQ算法,ARQ算法包括停止-等待算法、滑动窗口算法等。用于介质访问控制的协议有ALOHA协议、CSMA协议、CSMA/CD协议、CSMA/CA协议等,也分别用于不同的场景,可以解决不同的问题。MAC寻址时,不同LAN间的连接主要通过网桥或交换机实现,网桥或交换机在接收到一帧时后进行决策,决定是丢弃、还是转发或者广播该帧,同时进行逆向学习。值得注意的是,数据链路层所用协议的思想均可应用到其它层。

参考文献
[1]Denenberg R. Open Systems Interconnection[J]. Library Hi Tech,1985, 3(1):15-26.
[2]Deji, ChenMark, NixonAloysius Mok. WirelessHART[M]. SpringerLink,2010 p.19-27.
[3]Hercog D . Generalised sliding window protocol[J]. Electronics Letters, 2002, 38(18):p.67-68.
[4]王悦. IEEE802.15.4MAC层信道接入机制的研究[D].吉林大学,2008.
[5]陈玲娟. 载波侦听/冲突检测(CSMA/CD)探析[J]. 中小企业管理与科技, 2013.
[6]Asija M . MAC Address[J]. 2016.
[7]拉里L.彼得森, 布鲁斯S.戴维. 计算机网络:系统方法:a systems approach(第5版)[M]// 计算机网络:系统方法:a systems approach(第5版). 机械工业出版社, 2015.

猜你喜欢

转载自blog.csdn.net/hyl1181/article/details/107494452