[计算机网络]-链路层-概述,差错检测技术以及多路访问协议

概述

网络层提供了任意两台主机之间的通信服务,而在两台主机之间,数据报需要跨越一系列的通信链路进行传输,这里就进入了链路层的范围。

我们将运行链路层协议的任何设备均称为 结点,包括主机,路由器,交换机和 WiFi 接入点;把沿着通信路径连接相邻结点的通信信道 称为 链路,在通过特定的链路时,传输结点就将数据报封装在 链路层帧 中,并将该帧传送到链路中

为了更好地理解链路层以及它是如何与网络层关联的,考虑一个交通运输的例子:假定一个旅行社要为游客开辟从 A 地到 D 地的路线,且旅行社认为对于游客而言最为便利的方案是:从 A 坐客车到 B,然后从 B 坐飞机到 C,再从 C 坐火车到 D。这个路线中的每一段小路线中 “相邻” 的地点之间都是直达的,且三段小路线是不同的运输方式,也将由不同的运输公司负责,尽管运输方式不同,但它们都提供了将旅客从一个地点运输到相邻地点的服务。那么,这里的游客就好比一个数据报,每个运输区段就好比一条链路,每种运输方式就好比一种链路层协议,而旅行社就好比路由选择协议

链路层提供的服务

任一链路层的基本服务都是 将数据报通过单一通信链路从一个结点移动到相邻结点,但所提供的服务细节随着链路层协议的不同而变化,协议能够提供的可能服务如下:

  • 成帧:每个网络层数据报经链路传送之前,几乎所有链路层协议都需要将其用链路层帧封装起来,数据报就作为帧中的数据部分

  • 链路接入媒体控制访问 ( M e d i u m   A c c e s s   C o n t r o l Medium\ Access\ Control Medium Access Control,MAC) 协议规定了帧在链路上传输的规则。
    链路从两端的结点个数来看可以分为两种:链路一端仅有一个发送方,另一端仅有一个接收方的 点对点链路,这种情况下 MAC 协议比较简单,甚至不存在,因为无论何时链路空闲,发送方都能发送帧。针对点对点链路的协议有 点对点协议 ( p o i n t − t o − p o i n t   p r o t o c o l point-to-point\ protocol pointtopoint protocol,PPP),高级数据链路控制协议 ( h i g h − l e v e l   d a t a   l i n k   c o n t r o l high-level\ data\ link\ control highlevel data link control,HDLC);
    另一种是多个节点共享单个 广播链路,这种链路就会面临 多路访问问题,在这里 MAC 就可以用于协调多个结点的帧传输。广播链路层技术的例子有 以太网 以及 无线局域网

  • 可靠交付:链路层协议提供可靠交付服务时可以保证无差错地经链路层移动每个网络层数据报。类似于 TCP,链路层的可靠交付服务通常是通过确认与重传实现的

    链路层可靠交付服务通常用于易产生高差错率的链路,如无线链路,其目的是在本地纠正一个差错,而不是通过运输层或应用层协议迫使进行端到端的重传
    然而,对于低比特差错的链路,如光纤,同轴电缆和许多双绞铜线链路,链路层的可靠交付会被认为是不必要的开销,因此很多有线的链路层协议不提供可靠交付服务

  • 差错检测和纠正:当帧中的一个比特作为 1 传输时,接收方结点中的链路层硬件可能不正确地将其判断为 0,反之亦然。这种比特差错是由信号衰减和电磁噪声导致的

    发送一个有差错的数据报是没有必要的,因此许多链路层协议都会提供一种机制来检测这样的比特差错,通过让发送结点在帧中包括 差错检测比特 让接收结点进行差错检查来完成这项工作
    链路层的差错检测通常比运输层以及网络层中的因特网校验和更加复杂,并且是用硬件实现的

    差错纠正类似于差错检测,区别在于接收方不仅能检测帧中出现的比特差错而且能够准确地确定差错出现的位置并纠正这些差错

链路层在何处实现

链路层的 主体部分 是在 网络适配器 ( n e t w o r k   a d a p t e r network\ adapter network adapter) 中实现的,其有时也称为 网络接口卡 ( N e t w o r k   I n t e r f a c e   C a r d Network\ Interface\ Card Network Interface Card,NIC)

位于网络适配器核心的是 链路层控制器,该控制器通常是一个实现了许多链路层服务如成帧,链路接入,差错检测等的专用芯片,不同的控制器可能会实现不同的链路层协议,如以太网协议等

在发送端,控制器取得由协议栈较高层生成并存储在主机内存中的数据报,在链路层帧中封装该数据报,然后遵循链路接入协议将该帧传进通信链路中;在接收端,控制器接收了整个帧,抽取出网络层数据报。如果链路层执行差错检测的话,还需要发送控制器在该帧的首部设置差错检测比特,由接收控制器执行差错检测

