文章目录
概述
链路就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点
数据链路是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
数据链路层以帧为单位传输和处理数据
三个重点
- 封装成帧
- 差错检测
- 可靠传输
封装成帧
- 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾中包含有重要的控制信息
- 帧头和帧尾的作用之一就是帧定界
- 透明传输是指数据链路层对上层交付的传输数据没有任何限制
- 面向字节的物理链路(异步)使用字节填充(或称字符填充)的方法实现透明传输
- 数据若与帧头帧尾相同,则在其前面添加转义字符
- 数据若与转义字符相同,则在其前面添加转义字符
- 面向比特的物理链路(同步)使用比特填充的方法实现透明传输
- 帧头帧尾为01111110
- 若出现连续5个1(11111),则在其后面添加一个0(111110)
- 面向字节的物理链路(异步)使用字节填充(或称字符填充)的方法实现透明传输
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
例子
发送方
接收方![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8a2f144009f256456382b04085649c13.png)
可靠传输
数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;可靠传输服务:
- 想办法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
传输差错包括:
- 比特差错
- 分组丢失
- 分组失序
- 分组重复
停止-等待协议(SW)
接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组
为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1
为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号
超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”
信道利用率
回退N帧协议(GBN)
回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议
在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定)对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。
回退N帧协议的接收窗口尺寸WR只能等于1,因此接收方只能按序接收正确到达的数据分组,出现差错则整个窗口进行重传
选择重传协议(SR)
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认
点对点协议PPP
点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 一套网络控制协议NCPs
- 其中的每一个协议支持不同的网络层协议
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP
- 用于建立、配置以及测试数据链路的连接