session 4 CEF回顾
一、IOS ip报文交换机制:
1、进程交换process switching
2、快速交换fast switching
3、思科快速交换ip cef
mpls需要开启cef的原因是mpls需要根据fib转发表来对收到的数据插入标签,但是cef又是cisco私有的技术,而mpls是公有的技术,所以其他厂商的设备要支持mpls只需要有能够将标签插入数据包能力就可以了,至于使用说明表项来查看数据包的路由每个厂商应该都不同。
二、CEF组件
1、转发信息库FIB
2、邻接表adj-table
三、CEF的负载均衡:
1、基于目标地址的(per-destination):默认的负载方式,把源、目标ip地址做hash计算,在不同的链路上转发流量。
2、基于包的(per-packet):轮循,流量平分在每一条冗余链路,但会使一个flow流中的数据包到达对端后重新排序,在语音流量中会造成数据包重新排序的时候在成延迟不一,产生抖动。
show ip cef x.x.x.x internal 查看ip cef的负载路径,show ip route x.x.x.x 中的“traffic share count is 1”表示流量分布的是1:1的负载。
show ip cef exact-route 源ip 目标ip 可以看到这条路径走的哪一个路径
session 5 MPLS LDP协议
标签信息库LFIB是基于FIB的,因为在LSR收到普通数据包:先要查看FIB才能知道目标网络对应的下一跳、L2层封装、arp等信息,然后在这个数据包中插入标签,将对应的标签和这个目的路径进行绑定,从而才能形成LFIB信息转发库,形成LFIB后,标签如何分配、通知其他LSR和分发这些工作就需要一种协议来做,从而有了LDP标签分发协议(公有,cisco私有的是TDP)。
一、标签分发协议类型:
1、LDP/TDP:针对IGP路由
2、MP-BGP:针对BGP路由
3、RSVP:针对MPLS TE流量工程
二、LDP的承载协议
1、UDP(646):组播 LDP hello包,视图发现LDP邻居,为了维持LDP会话关系。第一个hello包是upd发往mpls的组播地址224.0.0.2的,用于看看有没有其他LSR在组里面,如果得到回应则开始建立邻居会话,在建立邻居的过程中会协商一系列的参数,比如标签的分发方式、保持的时间等,如果协商不成功则在一个规定的时间内双方会再次尝试协商(退避算法),如果超过了最大协商时间则ldp邻居关系建立失败不再尝试建立邻居关系了。查看尝试建立邻居的时间范围的命令是 show mpls ldp parameters,修改命令为mpls ldp backoff 30 120(在120s内每隔30s尝试协商一次,超过120s协商还未成功则放弃协商不能成为ldp邻居)
2、TCP(646):建立LDP会话
upd用于发现ldp邻居,而tcp用于发现后的ldp邻居之间session的建立。
show mpls discovery detail
mpls ldp discovery hello holdtime 15 修改ldp的hlodtime为15秒,hello包的时间自动为5秒(hello包的时间是holdtime的1/3)
mpls ldp router-id interface 0/0 修改mpld的R-ID为f0/0接口的ip,不会立即成效,需要清除一次ldp邻居关系,或者在后面加force参数让命令立即生效。这里注意:该接口与邻居必须有路由可达的,不然邻居关系会down掉。比如一个LSR的回环口的网络在另一个LSR上没有路由,那么将本LSR的R-ID改为回环口的ip的时候会因为路由不可达而使邻居down掉(因为ldp会话的建立是依靠tcp646端口的),只有将这个R-ID在IGP路由中宣告出去,那么邻居才能正常建立。
show mpls ldp discovery detail 中显示的“Transport ip add”是指的是邻居之间交换hello信息使用的接口的ip地址。可以用(config-if)#mpls ldp discovery transport-address interface来修改。
三、标签的宣告:
通过LDP邻居绑定地址(bound address)确定出该ip前缀的出站标签,并在LDP ip里的RID和下一跳LSR的接口地址建立映射(绑定)信息。标签的宣告不存在水平分和的行为,使用隐性的空标签来防止环路。
四、标签的控制和过滤
1、基于出站选择性的宣告
在R的出方向过滤FEC标签信息
R2(config)#access-list 1 permit host 3.3.3.3 允许出站的FEC:3.3.3.3/32标签信息
R2(config)#access-list 1 permit host 192.168.1.2 允许出站方向分发给哪个邻居(LDP-ID)
R2(config)#no mpls ldp advertise-labels 关闭标签分发功能
R2(config)#mpls ldp advertise-labels for 1 to 2 调用标签出站过滤,允许3.3.3.3/32的FEC标签信息分发给邻居192.168.1.2
2、基于进站对标签绑定信息进行过滤
在R的入方向过滤FEC标签信息
R3(config)#access-list 1 permit host 1.1.1.1 只允许进站FEC1:1.1.1.1/32标签信息
R3(config)#mpls ldp neighbor 192.168.1.2 labels accept 1 调用标签进站过滤,只允许ACL1中匹配的
五、LDP与IGP同步
1、技术的价值:解决由LDP收敛速度慢于IGP的收敛(收敛时间不同步),导致标签报文在传输过程中,标签信息被pop弹出还原成普通的ip报文转发,对于类似MPLS-VPN的应用,P路由器(ISP边界路由器)就会丢弃普通ip报文(因为P路由器在MPLS-VPN的交换中只看标签信息库而不查看路由表来转发),产生路由黑洞。
2、解决方案:LDP与IGP收敛同步
目前只有OSPF一种IGP支持这种同步,原理是利用延迟。
方法:OSPF把链路开销设置为最大值65536,这时候OSPF就不会自动建立IGP邻接关系了(已经建立好的不会删除),直到LDP会话建立之后再以正常的开销对链路进行宣告,再建立OSPF邻接关系。命令如下:
R1(config)#router ospf 1
R1(config-router)#mpls ldp sync 分别在R1、R2、R3的ospf中开启与mpls的同步即可
R2(config)#router ospf 1
R2(config-router)#mpls ldp sync
R3(config)#router ospf 1
R3(config-router)#mpls ldp sync但是当LDP不能建立邻居关系时(单链路时候因为ospf开启同步把链路开销设置为最大值65535,所以这条链路基本就不在写入路由了变为不可达了,虽然是直连的也不行)OSPF也就不会建立邻居关系,所以为了避免LDP邻居无法建立的情况下连累OSPF也无法建立邻居关系。可以通过以下几种解决方法:
1、可以设置一个计时器计时(holdtime计时器),超过这个时间限制后不管LDP能否建立邻居OSPF都会正常的自动建立邻居关系。
R1#show ip ospf mpls ldp interface f1/0
FastEthernet1/0
Process ID 1, Area 0
LDP is not configured through LDP autoconfig
LDP-IGP Synchronization : Required Required表示开启IGP同步
Holddown timer is not configured 设置这个holddown时间
Interface is up
2、在无法建立邻居的路由器接口下no mpls ip,然后等ospf邻居建立后在mpls ip开启mpls,或者先关闭同步,等ospf邻居建立在开启同步。同时要重置一下ospf进程
R2#clear ip ospf process 重置OSPF的进程信息,包括邻接关系、计时器等
Reset ALL OSPF processes? [no]: y
3、无需关闭ospf同步或者mpls,只需要在邻居之中的一个R上面配置一个回环接口地址,并且配置为这台路由器通信的LDP-ID,并且将这个还回地址所在的网络在ospf中宣告出去,就可以了。因为这个回环地址是一条虚拟的路由不会被同步命令自动设置成最大开销65535,所以在ospf中宣告后就可以被ospf加入到路由表中,并且被设置成LDP-ID也保证了LDP可以正常通信。
R2(config)#interface loopback 0
R2(config-if)#ip address 2.2.2.2 255.255.255.255R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#mpls ldp router-id loopback 0 force 配置环回地址为LDP-ID
R2(config-router)#network 2.2.2.0 0.0.0.255 area 0 宣告环回地址R2(config-router)#mpls ldp sync 开启同步