前提
本文所使用的演示工具是“Cisco Packet Tracer”,没有安装的请参考以下链接进行安装
理论与实践相结合之Cisco Packet Tracer网络模拟器安装教程-CSDN博客
交换机简介
交换机是一种网络硬件设备,每个交换机都维护了一个mac地址和端口的对应表,交换机工作时依据数据包中的MAC 地址参照mac地址表将数据从指定端口发送出去。
本文所指的交换机是二层以太网交换机,工作在OSI 模型的第2层,也就是数据链路层。
交换机示例图如下所示:
单交换机数据通信演示
演示拓扑:
PC-A,PC-C,PC-E三台电脑接在同一交换机下,ip和mac地址配置如图所示:
场景一:当PC-A发送一个广播包(目的mac地址为全F)时,交换机如何发送数据包
1、创建数据包
- 点击红框标记信封图标,然后依次点击电脑PC-A,PC-E
- 点击绿框标记标记“edit”按钮,将目标地址修改为“255.255.255.255”
2、按下图步骤执行
3、数据包发送到交换机,内容如图所示,然后再次点击红框标记的图标
4、交换机将数据包从所有端口发送出去
结论:交换机收到广播包时,将从所有端口发送出去
场景二:PC-A发送数据给PC-C
1、创建数据包,然后点击下一步按钮
数据包的第2层信息,源MAC是PC-A,目标MAC是PC-C
数据包的第3层信息,源IP是PC-A,目标IP是PC-C
2、数据包到达交换机(交换机将从0/2端口发送出去),点击下一步
3、交换机只将数据发送给PC-C
结论:当数据包为指定目的地的单播包时,交换机从指定端口发送数据包
原理:交换机是依据目的MAC地址发送数据包
当目的mac地址为FFFF.FFFF.FFFF时从接收端口之外的所有其它端口发送
当目的mac地址为特定mac时,依据mac地址表和接口对应关系,从指定接口转发
交换机mac地址表如下所示:
场景三:交换机断电重启后mac地址表信息会丢失,此时如果PC-A发送数据给PC-C,交换机查询不到mac对应的端口号,将如何转发数据呢?
1、清空交换机mac表缓存
2、创建数据包,从PC-A发送给PC-C
3、数据发送过程演示
数据包到达交换机后,将从接口2和接口3发送
交换机将数据包发送给了PC-C和PC-E
结论:当交换机收到数据包后,目的mac地址在交换机的mac地址表中找不到对应接口时,将从所有端口发送出去。
多交换机数据通信演示
演示拓扑:
交换机0和交换机1相连,PC-A连接交换机0,PC-C,PC-E电脑接在交换机1下,ip和mac地址配置如图所示:
场景一:PC-A发送数据包给PC-C
数据到达交换机0
数据到达交换机1
PC-C收到数据包
场景二:PC-A发送数据包给PC-E
同场景一,不再演示
交换机mac地址表
交换机0
Switch#show mac-address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ------------------- --------------- ----------
1 0002.1735.bc01 DYNAMIC Fa0/2
1 aaaa.aaaa.aaaa DYNAMIC Fa0/1
1 cccc.cccc.cccc DYNAMIC Fa0/2
1 eeee.eeee.eeee DYNAMIC Fa0/2
交换机1
Switch#show mac-address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ------------------- --------------- ----------
1 000d.bd23.e602 DYNAMIC Fa0/1
1 aaaa.aaaa.aaaa DYNAMIC Fa0/1
1 cccc.cccc.cccc DYNAMIC Fa0/2
1 eeee.eeee.eeee DYNAMIC Fa0/3
结论:多个交换机与单个交换机发送数据包的原理相同,都是依据目的mac地址发送数据包
当目的mac地址为广播地址时,将从接收端口之外的所有其它端口发送出去;
当目的mac地址在mac地址表中找不到对应接口时,当作广播包进行发送;
当目的mac地址在mac地址表中有对应接口时,从指定接口发送。
vlan简介
vlan,也就是虚拟局域网,在二层网络中隔离广播域,应用场景很广泛,例如将公司不同的部门划分为不同的vlan,不同的vlan之间不能直接通过二层交换机通信。
单交换机vlan数据通信演示
演示拓扑:
将交换机0的F0/2接口修改为vlan2,其它接口保持默认
场景一:PC-A发送广播包
制作数据包
交换机0收到数据包后,只从F0/3发送,因为F0/2在不同的vlan,不属于相同的广播域,所以不会从F0/2发送数据包
PC-C收到数据包
场景二:将PC-A连接的交换机接口配置为vlan2,再次发送广播包
交换机收到数据包后,将从F0/2发送出去,因为F0/1和F0/2都属于相同的vlan2,不会从F0/3发送
PC-E接收到数据包
结论:在二层交换网络中,只有相同的vlan之间才能传输数据
多交换机vlan数据通信演示
演示拓扑:
交换机0的F0/1为vlan2,F0/3为vlan3;交换机1的F0/2为vlan2,F0/3为vlan3;其它端口默认
场景一:PC-A发送广播包
制作广播包
交换机0收到数据包后,不会从任何端口发送出去
原因:交换机的端口默认都属于vlan1,从PC-A接收到vlan2的数据包后,没有其它任何端口属于vlan2,所以不会进行发送(用于交换机相连的端口默认也属于vlan1)
在此,我们引入trunk的概念,将交换机相连的端口配置为trunk后,则允许所有vlan数据通过
场景二:将交换机连接的端口配置为trunk后,PC-A重新发送广播包
下面我们来对比一下交换机接收和待发送的数据包PDU
从PC-A接收的PDU
待发送数据包的PDU
我们可以看到交换机0接收到数据包后,准备发送给交换机1的数据包采用的是802.1q进行数据封装,数据内容中携带了vlan2标签,这也是用于交换机1接收到数据包后能够识别到数据包来源于哪个vlan
下一步,交换机0将数据发送给交换机1
交换机1接收的数据包中包含vlan标签
交换机1将数据只发送给PC-E,因为只有PC-E属于vlan2
结论:交换机所有端口默认属于vlan1 ,交换机与交换机相连的端口应当配置为trunk模式,称之为中继链路,采用802.1q协议,传输的数据包内容包含vlan信息,中继链路允许所有vlan数据传输。
补充:trunk链路在传输默认vlan(通常为vlan1)数据时不会使用802.1q标准,传输数据时不会包含vlan信息。
生成树协议简介
生成树协议的作用是为了防止广播风暴,交换机之间通过生成树协议数据包,选举出根桥,指定端口和阻塞端口等,避免形成环路,如下图所示,红框标记端口为阻塞状态,不能收发数据:
我们试想一下,如果没有生成树协议,那么交换机连接的两条线路都能收发数据,当PC-A发送一个广播数据包时,由于交换机之间形成了环路,将产生广播风暴。
生成树演示
我们通过show spanning-tree命令可以查看交换机端口状态
交换机0
交换机1
场景一:将交换机F0/1相连的线断开
由于两台交换机只有一根线相连,不会产生环境,所以原来阻塞的端口恢复正常状态
交换机0
交换机1
结论:当交换机端口状态改变时,生成树协议将重新评估端口状态,目的是为了防止生成环路
场景二:将端口添加到不同的vlan防止环路
将两个交换机的端口F0/1和F0/3加入vlan1,端口F0/2和F0/4加入vlan2
由于vlan可以隔离广播域,此时交换机两条线路均可传输数据
PC-A发送数据给PC-E,我们可以看到交换机1的数据是从F0/1接收,将从F0/3发送出去
PC-C发送数据给PC-G时,我们可以看到,交换机1的数据是从F0/2接收,将从F0/4发送出去
总结
以上演示了交换机数据收发过程,介绍了vlan和生成树。
交换机传输数据其实很简单,就是依据目地mac地址进行转发,当找不到目的mac或目的mac为ffff.ffff.ffff的广播包时,将从接收端口外的所有其它端口发送出去。
vlan是802.1q标准下的虚拟局域网,可以隔离广播域,交换机之间相连,我们应当将端口配置为trunk模式,此时的链路称之为中继链路,允许所有vlan传输,非默认vlan的数据包传输时将打上vlan的标记。
生成树协议是为了防止交换机之间产生环路引发广播风暴,因为交换机收到广播包后将会从其它所有接口发送,这样将导致广播包从一个端口发送出去后,又从另一个端口接收到,导致数据包在交换机之间不断循环。
另外,有一种攻击叫做mac地址泛洪攻击就是利用了交换机的这种特性,交换机的mac地址缓存表是有限制的,当mac地址缓存表达到上限后将不能缓存新的mac地址。
攻击者通过发送假数据包使交换机的mac地址表达到上限,后续真实数据包由于在交换机的mac地址表中找不到对应的接口将从所有其它端口发送出去,此时,攻击者便可以接收到别人发送的真实数据包。
在上面的演示中,我们使用的思科设备,其实不管是思科、H3C还是华为,通信原理都是相同的,因为大家都遵守相同的标准,这也是不同设备能够兼容的前提。
我们不需要太关注设备配置命令,因为每个厂家的配置命令都有差异,弄懂通信原理后,不管什么品牌的设备,我们都可以上手。
本文为“理论与实践相结合之计算机网络基础系列”的内容之一,其他博文也在更新中,本系列完成后会将导览链接补充在本文末尾,感兴趣的可以关注和收藏。
种草
我的博文内容主要针对“计算机网络”、“安全”、“运维”和“云计算”方向,感兴趣朋友的请关注我,我将不定期发布新的博文并不断改进已发布博文。
后期依据大家对博文的评论,点赞及关注情况,针对大家感兴趣的内容我也会录制视频并整理出成套的学习资料免费分享给大家,期待能和大家一起交流学习。