目录
3.1数据链路层概述
数据链路层三个重要问题: 封装成帧, 差错检测 , 可靠传输。
3.2封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾包含有重要的控制信息。
帧头和帧尾的作用之一就是帧定界(大小1字节)。
透明传输 :是指数据链路层对上层交付的传输数据没有任何限制, 就像数据链路层不存在一样。
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。——插入转义字符
面向比特的物理链路使用比特填充的方法实现透明传输。——(零比特填充,例每五个1后添加0)
为了提高帧的传输效率,应使帧的数据部分的长度尽可能大些。
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,及最大传送单元MTU
3.3差错检测
"在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate),
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一;
通过帧尾的FCS字段的值(检错码)。
奇偶校验
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1"的个数为奇数(奇校验)或偶数(偶校验)
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验CRC
1)收发双方约定好一个生成多项式G(x);
2) 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码) ,将其添加到待传输数据的后面一起传输;
3)接收方通过生成多项式来计算收到的数据是否产生了误码;
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
循环冗余校验CRC有很好的检错能力(漏检率非常低) ,虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
3.4.1可靠传输的基本概念
数据链路层向上层提供的服务类型
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
可靠传输服务: 想办法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
“可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
3.4.2停止—等待协议(自动请求重传ARQ)
1、接收方收不到数据分组,就不会发送ACK(确认分组)或NAK(否认),如果不采取其他措施,发送方就会一直处于等待接收方ACK或|NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”
2、 为避免分组重复这种传输错误,必须给每个分组带上序号。对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。
3、为了让发送方判断所收到的ACK分组是否是重复的,也需要给ACK分组编号,所用比特数量与数据分组编号的比特数量一样。数据链路层一般不会出现ACK分组迟到的情况。
3.4.3回退N帧协议GBN(Go-Back-N)
3.4.4选择重传协议SR
3.5点对点协议PPP
1、点对点协议PPP是目前使用最广泛的点对点数据链路层协议
2、 PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661, RFC1662]。
3、(数据链路层)PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要有以下三部分构成:
1)、对各种协议数据报的封装方法(封装成帧)。
2)、链路控制协议: 用于建立、配置以及测试数据链路的连接。
3)、一套网络控制协议NCPs : 其中的每一个协议支持不同的网络层协议。