Enhanced Interior Gateway Routing Protocol (EIGRP) 增強型內部網關路由協定

前言

Enhanced Interior Gateway Routing Protocol (EIGRP) 屬於 Hybrid Routing Protocol (混合型),包含了 Distance-Vector 與 Link-State 的特性。就像 Link-State 一樣,EIGRP 會把相鄰的 Router 成為 Neighbor,定時檢查他們的狀態,而 EIGRP 源用了 Distance-Vector 的概念去計算 Network 的 distance。留意 EIGRP 是 Cisco 專屬的 Protocol,只有 Cisco 產品才能執行 EIGRP。

Neighbor

入門第一件事就是學學怎樣設定 Router 成為 EIGRP Neighbor,現在為以下這個網絡做一個最簡單的 EIGRP 設定。

eigrp

首先把 IP Address 設定好:

hostname R1
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
hostname R2
!
interface Ethernet0/0
 ip address 192.168.23.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.12.2 255.255.255.0
hostname R3
!
interface Ethernet0/1
 ip address 192.168.23.3 255.255.255.0

要設定 EIGRP 的指令極其簡單,先用 router eigrp <AS no> 進入 EIGRP 設定,然後輸入要參與 EIGRP 的 network。而 auto-summary 是預設的,在討論 Summary 的部份會再詳細說明。另外需要注意的是,在同一個 AS 內的 EIGRP Router ,所有 AS Number 必需相同。

hostname R1
!
router eigrp 1
 network 192.168.12.0
 auto-summary
hostname R2
!
router eigrp 1
 network 192.168.12.0
 network 192.168.23.0
 auto-summary
hostname R3
!
router eigrp 1
 network 192.168.23.0
 auto-summary

預設情況下,Router 之間是利用 Multicast 溝通的。如果網絡連線不支緩 Multicast 或因為某些原因 Multicast 未能順利傳送的話,Router 就無法成為 Neighbor。遇到這些情況,我們使用 Neighbor 指令利用 Unicast 去傳送 EIGRP 封包。例如 R1 與 R2 之間使用 Unicast,設定如下:

R1(config)#router eigrp 1
R1(config-router)#neighbor 192.168.12.2 Ethernet0/0
R2(config)#router eigrp 1
R2(config-router)#neighbor 192.168.12.1 Ethernet0/1

想確認一下有沒有成功建立 Neighbor,可以用 show ip eigrp neighbors 指令。

R2#show ip eigrp neighbors
IP-EIGRP neighbors for process 1
H   Address                 Interface       Hold Uptime   SRTT   RTO  Q  Seq
                                            (sec)         (ms)       Cnt Num
0   192.168.12.1            Et0/1             12 00:08:02  297  1782  0  9
1   192.168.23.3            Et0/0             13 01:07:01   44   264  0  5

H

這只不過是一個流水號,由 0 開始數,沒有特別意思,然而為什麼叫 H 呢?可能是 Hop 的意思吧,我也不太肯定。

Address

就是 Neighbor 的 IP Address。

Interface

Neighbor 的 Hello Message 是從那個 Interface 收到的。

Holdtime

EIGRP 有兩個 Timer,分別是 Hello Timer 及 Hold Timer,預設值 Hello 是 5 秒,Hold 是 15 秒,即是說 EIGRP Router 會每隔 5 秒傳送 Hello Message,如果收到的話就繼續維持 Neighbor 的關係,一但過了 15 秒都沒收到 Hello 的話,就中斷 Neighbor 的關係。所以 Holdtime 會從 15 秒開始倒數,直到收到 Hello 後又重設成 15 秒。Hello Timer 和 Hold Timer 是可以在 Interface 下更改的,指令如下:

R2(config)#int ethernet 0/0
R2(config-if)#ip hello-interval eigrp ?
  <1-65535>  Autonomous system number

R2(config-if)#ip hello-interval eigrp 1 ?
  <1-65535>  Seconds between hello transmissions

R2(config-if)#ip hello-interval eigrp 1 10
R2(config-if)#
R2(config-if)#ip hold-time eigrp ?
  <1-65535>  Autonomous system number

R2(config-if)#ip hold-time eigrp 1 ?
  <1-65535>  Seconds before neighbor is considered down

R2(config-if)#ip hold-time eigrp 1 30

記得兩隻成為 Neighbor 的 Router 也要更改,不過,就算兩隻 Router 的 Timer 不相同,它們也可成為 Neighbor!不過習慣上還是把它們設成一樣吧。設定好後 Reset Neighbor,觀察 Neighbor Table,發現 Timer 由 30 開始倒數了。

R2#clear ip eigrp 1 neighbors
R2#
R2#show ip eigrp neighbors
IP-EIGRP neighbors for process 1
H   Address                 Interface       Hold Uptime   SRTT   RTO  Q  Seq
                                            (sec)         (ms)       Cnt Num
1   192.168.23.3            Et0/0             29 00:00:00   67   402  0  22
0   192.168.12.1            Et0/1             14 00:00:04   49   294  0  24
R2#

Uptime