差错检测和纠正技术

链路层通常提供 比特级差错检测和纠正,即对从一个结点发送到另一个物理上连接的邻近结点的链路层帧中的比特损伤进行检测和纠正。
在发送结点,为了保护比特免受差错,使用 差错检测和纠正比特 ( E r r o r − D e t e c t i o n   a n d − C o r r e c t i o n Error-Detection\ and-Correction ErrorDetection andCorrection,EDC) 来增强数据,对原始的数据段 D 添加差错检测和纠正比特 EDC;接收方的任务就是在只收到数据 D’ 以及 EDC’ 的情况下,确定 D’ 是否和初始的 D 相同

差错检测和纠正技术使接收方有时而非总是检测出出现的比特差错,就是说接收方可能无法发现接收的信息中包含着比特差错。为减少这种事情发生的概率,就需要选择一个更复杂,开销更大,即需要更多计算量以及更多的差错检测和纠错比特的差错检测方案

接下来讨论其中的三种技术:奇偶校验校验和方法,和 循环冗余检测

奇偶校验

对于要发送的信息 D,设其含有 d 个比特,在 偶校验方案 中,发送方只需包含一个附加的校验比特,选择它的值为 0 或 1,使得这 d + 1 个比特中 1 的总数是 偶数个;对于 奇校验方案,则是选择校验比特值使得 1 的总数为奇数个

接收方在校验时,只需要数一数接收的 d + 1 比特中 1 的数目即可。以 偶校验方案 为例,如果发现了奇数个值为 1 的比特,接收方就知道出现了 奇数个比特差错

但如果出现了偶数个比特差错,这将有可能出现一个未检出的差错。如果比特差错的概率非常小,而且比特之间的差错可以看作是独立发生的,那么一个分组中多个比特同时出错的概率将是极小的。这种情况下,单个奇偶校验位就是足够的

然而,测量表明 差错经常以 “突发” 的形式聚集在一起而不是单独发生。因此,需要一种更健壮的差错检测方案

校验和方法

校验和 更多用于 传输层

在校验和技术中,上述的 d 比特数据被是视为以一个由多个 k 比特整数组成的序列,简单的校验和方法就是将这些 k 比特整数加起来,并且用得到的和作为差错检测比特

因特网校验和就是基于这种方法,它将数据视为由 16 比特的整数所组成的序列,对于 IP,UDP,TCP 首部中的校验和字段在计算时置为 0 即可。然后将这些 16 比特整数进行 1 的补码和运算,这里 1 的补码和运算就是 带循环进位的加法,最高位有进位应循环进到最低位。然后对得到的和求反码,得到的结果就是要携带在报文段首部中的校验和

接收方通过对接收的数据进行同样的求和取反码运算,如果得到的结果为 0,表示传输正确;否则,说明传输有差错。

循环冗余检测

如今广泛应用的差错检测技术都是基于 循环冗余检测 ( C y c l i c   R e d u n d a n c y   C h e c k Cyclic\ Redundancy\ Check Cyclic Redundancy Check,CRC)
这里我们考虑一个 d 比特的将被发送的数据 D,

  1. 发送方和接收方首先必须协商一个 r + 1 比特模式,称之为 生成多项式,这里我们表示为 G
  2. 对于一个给定的数据段,发送方要选择 r 个附加比特 R,附加到 D 的尾部,使得得到的 d + r 比特模式用 模 2 算术 恰好能被 G 整除。发送给接收结点的就是这 d + r 比特模式
    这里的模 2 运算是一种二进制算法,包括模 2 加,模 2 减,模 2 乘以及模 2 除四种运算,与普通的四则运算不同的是 模 2 运算不考虑某一位运算时结果的进位和借位 (1 + 1 = 0,且不进位;0 - 1 = 1,无需向低位借位),使得两个二进制位相运算时,这两个位的值就能确定运算结果,不受前一次运算的影响,也不对下一次运算造成影响。这意味着加法,减法是相同的,而且等价于操作数的按位异或操作
  3. 接收方用 G 去除所接收到的 d + r 比特。如果余数为非零,接收方就知道出现了差错,否则认为数据正确而被接收
  4. 还有一个问题是在发送方 R 怎么计算。我们要满足的式子是 D * 2r XOR R = nG (模 2 加相当于异或,这里使用异或),对这个式子再次用 R 异或,得到 D * 2r = nG XOR R,把异或看成加法,可以看出来 R 即为 D * 2r 除以 G 得到的余数,所以可以通过 D * 2r 除以 G 得到余数的方法来求出 R

多路访问链路和协议

前面提到网络链路分为 点对点链路 以及 广播链路。点对点链路比较简单,而广播链路就会面临 多路访问问题,即如何协调多个发送节点对一个共享信道的访问。结点将通过 多路访问协议 来规范它们在共享的广播信道上的传输行为

