【转】你所了解的三层交换机,是这样工作的

原链接:

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表项。

时间: 2024-10-19 11:01:33

【转】你所了解的三层交换机,是这样工作的的相关文章

为什么说假期是找工作的好机会?

很多人都不知道,在郴州找工作的最大途径是通过人际关系,而在节假日的时候,你才有更多时间与人有沟通交流的机会.所以,肯定很多人不知道假期是个找工作的好机会. 当然,现在这种人际关系网需要更加微妙一些的做法,而不仅仅是给你的朋友打个电话说“嗨,小王,我现在在找新工作呢.你的公司有没有职位空缺啊?”你不会愿意有任何人因为觉得你在聚会上出现就是为了把自己的简历塞到某人的口袋中而躲避你.你需要保持风度,也要对你接触的人真的保持兴趣.但肯定的是,你要利用这些机会来扩大你的人际关系网,并告知大家你正在找工作.

你必须要找到你所爱的东西

你必须要找到你所爱的东西 偶然看到 jobs的这篇演讲,有点感触. This is the text of the Commencement address by Steve Jobs, CEO of Apple Computer and of Pixar Animation Studios, delivered on June 12, 2005. 以下为苹果公司和Pixar公司的CEO乔布斯于2005年6月12日在斯坦福大学发表的毕业演说. I am honored to be with yo

体验了一天企业微信,你的工作以后可能离不开它

你每天看多少次微信?有多少次是为了工作? 微信几乎是今天所有中国人的办公工具,从中小企业到大国企,甚至已经配备了 Skype.Sharepoint 之类办公工具的外企,都将越来越多的日常沟通.公告甚至文件传输放在微信上完成. 而现在的问题是,微信什么都有,而什么时候都得看,你也不知道是工作还是一个无关的推送,这让我们本来就很有限的时间更加零碎了. 最近浮出水面的企业微信,就是一个试图将你工作和生活分开的微信工具.<好奇心日报>拿到内测,我们使用这个工具工作了一天. 来看看未来用微信工作将会是什

二层交换机当三层交换机,使用单臂路由实现二层交换机上的VLAN互通

众多中小企业内部网络结构都很简单,仅仅是用一台交换机将所有员工机以及服务器连接到一起,然后通过光纤访问internet而已.当然为了保证部分主机的安全性以及分割内部广播包提高网络传输速度,采取诸如划分VLAN,分配不同子网的方法来实现.通过划分VLAN可以让在同一台交换机不同端口的客户机不能互相访问,有效的隔离了网络. 通过VLAN划分网络固然可以解决安全和广播风暴的频繁出现,但是对于那些既希望隔离又希望对某些客户机进行互通的公司来说,划分VLAN的同时为不同VLAN建立互相访问的通道也是必要的

Jobs-必须找到你所钟爱的东西

史蒂夫乔布斯6月斯坦佛大学演讲: 必须找到你所钟爱的东西 关于如何将生命中的点点滴滴串联起来,关于爱和损失,关于死亡,以下是乔布斯在2005年6月12日在斯坦佛大学所做的演讲. 我今天很荣幸能和你们一起参加毕业典礼,斯坦福大学是世界上最好的大学之一.我从来没有从大学中毕业.说实话,今天也许是在我的生命中离大学毕业最近的一天了.今天我想向你们讲述我生活中的三个故事.不是什么大不了的事情,只是三个故事而已. 第一个故事是关于如何把生命中的点点滴滴串连起来. 我在里德学院读了六个月之后就退学了,但是在

Linux、Windows网络工程师面试题精选

1.请你修改一下LINUX的视频驱动和声音驱动? 答: redhatlinux中用sndconfig来设置声卡,如果没有某个模块,就需要重新编译内核(编译最新发布的linux 内核),如果还不行,只好用ALSA 音效驱动程式. Redhat-config- xfree86 答: 命令行下etc/X11/XF86config 2.如何修改LINUX的启动速度? 答.运行级别设为3 2.chkconfig从中可以关掉一些不需要的服务,如sendmail 3.如何取消APACHE的目录索引 ? Apa

Ubuntu 14.04配置虚拟主机

虚拟主机常用于在一个单独的IP地址上提供多个域名的网站服务.如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的.在这个教程中,让我告诉你如何设置在Ubuntu 14.04 LTS的Apache网页服务器设置虚拟主机.请注意,这个教程只针对Ubuntu14.04的64位版本. 我不保证它也可以工作在其它更低的Ubuntu版本或者Ubuntu衍生版本(虽然可能过程是类似的). 方案 在这个教程中,我会使用Ubuntu 14.04 64位 LTS,并搭建2个测试网站分别命名为“unixm

《构建之法》心得体会

这本书中列举了大量的例子,使得我们在学习过程中更容易看的懂,学起来会轻松些.阅读<构建之法>后,让我明白了软件构建的过程不仅仅是写出一个程序,还需要根据用户的需求扩展应用程序各种功能,接着还要扩展一个能保证服务质量的软件服务:在软件构建过程中还需要拥有各种文件和数据来描述各个程序文件之间的依赖关系.编译参数.链接参数等等. <构建之法>中的测试.软件工程师的成长.编写代码的规范.团队合作开发软件的重要性.还有开发软件项目的总体流程.IT的发展创新等等,使得整本书的内容丰富多彩,不会

我的软件测试课感想

软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估.执行测试用例后,需要跟踪故障,以确保开发的产品适合需求. 软件测试工作是一个系统而复杂的工程,软件测试的目的就是确保软件的质量.确认软件以正确的方式做了你所期望的事情,所以工作的主要任务是发现软件的错误.有效定义和实现软件成分由底层到高层的组装过程.验证软件是否满足规格书要求和系统定义文档所规定的技术要求.为软件质量模型的建立提供依据.