與這 Router 成為 Neighbor 多久了。

SRTT

全寫是 Smoothed round-trip time,Router 在收到 EIGRP packet 後都會回傳一個 ACK (acknowledgment)。SRTT 即 Router 送出 EIGRP packet 然後收到對方回覆 ACK 的時間。單位是 milliseconds。

RTO

全寫是 Retransmission Timeout,即是說如果送出 EIGRP packet 後沒有收到 ACK,要等多少時再重新傳送呢?RTO 是用 SRTT 計算出來的,不能設定。單位是 milliseconds。

Q Cnt

即 Query Count,意思是有多少 EIGRP packet 在排隊等候傳送。0 是正常的,如果數字越來越大的話,則代表 EIGRP packet 都傳不出去,要檢查 Interface 是否出問題了。

Seq Num

最後收到的 EIGRP Packet 的 Sequence Number,這個數字應該是越來越大的。

Authentication

基於保安理由,我們可以在 EIGRP Neighbor 的 Interface 之間設密碼,這樣可以避免有 Router 假扮成 Neighbor 來偷取 Route 資訊。設密碼有兩個步驟,首先在兩隻 Router 分別設定 Key Chain。

R1(config)# key chain MyChain
R1(config-keychain)# key 1
R1(config-keychain-key)# key-string MyPassword
R2(config)# key chain MyChain
R2(config-keychain)# key 1
R2(config-keychain-key)# key-string MyPassword

第二步是在 Interface 設定 Key Chain 和 MD5 encryption。

R1(config)# interface ethernet 0/0
R1(config-if)# ip authentication key-chain eigrp 1 MyChain
R1(config-if)# ip authentication mode eigrp 1 md5
R2(config)# interface ethernet 0/1
R2(config-if)# ip authentication key-chain eigrp 1 MyChain
R2(config-if)# ip authentication mode eigrp 1 md5

用 show ip eigrp interfaces detail 可以查看 Authentication 資訊。

R1#show ip eigrp interfaces detail
IP-EIGRP interfaces for process 1

                        Xmit Queue   Mean   Pacing Time   Multicast    Pending
Interface        Peers  Un/Reliable  SRTT   Un/Reliable   Flow Timer   Routes
Et0/0              1        0/0        88       0/2          436           0
  Hello interval is 5 sec
  Next xmit serial <none>
  Un/reliable mcasts: 0/12  Un/reliable ucasts: 22/32
  Mcast exceptions: 11  CR packets: 11  ACKs suppressed: 0
  Retransmissions sent: 12  Out-of-sequence rcvd: 0
  Authentication mode is md5,  key-chain is "MyChain"
  Use multicast

Metric

每種 Routing Protocol 都有自己一套計算 Metric 的方法,EIGRP 又怎樣計算呢?EIGRP 的 Metric 有一條看起來頗複雜的公式:

Metric = [K1 *  BW * 256 + (K2 * BW) / (256-load) + K3 * delay *256] *
[K5 / (reliability + K4)]

where BW = 10^7 Kbit / interface bandwidth (Kbit)
delay = interface delay (usec) / 10

真的有夠複雜!不用擔心,因為預設 K1=1, K2=0, K3=1, K4=0, K5=0,這些叫做 K Value,而我們通常會使用預設值,很少會更改 K Value,所以公式會被簡化成:

Metric = (BW * 256 + delay * 256)
= (BW + delay) * 256

where BW = 10^7 Kbit / interface bandwidth (Kbit)
delay = interface delay (usec) / 10

這樣就簡單得多了,不過特別要說的是,所謂 Bandwidth 是計算整條 path 裡面 bandwidth 最小的一段,而 delay 則是每一段的總和,現在會用以下網絡作例子來示範怎樣計算 Metric。R3 的 L0 亦會參與 EIGRP,假設 IP Address 與 EIGRP 都已經設定好。

eigrp

先到 R3,用 show ip eigrp topology 查看 EIGRP Topology Table。FD 所顯示的數值就是 Metric,可見在 R3 要到達 192.168.34.0 / 24 這個 Network,Metric 是 128256,怎樣計呢?

R3#show ip eigrp 1 topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.34.3)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.34.0/24, 1 successors, FD is 128256
        via Connected, Loopback0
P 192.168.12.0/24, 1 successors, FD is 307200
        via 192.168.23.2 (307200/281600), Ethernet0/1
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1

引用剛剛說過的公式:(BW + delay) * 256。所以要先查看 L0 這個 Interface 的 bandwidth 和 delay。

R3#show interfaces l0 | include BW
  MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec,
  • BW = 10^7 / interface bandwidth = 10^7 / 8000000 = 1.25 = 1 (捨去小數)
  • Delay = interface delay / 10 = 5000 / 10 = 500
  • Metric = (1 + 500) * 256 = 128256

然後在 R2 見到 192.168.34.0 / 24 的 Metric 是 409600,為什麼呢?

R2#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.2)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.34.0/24, 1 successors, FD is 409600
        via 192.168.23.3 (409600/128256), Ethernet0/0
P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0

