数据链路层执行以下两种基本任务:

  • 允许上层使用封装成帧之类的各种技术访问介质

  • 控制如何使用介质控制访问控制(MAC)和错误检测之类的技术将数据放置到介质之上,以及从介质接收数据


数据链路层负责通过物理网络的介质在节点之间交换帧。这包括将3层数据包封装成帧,将帧放到介质上,从介质上接收帧,将帧解封装,恢复为数据包等步骤。

对任何发送到网络的数据包,都有可能经过不同的数据链路层技术和介质传输。因此,数据包在通过不同的介质时要被封装成为不同的帧。在路径中的每一跳,通常为路由器,对帧进行如下处理:

  • 从介质接收帧

  • 对帧解封装,成为数据包

  • 构建适合下一种介质的新帧

  • 将新帧中的数据包转发到下一个物理网段


创建帧的过程

帧是每个数据链路层协议的关键要素。数据链路层协议需要控制信息才能使协议正常工作。控制信息可能提供以下信息:

  • 哪些节点正在相互通信

  • 各节点之间开始通信和结束通信的时间

  • 节点通信期间发生了哪些错误

  • 接下来那些节点会参与通信

数据链路层使用帧头和帧尾将数据包封装成帧,以便经本地介质传输数据包

数据链路层帧包括如下元素:

  • 数据-来自网络层的数据包

  • 帧头-包含控制信息(如编址信息)且位于PDU开头位置

  • 帧尾-包含添加到PDU结尾的控制信息

在帧内,每个控制字段有特定的比特数。接收节点利用数据链路层成帧技术确定比特流中每个字段的比特分组。如下图所示,控制信息作为不同字段插入帧头和帧尾中。此格式使物理信息具备能被节点接收并且可以在目的地解码成为数据包的一种结构。

wKioL1TS2VyD5M_gAAD-apgND9w350.jpg

典型的字段类型包括:

  • 开始和停止指示字段-帧的开始和结束限制

  • 编址或命名字段-目的/源设备

  • 类型字段-包含在帧中的PDU的类型

  • 质量-控制字段

  • 数据字段-帧负载(网络层数据包)

帧结尾处的字段形成了帧尾。这些字段的用途是错误检测和标示帧的结束。

并非所有协议均包含全部此类字段。特定数据链路层协议的标准定义了实际帧格式。


到目前为止,我们讨论过的OSI第3层到第7层的执行过程,都是在软件中完成的。第1层当然是在硬件中完成的,特殊的是数据链路层,作为软件层级和物理通信过程的中间层,它被划分为了两个子层,用于支持实际网络通信过程的运行。

上子层定义了向网络层协议服务的软件进程

下子层定义了硬件所执行介质访问过程

两种常见的LAN子层为:

  • 逻辑链路控制(LLC)放入帧中的信息用于确定帧所使用的网络层协议,此信息允许多个第3层协议,如IPv4 IPv6和IPX,使用相同的网络接口和介质

  • MAC根据介质的物理信号要求和使用的数据链路层协议类型,提供数据链路层编址和数据分界方法


两种常用的MAC(介质访问控制方法)是:

受控访问

基于争用的访问

下表描述了两者的不同

方法特性示例
受控访问
某一时刻仅一个站点传输令牌环FDDI
希望传输的站点必须等待轮到自己
无冲突
有些网络使用令牌传输方法
基于争用的访问
在任意时刻站点都可传输以太网无线
存在冲突
存在解决竞争的机制
CSMA/CD用于以太网,CSMA/CA用于802.11无线网络

受控访问共享介质

当使用受控访问共享介质时,网络设备将依次访问介质,此方法也称为定期访问或确定性访问。如果设备不需要访问介质,则使用介质的机会将会传递给下一个等待访问介质的设备。如果介质把帧放到介质上,则直到该帧到达目的地并被处理后,其他设备才能将帧放到介质上。

尽管受控访问共享介质的方式秩序井然并且提供可预测的吞吐量,但是确定的方法效率过低,因为每个设备都必须等待轮到自己才能使用介质传输帧信息。


基于争用访问共享介质

基于争用的访问方法允许任意设备在任何时刻尝试访问共享介质,它也被称为非确定性访问。为防止在介质上造成混乱,这些方法使用载波侦听多路访问(CSMA)过程先检测介质上是否正在传输信号。如果介质检测到来自另一个节点的载波信号,则表示另一个设备正在传输。如果尝试传输的设备发现介质处于忙碌状态,它将等待并在稍后重试。如果未检测到载波信号,设备将开始传输数。以太网和无线网络使用基于争用的MAC。

