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分组,这时候,我们就设置一个超时计时器,当略微超过平均往返时间的时候就重新发送数据包。

        确认丢失:当我们发送数据后,接收方接收后发送ACK分组,但是ACK分组在传输过程中丢失了,这时就触发了超时重传,这时接收方会再次收到一个相同的数据包,这时为了检验这个数据包是不是上次是同一个,就需要编号,这样接收在相同数据包时就会丢弃并再次发送ACK确认包。

        确认迟到:由于某些原因ACK确认分组迟到了,就会触发超时重传,但是不久就收到了迟到的ACK确认分组,就会紧接着发送data2的数据包,等第二个发送的数据包回来后,发送方就会发送第三个数据包,这时候我们就需要给ACK确认分组也进行编码,这时候就是当收到重复的ACK确认分组就会进行丢弃

        缺点:

              

        当往返时延RTT远大于数据帧发送时间Td时(比如利用卫星传输时),信道利用率非常低,为了克服这一缺点就诞生了另外两种退回协议。

        回退N帧协议GBN:

        采用3个bit,给分组编序号,即序号0~7,落在窗口内的就会发送

        本例中:

        发送方的窗口大小Wt=5(1~7),一次发送多少个窗口

        接收方的窗口大小为Wr=1

        接收方不一定对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序列到达的最后一个数据分组发送确认,ACKn表示序号为n及以前的所有数据分组都已正确接收。

        当发送方发送了5个数据包后,接收方接收了2个数据包后会发送一个ack1,接收5个数据包后会发送一个ack4这是时候,就算ack1丢失,在发送方接收到ack4时,也知道接收方接收到了前两个数据包,不必超时重传。

        在有差错的情况下,例如发送方继续发送数据,假设数据包5产生错误,这时接收方就会丢弃,后续的数据包尽管没有错误但是因为数据包窗口号对不上,也会不接收数据包,这时就会就会连续发送四个ACK4。

假设我们发送方的窗口大于7呢?

        这时我们选择Wt=8,发送方发送8个数据包到接收方,这时接收方会发送一个ack7去往发送方(下次接收的数据包窗口号应该为0),如果ack7丢失了,这时就会发送超时重传,当重传的数据包到达发送方时,这时第一个数据包的窗口号为0,接收方无法判断这是第一次传的数据包还是第二次传的数据包,就会产生问题。

        回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种ARQ协议,在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此此类协议又称滑动窗口协议。

 缺点:

        回退N帧协议只能按序接收正确到达的数据分组。一个数据分组的误码会导致后续多个数据分组不能被接收方按序接收而丢弃,会造成发送发对这些数据分组的超时重传,导致通信资源的浪费。

        由于退回N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止协议高。

        选择重传协议SR:

        选择重传协议就是在回退N帧协议的基础上设置接收方的窗口大于1,小于7,当顺序接收的时候就按照正常的接收顺序向前滑动,当接收数据包中出现误码时,就先把无误的数据接收,等待发送方重传有误的数据包,重传确认之后再往前滑动。

        接收方窗口必须小于发送方窗口,否则就会没有意义

        

        

        

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