メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

EIGRPのDiffusing Computation 経路追加編

前回は、EIGRPネイバーに対し代替経路をQueryで問い合わせした際、何らかの理由でReply(返答)を受信出来ず、メトリック値の再計算対象となる経路がActiveステータス付与のままで通信が出来ずStuck In Active(SIA)状態になっている様子を見た。

今回は、新規に経路が追加された際に、LinkUpをトリガーとしたDiffusing Computationの様子を見てみた。
新規に追加された経路はすぐに使用可能になる訳ではなく、メトリック値を最大値にしたものを一旦トポロジテーブルに載せてから、UpdateやQueryの送受信を通してメトリック値が再計算され、再度トポロジテーブルに載る...という点がミソ。
新規経路の"仮載せ"からメトリック値再計算までの流れ以外については、Diffusing Computationの流れは他とほぼ同じである。
そもそもDiffusing Computationとは?に関しては、以下の記事を参照。
https://debslink.hatenadiary.jp/entry/20150415/1429107405 EIGRPのDiffusing Computation


当方の環境
構成 (クリックすると拡大表示)

MI-CAT6503-SP2-SW-01:Catalyst6503
MI-CAT3750-ME-SW-03:Catalyst3750Metro
MI-CAT6503-SP2-SW-01のGi3/2〜MI-CAT3750-ME-SW-03のFa1/0/2間の回線を新規に開通。
MI-CAT6503-SP2-SW-01側にて、新規経路10.200.1.4/30を検知〜トポロジテーブルに載せるまでの様子を見てみた。


経路追加を契機にしたDUAL処理
1.MI-CAT6503-SP2-SW-01側にて、EIGRPネイバ関係を確認。
Gi3/2〜Fa1/0/2間の回線が開通前の段階である為。CAT3750ME-3に対しネイバーは1本のみ。

MI-CAT6503-SP2-SW-01#show ip eigrp neighbor
IP-EIGRP neighbors for process 1
H Address      Interface   Hold Uptime SRT  RTO Q Seq
                      (sec)    (ms)    Cnt Num
0 10.200.1.2      Gi3/1    7 00:01:04  4   300 0 64

MI-CAT6503-SP2-SW-01#


2.MI-CAT6503-SP2-SW-01側にてトポロジテーブルを確認。
10.200.1.4/30は開通前である為に当然の事ながら、10.200.1.4/30はまだ載っていない。

MI-CAT6503-SP2-SW-01#show ip eigrp topology all-links 
IP-EIGRP Topology Table for AS(1)/ID(10.1.1.1)

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

P 10.1.1.2/32, 1 successors, FD is 133120, serno 4
    via 10.200.1.2 (133120/128256), GigabitEthernet3/1
P 10.1.1.1/32, 1 successors, FD is 128256, serno 1
    via Connected, Loopback0
P 10.200.1.0/30, 1 successors, FD is 5120, serno 2
    via Connected, GigabitEthernet3/1
P 10.200.10.0/24, 1 successors, FD is 7680, serno 3
    via 10.200.1.2 (7680/5120), GigabitEthernet3/1


3.debugコマンドを打ち、送受信するEIGRPパケットと、FSM(Finite State Machine)でDUAL処理の遷移を確認。

MI-CAT6503-SP2-SW-01#debug eigrp fsm
EIGRP FSM Events/Actions debugging is on
MI-CAT6503-SP2-SW-01#
MI-CAT6503-SP2-SW-01#debug eigrp packets 
EIGRP Packets debugging is on
  (UPDATE, REQUEST, QUERY, REPLY, HELLO, IPXSAP, PROBE, ACK, STUB, SIAQUERY, SIAREPLY)
MI-CAT6503-SP2-SW-01#


4.ここで、MI-CAT6503-SP2-SW-01のGi3/2〜MI-CAT3750-ME-SW-03のFa1/0/2間をUTPケーブルで接続し、回線を新規開通。
※ MI-CAT6503-SP2-SW-01のGi3/2とMI-CAT3750-ME-SW-03のFa1/0/2のインターフェース設定、EIGRPの設定は接続前に終えている。

下記ログ中の[1]にてGi3/2のLinkUpを検知し、即座に②の出力のとおりメトリック値が最大値(4294967295)でトポロジテーブルに載せている。