因为所有结点都能传输帧,那么就可能出现多个结点同时传输帧的情况,其结果就是所有结点同时接到多个帧,即传输的帧在所有的接收方 碰撞
通常,碰撞发生时,没有一个接收结点能够有效地获得任何传输的帧,碰撞帧的信号纠缠在一起,使得涉及碰撞的所有帧都丢失了;那么自然,在碰撞时间间隔中,广播信道也就被浪费了

为了确保广播信道执行有用的工作,协调活跃结点的活动是有必要的,这种协调工作由多路访问协议负责。

多路访问可分为三种:信道划分协议随机接入协议,以及 轮流协议

下面讲述各种协议时我们使用这样一个例子:有一个支持 N 个结点的信道,且信道的传输速率为 R bps

信道划分协议

时分多路复用

时分多路复用 (TDM) 将时间划分为 时间帧,并进一步划分每个时间帧为 N 个时隙 (slot),然后将每个时隙分配给 N 个结点。当某个结点需要发送链路层帧时,它在循环的 TDM 帧中指派给它的时隙内传输分组比特,所以选择的时隙长度应使一个时隙内能够传输单个分组

TDM 消除了碰撞,而且非常公平,每个节点在每个帧时间内得到了专用的传输速率 R/N bps
其主要缺陷在于:结点被限制于 R/N bps 的平均速率,即便只有它是唯一需要发送帧的结点;结点必须总是等待它在传输序列中的轮次,即便它是唯一一个需要发送帧的结点。就是说,对于只有少数个甚至只有一个结点是经常活跃的结点的情况,TDM 是一种很糟的选择

频分多路复用

频分多路复用 (FDM) 将 R bps 信道划分为不同的频段,每个频段具有 R/N 带宽,然后把每个频率分配给 N 个结点中的一个,即在单个较大的 R bps 信道中创建了 N 个较小的 R/N bps 信道

FDM 同样消除了碰撞,也很公平,在 N 个结点之间公平地划分了带宽
其主要缺点是:限制了一个结点只能用 R/N 的带宽,即便它是唯一一个需要发送帧的结点

码分多址

码分多址 ( C o d e   D i v i s i o n   M u l t i p l e   A c c e s s Code\ Division\ Multiple\ Access Code Division Multiple Access,CDMA) 对每个结点分配一种不同的编码,然后每个结点用它唯一的编码来对它发送的数据进行编码。只要精心选择这些编码,且接收方知道发送方的编码,那么不同的结点就能够同时传输,并且各自相应的接收方仍能正确接收发送方编码的数据比特,而不在乎其他节点的干扰传输

随机接入协议

在随机接入协议中,一个传输结点总是以信道的全部速率 (即 R bps) 进行发送。当发生碰撞时,涉及碰撞的每个结点反复地重发它的帧,直到该帧无碰撞地通过为止。不过并不是经历碰撞后立刻重发该帧,而是在等待一个 随机时延 后才重发,那么只要这些结点之一所选择的时延充分小于其它碰撞结点的时延,它就能无碰撞地将它的帧发出

时隙 ALOHA

传输时间被划为为多个时隙,当某个结点有一个帧需要发送时,它等到下一个时隙开始并在该时隙传输整个帧,如果没有碰撞,该结点就成功传输了它的帧;如果有碰撞,该结点在时隙结束之前检测到这次碰撞,然后以概率 p 在后续的每个时隙中重传它的帧,直到该帧被无碰撞地传输出去

与信道划分协议相比,当网络中只有一个结点是唯一活跃的结点时,时隙 ALOHA 允许该结点以全速 (即 R bps) 连续传输;也是高度分散的,每个结点单独发送帧,在碰撞时也是独立地自行以概率 p 决定什么时候重传
其问题在于,时隙 ALOHA 需要在结点中对时隙同步,即每个结点都需要知道时隙何时开始,因为发送帧是在时隙开始时发送的;当不止有一个活跃结点而有多个活跃结点,一部分时隙将会出现碰撞,被 “浪费” 了,而且由于概率传输的策略,每个结点的传输行为将会被限制,最糟糕的情况是,每次 根据 p 做出的决定都是 “这个时隙跳过不重传,等下一个时隙再做一次决定”,那么该结点将无法重传成功

ALOHA

完全分散的 ALOHA 协议不需要结点同步它们的时隙以及传输。当一个帧首次到达,即一个数据报在发送结点从网络层传递下来到网卡,结点立刻将该帧完整地传输进广播信道,如果一个传输的帧经历了碰撞,这个结点将立即以概率 p 重传该帧,否则等待一个帧传输时间,之后再以概率 p 传输该帧

载波侦听多路访问 CSMA

