はじめに
このドキュメントでは、IS-ISマイクロループの技術概要、発生する条件、および防止に使用する原理とメカニズムについて説明します。
前提条件
要 件
Intermediate System to Intermediate System(ISIS)セグメントルーティング(SR)バージョン6に関する基本的な知識があることが推奨されます。
使用するコンポーネント
このドキュメントの情報は、Device: Network Convergence System(NCS)540、NCS 5500に基づくものです。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されたものです。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
マイクロループの概要
IS-ISは、高速コンバージェンスと拡張性により、大規模なサービスプロバイダーネットワークで使用されている広く導入されているリンクステートルーティングプロトコルです。ただし、リンクやノードの障害などのトポロジ変更時に、ルータがForwarding Information Base(FIB;転送情報ベース)を別々のタイミングで更新する間に、一時的な転送の不整合(一般にマイクロループと呼ばれます)が発生することがあります。これらのマイクロループは、一時的なパケット損失、遅延の増加、またはトラフィックのブラックホールの発生につながり、リアルタイムで遅延の影響を受けやすいアプリケーションに悪影響を与える可能性があります。
IS-ISルーティングプロトコルは、ネットワークコンバージェンス中のこのような一時的な転送ループを防止するために、セグメントルーティング(SRおよびSRv6)マイクロループ回避メカニズムを活用します。これらのメカニズムにより、ネットワークが新しい定常状態に移行している間でも、ループフリー転送が保証されます。