先檢查 R2 ethernet0/0 的 Bandwidth 和 Delay。

R2#show interfaces ethernet 0/0 | include BW
  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec,

從 R2 的 eth0/0 到 R3,然後從 R3 的 L0 到達 192.168.34.0 / 24,Bandwidth 最小的一段是 R2 的 eth0/0,所以 Interface bandwidth 是 10000K。至於 Delay 是計算總和的,所以 Interface Delay 是 5000 + 1000 = 6000。

  • BW = 10^7 / interface bandwidth = 10^7 / 10000 = 1000
  • Delay = interface delay / 10 = 6000 / 10 = 600
  • Metric = (1000 + 600) * 256 = 409600

至於 R1 我就不計算了,留待讀者們自己試試吧。

R1#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.12.1)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.34.0/24, 1 successors, FD is 435200
        via 192.168.12.2 (435200/409600), Ethernet0/0
P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.23.0/24, 1 successors, FD is 307200
        via 192.168.12.2 (307200/281600), Ethernet0/0

剛才說過 K Values 的預值是 K1=1, K2=0, K3=1, K4=0, K5=0,這是可以更改的。指令如下:

R2(config)#router eigrp 1
R2(config-router)#metric weights 0 5 2 1 10 1

第一個數字是 Type,填 0 便可以,其後 5 個數字分別是 K1 至 K5 的值。

路徑選擇

學會了計算 Metric 之後,現在要學習一個 EIGRP 裡面很重要的概念,就是路徑的選擇。這個部份首先要灌輸 Feasible Distance 及 Advertised Distance 兩個名詞。以下面這個網絡作為例子:

eigrp

Advertised Distance (AD) 是 Neighbor 告訊我他要去目的地的 Metric。因此:

  • R2 收到 R3 告訴它,R3 要到達目的地的 Metric 是 100,所以 R2 去目的地的 AD 是 100。
  • R1 收到 R2 告訴它,R2 要到達目的地的 Metric 是 300 (= 100 + 200),所以 R1 去目的地的 AD 是 300。

Distance

Distance 是 Neighbor 給我的 AD 加上我要到達這個 Neighbor 的 Metric。

  • R2 收到 R3 告訴它要到達目的地的 AD 是 100,而 R2 要到 R3 需要 200,因此 R2 到達目的地的 Metric 是 300,即 Distance 是 300。
  • R1 收到 R2 告訴它要到達目的地的 AD 是 300,而 R1 要到 R2 需要 300,因此 R1 到達目的地的 Metric 是 600,即 Distance 是 600。

Feasible Distance (FD)

如果有多條 Path 能夠到達目的地,當中 Distance 最小的那條 Route ,它的 Distance 就是 Feasible Distance (FD)。

如果有多條路徑可以到達目的地,EIGRP 可以利用 AD 和 FD 決定 Successor 和 Feasible Successor。Successor 可以理解為 best path,EIGRP 會把 Distance 最小的設為 Successor 並放進 Route Table,Feasible Successor 則是用作後備的 Successor,所有 AD 少於 FD 的 Path 會設為 Feasible Successor,當發現 Successor 出了問題,EIGRP 會立刻用 Feasible Successor 頂上。

接下來,我們用一個有多條路徑的網絡來解釋一下 Successor 的選擇。假設所有 IP Address 和 EIGRP 已經設定好。針對 R1 要到達 192.168.56.0 / 24 來作實驗。

eigrp

先在 R1 看看 Topology Table 和 Route Table。要到達 192.168.56.0 / 24 這個 network ,R1 有 3 條 path 可以選擇,分別是 192.168.12.2,192.168.13.3 和 192.168.14.4 ,括號內的數是分別是這條 Route 的 Distance 和 AD (前面較大的是 Distance,後面較小的是 AD)。由於三條 Route Distance 都相同,所以 EIGRP 把 3 條 Route 都選為 Successors,並放進 Route Table 之中,這時要到目的地的 Traffic 會 Load Balance 地使用這 3 條 Route。

R1#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.14.1)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.45.0/24, 1 successors, FD is 307200
        via 192.168.14.4 (307200/281600), Ethernet0/2
P 192.168.35.0/24, 1 successors, FD is 307200
        via 192.168.13.3 (307200/281600), Ethernet0/1
P 192.168.56.0/24, 3 successors, FD is 435200
        via 192.168.12.2 (435200/409600), Ethernet0/0
        via 192.168.13.3 (435200/409600), Ethernet0/1
        via 192.168.14.4 (435200/409600), Ethernet0/2
P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.13.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 192.168.14.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/2
P 192.168.25.0/24, 1 successors, FD is 307200
        via 192.168.12.2 (307200/281600), Ethernet0/0
R1#
R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/435200] via 192.168.14.4, 00:00:56, Ethernet0/2
                     [90/435200] via 192.168.13.3, 00:00:56, Ethernet0/1
                     [90/435200] via 192.168.12.2, 00:00:56, Ethernet0/0

現在我們做一些調整,把 R3 和 R4 E0/1 的 Delay 調高,這樣兩條路線的 Distance 和 AD 都會改變。

