【转】你所了解的三层交换机,是这样工作的
原链接:
SDNLAB:你所了解的三层交换机,是这样工作的
作者:
张龙,双CCIE(CCIE R&S,CCIE Security);2011年之前在国内顶级培训机构担任CCIE R&S讲师;因一直秉持知行统一,理论要与实践相结合,故辞去讲师一职投身与项目中,先后就职于亚信,华为运营商系统集成商,担任中国电信4G项目的技术负责人,腾讯科技中国区及东南亚部分地区负责人。如今在eBay(中国)公司担任IT架构师.
前言
昨天晚上看到的分享,结果上午就用到了,这一篇对三层交换机的工作原理进行了简明扼要的概括,值得学习。
你所了解的三层交换机,是这样工作的
为什么我们说三层交换机的三层转发性能要比路由器的效率要高的多?有时候在很多书里会提及到现在路由器的软件做的也非常强大,几乎也能够达到限速转发的能力;但是软件能够和硬件比吗,不太可能;交换机之所以转发速度快是因为交换机使用了专门的ASIC硬件转发卡,而路由器是software-based 的转发。
我们习惯说,在二层网络环境中相同vlan之间可以通信,不同vlan之间不可以通信,如果想通信必须借助三层设备,所以说三层交换机必须要做的事情是路由转发,但是具体的工作原理是什么样的呢 ?
首先三层交换机在同一子网和不同子网环境中都分别会做些什么事情,有哪些不同呢?
如上图,在二层环境中A---B之间通信,A发送一个数据包目的MAC地址是B,当发送到交换机,交换机基于目的MAC地址的转发,然后开始查看自己的MAC表项,找出对应的出口出去了整个过程中只有MAC地址的查找,没有对数据帧产生任何的改变,我在这只对二层帧转发做一个简短而又简单的描述,毕竟重点不在这。
在三层环境中 A---C之间通信,A发送一个数据包,目的MAC地址应该是网关MAC地址,也即是交换机的MAC地址SMAC好在这里插一个小插曲,之前有人问过我说一个交换机要不要三层转发是怎么判断的,我当时的回答是看这个数据包的mac地址是不是自己,如果是就执行三层转发,别人说回答是正确的;但是当我回来研究这个问题的时候,我发现当时我的回答是不严谨的,为什么 ?当一个交换机收到一个数据包的二层目的mac地址是自己,此时它要做什么?
插个一个小插曲,前两天在微信上看过这样的一个小短片,说的是在一所大学教室里,有两个男生特别喜欢坐在他们身后的班花,就不停的看着那个女孩,突然,那个女孩站起来准备走了,在路过他们身边的时候塞给了坐在一边的男生一个卷起来的小纸条;物理上,这个女生是将纸条递给了这个男生,想想这个男生接下来要做什么事情?是要打开纸条查看里面写了什么内容吧!三层交换机在接收到目的mac地址是自己的时候要做的事情也是向上层解封装,查看三层目的IP地址,然后呢?
当时那个男生很高兴的拿着那个纸条,然后打开了,上面写着“请将纸条递给下一个人”,哈哈,,,三层交换机也是这样一看原来目的IP地址不是自己,这才执行路由层面的转发;所以说交换机在执行要不要三层转发,是在目的mac是自己的同时,IP地址是不是自己,如果是自己那还转发个啥来,就不用转发了。
交换机在判断出目的IP不是自己的时候是不是一定就去查看路由表呢 ?不是,这个就是交换机的关键所在了,交换机此时不会查看路由表,不会查看arp表,不会查看mac地址表;那交换机会查看什么表?
交换机此时会查看自己集成在ASIC硬件转发卡中的硬件转发表,那这个硬件转发表都包含了什么内容呢?
- 当第一个包过来的时候,发现硬件转发表并没有什么表项,所以此时必须将数据包交由路由进程处理,一旦交由cpu处理,必然会消耗cpu资源,此时会查看路由表,然后发现此IP地址个自己是直连的,此时就去查看arp找出此地址对应的mac地址,就可以转发出去了
- 在决定转发出去过程中,交换机至少会做三件事情,一,修改IP包头的ttl值;二,修改原mac地址,改成自己出接口mac地址;三,建立交换机硬件转发表,包括目的IP地址,目的IP地址(下一跳)对应的mac地址,mac地址对应的vlan,以及对应的端口(这个每个厂家有自己的理解)
- 这样当一下包过来的时候,交换机就会查看硬件转发表直接转发而不会在经过路由表的查询了,也即是交换机的一次路由,多次交换机原理。
每个厂家在这一块定义都不太一样,但原理是一样的,cisco中使用的是cef表,并且在路由器的现在也集成了基于软件的cef,其中cef包含了三张表,包括FIB表、邻接表(硬件转发表)和netflow表项。