요약

  • RFC 2102는 동적 그룹, 상태 생성 주체, 트리 휴리스틱이 여러 정당한 설계를 허용했기 때문에 멀티캐스트 경로 생성과 패킷 전달 메커니즘을 Nimrod 핵심 범위 밖에 두었습니다.
  • 상호운용성은 더 좁은 계약으로 이동했습니다. 구현은 공유 트리든 발신자 루트 트리든 자유롭게 쓰고, 상태를 설치하는 주체도 송신자·수신자·라우터 중 무엇이든 될 수 있되, 결과적으로 생기는 전달 정보는 동일하게 해석되어야 했습니다.
  • 따라서 참여한 브랜치나 채워진 포워딩 행은 하나의 실행 가능한 복제 관계만을 증명합니다. 멤버십, 권한 부여, 전체 커버리지, 최단 경로, 예약된 품질, 자원 공유, 전달 자체를 증명하지는 않습니다.

RFC 2102에서 가장 중요한 객체는 트리가 아닙니다. 라우터 내부의 상태 한 행입니다.

멀티캐스트에 관한 문서치고는 놀라운 무게중심입니다. 멀티캐스트 설계는 보통 모두가 기억하는 그림으로 소개됩니다. 하나의 발신자, 갈라지는 네트워크, 그리고 수많은 수신자. RFC 2102는 그보다 한 단계 앞에서 출발했습니다. 누가 분기를 계산해야 하는가? 누가 그것을 요청하는가? 모든 발신자가 하나의 트리를 공유해야 하는가, 아니면 발신자마다 자기 트리를 가져야 하는가? 라우터가 상태를 추론해야 하는가, 수신자가 참여해야 하는가, 송신자가 경로를 설치해야 하는가? 이 문서는 그 어떤 답변 하나를 Nimrod의 정답으로 만들기를 거부했습니다.

하나의 누락이 아니라 두 가지 자유

유니캐스트와 멀티캐스트 모두 경로 생성과 패킷 전달을 필요로 합니다. RFC 2102에 따르면 Nimrod는 유니캐스트 전달 모드는 정의하면서 유니캐스트 경로 생성은 라우팅 에이전트에 맡겼습니다. 멀티캐스트의 경우 두 단계 모두 미지정으로 두었습니다.

이 누락은 의도적인 것이었습니다. 그룹 멤버십은 변합니다. 새 구성원은 분기를 필요로 하고, 떠나는 구성원은 프룬(prune)을 허용할 수 있습니다. 상태는 송신자가, 수신자가, 둘 다가, 혹은 어느 쪽도 아닌 주체가 시작할 수 있습니다. 트리 휴리스틱 역시 서로 다른 목표를 최적화합니다. 저비용 트리는 더 큰 종단 간 지연을 초래할 수 있고, 최단 경로의 집합은 더 많은 총 자원을 소비할 수 있습니다. 계산 시간, 상태 규모, 정책, 최적성은 서로 다른 방향으로 당깁니다.

이 문서는 승자를 지명하는 대신 그 결과를 조사했습니다. DVMRP는 역방향 경로 메커니즘으로 발신자 루트 트리를 만들었지만 상태와 제어 작업을 넓게 확산시킬 수 있었습니다. CBT는 코어를 중심으로 수신자가 시작하는 공유 트리를 통해 상태를 줄였지만, 경로 스트레치와 코어 배치 의존성이라는 대가를 치렀습니다. PIM은 공유 트리와 발신자 전용 트리가 공존하도록 허용했습니다. MOSPF는 라우터가 링크 상태와 그룹 정보로부터 트리를 계산하도록 했습니다. IDPR은 송신자가 정책 경로를 계산하고 중간 개체에 복제 상태를 설치하도록 했습니다.

이것들은 화장품 수준의 변형이 아니었습니다. 지식, 계산, 권한을 서로 다른 곳에 배치했습니다.

공통 계층은 설치된 관계였다

그럼에도 RFC 2102는 서로 다른 구현들이 함께 전달하도록 만들어야 했습니다. 그 답은 더 낮은 계층에서의 합의였습니다. 전달 트리는 그것을 만든 메커니즘이 아니라 라우터에 존재하는 포워딩 정보로 정의된다는 것이 문서의 논지였습니다. 구현들이 그 정보의 구조와 해석을 공유한다면 여러 구축 방법이 공존할 수 있습니다.

Nimpim 예제는 이 추상을 실행 가능하게 만듭니다. Join은 플로우 식별자, 방향, 대상, 소스 경로를 실어 보냅니다. 라우터에서 기존 플로우는 선행 노드를 또 하나의 자식으로 얻을 수 있습니다. 새 플로우는 요청이 계속되기 전에 부모, 자식, 대상을 설치합니다. Prune은 자식을 제거하고, 자식이 더 이상 없을 때만 플로우를 삭제합니다. 이후 패킷은 플로우 식별자를 실으며, 포워딩 에이전트는 설치된 상태를 사용해 패킷을 자식 목록 방향으로 복제합니다.

