PHP,倒数第二跳弹出协议——路由器该怎么知道自己是倒数第二跳呢?
原理很简单,就是最后一跳路由器,向自己的上游,也就是倒数第二跳路由器发送一个特殊的标签3。倒数第二跳路由器收到该标签3,即认为自己是倒数第二跳。
记住,MPLS的标签值,16以下是系统保留的,你无法使用。
另外,还有一个非常重要的问题——私有地址冲突。这个问题是交给BGP来处理的。
解决私有地址冲突,还有这几个难题:
1.本地路由冲突问题,即:在同一台PE上如何区分不同×××的相同路由。
2.路由在网络中的传播问题,两条相同的路由,都在网络中传播,对于接收者如何分辨彼此?
3.报文的转发问题,即使成功的解决了路由表的冲突,但是当PE接收到一个IP报文时,他又如何能够知道该发给那个×××?因为IP报文头中唯一可用的信息就是目的地址。而很多×××中都可能存在这个地址。
总的来说,解决方案就是:
PE端本地冲突问题,使用VRF解决。
PE端报文转发问题,要使用VRF和全局路由表的配合来解决。
而路由在网络中的传播问题,使用BGP解决。
下面介绍VRF:
VRF——×××路由转发实例(××× Routing & Forwarding Instance)
每一个VRF,对应一个虚拟的专用PE。该虚拟路由器包括如下元素:
一张独立的路由表,当然也包括了独立的地址空间。
一组归属于这个VRF的接口的集合。
一组只用于本VRF的路由协议。
对于每个PE,可以维护一个或多个VRF,同时维护一个公网的路由表(也叫全局路由表),多个VRF实例相互分离独立。
其实实现VRF并不困难,关键在于如何在PE上使用特定的策略规则来协调各VRF和全局路由表之间的关系。
解决方法是使用RT(Route target)
其实,RT就是当使用专用PE时使用BGP的团体(community)属性,在P端区分不同的×××实例,新瓶装旧酒而已!
RT的本质是每个VRF表达自己的路由取舍及喜好的方式 ,分为两部分:
export target,表示发出路由的属性。
import target,表示愿意接收什么路由。
马上熄灯啦。待续待续。。