参考资料: https://b23.tv/VRo4pKX
数据链路层的本质是帮助物理层无差错地传输数据。
数据链路层的功能:
在帧的开始和结尾加上定界符,来告诉接收方如何判断已经发来一个帧,和帧何时结束。组成帧的方法有以下几种。
使用一个字节标明帧的字节数,垃圾方法
我们可以规定某个SOH(start of head)字符为开始字符。EOT(End of tail)字符为结束字符。但是如果原始数据里也有SOH,EOH怎么办。我们就定义一个ESC字符作为转义字符。
在原始数据中如果遇到和“开始字符、结束字符、转义字符”相同的字符,我们一律在前面添加转义字符,来告诉接收方,这不是特殊字符,就把后面这个数据当成原始数据处理就行。
总结:实现复杂,不兼容性,不常用。
在发送端,扫描整个信息字段,只要连续5个1,就立即填入1个0。111110
然后将开始字符和结束字符定为01111110.封装成帧。
在接受端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描,发现连续5个1时,就把后面的0删除,还原原始数据。
比如曼彻斯特编码,所有的字符都是高-低和低-高。
高-高和低-低都是违规编码,可以把违规编码作为起始和结束位。
线路的电气特性造成的噪声,只能通过提高信噪比和改进传感器来解决。
外界特定的短暂原因造成的冲击噪声,得使用编码问题解决。
链路层是为网络层服务的,如果通信质量好的有线传输链路,那么链路层可以采用无确认无连接的服务,将校错机制交给上层的传输层;如果是通信质量差的无线传输链路,那链路层就会使用有确认无连接和有确认面向连接的服务来做出错重传。
奇校验码——“1”的个数为奇数
偶校验码——“1”的个数为偶数
1.将待传数据分成很多个组,每个组长度为d位
2.每个组(d位)都加上冗余码(FCS)构成帧再发送
d位的原始数据 + r位的FCS
r位的FCS是怎么确定的呢?
3.接收方检验
d+r位数据 / 生成多项式, 若余数为0,则认为是正确接收,若余数不为0,则丢弃。
总结:可以对帧无差错接受,但不能检查哪一位错了。
和r位0异或,你会成为你自己,和你自己异或,如果你不是r位0,你就错了。
两个合法编码的对应比特取值不同的比特数称为两个码字的海明距离(码距)。一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的海明距离。
如,110,111 码距为1, 111,000,码距为3.
0000,1001,1010,0011,1100.这个编码集的码距为2,
如果添加一个0001,会发现该码字报错,因为它码距为1,大于该编码集的海明距离,那能否校错呢,不能。
码距为2,可检测出1位错,但不可被纠正。
以此类推,要检测d位错,需要的是d+1的海明码,要纠正d位错,需要的是2d+1的海明码。
海明码的确定过程:
首先,确定海明码的位数r。
数据有m位,冗余码有r位。校验码有 2 r 2^r 2r种取值。
那就需要满足 2 r > = m + r + 1 2^r>=m+r+1 2r>=m+r+1,确保校验码的取值种类可以大于等于所有位的位数,可以充分表示每一位出错的可能。(确定r可以使用暴力穷举法)
其次,确定海明码的位置和值。我们会在2的幂次方的位置放置海明码(1,2,4,8……),每一位的海明码会管辖一组数的校验,比如4号校验码负责4,5,6,7的校验。同时,为了满足偶校验,即4,5,6,7有偶数个1,就可以确定4号校验码的值。
检错并校错
接收方收到数据为1110001,我们根据偶校验,就能判断出接收的数据是否有错,同时能得出校验码的值,将校验码的值按序排好,就可以得出哪一位错了。
每发送一个帧就停止发送,等待对方确认,在收到确认后再发送下一个帧。
总结:在往返时延RTT》发送时延的链路通信,非常不适用。
超时记录器:每发送一个帧就启动一个计时器,此处设置的重传时间大于帧传输的平均RTT。
发送一个帧,也必须保留它的副本,直到收到它的确认帧。
发送窗口的大小必须小于 2 n − 1 2^n-1 2n−1, 其中n是构成帧序号的比特数量。
举个特殊例子,如图,当我们将发送窗口大小取为4时,发送窗口发送给接收方帧序号位0-3的位数据后,接收方成功接收并返回确认帧,同时接收窗口前进至第4位,也就是帧序号为0的下一位。但意外的是,接收方发回的确认帧没有被发送方接收到,此时,发送方会超时重传数据0~3,那么接收方该怎样确定发送方发送的是旧的0-3还是新的0-3呢?
总结:如果帧序号的比特数为n,则帧序号会在0 - 2 n − 1 2^n-1 2n−1间不断重复,而滑动窗口过大的话,接收方没有办法确定发送方发的是哪一批0 - 2 n − 1 2^n-1 2n−1,因为接收方事实上只认帧序号。当帧序号在滑动窗口中重复,接收方就无法辨析新旧数据的区别。
比起后退N帧协议的特殊性:
提问:为什么发送窗口的尺寸必须小于等于 2 n − 1 2^{n-1} 2n−1呢?
当采用n个比特给帧编号时,那么帧序号就会为 0 —— 2 n − 1 0——2^{n}-1 0——2n−1,而当发送窗口大于 2 n − 1 2^{n-1} 2n−1时,就会出现接收方无法分辨新、旧数据帧的问题。
比如下图中,当发送方发送0,1,2,3,4给接收方时,接收方会移动滑动窗口到5,6,7,0,1,并返回确认帧,但确认帧却丢失了,发送方会再次重传0,1,2,3,4,但此时发来的0,1,接收方就分不清是旧的0,1,还是新的0,1了。所以窗口的大小需要小于等于帧序号最大值的一半,才能够在确认帧丢失时,也能分清新旧数据。
信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备。
多路复用技术:把多个信号在一条物理信道上传输,同时又不互相干扰,共享信道资源。
介质访问控制分为静态划分信道和动态划分信道:
静态划分信道分为:
总结:基于多路复用技术划分资源的方法,网络负载重时:共享信道效率高,且公平,网络负载轻时:共享信道效率低。
动态分配信道分为:
ALOHA协议包括纯ALOHA协议和时隙ALOHA协议。
其中,纯ALOHA协议的过程为:
时隙ALOHA对纯ALOHA进行了改进,以提高通道的利用率。
CSMA(载波监听多址接入)协议是一种用于改善网络通信效率的协议,主要应用于有线和无线网络环境中,以减少数据包之间的冲突。CSMA协议的核心思想是,在发送数据之前先检测信道是否空闲,从而降低数据包冲突的可能性。
CSMA协议的过程为:
载波监听:在发送数据之前,设备首先检测通信信道是否被其他设备使用。这一步被称为“载波监听”。
信道状态判断:
随机退避算法:当检测到信道忙时,设备使用随机退避算法来决定等待的时间长度,以减少再次发生冲突的概率。
数据发送与冲突检测:
tip:有一种p-坚持CSMA算法,会持续监听,直到信道空闲时再以p概率马上发送,1-p的概率等到下一个时隙再发送。这样做的目的就是尽一切可能避免碰撞。
有些帧的帧长特别短,往往还没识别出碰撞,数据帧已经发送成功了,那么我们希望在数据发送结束前检测碰撞,就要设定最小帧长。
帧的传输时延至少要两倍于信号在总线中的传播时延。
帧长(bit)/ 数据传输速率 ≥ \geq ≥ 2 τ 2\tau 2τ
最小帧长 = 总线传播时延 × 数据传输速率 × 2
在以太网中,规定最短帧长为64B,凡是长度小于64B的都是由于冲突而异常终止的无效帧。
CSMA/CA是一种在无线网络(如Wi-Fi)中广泛使用的媒介访问控制方法,旨在减少数据包之间的冲突并提高网络效率。与CSMA/CD(碰撞检测)主要用于有线网络不同,CSMA/CA通过预防冲突来优化无线信道的使用,因为在无线环境中检测冲突要困难得多。CSMA/CA的基本工作过程包括以下几个步骤:
总结
CSMA/CA协议对于提高无线网络环境中的数据传输效率至关重要,是Wi-Fi网络通信的核心组成部分。
既不产生冲突,发送时也可以占用全部带宽。
轮询访问MAC协议分为轮询协议和令牌传递协议。
轮询协议的主要过程是主结点轮流“邀请”从属结点发送数据。
它的主要问题是轮询开销、等待延迟、单点故障。
另一种是令牌传递协议,它的工作过程是