R3(config)#interface ethernet 0/1
R3(config-if)#delay 110
R4(config)#interface ethernet 0/1
R4(config-if)#delay 250

在回到 R1 看看 Topology Table,發現經 R3 的 Path Distance 和 AD 都增加了,現在只有 192.168.12.2 這 1 條 successor。而 192.168.13.3 仍然保留在 Topology Table 之中因為它的 AD 比 FD 小,所以成為 Feasible Successor。至 192.168.14.4 因為 AD 比 FD 大,Feasible Successor 都做不成,就被移除了。但如果想看看它的 Distance 和 AD,還是有方法的,可以使用 show ip eigrp topology all-links。最後,EIGRP 只會把 Successor 放進 Route Table 之中。

R1#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.14.1)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.45.0/24, 1 successors, FD is 332800
        via 192.168.12.2 (332800/307200), Ethernet0/0
        via 192.168.14.4 (345600/320000), Ethernet0/2
        via 192.168.13.3 (335360/309760), Ethernet0/1
P 192.168.35.0/24, 1 successors, FD is 307200
        via 192.168.13.3 (309760/284160), Ethernet0/1
P 192.168.56.0/24, 1 successors, FD is 435200
        via 192.168.12.2 (435200/409600), Ethernet0/0
        via 192.168.13.3 (437760/412160), Ethernet0/1
P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.13.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 192.168.14.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/2
P 192.168.25.0/24, 1 successors, FD is 307200
        via 192.168.12.2 (307200/281600), Ethernet0/0
R1#
R1#show ip eigrp topology all-links
IP-EIGRP Topology Table for AS(1)/ID(192.168.14.1)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.45.0/24, 1 successors, FD is 332800, serno 54
        via 192.168.12.2 (332800/307200), Ethernet0/0
        via 192.168.14.4 (345600/320000), Ethernet0/2
        via 192.168.13.3 (335360/309760), Ethernet0/1
P 192.168.35.0/24, 1 successors, FD is 307200, serno 51
        via 192.168.13.3 (309760/284160), Ethernet0/1
        via 192.168.12.2 (332800/307200), Ethernet0/0
P 192.168.56.0/24, 1 successors, FD is 435200, serno 56
        via 192.168.12.2 (435200/409600), Ethernet0/0
        via 192.168.14.4 (473600/448000), Ethernet0/2
        via 192.168.13.3 (437760/412160), Ethernet0/1
P 192.168.12.0/24, 1 successors, FD is 281600, serno 1
        via Connected, Ethernet0/0
P 192.168.13.0/24, 1 successors, FD is 281600, serno 2
        via Connected, Ethernet0/1
P 192.168.14.0/24, 1 successors, FD is 281600, serno 3
        via Connected, Ethernet0/2
P 192.168.25.0/24, 1 successors, FD is 307200, serno 26
R1#
R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/435200] via 192.168.12.2, 00:05:34, Ethernet0/0

如果 192.168.12.2 的 path 不通,Feasible Successor 192.168.13.3 就會立刻頂上成為 Successor,現在測試一下,把 R2 的 eth0/1 關掉。

R2(config)#int ethernet 0/0
R2(config-if)#shutdown

Route Table 變成使用 192.168.13.3 了。

R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/437760] via 192.168.13.3, 00:00:00, Ethernet0/1

如果把 R3 的 Eth0/1 都關掉又會發生什麼事呢?由於已經沒有 Feasible Successor 了,R1 會發出 Query Message 詢問連接的 Neighbor 有沒有 192.168.56.0 / 24 的方法,當然 R4 會回覆,這樣,R1 就用了 192.168.14.4 作為 到 192.168.56.0 / 24 的 Next Hop 了。

R3(config)#int ethernet 0/0
R3(config-if)#shutdown
R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/473600] via 192.168.14.4, 00:04:52, Ethernet0/2

Variance

EIGRP 容許 Metric 不同的 Route 來做 Load Balancing,主要需要調校 Variance 這個參數。Variance 是一個倍數,意思是容許 FD 的多少倍以下 Distance 的 Route 進行 Load Balance,文字較難表達,請看以下例子。現有 3 條路徑可到達 192.168.56.0 / 24。

R1#show ip eigrp topology | begin 192.168.56.0
P 192.168.56.0/24, 1 successors, FD is 435200
        via 192.168.12.2 (435200/409600), Ethernet0/0
        via 192.168.13.3 (768000/409600), Ethernet0/1
        via 192.168.14.4 (1177600/409600), Ethernet0/2

<--output omitted-->

由於 Variance 預設值為 1,因此只有 Distance 435200 這條可以進入 Route Table。

R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/435200] via 192.168.12.2, 00:00:17, Ethernet0/0

現在把 Variance 設為 2,由於 FD = 435200,FD * variance = 435200 * 2 = 870400,因此凡是 Distance 少於 870400 的 Route 都可以進入 Route Table 了。

R1(config)#router eigrp 1
R1(config-router)#variance 2
R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/768000] via 192.168.13.3, 00:01:25, Ethernet0/1
                     [90/435200] via 192.168.12.2, 00:01:25, Ethernet0/0

