a 当前位置: 首页 > 常识 >

交换机工作原理(收到一个数据包后交换机是如何处理的)

100次浏览     发布时间:2024-09-08 08:36:35    

感受集线器

在基础课程里面了解过集线器的原理,那会没有太多的去做实验,这里我们使用eNSP来做一个实验,正好支持HUB这个设备。


这里使用192.168.255.1去ping 192.168.255.2,然后抓起PC3的流量,看看发生什么事情。



当你抓起PC3的流量的时候,使用PC1去PingPC2,所有的流量,PC3都是可以收到的,这个就是集线器工作的原理,一个数据发送出去,会复制到其他的所有接口,不管该PC是否要不要,另外的半双工、冲突域这些缺点就不在介绍了,可以回顾下基础的内容,后面替代这个产品的就是交换机。

了解交换机的工作过程

在了解交换机的正式过程之前,回顾下交换机带来的特性

  • 交换机是主要是工作在数据链路层,能够去读取以太网的头部
  • 每个接口有独立的硬件芯片,工作在全双工,当1口与3发送数据的时候,并不影响其他接口,实现了隔离了冲突域的同时,其他接口也可以同时发送数据,提高了工作效率,这也是目前企业网一直使用交换机的原因。
  • 具有丰富的接口来满足企业的需求,目前市面上主流的8口、16口、24口、48口的交换机,根据实际需求灵活选择。
  • 具有地址学习功能,这也是交换机智能化的一点,能够知道具体的终端位置在哪,准确的送达目的地,而不是傻瓜式的复制到其他所有接口。


  • 从实验中来了解交换机的工作过程



还是之前的实验环境,只是把HUB换成了一台交换机。



在开始之前,先学一个命令,通过上面了解到交换机是具有学习地址的功能,也就是MAC地址,在交换机里面可以通过 display mac-address 查看当前交换机学习到的MAC地址,这个表项叫做MAC地址表,用于存放学习到的MAC地址,当前没有学习,因为还没触发数据。


开启PC3的抓包,建议过滤一下,因为交换机默认会发送一个报文,有点干扰我们抓包,然后就PC1去ping PC2


会发现现在抓包,PC3上面只收到了一个广播包,广播包是目的MAC全F,所以交换机会除了发送者接口以外的所有接口发送出去,但是其余的单播包,PC3是收不到的。




这个时候交换机的MAC表里面就出现了内容了,这个就是我们要了解的。

  • 5489-9856-195f的MAC地址从G0/0/3接口学到,这个接口正是对应PC2的
  • 5489-98d4-0ac8的MAC从GE0/0/1接口学到,这个接口对应的是PC1。
  • Type为dynamic,也就是动态学习,竟然是动态学习,那势必就有生存周期,比如这台电脑关机了,在一定时间后,删除掉对应的表项,这样来优化资源,因为MAC表的容量是有限制的,并不是无限大。


  • 分析交换机地址学习的整个过程。

(1)当PC1发起去往PC2的Ping请求后,首先PC1会发送一个ARP请求



因为它并不知道PC2的MAC地址是多少。


(2)这个数据包发出以后会被交换机的G0/0/1收到,它通过读取以太网的头部信息,发现源MAC地址是PC1,目的MAC全F(广播,表示局域网所有主机)

这个时候交换机会做两件事情,第一个:将PC1的MAC地址记录到MAC地址表中,并且关联接口G0/0/1(因为数据包是从G0/0/1收到)。



第二个,将这个ARP请求包,发送至接收接口以外的全部接口(PC1以外的全部接口)



这就是为什么在PC3抓包能够看到ARP广播报文的原因。


(3)交换机发出以后,PC2与PC3会都收到ARP的请求,PC3发现请求的不是自己,就丢弃了,PC2发现,这是找自己的,于是回应一个ARP响应,这个是单播回应,这也是在PC3抓包看不到的原因,为什么看不到呢?这就是交换机的处理过程了。当交换机收到这个ARP响应后,它读取二层头部信息,发现源MAC是PC2,于是它将PC2的MAC记录到MAC地址表中,关联G0/0/3。




在看目的MAC是PC1的MAC,它会在MAC表中查询是否有该MAC地址与接口对应记录存在,发现存在PC1的MAC地址,于是从G0/0/1把这个数据包发送出去,这就是PC3收不到的原因,因为交换机知道PC1在哪,并不会像HUB一样全部接口都发送。



(4)PC1收到ARP回应后,可以进行封装二层头部了,这样就把ICMP的请求发送出去,交换机收到以后同样的读取二层头部,发现目的MAC是PC2,MAC表中有记录,从G0/0/3发出。


(5)PC2收到PC1的ICMP请求,回应ICMP应答,交给交换机,交换机同样读取二层头部,发现目的MAC是PC1,直接从G0/0/1发出。


总结:从以上的流程中可以发现,交换机是通过读取以太网头部中的源MAC来学习MAC地址的,并且后续通过二层头部的目的MAC,在自己学习到的MAC地址表来寻找到对应接口,将数据发送出去。


  • 假设目的MAC在MAC表中不存在,交换机会如何处理呢?

要完成这个实验呢,首先,要先Ping一次,建议关闭之前的PC3抓包,重新抓取。




老样子,PC3抓包还是只看到了ARP报文,这个时候做一个操作,假设PC2的线路坏了



通过把PC2停止(关机),好玩的事情出现了,pc1ping pc2,显示Request timeout(这个在ICMP的差错报文中有讲解,还记得吗),这因为PC2关了,自然是不通,但是好玩的事就在PC3竟然收到了PC1的ICMP报文!!!!是不是有点奇怪,不是只有目的MAC全F的才进行发送到其他接口吗?


