网络设备硬核技术内幕 交换机篇 7 思过崖前的创新

2022-07-27 12:59:34 浏览数 (1)

上回提到,令狐冲在思过崖见到一位仙风道骨的老者,提点令狐冲半夜去思过崖后的山洞受教。

老者名叫风清扬,是华山派元老,由于长期加班过度,身体不适,隐居思过崖以种菜度日。

老者问:

少侠,每次你如果想和一个人通话,需要做什么?

令狐冲答:

查电话簿,找到这个人电话号码,打他电话。

老者问:

那么,下次再想和他通话,需要做什么?

令狐冲答:

在手机通话记录里面找到直接拨打。

老者又问:

那,如果将路由表缓存到交换机ASIC,是不是可以在交换机的ASIC直接查找路由表进行转发?

令狐冲翻了翻白眼,在思索着——

交换机内部的MAC表项存储在CAM存储器中,CAM可以根据查找内容精确匹配,如精确匹配MAC地址并查找出接口。这种存储器存储的表项又被称为LEM (Large Exact Match),如下图所示:

而路由器查找路由表的方式并非如此。路由器执行的是最长匹配查找,查找的表项被称为LPM(Longest Perfix Match)。如下图所示:

由于路由器执行的是三层转发,转发数据包时,原来的以太网头部将被剥离,替换为新的以太网头部,其源地址为路由器出接口MAC地址,目的地址为对端MAC地址,因此,路由表项还需要关联到ARP表项:

令狐冲在苦苦思索应当如何让交换机具有查找这些表项的能力。

老者拍拍令狐冲肩膀:

少侠,你想想,若在路由表中存储的不是Destination IP Section/Mask这种网段/掩码的方式,而是将IP地址直接存在LEM表中……

令狐冲一拍大腿。就这么干!

三层交换机的转发流程为:

  1. 根据数据包的MAC地址,在CAM中查询LEM表。如果查询到的出接口为二层port,则直接二层转发,如果查询不到,则在VLAN内泛洪。如果出接口为VLAN Interface,则进入三层转发流程。;
  2. 三层转发流程中,根据数据包的IP地址查询FIB(Forwarding Information Base)表,如果查询到,则根据目的IP地址,在出接口上查询ARP。
  3. 若没有ARP表项,触发ARP学习;若有,则将数据包的目的MAC改为ARP表项中的目的MAC,源MAC改为出方向VLAN Interface的MAC并发送;
  4. 如果在FIB表中查询不到目的IP,则将数据包送到CPU,让CPU查找路由表,并根据路由表查询结果,将FIB表下发到交换机ASIC内部的CAM中。这样,后续指向该IP地址的数据包均可以匹配CAM中这条FIB表,进行快速交换了。

这叫做“一次路由,多次交换”,基于这种机制的交换机叫做三层交换机,能够实现跨VLAN网段的交换,在局域网中可以部分替代路由器的功能。

令狐冲一头扎进实验室,造出了中国第一台三层交换机——S3526,从此,令狐冲又可以和小师妹愉快地线速转发情书了。

好景不长。

由于华山派弟子的扩张,核心三层交换机的CAM表中,需要存储每一个弟子的信息,很快,出现了CAM表存储不下FIB表的情况。大量找不到FIB表的数据包被上送到CPU,CPU疲于奔命,网络大量丢包。

令狐冲临危受命,改进三层交换机。

欲知后事如何,请看下回分解——

上次遗留的思考题:

VLAN ID=0的数据包代表什么?它是在什么协议中用到?

答案:VLAN ID=0的数据包在Profinet RT中使用,代表高优先级实时信令。只有支持Profinet的交换机才能够正确处理这样的数据包,否则会丢弃或修改为默认的VLAN ID(PVID)。

今天的思考题:

在“一次路由,多次交换”的转发流程中,有一个隐藏的小错误,请指出。

0 人点赞