19:03:57: EIGRP: Received HELLO on GigabitEthernet3/1 nbr 10.200.1.2
19:03:57:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
19:03:58: EIGRP: Sending HELLO on GigabitEthernet3/1
19:03:58:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
19:04:00: %LINK-3-UPDOWN: Interface GigabitEthernet3/2, changed state to up  [1] 
19:04:00: %LINK-SP-3-UPDOWN: Interface GigabitEthernet3/2, changed state to up  [1] 
19:04:00: DUAL: dest(10.200.1.4/30) not active
19:04:00: DUAL: rcvupdate: 10.200.1.4/30 via Connected metric 5120/0  [2] 
19:04:00: DUAL: Find FS for dest 10.200.1.4/30. FD is 4294967295, RD is 4294967295 found  [2] 
19:04:00: DUAL: RT installed 10.200.1.4/30 via 0.0.0.0  [2] 
19:04:00: DUAL: Send update about 10.200.1.4/30.  Reason: metric chg  [3] 
19:04:00: DUAL: Send update about 10.200.1.4/30.  Reason: new if  [3] 
19:04:00: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet3/2, changed state to up
19:04:00: EIGRP: Enqueueing UPDATE on GigabitEthernet3/1 iidbQ un/rely 0/1 serno 5-5
19:04:00: EIGRP: Sending UPDATE on GigabitEthernet3/1  [3] 
19:04:00:  AS 1, Flags 0x0, Seq 4/0 idbQ 0/0 iidbQ un/rely 0/0 serno 5-5
19:04:00: EIGRP: Received ACK on GigabitEthernet3/1 nbr 10.200.1.2  [4] 
19:04:00:  AS 1, Flags 0x0, Seq 0/4 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
19:04:00: EIGRP: GigabitEthernet3/1 multicast flow blocking cleared
19:04:00: EIGRP: Received UPDATE on GigabitEthernet3/1 nbr 10.200.1.2  [5] 
19:04:00:  AS 1, Flags 0x0, Seq 65/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
19:04:00: EIGRP: Enqueueing ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:00:  Ack seq 65 iidbQ un/rely 0/0 peerQ un/rely 1/0
19:04:00: EIGRP: Sending ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:00:  AS 1, Flags 0x0, Seq 0/65 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 1/0

上記の一連の流れは以下のとおり。

[1] ここでMI-CAT6503-SP2-SW-01のGi3/2〜MI-CAT3750-ME-SW-03のFa1/0/2間をケーブル接続。LinkUpする。
[2] メトリック値が最大値という形でUpdateを受信した事にして(rcvupdateの行)、一旦トポロジテーブルに載せる。
[3] ネイバーに対し、10.200.1.4/30の情報(new ifとmetric chg。metric chgとは最大値4294967295の事)を載せたUpdateを送信。
[4] 上記③のUpdateに対する応答。
[5] ネイバー(MI-CAT3750-ME-SW-03)のトポロジテーブルに10.200.1.4/30が載った旨の内容を、Updateにて通知を受ける。
しかし、この段階ではMI-CAT6503-SP2-SW-01のGi3/2からMI-CAT3750-ME-SW-03のFa1/0/2の間はユーザトラヒックは流れない。何故なら、EIGRPネイバー関係が確立していない上、トポロジテーブルには"一旦"載っているだけだから。