这里就要介绍交换机工作的另外一个特点了




当交换机收到一个数据包以后,它会读取里面的以太网头部,源MAC学习进MAC地址表

  • 目的MAC如果是全F时(广播)或者组播MAC,直接从收到的接口以外的全部接口发送出去
  • 目的MAC为正常MAC时,检查MAC表是否有该目的MAC的条目,有则直接通过记录的口,单播发送出去,如果没有,从收到的接口以外的全部接口发送。 这个就是上面PC2关机以后,由于G0/0/3接口物理线路断开,交换机会将G0/0/3学习到的MAC地址全部删除,所以查看MAC表里面只有PC1的MAC,这时候PC1在去访问PC2,交换机发现MAC表中没有PC2的MAC记录,所以采取全部接口发送,其实有点回到HUB的模式,HUB是因为物理工作方式就是这样,交换机这样做的目的是为了能够找到PC2,让PC2回复,自己就能够学习到MAC地址,下次在收到对应的数据包就可以直接单播发送了,通过MAC表转发到对应的接口。
  • 对于单播的目的MAC地址在MAC表中没有找到的这种情况,称为未知单播帧,因为交换机并不知道它在哪,所以只能通过泛洪(Flooding),这个术语在很多书上面会提到,这里提及一下。
  • 泛洪与广播的区别:广播指的是收到目的明确为全F的广播地址,会将这个数据帧从除了源接口以外的所有接口转发出去,泛洪指的是收到一个目的地址是单播的帧,但是自己MAC表中没有,属于未知单播帧,交换机只能采取泛洪的形式,也是从除了源接口以外的所有接口转发出去,希望有回应,这样交换机能够学习到目的MAC所在的接口。


至此呢,交换机的转发数据原理就明白了,总结下来就是上面这2点,建议大家做做这个实验,可以了解下整个转发的原理。


H3C设备MAC地址表查看



H3C模拟器跟华为一样,拖3台PC,然后一台交换机出来,通过连线接好,然后测试下。



PC3与PC4同样的设置地址,记得启用哦


开启抓包后,还要启动wirehsark,不会自动启动的。



这个时候默认情况下华三交换机也是没有任何地址表项存在的。



启动命令行终端(这个就是之前为什么用eNSP演示的原因,HCL稍微有点麻烦)



现象跟华为是一样的


一个特殊案例分享(华为华三命令一样)



在某些特定的环境下,特别是有服务器这种,通常会进行一个操作,就是把服务器MAC地址静态绑定的操作,比如上图服务器接在G0/0/3上面,可以在交换机做一个操作。



命令:mac-address static 【MAC地址】【接口】【VLAN】 MAC地址你在操作的时候MAC地址跟图不一样,以你自己实际的为准 将服务器的MAC地址静态的跟G0/0/3口进行绑定,其中有一个比较陌生的参数是vlan 1,这个下一篇我们会学到,可以先理解交换机默认初始状态都属于VLAN1。





可以看到类型变成了static,访问也没什么问题,这个时候假设有一个伪装服务器MAC的设备出现,会怎么样呢?



当把PC2设置成192.168.255.3后,并且MAC地址也伪装,但是实际PC1去访问服务器,PC2这个伪装并不会影响到服务器,这样就是静态绑定的好处,也是实际中比较常用的方法,因为静态绑定的优先级是高于动态的,所以PC2设置成了服务器一样的IP地址跟MAC也不会影响到服务器,交换机不会把这个MAC地址记录到MAC表中,通过上面查看也可以发现,没有关于G0/0/2的信息,保障了服务器连接的稳定性。


如果我想要G0/0/3不在学习其他的MAC地址,就只使用静态绑定的行不行呢?是可以的,交换机支持一个功能可以关闭某一个接口的动态MAC学习机制

  • 华为设备:接口下下面, mac-address learning disable | mac-address learning disable action discard


  • 华三设备:接口下面,undo mac-address mac-learning enable (后续补充:如果需要禁止它转发该接口其他的MAC的流量,还需要两个命令,一个是限制接口学习MAC的数量,mac-address max-mac-count 0,还一个命令是达到上限以后的处理规则, undo mac-address max-mac-count enable-forwarding


  • MAC地址其他知识了解
    • 交换机自动学习的MAC会存放到MAC地址表中,这个属于动态学习(dynamic/Learned),是有时间限制的,不管是华为、华三还是思科的产品默认是300s,通过display mac-address aging-time 查看。
    • 华为通过mac-address aging-time 通过该命令可以修改MAC动态的老化时间,如果修改为0(华三通过mac-address timer no-aging来修改),表示永久存在,不老化,建议默认参数即可
    • 华为华三设备清除MAC地址表,可以通过undo mac-address :清除所有MAC表项 | undo mac-address G0/0/1 :清除G0/0/1学到的 | | undo mac-address static 清除静态的 | undo mac-address dynamic:清除动态学习到的。
    • 华为华三设备静态绑定MAC,通过mac-address static xxxx-xxxx-xxxx interface vlan x (华三可以支持全局跟接口下配置,华为只能全局)


作业


PC_2,pc_3_pc4设置好地址,PC4当做一台服务器

  • PC_2 ping 3与4通不通,然后观察MAC地址表(建议复制MAC地址,后续用的上)
  • 在G1/0/3口上面禁止掉MAC地址学习,查看下是否pc_2与3能不能跟PC_4通信(主要查看MAC表)
  • 做静态绑定功能,把PC_4的MAC地址绑定到交换机上面
J