目錄

簡介

必要條件

需求

採用元件

慣例

網路圖表

問題

疑難排解

解決方案

相關資訊

簡介

本檔案將協助排解由於有效的快取Cisco Express Forwarding鄰接關係（指出錯誤的介面）所導致的Cisco Express Forwarding(CEF)路由回圈和次優路由的疑難問題。由於以下原因，建立了介面不正確的鄰接關係：

- 靜態路由直接指向多路訪問介面。

- 代理位址解析通訊協定(ARP)回覆之後會建立有效的思科快速轉送鄰接關係。

必要條件

需求

使用這些資源可更好地瞭解本文使用的一些概念：

- Cisco Express Forwarding概述

- 思科路由器中的路由選擇

採用元件

本文件所述內容不限於特定軟體和硬體版本。

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

網路圖表

路由器R1通過Serial 8/0連線到R3，路由器R2通過Serial 8/0連線到R4。R1和R2通過Ethernet 0/0連線，如下圖所示。

- R2收到來自R4的10.10.34.0/24的外部邊界網關協定(eBGP)字首更新。R2通過內部BGP(iBGP)將此字首傳播到R1。

- R2有一條靜態預設路由(0.0.0.0/0)，指向R4的Serial 8/0 IP地址10.10.24.4。

- R2還具有一個備用浮動預設路由(IP route 0.0.0.0 0.0.0 Ethernet0/0 10)，該路由指向Ethernet 0/0介面，以便在R2和R4之間的串列連線失敗時路由資料包。

- R1有一條預設路由，它指向R3的Serial 8/0,IP地址為10.10.13.3。

問題

目的地為10.10.34.0/24的IP流量在R1和R2之間循環。觀察R1上的traceroute命令輸出。

R1#traceroute 10.10.34.4

Type escape sequence to abort.

Tracing the route to 10.10.34.4

1 192.168.12.2 20 msec 20 msec 20 msec

2 192.168.12.1 8 msec 12 msec 8 msec

3 192.168.12.2 8 msec 8 msec 12 msec

4 192.168.12.1 12 msec ...

請注意，目的地為10.10.34.4的流量在R1的乙太網0/0（IP地址192.168.12.1）和R2的乙太網0/0（IP地址192.168.12.2）之間跳躍。 理想情況下，由於iBGP學習字首10.10.34.0/24，從R1發往10.10.34.0/24的流量需要發往R2。然後，從R2發來的流量應路由到R4。但是，traceroute命令輸出會確認R1和R2之間的路由環路。

R1

hostname R1

!

ip subnet-zero

!

ip cef

!

interface Ethernet0/0

ip address 192.168.12.1 255.255.255.0

!

interface Serial8/0

ip address 10.10.13.1 255.255.255.0

!

router bgp 11

no synchronization

bgp log-neighbor-changes

neighbor 10.10.13.3 remote-as 12

neighbor 192.168.12.2 remote-as 11

no auto-summary

!

ip route 0.0.0.0 0.0.0.0 10.10.13.3

R2

hostname  R2

!

ip cef

!

interface Ethernet0/0

ip address 192.168.12.2 255.255.255.0

!

interface Serial8/0

ip address 10.10.24.2 255.255.255.0

!

router bgp 11

no synchronization

bgp log-neighbor-changes

network 192.168.12.0

neighbor 10.10.24.4 remote-as 10

neighbor 192.168.12.1 remote-as 11

neighbor 192.168.12.1 next-hop-self

no auto-summary

!

ip route 0.0.0.0 0.0.0.0 10.10.24.4

ip route 0.0.0.0 0.0.0.0 Ethernet0/0 10

!

疑難排解

由於發往10.10.34.4的資料包在R1和R2之間循環，因此開始排除故障。首先檢查R1上的IP路由。show ip route 10.10.34.0命令輸出會確認要發往10.10.34.0/24的資料包的下一跳192.168.12.2。此跳與traceroute命令first hop匹配，在該命令中，資料包被傳送到下一跳192.168.12.2，這確認資料包在R1上正確交換。