19:04:00: EIGRP: Received HELLO on GigabitEthernet3/1 nbr 10.200.1.2
19:04:00:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
19:04:01: EIGRP: Sending HELLO on GigabitEthernet3/1
19:04:01:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
19:04:01: %LINEPROTO-SP-5-UPDOWN: Line protocol on Interface GigabitEthernet3/2, changed state to up
19:04:02: EIGRP: Received QUERY on GigabitEthernet3/1 nbr 10.200.1.2 [6]
19:04:02:  AS 1, Flags 0x0, Seq 66/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
19:04:02: EIGRP: Enqueueing ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:02:  Ack seq 66 iidbQ un/rely 0/0 peerQ un/rely 1/0
19:04:02: DUAL: dest(10.200.1.4/30) not active
19:04:02: DUAL: rcvquery: 10.200.1.4/30 via 10.200.1.2 metric 4294967295/4294967295, RD is 5120  [6] 
19:04:02: DUAL: send REPLY(r1/n1) about 10.200.1.4/30 to 10.200.1.2
19:04:02: EIGRP: Sending ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:02:  AS 1, Flags 0x0, Seq 0/66 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 1/0
19:04:02: EIGRP: Enqueueing REPLY on GigabitEthernet3/1 nbr 10.200.1.2 iidbQ un/rely 0/1 peerQ 
un/rely 0/0 serno 6-6  [7] 
19:04:02: EIGRP: Requeued unicast on GigabitEthernet3/1
19:04:02: EIGRP: Sending REPLY on GigabitEthernet3/1 nbr 10.200.1.2  [7] 
19:04:02:  AS 1, Flags 0x0, Seq 5/66 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 6-6
19:04:02: EIGRP: Received ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:02:  AS 1, Flags 0x0, Seq 0/5 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
19:04:02: DUAL: Removing dest 10.200.1.4/30, nexthop 10.200.1.2  [8] 
19:04:02: EIGRP: Received UPDATE on GigabitEthernet3/1 nbr 10.200.1.2  [9] 
19:04:02:  AS 1, Flags 0x0, Seq 67/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
19:04:02: EIGRP: Enqueueing ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:02:  Ack seq 67 iidbQ un/rely 0/0 peerQ un/rely 1/0
19:04:02: DUAL: dest(10.200.1.4/30) not active
19:04:02: DUAL: rcvupdate: 10.200.1.4/30 via 10.200.1.2 metric 7680/5120  [9] 
19:04:02: DUAL: Find FS for dest 10.200.1.4/30. FD is 5120, RD is 5120  [10] 
19:04:02: DUAL:     0.0.0.0 metric 5120/0
19:04:02: DUAL:     10.200.1.2 metric 7680/5120 found Dmin is 5120
19:04:02: EIGRP: Sending ACK on GigabitEthernet3/1 nbr 10.200.1.2
19:04:02:  AS 1, Flags 0x0, Seq 0/67 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 1/0
19:04:03: EIGRP: Received HELLO on GigabitEthernet3/1 nbr 10.200.1.2
19:04:03:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0

[6] 10.200.1.4/30に対するQueryをネイバーから受信。10.200.1.4/30への最適な経路ってどこ? みたいな感じ。
[7] 上記[6]に対するReplyをネイバーに返信。Gi3/1から返信している。
[8] 10.200.1.4/30に関する情報を一旦削除している。メトリック値が最大値のままである為。
[9] ネイバーからUpdateを受信。[9]に出力されているメトリック値は、ネイバー側にてメトリック値を再計算した結果が加味されている。
[10] 上記[9]の内容を受けて、フィージブルサクセサを検索。
サクセサは0.0.0.0(10.200.1.4/30はGi3/2直接接続)でフィージブルサクセサは10.200.1.2。
FD値(Feasible Distance値)は5120、Reported Distance値(Advertised Distance値)も5120。

19:04:03: EIGRP: Sending HELLO on GigabitEthernet3/2  [11] 
19:04:03:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
19:04:03: EIGRP: Received HELLO on GigabitEthernet3/2 nbr 10.200.1.6  [11] 
19:04:03:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0
19:04:03: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.200.1.6 (GigabitEthernet3/2) is up:
 new adjacency  [11] 
