주니퍼 블로그
, Juniper Distinguished Eng
주니퍼 블로그
MPLS(Multiprotocol Label Switching)를 통한 세그먼트 라우팅
Aug 20, 2019

지난 블로그에서 세그먼트 라우팅(Segment Routing, SR) 경로가 세그먼트들을 순서대로 나열한 것임을 설명했습니다. 그리고 세그먼트가 패킷을 하나 이상의 링크를 통해 이동시키는 명령이라고 설명했습니다.

 

이번 편에서는 MPLS를 활용하여 SR을 구현하는 방법에 대해 알아보도록 하겠습니다이러한 구현을 SR-MPLS라고 합니다.  SR-MPLS를 제대로 알면 SR이 어떻게 트래픽 엔지니어링 애플리케이션을 지원하는지에 대해 설명하는 다음 편 블로그를 이해하는 데 도움이 될 것입니다.

 

개요

SR-MPLS에서 SR 경로는 MPLS Label 스택으로 인코딩됩니다 Label 스택 엔트리는 SR 경로의 세그먼트를 나타냅니다. 이번 편에서는 MPLS Label을 사용하여 Adjacency Segment Prefix Segment를 인코딩하는 방법을 설명하겠습니다.

 

Adjacency Segment

 

3Capture1.PNG

 

그림 1: Adjacency Segment

그림1에서 SR 경로는 R1 R4를 연결합니다. SR 경로는 3개의 Adjacency Segment로 이루어집니다.  Segment 1은 패킷을 링크R1->R2로 이동시키고 Segment 2는 패킷을 링크R2->R3로 이동시킵니다.  Segment 3는 패킷을 링크 R3->R4로 이동시킵니다.

 

R1 SR 도메인 외부에서 수신한 패킷에 정책을 적용합니다정책에 따라 R1이 그림에 나온 SR 경로를 통해 패킷을 전달합니다이 경우 R1은 두 엔트리가 포함된 MPLS Label 스택을 적용합니다스택 맨 위의 엔트리는 Segment 2를 나타내며 MPLS Label 1002를 전달합니다. 스택 맨 아래의 엔트리는 Segment 3을 나타내고 MPLS Label 1003을 전달합니다.

 

MPLS Label 스택이 적용된 R1 Segment 1(링크 R1-> R2)을 통해 패킷을 전달합니다패킷이 R2에 도착하면, R2는 최상위 Label 스택 엔트리로부터 Label(, 1002)을 추출하고 FIB(Forwarding Information Base)에서 해당 엔트리를 검색합니다해당 FIB 엔트리에는 명령(, POP) Next-hop(, R3)이 들어 있습니다. 따라서 R2 Label 스택에서 최상위 엔트리를 파핑(pop)하고 패킷을 Segment 2(링크R2-> R3)로 전송합니다.

 

패킷이 R3에 도착하면, R3은 나머지 Label 스택 엔트리에서 Label(, 1003)을 추출하고 FIB에서 해당 엔트리를 검색합니다해당 FIB 엔트리에는 명령(, POP) Next-hop(, R4)이 들어 있습니다. 따라서 R3 Label 스택에서 나머지 엔트리을 파핑하고 패킷을 Segment 3(링크 R3-> R4)로 전송합니다. 패킷은 MPLS 캡슐화 없이 R4에 도착합니다.

 

Prefix Segment

 

3Capture2.PNG

 

그림 2: Prefix Segment

 

그림 2에서 SR 경로는 R4를 통해 R1 R7을 연결합니다.  SR 경로에는 두 개의 Prefix Segment가 있습니다.  Segment 1은 패킷을 R1에서 R4까지 최소 비용 경로로 이동시키는 Prefix Segment입니다.  Segment 2 역시 Prefix Segment이며, 패킷을 R4에서 R7까지 최소 비용 경로로 이동시킵니다이 네트워크에서 모든 링크는 동일한 IGP 메트릭(: 10)으로 구성됩니다따라서 R1에서 R4까지의 최소 비용 경로는 링크 R1-> R2, R2-> R3, R3-> R4를 통과하며 R4에서 R7까지의 최소 비용 경로는 링크R4-> R8, R8-> R7을 통과합니다.

 