이 상태는 서로 다른 역사로 만들어질 수 있습니다. 송신자가 원래 트리를 만들었을 수 있습니다. 이후 수신자가 이미 그 트리 위에 있는 라우터까지 경로를 만들어 송신자가 모른 채 새 분기를 붙일 수도 있습니다. 공유 트리가 나중에 발신자 기반 트리로 바뀔 수도 있습니다. RFC 2102는 설치된 상태가 여전히 동일하게 해석될 수 있는 한, 그룹 배포가 변하는 가운데 동시 접근 방식과 전환을 명시적으로 허용했습니다.

이것이 바로 얇은 공통 계층입니다. 하나의 알고리즘도, 하나의 권위도, 하나의 전역 그림도 아니라, 서로 읽을 수 있는 하나의 실행 문법입니다.

브랜치는 겉보기보다 적은 것을 말한다

포워딩 상태를 영수증으로 다루는 순간, 그 증거적 한계가 드러납니다. 자식 항목은 특정 플로우의 패킷이 현재 인접 관계 하나 방향으로 복사될 것을 의미한다고 말할 뿐입니다. 그 관계를 정당화한 멤버십 과정 전체를 담고 있지는 않습니다. RFC 1112와 이후 그룹 관리 작업은 청취자 증거를 연결된 네트워크 쪽에, 자체적인 타이머와 집계와 함께 둡니다. 포워딩 행은 그 증거의 하류에 있을 뿐, 그것의 대체물이 아닙니다.

또한 그 행은 정책을 보증하지도 않습니다. RFC 2102는 목적지별 제약이 하나의 그룹이 서로 겹치지 않는 목적지 파티션 위의 여러 트리로 서비스되도록 요구할 수 있음을 관찰했습니다. 설치된 브랜치는 의도된 모든 목적지가 포함되었는지, 트랜짓 정책이 여전히 유효한지, 숨겨진 목적지-로케이터 연결이 완전했는지를 드러내지 않습니다.

최적성을 보증하지도 않습니다. CBT의 공유 경로는 최단이 아닐 수 있습니다. PIM의 역방향 최단 경로는 메트릭 대칭에 관한 가정이 있을 때에만 진정으로 최단입니다. MOSPF와 IDPR은 매우 다른 계산에서 포워딩 상태에 도달합니다. 공통된 상태 형태는 실행을 허용하지만, 그것에 앞선 트레이드오프를 지우지는 않습니다.

품질과 자원 역시 다시 분리됩니다. RFC 2102는 모든 경로가 요청된 품질과 접근 제약을 충족하기를, 그리고 어떤 트리 자원이 예약 시스템과 공유될 수 있는지에 관한 정보를 원했습니다. 이것들은 별개의 주장입니다. 브랜치가 존재한다는 사실만으로는 지연, 지터, 예약 승인, 안전한 공유를 증명하지 못합니다.

마지막으로, 채워진 행은 전달 영수증이 아닙니다. 송신자가 트래픽을 내보냈는지, 모든 중간 상태가 살아남았는지, 링크가 패킷을 실어 나랐는지, 마지막 홉 네트워크가 그것을 전달했는지, 애플리케이션이 그것을 소비했는지를 보여주지 않습니다. RFC 2102는 보안을 전혀 다루지 않았으므로, 그 행은 인증된 멤버십이나 권한 부여를 대신할 수도 없습니다.

최소 상호운용 표면을 위한 1997년의 논거

RFC 1992는 이미 Nimrod가 다중 지도, 다중 추상, 다중 전달 모드에 익숙하도록 만들어 두었습니다. RFC 1753은 사용자 상태와 서비스 상태를 분리하고 하위 시스템 경계를 강조했습니다. RFC 2102는 같은 본능을 멀티캐스트에 적용했습니다. 구현 경계를 넘어야 하는 것만 표준화하고, 트리 구축은 새로운 방법과 로컬 요구에 열어 두는 것입니다.

Lu Heng의 “Minimum Initial Specification”은 이 움직임에 현대적 어휘를 제공합니다. 공통 계층은 상호운용에 필요한 결정론적 규칙만 실어야 하며, 이후 선택은 코드를 실행하는 참여자에게 남아 있어야 합니다. “Running-Code Primacy”는 채택 시험을 더합니다. 문서나 알고리즘은 구현과 사용을 통해서만 운용 가능해진다는 것입니다. 이 병행은 해석적일 뿐 계보적이지 않습니다. 이 RFC는 Nimrod 배포를 증명하지 않고, 후자의 에세이가 그 설계를 낳지도 않았습니다. 그러나 둘은 같은 공학적 질문을 드러냅니다. 어떤 불변식을 공유해야 하고, 어떤 결정은 로컬에 남아도 되는가?

RFC 2102의 답은 정확했습니다. 멀티캐스트에는 단일한 계산자가 필요하지 않았습니다. 다른 구현이 계산자의 세계관을 먼저 공유하지 않고도 실행할 수 있는 포워딩 상태가 필요했습니다. 그 자유의 대가는 증거적 규율이었습니다. 브랜치는 브랜치만 증명한다. 나머지 모든 것은 여전히 자기만의 영수증을 필요로 했습니다.

출처