R1#show ip route 10.10.34.0

Routing entry for 10.10.34.0/24

Known via "bgp 11", distance 200, metric 0

Tag 10, type internal

Last update from 192.168.12.2 00:22:59 ago

Routing Descriptor Blocks:

* 192.168.12.2, from 192.168.12.2, 00:22:59 ago

Route metric is 0, traffic share count is 1

AS Hops 1

下一步是檢查R2的IP路由表。如此show ip route 10.10.34.0命令輸出所示，應該將目的地為10.10.34.0的資料包路由到Serial 8/0上的下一跳10.10.24.4。但是，traceroute命令顯示將目的地為R1的資料包交換回IP地址192.168.12.1。需要進一步調查為什麼將目的地為10.34.0的資料包交換從R2跳到下一跳192.168.12.1(如traceroute命令的輸出所示)，而不是到10.10.24.4。

R2#show ip route 10.10.34.0

Routing entry for 10.10.34.0/24

Known via "bgp 11", distance 20, metric 0

Tag 10, type external

Last update from 10.10.24.4 00:42:32 ago

Routing Descriptor Blocks:

* 10.10.24.4, from 10.10.24.4, 00:42:32 ago

Route metric is 0, traffic share count is 1

AS Hops 1

此時，必須瞭解的是，在Cisco Express Forwarding-switched網路中，資料包轉發決策包括：

- 最長字首匹配的路由表查詢。

- 轉發資訊庫(FIB)查詢。

由於路由表已經過驗證，請檢視思科快速轉發FIB。在show ip cef 10.10.34.4 detail命令的結果中，請注意Cisco Express Forwarding交換器10.10.34.4傳出Ethernet 0/0，而不是下一個躍點10.10.24.4傳出Serial 8/0(如show ip route 10.10.34.0命令輸出所示)。 這種差異會在網路中造成環路。

R2#show ip cef 10.10.34.4 detail

10.10.34.4/32, version 19, cached adjacency 10.10.34.4

0 packets, 0 bytes

via 10.10.34.4, Ethernet0/0, 0 dependencies

next hop 10.10.34.4, Ethernet0/0

valid cached adjacency

下一步是檢視Cisco Express Forwarding鄰接表，瞭解Cisco Express Forwarding如何學習從Ethernet 0/0交換資料包。注意，鄰接是因為ARP而構建的。

R2#show adjacency ethernet 0/0 detail | begin  10.10.34.4

IP       Ethernet0/0               10.10.34.4(5)

50 packets, 2100 bytes

AABBCC006500AABBCC0066000800

ARP        03:02:00

以下show ip arp指令輸出為確認。

R2#show ip arp 10.10.34.4

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  10.10.34.4             60   aabb.cc00.6500  ARPA   Ethernet0/0

接下來，找出當路由表中存在IP路由時為什麼建立此ARP條目。再次檢視路由表。

R2#show run | include ip route 0.0.0.0

ip route 0.0.0.0 0.0.0.0 10.10.24.4

ip route 0.0.0.0 0.0.0.0 Ethernet0/0 10

如果R2和R4之間的串列連線失敗，所有流量都會使用浮動靜態路由從Ethernet 0/0路由出去，因為R2具有指向多接入介面Ethernet 0/0的浮動靜態路由，而不是指向R1的乙太網IP地址192.168.12.1。因此，對於所有未知目標，路由器R2會通過Ethernet0/0介面傳送ARP請求。在這種情況下，R2丟失了通往10.10.34.0網路的更具體的路由。因此，當資料包到達此網路上的主機時，它會通過乙太網介面生成ARP請求。由於代理ARP在R1的乙太網介面上預設啟用，並且有一個指向R3的預設路由，因此它使用自己的MAC地址回覆代理ARP。因此，R2將所有流量傳送到R1,R1使用預設路由(0.0.0.0/0)將所有流量轉發到AS 12，進而通過Internet轉發到10.10.34.4。