如果改成 3 呢?435200 * 3 = 1305600,全部 3 條 Route 都可以進入 Route Table。

R1(config)#router eigrp 1
R1(config-router)#variance 3
R1#show ip route | begin 192.168.56.0
D    192.168.56.0/24 [90/1177600] via 192.168.14.4, 00:00:05, Ethernet0/2
                     [90/768000] via 192.168.13.3, 00:00:05, Ethernet0/1
                     [90/435200] via 192.168.12.2, 00:00:05, Ethernet0/0

留意 EIGRP 的 Load Balancing 並不是平均分配的,而是按 Metric 的反比例分配,由於 192.168.12.2 Metric 最少,它會得到最多 Traffic,192.168.13.3 第二,而 Metric 最大的 192.168.14.4 則獲分配最少 Traffic。

Summarization

很多時候我們會把 EIGRP 的 auto summary 關掉,其實 summary 並非什麼洪水猛獸,若果使用得宜的話,可以把多條 Route 組合成一條,減少 Route Table 中 Route 的數目。現在使用下圖作例子,實驗開始時,我們先把 auto summary 關掉。

eigrp

各 Router 設定如下:

hostname R1
!
interface Ethernet0/0
 ip address 172.16.13.1 255.255.255.0
!
router eigrp 1
 network 172.16.13.0 0.0.0.255
 no auto-summary
hostname R2
!
interface Ethernet0/0
 ip address 172.16.23.2 255.255.255.0
!
router eigrp 1
 network 172.16.23.0 0.0.0.255
 no auto-summary
hostname R3
!
interface Ethernet0/0
 ip address 172.16.13.3 255.255.255.0
!
interface Ethernet0/1
 ip address 172.16.23.3 255.255.255.0
!
interface Ethernet0/2
 ip address 192.168.34.3 255.255.255.0
!
router eigrp 1
 network 172.16.13.0 0.0.0.255
 network 172.16.23.0 0.0.0.255
 network 192.168.34.0
 no auto-summary
hostname R4
!
interface Ethernet0/0
 ip address 192.168.34.4 255.255.255.0
!
router eigrp 1
 network 192.168.34.0
 no auto-summary

看看 R3 和 R4 的 Route Table,留意 R4 的 Route Table 中,172.16.23.0 與 172.16.13.0 兩個 Network 是分開兩條 Route 顯示。

R3#show ip route | begin Gateway
Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 2 subnets
C       172.16.23.0 is directly connected, Ethernet0/1
C       172.16.13.0 is directly connected, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/2
R4#show ip route | begin Gateway
Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 2 subnets
D       172.16.23.0 [90/307200] via 192.168.34.3, 00:01:34, Ethernet0/0
D       172.16.13.0 [90/307200] via 192.168.34.3, 00:01:34, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0

現在試試用 Manual 方法把這 2 條 Route Summize 成為 1 條:

R3(config)#int ethernet 0/2
R3(config-if)#ip summary-address eigrp 1 172.16.0.0 255.255.224.0

輸入 summary 指令後發現 R3 增加了一條 Summary Route 指向 Null0,作用是防止 Routing Loop,有了這條 Route,所有 Destination 是 172.16.0.0/19 的 packet 如果找不到出路的話就會被指向 Null 0 Drop 掉了。

R3#show ip route | begin Gateway
Gateway of last resort is not set

     172.16.0.0/16 is variably subnetted, 3 subnets, 2 masks
C       172.16.23.0/24 is directly connected, Ethernet0/1
C       172.16.13.0/24 is directly connected, Ethernet0/0
D       172.16.0.0/19 is a summary, 00:00:28, Null0
C    192.168.34.0/24 is directly connected, Ethernet0/2

而 R4 就收到 R3 傳來的 Summary Route 172.16.0.0 / 19,本來 2 條 Route 變成 1 條了。

R4#show ip route | begin Gateway
Gateway of last resort is not set

     172.16.0.0/19 is subnetted, 1 subnets
D       172.16.0.0 [90/307200] via 192.168.34.3, 00:00:50, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0

如果用 Auto Summary 情況又會怎樣呢?先在 R3 把剛才的 summary-address no 掉,然後用 auto-summary。

R3(config-if)#no ip summary-address eigrp 1 172.16.0.0 255.255.224.0
R3(config-if)#
R3(config-if)#router eigrp 1
R3(config-router)#auto-summary

EIGRP 自己選擇用了 prefix /16 來做 Summary,為什麽是 16 呢?原來 Auto Summary 會按 IP 的 Class 來定 prefix,Class A 就用 /8,Class B 就用 /16,Class C 當然就是 /24 了。172.16.0.0 是 Class B,所以用了 /16。

R3#show ip route | begin Gateway
Gateway of last resort is not set

     172.16.0.0/16 is variably subnetted, 3 subnets, 2 masks
C       172.16.23.0/24 is directly connected, Ethernet0/1
C       172.16.13.0/24 is directly connected, Ethernet0/0
D       172.16.0.0/16 is a summary, 00:00:56, Null0
C    192.168.34.0/24 is directly connected, Ethernet0/2

