数据链路层&&差错控制&&流量控制

  数据链路层作为物理层的上层,为网络层提供服务,提供了成帧,差错控制,流量控制等功能

成帧

  帧是数据链路层规定的最小的数据传送逻辑单位,帧将网络层交下来的数据包按照所采用的协议根式,封装成一定形式的帧,帧还需要考虑双方的同步问题,计算帧的校验和,帧的基本格式:

数据链路层&&差错控制&&流量控制

  • 帧定界:标志了帧的开始与结束,包括字节计数法,字符填充法,位填充法
  • 地址:属于物理或硬件地址,用于设备或机器的物理寻址,如网卡地址
  • FCS:帧校验序列,用来判断传输是否正确

差错控制

  差错控制是数据链路层一个重要的服务,在数据通信中,由于噪声的干扰,接收端收到的数据与发送数据会有不一致的现象,这就需要差错控制

前向纠错FEC

  首先在发送端将信息进行纠错编码,然后将纠错码发送至接收端,接收端译码后发现错误就自动纠正错误,不需要重发信息

自动请求重发ARQ

  在发送端对信息进行检错编码,然后把检错码经信道发送至接收端,接收端译码后判断是否有错,如果有错则请求重传,直到没有错误为止

奇偶校验码

  奇偶校验是将数据进行分组,每一组加上一个校验位,规则如下:

  • 奇校验:该组若有奇数个1,则在校验位补0,如果有偶数个1,则在校验位补1
  • 偶校验:改组若有偶数个1,则在校验位补0,如果有奇数个1,则在校验位补1
循环冗余校验码CRC

  采用多项式编码的方式,举个例子:
对于序列10011的多项式表示为:x4+x+1

该校验的方法如下:

  1. 双方规定G(x),而发送方把要发送的数据转为多项式K(x)的形式
  2. 定义M(x)=xr*K(x),其实就是把K(x)序列往左移动了r位,这r位就是用来给余数挪位置的
  3. 然后用M(x)/G(x)得到余数R(x),在发送的时候发送T(x)=R(x)+K(x)
  4. 接收方收到T(x)后,然后用T(x)/G(x),如果可以整除,那么就说明传输正确

eg:
数据链路层&&差错控制&&流量控制

流量控制

停等协议SAW

  停等协议非常好理解,就是发送方每发送一帧消息就会停下来,等待接收方接收后然后发来确认消息,这时发送发才会发送下一帧消息。确认信息位ACK表示正确确认信息,NAK表示需要重传消息,在一定的时间没有收到确认消息,发送方也会重传

  很明显,这种发送消息帧的方式效率是非常低的,所以被淘汰掉了

自动请求重传ARQ

  既然一个一个发送会导致效率很低,那么一次性发送多帧称为了改进的主要方向,ARQ又分为回退N选择重传两种

回退N(Go Back N)

  回退N属于ARQ,所以发送方一次会发送多帧数据,不必等待接收方的应答,在连续发送多帧数据后,陆续接受到接收方的确认信息,如果接收到NAK消息,则从该帧往后的所有数据全部重新发送

  • 优点:提高了效率
  • 缺点:由于出错后,要进行回退,所以导致很多正确的帧重传,会降低发送效率
选择重传协议(SR)

  了解了回退N协议后,选择重传协议就很好理解了,选择重传协议只会把错误的帧进行重传,而在接收端会有一个缓冲区,存储接收到的错误帧后面的帧,在收到重传后的帧后从缓冲中取出,这样就按顺序接收了

  • 优点:避免重传正确的帧,提高了信道利用率
  • 缺点:接收端需要一个缓存,控制比较复杂
滑动窗口协议

  滑动窗口是指在发送端和接收端都有一个窗口,所谓窗口就是通过两个指针限定帧的范围,只有帧号发送窗口内的帧才可以发送,只有帧号在接收窗口的帧才可以接受,在确认完毕后窗口整体向前滑动

  其实滑动窗口就是上面情况的总结,根据不同的情况对应
数据链路层&&差错控制&&流量控制