数据链路层的功能概述
封装成帧 :将从网络层发送的IP数据报添加首部和尾部,封装成一个帧,交付给物理层进行传输。也能够从物理层接受帧,还原成IP数据报,发送给网络层
差错控制:发现并解决一个帧内部位错误
可靠传输:发现并解决一个帧错误
流量控制:控制发送方发送的速度,让接收方来得及处理。
介质访问控制
封装成帧(组帧)
字符计数法
在每个帧的开头,用一个定长计数字段来表示帧的长度。
帧长=计数字段长度+帧的数据部分的长度。
缺点:任何一个计数字段出错,会导致后序所有的帧无法定。(第一个帧的计数字段表示的帧长度从7跳变成为9,导致第一个帧的定界就错误了,后序所有帧的定界也将错误)
字节填充法
使用控制字符SOH(Start Of Header)与控制字符EOT(End Of Transmission)来界定帧的开头和结尾。
如果在帧的数据中出现了控制字符,那么需要进行转义处理。也就是在原始数据中的控制字符前插入转义字符ESC。
如果在帧的数据中出现了转义字符自身,那么就在转义字符之前插入一个转义字符。
只要遇到转义字符,就将后面的一段数据认为数据文本
零比特填充法
约定特殊的比特串表示帧的开始和结束。通常为01111110
如果在帧的数据中出现了特殊的比特串,如(01111110)那么发送方在数据部分进行处理时,每当遇到连续的五个1,就填充一个0。接收方进行处理时,每遇到连续的五个1,就删除后面的0。
违规编码法
基于曼彻斯特编码,即观察周期的中间部分,电平上跳代表0,下跳代表1。如果周期内没有发生跳变,则为违规编码。
数据链路层直接将帧交付给物理层,由物理层来实现违规编码法。
差错控制
奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
偶校验作为常用,过程为:对每个编码的每一位进行异或运算。所得出的结果就是其偶校验位的数值。
循环冗余校验码
数据发送方、接受方约定一个除数。K个信息位+R个校验位作为被除数,添加校验位后需要保证除法的余数为0。收到数据后,进行除法检查余数为0,若余数不是0则表示出错,需要进行重传或者纠错。
海明校验码
将信息分组进行偶校验,有着多个校验位。
信息为有n个,校验位有k个,整个信息一共有n+k位。k个校验位能反映2k 种状态,则会有这样的不等式 2k >= n + k + 1 。n+k+1为所有可能的状态,+1是唯一的一种正确的状态。
求校验位的值的过程:校验位位于Hi 就把i转化为二进制写出来。如上图列表,从右到左每一列分别代表P1 P2 以此类推。观察每一列中哪一行带有1,如果带有1就加入到异或计算中,对应的计算出Pn的值。
海明码的纠错:根据之前的求校验位过程中得到的分组来产生校验方程。
流量控制与可靠传输
滑动窗口机制
发送窗口WT :发送方当前允许发送的帧。接收窗口WR :接收方当前允许接收的帧。
位于发送窗口内的帧允许被发送,位于接收窗口的帧允许被接收。
停止-等待协议 (S-W)
停止等待协议的WT =1,WR =1
该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(ACK)返回后才能继续发送下一帧
由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号
由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特(0或1)来编号就够了
如果出现数据帧丢失,接受方无法接受帧,则引入超时重传机制。在超时前没收到确认帧,则进行重传当前数据帧。
如果出现确认帧丢失,接收方的滑动窗口超过了发送方。接收方会丢弃重复的帧,返回重复帧的ACK。
如果数据帧有差错,接收方会丢弃此数据帧,不返回ACK,接收窗口不滑动,等待发送方超时重传。
后退N帧协议 (GBN)
发送窗口>1,接收窗口=1
如果用n bit给帧进行编号,需要满足发送窗口+接收窗口<=2n
接收方可以累积确认:连续收到多个帧,可以仅返回最后一个帧的ACK。也可以说。ACK_i 表示接收方已经收到了i号帧之前所有的帧。
如果出现数据帧丢失,则会丢弃落在接收窗口之外的帧,并发送目前已经正确接收的最后一个帧的ACK。丢弃了落在接收的帧A会导致A从未发送过ACK,使得发送方对于A的计时器超时,则会重发以A帧为开始的n帧。
如果出现确认帧丢失,则会导致之前发送的n个帧的计时器超时,发送方会重发这n个帧,但是接收方的接收窗口已经超过了这n个帧,也就是说接收方接收到了非法的帧。接收方会返回目前已接收的最后一个争取帧的ACK。
为什么一定要满足发送窗口+接收窗口<=2n ?
当接收方发送的ACK_3丢失了,会导致A帧的计时器首先出现超时,出发超时重传机制,会将标号为0,1,2,3这四个帧进行重传,但是接收方的接收窗口已经滑动到了下一组(如图示),会导致A落在了E上,出现错误。
选择重传协议 (SR)
发送窗口>1,接收窗口>1,但是接收窗口不能大于发送窗口
接收方可以连续接收多个帧,但是每个帧都要返回ACK
如果出现数据帧丢失,当出现一个帧丢失后,接收方滑动窗口与发送方发送窗口只会滑动到以当前帧为开头的窗口状态,因为未收到丢失帧的ACK,引发发送方超时重传,重传丢失帧。
如果出现数据帧出错被丢弃,接收方会返回其他正常帧的ACK,出错帧的NAK,主动要求重新发送出错的数据帧。
如果出现确认帧丢失,会出现发送方重发丢失确认帧的帧,使得接收方收到了重复帧,落在了接收窗口之外。接收方如果接收到了重复帧,会重发重复帧的ACK。
为什么一定要满足发送窗口+接收窗口<=2n ?
当接收方发送的ACK0,1,2,3,4全部丢失了,会使得接收方窗口已经滑动,发送方超时重传,如图所示,会导致0号帧错误接收。
信道划分
时分复用与统计时分复用
时分复用将时间划分为等长的TDM帧,每个TDM帧分为多个时隙,将这多个时隙分配给不同的用户接收。
但是TDM可能会产生某个节点不发送数据,分配的时隙闲置了,信道的利用率低,所以产生了统计时分复用。
统计时分复用:在TDM的基础上,动态按需分配时隙。若由节点不发数据,则不分配时隙。也可以出现一个节点占用全部的时隙。
频分复用与波分复用
将信道的总频带划分为多个子频带,每个子频带作为一个子信道,每个用户使用一个子信道进行通信。
波分复用就是将在光纤中的光进行频分复用,即将光的波长进行拆分。
码分复用
各节点用专属的码片序列发送数据:类似于多维向量的方式,相互通信的各个节点知道彼此的码片序列。这多个码片向量对应的多维向量必需相互正交。
随机介质访问控制
ALOHA协议
纯ALOHA协议:准备好数据帧后,就理解发送到信道上,并等待ACK,随机等待一段时间后没有收到ACK,则进行重传,重复如上的超时重传流程。
时隙ALOHA协议:只有在每个时隙开始时,将准备好的数据装载到最近的一个时隙发送出去,并实现了超时重传。
CSMA协议
对ALOHA进行改进:在发送数据之前,先监听信道是否空闲,只有信道空闲时,才会尝试发送。