【计算机网络】第四章:数据链路层(Part1.数据链路层的三个基本问题&点到点信道的数据链路)

CN.StudyLog.Ch4.Datalink Layer.数据链路层(Part1.数据链路层的三个基本问题&点到点信道的数据链路)

数据链路层的主要内容:数据在通过不同的数据链路时,使用的协议和通讯机制。
数据链路:接集线器的网,路由器与路由器相连的链路,等。
不同的数据链路通讯的机制也不一样。数据包在经过不同的数据链路时,会用不同的数据帧格式封装在信道中传递。
这一章的主要内容是PPP协议和CSMA/CD协议的帧封装和数据链路。分三大部分(数据链路层的基本问题,点到点信道的数据链路,广播信道的数据链路)

数据链路层的基本问题

首先明确数据链路和链路的定义。
在这里插入图片描述
链路:物理线路。中间没有其他的交换节点。注意集线器和交换机不同,集线器的功能就是网线,所以在链路这一定义上,集线器是可以忽略的。
数据链路:某一链路+协议。(CSMA/CD PPP 帧中继)等协议

封装成帧

在这里插入图片描述
帧:帧是数据包封装后在数据链路中传输的数据包的载体。数据包是有效数据,但是必须加工成数据帧后才能在特定的数据链路里传输。不同的数据链路要求的帧格式不同。
在这里插入图片描述
上图表示的过程是一次数据链路和的帧封装和解封过程。看下图
在这里插入图片描述
假设数据包从VMnet1发送到VMnet8。其中VMnet1到R1,R1到R2,R2到VMnet8,这三条链路每条链路都有一个这样的过程(合计封装-解封三次),而不是从始至终只有一个这样的封装解封过程。
在这里插入图片描述
IP数据报是网络层发下来的,这一部分作为帧的数据部分,然后加帧首尾。首部会增加数据链路层的字段,如果是以太网的话需要加目标MAC地址和源MAC地址。尾部会增加校验序列FCS。开始和结束符可以让接收端确认接收时明确这是一个数据帧,才能判断是否有错和源源不断传过来的数据中哪些是一个整体。

接收端收到帧后,会判断是否有错误。比如是否因电磁干扰导致通讯过程中某些数字信号没有正确读取,比如0变1或1变0等。接收端的数据链路层要求能够判断出数据链路中传输时发生的错误,这时就利用FCS的值来判断传输过程中是否有错。

MTU:最大传输单元:不同的数据链路里MTU不同,以太网是最大1500字节(byte)。

Ps)MTU可以人工改小,改小后可能出现的问题:以太网传输过来一个1500字节的数据包,然后MTU设定为1000,则此时会把这个数据包分成两片。

透明传输

在这里插入图片描述
首尾两标识符应该是数据部分出现频率尽可能低的字符,因为字符本质就是一byte,八位二进制数。如果数据部分出现了这种标识符,会导致接收端截断数据部分或丢掉部分数据而发生错误。
在这里插入图片描述
ASCII表,右边是键盘可以直接输入的字符,而左边部分是不能直接输入的字符,其中就定义了SOH和EOT两个标识符。这种标识符在输入数据的传输过程中一定不会出现异常,因为这些标识符无法从外设输入。但是如果传输的是图片或者其他程序,则有可能会出现这些标识符。
在这里插入图片描述
解决方法:利用转义字符ESC
在这里插入图片描述
在链路上传播时,首尾标识符和与ESC相同的构成的数据段之前加上ESC标识符。然后接收端在接收数据时会早一步接收ESC字符,明确接下来要接受的是首尾标识符或者是与ESC相同构成的有效数据,则不会截断数据。在接收到一个没有ESC的结束符后会确定这是一个完整的帧。接收后会重读有效数据,会以一种见到ESC去掉并保留下一字符数据的规则去掉ESC。这样就能保证标识符和与ESC相同的数据不会被删除。
(如果是两端ESC连续的有效数据,则接收后应该会有4个连续ESC存在,去1留1最后仍然是2个连续的ESC作为有效数据)

插入转义字符是数据链路层完成的。转义字符的插入会导致数据部分数据量变大,但是这个数据量并不受限于MTU的最大容量。加上转义字符后的数据部分其容量可以大于MTU。

差错检验

