数据链路层&&差错控制&&流量控制
数据链路层作为物理层的上层,为网络层提供服务,提供了成帧,差错控制,流量控制等功能
文章目录
成帧
帧是数据链路层规定的最小的数据传送逻辑单位,帧将网络层交下来的数据包按照所采用的协议根式,封装成一定形式的帧,帧还需要考虑双方的同步问题,计算帧的校验和,帧的基本格式:
- 帧定界:标志了帧的开始与结束,包括字节计数法,字符填充法,位填充法
- 地址:属于物理或硬件地址,用于设备或机器的物理寻址,如网卡地址
- FCS:帧校验序列,用来判断传输是否正确
差错控制
差错控制是数据链路层一个重要的服务,在数据通信中,由于噪声的干扰,接收端收到的数据与发送数据会有不一致的现象,这就需要差错控制
前向纠错FEC
首先在发送端将信息进行纠错编码,然后将纠错码发送至接收端,接收端译码后发现错误就自动纠正错误,不需要重发信息
自动请求重发ARQ
在发送端对信息进行检错编码,然后把检错码经信道发送至接收端,接收端译码后判断是否有错,如果有错则请求重传,直到没有错误为止
奇偶校验码
奇偶校验是将数据进行分组,每一组加上一个校验位,规则如下:
- 奇校验:该组若有奇数个1,则在校验位补0,如果有偶数个1,则在校验位补1
- 偶校验:改组若有偶数个1,则在校验位补0,如果有奇数个1,则在校验位补1
循环冗余校验码CRC
采用多项式编码的方式,举个例子:
对于序列10011的多项式表示为:x4+x+1
该校验的方法如下:
- 双方规定G(x),而发送方把要发送的数据转为多项式K(x)的形式
- 定义M(x)=xr*K(x),其实就是把K(x)序列往左移动了r位,这r位就是用来给余数挪位置的
- 然后用M(x)/G(x)得到余数R(x),在发送的时候发送T(x)=R(x)+K(x)
- 接收方收到T(x)后,然后用T(x)/G(x),如果可以整除,那么就说明传输正确
eg:
流量控制
停等协议SAW
停等协议非常好理解,就是发送方每发送一帧消息就会停下来,等待接收方接收后然后发来确认消息,这时发送发才会发送下一帧消息。确认信息位ACK表示正确确认信息,NAK表示需要重传消息,在一定的时间没有收到确认消息,发送方也会重传
很明显,这种发送消息帧的方式效率是非常低的,所以被淘汰掉了
自动请求重传ARQ
既然一个一个发送会导致效率很低,那么一次性发送多帧称为了改进的主要方向,ARQ又分为回退N和选择重传两种
回退N(Go Back N)
回退N属于ARQ,所以发送方一次会发送多帧数据,不必等待接收方的应答,在连续发送多帧数据后,陆续接受到接收方的确认信息,如果接收到NAK消息,则从该帧往后的所有数据全部重新发送
- 优点:提高了效率
- 缺点:由于出错后,要进行回退,所以导致很多正确的帧重传,会降低发送效率
选择重传协议(SR)
了解了回退N协议后,选择重传协议就很好理解了,选择重传协议只会把错误的帧进行重传,而在接收端会有一个缓冲区,存储接收到的错误帧后面的帧,在收到重传后的帧后从缓冲中取出,这样就按顺序接收了
- 优点:避免重传正确的帧,提高了信道利用率
- 缺点:接收端需要一个缓存,控制比较复杂
滑动窗口协议
滑动窗口是指在发送端和接收端都有一个窗口,所谓窗口就是通过两个指针限定帧的范围,只有帧号发送窗口内的帧才可以发送,只有帧号在接收窗口的帧才可以接受,在确认完毕后窗口整体向前滑动
其实滑动窗口就是上面情况的总结,根据不同的情况对应