於是,R4 也收到這條 Summary Route。

R4#show ip route | begin Gateway
Gateway of last resort is not set

D    172.16.0.0/16 [90/307200] via 192.168.34.3, 00:01:13, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0

另外,用 Manual 方法發出去的 Summary Route 可以用以下指令更改其構成 Metric 原素的值 (例如 Bandwidth、Delay 等) 從而更改 Metric,也可以更改其  Administrative Distance。紫色部份依次為 Bandwidth、Delay、Reliability、Loading 和 MTU。而 distance 後面的值當然就是設定 Administrative Distance。

R3(config)#router eigrp 1
R3(config-router)#summary-metric 172.16.0.0 255.255.224.0 100 100 1 1 1 distance 50

Leak-map

做 Summarization 時還可以做一個微調,就是把 Summarize Route 其中一些 Specific Route 發佈,來達成某些條件 (通常是 Route Optimization), 請看以下例子。

eigrp

假設 EIGRP 已經設定好,我們利用之前學過的 summary-address 指令從 R1 把 10.0.0.0 / 22 這條 Summary Route 發佈到 R2 和 R3。

R1(config)#interface range ethernet 0/0 - 1
R1(config-if-range)#ip summary-address eigrp 1 10.0.0.0 255.255.252.0

於是,R2 和 R3 就會收到從 R1 來的 Summary Route 10.0.0.0 / 22。

R2#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.2)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 10.0.0.0/22, 1 successors, FD is 409600
        via 192.168.12.1 (409600/128256), Ethernet0/0
P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.13.0/24, 2 successors, FD is 307200
        via 192.168.12.1 (307200/281600), Ethernet0/0
        via 192.168.23.3 (307200/281600), Ethernet0/1
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
R3#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.3)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 10.0.0.0/22, 1 successors, FD is 409600
        via 192.168.13.1 (409600/128256), Ethernet0/1
P 192.168.12.0/24, 2 successors, FD is 307200
        via 192.168.13.1 (307200/281600), Ethernet0/1
        via 192.168.23.2 (307200/281600), Ethernet0/0
P 192.168.13.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0

但是現在我們想在 R1 加上一道 Leak-map,讓 10.0.1.0 / 24 這條 Route 從 E0/0 發佈出去,看看會有什麼改變?

R1(config)#access-list 1 permit 10.0.1.0 0.0.0.255
R1(config)#route-map EIGRP-Leak
R1(config-route-map)#match ip address 1
R1(config-route-map)#exit
R1(config)#interface ethernet 0/0
R1(config-if)#ip summary-address eigrp 1 10.0.0.0 255.255.252.0 leak-map EIGRP-Leak

發現 R2 和 R3 都增加了一條 10.0.1.0 / 24 這條 Route。

R2#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.2)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 10.0.0.0/22, 1 successors, FD is 409600
        via 192.168.12.1 (409600/128256), Ethernet0/0
P 10.0.1.0/24, 1 successors, FD is 409600
        via 192.168.12.1 (409600/128256), Ethernet0/0
P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.13.0/24, 2 successors, FD is 307200
        via 192.168.12.1 (307200/281600), Ethernet0/0
        via 192.168.23.3 (307200/281600), Ethernet0/1
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
R3#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.3)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 10.0.0.0/22, 1 successors, FD is 409600
        via 192.168.13.1 (409600/128256), Ethernet0/1
P 10.0.1.0/24, 1 successors, FD is 435200
        via 192.168.23.2 (435200/409600), Ethernet0/0
P 192.168.12.0/24, 2 successors, FD is 307200
        via 192.168.13.1 (307200/281600), Ethernet0/1
        via 192.168.23.2 (307200/281600), Ethernet0/0
P 192.168.13.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0

再看看 R3 的 Route Table,設定 Leak-map 的結果是 R3 如果想到 10.0.1.0 / 24 會用 R3→R2→R1 這條 Path,其餘的 10.0.0.0 / 22 才會用 R3→R1。

R3#show ip route | begin Gateway
Gateway of last resort is not set

D    192.168.12.0/24 [90/307200] via 192.168.23.2, 00:26:38, Ethernet0/0
                     [90/307200] via 192.168.13.1, 00:26:38, Ethernet0/1
C    192.168.13.0/24 is directly connected, Ethernet0/1
     10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
D       10.0.0.0/22 [90/409600] via 192.168.13.1, 00:25:16, Ethernet0/1
D       10.0.1.0/24 [90/435200] via 192.168.23.2, 00:03:37, Ethernet0/0
C    192.168.23.0/24 is directly connected, Ethernet0/0

Query and Reply

早前說過,EIGRP 使用了 Feasible Successor 的機制,當發現使用中的 Route 出現問題時,立刻使用 Feasible Successor 頂上。不過,在沒有 Feasible Successor 的情況下,EIGRP 也不是把 Route Drop 了就算,它還是會盡力找找有沒有其他方法到達目的地,辦法就是使用 Query Message,向相鄰的 Neighbor 查詢有沒有到達目的地的方法,當一隻 Router 收到 Query Message,如果它有到達目的地的路徑,它就會使用 Reply Message 回覆,如果它也不知道的話,它會再向相鄰的 Neighbor 發 Query Message,如是者一路問下去,希望網絡中有 Router 能夠回覆答案。