在这里插入图片描述
FCS负责校验错误,如果检查出错误则会丢掉,不负责重传。检验的是有效数据部分+数据链路层首部的部分,不检验标识符。
在这里插入图片描述
CRC计算的注意事项:
1.对与发送端,想要得到的FCS是几位,那么就在刚才说的需要检验的数据后面加几个0,三位就是加三个,四位加四个。对于接收端,数据后加得到的FCS并处以除数即可。
2.除数任选,只要保证位数是FCS位数+1即可
3.除数对于发送端和接收端要一致。
计算方法:只要位数足够就商1,商1后结果做异或运算
4.对于接收端,如果运算结果余数为0,则说明传输无误,如果有余数,则说明有错误直接丢掉,该数据包丢包。

Ps)还有其他的算法, 但是不管怎么算的,这里重点是明确FCS的作用。

点到点信道的数据链路

在这里插入图片描述
常见点到点信道:
1.路由器广域网接口只有一个发送端和接收端
2.ADSL拨号上网,调制解调器到ISP的信道
在点到点的链路上使用PPP协议。点到点链路上不需要知道源地址和目标地址,因为只有两个地址。

PPP协议

1.PPP协议的特点

1)简单:出现差错后直接扔掉,不提供可靠传输(CRC检查出错丢掉,无错误交给网络层)
2)封装成帧:首尾标识符
3)透明传输:转义字符ESC
4)差错检测:CRC计算FCS
5)支持多种网络层协议:IPv4&6协议都可以封装到PPP帧中
6)支持多种类型的链路:光纤、铜线 、同步传输,异步传输,串行或并行链路
7)检测连接状态:平时不小心碰到电话线导致ADSL拨号上网失效,然后不小心又接上了,这时候不需要专门的去做什么,网络会自动连接好
8)最大传输单元MTU:不特殊指定的情况下PPP和CSMA/CD都是最大1500字节
9)网络层地址协商:ISP会给电脑分配一个IP、DNS。子网掩码、网关
10)数据压缩协商: 传数据之前判断是否需要压缩后再传

2.组成部分
在这里插入图片描述
有三格组成部分。
1.最底层||高级数据链路控制协议HDLC:网络层传下来的数据把它封装成能够在串行链路上发送的格式。

广域网一般是串行通信,并行通信多用于近距离通信。
并行:一台设备上连接很多根线缆,每根线缆单位时间内传输1bit的话,那么八根线缆单位时间内就可以传输一byte。可以将数据分散并传播,提高效率。成本大。
串行:一根线缆上传递数据,效率低于并行。

2.中层|链路控制协议LCP:点到点通信建立连接,确认之间的一些参数。比如验证账号密码是否正确,
3.顶层|网络控制协议NCP:用来标识上层多种协议,可以把他们封装到PPP协议里。

透明传输

为了实现透明传输,我们需要开始和结束标识符,而如果数据段出现了与首尾标识符相同构造的数据,则需要使用一定的填充方法来规避数据截断的问题。
填充方法在PPP协议中有两种,分别是0比特填充和字符填充,应用场景不同选择也不同。

同步和异步传输

在这里插入图片描述
时钟同步的必要性:发送数据帧的过程中必须要求数据链路的两端时钟同步,时钟同步代表着能够明确码元边界,才能完整的收发数据帧。否则,如果两端时钟不一致,识别时可能会把不完整的数据纳入或者丢失导致错误。适合长距离通信,但是少拉一根线就节省不少成本。
短距离高速传输中,可以用一条专门的线路来传输时钟信号,一条用来收发数据。

在这里插入图片描述
异步传输:以字符为单位传输数据,发完一个字符就有一段空闲位。全部收完后,接收端再组装成一个完整的帧。

PPP帧填充方式

对于异步传输,使用字节填充。因为异步填充以字节为单位传输;而不同传输是把一个帧作为单位传出去,PPP协议就使用零比特填充
在这里插入图片描述
使用转义字符来完成透明传输,转义字符被定义为7D。

RFC1662规定了如下填充方法:
(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)。
(3)若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列的(0x7D,0x31)。

在这里插入图片描述
零比特填充的方法:

通俗点来讲,就是标识符是0x7E,还原成二进制就是0111 1110,我们可以看到这一序列中间有6个连续的1,零比特填充就是基于这种方式。发送端在发送数据时,扫描除去标识符以外的数据段,然后每五个1就插入一个0,保证信息段不会穿结束/开始标识符。这样做如果数据段有6个1会变成1111 101 而如果原本数据段就是1111 101则会变成 1111 1001,接收端接收时会在五位1之后剔除一个0,而标识符的六个连续1之间没有0自然也不会被剔除0,这样就保证了 透明传输。


实验

【计算机网络原理·实验·第四章】PPP协议配置路由广域网接口&抓包理解PPP协议的帧格式)

猜你喜欢

转载自blog.csdn.net/Chahot/article/details/106755806