CSMA过程也可能发生故障,如遇到两个设备同时传输,这就会造成冲突。如果发生冲突,两个设备发送的数据会损坏且需要重新发送。

争用介质MAC没有受控访问的开销,因为不需要跟踪当前轮到哪个设备访问的机制。但是争用介质在使用率比较高的情况下无法很好地扩展,随着节点使用率和数量的增加,没有冲突的成功访问概率越来越小。此外,由于这些冲突降低了吞吐量,需要提供恢复机制来纠正错误。


CSMA常用来与解决冲突的方法配合使用,两种常用的解决冲突的方法为:

  • CSMA/CD  冲突检测

  • CSMA/CA  冲突避免


在CSMA/CD中,设备监视介质中是否存在数据信号。若无信号,则表示介质处于空闲状态,设备可传输数据。如果随后检测到另一个设备正在进行传输,所有设备将停止发送并在稍后重试。传统以太网便是采用此种方式。


在CSMA/CA中,设备会检查介质中是否存在数据信号。如果介质空闲,设备将通过它想要使用的介质发送通知。然后设备开始传输数据。802.11无线网络便是采用此种方式。

一句话,冲突检测是发生问题后再想办法解决,冲突避免则是通过提前通知的形式提前给传输提供保证。


无共享介质的MAC

有一种特殊的场景,就是在点对点的网络拓扑中,节点无需与其他设备共享介质,或者确定帧的发送目的是否为该节点,所以数据链路层的协议几乎不需要控制点对点的传输的非共享介质访问。


网络拓扑


网络拓扑是指网络设备和他们之间的互联布局关系。我们通常从物理拓扑和逻辑拓扑两个方面去描述这种关系。

物理拓扑是节点与他们之间的物理连接的布局。表示如果使用介质来互联设备就是物理拓扑。

逻辑拓扑是指网络帧从一个节点传输到另一个节点。此布局由网络节点之间的虚拟连接组成,与物理布局无关。这些逻辑信号路径是按照数据链路层协议定义的。在控制对介质的数据访问时,数据链路层“看到”的是网络的逻辑拓扑。正是逻辑拓扑在影响者网络封装成帧和介质控制访问控制的类型。


几种常见的网络拓扑图:

wKioL1TS5m_CmwpGAACMofkk2KA717.jpg

重点解释下环形网络拓扑:

在逻辑环形拓扑中,各节点依次接收帧。若帧并非发往该节点,它将把帧传递到下一个节点。这将允许使用一种介质访问控制技术,称为令牌传递


逻辑环拓扑中节点从环中取下帧,检查地址,如果非发往该节点,它将帧放回环上。在环中,源节点和目的节点之间的环一周的节点都将会检查该帧。


封装帧是数据链路层最重要的工作,帧头中包含了数据链路层协议针对特定网络拓扑和介质访问指定的控制信息。典型的帧头中包含如下字段:


帧开始字段-表示帧的起始位置

源地址和目的地址字段

优先级/服务质量字段-表示要处理的特殊通信服务类型

类型字段-表示帧中包含的上层服务

逻辑连接控制字段-用于在节点间建立逻辑连接

物理链路控制字段-用于建立介质链路

流量控制字段-用于开始和停止通过介质的流量

拥塞控制字段-表示介质中的拥塞


我们再学习网络层协议中,知道第3层的网络地址在路由的过程中始终保持不变,而第2层的物理地址仅仅用于在本地网络中传输帧。

帧尾的作用

典型的帧尾字段包括:

帧校验序列-用于检查帧内容有无错误

停止字段-用于指明帧结束,也用于向小尺寸或固定大小的帧添加内容

帧尾的作用是确定帧是否无错到达。此过程称为错误检测。通过将组成帧的各个位的逻辑或数学摘要放入帧尾中来实现错误的检测。


帧校验序列(FCS)字段用于确定帧的传输和接收过程有无错误发生。之所以在数据链路程中添加错误检测,是因为数据是通过该层的介质传输的。对于数据而言,介质是个不稳定的因素,介质上的信号可能受到干扰、丢失、损坏,从而改变这些信号各个位的值。通过使用FCS字段提供的校验机制,可找出发生的大部分错误。

为确保在目的节点接收的帧和离开源节点的帧一致,传输节点将针对帧内容创建一个逻辑摘要。它就是我们所熟知的 循环冗余校验CRC,此值将放入帧的帧校验序列FCS字段中代表帧的内容。