R1 SR 도메인 외부에서 수신한 패킷에 정책을 적용합니다. 정책에 따라 R1이 그림에 나온 SR 경로를 통해 패킷을 전달합니다. 이 경우 R1은 두 엔트리가 포함된 MPLS Label 스택을 적용합니다. Label 스택 맨 위의 엔트리는 Segment 1를 나타내며 Label 2001을 전달합니다. Label 스택 맨 아래의 엔트리는 Segment 2를 나타내고 Label 2002를 전달합니다.

 

MPLS Label스택이 적용된 R1은 패킷을 링크R1-> R2를 통해 Segment 1로 전달합니다패킷이 R2에 도착하면, R2는 최상위 Label 스택 엔트리로부터 Label(, 2001)을 추출하고 FIB에서 해당 엔트리를 검색합니다해당FIB 엔트리에는 명령(, SWAP- 3001) Next-hop(, R3)이 들어 있습니다. 따라서 R2는 최상위 Label을 새로운 값(, 3001)으로 덮어 쓰고 패킷을 R3으로 전송합니다.

 

패킷이 R3에 도달하면, R3은 최상위 Label 스택 엔트리로부터 Label(, 3001)을 추출하고 FIB에서 해당 엔트리를 검색합니다해당 FIB 엔트리에는 명령(, POP) Next-hop(, R4)이 들어 있습니다. 따라서 R4 Label 스택에서 최상위 엔트리를 파핑하여 패킷을 링크R3-> R4를 통해 Segment2로 전달합니다.

 

패킷이 R4에 도달하면, R4는 나머지 Label 스택 엔트리로부터 Label(, 2002)을 추출하고 FIB에서 해당 엔트리를 검색합니다해당 FIB 엔트리에는 명령(, SWAP-3002) Next-hop(, R8)이 들어 있습니다따라서 R4는 남은 Label을 새로운 값(, 3002)으로 덮어 쓰고 패킷을 R8로 전달합니다.

 

패킷이 R8에 도달하면, R8은 나머지 Label 스택 엔트리로부터 Label(, 3002)을 추출하고 FIB에서 해당 엔트리를 검색합니다해당 FIB 엔트리에는 명령(, POP) Next-hop(, R7)이 들어 있습니다. 따라서 R8 Label 스택에서 남은 엔트리을 파핑하고 MPLS 캡슐화 없이 패킷을 R7로 전달합니다.

 

PHP(Penultimate Hop Popping) Explicit Null Label

위의 예제에서 각 세그먼트는PHP 프로시저를 실행합니다. 패킷이 세그먼트를 통과하면 세그먼트의 Penultimate 노드가 해당 세그먼트와 연관된 Label을 파핑합니다.

 

SR 경로에 아직 통과하지 않은 다른 세그먼트가 포함되어 있다면, 현재 세그먼트의 Egress 노드는 다음 세그먼트의 Ingress 노드가 됩니다이 경우, 패킷은 스택 맨 위에 다음 세그먼트의 Label이 노출된 상태로 해당 노드에 도착합니다.  SR 경로에 아직 통과하지 않은 다른 세그먼트가 없으면 세그먼트 Egress 노드는 경로 Egress 노드가 됩니다이 경우 패킷은 MPLS 캡슐화 없이 경로 Egress 노드에 도달합니다.

 

SR 경로의 최종 링크가 MPLS 캡슐화 없이 패킷을 전달하지 못하는 경우도 있습니다예를 들면 패킷은 IPv6 인데 링크는  IPv4 만 지원하는 경우가 그렇습니다. 이 문제를 방지하기 위해 SR Ingress 노드는 MPLS Label 스택의 맨 위에 MPLS Explicit Null Label을 추가 할 수 있습니다.

 

마지막 세그먼트의 Penultimate 노드가 마지막 세그먼트와 연관된 Label을 파핑하면 Explicit Null Label이 나타납니다그런 다음 패킷을 경로 Egress 노드로 전달합니다경로 Egress 노드는 Explicit Null Label을 파핑하고 계속해서 패킷을 처리합니다.

 

맺음말

이번 편에서는 SR-MPLS SR 경로를 MPLS Label 스택으로 인코딩하는 방법을 알아보았습니다또한 SR-MPLS FIB를 사용하여 패킷을 처리하는 방법에 대해서도 살펴보았습니다.

 

다음 편에서는 트래픽 엔지니어링 애플리케이션에 SR을 적용하는 방법을 설명하도록 하겠습니다.

 

0 포인트