19:04:03: EIGRP: Enqueueing UPDATE on GigabitEthernet3/2 nbr 10.200.1.6 iidbQ un/rely 0/1 
peerQ un/rely 0/0  [12] 
19:04:03: EIGRP: Requeued unicast on GigabitEthernet3/2
19:04:03: EIGRP: Sending HELLO on GigabitEthernet3/2
19:04:03:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
19:04:03: EIGRP: Sending UPDATE on GigabitEthernet3/2 nbr 10.200.1.6  [12] 
19:04:03:  AS 1, Flags 0x1, Seq 6/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
19:04:04: EIGRP: Sending HELLO on GigabitEthernet3/1
19:04:04:  AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
19:04:05: EIGRP: Sending UPDATE on GigabitEthernet3/2 nbr 10.200.1.6, retry 1, RTO 3000  [13] 
19:04:05:  AS 1, Flags 0x1, Seq 6/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
19:04:05: EIGRP: Received UPDATE on GigabitEthernet3/2 nbr 10.200.1.6  [13] 
19:04:05:  AS 1, Flags 0x1, Seq 68/6 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
19:04:05: EIGRP: Enqueueing UPDATE on GigabitEthernet3/2 nbr 10.200.1.6 iidbQ un/rely 0/1 peerQ 
un/rely 0/0 serno 1-5
19:04:05: EIGRP: Enqueueing ACK on GigabitEthernet3/2 nbr 10.200.1.6
19:04:05:  Ack seq 68 iidbQ un/rely 0/1 peerQ un/rely 1/0
19:04:05: EIGRP: Forcing multicast xmit on GigabitEthernet3/2
19:04:05: EIGRP: Requeued unicast on GigabitEthernet3/2
19:04:05: EIGRP: Suppressed ACK 68 to 10.200.1.6 on GigabitEthernet3/2
19:04:05: EIGRP: Sending UPDATE on GigabitEthernet3/2 nbr 10.200.1.6
19:04:05:   AS 1, Flags 0x8, Seq 7/68 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 1-5
19:04:05: EIGRP: Received ACK on GigabitEthernet3/2 nbr 10.200.1.6
19:04:05:  AS 1, Flags 0x0, Seq 0/7 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
19:04:05: EIGRP: Received UPDATE on GigabitEthernet3/2 nbr 10.200.1.6</span>  [14] 
19:04:05:  AS 1, Flags 0x0, Seq 69/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
19:04:05: EIGRP: Enqueueing ACK on GigabitEthernet3/2 nbr 10.200.1.6
19:04:05:  Ack seq 69 iidbQ un/rely 0/0 peerQ un/rely 1/0
19:04:05: DUAL: dest(10.200.10.0/24) not active
19:04:05: DUAL: rcvupdate: 10.200.10.0/24 via 10.200.1.6 metric 7680/5120  [14] 
19:04:05: DUAL: Find FS for dest 10.200.10.0/24. FD is 7680, RD is 7680  [15] 
19:04:05: DUAL:     10.200.1.2 metric 7680/5120
19:04:05: DUAL:     10.200.1.6 metric 7680/5120 found Dmin is 7680
19:04:05: DUAL: RT installed 10.200.10.0/24 via 10.200.1.2  [16] 
19:04:05: DUAL: RT installed 10.200.10.0/24 via 10.200.1.6  [16] 
19:04:05: DUAL: Send update about 10.200.10.0/24.  Reason: new if  [17] 
19:04:05: DUAL: dest(10.1.1.2/32) not active
19:04:05: DUAL: rcvupdate: 10.1.1.2/32 via 10.200.1.6 metric 133120/128256  [18] 
19:04:05: DUAL: Find FS for dest 10.1.1.2/32. FD is 133120, RD is 133120
19:04:05: DUAL:     10.200.1.2 metric 133120/128256
19:04:05: DUAL:     10.200.1.6 metric 133120/128256 found Dmin is 133120
19:04:05: DUAL: RT installed 10.1.1.2/32 via 10.200.1.2
19:04:05: DUAL: RT installed 10.1.1.2/32 via 10.200.1.6
19:04:05: DUAL: Send update about 10.1.1.2/32.  Reason: new if
19:04:05: DUAL: dest(10.200.1.0/30) not active
19:04:05: DUAL: rcvupdate: 10.200.1.0/30 via 10.200.1.6 metric 12800/10240  [19] 
19:04:05: DUAL: Find FS for dest 10.200.1.0/30. FD is 5120, RD is 5120
19:04:05: DUAL:     0.0.0.0 metric 5120/0
19:04:05: DUAL:     10.200.1.6 metric 12800/10240 found Dmin is 5120
19:04:05: EIGRP: Sending ACK on GigabitEthernet3/2 nbr 10.200.1.6  [20] 
19:04:05:  AS 1, Flags 0x0, Seq 0/69 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 1/0