eigrp

在上圖的例子中,假設 R1 有去 172.16.20.0 / 24 的 Route,但這條 Route 突然中斷了,由於 R1 並沒有到 172.16.20.0 / 24 的 Feasible Successor,因此 R1 向其他 Neighbor 發出 Query。

  1. 172.16.20.0 / 24 突然失效了,R1 想找另外的辦法到這個網絡。
  2. R1 向 R2 和 R4 發出 Query,查詢有沒有到 172.16.20.0 / 24 的辦法。
  3. R2 和 R4 都無法到達 172.16.20.0 / 24,於是它們又分別向 R3 和 R5 發出 Query。
  4. R3 沒有方法到達,由於它已沒有其他 Neighbor 可以查詢,於是他向 R2 發 Reply,表示沒有方法到達,R2 收到後也向 R1 發 Reply ,表示不能到達。
  5. R5 有去 172.16.20.0 / 24 的 Route,因此發 Reply 給 R4 表示他知道怎樣去這個網絡,R4 收到後也 Reply R1 表示可以到達,最 R1 便更新的 EIGRP Route 把 172.16.20.0 / 24 的路徑指向 R4。

當 R1 發出 Query 後,172.16.20.0 / 24 這條 Route 會由 Passive 轉到 Active 的狀態,意思是正向其他 Neighbor 查詢,直到收齊所有 Reply 為止,如果所有 Reply 都表示沒有路徑到達,EIGRP 就會把這條 Route 移除。但有一個比較特別的情況就是發出 Query 後,因為某些原因是沒法集齊 Reply (可能是網絡問題),EIGRP 會一直等一直等,直到 Active Timer (預設為 3 分鐘) 過了才會停止,判這條 Route 為 Stuck In Active (SIA) 而失效。

正常情況下,EIGRP Topolog Table 中看到的 Route 應該是 Passive (P)。

R2#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.2)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 172.16.20.0/24, 1 successors, FD is 409600
        via 192.168.12.1 (409600/128256), Ethernet0/0
P 172.16.0.0/16, 1 successors, FD is 409600
        via 192.168.12.1 (409600/128256), Ethernet0/0

發出 Query 後會變成 Active (A),並等待回覆。

R2#show ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.23.2)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 192.168.12.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/0
P 192.168.23.0/24, 1 successors, FD is 281600
        via Connected, Ethernet0/1
P 172.16.20.0/24, 1 successors, FD is 409600, U
        via 192.168.12.1 (409600/128256), Ethernet0/0
A 172.16.0.0/16, 1 successors, FD is Inaccessible, Q
    1 replies, active 00:00:25, query-origin: Multiple Origins
      Remaining replies:
         via 192.168.23.3, r, Ethernet0/1

如果收到回覆後會變回 Passive,但如果過了 3 分鐘 (Active Timer) 仍沒有收到回覆的話,EIGRP 就會判 Stuck in Active 而把 Route 移除。

R2#
*Mar  1 00:27:04.063: %DUAL-3-SIA: Route 172.16.0.0/16 stuck-in-active state in IP-EIGRP(0) 1.  Cleaning up
R2#
*Mar  1 00:27:04.067: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 192.168.23.3 (Ethernet0/1) is down: stuck in active

Stub

Query and Reply 機制產生了一個問題,就是如果 EIGRP 網絡非常巨大的話,Router 等待 Reply 的時間就會相對地增加了,因此,我們得想一點辦法去控制 Query 的 Boundary,在一些不必要的地方讓 Query 不會發生,減少 Query Message 也就能減少 Passive 的時間。但究竟那些才是不應該發生 Query 的地方呢?

eigrp

在這個網絡中,R2 和 R3 位於一個 Branch Office,並沒有連接到其他網絡,即是說,他們在收到 Query 的時候,只會 Reply 「沒法到達」,無論問多少次,結果也是一樣,向他們 Query 是多餘的。因此,我們可以把 R2 設為 EIGRP Stub,其他 Router 並不會向 Stub 發出 Query。設定方法十分簡單:

R2(config)#router eigrp 1
R2(config-router)#eigrp stub

我們也可為 Stub 加入一些附加的功能,例如在 eigrp stub 後加上一個 Keyword receive-only ,意思是讓這個 Stub Router 不會發佈 Route,只會接收。

R2(config)#router eigrp 1
R2(config-router)#eigrp stub receive-only

除了 receive-only 之外,還有其他的選擇:

Keywords 功能
connected 只發佈 Connected Route
receive-only 只接收不發佈
redistributed 只發佈 Redistributed Route
static 只發佈 Static Route
summary 只發佈 Summary Route

Named Mode

本文從起始以來一直使用的 EIGRP 設定方法稱為 Classic Mode,而 EIGRP 還有另一種名為 Named Mode 的設定方法,設定格式有很大改變,請看以下比較。

