想了很久才決定要寫(xiě)這篇文章。因為我感覺(jué)有好多可以說(shuō),并且要寫(xiě)出博文有點(diǎn)困難。還是盡力吧,不寫(xiě)出來(lái)可能也很快就忘了。
按照我的習慣是先上拓撲:
這就是我的拓撲。
實(shí)驗參數如下:
IGP用OSPF,實(shí)現全網(wǎng)互通。
全部路由器都雇用CEF。
R1用LOOPBACK 1 =11.1.1.1 模擬外網(wǎng),R5用loopback 1=55.5.5.5 模擬外網(wǎng)。
配置OSPF不作說(shuō)明。
先介紹配置MPLS 。
R1 和R5建立IGBP關(guān)系。
在配置過(guò)程中我會(huì )故意放入一些不優(yōu)的配置,以便分析。
R1#ip cef
mpls label range 100 199 這一條命令在實(shí)際應用中不要啟用。在這里只是為了試驗一下這條命令而已。MPLS的LDP協(xié)議是自動(dòng)為我們分配標簽的,這條命令的作用在于指定標簽的范圍。
mpls ldp router-id Loopback1 (記住Loopback1 沒(méi)有NETWORK進(jìn)BGP和OSPF的,是為了模擬來(lái)自CE的路由)
no mpls ip propagate-ttl forwarded 這條命令也很重要。 下面這一段講解這一條命令的作用:、
no mpls ip propagate-ttl forwarded 這條命令的意思是,不看IP包的TTL值,因為在PE上,MPLS會(huì )copy IP包中的TTL值填充MPLS包頭中的TTL字段。 例如當一個(gè)數據包進(jìn)入MPLS網(wǎng)絡(luò )時(shí),也就是剛進(jìn)入PE。 假設IP包中的TTL值=6,這時(shí)PE先減去1 ,TTL=6-1=5。然后將TTL填充進(jìn)MPLS包頭的TTL,所以這時(shí)MPLS包頭的TTL值就是5。 之后在MPLS網(wǎng)絡(luò )中傳輸時(shí),因為在MPLS網(wǎng)絡(luò )中是不看IP包頭的,所以IP包頭的TTL值不會(huì )減少,但是MPLS的TTL值每經(jīng)過(guò)一個(gè)路由器就減少1,(當減少為0時(shí)丟棄。其實(shí)當路由器收到一個(gè)TTL=1的包時(shí)就要丟棄了。)最后,在連接目的網(wǎng)絡(luò )的PE上面,MPLS包頭的TTL值先減去1 ,之后再copy回去覆蓋了IP包頭的TTL字段。這樣子的話(huà),在外部網(wǎng)絡(luò )的用戶(hù)就可以tracert MPLS網(wǎng)絡(luò ),得知MPLS網(wǎng)絡(luò )的結構。 所以我們需要這條no mpls ip propagate-ttl forwarded 命令,不要從IP包中復制TTL值,直接填充MPLS的TTL=255. Traceroute就是利用TTL的技術(shù)來(lái)實(shí)現的,第一次發(fā)包TTL是1,包到達下一跳后,TTL變成0,包被丟棄,并響應一個(gè)TTL超時(shí)。然后,依次遞增TTL,依次響應TTL超時(shí),就能發(fā)現路徑了。如果ISP網(wǎng)絡(luò )沒(méi)有禁用TTL,那么客戶(hù)就可以利用Traceroute探查到ISP的內部路由了,啟用如下命令,防止該事情發(fā)生。 forwarded是指NO掉CE過(guò)來(lái)的TTL值,local是指自己的也要NO掉,一般在邊界路由器打上forwarded就好,保證自己還是可以traceroute的,默認不打,兩個(gè)全部NO掉。 MPLS的每個(gè)技術(shù)解釋起來(lái)都有一大堆話(huà),或許是我太啰嗦了==
#router bgp 100
no synchronization
bgp router-id 1.1.1.1
bgp log-neighbor-changes
network 11.1.1.0 mask 255.255.255.0
neighbor 45.1.1.5 remote-as 100
no auto-summary
!
!
interface Serial0/0
ip address 12.1.1.1 255.255.255.0
mpls ldp discovery transport-address interface
這條命令的作用是用接口的地址與鄰居建立LDP關(guān)系。使用直連接口地址可保證下 一跳可達。建立之后在R2上:R2#show mpls ldp discovery Local LDP Identifier: 2.2.2.2:0 Discovery Sources: Interfaces: Serial0/0 (ldp): xmit/recv LDP Id: 11.1.1.1:0; IP addr: 12.1.1.1; no host route FastEthernet1/0 (ldp): xmit/recv LDP Id: 3.3.3.3:0; no host route顯示no host route 是正常的。
mpls ip
serial restart-delay 0
!
R2:
ip cef
no ip domain lookup
mpls label range 200 299
mpls ldp router-id Loopback0
R3:
ip cef
no ip domain lookup
mpls label range 300 399
mpls ldp router-id Loopback0
R4:
ip cef
no ip domain lookup
mpls label range 400 499
mpls ldp router-id Loopback0
R5:
ip cef
mpls label range 500 599
no mpls ip propagate-ttl forwarded
interface Loopback0
ip address 5.5.5.5 255.255.255.0
interface Loopback1
ip address 55.5.5.5 255.255.255.0
ip ospf network point-to-point
!
interface Serial0/0
ip address 45.1.1.5 255.255.255.0
mpls ldp discovery transport-address interface
mpls ip
serial restart-delay 0
router ospf 100
router-id 5.5.5.5
log-adjacency-changes
network 5.5.5.5 0.0.0.0 area 0
network 45.1.1.5 0.0.0.0 area 0
!
router bgp 100
no synchronization
bgp router-id 5.5.5.5
bgp log-neighbor-changes
network 55.5.5.0 mask 255.255.255.0
neighbor 12.1.1.1 remote-as 100
no auto-summary
mpls ldp router-id Loopback1
!
大體的配置已經(jīng)帖出來(lái)了。
下面講一個(gè)其中的關(guān)健點(diǎn),次末節路由的一個(gè)問(wèn)題。
注意一下我的BPG配置中建立鄰居的IP地址,是對方的接口地址。
neighbor 45.1.1.5 remote-as 100
neighbor 12.1.1.1 remote-as 100
學(xué)習MPLS最難的是跟蹤標簽。下面我們就來(lái)跟蹤一下標簽。
R1#show mpls forwarding-table Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 100 200 34.1.1.0/24 0 Se0/0 point2point 101 Untagged 2.2.2.2/32 0 Se0/0 point2point 102 202 3.3.3.3/32 0 Se0/0 point2point 103 203 4.4.4.4/32 0 Se0/0 point2point 104 204 5.5.5.5/32 0 Se0/0 point2point 105 Pop tag 23.1.1.0/24 0 Se0/0 point2point 106 205 45.1.1.0/24 0 Se0/0 point2point R2#show mpls forwarding-table Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 200 Pop tag 34.1.1.0/24 0 Fa1/0 23.1.1.3 201 Untagged 1.1.1.1/32 0 Se0/0 point2point 202 Untagged 3.3.3.3/32 0 Fa1/0 23.1.1.3 203 302 4.4.4.4/32 0 Fa1/0 23.1.1.3 204 Untagged 5.5.5.5/32 0 Fa1/0 23.1.1.3 205 305 45.1.1.0/24 0 Fa1/0 23.1.1.3 R2#R3#show mpls for Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 300 201 1.1.1.1/32 0 Fa0/0 23.1.1.2 301 Untagged 2.2.2.2/32 0 Fa0/0 23.1.1.2 302 Untagged 4.4.4.4/32 0 Fa0/1 34.1.1.4 303 403 5.5.5.5/32 77 Fa0/1 34.1.1.4 304 Pop tag 12.1.1.0/24 635 Fa0/0 23.1.1.2 305 Pop tag 45.1.1.0/24 5747 Fa0/1 34.1.1.4
看到一個(gè)奇怪的地方 了吧??為什么是POP,明明只是R3而已,應該不是次末節路由才對?墒沁@個(gè)現象是什么回事?
原因是這樣的,我們回過(guò)頭來(lái)看一下,我們的BPG建立鄰居是用這樣地址來(lái)建立鄰居的:
R1:neighbor 12.1.1.1 remote-as 100
R5:neighbor 45.1.1.5 remote-as 100
對于R1來(lái)說(shuō),與45.1.1.5建立了鄰居,對于45.1.1.0這個(gè)網(wǎng)絡(luò ),R3就是次末節路由。所以顯示是POP。我不知道這樣講清不清楚。簡(jiǎn)單地說(shuō),R3是45.1.1.0這個(gè)網(wǎng)絡(luò )的次末節路由。
那么如何解決這個(gè)問(wèn)題呢?
R1:neighbor 5.5.5.5 remote-as 100
neighbor 5.5.5.5 update-source lo0
R5:neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 update-source lo0
接下來(lái)分析另一個(gè)問(wèn)題:
R2#show mpls forwarding-table Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 200 Pop tag 34.1.1.0/24 0 Fa1/0 23.1.1.3 201 Untagged 1.1.1.1/32 0 Se0/0 point2point 202 Untagged 3.3.3.3/32 0 Fa1/0 23.1.1.3 203 302 4.4.4.4/32 0 Fa1/0 23.1.1.3 204 Untagged 5.5.5.5/32 0 Fa1/0 23.1.1.3 205 305 45.1.1.0/24 0 Fa1/0 23.1.1.3 R2# R4#show mpls forwarding-table Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 400 300 1.1.1.1/32 0 Fa1/0 34.1.1.3 401 301 2.2.2.2/32 0 Fa1/0 34.1.1.3 402 Untagged 3.3.3.3/32 0 Fa1/0 34.1.1.3 403 Untagged 5.5.5.5/32 63 Se0/0 point2point 404 Pop tag 23.1.1.0/24 0 Fa1/0 34.1.1.3 405 304 12.1.1.0/24 6416 Fa1/0 34.1.1.3
注意紅色字體的部分。untagged是什么意思?
uptagged跟pop的一個(gè)不同的地方是,pop只彈出一層標簽,而untagged彈出全部標簽。
另外,在這里顯示untagged表示,這個(gè)路由是自己發(fā)現的,而不是由鄰居告訴我的,發(fā)生一次untagged意味著(zhù)這個(gè)標簽的所有標簽全部沖突。全部彈出。
看一下R4
R4#show mpls ldp bindings tib entry: 1.1.1.1/32, rev 15 local binding: tag: 402 remote binding: tsr: 3.3.3.3:0, tag: 300 remote binding: tsr: 55.5.5.5:0, tag: 503 tib entry: 2.2.2.2/32, rev 17 local binding: tag: 403 remote binding: tsr: 3.3.3.3:0, tag: 301 remote binding: tsr: 55.5.5.5:0, tag: 504 tib entry: 3.3.3.0/24, rev 22 remote binding: tsr: 3.3.3.3:0, tag: imp-null tib entry: 3.3.3.3/32, rev 19 local binding: tag: 404 remote binding: tsr: 55.5.5.5:0, tag: 505 tib entry: 4.4.4.0/24, rev 5 local binding: tag: imp-null tib entry: 4.4.4.4/32, rev 9 remote binding: tsr: 55.5.5.5:0, tag: 500 remote binding: tsr: 3.3.3.3:0, tag: 303 tib entry: 5.5.5.0/24, rev 8 remote binding: tsr: 55.5.5.5:0, tag: imp-null tib entry: 5.5.5.5/32, rev 11 local binding: tag: 400 remote binding: tsr: 3.3.3.3:0, tag: 304
奇怪吧?為什么有一個(gè)是24位的,有一個(gè)是32位的?而且32位的那一條路由的下一跳是3.3.3.3????
R5:interface Loopback0
ip address 5.5.5.5 255.255.255.0
配置時(shí)是24位的。所以MPLS將它發(fā)送給R4 。
再看32位的,這是OSPF學(xué)習到的路由,OSPF認為L(cháng)OOPBACK口的都是32位的,所以R4的路由表學(xué)習到的是32位的路由,下一跳指向45.1.1.5
R4#show ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static routeGateway of last resort is not set 34.0.0.0/24 is subnetted, 1 subnetsC 34.1.1.0 is directly connected, FastEthernet1/0 1.0.0.0/24 is subnetted, 1 subnetsO 1.1.1.0 [110/67] via 34.1.1.3, 00:09:54, FastEthernet1/0 2.0.0.0/24 is subnetted, 1 subnetsO 2.2.2.0 [110/3] via 34.1.1.3, 00:09:54, FastEthernet1/0 3.0.0.0/24 is subnetted, 1 subnetsO 3.3.3.0 [110/2] via 34.1.1.3, 00:09:54, FastEthernet1/0 4.0.0.0/24 is subnetted, 1 subnetsC 4.4.4.0 is directly connected, Loopback0 5.0.0.0/32 is subnetted, 1 subnetsO 5.5.5.5 [110/65] via 45.1.1.5, 00:09:54, Serial0/0 23.0.0.0/24 is subnetted, 1 subnetsO 23.1.1.0 [110/2] via 34.1.1.3, 00:09:56, FastEthernet1/0 12.0.0.0/24 is subnetted, 1 subnetsO 12.1.1.0 [110/66] via 34.1.1.3, 00:09:56, FastEthernet1/0 45.0.0.0/24 is subnetted, 1 subnetsC 45.1.1.0 is directly connected, Serial0/0tib entry: 5.5.5.0/24, rev 8 remote binding: tsr: 55.5.5.5:0, tag: imp-null這是R5發(fā)送給R4 的,但是R4本身沒(méi)有這條路由,所以本身沒(méi)有給 這條路由分配標簽。tib entry: 5.5.5.5/32, rev 11 local binding: tag: 400 remote binding: tsr: 3.3.3.3:0, tag: 304這是R3分發(fā)給R4的,因為R4本身也有這條5.5.5.5/32的路由,所以本身也會(huì )為這條路由分發(fā)標簽。
5.5.5.5/32這條路由的下一跳是45.1.1.5,而標簽表中:
tib entry: 5.5.5.5/32, rev 11 local binding: tag: 400 remote binding: tsr: 3.3.3.3:0, tag: 304
下一跳是3.3.3.3,這是矛盾的。所以這一標簽不可用。
但是對于5.5.5.5/32這條路由,R4認為R5沒(méi)有給自己這條路由,所以就untagged 了。
雖然這不影響整個(gè)網(wǎng)張的連通,你可以試一下,可以ping通整個(gè)網(wǎng)絡(luò )。
但是顯然影響到標簽的連續性。MPLS網(wǎng)絡(luò )最重要的是就標簽的連續性問(wèn)題,標簽分配的不合理,生期可能會(huì )很麻煩。
所以這個(gè)問(wèn)題是必須解決的。解決方法很簡(jiǎn)單,就是在每個(gè)路由器每個(gè)loopback 口啟用:
ip ospf network point-to-point