如果初始节点所产生的CRC与接收数据的远端设备计算的CRC不匹配,即是表明发生了错误。当帧到达目的节点后,接收节点会计算自身的帧逻辑摘要(CRC)。然后接收节点将比较这两个CRC值。如果两个值相同,则认为帧已经按发送的原样送达。如果FCS字段中CRC值与接收节点自身算出的值不同,帧会被丢弃。

通过比较CRC,帧的改变会被检查出来,CRC错误通常是由于网络噪声或数据链路的其他错误造成的。在以太网中,错误可能是由于冲突或传输了损坏的数据。


我们前面已经说过,数据链路层为上层网络通信提供了透明介质传输过程,所以不同的介质传输过程有不同的第2层协议,常见的第二层协议有:

  • 以太网

  • PPP

  • 高级数据链路控制(HDLC)

  • 帧中继

  • ATM

每个协议执行特定网络拓扑下的第2层介质访问控制。


以太网帧的示意图如下:

wKiom1TS8yPyXeQeAAD6gbcUIck480.jpg

  • 前导码-用于定时同步,也包含标记定时信息结束的界定符

  • 目的地址-48位目的节点MAC地址

  • 源地址-48位源节点MAC地址

  • 类型-指明以太网过程完成后用于接收数据的上层协议类型

  • 数据或填充-在介质上传输的PDU,通常为IPv4数据包

  • 帧校验序列FCS-用于检查损坏帧的CRC值


WAN中的PPP

点对点协议(PPP)用于在两个节点之间传送帧。PPP标准由RFC定义,这和许多数据链路层协议不同,它们是由电气工程组织定义的。PPP是一种WAN协议,可在许多串行的WAN中实施的协议。PPP用于各种物理介质,包括双绞线,光缆,卫星传输以及虚拟连接。

PPP采用分层体系结构,为满足各种介质类型的要求,PPP在两个节点间建立称为会话的逻辑连接。PPP会话向上层PPP协议隐藏底层的物理介质。这些会话还为PPP提供了用于封装点对点链路上的多个协议的方法。链路上封装的各个协议均建立了自己的PPP会话。

PPP还允许两个节点协商PPP会话中的选项:

  • 身份验证-为建立点到点链路通信,PPP链路的每个终端节点需要PPP验证

  • 压缩-PPP压缩可以减少经网络链路传输的数据帧的大小。这可以减少网络传输时间

  • 多重链接-PPP多重链路是使用多条链路发送数据帧的方法。这可允许使用多条物理链路支持一个PPP会话


下图为PPP帧的基本字段:

wKiom1TS-EvCBTdRAADV0Y_2YQI890.jpg


  • 标志——表示帧开始和结束位置的一个字节。标志字段包括二进制序列01111110

  • 地址——包含标准PPP广播地址的一个字节。PPP不分配独立的站点地址

  • 控制——包含二进制序列00000011,要求在不排序的帧中传输数据

  • 协议——两个字节,标志封装于帧中的数据字段中的协议。RFC中指定了协议字段的最新值

  • 数据——0个或多个字节,包含协议字段中指定协议的数据报

  • 帧校验序列——通常为16位,通过事先协商,一致同意PPP实施可使用32位FCE,从而提供错误检测能力


LAN的无线协议:

802.11是802标准的扩展。它使用与802LAN相同的的802.2LLC和48位编址方案。但是,MAC子层和物理层中存在很多差异。在无线环境中,需要考虑一些特殊的因素。由于没有确定的物理连通性,因此,外部因素可能干扰数据传输且难以进行访问控制。为了解决这些难题,无线标准中制定了额外的控制功能。

IEEE 802.11标准,也就是我们通常所说的Wi-Fi 是一种争用系统,使用的是CSMA/CA介质访问例程。CSMA/CA为等待传输的所有节点指定了一个随机回退的过程。最可能发生介质争用的时间是在介质变为可用后,使节点随机回退一段时间可以大大降低冲突发生的可能性。

802.11网络还使用数据链路确认来确定帧已成功接收。如果发送站没有检测到确认帧,原因可能是收到的原始数据帧或确认不完整,就会重传帧。这样明确的确认就可以克服干扰及其他无线电相关的问题。

802.11支持的其他服务有身份验证、关联(到无线设备的连通性)、和隐私(加密)

下图简单描述以下802.11中的帧结构:


wKioL1TTAM-RgAVWAADSGCXFggs839.jpg


序列控制结构:

wKioL1TTAOzBc6XgAABPiVc93so666.jpg

帧控制中的具体信息:

wKiom1TTAB6DDzx2AACtdW5pcsY191.jpg