前回は、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編