① 02 - 数据链路层的详细认识
时间有限我这里只写了一部分内容,更详细的内容可以直接看我的笔记 第三章数据链路层
数据链路层的任务就是将分组从一个网络中或一个链路上的一端传送到另一端。数据链路层传送的数据单元称为帧(frame)。所以也可以说数据链路层的任务就是在一个网络(或一段链路上)传送以帧为单位的数据
数据链路层属于计算机网络的底层,仅在物理层的上方,在网络层的下方,网络中的主机、路由器等都必须实现数据链路层。数据链路层使用的信道主要有两种类型,点对点信道,广播信道
在点对点信道中最重要的是如何实现可靠传输(在实际中并不会在数据链路层实现可靠传输,而是交给上层)
网络层的IP数据报必须向下传达到数据链路层,在数据报前后分别加上首部和尾部,封装成为一个完整的帧。因为在数据链路层就是以帧为单位传输和处理数据,因此,数据链路层中的帧长就是数据部分加上首部和尾部的长度。
发送方将帧以比特流的形式发送给接收方(在物理层会转换成电信号),接收方为了能够处理帧数据,必须正确认识每个帧的开始和结束,这就需要进行帧定界
帧定界有很多种,比如以太网就是在传输的帧与帧之间插入时间间隔来实现,只有首部有帧定界符,尾部没有帧定界符。还有一种就是在帧的首部和尾部都加上一个帧定界符。
帧定界符:
不同类型:
帧定界符在透明传输中的问题和解决
问题: 传输数据存在使用帧定界符所使用的字符或比特组合,会出现错误的帧定界
解决:
注意:
通信链路的传输都不会是理想的,比特在传输过程中可能会产生差错,比如1变为0,0变为1,这叫做比特差错,因此就需要在接收端进行差错检测。
发送方需要采用某种差错检测算法,使用发送的数据计算出差错检测码EDC,差错检测码随数据一起发送给接收方,接收方使用同样的差错检测算法计算出差错检测码EDC',如果两者不一致,则表示出现差错,一般采用循环冗余检验(CRC)来检错
差错检测算法:
接收双方需要约定好一个多项式,之后按照下图的方式进行处理
案例说明
发送方的冗余校验:
说明:
接收方的冗余校验:
说明:
注意:
有些情况下数据链路层需要向上层的网络层提供“可靠传输”的服务,也就是发送端发送什么,对应的接收端就必须接收什么。我们通过可靠传输协议来实现数据链路层的可靠传输,有三种,停止等待协议SW、回退N步协议GBN、选择重传协议SR。
可靠传输协议就是要在不可靠的信道上实现可靠的数据传输服务。
在计算机网络中实现可靠传输的基本方法就是:如果发现错误就重传
使用分组确认和超时重传机制就可以在不可靠的信道上实现可靠的数据传输。
解决: 可以在发送方发送完一个数据分组后,启动一个超时计时器,若超出了设置的重传时间,发送方仍没有收到接收方的任何确认分组,就会重传原来的分组。
注意: 重传时间的选择一般是略大于“从发送方到接收方的平均往返时间”数据链路层的往返时间是比较确定的,可以使用这种方式
说明:
上面也可以看到停止等待协议的信道利用率很低,所以需要采用流水线传输方式,发送方不间断的发送分组来提高信道利用率。但是这种方式有可能会使接收方来不及处理这些分组,从而导致分组的丢失。因此需要限制发送方连续发送分组的个数避免这个问题,而这种方式就是回退N步协议。
简单理解回退N步协议就是停止等待协议只能发送一个分组就等待,回退N步协议是发送多个分组才处于等待状态
原理: 回退N步协议在流水线传输的基础上利用发送窗口来限制发送方连续发送分组的个数,是一种连续的ARQ协议
注意:
选择重传协议是在回退N步协议的基础上,只重传出现差错的分组,这时接收窗口不再为1,以便先收下失序到达但仍然处于接收窗口中的分组,等到所缺分组收齐后再一并送交上层,这就是选择重传协议。
注意: