玩了这么久网络,你知道 交换机是属于 物理层 还是 数据链路层?交换机的原理吗?发送数据的转发方式嘛?
交换机
交换机是属于 物理层 还是 数据链路层?
-
集线器 工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”
-
普通交换机 工作于OSI(开放系统互联参考模型)参考模型第二层,即“数据链路层”
-
智能交换机 存在工作于第三层和第四层的功能。
-
集线器因为不对数据包进行处理,而是直接广播的形式将数据包发送给每一个与其相连接的节点,所以是工作在第一层物理层上的。(和交换机最重要的区别)
交换机的三大功能
- 地址学习
- 转发/过滤
- 环路避免
Hub(集线器) 收到数据会将所有连接线路的接口都发送数据
交换机的工作原理:
交换机收到数据如何处理?
当交换机收到数据后,
-
首先地址学习
将收到的帧 的源 MAC地址与进入端口编号相关联,放入CAM表中,然后取出目的 MAC地址,查看是否是交换机本身的,如果是,自己留下处理,如果不是,将再次查看 CAM表,如果CAM表中有对应的条目,将数据按照条目指定的端口转发出去,如果 CAM表中没有对应的条目,将泛洪。
-
CAM表
CAM表初始值为空,用来存放 MAC地址和端口编号,每300s刷新一次
个人建议 看图在理解下面的话
模拟过程:
条件:A_PC ping C_PC
- 去
- 将ping时的数据,封装为包,在封装为帧
- 帧 在 + 上 源MAC地址:0260.8c01.1111 + 目的MAC地址:2060.8c01.2222
- 将以上数据 在 封装为 数据链路层帧的格式
- 发送到 物理层,变成 0101010101010101010
- 通过网线 发送到交换机的E0口
- 交换机收到后,地址学习:将 0101010组合成帧,取出源MAC地址:0260.8c01.1111放入CAM表中并标注 E0接口,
- 取出目的MAC地址,查看此地址是否是PC本身和交换机本身,因为每个设备都有自己独特的MAC地址,所以肯定不会是交换机和PC的。
- 查看 CAM表中是否有目的MAC地址,CAM表中只有之前的源MAC地址,所以此时交换机将 目的MAC地址 泛洪。
- 泛洪:将所有连接交换机的接口将数据转发出去 B_PC,C_PC,D_PC
此时数据已经封装为帧,也就是原格式
- B_PC,C_PC 收到数据后,发现数据的目的MAC地址都不是自己,所以直接将数据丢弃
- C_PC 的MAC地址和数据目的MAC地址 相吻合,所以留下 数据 进行处理
- 回
- C_PC 收到数据后会返回数据
- 将数据 封装为帧,源MAC地址变成了自己的:0260.8c01.2222,目的MAC地址变成:0260.8c01.1111
- 然后再变成 01010101 通过网线发送到交换机 E2口
- 交换机收到后依然是地址学习:将源MAC地址:0260.8c01.2222 写入到CAM表中并标注 E2接口
- 查看目的MAC地址是否是PC本身和交换机本身的
- 查看是否存在MAC表中,发现目的MAC地址存在于 ACM表中 并且是 E0接口
- 数据直接通过 E0 接口发送到 A_PC,不再泛洪。交换机再次 地址学习,刷新计时器
此时数据已经封装为帧,也就是原格式
- A_PC 接收数据
别看步骤有很多,说出来那么几句话也不多,也很好理解。
-
转发/过滤
后续回去的数据包,并没有泛红 发送给所有接口,是不是就是 转发/过滤啦 -
环路避免
此次的流程 并没有体现,后面的生成树 会体会到
相信 大家看图就可以了解了。B_PC 收到了两个数据包
交换机帧的转发方式
-
直通转发:
交换机只检查了目的地址,直接对目的地址进行发送,可能会出现资源包的损坏,但因为发送时 没有延迟 非常快。在知道数据的稳定性和网络速度够快的情况下,建议用
-
存储转发:
收到数据后 先进性冗余校验,检查数据包是否被损坏。完好的情况下 在进行转发。保证了数据包的完整性,但正因为这个校验 缓冲,降低了传输的速度。转发的数据很完整
-
无碎片转发:
只检查帧的前64个字节,如果没问题就把数据转发出去。
因为在 帧数据和MAC地址的拼接后的帧,前64个字节如果没有损坏,那么数据是基本不可能损坏得了。
在我们使用的交换机,再转发方式这里是多元性的,可能支持一种,可能两种,可能三种。