一、什么是数据链路
- 什么是链路?链路就是从
1个节点
到相邻节点
的一段物理线路,无论是无线还是有线的,并且中间没有其他交换节点,如下图所示,下图中每个红框圈出来的,都是一段链路!
- 什么是链路?链路就是从
2.什么是数据链路?数据链路就是在一段链路上传递数据,我们知道传递数据需要事先约定好协议,所以链路上传输数据时,会有对应的通讯协议来控制数据的传输
-
-
不同类型的链路,所遵守的通讯协议是不一样的,如下图所示,计算机到路由器传输数据采用
CSMA/CD协议
,路由器到路由器传输数据采用PPP协议
;(注意这里的协议说的是数据链路层用的协议!!!)
广播信道(把消息广播出去的信息通道),就采用
CSMA/CD协议
, 例如同轴电缆和集线器组成的链路;-
点对点信道(把消息单对单传输出去的信息通道),就采用
PPP协议
,例如两个路由器之间的链路;
-
不同类型的链路,所遵守的通讯协议是不一样的,如下图所示,计算机到路由器传输数据采用
- 只是要数据链路层,无论传输数据时,采用什么协议,都会面临三个问题:
封装成帧、透明传输、差错校验
,只要解决了这三个问题,我们就能完整的把数据通过数据链路层传输出去,我们来看看前辈们是怎么解决这三个问题的
- 只是要数据链路层,无论传输数据时,采用什么协议,都会面临三个问题:
二、封装成帧
- 封装成帧指的是,如何把
网络层
传递过来的数据,封装成数据链路层
传递的数据,数据链路层 数据的单位是:帧
,所以叫做封装成帧
- 封装成帧指的是,如何把
- 前辈们是这么设计的,将
网络层
传过来的数据(也就是IP数据包),放在中间,两边加上帧开始符
和帧结束符
,组成一帧,要注意的是,每个帧的数据部分都有一个最大传输单元(MTU)
,也就是上层传递过来的IP数据包,必须小于MTU才行,如下图所示
- 前辈们是这么设计的,将
- 每种数据链路层的协议都规定了
最大传输单元MTU
的大小,以太网(也就是CSMA/CD协议
)规定的MTU是1500个字节
- 每种数据链路层的协议都规定了
三、透明传输
- 我们传输数据时,要根据
帧开始符号
和帧结束符
判断出来哪块数据是一个完整的帧
,如果帧的数据部分出现了帧开始符
或者帧结束符
怎么办呢,就无法划分出完整的帧
了,针对这种情况,前辈们想出来了一个解决方案,让你不用关心数据是如何转化的,一个完整的帧
经过数据链路
传输以后,还可以得到完整的帧
,我们把这个传输过程成为:透明传输
- 我们传输数据时,要根据
- 前辈们是如何设计
透明传输
的呢?其实很简单,如下图所示,SOH
是帧开始符
,EOT
是帧结束符
,当中间的数据部分出现帧开始符SOH
或者帧结束符EOT
或者转义字符ESC
时,就往这个字节后面插入一个转义字符ESC
,判断帧是否结束时,就看下帧结束符前边有没有转义字符就可以了,没有就代表是真正的帧结束符;效果就是:从结点A
发出去的帧是怎样的,经过链路传输
以后,结点B
收到的帧也是怎样的
- 前辈们是如何设计
四、差错校验
- 差错校验是指:万一传输过程中出现了错误,怎么校验出来呢?例如收到信号干扰导致某个位错误了 ,怎么能知道错误呢?
-
2.前辈们是这么设计的:在帧的尾部放上了一个字段,叫做
FCS
,这个字段的值是:通过帧的数据部分+数据链路层的首部
组合起来计算出来的一个哈希值,传输过去以后,就再次计算一下FCS
,与传递过来的FCS
做比较,如果不一致,就认为传输出错了,网卡就会把这个帧
扔掉
五、以太网帧
-
CSMA/CD
协议,全称是Carrier Sense Multiple Access with Colision Detectio
,翻译过来就是载波侦听多路访问/冲突检测,意思就是只要遵守这个协议,就具备载波侦听(监听这个线路有没有数据在传输)、冲突检测(收到的数据是冲突产生的回波,还是真实数据)的能力;(一般在集线器时代,用这个协议比较多;现在用的交换机已经具备了全双工通讯了,也就不需要这个协议了)
-
-
- 使用
CSMA/CD协议
的网络可以称为以太网(Ethernet)
,它传输的是以太网帧
以太网帧的格式有:
Ethernet V2标准、IEEE的802.3标准
,不同标准的帧的格式不一样目前以太网使用最多的是:
Ethernet V2标准
- 使用
- 为了能检测正在发送的帧是否产生了冲突,以太网的帧至少要
64字节
- 为了能检测正在发送的帧是否产生了冲突,以太网的帧至少要
- 用交换机组件的网络,已经支持全双工通讯了,不再需要使用
CSMA/CD协议
了,但是它传输的帧依然是以太网帧
,所以用交换机
组建的网络,依然可以叫做以太网
- 用交换机组件的网络,已经支持全双工通讯了,不再需要使用
六、以太网的Ethernet V2帧
-
- 以太网帧的
Ethernet V2标准
格式如下图所示,在数据链路层这一行,最左边是帧的首部
,中间是帧的数据部分
,最右边是帧的尾部
:
帧的首部,没有帧开始符,只剩下
目标Mac地址、源Mac地址、类型
了,类型就是IPv4或者IPv6;帧的数据部分,是网络层传递过来的数据,如果不够64字节,会自动填充;
帧的尾部,只剩下FCS这个哈希值了,用来进行差错校验的;
- 以太网帧的
-
Ethernet V2帧
之所以没有帧开始符和帧结束符
,是因为以太网
采用了曼彻斯特编码
,接受帧的过程只要发现信号没有跳变,就认为帧结束了,这是一种通信技术,不在咱们此次研究范围内,了解即可
-
- 以太网的一个标准的
Ethernet V2帧
就长下面这个样子,由:帧的首部 + 帧的数据部分 + 帧的尾部
组成,长度范围是64~1518字节
- 以太网的一个标准的
七、PPP帧
PPP帧长下面这个样子,因为是点对点信道,所以不需要源Mac地址和目标Mac地址
了,但是多了帧开始符和帧结束符
八、总结
-
-
相邻物理线路之间传输数据就是数据链路,不同链路之间遵守的通讯协议不同,根据通讯协议,我们可以把常见的数据链路层的帧分为:
以太网帧
和PPP帧
,如下所示:
计算机和路由器之间、交换机和路由器之间的数据传输,用的是
以太网帧
路由器和路由器之间的数据传输,用的是
PPP帧
-
相邻物理线路之间传输数据就是数据链路,不同链路之间遵守的通讯协议不同,根据通讯协议,我们可以把常见的数据链路层的帧分为:
- 从网络层传递下来的IP数据包,从
计算机0
到计算器1
的过程中,会以帧
的形式进行传输,帧的数据部分不会变,变得是帧的首部和帧的尾部,帧的首部和尾部会随着链路不同发生变化,例如:以太网帧就没有帧开始/结束符,PPP帧就没有源Mac地址和目标Mac地址!!!
- 从网络层传递下来的IP数据包,从
-
- 以太网帧和PPP帧的区别在于:以太网帧有目标/源mac地址,没有帧开始和帧结束符;PPP帧没有mac地址,多了帧开始和结束符;为什么会有这种差别呢?
以太网帧有目标/源mac地址,而PPP没有?- 是因为以太网帧的协议是广播协议,会给这个网段的所有的设备发送数据,所以要知道目标mac地址才好确认是发给谁;而PPP协议是点对点协议(Ponit to Point Protocol),用于两个路由器直接相连,不需要mac地址就可以传输过期;
以太网没有帧开始结束符,而PPP有? - 是因为以太网使用的是曼特斯特编码,接受的时候发现有信号跳变,就认为帧结束了,所以没有帧开始结束符
- 网卡工作于数据链路层和物理层;交换器、集线器工作于物理层;路由器工作于网络层、数据链路层、物理层
-
WireShark抓包工具
,抓到的帧没有FCS
,因为FCS
会在网卡进行差错校验
后扔掉
-