| 针对网络中存在集成路由和桥接(IRB)的问题,下面将做一个实验,通过实例来说明路由器在开启桥接功能后的数据处理方式和模式分析,并阐述其工作的原理。 今天早上,有位朋友问了我这样一个问题:IRB 集成路由与桥接,在一个路由器内的一个桥接组内的接口可看成是一个交换机的几个接口。而同时这些接口又可以是三层的路由接口。 ------- E0 R1 E1-------- EO E1 同属于bridge 1,当R1接受到一个数据包时,会查看其MAC地址,如果MAC地址不是它自己,则桥接此帧到同一桥接组内,
 如果MAC地址是它自己,则把MAC头去掉。交给BVI1接口处理。
 当EO接受到一个802.1q的帧时,是不是也一样处理呢? 猜测对吗?   ======================很黄很暴力的分割线==========================   我想,这个问题引申出很多网络的基本知识,正好借这个机会可以梳理一下。 这个问题本身想问的,其实是路由器在开启桥接功能后,如何处理数据的方式。   首先我们要澄清几个原理。   首先来看一个局域网交换的简单例子。 对于PC1来说,它具备一下几个要素:IP地址、掩码、网关。 我们假设IP为1.0.0.1,掩码为/24,网关为1.0.0.254(也就是route的地址)。 假设PC2为1.0.0.2,其他要素相同。   现在PC1要发一个前往1.0.0.2的包,PC1经过掩码计算后发现该目标应该和自己处在同一个网内,假设PC1没有任何该网段的MAC缓存。那么它发出一个广播ARP查询,询问谁是1.0.0.2,PC2回应查询并告知PC2的MAC地址,那么PC1将使用这个MAC地址作为目标MAC,并以此发送接下来所有给PC2的数据包。同时将该MAC缓存(也就是学习到了PC2的地址),并且以后在MAC缓存过期的时间内将不在发ARP广播进行查询。   如果PC1要发一个前往2.0.0.1(或者任意不是这个网段的IP)的数据,那么PC1经过掩码计算后发现不在一个网段内,它将不做广播动作,而是直接询问自己设置的网关,也就是1.0.0.254的MAC地址,获得该地址后,将前往2.0.0.1的数据包统统用这个MAC作为目标MAC,将这些不知道目标在哪里的数据扔给网关,也就是路由器处理去。 这个例子很简单,想必大家都了解了。   ===================很傻很天真的分割线======================   好,接下来我们讨论路由器开启桥接的情况。   首先我们不谈是普通桥接还是IRB,因为这两种方式区别是处理VLAN的方式不同,这个我们后面再讨论。   我们现在面对的是路由器开启桥接以后,如何处理二层和三层的转发的问题。这也是这位朋友的第一个描述。   我们先来看图。图中分为上中下三种状态。     最上的小图讲述的是,一个路由器有三个外联线路,分别为1、2、3个接口。我们在1和2接口上做桥接(暂且不管是哪种桥接类型)。 中间的小图讲述的是,做完桥接以后,1、2口之间产生了联系,可以进行二层转发,也就形成了一个类似二层交换机之类的东西。 最下的小图讲述的是,桥接组产生了一个Bridge Visual Interface1(BVI1),这个东西可以理解为类似一个VLAN里的VLAN IP,也可以理解为我们前面讲过的局域网里的三层网关地址。   上中下三个图联系起来看,我们就可以看出,启动了桥接组的路由器,将在桥接组上产生一个逻辑交换机,路由器将同时维护三层MAC表和这个交换机内的MAC地址表。   这样,就回到我们前面讲述过的问题了。也就是比方说1口进来的数据,路由器将如何处理,在某种角度看,和路由器本身没有太大的关系,而是和1口那边终端PC想干什么有关系。1口的PC想找的是网段内的主机(比如2口),那么路由器将进行二层转发,从2口送出去;而1口的PC如果要发往一个网段外的主机(比如3口),那么数据将通过BVI1(也就是该PC的网关)进入三层的世界,路由器进行路由,至3口出去。   同样的,如果路由器有好多接口,并且开放了诺干个不同的桥接组,也可以照样看成是路由器上产生了诺干台二层交换机罢了。至于这些交换机之间的联系,是通过BVI实现的。 因此这位朋友的理解是基本正确的,只是有一点描述上的失误,那就是路由器在遇到桥接组里的目的数据时,路由器是由于知晓这些桥接组的所有MAC,是根据准确的MAC转发的,路由器可不会干"不知道是什么才扔给桥接二层转发"这样的事情,任何网络实现都会很谨慎的处理这种类似"比特桶"的问题,因为这样会引起不可预知的后果,换个角度思考这个的话,可以问这样这个问题:假设路由器用这样不负责任的方式处理数据的话,那么当一个路由器上有很多桥接组的时候,非自身MAC的数据都将扔给这些桥接组处理?这将引起多大的无用负载和线路消耗啊。   =======================很好很强大的分割线========================   了解完这些,我们可以继续看桥接和VLAN的问题了。   这里由于网上有现成的资料,我引用了来自[url]http://blog.chinaunix.net/u1/55719/showart.php?id=438510[/url]的《路由器IRB特性介绍及配置实例》一文。   
 
    
        
            | 路由器IRB特性介绍及配置实例   
 |  
            |   |  
            |   |  
            | 
            
                
                    
                        | 本文描述了路由器上VLAN的扩展应用。这种扩展应用体现在路由器运行IP路由、IP桥接及IP桥接与综合路由和桥接(IRB)协同作用的时候。同时本文接供了一个在路由器上配置IRB特性的例子。     背景资料     为了使VLAN跨越路由器,路由器必须有能力把帧从一个接口转发到另一个接口,同时又要维持VLAN头部信息。如果路由器配置成三层(网络层)协议路由,它就会在帧到达的接口上终结VLAN及MAC层。如果路由器桥接网络层协议,MAC层头部信息就能保留下来。但是,传统的桥接仍然会终结VLAN的头部信息。利用Cisco IOS 11.2或更高版本的IRB特性,路由器可以配置成在相同的接口上路由及桥接网络协议。这样,当帧从一个接口穿越到另一个接口时,VLAN的头部信息仍可保留。       IRB的路由与桥接概念     上图中:两台交换机的vlan id是一样的,但它们实际上不是同一个vlan.   本图也描述了从PCA穿越链路到达PCB的数据帧的三层帧头的流程。   当帧流过交换机时,VLAN头被加上去了因为连接的是一个trunk链路。可能有好几个vlan穿过这个trunk进行通信。     路由器终结VLAN层及MAC层。它检查目标IP地址然后正确地转发这个帧。在这个例子中,IP帧将被从与PCB相连的端口转发出去。这也是一个VLAN trunk所以同样也会加上一个VLAN头。     虽然连接交换机2到路由器的VLAN号与连接交换机1到路由器的VLAN号是一样的,它实际上不是相同的VLAN。当帧到达路由器时原始VLAN头就被除去了。当帧离开路由器时,一个新头可能被加上去。这个新头可能包含一个与帧到达路由器时剥离掉的VLAN头一样的VLAN号。这一点被如下实事证明:当一个IP帧通过路由器时是没有附加VLAN头的,它是基于目标地址转发而不是VLAN号。   因为这两个VLAN trunk分别位路由器不同的两边,所以它们必须属于不同的IP网络段。     为了让这两个PC拥有相同的网段,路由器必须在它的接口上桥接IP。然而,让两个VLAN中的设备拥有相同的网段并不意谓着它们属于相同的VLAN。   下图显示VLAN拓扑:       通过在路由器上一些或所有连接 VLAN 的接口上桥接IP,避免了终端设备的IP地址的重新编址。但这么一来就失去了在网络层上的基于路由器控制广播流量的所有好处。图三显示当路由器配置成桥接IP后所产生的变化。图四显示当路由器配置成用IRP桥接IP后所发生的变化。   图三显示路由器现在是 IP桥接的。两台PC处于相同的网段。   注意:路由器(桥)现在转发 MAC层头穿过出口接口。路由器仍然终结VLAN头,同时在发送帧到PCB之前加上一个新头。     图四显示 IRB配置后发生了什么。VLAN现在跨越了路由器,并且当帧穿越路由器时VLAN头被保留下来。     IRB 配置实例   这是一个 IRB的配置实例。这个配置允许在两个以太口之间桥接IP,路由IP则使用一个桥接虚拟接口(BVI)。在下面的网络图中,当PCA试图连络PCB时,路由器R1检查到目标IP地址(PCB)是在同一网段,于是数据包被路由器R1从E0桥接到E1,而数据包是由BVI进行路由的。这样,IP协议在路由器既桥接又路由了。         
                            
                                
                                    | Current configuration: ! version 12.0 service timestamps debug uptime service timestamps log uptime no service password-encryption ! hostname R1 ! ! ip subnet-zero no ip domain-lookup bridge irb   !-- This command enables the IRB feature on this router.   ! ! ! interface Ethernet0 no ip address no ip directed-broadcast bridge-group 1   !-- The interface E0 is in bridge-group 1.   ! Interface Ethernet1 no ip address no ip directed-broadcast bridge-group 1   !-- The interface E1 is in bridge-group 1.   ! Interface Serial0 ip address 10.10.20.1 255.255.255.0  http://www.luyouqiwang.com/14278/
 no ip directed-broadcast no ip mroute-cache no fair-queue ! interface Serial1 no ip address no ip directed-broadcast shutdown ! interface BVI1 ip address 10.10.10.1 255.255.255.0   !-- An ip address is assigned to the logical BVI for routing     !-- IP between bridged interfaces and routed interfaces.   no ip directed-broadcast ! ip classless ip route 10.10.30.0 255.255.255.0 10.10.20.2 ! bridge 1 protocol ieee   !-- This command enables the bridging on this router.   bridge 1 route ip   !-- This command enable bridging as well routing for IP protocol.   ! line con 0 transport input none line aux 0 line vty 0 4 ! end |  show Command Outputs show interfaces [interface] irb This command displays the protocols that can be routed or bridged for the specified interface, as follows: R1#show interface e0 irb   Ethernet0   Routed protocols on Ethernet0: ip   Bridged protocols on Ethernet0: ip ipx   !-- IP protocol is routed as well as bridged.     Software MAC address filter on Ethernet0 Hash Len Address Matches Act Type 0x00: 0 ffff.ffff.ffff 0 RCV Physical broadcast 0x2A: 0 0900.2b01.0001 0 RCV DEC spanning tree 0x9E: 0 0000.0c3a.5092 0 RCV Interface MAC address 0x9E: 1 0000.0c3a.5092 0 RCV Bridge-group Virtual Interface 0xC0: 0 0100.0ccc.cccc 157 RCV CDP 0xC2: 0 0180.c200.0000 0 RCV IEEE spanning tree 0xC2: 1 0180.c200.0000 0 RCV IBM spanning tree R1# |  |  至此,这个集成桥接路由的原理因为基本上明确了。文中有什么错误或者引申出来想法和观点,欢迎大家讨论~~~~   ( 作者:水煮豆豆_网络爬爬  ) |