요약

  • RFC 3034는 프레임 릴레이 레이블 스위치 연쇄를 비-TTL(non-TTL) 세그먼트로 취급했습니다. 코어는 MPLS TTL을 감소시키지 않고 DLCI 레이블만 교체했으므로, 경계에서 숨겨진 홉을 정산해야 했습니다.
  • LDP는 세그먼트 홉 카운트를 인그레스까지 전파할 수 있었고, 인그레스는 유니캐스트 진입 전에 그 길이를 차감했습니다. 매핑과 카운트는 관찰된 패킷 경로 증거가 아니라 제어 평면의 주장으로 남았습니다.

구형 스위치는 자신을 유용하게 만드는 연산은 수행할 수 있었지만, 라우티드 루프를 만료시키는 연산은 수행할 수 없었습니다. 들어온 프레임 릴레이 DLCI를 조회하고, 이를 출력 DLCI로 바꾸고, 프레임을 다음 지점으로 전달하는 것은 가능했습니다. 그러나 하드웨어는 일반적으로 패킷의 TTL을 감소시킬 수 없었습니다. 그 스위치가 MPLS LSR(Label Switching Router)이 되는 순간, 빠진 차감은 프로토콜 문제로 바뀌었습니다.

2001년 1월 제안 표준(Proposed Standard)으로 발표된 RFC 3034는 회계가 이루어지는 위치를 바꿔 이 문제를 해결했습니다. 같은 수준의 프레임 릴레이 LSR들이 연달아 이어진 경우 각 스위치에서 MPLS TTL을 감소시키지 않았습니다. RFC는 이를 “비-TTL 세그먼트”라고 불렀습니다. 유니캐스트의 경우 그 세그먼트의 입구에서, 패킷이 진입하기 전에 세그먼트가 광고한 전체 길이를 차감할 수 있었습니다.

현재 레이블은 DLCI 안에 있었다

프레임 릴레이 하드웨어는 이미 링크 계층 헤더의 DLCI(Data Link Connection Identifier)를 기준으로 스위칭하고 있었습니다. RFC 3034는 현재 MPLS 레이블을 그 위치에 놓았습니다. 나머지 레이블들과 현재 스택의 다른 필드들은 일반 MPLS 캡슐화를 사용했습니다. 코어 FR-LSR에서는 장치가 DLCI를 조회하고, 출력 DLCI로 치환하고, 프레임을 전달합니다.

이로 인해 표현이 분할되었습니다. DLCI는 스위치가 실제로 동작하는 레이블 값을 담았습니다. 스택 최상위 항목은 여전히 현재 TTL 등 다른 필드를 담았지만, 실제로 작동하는 레이블 값은 담지 않았습니다. 다른 캡슐화로의 경계에서는 LSR이 논리적 스택을 디코딩하고, MPLS 연산을 수행하고, 다음 링크용으로 다시 인코딩해야 했습니다. 따라서 이종(heterogeneous) LSP에서는 같은 논리적 레이블 스택이 홉마다 다르게 표현될 수 있었습니다.

출구에서 팝(pop)된 레이블이 마지막 레이블이었다면, 스택에는 명시적인 네트워크 계층 프로토콜 식별자가 남지 않았습니다. 프로토콜은 레이블 연관으로부터 추론해야 했습니다. 따라서 레이블 바인딩은 포워딩 선택에 더해 파싱 결과까지 결정하는 것을 담게 됩니다. 레이블 바인딩은 패킷을 인증하지 않고, 경로를 승인하지 않으며, 프레임이 예상된 회선을 통과했음을 증명하지도 않습니다.

숨겨진 홉도 여전히 범위를 소모해야 했다

이 문서에서 MPLS TTL은 두 가지 목적을 가졌습니다. 루프를 억제하는 것과 패킷의 범위를 제한하는 것입니다. 레이블 패킷은 동등한 라우터 연쇄를 통과한 뒤 갖게 될 값을 갖고 나와야 했습니다. 모든 DLCI 교체가 각각 국소적으로는 올바르더라도, 5개의 프레임 릴레이 스위치를 영원히 0으로 계산하면 그 모델은 깨집니다.

RFC 3034는 경계 계산을output TTL = input TTL - d로 표현했습니다. 차감량은 입력, 포워딩, 출력 캡슐화에 따라 달라졌습니다. 동일 수준의 프레임 릴레이 코어 연산은 0을 사용했는데, 그 청구를 다른 곳으로 옮겼기 때문입니다. 일반 MPLS 포워딩 홉은 보통 1을 사용했습니다. 비-TTL 프레임 릴레이 세그먼트에 진입할 때는 그 세그먼트의 홉 수를 사용할 수 있었습니다.

유니캐스트의 경우 의미 있는 길이가 인그레스로 전파되었고, 인그레스는 패킷을 세그먼트로 포워딩하기 전에 그 값을 차감했습니다. 멀티캐스트의 경우 길이가 이그레스로 전파되어 경계 회계를 이그레스에서 수행했습니다. 차감 지점이 달라진 이유는 포워딩 사례가 달랐기 때문이며, 불변 원칙은 숨겨진 스위치 홉이 범위 제어에서 사라져서는 안 된다는 것이었습니다.

인그레스는 만료 전에 진입을 거부할 수 있었다

