上回说到,华山派在应用了三层交换机后,破除了原有VLAN通过路由器互通的瓶颈,通信效率大增。但由于弟子不断增多,每一个弟子(IP地址)都需要消耗一条三层交换机的FIB表,而三层交换机的FIB表项资源宝贵,很快就消耗殆尽了。
令狐冲临危受命,岳不群下令限期改进三层交换机,把令狐冲送去玉清观封闭开发。
令狐冲整天苦思冥想,觉得如果想减少三层交换机的表项占用,只能从一个地方入手:路由聚合。
路由聚合是路由器的功能,可以将若干个相邻的小网段聚合为一个大网段,提升路由查找的速度,并减少路由表的占用。但交换机内部查表的方式为精确匹配,怎么样可以实现快速查询不同大小网段呢?
看来,只有在交换机中引入路由器的技术了——
以恒山派为代表的高端路由器玩家,为了提升路由器的性能,发明了一种加强的内容寻址存储器——TCAM(Ternary Content Addressable Memory)。TCAM是三态内容寻址存储器的缩写,它比起传统的CAM来,多了一个模糊查找的选择,Key的某些bit位可以设定为Not Care。
TCAM查找和CAM查找的区别如下图所示:
如图,对于CAM查找,使用精确匹配,查找的键值(Key)和表项的键值(Key)必须每一位都匹配才能返回表项的索引。
而TCAM查找,使用的是模糊匹配,部分键值的bit位可以设为Not Care,最后将返回匹配的bit位最多的表项索引。
如图,100.64.10.12会匹配三个条目:100.64.8.0/22;10.64.10.0/24;100.64.10.8/29。但基于TCAM模糊匹配的机制,最后返回的是标红色的条目100.64.10.8/29。
令狐冲经过一年多的封闭开发,在交换机ASIC中增加了TCAM之后,一方面,控制平面CPU可以将精简后的路由表直接写入TCAM中,这样避免了大量新数据流报文去CPU触发FIB下发,另一方面,由于大量的32位掩码的主机路由被精简为少量的最长匹配路由(LPM, Longest Perfix Match),大大减少了总的表项数量。
这样,三层交换机不再是“一次路由,多次交换”的“戴路由帽子”的二层交换机,而成为了具有部分路由功能的路由交换机。
华山派借助全球最早的路由交换机S8500和S6500,迅速称雄园区网络的江湖。而结束了封闭开发的令狐冲,也回到了小师妹岳灵珊身边。
但是,令狐冲发现,事情正在起变化。
鲁迅说:“当两颗心的逻辑距离远离时,物理距离再近也是徒劳。”这一点在令狐冲和岳灵珊之间很好地体现出来了。
令狐冲发现,自己和岳灵珊之间的丢包越来越多,通信往返时间(RTT)越来越长。这导致两个人之间频繁TCP慢启动,令狐冲送出的的情话(ping)也经常只收到一句“去洗澡”(Requested Time Out),甚至“呵呵”(Destination Unreachable)。
令狐冲心生疑虑,在交换机上通往岳灵珊的端口上,配置了远程端口镜像(RSPAN),把所有岳灵珊收发的数据包都复制一份送到自己偷藏在思过崖的采集器中。
令狐冲看了镜像的内容,不由得瞪大了眼睛。
原来,镜像中大部分流量来自探探、陌陌、秘聊等APP,内容都是一些令人脸热心跳的内容,以及林平之发来的女人看了会哭,男人看了会沉默的话。
令狐冲心里一阵一阵地痛。
如果能让交换机只允许自己发送的数据才可以让小师妹收到,该多好呀!
令狐冲又独自走上思过崖,向风清扬老人讨教。
风清扬老人笑了笑,让令狐冲盘腿静坐。
令狐冲不吃不睡,静坐了三天三夜,终于悟出了——
既然交换机可以通过TCAM查找转发表项,让它转发匹配表项的包,
那么,也可以让它通过TCAM查找表项,让它丢弃特定的包!
令狐冲在TCAM中分出了一块区域,专门用来存储丢弃和放行数据包的表项,并在交换机ASIC的入方向处理流程和出方向流程各增加了一个查找功能。如果数据包匹配到表项,则按照表项中的动作进行放行或丢弃处理。这个功能叫做ACL(Access Control List)。
令狐冲找了个机会,用新的线卡更新了华山派交换机的线卡,配置了如下ACL:
ACL Rule 2001
rule 1 deny all
ACL Rule 3001
rule 2 permit ip source 令狐冲 0 destination 岳灵珊
然后到通往岳灵珊的接口下应用ACL:
interface gigabitethernet 0/9/17
packet-filter inbound ip-group 2001
packet-filter inbound ip-group 3001
这样,岳灵珊就只能和令狐冲通信了。不再寂寞的岳灵珊逐渐想起和令狐冲两小无猜的时光,俩人又重归于好了。令狐冲虽然不知道封闭开发的一年多里面经历了什么,但还是选择原谅了她。
这一期在令狐冲配置端口镜像的段落里面,有一个隐藏错误,大家能找到吗?
上期答案:
交换机的三层转发流程:
若没有ARP表项,触发ARP学习;若有,则将数据包的目的MAC改为ARP表项中的目的MAC,源MAC改为出方向VLAN Interface的MAC并发送;
在三层转发时,对IP数据包的操作,除了要修改以太网包头的源地址和目的地址外,还需要将IP字段中的TTL减去1,并同步修改IP CheckSum。
你们答对了吗?