原帖地址:http://support.huawei.com/huaweiconnect/enterprise/thread-294983.html
1 BGP/MPLS IP ×××横空出世
由于当时MPLS技术基于标签转发大大提升了路由器的转发效率,在很长的一段时间MPLS一直独步武林,无人匹敌。最重要的是,MPLS可以承载任意协议类型的报文,使得其与众多帮派相处融洽。不过好景不长,由于网络发展,路由查找速度已经不是阻碍网络发展的瓶颈。这使得MPLS在提高转发速度方面不再具备明显的优势。MPLS掌门意识到本帮的辉煌时代即将过去,遂隐居江湖,以待时机图谋新的发展。
此时江湖中另一帮派——专门负责帮人在CE站点之间运输报文的镖局以其独创的×××阵法蜚声江湖,但目前他们也通样遇到了技术老化、青黄不接的问题。
×××阵法中有三类角色:
CE(Customer Edge):用户网络边缘设备,有接口直接与服务提供商网络相连。CE可以是路由器或交换机,也可以是一台主机。
PE(Provider Edge):是服务提供商网络的边缘设备,与CE直接相连,主要负责×××业务的接入。
P(Provider):服务提供商网络中的骨干设备,不与CE直接相连。
×××镖局有两大看门绝技,其一是Overlay ×××,在CE与CE之间建立静态隧道或者PE与PE之间建立静态隧道。他们都可以传递用户之间的路由信息以便进行报文转发,但是存在致命的问题:前者需要客户自己维护×××,通常客户不愿意,也没有这个能力;后者无法有效的解决地址冲突问题,不同×××的用户地址不能相同。
其二是Peer-to-Peer ×××,不使用隧道技术。通过在PE与CE之间交换私网路由,然后由PE将这些私网路由通过公网自动的传播到其他的PE,再由PE传播到对端CE。这种×××由于私网路由会泄露到公网上而安全性很差,同时不同×××使用相同地址将会引起冲突。如果要确保安全性,则必须使用隧道技术,虽然本镖局并不缺少隧道,但如GRE、IPSec都已被证实由于静态配置导致扩展麻烦而无法委以重任。而不同×××使用相同地址的地址冲突问题根本就不是本镖局的势力范围,更是无法解决。
至此×××阵法已经黔驴技穷,好在总镖头是个留洋多年的“海龟”,思想很开放,觉得这个问题的解决需要整个武林一起出力。于是贴出了一张“招贤榜”——
为了尊重报文的隐私,提高我华夏的***水准,大力推动网络私有化的进程,特向各位武林高手招贤纳士。如有能解决如下问题的好汉,无论出身、派别,皆可得千金重赏,并与本镖局结为友好邻邦,共举×××大业。
可以提供一种动态建立的隧道技术。
可以解决不同×××***享相同地址空间的问题。
××× 镖局总镖头
话说招贤榜一贴出来,立刻轰动了整个武林。一日,众多武林中人正围着一张榜议论纷纷,忽然人群中一个人站出来摘了第一张招贤榜,此人便是隐居的MPLS掌门。“可以提供一种动态建立的隧道技术”,MPLS中的LSP正是一种天然的隧道,而且这种隧道的建立是基于LDP协议,又恰恰是一种动态的标签生成协议。
第二个问题,大家普遍推选路由门派资深长老BGP承担。BGP长老苦思冥想之后不负重望,开创MP-BGP学派,专门解决×××镖局的第二项难题。
MPLS掌门、BGP长老一起来到×××镖局,与总镖头商议,成立新镖局BGP/MPLS IP ×××,详细规定了新镖局的各项规章制度,并昭示天下,一时在江湖中传为佳话。
2 BGP/MPLS IP ×××初识
新镖局BGP/MPLS IP ×××成立之后,MPLS掌门精通外层公网标签传递精妙, BGP长老以其MP-BGP绝技专修内层私网标签传递之术。 当镖车到达MPLS骨干网帮派边界I检查站(Ingress PE节点)时,MPLS掌门凭借个人魅力,上下打点,领得通关令牌(外层标签)。每次经过其他检查站(P设备)时,换取下一张的令牌,直到抵达MPLS骨干网帮派边界E检查站(Egress PE出节点)。这时换BGP长老出马,由于早先已与两端边界检查站商量好,根据MP-BGP的令牌(内层标签)来进入对应的帮派领地,这样即可顺利完成护镖。
3 BGP/MPLS IP ×××中的两层标签
MPLS修炼外层标签的套路前面已经介绍过了。MP-BGP的内层标签修炼之法是本节的重点。
下面我们来介绍MP-BGP的法宝——改良版Update消息和千里传音功。
3.1 改良版Update消息
BGP长老当年最得意之作就是使用Update消息来告知路由变化情况,当然MP-BGP也继承了这门特技,改良后的Update报文被用来发布私网路由,并同时携带Export ××× Target属性及MPLS标签信息。
添加私网路由和删除私网路由都会触发Update消息,我们就来看看改良后的Update报文是什么样子的。
添加私网路由的Update消息结构:
删除私网路由的Update消息结构:
其中Path Attributes字段包含需要被发布的×××-IPv4路由信息。相较原BGP Update报文,MP-BGP对其报文内容进行了改良:
1、Extended_Communities属性携带Export ××× Target(简称Route Target)信息,用来控制私网路由信息的发布。
2、MP_Reach_NLRI和MP_Unreach_NLRI字段携带标签、RD和×××-IPv4路由信息。
RD(Route Distinguisher)的作用什么呢?大家回顾一下,BGP长老开创MP-BGP时就承诺要解决×××中不同的子网可以使用相同地址空间的问题,其解决办法就在RD身上。RD实际上代表一个PE设备上的各个×××的编号,它随私网路由信息一起在PE之间传递。由于私网路由加上其所属的RD可以唯一确定一个私网地址,这样就轻松解决了一个PE上多个×××内私网地址空间重叠的难题。
3.2 千里传音功
理解了Update报文结构就不难理解MP-BGP的独家绝活——千里传音功(生成标签和传递标签信息的协议交互过程)。
3.2.1 生成标签
在BGP/MPLS IP ×××中,PE通过MP-BGP发布私网路由前,需要为私网路由分配MPLS标签(私网标签)。当数据包在骨干网传输时,携带私网标签。
PE上分配私网标签的方法有如下两种:
l 基于路由的MPLS标签分配:为私网路由表的每一条路由分配一个标签。这种方式的缺点是:当路由数量比较多时,设备入标签映射表ILM需要维护的表项也会增多,对设备性能要求较高。
l 基于×××实例的MPLS标签分配:为整个×××实例分配一个标签,该×××实例里的所有路由都共享一个标签。使用这种分配方法的好处是节省标签。
3.2.2 传递标签信息
私网标签由数据传递方向上的下游PE分配给上游PE。下游PE会告诉上游PE:如果你向我的私网发送数据,你就为报文加上标签X。下游PE如何告诉上游PE呢?这个就需要用到MP-BGP的Update报文了。
为了形象的进行介绍,举个例子(PE-CE之间使用EBGP,PE-PE之间使用IGBP,公网隧道为LSP),描述一下将CE2的一条路由发送到CE1的过程:
1. 在CE2的BGP IPv4单播地址族下引入IGP路由。
CE2将该路由随EBGP的Update消息一起发布给Egress PE。Egress PE从连接CE2的接口收到Update消息,把该路由转化为××× IPv4路由,加入对应的×××实例路由表。
2. Egress PE为该路由分配MPLS标签,并将标签和××× IPv4路由信息加入MP-IBGP的Update消息中的NLRI字段中,Export ××× Target属性加入MP-BGP Update消息的扩展团体属性字段中,将Update消息发送给Ingress PE。
3. Ingress PE根据本地×××的Import-RT属性将路由信息引入并加入该×××实例路由表,同时获取到标签信息。
4. Ingress PE把该路由通过BGP Update消息发布给CE1,此时路由是普通IPv4路由。
5. CE1收到该路由后,把该路由加入BGP路由表。通过在IGP中引入BGP路由的方法可使CE1把该路由加入IGP路由表。
4 与配置结合,来看双层标签的×××
某公司总部和分支处于不同地理区域,希望通过部署BGP/MPLS IP ×××,实现总部和分支机构的安全互通。PE1、P和PE2是MPLS骨干网设备,CE设备是企业网关。
配置项 | PE1 | PE2 |
配置×××实例 | ip ***-instance ***a ipv4-family route-distinguisher 100:1 ***-target 111:1 export-extcommunity ***-target 111:1 import-extcommunity | ip ***-instance ***a ipv4-family route-distinguisher 200:1 ***-target 111:1 export-extcommunity ***-target 111:1 import-extcommunity |
配置MPLS基本功能 | mpls lsr-id 1.1.1.9 mpls mpls ldp interface Ethernet1/0/0 ip address 172.16.1.1 255.255.255.0 mpls mpls ldp interface LoopBack1 ip address 1.1.1.9 255.255.255.255 | mpls lsr-id 3.3.3.9 mpls mpls ldp interface Ethernet1/0/0 ip address 172.16.2.2 255.255.255.0 mpls mpls ldp interface LoopBack1 ip address 3.3.3.9 255.255.255.255 |
骨干网路由 | ospf 1 area 0.0.0.0 network 1.1.1.9 0.0.0.0 network 172.16.1.0 0.0.0.255 | ospf 1 area 0.0.0.0 network 3.3.3.9 0.0.0.0 network 172.16.2.0 0.0.0.255 |
配置MP-BGP | bgp 100 peer 3.3.3.9 as-number 100 peer 3.3.3.9 connect-interface LoopBack1 # ipv4-family ***v4 //使能对等体交换×××v4路由信息的能力 policy ***-target peer 3.3.3.9 enable # ipv4-family ***-instance ***a //配置PE与CE之间建立EBGP对等体关系,引入私网路由 import-route direct peer 10.1.1.1 as-number 65410 | bgp 100 peer 1.1.1.9 as-number 100 peer 1.1.1.9 connect-interface LoopBack1 # ipv4-family ***v4 policy ***-target peer 1.1.1.9 enable # ipv4-family ***-instance ***a import-route direct peer 10.2.1.1 as-number 65420 |
接口绑定××× | interface GigabitEthernet0/0/1 ip binding ***-instance ***a ip address 10.1.1.2 255.255.255.0 | interface GigabitEthernet0/0/1 ip binding ***-instance ***a ip address 10.2.1.2 255.255.255.0 |
4.1 检查外层标签分配结果和内层标签传递结果
标签分配过程:
1、 LDP邻居关系建立之后,下游设备会自动为上游设备分配外层标签,建立LSP。
2、当配置×××实例之后,PE会为该实例的所有私网路由分配一个统一私网标签。
3、当×××实例通过EBGP接收到私网路由信息变更时,就会触发MP-BGP Update消息,并通过此消息将私网路由对应的标签、RT、RD等信息专递给对端PE。
PE1发给PE2的MP-BGP Update报文:
PE2发给PE1的Update报文:
从上面的Update报文可以看到,PE2通过MP-BGP的Update消息携带了私网标签1026给PE1,PE1则分配了私网标签1024给PE2。也就是说,从PE1发送到PE2的报文,内层私网标签值应该是PE2分配的1026。
再看一下PE1、P和PE2上的外层标签和内层标签情况。
PE1:
P:
PE2:
BGP LSP中显示的是由MP-BGP分配的内层标签,LDP LSP中显示的是由LDP分配的外层标签。
我们可以通过ping测试,看一下标签的分配结果。在CE1上Ping一下CE2,然后在PE1出口处抓包看一下ICMP报文:
可以看到发送出去的报文被打上了两层标签,内层标签是1026。
那么,从CE1发送出去的报文进入PE1开始,报文的标签封装、转发的详细情况是什么样的呢?我们怎么样看呢?下面这段演示,让你深刻地记住BGP/MPLS IP ×××的报文传递法则。
4.2 PE1设备查标签转发表的过程
由于报文从***a接收,需要发送给PE2,而之前从PE2发过来的MP-BGP Update消息告诉我们,发送给PE2的报文需要打上内层私网标签1026。 PE1再根据报文目的地址查找私网路由表,再查找FIB表中的tunnel ID,最后根据tunnel ID找到MPLS NHLFE表进行外层标签的封装,打上标签1026。至此,从PE1发送出去的报文就是外层标签1026,内层标签1026。
4.3 P设备查标签转发表的过程
P上根据MPLS ILM表进行标签交换处理。可以看到外层标签经过处理之后,从P出去时根据MPLS NHLFE表发现下游设备分配了标签值3,也就是倒数第二跳弹出。弹出之后的报文将携带一个私网标签到PE2设备。
4.4 PE2设备查标签转发表的过程
PE2接收到携带内层标签的MPLS报文,继续查找MPLS ILM表,发现标签值1026对应的是BGP类型的标签,查找到该标签对应的×××实例名称位***a,加上标签动作为POP,表示后续处理按照IP报文流程进行封装,查找到***a路由表中的下一跳之后,报文将会发送出去。
以上解释的是报文从CE1发送到CE2的流程,反之亦然。
好了,至此BGP/MPLS IP ×××中的两层标签全部介绍完了,我们稍微总结一下:
外层标签和内层标签的分配形式都是从数据流传递的下游分配到上游的。
外层标签用于在MPLS骨干网中传递私网数据报文。
内层标签用于区分数据报文属于哪个×××。
入标签是我分给上游设备的,出标签是下游设备分给我的;我分配的标签是给上游设备用的,由上游设备添加到报文中