소개
이 문서에서는 IS-IS 마이크로루프에 대한 기술적 개요, 마이크로루프가 발생하는 조건, 이를 방지하는 데 사용되는 원리 및 메커니즘을 설명합니다.
사전 요구 사항
요구 사항
Cisco에서는 ISIS(Intermediate System to Intermediate System) SR(Segment Routing) 버전 6에 대한 기본 지식을 갖춘 것을 권장합니다.
사용되는 구성 요소
이 문서의 정보는 장치를 기반으로 합니다. NCS(Network Convergence System) 540, NCS 5500.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
Microloop 개요
IS-IS는 빠른 컨버전스와 확장성으로 인해 대규모 통신 사업자 네트워크에서 사용되는 광범위하게 구축된 링크 상태 라우팅 프로토콜입니다. 그러나 링크 또는 노드 장애와 같은 토폴로지 변경 중에 라우터가 다른 시간에 FIB(forwarding information base)를 업데이트하는 동안 일시적인 포워딩 불일치(일반적으로 마이크로루프라고 함)가 발생할 수 있습니다. 이러한 마이크로루프는 일시적인 패킷 손실, 레이턴시 증가 또는 트래픽 블랙홀링으로 이어지며, 이는 실시간 및 레이턴시에 민감한 애플리케이션에 부정적인 영향을 미칠 수 있습니다.
IS-IS 라우팅 프로토콜은 SR 및 SRv6(Segment Routing) 마이크로루프 회피 메커니즘을 활용하여 네트워크 통합 과정에서 이러한 일시적인 포워딩 루프를 방지합니다. 이러한 메커니즘은 네트워크가 새로운 정상 상태로 전환되는 동안에도 루프 프리 포워딩을 보장합니다.

그림 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 네트워크는 PE1(Provider Edge 1)에서 BGP(Border Gateway Protocol)를 통해 PE2(Provider Edge 2)로 광고되고 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 ## 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은 PE1의 PE2에서 로케이터 sid fc00:1000:a820: 및 기능 e0030.
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::}
참고: 정상 상태에서 CE2(Customer Edge 2)로 향하는 패킷은 IPv6(Internet Protocol version 6) 헤더 대상 주소 fc00:1000:a820:e003:::를 사용하여 PE2로 전송됩니다.
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 페이로드입니다.
TI-LFA(Topology-Independent - Loop-Free Alternate)를 통한 계산된 기본 및 백업 경로당.
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(Microloop Avoidance) 메커니즘을 트리거합니다.
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이 작동 중지된 경우, 먼저 FRR(Fast Reroute) 이벤트가 발생합니다. 즉, 트래픽이 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(Label Switched Path)가 수신되었고 SFP(Small Form-Factor Pluggable)가 계산되었으며 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 추적에서 이러한 이벤트를 자세히 볼 수 있습니다. 이 경우 구성된 RIB(Routing Information Base) 업데이트 지연 시간은 다음과 같습니다. 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가 활성 상태일 때의 CEF(Cisco Express Forwarding) 상태.
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에서 시작된 패킷은 P2s uSID(Micro-Segment Identifier)를 첫 번째 활성 목적지로 하여 P1을 통해 전달됩니다. 패킷이 P2에 도달하면 uSID와 연결된 SRv6 동작이 SRH(Segment Routing Header) 역캡슐화를 트리거하며, 그 후 원래 패킷은 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)
역캡슐화 후, 원래 패킷은 P2에 의해 전송되고 SRH는 MLA 동안 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가 제거되고 패킷이 통합 IGP(Best Interior Gateway Protocol) 경로로 전송됩니다.
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
|
링크 장애, 트래픽이 백업 경로로 이동
|
티라파
|
|
08:30:10:307
|
LSP 수신, 새 SPF(Shortest Path First) 계산
|
MLA(트리거됨)
|
|
08:30:10.358
|
RIB 업데이트가 지연되고 트래픽이 MLA 터널을 사용 중입니다.
|
MLA(활성)
|
|
08:31:15.893
|
지연 타이머 만료, FIB에 설치된 최종 경로
|
완전 비상
|
결론
이 문서에서는 IS-IS 알림 SRv6 uSID 경로가 네트워크 통합 중에 MLA를 지원하는 방법에 대해 자세히 설명합니다. 순서가 지정된 토폴로지 의도를 uSID 목록에 직접 인코딩함으로써 트래픽이 확정적인 노드 시퀀스를 통해 조정되므로, IS-IS SPF 계산이 네트워크 전체에서 일시적으로 일관성이 없는 경우에도 루프가 없는 포워딩이 보장됩니다.
컨버전스 동안 인그레스 PE에서 이그레스(egress)하는 패킷은 사전 계산된 uSID 시퀀스를 사용하여 일시적인 IGP next-hop 결정에 의존하지 않고 중간 P 노드를 통과합니다. 지정된 uSID 엔드포인트에서의 캡슐화 해제 동작을 통해 보호된 세그먼트가 완료되면 기본 포워딩으로의 정상적인 전환이 보장됩니다. IS-IS 컨트롤 플레인 업데이트와 SRv6 uSID 데이터 플레인 동작 간에 긴밀하게 결합된 이 상호 작용을 통해 빠르고 확실한 리라우팅이 가능합니다.
IS-IS uSID 기반 MLA는 마이크로루프 없는 컨버전스를 위해 확장 가능하고 토폴로지를 인식할 수 있으며 운영적으로 간단한 솔루션을 제공하므로, 빠른 경로 재설정과 확실한 트래픽 조율이 중요한 대규모 SRv6 지원 네트워크에 적합합니다.
명령
- #show isis 인스턴스 <> ipv6 microloop avoidance <prefix> 세부 정보
- #show isis