02 - 数据链路层的详细认识

2021-11-20  本文已影响0人  iOS之文一

计算机网络系列文章汇总

主要内容:

  1. 使用点对点信道的数据链路层
  2. 使用广播信道的数据链路层

时间有限我这里只写了一部分内容,更详细的内容可以直接看我的笔记第三章数据链路层

1、介绍

数据链路层的任务就是将分组从一个网络中或一个链路上的一端传送到另一端。数据链路层传送的数据单元称为帧(frame)。所以也可以说数据链路层的任务就是在一个网络(或一段链路上)传送以帧为单位的数据

数据链路层属于计算机网络的底层,仅在物理层的上方,在网络层的下方,网络中的主机、路由器等都必须实现数据链路层。数据链路层使用的信道主要有两种类型,点对点信道,广播信道


链路层位置.png

2、使用点对点信道的数据链路层

在点对点信道中最重要的是如何实现可靠传输(在实际中并不会在数据链路层实现可靠传输,而是交给上层)

2.1 封装成帧

2.1.1 帧封装

网络层的IP数据报必须向下传达到数据链路层,在数据报前后分别加上首部和尾部,封装成为一个完整的帧。因为在数据链路层就是以帧为单位传输和处理数据,因此,数据链路层中的帧长就是数据部分加上首部和尾部的长度。

帧的封装.png

2.1.2 帧定界

发送方将帧以比特流的形式发送给接收方(在物理层会转换成电信号),接收方为了能够处理帧数据,必须正确认识每个帧的开始和结束,这就需要进行帧定界

帧定界有很多种,比如以太网就是在传输的帧与帧之间插入时间间隔来实现,只有首部有帧定界符,尾部没有帧定界符。还有一种就是在帧的首部和尾部都加上一个帧定界符。

帧定界符:
不同类型:

帧定界符在透明传输中的问题和解决
问题: 传输数据存在使用帧定界符所使用的字符或比特组合,会出现错误的帧定界
解决:

注意:

2.2 差错检测

通信链路的传输都不会是理想的,比特在传输过程中可能会产生差错,比如1变为0,0变为1,这叫做比特差错,因此就需要在接收端进行差错检测。

2.2.1 原理

发送方需要采用某种差错检测算法,使用发送的数据计算出差错检测码EDC,差错检测码随数据一起发送给接收方,接收方使用同样的差错检测算法计算出差错检测码EDC',如果两者不一致,则表示出现差错,一般采用循环冗余检验(CRC)来检错

2.2.2 具体步骤

  1. 发送方进行差错检测算法并在尾部携带差错检测码(存放在帧检验序列中)
  2. 接收方进行差错检测

2.2.3 循环冗余检验(CRC)

差错检测算法:

接收双方需要约定好一个多项式,之后按照下图的方式进行处理

发送方和接收方的算法.png

案例说明

发送方的冗余校验:

发送方.png

说明:

接收方的冗余校验:

接收方.png

说明:

注意:

2.3 可靠传输

有些情况下数据链路层需要向上层的网络层提供“可靠传输”的服务,也就是发送端发送什么,对应的接收端就必须接收什么。我们通过可靠传输协议来实现数据链路层的可靠传输,有三种,停止等待协议SW、回退N步协议GBN、选择重传协议SR。
可靠传输协议就是要在不可靠的信道上实现可靠的数据传输服务。

在计算机网络中实现可靠传输的基本方法就是:如果发现错误就重传

2.3.1 传输错误的类型

2.3.2 停止等待协议SW

使用分组确认和超时重传机制就可以在不可靠的信道上实现可靠的数据传输。

2.3.2.1 分组确认
2.3.2.2 超时重传

问题来源: 分组确认有一个问题,底层的信道丢失分组,当数据分组或确认分组丢失时,发送方将会一直等待接收方的确认分组,数据传输停止。

解决: 可以在发送方发送完一个数据分组后,启动一个超时计时器,若超出了设置的重传时间,发送方仍没有收到接收方的任何确认分组,就会重传原来的分组。

超时重传.png

注意: 重传时间的选择一般是略大于“从发送方到接收方的平均往返时间”数据链路层的往返时间是比较确定的,可以使用这种方式

2.3.2.3 数据重复

问题来源: 当确认分组丢失时,发送方将会超时重传,接收方将会接收到两个相同的分组,这就是重复分组,如果接收方无法识别重复分组,则会出现另一种差错,数据重复
解决:

数据重复.png
2.3.2.4 信道利用率
信道利用率.png

说明:

2.3.2.5 总结
  • 发送方每发送完一个分组,必须停下来等接收到确认后才能发送下一个分组。所以这也是停止等待协议名称的来由
  • 发送方发送完一个分组后,必须暂时保留已发送的分组的副本,如果超时则可以重传,直到收到相应的确认分组后再删除
  • 如果想要使协议更加简单,可以不使用分组确认,而只是使用超时重传,使用分组确认的效率更高,重传的更及时
  • 停止等待协议的优点是简单,缺点就是信道利用率太低
  • 综上所述,实现停止等待协议,主要就是分组确认和超时重传,简单的情况下可能只有超时重传,对于数据重复的问题可以给数据分组加上序号,数据链路层的确认分组一般是不用加序号的

2.3.3 回退N步协议GBN

上面也可以看到停止等待协议的信道利用率很低,所以需要采用流水线传输方式,发送方不间断的发送分组来提高信道利用率。但是这种方式有可能会使接收方来不及处理这些分组,从而导致分组的丢失。因此需要限制发送方连续发送分组的个数避免这个问题,而这种方式就是回退N步协议。
简单理解回退N步协议就是停止等待协议只能发送一个分组就等待,回退N步协议是发送多个分组才处于等待状态

原理: 回退N步协议在流水线传输的基础上利用发送窗口来限制发送方连续发送分组的个数,是一种连续的ARQ协议

2.3.3.1 过程(以窗口大小为5来说)

注意:

2.3.3.2 总结
  • 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一次位置,在协议工作过程中发送窗口和接收窗口不断的向前滑动,这些协议就又被称为滑动窗口协议
  • 滑动一次窗口是在接收到一次确认分组后进行的
  • 累积确认并不能准确的向发送方准确反映出接收方已经正确收到所有的分组
  • 接收窗口的大小为1,因此接收方只能按序接收正确到达的数据分组
  • 一个分组的差错,会导致大量分组的重传,这些分组可能已经被正确接收了,只是由于没有按序到达,就需要丢弃,也是对信道的极大浪费

2.3.4 选择重传协议SR

选择重传协议是在回退N步协议的基础上,只重传出现差错的分组,这时接收窗口不再为1,以便先收下失序到达但仍然处于接收窗口中的分组,等到所缺分组收齐后再一并送交上层,这就是选择重传协议。

注意:

3、使用广播信道的数据链路层

上一篇下一篇

猜你喜欢

热点阅读