R1#show run | s eigrp
router eigrp 1
 no auto-summary
 redistibute connected
 network 192.168.12.0
 eigrp stub redistributed
R1#
R1#show run interface ethernet 1/0 | i eigrp
 ip summary-address eigrp 1 192.168.1.0 255.255.255.0

如把以上 Classic Mode 設定轉為 Named Mode,格式如下:

R1#show run | s eigrp
router eigrp JANNET
 !
 address-family ipv4 unicast autonomous-system 1
  !
  af-interface Ethernet1/0
   summary-address 192.168.1.0 255.255.255.0
  exit-af-interface
  !
  topology base
   no auto-summary
   redistibute connected
  exit-af-topology
  network 192.168.12.0
  eigrp stub redistributed
 exit-address-family

Classic Mode 好好的,為什麼要搞一個 Named Mode 呢?有以下幾個原因。

Multi Address Family

能同時支援多個 Address Family (AF),例如一個 EIGPR Process 能同時處理 IPv4 和 IPv6 的路由交換。

AF Interface Configuration Mode

以前要在 Physical Interface 設定的選項都統一在 Named Mode 裡的 AF Interface 中設定,例如:Split-horizon、Summary Address 等等。

Wide Metric

以往 Metric 公式中,Bandwidth 達到 100Mb 以上的路徑並未能在 Metric 中反映出分別,新的公式把份子放大 256 倍,另外加入了 K6,新公式如下:

Metric = [K1 *  BW * 256 + (K2 * BW) / (256-load) + K3 * delay *256 + K6 * Extended Attributes] * [K5 / (reliability + K4)]

where BW = 10^7 Kbit * 256 / interface bandwidth (Kbit)
delay = interface delay (picosecond) * 256 / 1000000

預設 K1=1, K2=0, K3=1, K4=0, K5=0, K6=0,所以公式會被簡化成:

Metric = (BW * 256 + delay * 256)
= (BW + delay) * 256

where BW = 10^7 Kbit * 256 / interface bandwidth (Kbit)
delay = interface delay (picosecond) * 256 / 1000000

明顯地,Named Mode 的 Metric 值會比 Classic Mode 的大得多,稱為 Wide Metric。

Metric Rib-scale

傳統 Metric 值長度為 32 Bits,而 Wide Metric 值長度則為 64 Bits。問題出現了,Route Table 所容納的 Metric 值長度亦是 32 Bits (最大值:4,294,967,296),當 Route 的 Metric 值過大時會出現問題,請看以下例子。

eigrp

圖中 R1 使用 Named Mode,而 R2 使用 Classic Mode,R2 把 L0 Redistribute 到 EIGRP。

R1#show run | s eigrp
router eigrp JANNET
 !
 address-family ipv4 unicast autonomous-system 1
  !
  topology base
  exit-af-topology
  network 192.168.12.0
 exit-address-family
R2#show run | s eigrp
router eigrp 1
 network 192.168.12.0
 redistribute connected metric 1 1 1 1 1

可是 R1 的 Route Table 並沒有 EIGRP Route。

R1#show ip route
Codes: L - local, 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 route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.12.0/24 is directly connected, Ethernet1/0
L        192.168.12.1/32 is directly connected, Ethernet1/0

看看 EIGRP Topology 可見 Route 是收到的,可是 Route 的 Metric 值是 655,426,191,360,遠遠大於 Route Table 所能容納的最大值 4,294,967,296,因而無法加進 Route Table。

R1#show ip eigrp topology 
EIGRP-IPv4 VR(JANNET) Topology Table for AS(1)/ID(192.168.12.2)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status 

P 192.168.12.0/24, 1 successors, FD is 131072000
        via Connected, Ethernet1/0
P 2.2.2.2/32, 0 successors, FD is Infinity
        via 192.168.12.2 (655426191360/655360655360), Ethernet1/0

有兩個方法可以解決此問題,一是調高 Redistribute 時的 Bandwidth 值,Metric 自然減少。另一方法是調整 Metric Rib-scale 基數。

Rib-scale 的原理很簡單,Route Metric 值會先除以 Rib-scale 才放進 Route Table。Rib-scale 預設是 128。如果把 Rib-scale 設為 160,那麽 Metric = 655,426,191,360 / 160 = 4,096,413,696,少於 Route Table Metric 最大值,Route 就正常被記在 Route Table 了。

R1(config)#router eigrp JANNET
R1(config-router)#address-family ipv4 autonomous-system 1
R1(config-router-af)#metric rib-scale 160
R1(config-router-af)#end
R1#show ip route
Codes: L - local, 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 route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
D EX     2.2.2.2 [170/4096413696] via 192.168.12.2, 00:01:48, Ethernet1/0
      192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.12.0/24 is directly connected, Ethernet1/0
L        192.168.12.1/32 is directly connected, Ethernet1/0

相關主題

發佈留言

2014-07-28

Posted In: Layer 3 網絡技術, menu-tall-2-zh-hant

Leave a Comment