封装成帧

  • 封装成帧是指数据链路层给上层交付的数据协议单元添加帧头和帧尾使之成为帧。
    • 帧头和帧尾中包含有重要的控制信息
    • 帧头和帧尾的作用之一就是帧定界

ppp帧两头各一个字节充当帧定界标志
mac帧交到物理层后会被添加前导码,前导码前7个字节是同步码,用来使时钟同步,后一字节为定界符

  • 透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。

如果数据中出现帧定界符,会采取措施防止出错,比如加入转义符

  • 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
  • 面向比特的物理链路使用比特填充的方式实现透明传输。

每5个连续的比特1后面加一个比特0

  • 为了提高帧的传输效率应当使帧的数据部分长度尽可能大些
  • 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)。

    差错检测

  • 在实际的通信链路中,1可能0,0可能变成1,这成为比特差错

  • 一段时间内,传输错误的比特占总比特数的比率称为误码率BER(Bit Error Rate)
  • 使用差错检测码来检测数据在传输过程中是否产主了比特差错,是数据链路层所要解决的重要问题之一。

FCS字段就是用来帧检验的
image.png

奇偶校验

  • 在待发送的数据后面添加1奇偶校验位,使整个数据(包括校验数据位)中1的个数为奇数(奇校验)或偶数(偶校验)
  • 如果有奇数个位发生误码,奇偶性发生变化,可以检查出误码
  • 偶数个位发生误码,会漏检

奇偶校验漏检率高,一般不用

循环冗余校验(CRC)

  • 双方约定好一个生成多项式G(x);
  • 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到传输数据后面一起传输
  • 接收方通过生成多项式来计算收到的数据是否产生了误码

image.png
image.png
image.png
注意:
除法是怎么除的:上下不是相减,是上下进行异或运算
余数位数应与生成多项式最高次数相同,位数不够,就补0

小结

  • 检错码只能检测帧在传输中出现了差错,但不能定位错误,因此无法纠正错误
  • 要想纠错,只能用冗余信息更多的纠错码向前纠错,开销太大,较少使用
  • 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算复杂,但易于实现,因此被广泛应用于数据链路层
  • 计算机网络中同场采用检错重传方式纠正传输错误或者仅仅求低检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

可靠传输

  • 使用差错检测技术接收方在数据链路层可以检测出传输过程中是否产生了误码
  • 如何处理取决于数据链路层向上层提供的服务类型
    • 不可靠传输服务:仅仅丢弃有误码的帧,其他什么都不做
    • 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
  • 一般情况下,有线链路的误码率也比较低,为了减小开销,并不要求数据链层向上提供可靠传输服务,即使出现误码,可靠传输的问题由上层处理。
  • 比特差错只是传输差错中的一种
  • 传输差错还包括分组丢失、分组失序、分组重复
  • 分组丢失、分组失序、分组重复这些错误一般不会出现在数据链路层,而会出现在上层
  • 可靠传输并不局限于数据链路层,其他各层均可以选择实现可靠传输服务
  • 可靠传输实现复杂,开销大,是否使用取决于应用需求。

可靠传输的实现机制

停止-等待协议SW

image.png
接收方收到数据分组,向发送方发送确认分组ACK,等待下一个数据分组,若发送方发送的数据有了误码,接收方可能直接丢弃,等待超时重传,或者发送NAK分组

  • 接收端检测到数据分组有误码时,将其丢弃,等待发送方的超时重传,为使其尽快超时重传,也可给发送方发送NAK分组
  • 为了让接收方能够判断所受到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需要一个比特编号就够了,即0和1.
  • 为了让发送方能判断收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量也是1。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号
  • 超时计时器设置的重传时间应仔细选择,一般可将重传时间选为略大于”从发送方到接收方的平均往返时间”
    • 在数据链路层点对点的往返时间比较确定,重传时间比较号设定。
    • 然而在运输层,由于端倒端往返时间非常不确定,设置合适的重传时间不容易。

停止-等待协议的信道利用率

image.png
TD:发送数据分组的发送时延
TA:发送确认分组的发送时延
RTT:收发双方之间的往返时间RTT
省略了处理时延

  • 当往返时延RTT远大于数据帧发送时延T**D**时(例如卫星链路),通道利用率非常低
  • 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
  • 为了克服停止-等待协议通信利用率很低的缺点,就产生了另外两种协议,即后对N帧协议GBN和选择重传协议SR。

为了提高利用率,可以采用流水线传输:不等确认分组发过来,直接发好几个数据分组
image.png

回退N帧协议GBN

该协议是在采用流水线传输的基础上,进行讨论的
接收双方分别有发送窗口WT和接收窗口WR。发送窗口尺寸大小为2**n**-1,n为采用的比特数,若窗口大小为1,则等于停止-等待协议。接收窗口的大小固定为1.

无差错情况

例如取发送窗口尺寸为5
则先将编号为0~5的分组发送出去,正确到达了接收方后,接收方按序接收他们,每接收一个,接收窗口就向前话挪一个位置,并发回确认分组,发送方每接收一个确认分组,窗口就向前滑动一个位置。然后发送方将确认过的分组从缓存中删除,接收方择机将接收到的数据分组传到上层

累积确认:接收方每不一定要对每一个数据分组都逐个发确认分组,可以收到几个数据分组后,对按序到达的最后一个分组发送确认。举例:发送了编号0~4的5个分组,接收0和1后发一个ACK1,接收2到4后,发送ACK4,ACK1丢失了,但是收到了ACK4,这样就可以认为4及4以前的都正确收到了。优点就是:即使确认分组丢失,发送方可能也不必重传

有差错情况

例如发送10765四个数据包,结果5号包有误码,将其丢弃,这时候1076四个包的序号在接收窗口匹配补上,所以也都不接收,并对之前按时接收的最后一个分组进行确认,即发回去4个ACK4,发送方收到4个ACK4,就知道之前发的出错了,可以立刻重传。至于收到几个重复确认就立刻重传,由具体实现决定。在这个例子中,只有5号误码了,但前面1076也受到了牵连,还是要重发,这就是”Go Back N”,回退N帧。,所以当信道通信质量查的话,效率并不必停止-等待协议效率高

发送窗口的尺寸不能超过其上限,不然不能分辨新旧分组(编号一样)。

总结

  • 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议
  • 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
  • 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高

选择重传协议SR

发送窗口WT尺寸小于等于2**n-1**,
WR大于1小于等于WT。
举例:
窗口大小为4,发送0,1,2,3四个分组,结果2丢失了,这时候发送方接收0,1两个分组,发送0,1确认分组4,5落入新的接收窗口,接收方再接收3号分组,发送3号确认分组,但此时接收窗口不能滑动,因为3号数据分组不是按序到达的数据分组。这些确认分组到达发送方,发送方每按序接收到一个确认分组,发送窗口就向前滑动,4,5就落入了新的发送窗口,发送4,5号分组,将0,1号缓存删除,接收方也可择机交付0,1分组到上层,但是发送窗口不能动,因为3号确认分组不是按序到达的,而是将3号进行标记,表示它到过了。4,5号到达后,接收方接收,再发送确认分组,但窗口不动,发送方那里的计时器发现2号超时了,就发送2号,并标记4,5号分组,接收方确认后,窗口移动。

关于窗口大小

  • 若发送窗口大小为1,则与停止等待协议一致,
  • 如果大小超出限制,则会出现无法分辨新旧分组的问题。
  • 如果接收方的接收窗口尺寸为1,则跟回退N帧一样,
  • 如果接收窗口大于发送窗口,则没有意义