선불 지불은 첫 DLCI 교체 전에 하나의 결정을 가능하게 했습니다. 유니캐스트 세그먼트 길이를 차감한 결과 이그레스 전에 TTL이 만료될 것으로 보이면, 인그레스는 그 패킷을 레이블 스위칭하여 비-TTL 세그먼트에 진입시키는 것이 금지되었습니다. 대신 레이블 스택 규칙에 따라 ICMP 오류를 반환하려 시도하거나, 네트워크 계층 포워딩을 반영하는 TTL로 패킷을 레이블 없이 포워딩했습니다. 입력 TTL이 1이면 오류 경로만 적용되었습니다.

이 문구는 행동을 정의할 뿐, 결과를 정의하지 않습니다. “ICMP를 반환하려 시도”는 출발지가 그 메시지를 수신했다는 증거가 아닙니다. “레이블 없이 포워딩”은 다른 경로가 패킷을 전달했다는 증거가 아닙니다. 유용한 수증은 더 좁습니다. 인그레스가 입력 TTL과 세그먼트 길이 값을 근거로 경계 결정을 내렸다는 것입니다.

LDP가 제공한 것은 텔레메트리가 아니라 카운트였다

세그먼트 길이는 레이블 바인딩에 연관된 LDP 홉 카운트 객체에서 올 수 있었습니다. 이그레스는 1부터 시작합니다. 알려진 각 업스트림 단계마다 다운스트림 카운트가 증가했습니다. 값이 최대치를 초과하면 FR-LSR은 그 바인딩을 더 이상 업스트림으로 전달할 수 없고 오류를 신호해야 했습니다.

순차 제어(ordered control)는 다운스트림 매핑을 기다렸다가 업스트림으로 회신하므로, 증가된 카운트를 바인딩과 함께 제공할 수 있었습니다. 독립 제어(independent control)는 홉 카운트를 ‘알 수 없음’으로 표시한 채 더 일찍 광고한 다음, 나중에 올바른 값을 보낼 수 있었습니다. LDP가 카운트를 제공하지 않거나 알 수 없는 값을 제공하면, RFC 3034는 그것이 기술한 계산에 기본값 1을 사용했습니다.

그 기본값은 1홉 경로를 발견한 것이 아닙니다. 제어 평면이 의미 있는 길이를 갖지 못할 때 유한한 동작을 제공한 것입니다. 이 구분이 핵심입니다. 홉 카운트 객체는 레이블 분배 과정에서 조립된 주장입니다. 패킷 단위 관찰도, 트레이서우트도, 모든 스위치가 살아 있음에 대한 증명도, 다음 패킷이 같은 경로를 따를 것이라는 증명도 아닙니다.

경로 변경은 신선도를 안전성의 일부로 만들었다

카운트는 업스트림 바인딩이 이미 존재하는 상태에서도 바뀔 수 있었습니다. 독립 제어는 ‘알 수 없음’을 알려진 값으로 교체할 수 있었습니다. 경로 계산이 새 다음 홉을 선택하고 다른 길이의 매핑을 얻을 수도 있었습니다. RFC 3034는 그 변경이 인그레스 쪽으로 전파되도록 요구했습니다. 새 카운트가 최대치를 초과하면, 루프 탐지가 불가능한 수를 기반으로 구축되지 않도록 해당 포워딩 동치 클래스(forwarding equivalence class)의 바인딩을 업스트림으로 철회해야 했습니다.

실패 역시 권한을 제거했습니다. 다운스트림 요청을 충족할 수 없으면 잠정 바인딩은 파기되고 철회되어야 했습니다. LDP 세션 상실 시 그 연결을 통해 학습된 바인딩 정보는 폐기되어야 했습니다. 자유 보존(liberal retention)은 문서가 정한 경로 및 홉 카운트 조건을 충족할 때만 재사용을 허용했습니다.

따라서 저장된 레이블에는 수명 주기가 있었습니다. 레이블 정보 베이스(Label Information Base)에 존재한다는 사실은 그 다운스트림 의존성이 아직 존재함을 증명하지 않고, 그 홉 카운트가 최신임을 증명하지 않으며, 데이터 평면 트래픽이 성공했음을 증명하지 않습니다.

하드웨어의 적응이 계층을 지워주지는 않았다

RFC 3034는 프레임 릴레이 스위치가 자신이 효율적으로 스위칭할 수 있는 하드웨어 필드를 계속 사용하면서 네트워크 계층 라우팅과 레이블 분배에 참여하도록 허용했습니다. 전통적인 프레임 릴레이 제어와 레이블 스위칭 제어는 같은 장치와 인터페이스에서 독립적으로 동작할 수도 있었으며, DLCI 공간의 분할 같은 유한한 자원만 공유했습니다. 결합된 동작 자체는 이 RFC의 범위 밖이었습니다.

이것은 상징적 제어가 실제 동작을 대체했다는 주장이 아니었습니다. 이는 엔지니어링 타협이었습니다. 코어가 감소시킬 수 없는 곳에서는 경계가 세그먼트를 정산한다는 것입니다. 그 타협은 경로, 바인딩, 홉 카운트, 인그레스 차감, 실제 경로, 이그레스 값이 각각 별도로 관찰 가능한 상태로 유지되는 한에서만 신뢰할 수 있었습니다. 인그레스는 선불로 지불했습니다. 그리고 실제 세계는 여전히 청구된 그 여정을 배달해야 했습니다.

출처

Lu Heng은 RFC 3034와 관련 표준을 작성했거나 보증하지 않았습니다. 그의 에세이는 명시된 분석적 관점으로 여기에 사용되었습니다.