其中,蓝色字符表示 字符填充法中使用的特殊字符,灰色字符表示传输的信息中出现的与特殊字符相同的字符(即不应该被当作特殊字符处理的字符)
通过 01111110
填充至首尾来标志帧的开始和结束,并不对帧内比特数有限制
当信息位的比特流中出现连续5个 1
时自动在其后填充一个 0
,以此实现透明传输
下面给出示例:
1 | 数据: 11011111111110010 |
💦零比特填充的首尾标志法 很容易由硬件实现,性能优于字符填充法
将物理层编码时未用到的“违法”编码方式进行帧定界
👉🏻局域网 IEEE 802 标准 采用了该方法
例如,曼彻斯特编码方法将数据比特 1
编码为 “高-低”电平,0
编码为 “低-高”电平。
那么,“高-高” 和 “低-低” 电平 就可用于帧定界。
违法编码法不需要采用任何填充技术,但是它只适用于采用冗余编码的特殊编码环境。
在实际的通信链路中,因为各种原因可能会导致数据的传输差错。其中,比特差错是传输差错的一种,比特差错描述的是比特流中的 1
变成了 0
和 0
变成了 1
的情况。
针对这类差错,主要有两类差错控制方法:
在 FEC 中,接收端不仅能检测到差错,还能确定比特流错误的位置从而加以纠正。因此,差错控制据此也分为 检错编码 和 纠错编码。
注:CRC校验是拥有纠错功能的,只是数据链路层只使用了其检错功能,检测到出错就丢弃。
关于CRC的计算方法以及背后的数学原理,乃至硬件实现与编程实现,可以移步到本站文章:
最常见的纠错编码是 海明码|Hamming Code,也叫汉明码。
我们知道,在信息传输时为了加入纠错功能,需要引入冗余码,所以加入更少的冗余码的同时又能实现纠错就是一个值得思考的数学课题。
假设现有 的数据需要传输,且出错位数最多为1位. 那么我们可以得出出错的可能性就是 16,而为了描述具体的出错位置,我们至少需要利用 位信息对其进行表征。
该例子利用 信息论 的知识,按照香农的思想得出了冗余码位数的下限,而汉明码巧妙在它正好符合这个下限。
因此,海明码的位数要求:
其中, 为信息位, 为校验位。
海明码的核心思想就是通过有限次的奇偶校验从而锁定出错的数据位的位置。这与数独游戏、扫雷游戏十分类似。而校验位的个数则规定了奇偶校验的次数。
也就是说,每个校验位“管辖”一部分信息位的奇偶性(这些信息位也会交叉地同时被其他校验位管辖),当发现奇偶校验不符时,就可以判断出被管辖的这堆信息位中存在差错,再和其他校验位得出的信息进行综合比较,最后就能得到各校验位的信息,得出出错的数据位的准确位置。
但是思想简单,如何分配“管辖区域”使得校验位最少却是难题。海明码的精妙之处也正在于此。
海明码要求,将每一个校验位依次放置在下标为 的位置。即要求校验位的下标的二进制码只有一位是1
,其余都是0
.
例如第一个校验位的下标是,即为 0001
. 类似的,就有 0010,0100,1000
共4个校验位,那么根据上面的公式,令,我们可以推测出最多可以用来检验 的信息。
神奇的是,共 16 位的传输数据中,必然有8组数据是以 xxx1
为下标,有8组数据是以 xx1x
为下标,依次类推。而这就成为了每一个校验位的管辖依据!
默认偶校验 我们对除 0001
以外,其他下标是 xxx1
的数据进行奇偶校验(异或),从而确定 0001
处校验位的值。以此类推,我们就可以填充完所有 4 个校验位。
接收方收到数据后,检验这 4 位是否符合奇偶性,就能判断是否出错。并且,如果出错还能确定位置。
比如,我们发现 xxx1
组出错,那么我们可以确定出错的数据其下标一定是 xxx1
型,如果该组没有出错,那么可以断定出错下标的要么是xxx0
型,要么整个数据都没有出错。
这样依次判断 xx1x,x1xx,1xxx
组是否出错,综合以上结果我们就能确定出错数据的具体下标了。找到错误位之后,对这一位取反即可还原出原始数据,实现纠错。
至此,汉明码的核心思路已经讲解终了。而事实上,接收方还有一种更快速更优雅的检验错位的方法。
你或许会觉得接收方对每一组都进行一次奇偶检验十分繁琐,那么神奇的异或操作将解决这个问题。
我们知道,对于每一组验证奇偶性时,只需将校验位一起与该组内所有数据进行异或操作即可,结果为0
就表示没问题。回忆前面我们说如果第一组结果没问题,那么出错的下标就是 xxx0
型。那么,第 组的异或结果可以直接用来确定错误位二进制下标的第 位。
现在我们来考虑这样一个实例。
0001
,其组内值为 1
的数据下标有: 0011,1111
。那么错误位的下标最后一位一定是 的最后一位。0010
,其组内值为 1
的数据下标有: 0011,0110
。那么错误位的下标倒数第二位一定是 的倒数第二位。而我们知道,。所以,上面这两组运算可以结合成一个运算:
而错误位下标的最后两位就是该结果的最后两位。
更进一步地,只要我们将值为 1
的数据的下标按位异或,我们直接可以确定出错误位的下标!在 Python 中甚至一句代码就能完美实现:
1 | from functools import reduce |
更形象更精彩的讲述强烈推荐参看下列视频!
流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接受每个帧。
常见的方式有两种:停止-等待流量控制和滑动窗口协议。
发送方每发送一个帧就等待接收方的应答信号,若接收方不反馈则发送方一直等待。每次只允许发送一帧,然后就陷入等待确认信息的过程中,所以传输效率很低。
数据链路层的可靠传输通常使用确认和超时重传两种机制来完成,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认。超时重传是指发送方在发送某一个数据帧以后帧,直到发送成功为止。 就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据。
自动重传请求(Auto Repeat reQuest,ARQ),通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道所带来差错的方法之一。
传统自动重传请求分为三种:
后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议注意,注意ARQ中的三种实现方法,不仅应用于数据链路层,而且也应用于传输层的流量控制之中。
介质访问控制(Medium Access Control) 简称 MAC。 是解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题。
信道划分介质访问控制(MAC Multiple Access Control )将使用介质的每个设备与来自同一通信信道上的其他设备的通信隔离开来,把时域和频域资源合理地分配给网络上的设备。
下面介绍多路复用技术的概念。当传输介质的带宽超过传输单个信号所需的带宽时,人们就通过在一条介质上同时携带多个传输信号的方法来提高传输系统的利用率,这就是所谓的多路复用,也是实现信道划分介质访问控制的途径。多路复用技术把多个信号组合在一条物理信道上进行传输,使多个计算机或终端设备共享信道资源,提高了信道的利用率。
信道划分的实质就是通过分时、分频、分码等方法把原来的一条广播信道,逻辑上分为几条用于两个结点之间通信的互不干扰的子信道,实际上就是把广播信道转变为点对点信道。
光的频分多路复用
,在一根光纤中传输多种不同波长(频率)的光信号,由于波长(频率)不同,所以各路光信号互不干扰,最后再用波长分解复用器将各路波长分解出来。码分多址(Code Division Multiple Access, CDMA)是码分复用的一种方式。
其原理是每个比特时间再划分为 个短时槽,称为码片(chip),通常 取 64
或 128
. 每个站点被指派一个唯一的 位码片序列,若想发送1,则站点发送它的码片序列;想发送0,则发送码片序列的反码。当多个站同时发送时,各路数据在信道中进行线性相加,到达目的地后再分解开来,为此需要每个站点的序列都相互正交。
形式化表示如下:
设 为站点 的码片向量, 为站点 的码片向量。则它们的规格化内积为0(内积数以码数),即:
此外还要去码片向量自身规格化内积为1,即,这也使得码片向量的每一位都有
当 同时发送数据到 站点时,信道内将它们的码片序列进行线性相加。
如, 欲发送一位比特, 欲发送一位比特,其中
则叠加后的向量为:.
其中 为指示函数,有:
信道的叠加向量 到达 之后,若 想获得 向它发出的数据,只需将得到的向量与 的码片向量作内积即可。
下面给出一实例予以说明。
若
而站点 要发送1, 要发送0,则:
到达 之后,再将 与 内积,得:
故,可得出 发送的数据为1.
在随机访问协议中,不采用集中控制方式解决发送信息的次序问题,所有用户能根据自己的意愿随机地发送信息,占用信道全部速率。
在总线形网络中,当有两个或多个用户同时发送信息时,就会产生帧的冲突(碰撞,即前面所说的相互干扰),导致所有冲突用户的发送均以失败告终。为了解决随机接入发生的碰撞,每个用户需要按照一定的规则反复地重传它的帧,直到该帧无碰撞地通过。
这些规则就是随机访问介质访问控制协议,它们的核心思想都是:胜利者通过争用获得信道,从而获得信息的发送权。因此,随机访问介质访问控制协议又称争用型协议。
常用的协议:ALOHA 协议、CSMA协议、CSMA/CD 协议和CSMA/CA协议等。
如果介质访问控制采用信道划分机制,那么结点之间的通信要么共享空间,要么共享时间,要么两者都共享。
而如果采用随机访问控制机制,那么各结点之间的通信就可既不共享时间,也不共享空间。所以随机介质访问控制实质上是一种将广播信道转化为点到点信道的行为。
纯ALOHA协议思想:不监听信道,不按时间槽发送,随机重发。
可以理解为:当网络中的任何一个站点需要发送数据时,可以不进行任何检测就发送数据。如果在一段时间内未收到确认,那么该站点就认为传输过程中发生了冲突。发送站点需要等待一段时间后再发送数据,直至发送成功。
假设网络负载为( 时刻所有站点发送成功和未成功而重传的帧数),则纯 ALOHA 网络的吞吐量 ,当 时,,这是它能达到在最大值。
可见,纯 ALOHA 网络的吞吐量很低。
时隙ALOHA协议的思想:把时间分成若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道,若发生冲突,则必须等到下一个时间片开始时刻再发送。
时隙 ALOHA 协议避免了用户发送数据的随意性,减少了数据产生冲突的可能性,提高了信道的利用率。
载波监听多路访问协议 CSMA(carrier sense multiple access)
CS:载波侦听/监听,每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据。
MA:多点接入
,表示许多计算机以多点接入的方式连接在一根总线上。
载波监听的原理:
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞,即发生了冲突。
协议思想:发送帧之前,监听信道。
根据监听方式和信道忙后的处理方式,CSMA协议又分三种。
特点 | 1-坚持CSMA | 非坚持CSMA | p-坚持CSMA |
---|---|---|---|
信道空闲 | 立即发送 | 立即发送 | 以概率 发送,以 推迟到下一时隙 |
信道忙 | 继续坚持监听 | 放弃监听,等待一个随机时间再监听 | 持续监听,直到信道空闲 |
优点 | 避免了媒体利用率的损失 | 可以减少冲突发生的可能性 | 综合前2个的优点 |
缺点 | 假如有两个或两个以上的站点有数据要发送,冲突就不可避免 | 可能存在大家都在延迟等待过程中,使得媒体仍可能处于空闲状态,媒体使用率降低 | 发生冲突后还是要坚持把数据帧发送完,造成了浪费。 |
载波监听多点接入/碰撞检测| CSMA/CD(carrier sense multiple access with collision detection)
CS:载波侦听/监听
,每一个站在发送数据之前以及发送数据时都要检测一下总线上是否有其他计算机在发送数据。
MA:多点接入
,表示许多计算机以多点接入的方式连接在一根总线上。 应用于:总线型网络
CD:碰撞检测(冲突检测)
,“边发送边监听”,适配器边发送数据边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。 应用于:半双工网络
CSMA/CD 协议的主要作用就是为了在检测到信号发送碰撞后及时停止发送。
为了分析站点所发出的数据帧会不会发送碰撞,如何检测是否发生了碰撞,我们引入争用期的概念。
如图所示,当站点 欲向站点 发送数据帧时,可能的情况如下。
站点从发送帧开始,最多经过时长 (即 )就可检测出所发送的帧是否遭遇了碰撞。
因此,共享总线以太网的端到端往返时间 被称为争用期(Contention Period) 或碰撞窗口(Collsion Window) ,它是一个非常重要的参数。
共享总线以太网(传统以太网)规定,争用期 的值为 512 比特的发送时间,则争用期。
为了确保共享总线以太网上的每一个站点在发送完一个完整的帧之前,能够检测出是否产生了碰撞,帧的发送时延就不能少于共享总线以太网端到端的往返时间,即一个争用期。
所以,根据上述推导,我们知道,若已知信道的数据传输率,争用期,则在一个争用期内能够传输的帧长即为 ,而这就是最小帧长。
即:最小帧长 = 总线传播时延 x 数据传输速率 x 2
对于 的共享总线以太网,争用期的值为,因此其最小帧长为:
当某个站点在发送帧时,如果帧的前 没有遭遇碰撞,那么帧的后续部分也就不会遭遇碰撞。也就是说,如果遭遇碰撞,就一定是在帧的前 之内。
由于发送帧的站点边发送帧边检测碰撞,一旦检测到碰撞就立即中止帧的发送,此时已发送的数据量一定小于。因此,接收站点收到长度小于 的帧,就可判定这是一个遭遇了碰撞而异常中止的无效帧,将其丢弃即可。
帧太长也会导致信道利用率下降,所以以太网 V2 规定有 MAC 帧长的最大限制。如下图所示。
载波监听多点接入/碰撞避免 | CSMA/CA(carrier sense multiple access with collision avoidance)
虽然CSMA/CD
协议已成功地应用于有线连接的局域网,但无线局域网不能简单地搬用CSMA/CD协议。其主要原因是:
CSMA/CD
协议要求一个站点在发送本站数据的同时还必须不间断地检测信道,以便发现是否有其他的站也在发送数据,这样才能实现“冲突检测”的功能。但在无线局域网的设备中要实现这种功能花费过大。采用该协议要求设备要主动避免冲突而非被动侦测的方式来解决冲突问题。避免冲突的方法主要有两个:
1、监听到信道空闲时,并不是立即发送,而是等待一段时间再发送数据。
2、先发送一个很小的信道侦测帧RTS,如果收到最近的接入点返回的CTS,就认为信道是空闲的,然后再发送数据
协议的主要流程如下:
2️⃣ 令牌传递协议又称“标记传送”,局部网数据送取的一种控制方法,多用于环形网。
1
组成。无连接、不要求确认、曼彻斯特编码
基本服务集中基站(base station)、接入点(Access Point,AP)
去往AP | 来自AP | 地址1 | 地址2 | 地址3 | 地址4 |
---|---|---|---|---|---|
0 | 1 | 接收地址=目的地址 | 发送地址=AP地址 | 源地址 | - |
1 | 0 | 接收地址=AP地址 | 发送地址=源地址 | 目的地址 | - |
为了尽量避免碰撞,802.11规定,所有的站在完成发送后,必须再等待一段很短的时间(继续监听)才能发送下一帧。这段时间的通称是帧间间隔IFS。
帧间间隔的长短取决于该站要发送的帧的类型。高优先级的帧需要等待的时间较短,因此可以优先获得发送权,但低优先级帧就必须等待较长的时间。若低优先级帧还没来得及发送而其他高优先级帧已发送到媒体,则媒体变为忙态因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。至于各种帧间间隔的具体长度,这取决于使用的物理层特性。
IFS提供对无线介质访问的不同优先级来进行划分的,不同优先级按照IFS的时间长短来进行划分,时间越短,表示其对应的优先级越高,帧间间隔的时间从小到大列出如下:
SIFS:短帧间间隔。SIFS是最短的时间区段,用来间隔需要立即响应的帧,如控制帧(RTS/CTS/ACK)等。在帧交换顺序地两次传输之间使用最短间隔,可以防止其它正在等待介质的站点试图使用介质。
PIFS:点协调帧间间隔,只能够由工作于PCF模式的站点来使用。
DIFS:分布协调帧间间隔,是最长的IFS,只能够由工作于DCF模式的站点来使用。
EIFS: 在前一帧出错的情况下,发送节点 不得不延迟 EIFS 而不是DIFS时间段,再发送下一帧。