図 1.ネットワークトポロジ図
一般的な設定
interface Loopback100
ipv6 address <>
interface <>
ipv6 enable
router isis <>
is-type level-2-only
net <>
address-family ipv6 unicast
metric-style wide
microloop avoidance segment-routing ## enables Microloop avoidance mechanism
microloop avoidance rib-update-delay <> ## specify the time in ms
router-id Loopback100
segment-routing srv6
locator <>
interface Loopback100
address-family ipv6 unicast
interface <>
point-to-point
address-family ipv6 unicast
fast-reroute per-prefix
fast-reroute per-prefix ti-lfa ## enables topology-independent loop-free alternates (TI-LFA)
segment-routing
srv6
encapsulation
source-address <>
!
locators
locator <>
micro-segment behavior unode psp-usd ## enables SRv6 Micro-SIDs (uSIDs) the PSP-USD (Penultimate Segment Pop - Ultimate Segment Pop) flavor
prefix <configure the locator >
router bgp <>
vrf <>
address-family <> unicast
segment-routing srv6 ## steering the packet using SRv6 uSID
locator <>
定常状態で
ネットワークに変更がない場合、10.10.1.0/24ネットワークはボーダーゲートウェイプロトコル(BGP)を介してプロバイダーエッジ1(PE1)からプロバイダーエッジ2(PE2)にアドバタイズされ、10.10.20.0/24ネットワークはPE2からPE1にアドバタイズされます。
RP/0/RP0/CPU0:PE1#show bgp vrf mobility 10.10.1.0/24 detail
BGP routing table entry for 10.10.1.0/24, Route Distinguisher: 10.10.11.11:0
SRv6-VPN SID: fc00:1000:a810:e003::/64
Local
0.0.0.0 from 0.0.0.0 (10.10.11.11), if-handle 0x3c000090
Origin incomplete, metric 0, localpref 100, weight 32768, valid, redistributed, best, group-best, import-candidate
Received Path ID 0, Local Path ID 1, version 8
Extended community:
注:fc00:1000:a810:e003::/64 >> fc00:1000:a810 ## locator of PE1, e003 ##関数。
RP/0/RP0/CPU0: PE1#show bgp vrf mobility 10.10.20.0/24 detail
Local
fc00:1000:a822::22 (metric 2000) from fc00:1000:a822::22 (10.10.22.22), if-handle 0x00000000
Received Label 0xe0030
Origin incomplete, metric 0, localpref 100, valid, internal, best, group-best, import-candidate, imported
Received Path ID 0, Local Path ID 1, version 714
Extended community:
PSID-Type:L3, SubTLV Count:1, R:0x00,
SubTLV:
T:1(Sid information), Sid:fc00:1000:a820::, F:0x00, R2:0x00, Behavior:63, R3:0x00, SS-TLV Count:1
SubSubTLV:
T:1(Sid structure):
Length [Loc-blk,Loc-node,Func,Arg]:[32,16,16,0], Tpose-len:16, Tpose-offset:48
Source AFI: VPNv4 Unicast, Source VRF: default, Source Route Distinguisher: 10.10.22.22:2
注:この10.10.20.0/24は、ロケータsid fc00:1000:a820::および関数e0030でPE1上のPE2から受信されます。
RP/0/RP0/CPU0: PE1#show route vrf mobility 10.10.20.0/24 detail
Known via "bgp 100", distance 200, metric 0, type internal
Routing Descriptor Blocks
fc00:1000:a822::22, from fc00:1000:a822::22
<snip>
SRv6 Headend: H.Encaps.Red [f3216], SID-list {fc00:1000:a820:e003::}
注:定常状態では、カスタマーエッジ2(CE2)宛てのパケットは、インターネットプロトコルバージョン6(IPv6)ヘッダー宛先アドレスfc00:1000:a820:e003::を使用してPE2に送信されます。
STEADY状態のPE1によって送信されるパケット。
Frame 2: 136 bytes on wire (1088 bits), 136 bytes captured (1088 bits)
Ethernet II, Src: Cisco_a7:8a:0d (c4:b2:39:a7:8a:0d), Dst: Cisco_ff:d4:16 (a0:b4:39:ff:d4:16)
Destination: Cisco_ff:d4:16 (a0:b4:39:ff:d4:16)
Source: Cisco_a7:8a:0d (c4:b2:39:a7:8a:0d)
Type: IPv6 (0x86dd)
Internet Protocol Version 6, Src: fc00:1000:a811::11, Dst: fc00:1000:a820:e003::
0110 .... = Version: 6
<0110 .... = Version: 6 [This field makes the filter match on "ip.version == 6" possible]>
.... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
.... 0000 0000 0000 1110 1111 = Flow Label: 0x000ef
Payload Length: 82
Next Header: IPIP (4)
Hop Limit: 254
Source Address: fc00:1000:a811::11
<Source or Destination Address: fc00:1000:a811::11>
<[Source Host: fc00:1000:a811::11]>
<[Source or Destination Host: fc00:1000:a811::11]>
Destination Address: fc00:1000:a820:e003::
<Source or Destination Address: fc00:1000:a820:e003::>
<[Destination Host: fc00:1000:a820:e003::]>
<[Source or Destination Host: fc00:1000:a820:e003::]>
Internet Protocol Version 4, Src: 10.10.1.2, Dst: 10.10.20.2
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
注:
- 送信元:fc00:1000:a811::11 >>送信元アドレスとして使用されるPE1のループバック100。
- Dst : fc00:1000:a820:e003:: >> PE2:関数のロケータ。
- IPv6トランスポートヘッダー、次はIPv4ペイロード。
Topology-Independent - Loop-Free Alternate(TI-LFA)による、計算されたプライマリおよびバックアップパス。
RP/0/RP0/CPU0:PE1#show cef ipv6 fc00:1000:a820::
via fe80::a2b4:39ff:feff:d416/128, TenGigE0/0/0/9, 11 dependencies, weight 0, class 0, backup (TI-LFA) [flags 0xb00]
path-idx 0 NHID 0x0 [0x8ef0f2b0 0x0]
next hop fe80::a2b4:39ff:feff:d416/128, Repair Node(s): fc00:1000:a802::2
local adjacency
SRv6 H.Insert.Red SID-list {fc00:1000:a802::}
via fe80::9ee1:76ff:feca:e8a8/128, TenGigE0/0/0/8, 4 dependencies, weight 0, class 0, protected [flags 0x400]
path-idx 1 bkup-idx 0 NHID 0x0 [0x8f2db710 0x0]
next hop fe80::9ee1:76ff:feca:e8a8/128
PE1上のインターフェイスTenGigE0/0/0/8(プライマリパス)がダウンしたときのイベントの順序

