遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

二层交换机的MAC表学习过程

二层交换机工作在链路层,负责数据桢的转发,一个数据桢包含来源MAC,目标MAC,(ARP桢目标MAC不指定)

交换机负责将一个端口(物理上的)上收到的桢转发给另外的端口,由于一个端口对应一或多个MAC(对应多个MAC是交换机级连时出现的情况)所以交换机实现了MAC->MAC的数据包转发,

MAC表学习过程:

任何桢发送到交换机上时至少包含源MAC,因此交换机就可以记录一条(端口,MAC)记录到“端口MAC映射表”,针对那些交换机无法找到目标端口的目标MAC地址(可能是ARP桢的6字节全0目标MAC),交换机则将该桢转发到除接收端口外的其他全部端口,该过程叫泛洪,而目标主机收到后就会回复该桢,而交换机就可以记录该回复桢的源MAC(即上面的目标MAC)跟端口的对应关系以备下次使用

广播风暴:

交换机级连时如果出现回路,会形成网络风暴,如ARP桢,只有源MAC(目标MAC为全为0)对交换机来说一旦存在回路就会两个交换机之间来回发,从而占用信道。同时回路也会造成MAC地址表不稳定。
参考:http://wenku.baidu.com/view/c7b041768e9951e79b8927c6.html

//=================================================

参考:

文档编号:514
浏览:1241 评分:22

用户问题:

交换机是否会受到ARP欺骗?
问题答案:
交换机是不会受到ARP欺骗的,ARP攻击也无法对交换机造成任何后果
问题原理:
无论交换机在收到主机或者路由器发过来的数据时,都有责任对这些数据进行转发,当它从某个端口收到数据包后,读取数据包中的源MAC地址,从而就得到了此端口和MAC地址的映射表,当它在映射表中还找不到目标MAC地址来确定应该将数据发向哪个端口时,它就会在除源端口之外的其它所有端口进行泛洪(类似广播),这时,因为是泛洪,所以真正的目标主机能够收到这些数据包,也因为交换机在转发数据包的时候,即使ARP缓存表是空的,它也不需要发ARP广播来请求MAC地址,所以也根本不存在ARP欺骗,如果下面继续有其它端口的数据要转发,交换机再使用上面同样的方法,来学习到每个端口对应的MAC地址,就是因为通过这样向其它端口泛洪来学习到端口和MAC地址的映射表,所以交换机从来没有收到过任何关于MAC地址到IP地址的ARP数据包,况且交换机也从来不读取数据包中的IP地址.
问题结论:
1.交换机任何时候都不关心IP地址,因为交换机是二层设备,(三层交换机除外,三层交换   机就当路由器来对待了)。
2.交换机中的ARP缓存是端口号到MAC地址的映射,与IP地址无关。
3.交换机中的ARP缓存表是通过在转发数据包时读取源端口和源MAC时记录下来的,而不是通过ARP广播去询问的。
4.当交换机的缓存表不能反应出目标MAC和端口的映射时,就会向除源端口外的每个端口发一份(泛洪),以保证真正的目标主机能够收到数据。
5.因为ARP缓存中找不到端口号和MAC地址的映射时,就会泛洪,所以人工地绑定端口和MAC地址只是解决泛洪,让交换机不要因为找不到目标MAC地址而向每个端口都复制数据,这种方法与解决ARP欺骗没有任何关系!
  
附理解交换机的工作原理:
交换机是根据自己的ARP缓存表来提供数据转发的,ARP缓存中记录着端口号对应的MAC地址,当收到数据需要转发时,先读取数据中的源MAC地址,再看来自哪个端口,然后记录下来写入ARP缓存表,最后交换机查找ARP缓存表以确定该把数据发向哪个端口,如果ARP缓存中没有找到答应,那么这时交换机便决定把数据向除了向源端口之外其它所有端口都复制一份,这样便可以万无一失地把数据送到目的地,除非根本没有这个目的地,所以交换机的ARP缓存表是通过读取需要转发的数据的源MAC和源端口来学习到的,不是通过ARP询问来更新的!

posted on 2012-04-20 19:23  遗忘海岸  阅读(13547)  评论(0编辑  收藏  举报