芯机智

 找回密码
 立即注册

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 346|回复: 0

[转]一次路由多次交换你理解多少?~

[复制链接]

534

主题

624

帖子

6282

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6282
发表于 2018-8-31 09:48:39 | 显示全部楼层 |阅读模式
一次路由多次交换你理解多少?~

今天偶看到一篇关于三层交换机的工作原理,看到那相解析,我郁闷了!
原话是这样的
“第三层交换的原理是,假设两个使用IP的主机A、B通过第三层交换机进行通信。发送站点A在开始发送时,把自己的IP地址与B站的IP地址比较,判断B站是否与自己在同一子网内。若目的站B与发送站A在同一子网内,则进行二层的转发。若两个站点不在同一子网内,如发送站A要与目的站B通信,发送站A要向“缺省网关”发出ARP请求(地址解析)封包,而“缺省网关”的IP地址其实是三层交换机的三层交换模块。当发送站A对“缺省网关”的IP地址广播出一个ARP请求时,如果三层交换模块在以前的通信过程中已经知道B站的MAC地址,则向发送站A回复B的MAC地址。否则三层交换模块根据路由信息向B站广播一个ARP请求,B站得到此ARP请求后向三层交换模块回复其MAC地址,三层交换模块保存此地址并回复给发送站A,同时将B站的MAC地址发送到二层交换引擎的MAC地址表中。从这以后,A向B发送的数据包便全部交给二层交换处理,信息得以高速交换。由于仅仅在路由过程中才需要三层处理,绝大部分数据都通过二层交换转发,因此第三层交换机的速度很快,接近第二层交换机的速度,同时比相同路由器的价格低很多”。
其中的这句话令我郁闷了半天
“当发送站A对“缺省网关”的IP地址广播出一个ARP请求时,如果三层交换模块在以前的通信过程中已经知道B站的MAC地址,则向发送站A回复B的MAC地址。否则三层交换模块根据路由信息向B站广播一个ARP求”。

分析:既然A和B不在同一个网段,A发送ARP请求网关的MAC地址,怎么三层交换机就返回了B的MAC地址呢?

大家发表一下高见啊!

算了自己找了资料!引用别人的原话,很有道理!
分析上面这段文章,笔者认为这种观点违背了主机与缺省网关通信的基本原理。文章提到“当发送站A对“缺省网关”的IP地址广播出一个ARP请求时,如果三层交换模块在以前的通信过程中已经知道B站的MAC地址,则向发送站A回复B的MAC地址。否则三层交换模块根据路由信息向B站广播一个ARP请求”。实际上,A站向三层交换模块发送网关IP地址的ARP请求时,ARP请求报文并不包含B站IP地址,三层交换模块只会把自己IP地址对应的MAC地址回复给A站,根本不会向发送站A回复B的MAC地址。这是错误之一。
退一步说,即便三层交换模块回复B站的MAC地址,由于B站和A站不在同一子网,A站也不会把B站的目的MAC地址封装在A站要发送的以太网帧中。这是错误之二。
再者,三层交换模块接收A站发送到B站的以太网帧,三层交换模块从以太网帧的IP包中提取B站的IP地址,通过查找路由表,寻找到B站的下一跳,若B站与第三层交换机某一接口在同一网段,第三层交换机向B站IP地址广播ARP请求,从B站的ARP应答中可得知B站的MAC地址;若B站与三层交换机某一接口不在同一网段,中间相隔了好几跳,三层交换模块只会向下一跳IP地址广播ARP请求,下一跳ARP应答的应是下一跳IP地址的MAC地址,三层交换模块无从得知B站的MAC地址。这是错误之三。
要达到“路由一次,处处交换”或“基于目的MAC地址的第二层交换”的目的,必须改变现存主机与缺省网关的通信机制或第三层交换机的路由规则,换句话说,以一种新的主机与缺省网关的通信机制替代现有的通信机制。就像前面描述的3Com公司的快速IP技术一样。实际网络中主机和第三层交换机都工作得很好,无需主机做任何改变,也无需改变原有的网络设施。在第三层交换机替代传统路由器的场合,子网间的流量转发性能却得到了空前的提高。这并不是改变了交换机对三层报文转发机制的结果,即“路由一次,处处交换”或“基于目的MAC地址的第二层交换”的结果,而是第三层交换机基于硬件快速转发三层报文的结果。


本人经过查找资料进行整理,一次路由多次交换原理如下:

三层交换机的结构:ASIC芯片和CPU
ASIC芯片用于完成二层和三层的转发,内部包含用于二层转发的MAC地址表和用于IP转发的三层转发表。
CPU用于转发的控制,主要维护一些软件表项(包括路由表,ARP表),并根据软件表项的转发信息来配置ASIC的硬件三层转发表。
真正决定高速转交换转发的是ASCIC的二三层硬件表项,而ASIC的硬件表来源于CPU维护的软件表项。


假设A和B处于两个不同网段的不同VLAN,中间通过三层交换机的SVI接口进行路由转发。

ApingB数据流分析如下:
主机A检查目标B的IP地址,与自己不在同一个网段,因此需通过网关转发,首先查询ARP缓存,没找到网关的MAC,所以广播ARP请求(目标MAC为全F,源MAC为A的MAC,源IP为A的IP,目标IP为网关IP),请求网关的MAC地址,三层交换机收到后,发现是广播帧,进行解封装,发现目标IP是给自己的,所以返回ARP应答,把自己的MAC告诉A,A收到ARP应答后,更新ARP缓存,再重新封装ICMP(目标MAC为网关,源MAC为A,目标IP为B,源IP为A),交换机收到以后,首先根据报文的源MAC+VID更新MAC表,根据报文的目的MAC+VID进行查MAC表,发现匹配自己的三层接口的MAC表项(说明:三层交换机给分配SVI的IP地址时,会在交换机的MAC表项中添加三层接口的MAC+VID),当报文中的目的MAC与这个三层接口的MAC表项匹配时,就进行三层转发,查找三层表项,因为第一次是空的,所以查找失败,于是将报文交给CPU进行软件处理,CPU根据目标IP进行查找路由,匹配到一个直连网段,于是查找ARP表,第一次还是空的,所以查找失败,则在目标网段进行广播ARP请求B的MAC地址,B收到后给出ARP应答,交换机收到应答,更新MAC表和ARP表,同时重新封装ICMP发送给B(目标MAC为B,源MAC为三层交换接口的MAC,目标IP为B,源IP为A)。同时,交换机的三层表项根据刚刚得到到三层转发信息添加表项(包括IP,MAC,VLAM,出接口),这样后续的报文如果匹配三层表项,就可以直接进行硬件转发了,这样就叫做一次路由多次交换。B收到后给出ICMP应答,就是以上过程的逆过程,所以PING通了。

水平有限,写得不够清楚,请多多包涵!       
在终极的分析中,一切知识都是历史;在抽象的意义下,一切科学都是数学;在理性的基础上,所有的判断都是统计。——C.R. Rao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|芯机智 ( 京ICP备18048803号 )

GMT+8, 2019-10-15 07:34 , Processed in 0.134187 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表