図 2:マイクロループ発生
PE1でリンクtengig 0/0/8がダウンすると、PE1とP1間のバックアップパスでマイクロループが疑われ、これがPE1でマイクロループ回避(MLA)メカニズムがトリガーされます。
RP/0/RP0/CPU0:PE1#show logging
RP/0/RP0/CPU0:Mar 21 08:30:10.244 UTC: ifmgr[307]: %PKT_INFRA-LINK-5-CHANGED : Interface TenGigE0/0/0/8, changed state to Administratively Down
インターフェイスTenGigE0/0/0/8がダウンしている場合、最初にFast Reroute(FRR)イベントが発生します。つまり、トラフィックはTI-LFAパスで送信されます。
RP/0/RP0/CPU0:PE1#show cef trace
Mar 21 08:30:10.244 fib/common/frr 0/RP0/CPU0 43# t5991 Common: FRR-ITF-EVENT: proto=3 type=0 ifh=0x3c0000a0
Mar 21 08:30:10.244 fib/common/frr 0/RP0/CPU0 13# t5991 IPv6: FRR-LOOKUP-DONE: evt=0, ifh=0x3c0000a0, main_ifh=0, proto=1
Mar 21 08:30:10.244 fib/common/frr 0/RP0/CPU0 12# t5991 IPv6: FRR-ITF-EVENT: Global Active; handle:0x3c0000a0[0x0]
Mar 21 08:30:10.244 fib/common/frr 0/RP0/CPU0 13# t5991 IPv6: FRR-ITF-EVENT: FRR Active; handle:0x3c0000a0[0x0]
Mar 21 08:30:10.244 fib/common/frr 0/RP0/CPU0 1# t5991 IPv6: FRR-EVENT: evt=0, notify protocol=1, ifh=0x0, switched=111768 ns
Mar 21 08:30:10.244 fib/common/fast 0/RP0/CPU0 20# t5991 Common: PLAT-UPD-FAST: Proto=common, Obj[FIB_DATA_TYPE2_ALL]=0, flags=0 Acttype=FRR_EOD
08:30:10:307に、IS-IS削除隣接関係があります。
RP/0/RP0/CPU0:PE1#show isis lsp last 20
08:30:10:307 1 Te0/0/0/8 DELADJ
08:30:10:358に、ラベルスイッチドパス(LSP)が受信され、Small Form-Factor Pluggable(SFP)が計算され、uloopがアクティブ化されました。
RP/0/RP0/CPU0:PE1#show isis spf-log detail
08:30:10:358 FSPF 2 5 2 PE1.00-00 DELADJ LINKBAD
Delay: 50ms (since first trigger)
46257ms (since end of last calculation)
Trigger Link: P3.00
Trigger Next Hop: P3
New LSP Arrivals: 0
SR uloop: Link Down
これらのイベントをIS-ISトレースで詳細に確認する場合、設定されているRouting Information Base(RIB;ルーティング情報ベース)のアップデート遅延時間は、65535 ms ~ 65秒です。
RP/0/RP0/CPU0:PE1#show isis trace all
Mar 21 08:30:10.308 isis/Mring_2801/std 0/RP0/CPU0 t8712 isis_roca_event_schedule_result_debug:329 SPF_TRIGGER_PRIMARY L2 IPv6 Unicast
Mar 21 08:30:10.308 isis/Mring_2801/spf 0/RP0/CPU0 t8712 isis_roca_spf_linkchanged_trigger:2609 SPF_TRIGGER_LINKCHANGED_ADD L2 IPv6 Unicast 0370.0011.0011.00
Mar 21 08:30:10.358 isis/Mring_2801/std 0/RP0/CPU0 6669# t8712 isis_roca_event_start:1541 SPF_ROCA_START L2 IPv6 Unicast SPF Type: Full >>>>>>>>. SPF was trigger
Mar 21 08:30:10.358 isis/Mring_2801/sr_ 0/RP0/CPU0 t8712 isis_roca_sr_uloop_prep:3069 SR_ULOOP_SPF_PREP_START L2 IPv6 Unicast SPF Type: Full>>>>>>>> uloop activated and uloop path installed
Mar 21 08:30:10.358 isis/Mring_2801/sr_ 0/RP0/CPU0 8451# t8712 isis_roca_uloop_install_exp_path:3915 SR_ULOOP_DETAIL_ADD_EXP_PATH L2 IPv6 Unicast SPF Type: Full
Mar 21 08:30:10.358 isis/Mring_2801/sr_ 0/RP0/CPU0 t8712 isis_roca_prefix_update_run:1040 SR_ULOOP_SPF_START_DELAYED_UPD_TIMER_8 L2 IPv6 Unicast SPF Type: Full 65535 >>>>>> the MLA timer has began
Mar 21 08:30:10.864 isis/Mring_2801/std 0/RP0/CPU0 t8712 isis_roca_frr_run:1538 SPF_FRR_DEFERRED_ULOOP L2 IPv6 Unicast
Mar 21 08:31:15.893 isis/Mring_2801/sr_ 0/RP0/CPU0 t8712 isis_ip_rib_worker_delayed_update_run:2344 SR_ULOOP_EVENT_DELAYED_UPDATE L2 IPv6 Unicast >> after 65 seconds the rib is updated and MLA is deactivated
MLAがアクティブな時点でのRIBステータス。
RP/0/RP0/CPU0:PE1#show route ipv6 fc00:1000:a820:: detail
Routing entry for fc00:1000:a820::/48
Routing Descriptor Blocks
fe80::a2b4:39ff:feff:d416, from fc00:1000:a822::22, via TenGigE0/0/0/9
Route metric is 6000
<snip>
SRv6 Headend: H.Insert.Red [f3216], SID-list {fc00:1000:a802::} ##this locator of P2 is inserted before the SRH
MLAがアクティブな時点でのCisco Express Forwarding(CEF)ステータス。
RP/0/RP0/CPU0: PE1#show cef ipv6 fc00:1000:a820:: detail
local adjacency to TenGigE0/0/0/9
<snip>
via fe80::a2b4:39ff:feff:d416/128, TenGigE0/0/0/9, 10 dependencies, weight 0, class 0 [flags 0x0]
SRv6 H.Insert.Red SID-list {fc00:1000:a802::} ## P node (locator of P2)sid is inserted into the packet
Load distribution: 0 (refcount 9)
Hash OK Interface Address
0 Y TenGigE0/0/0/9 fe80::a2b4:39ff:feff:d416
PE1から発信されたパケットは、最初のアクティブな宛先としてP2のMicro-Segment Identifier(uSID)を使用してP1経由で転送されます。パケットがP2に到達すると、uSIDに関連付けられたSRv6の動作によってセグメントルーティングヘッダー(SRH)のカプセル化解除がトリガーされ、その後、元のパケットがMLA転送の下でPE2に転送されます。