當R2收到來自R1的代理ARP應答時，它會建立指向介面Ethernet 0/0的/32有效Cisco Express Forwarding鄰接關係。在乙太網網段上存在代理ARP路由器R1之前，此Cisco Express Forwarding條目不會過期。因此，/32 Cisco Express Forwarding條目繼續用於Cisco Express Forwarding交換資料包，即使R2和R4之間的串列連線已恢復並且路由表預設路由指向指向AS 10的Serial 8/0時也是如此。結果是路由環路。

最後，檢視日誌並檢視串列鏈路(s8/0)是否閃爍。這會導致在路由表中安裝浮動靜態路由，然後導致代理ARP，並導致在Cisco快速轉發FIB中安裝10.10.34.4/32的Cisco快速轉發條目。

R2#show log | beg Ethernet0/0

[..]

%LINEPROTO-5-UPDOWN: Line protocol on Interface Serial8/0, changed state to down

%BGP-5-ADJCHANGE: neighbor 10.10.24.4 Down Interface flap

%LINEPROTO-5-UPDOWN: Line protocol on Interface Serial8/0, changed state to up

%BGP-5-ADJCHANGE: neighbor 10.10.24.4 Up

日誌確認了原因。總之，這些步驟顯示事件的順序：

1. R2上的Serial 8/0介面關閉。

2. R2有一個目的地為10.10.34.4的資料包。

3. R2遵循直接指向Ethernet 0/0的備份預設路由。

4. R2傳送10.10.34.4的ARP請求。

5. R1（代理）使用自己的MAC地址向R2回覆ARP請求。

6. R2現在有一個MAC地址為R1的10.10.34.4的ARP條目。

7. R2為10.10.34.4建立Cisco快速轉發鄰接關係，並且通過Ethernet 0/0為此目標將10.10.34.4/32條目安裝在Cisco快速轉發表(FIB)中。只要ARP條目有效或直到R1出現在乙太網網段上，就會維護此Cisco快速轉發條目。

8. R2上的Serial 8/0啟動。

9. R2使用下一跳10.10.24.4從R4獲取eBGP路由10.10.34.0/24，並將該路由安裝在IP路由表中。

10. R1通過iBGP從R2獲取字首10.10.34.0/24，並將其安裝在IP路由表中。

11. R1有一個目的地為10.10.34.4的資料包。

12. R1檢視其路由表，匹配iBGP字首到R2的路由和到R2的路由。

13. R2收到目的地為10.10.34.4的資料包。由於它已經有一個10.10.34.4/32的Cisco Express Forwarding條目，該條目在其FIB表中指向Ethernet 0/0，且MAC地址為R1，因此它會將該資料包傳送回R1，而無需檢視路由表。這將建立一個循環。

解決方案

將直接指向Ethernet 0/0的浮動靜態路由替換為指向下一跳地址的浮動靜態路由。

R2(config)#no ip route 0.0.0.0 0.0.0.0 ethernet 0/0 10

R2(config)# ip route 0.0.0.0 0.0.0.0 192.168.12.1 10

當您擁有指向下一跳IP地址而不是多路訪問介面Ethernet 0/0的靜態路由時，它會阻止R2傳送所有目的地的ARP請求。資料包將根據下一跳192.168.12.1進行路由和交換。因此，可避免任何ARP Cisco快速轉發條目和環路。

觀察R2上指向正確介面Serial 8/0的Cisco Express Forwarding條目。

R2#show ip cef 10.10.34.4

10.10.34.0/24, version 32, cached adjacency to Serial8/0

0 packets, 0 bytes

via 10.10.24.4, 0 dependencies, recursive

next hop 10.10.24.4, Serial8/0 via 10.10.24.0/24

valid cached adjacency

相關資訊

- 使用Cisco Express Forwarding排除並行鏈路上的負載均衡故障

- 如何驗證Cisco Express Forwarding Switching

- 排除Cisco Express Forwarding的字首不一致問題

- 使用Cisco Express Forwarding排除不完整的鄰接關係

- 思科快速轉送支援頁面

- IP路由通訊協定支援頁面

- 技術支援與文件 - Cisco Systems