数据链路层
链路
从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换点
数据链路
是指把实现通信协议的硬件和软件加到链路上
帧
在数据链路上传输的数据包,称之为帧
数据链路层是以帧为单位进行传输和处理数据的
数据链路层的三个重要问题
封装成帧
将数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作称之为封装成帧
添加帧头帧尾的目的,都是为了以帧为单元传送数据,为了实现数据链路层的功能。
帧头和帧尾的作用之一就是帧定界
从数据链路层开始,将以太网的数据层封装好MAC帧后,将其交付给物理层,物理层在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送,前导码中的前七个字节为同步码,作用为使接收方的时钟同步,之后的一个字节为帧开始定界符,表明其后面跟随的为MAC帧,另外以太网规定了帧间时间间隔为96比特的发送时间。因此,MAC帧并不需要帧 结束定界符。
透明传输
是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在
数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符
处理方式,通过识别每个帧定界符,对除去第一个以及最后一个帧定界符进行添加转义字符
-
对于面向字节的链路 使用字节填充的方法实现透明传输
-
对于面向比特的链路 使用比特填充的方式实现透明传输
为了提高帧的传输效率,应该使帧的数据部分的长度尽可能的大一些
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的最大长度,即为最大传送单元MTU
差错检错
比特差错,再传输中1变成0,0变成1
误码率
传输错误的比特占所传输总比特总数的比率称之为误码率BER(Bit error rate)
使用差错检错码来检测数据在传输过程之中是否发生了比特差错,是数据链路层的重要问题
eg:MAC帧和PPP帧中都存在一个4字节的FCS字段,目的是为了检测帧在传输过程中是否产生了误码。
奇偶校验
在待发送的数据后面添加一位奇偶校验位,使整个数据中的“1”的个数为奇数或者偶数
由于这种的误差太大,因此一般不采用。
循环冗余校验CRC(Cyclic Redundancy Check)
- 双方约定好一个生成多项式G(X)
- 发送方基于待发送的数据和生成多项式计算出差错检错码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过计算生成多项式来计算收到的数据是否产生的误码
CRC算法要求生成多项式必须包含最低次项
例子:
进行除法的运算的时候为异或运算
[!warning]
- 检错码只能检测错误,不能纠正错误
- 纠正错误可使用冗余信息更多的纠错码进行前向纠错,但,纠错码的开销过大,因此在计算机网络中较少使用
- CRC有很好的检测能力(漏检率低),虽然计算复杂,但是易用硬件实现,因此多用于数据链路层
可靠传输
可靠传输的基本概念
当产生误码的时候,
- 对于不可靠传输,会丢弃存在误码的帧,其他什么也不做
- 对于可靠传输服务, 会实现发送端发送什么,接收端就收到什么
[!warning]
在一般的情况下,有线链路的误码率比较低,为了减小开销,并不会要求数据链路层提供可靠服务
但是使用的为无线链路的时候,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务
传输差错
比特差错只是传输差错的一种。
从整个计算机网络体系结构来看:传输差错总共包含三种,分组丢失、分组失序和分组重复(在这之中,将帧变为了分组)
上述三种差错,一般不会出现在数据链路层之中,而是出现其上层。
可靠传输服务并不局限于数据链路层,其他层均可实现可靠传输
eg:802.11无线局域网要求数据链路层实现可靠传输
以太网不要求数据链路层实现可靠传输
ip向上层提供的是无连接、不可靠的传输服务
TCP向上层提供的是面向连接的可靠传输服务
UDP向上层提供无连接、不可靠传输服务
可靠传输的实现复杂,开销大,是否使用取决于应用需求
以下三种的可靠传输实现机制的基本原理并不局限于数据链路层,可以应用到计算机网络体系结构中的各层协议之中。
停止等待协议
具体实现过程
第一种错误,传输数据data丢失解决办法
第二种错误 : ACK丢失,导致分组重复的问题
第三种错误 : ACK时间太长导致的数据重复确认,
解决办法:通过对ACK进行编号
停止—等待协议的信道利用率
从下面这个例子进行理解
由于Ta远小于Td一般可与忽略
-
当往返时延RTT远大于数据帧发送时延Td的时候(例如使用卫星电路)信道利用率极低。
-
若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低
回退N帧协议GBN(GO-BACK-N)
- 采用3个比特给分组编序,即序号为0~7
- 发送窗口的尺寸WT的取值:1<WT≤23-1,本例子取WT=5
- 接受窗口的尺寸WR的取值:WR=1;
当窗口的值超过其大小的时候,接收方无法分辨新的、旧的分组
累计确认
接收方不一定要对收到的数据分组逐个发送确认而是可以在收到几个数据分组之后,对按序到达的最后一个数据分组发送确认
ACKN表示序号为n及以前的所有数据分组都已正确接收
- eg: 发送ACK1说明对1及其以前的数据都存储完成
- 发送ACK4说明对4及其以前的数据都存接收完成
- 因此即使ACK1丢失,只要ACK4也能够到达,发送方依旧不需要重传
优缺点
-
减小接收方的开销
-
减少对网络资源的占用
缺点:不能向发送方及时放映出接收方已经正确接受的数据分组
选择重传协议SR
- 采用3个比特给分组编序,即序号为0~7
- 发送窗口的尺寸WT的取值:1<WT≤23-1,本例子取WT=4
- 接受窗口的尺寸WR的取值:WR=WT=1;