図 3:MLA中に取得されるパス
MLAの間にPE1およびP1によって転送されたパケット。
Frame 1: 160 bytes on wire (1280 bits), 160 bytes captured (1280 bits)
Ethernet II, Src: Cisco_a7:8a:0d (c4:b2:39:a7:8a:0d), Dst: Cisco_ff:d4:16 (a0:b4:39:ff:d4:16)
Internet Protocol Version 6, Src: fc00:1000:a811::11, Dst: fc00:1000:a802:: >> during MLA the 1st active destination locator is of P2
0110 .... = Version: 6
<0110 .... = Version: 6 [This field makes the filter match on "ip.version == 6" possible]>
.... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
.... 0000 0000 0000 1110 1111 = Flow Label: 0x000ef
Payload Length: 106
Next Header: Routing Header for IPv6 (43) >> indicates the next header is a SRH
Hop Limit: 254
Source Address: fc00:1000:a811::11
<Source or Destination Address: fc00:1000:a811::11>
<[Source Host: fc00:1000:a811::11]>
<[Source or Destination Host: fc00:1000:a811::11]>
Destination Address: fc00:1000:a802::
<Source or Destination Address: fc00:1000:a802::>
<[Destination Host: fc00:1000:a802::]>
<[Source or Destination Host: fc00:1000:a802::]>
Routing Header for IPv6 (Segment Routing) >>>>>>>>> SRH header which contains the orginal PE2 locator
Next Header: IPIP (4)
Length: 2
[Length: 24 bytes]
Type: Segment Routing (4)
Segments Left: 1
Last Entry: 0
Flags: 0x00
Tag: 0000
Address[0]: fc00:1000:a820:e003:: >>>>>>>>>>>>>>>> PE2 locator : function
Internet Protocol Version 4, Src: 10.10.1.2, Dst: 10.10.20.2
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
カプセル化解除後、MLAの間に元のパケットがP2によって送信され、SRHがP2によって削除されます。
Frame 1: 136 bytes on wire (1088 bits), 136 bytes captured (1088 bits)
Ethernet II, Src: Cisco_87:d8:58 (b0:a6:51:87:d8:58), Dst: Cisco_af:48:01 (c8:47:09:af:48:01)
Internet Protocol Version 6, Src: fc00:1000:a811::11, Dst: fc00:1000:a820:e003::
0110 .... = Version: 6
<0110 .... = Version: 6 [This field makes the filter match on "ip.version == 6" possible]>
.... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
.... 0000 0000 0000 1110 1111 = Flow Label: 0x000ef
Payload Length: 82
Next Header: IPIP (4)
Hop Limit: 252
Source Address: fc00:1000:a811::11
<Source or Destination Address: fc00:1000:a811::11>
<[Source Host: fc00:1000:a811::11]>
<[Source or Destination Host: fc00:1000:a811::11]>
Destination Address: fc00:1000:a820:e003::
<Source or Destination Address: fc00:1000:a820:e003::>
<[Destination Host: fc00:1000:a820:e003::]>
<[Source or Destination Host: fc00:1000:a820:e003::]>
Internet Protocol Version 4, Src: 10.10.1.2, Dst: 10.10.20.2
Data (62 bytes)
コンバージェンス後(RIBアップデート遅延タイマーの後)、挿入されたSRHは削除され、パケットはコンバージドされた最適なInterior Gateway Protocol(IGP)パスで送信されます。
RP/0/RP0/CPU0: PE1#show cef ipv6 fc00:1000:a822::22/128
local adjacency to TenGigE0/0/0/9
Prefix Len 128, traffic index 0, precedence n/a, priority 1
via fe80::a2b4:39ff:feff:d416/128, TenGigE0/0/0/9, 9 dependencies, weight 0, class 0 [flags 0x0]
path-idx 0 NHID 0x0 [0x8ef0f2b0 0x0]
next hop fe80::a2b4:39ff:feff:d416/128
local adjacency
スケジュールの概要
|
[Time]
|
アクション
|
メカニズム
|
|
08:30:10.244
|
リンク障害、トラフィックのバックアップパスへの移行
|
TI-LFA
|
|
08:30:10:307
|
LSPを受信し、新しいShortest Path First(SPF)を計算
|
MLA(トリガー)
|
|
08:30:10.358
|
RIB更新が遅延し、トラフィックがMLAトンネルを使用している
|
MLA(アクティブ)
|
|
08:31:15.893
|
遅延タイマーが期限切れになり、FIBに最終パスがインストールされる
|
完全収束
|
結論
このドキュメントでは、ネットワークコンバージェンス時にIS-ISによってアドバタイズされるSRv6 uSIDパスがMLAをサポートする方法について説明します。順序付けられたトポロジの目的をuSIDリストに直接符号化することで、トラフィックはノードの決定論的なシーケンスを介して転送され、IS-IS SPFの計算がネットワーク全体で一時的に一貫していない場合でも、ループのない転送が保証されます。
コンバージェンスの間、入力PEから出力されるパケットは事前に計算されたuSIDシーケンスを使用し、一時的なIGPネクストホップの決定に依存せずに中間Pノードを通過します。指定されたuSIDエンドポイントでのカプセル化解除動作により、保護セグメントが完了した後は、ネイティブ転送にクリーンに戻ります。IS-ISコントロールプレーンのアップデートとSRv6 uSIDデータプレーンの動作の間のこの緊密に結合されたインタラクションにより、高速で決定論的な再ルーティングが可能になります。
IS-IS uSIDベースのMLAは、マイクロループフリーのコンバージェンスに対して、拡張性が高く、トポロジを認識し、操作が簡単なソリューションを提供します。これは、高速な再ルーティングと決定論的なトラフィックステアリングが重要となる、大規模なSRv6対応ネットワークに適しています。
コマンド
- #show isisインスタンス<> ipv6マイクロループ回避<prefix> detail
- #show isis