2.1 数据链路层的概念
链路:就是从一个结点到相邻节点的一段物理线路(中间无其他交换节点)
数据链路:把实现通信协议的硬件和软件加到链路上,构成了数据链路
数据链路以帧为单位传输和处理数据
2.2 封装成帧
封装成帧:给网络传递下来的数据单元加上帧头和帧尾,封装成数据链路层的数据单元,帧头和帧尾包含控制信息
帧头和帧尾的作用
帧定界:根据帧定界的标志筛选出一个个帧来
(不是所有协议都有帧定界)
因为数据帧传递到物理层,物理层会在数据帧之前加前导码再转换成bit信号传输走,前导码前七个字节是同步码,使接收方的时钟同步之后一字节为帧开始定界符
此外以太网还规定了以96bit时间的帧间间隔的发送时间,不需要结束符
字节填充例如:
帧定界符本质上就是一个特殊的数字,会存在一种情况,在传输的数据中可能会存在和帧定界结尾符相同的数字,这时候就会导致提前结束帧的接受,这时候就需要一个转义符(转义符在多处都有应用,可以了解一下在别的地方的应用),加入转义字符后就会对转义字符后的数据正常接受,而不会按照帧定界结尾符来处理,当传输数据中有和转义字符一样的数据,就和遇到帧定界结尾符一样在转义字符前加一个转义字符就可以了。
比特填充例如:
图中存在两个帧的定界符,我们可以在发送前进行扫描,每五个连续的1之后加一个0,然后接受后再进行剔除就可以了
帧的长度相对于帧头和帧尾来说越长,传输效率越高,但是考虑到差错控制,每一种数据链路层的传输协议都设置了帧数据部分的最长数值(MTU )
2.3 差错检测
比特差错:指的是在传输过程中0可能变成1,1可能变成0.
差错检测:帧尾中有检错码,根据检错码和检错算法,检查是否帧中是否出现了差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BEF
奇偶校验
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。但是存在一个缺点,就是当出现偶数个误码发生的时候就就无法检测出。
循环冗余检验CRC
收发双方约定好一个生成多项式G(x);发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码)将其添加到待传输数据的后面一起传输;接收方通过生成多项式来计算收到的数据是否产生了误码;
计算过程如下:
循环冗余校验CRC有很好的检错能力(漏检率非常低)虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
2.4可靠传输
什么是可靠传输服务?
发送端发送的信息全部都被接收端接受。
相对而言的就是不可靠的传输,就是将收到的有误码的帧进行丢弃,不做其他操作。
这里的可靠传输分为两种情况
有线链路:一般的有线链路的误码率比较低,为了减小开销,不要求数据链路层对上层提供可靠传输的服务,即使出现了误码,也由上层进行处理和解决。
无线链路:无线链路容易受到干扰,因此要求数据链路层对其上层提供可靠链路的传输。
分组差错有多种,上面提到的bit差错只是其中的一种,传输差错还有分组丢失,分组失序,分组重复等
实现可靠传输的三种方式:
这三种协议的机制不仅仅只是适用于数据链路层实现可靠传输,也可以应用于其他场景
停止-等待协议SW:
收发双方基于互联网通信,通过确认与否认,超时重传,确认丢失,确认迟到四种调整保证可靠性传输。
确认与否认:当发送方发送数据到接收方的时候,如果经过检错码检错没有错误,就接收并向发送方发送ACK分组,如果经过检错码有误,就丢弃分组,向发送方NAK分组。
超时重传:当我们发送数据的时候,数据在传输过程中丢失,接收方一直收不到数据,就无法发送ACK分组或者NAK分组,这时候,我们就设置一个超时计时器,当略微超过平均往返时间的时候就重新发送数据包。
确认丢失:与超时重传对应的问题就是
回退N帧协议GBN:
选择重传协议SR: