一个数据包来了,交换机如何判断二层交换还是三层路由?

一个数据包经过交换机,交换机怎么分辨是要二层传递还是三层传递?
 
如果交换机是一个纯二层交换机,压根没有三层接口,很显然纯二层转发。
  • 如果目的MAC=单播MAC地址,且可以在MAC Address Table查询到端口,那么从对应的端口流出。
  • 如果目的MAC=单播MAC地址,但是没有在MAC Address Table查询到端口,那么采用Flooding机制,在广播域里进行广播扩散。广播域 = 接收到该帧的端口所在的广播域(VLAN)。
  • 如果目的MAC=广播MAC地址,本机如有对广播感兴趣的程序,复制一份给该程序,然后再广播域里广播扩散。如果没有感兴趣的程序,直接在广播域里广播扩散。
  • 如果目的MAC=组播MAC地址,本机如有对广播感兴趣的程序,将报文递交给该程序。比如RSTP、LACP。
  • 如果目的MAC=组播MAC地址,本机没有对广播感兴趣的程序。如果启用IGMP Snooping,查询端口是否为空,如果为空,直接将帧数据丢弃。否则将帧数据转发给查询到端口数,可能一个,也可能多个。
  • 如果目的MAC=组播MAC地址,本机没有对广播感兴趣的程序。如果没有启用IGMP Snooping,将该帧直接在广播域里进行广播扩散。
如果交换机不仅拥有二层的交换,还具有三层的路由,那么判断逻辑如下:
数据包的目的MAC是否等于该广播域三层接口的MAC地址?
  • 如果相等,将数据包直接提交给三层路由处理。
  • 否则,将数据包按照二层交换处理。具体的二层判断逻辑参考上文。
二层交换
由于仅仅是逻辑判断,并不对帧数据进行报文头的修改,甚至也不对帧的CRC进行校验。为了提高转发的效率,交换机只要读出帧头的MAC地址即可完成所有的逻辑判断,就可以完成转发。
三层路由
需要完成CRC的校验,否则将一个错误的帧提交给IP层,那不是坑人吗?由于二层交换机一般不做CRC校验,所有的CRC校验工作全部落在三层接口上来完成。三层接口的CRC错误率统计,会非常得高。三层路由还需要做报文头的替换工作,报文头的Sanity Check, 所以转发延迟要稍稍大一些。
(0)

相关推荐