在时隙和纯 ALOHA 中,一个结点是否传输的决定独立于连接到这个广播信道上的其它结点的活动,具体来说,一个结点并不关心在它开始传输时是否有其他节点碰巧在传输,而且即使有另一个结点开始干扰它的传输也不会停止传输

针对上述问题,在 载波侦听多路访问 ( C a r r i e r   S e n s e   M u l t i p l e   A c c e s s Carrier\ Sense\ Multiple\ Access Carrier Sense Multiple Access,CSMA) 和 具有碰撞检测的 CSMA ( C S M A   w i t h   C o l l i s i o n   D e t e c t i o n CSMA\ with\ Collision\ Detection CSMA with Collision Detection,CSMA/CD) 中就包含了两个规则:

  1. 载波侦听:即一个结点在传输前先听信道,如果来自另一个结点的帧正向信道上发送,结点则等待直到检测到一小段时间内没有传输,然后再开始传输
  2. 碰撞检测:即当一个传输结点在传输时一直在侦听此信道,如果它检测到另一个结点正在传输干扰帧,它就停止传输,在重复 “侦听 - 当空闲时传输” 循环之前等待一段随机时间

相当于不仅在发送帧时要帧听是否有其他结点也正在发送帧,而且在帧的发送过程中也要检测是否发生碰撞

在 CSMA 下我们考虑这样一种情况:在某时刻 t0,结点 B 侦听到信道是空闲的,因为当前没有其它结点在传输,因此结点 B 开始传输,在后续的一个时刻 t1,结点 B 正在传输,但它所传输的比特还没有到达结点 D,因此 D 在 t1 侦听到信道是空闲,那么根据 CSMA 协议,D 会开始它的传输,又过了一个短暂的时间后,B 的传输跟 D 的传输在某个位置碰撞了。这是由于广播信道上的端到端信道传播时延的影响,该时延越长,载波侦听结点不能侦听到网络中另一个结点已经开始传输的机会就越大

那么,如果结点没有进行碰撞检测,即使出现了碰撞,B 和 D 都将继续完整地传输它们的帧;当进行碰撞检测时,一旦结点检测到了碰撞它将立即停止传输。通过加入碰撞检测,不传输一个无用的,损坏的帧,有助于改善协议的性能。载波侦听做到的是帧发送时没有其他结点在发送;而碰撞检测做到的是帧发送过程中检测到碰撞就立即停止发送

具有碰撞检测的载波侦听多路访问 CSMA/CD

CSMA/CD 的运行过程如下:

  1. 适配器从网络层获得一条数据报,准备链路层帧,并将其放入帧适配器缓存中
  2. 如果适配器侦听到信道空闲,即无信号能量从信道进入适配器,那么它开始传输帧;另一方面,如果适配器帧听到信道正在忙,它将等待,直到侦听到没有信号能量时才开始传输帧
  3. 在传输过程中,适配器监视来自其它使用该广播信道的适配器的信号能量的存在
  4. 如果适配器传输整个帧而未检测到来自其它适配器的信号能量,该适配器就完成了该帧;否则如果适配器在传输时检测到来自其它适配器的信号能量,它中止传输
  5. 中止传输后,适配器等待一个随机时间量,然后继续回到 侦听信道 - 当空闲时传输 的循环。对于 随机时间量 的选择,以太网中使用 二进制指数后退 算法来解决

轮流协议

轮询协议

轮询协议要求这些结点之一要被指定为 主结点,主结点以循环的方式轮询每个结点,告诉一个结点能够传输的帧的最多数量,然后在该结点传输了某些帧后继续告诉下一个结点能传输的帧的最多数量,主结点能够观察信道上是否缺乏信号来决定一个结点何时完成了帧的发送

在这种主结点管理的模式下,轮询协议消除了困扰随机接入协议的 碰撞和空时延 问题,使得轮询取得高得多的效率。其缺点在于,一是引入了 轮询时延,即通知一个结点所需的时间;二是引入了主结点这种 中心化 的模式,如果主结点有故障,整个信道都将变得不可操作

令牌传递协议

这种协议中没有主结点,一种称为 令牌 的小的特殊帧在结点之间以某种固定的次序进行交换。当一个结点收到令牌时,仅当它有一些帧需要发送时它才持有这个令牌,否则它将立即向下一个结点转发该令牌;当一个结点收到令牌且它确实有帧要传输,它就发送最大数目的帧数,然后再把令牌转发给下一个结点

令牌的传输动作是分散的,并且有很高的效率。其问题在于,一个结点的故障可能会使整个信道崩溃,或者一个结点偶然忘记了释放令牌,则必须采取某些恢复措施使令牌正常返回到循环中

猜你喜欢

转载自blog.csdn.net/Pacifica_/article/details/125226505