[11] Gi3/2を使用してHelloを送受信。送受信後はEIGRPネイバー関係確立。
[12] 上記[11]のEIGRPネイバー関係確立を受けて、Updateを送信。下記[13]の「retry 1」にあるとおり[12]で送信したUpdateは無視されたようだ。
[13] Updateを再送。再送後すぐにUpdateを受信。
[14] Updateをネイバーから受信。
[15] 上記[11]にてMI-CAT3750-ME-SW-03との間でEIGRPネイバー関係は2本確立されている。
そうなると10.200.10.0/24への経路が10.200.1.4/30が追加されて2本存在(10.200.1.0/30と10.200.1.4/30)する事になる為、宛先10.200.10.0/24に関してメトリック値を再計算。
再計算の結果、両経路共にメトリック値が同一である為、サクセサは2本という事になる。
[16] 上記[15]の結果をトポロジテーブルに反映。
[17] 上記[16]の結果をネイバーへUpdateで通知。
[18] 10.1.1.2/32(MI-CAT3750-ME-SW-03のLo0)に対しても、上記[14]と同様にUpdateを受信後、経路が追加されて2本(10.200.1.0/30と10.200.1.4/30)存在する事を加味したメトリック値を再計算。再計算の結果はトポロジテーブルに反映。
[19] 10.200.1.0/30(MI-CAT3750-ME-SW-03のGi3/1直下)に対しても、上記[14]と同様にUpdateを受信後、経路が追加されて2本(10.200.1.0/30と10.200.1.4/30)存在する事を加味したメトリック値を再計算。再計算の結果はトポロジテーブルに反映。
[20] 上記[14]に対する応答をAckで送信。


5.この状態で、MI-CAT6503-SP2-SW-01のEIGRPネイバー関係を確認。
新規開通した経路を収容するポートGi3/2のエントリ(10.200.1.6)が追加されている事がわかる。

MI-CAT6503-SP2-SW-01#show ip eigrp neighbor
IP-EIGRP neighbors for process 1
H  Address      Interface   Hold Uptime SRTT RTO  Q  Seq
                    (sec)    (ms)    Cnt Num
1  10.200.1.6     Gi3/2     7 00:01:31  1  200 0 70
0  10.200.1.2     Gi3/1     7 19:03:36  3  200 0 71

MI-CAT6503-SP2-SW-01#


6.この状態で、MI-CAT6503-SP2-SW-01のEIGRPトポロジテーブルを確認。
10.200.1.4/30のエントリが追加されている事がわかる。

MI-CAT6503-SP2-SW-01#show ip eigrp topology all-links 
IP-EIGRP Topology Table for AS(1)/ID(10.1.1.1)

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

P 10.1.1.2/32, 2 successors, FD is 133120, serno 8
    via 10.200.1.6 (133120/128256), GigabitEthernet3/2
    via 10.200.1.2 (133120/128256), GigabitEthernet3/1
P 10.1.1.1/32, 1 successors, FD is 128256, serno 1
    via Connected, Loopback0
    via 10.200.1.2 (135680/133120), GigabitEthernet3/1
P 10.200.1.0/30, 1 successors, FD is 5120, serno 2
    via Connected, GigabitEthernet3/1
    via 10.200.1.6 (12800/10240), GigabitEthernet3/2
P 10.200.1.4/30, 1 successors, FD is 5120, serno 5
    via Connected, GigabitEthernet3/2
    via 10.200.1.2 (7680/5120), GigabitEthernet3/1
P 10.200.10.0/24, 2 successors, FD is 7680, serno 7
    via 10.200.1.6 (7680/5120), GigabitEthernet3/2
    via 10.200.1.2 (7680/5120), GigabitEthernet3/1

MI-CAT6503-SP2-SW-01#


リンク集
https://www.amazon.co.jp/dp/1578701651 EIGRP Network Design Solutions
https://debslink.hatenadiary.jp/entry/20150416/1429195527 EIGRPのLocal Computation
https://debslink.hatenadiary.jp/entry/20150415/1429107405 EIGRPのDiffusing Computation
https://debslink.hatenadiary.jp/entry/20150419/1429422783 EIGRPのDiffusing Computationその2
https://debslink.hatenadiary.jp/entry/20150425/1429926903 EIGRPのDiffusing Computation SIA編
https://debslink.hatenadiary.jp/entry/20150417/1429268810 EIGRPの優先ルートの選定 offset-list編