1.数据链路层概述
链路:从一个结点到相邻结点的一段物理线路,中间没有任何其他的交换结点
数据链路:把实现通信协议的硬件和软件加到链路上,构成了数据链路
数据链路层以帧为单位传输和处理数据
2.数据链路层的三个基本问题
2.1封装成帧
2.1.1封装成帧
是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾包含有重要的控制信息
- 帧头和帧尾的作用之一就是帧定界
2.1.2 透明传输
数据链路层对上层交付的传输数据没有任何限制
防止数据链路层收到其上层交付的协议数据单元有多个帧定界标识符(特殊数值)造成接受方不能正确接受帧
解决方法 加转义字符ESC(特殊的控制字符,长度为1字节)
- 面向字节的物理链路使用字节填充(或称为字符填充)的方法实现透明传输
- 面向比特的物理链路使用比特填充的方法实现透明传输
比特填充 每五个连续1后面插入一个0
注意点:
- 为了提高帧的传输效率,应使帧的数据部分的长度尽可能大些
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上线,即最大传送单元MTU
2.2差错检测
- 实际的通信链路都不是理想的,比特在传输过程种可能会产生差错:1可能会变成0,而0也可就能变成1,这称为比特差错
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER
- 使用差错检测码来检测数据在传输过程种是否产生了比特差错,是数据链路层所要解决的重要问题之一
2.2.1奇偶校验
1. 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)种 1的个数位奇数(奇校验)或者偶数(偶校验)
2.如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
3.如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
2.2.2循环冗余校验CRC
- 收发双发约定好一个生成多项式G(x)
- 收发方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接受方通过生成多项式来计算收到的数据是否产生了误码
算法要求生成多项式必须包含最低次项
例:
注意点:
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错,但纠错码的开销比较大,在计算网络中较少使用
循环冗余检验CRC与很好的验错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
2.3可靠传输
2.3.1.基本概念
1.使用差错检测(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)
数据链路层向上层提供的服务类型
不可靠传输服务:仅丢弃有误码的帧,其他什么也不做
可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
2.比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
3.可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
可靠传输三种实现协议 停止——等待协议SW、回退N帧协议GBN、选择重传协议SR
这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中
2.3.2停止——等待协议SW
1.接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
2.为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号。
3.为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号
4.停止——等待协议的信道利用率
TD:发送方发送数据分组所耗费的发送时延
RRT:收发双方的往返时间
TA:接收方发送确认分组所耗费的发送时延
TA一般远小于TD,可以忽略
当往返时延RRT远大于数据帧发送时延TD时(例如使用卫星链路),信道利用率非常低
若出现重传,则信道利用率更低
为了解决停止——等待协议信道利用率低的缺点,产生了另外两种协议,即回退N帧协议GBN、选择重传协议SR
2.3.3回退N帧协议GBN
1. WT:发送窗口 WR:接受窗口
无差错情况
2.累计确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定)对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。
如果ACK1丢失了,但是ACK4正确发送,就不会造成1号数据分组的超时重传
3.有差错情况
丢弃1076这四个数据分组, 重新发送ACK4且发送四个
虽然序号为6.7,0.1的数据分组正确到达接收方,但由于5号数据分组误码不被接受,它们也“受到牵
连”而不被接受。发送方还需重传这些数据分组,这就是Go-back-N(回退N帧)。
当通信线路质量不好时,回退N帧协议的信道利用率并不比停止——等待协议高。
4.若WT接受窗口超过取值范围
当累计确认丢失时,发送方进行超时重传,但是接收方无法分辨新、旧数据分组
5.总结
回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量。是一种连续ARQ协议。
在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗回协议。
由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止——等待协议高。
2.3.4选择重传协议SR
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累计确认,而需要对每个正确接收到的数据分组进行逐一确认!
只有按序到达发送窗口才能向前滑动,并且记录发送窗口中已经收到ACK确认的分组编号(防止超时重发)
总结:
2.4点对点协议PPP
1.点对点协议PPP使目前使用最广泛的点对点数据链路层协议
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 对各种协议数据报的封装方法 (封装成帧)
- 链路控制协议LCP 用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs 其中的每一个协议支持不同的网络层协议
2.帧格式
3.透明传输
面向字节的异步链路采用插入转义字符的字节填充法
面向比特的同步链路采用插入比特0的比特填充法
4.差错检测
接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务。
参考 计算机网络微课堂