요약

  • RFC 2117은 IGMP 멤버십 표시를 와일드카드(*,G)상태와 그룹의 랑데부 포인트를 향한 홉 바이 홉 조인으로 변환했다. 결과로 만들어진 공유 트리는 하나의 확정 객체가 아니라 로컬 경로 항목들의 누적이었다.
  • 소스의 지정 라우터(DR)는 처음에 데이터를 Register 메시지로 캡슐화했다. Register-Stop은 그 캡슐화를 타이머 구간 동안만 억제했으며, 영구 네이티브 경로 준비 완료에 대한 확인 응답이 아니었다.
  • Join/Prune 메시지에는 명시적 확인 응답이 없었다. 주기적 갱신이 손실을 복구했고, Holdtime이 아웃고잉 브랜치를 제거했으며, 데이터 타임아웃이 침묵하는 소스 상태를 제거했고, SPT 비트는 소스 전용 인커밍 인터페이스로 패킷이 도착한 후에야 변경되었다.

RFC 2117에서 가장 시사적인 문장은 패킷 형식이 아니다. Join/Prune 메시지가 명시적 확인 응답을 유도하지 않았다는 인정이 그것이다. 라우터는 상류로 명령을 보냈지만, 프로토콜은 이 교환을 분산 커밋으로 만들지 않았다. 패킷이 사라지면 다음 주기 갱신이 누락된 사실을 다시 만들 것으로 기대되었다.

1997년 6월에 실험(Experimental) 문서로 발표된 RFC 2117은 Protocol Independent Multicast—Sparse Mode의 첫 RFC 버전을 기술했다. "스파스(sparse)"는 네트워크가 수신자를 모든 곳에 가정하고 먼저 플러딩하는 대신, 그룹을 요청한 곳으로 배포 상태를 구축해야 함을 의미했다. "프로토콜 독립"은 PIM이 특정 유니캐스트 라우팅 프로토콜에 속하지 않고도 역방향 경로 정보를 사용할 수 있음을 의미했다. 어느 단어도 결과 트리가 단일 권위 기록을 갖는다는 뜻은 아니었다.

하나의 수신자 표시가 여러 로컬 레코드가 되었다

호스트는 먼저 IGMP를 통해 그룹 멤버십을 보고했다. 그 보고는 직접 연결된 네트워크에 관한 것이었다. 모든 수신자를 이름으로 나열하지 않았고, 애플리케이션을 인증하지도 않았다. 로컬 지정 라우터는 이 표시를 사용해 그룹의 랑데부 포인트를 조회하고,(*,G)상태를 만들고 수신 인터페이스를 아웃고잉 목록에 추가했다.

별표(asterisk)는 중요했다. 더 구체적인 레코드가 없을 때 어떤 소스든 이 그룹 항목과 일치할 수 있음을 의미했다. DR은 와일드카드 비트와 RP-트리 비트를 설정해 RP를 향해 Join/Prune을 보냈다. 각 상류 라우터는 자신의(*,G)레코드를 만들거나 갱신하고, 다운스트림 인터페이스를 추가하며, RP를 향한 조인을 계속했다. 이 개별 레코드들이 합쳐져 랑데부 포인트에 뿌리를 둔 공유 트리를 이루었다.

어떤 개별 레코드도 "트리"를 담고 있지 않았다. 경로 항목은 한 라우터의 관점에서 본 인커밍 인터페이스, 아웃고잉 인터페이스, 타이머, 플래그, 주소를 담았다. 멤버십 표시는 이 DR이 하나의 로컬 브랜치를 유지할 이유가 있음을 증명했다. Join은 하나의 다운스트림 이웃이 Holdtime 동안 상태를 요청했음을 증명했다. 어느 쪽도 수신자의 신원, 트리의 완전성, 모든 라우터의 합의를 증명하지 않았다.

새 소스는 네이티브 브랜치가 생기기 전에 Register 안을 통해 이동했다

스파스 멤버십은 송신자에게 부트스트래핑 문제를 만들었다. 직접 연결된 소스가 처음으로 그룹 G에 전송할 때, 소스의 DR에는 아직 RP에 이르는 소스 전용 트리가 없었다. DR은 멀티캐스트 패킷을 PIM Register로 캡슐화해 RP에 유니캐스트했다. RP는 패킷을 디캡슐화하고 공유 트리 아래로 전달했다.

이것은 두 지식 상태 사이의 다리였다. Register는 네트워크가 네이티브 경로를 학습하는 동안 제어 관계를 통해 데이터를 운반했다. 비율이 정당하다면 RP는(S,G)상태를 만들고 S를 향해 소스 전용 조인을 보낼 수 있었다. 그 경로의 라우터들은 각자 자신의 소스 레코드를 설치했다.

Register-Stop은 최종처럼 들리지만 의도적으로 임시였다. RP는 다운스트림 관심이 없거나 이미 네이티브로 소스를 수신 중일 때 이를 보냈다. 소스 DR은 그때(S,G)별 억제 타이머를 시작했다. 타이머가 만료되면 Register가 재개되거나, Null-Register가 억제가 여전히 정당한지 탐색했다. 따라서 Register-Stop은 RP가 현재 구간 동안 이 DR에게 캡슐화 억제를 요청했음만 증명했다. 네이티브 경로가 계속 유지될 것임, 모든 수신자가 서비스받고 있음, RP가 다시 탐색할 필요가 없을 것임을 증명하지 않았다.

최단 경로 트리는 도착하는 데이터를 통해 실체가 되었다

RP와 마지막 홉 라우터는 브랜치를 공유 트리에서 소스 전용 최단 경로 트리로 옮길 수 있었다. RFC 2117은 트래픽 비율 임계값을 권고했지만, 전역 조정 없이도 전환 규칙을 바꿀 수 있다고 말했다. 공통 프로토콜은 라우터가 이 전환을 표현하고 신호하는 방식을 정했을 뿐, 그것을 실행할 비즈니스 결정을 중앙화하지 않았다.

(S,G)상태를 만드는 것 자체로 전환이 완료되지 않았다. 새 항목은 SPT 비트가 해제된 상태로 시작했다. 새 브랜치가 구축되는 동안 라우터는 공유 트리 인커밍 인터페이스를 통해 소스를 계속 수용할 수 있었다. S의 패킷이(S,G)에 대해 선택된 인커밍 인터페이스에 도착하고, 그 인터페이스가 공유 트리 인터페이스와 다를 때에만 라우터는 SPT 비트를 설정하고 RP를 향해 소스 전용 프룬을 보냈다.

이 순서는 한 라우터가 관찰할 수 있는 범위에서 연속성을 보존했다. 전체 트리에 걸친 무손실 전환을 증명하지는 않았다. 예상치 못한 인커밍 인터페이스의 패킷은 여전히 버려질 수 있었다. SPT 비트는 이 라우터가 자신의 예상 소스 경로에서 패킷을 보았고 하나의 공유 브랜치 사용을 중단할 수 있음을 기록했다. 모든 다운스트림 수신자의 영수증이 아니었다.

만료는 청소가 아니라 정확성의 일부였다

소프트 상태가 작동한 이유는 잊는 것이 기억하는 것과 함께 설계되었기 때문이다. 주기적 Join/Prune 메시지가 활성 경로 항목을 갱신했다. Holdtime은 개별 아웃고잉 인터페이스를 갱신했다. 갱신이 오지 않으면 브랜치는 노후화되어 사라졌다. 침묵하는 소스의(S,G)상태는 Data-Timeout으로 만료되었다. Register 억제는 설정된 평균을 중심으로 만료되었다. 부트스트랩 및 RP-셋 정보도 타이머 뒤에 존재했다.

기본값이 그 균형을 드러낸다. RFC 2117은 60초 Join/Prune 주기와 210초 Holdtime을 문서화했다. 침묵하는 소스에 대한 210초 Data-Timeout도 문서화했다. Register 억제는 60초를 중심으로 했다. 짧으면 RP에서 Register 버스트가 늘어나고, 길면 새 수신자가 나타날 때 지연이 커졌다. 확실성, 속도, 효율을 동시에 극대화하는 무료 설정은 없었다.

부트스트랩 라우터(BSR) 메커니즘은 같은 지역성을 더 큰 규모에서 보여주었다. BSR은 주기적으로 RP-셋을 배포했고, 라우터는 가장 최근에 받은 셋과 해시를 사용해 그룹을 후보 RP에 매핑했다. 분할된 도메인은 분리된 지역에서 서로 다른 BSR을 선출할 수 있었다. 분할이 치유되면 다른 선출이 구성을 조정했고, RFC 2117은 전환 중 패킷 전달이 방해받을 수 있음을 인정했다.

역사적 성취는 규율된 불확실성이었다

RFC 2117은 RFC 2362로, 이어서 표준 트랙 RFC 4601로, 마지막으로 인터넷 표준 RFC 7761로 대체되었다. 이 계보는 중요하다. 1997년 문서는 초기 프로토콜 설계의 증거이며, 모든 세부 사항이 그대로 살아남았거나 현재 네트워크가 그것을 구현한다는 증거가 아니다.

그러나 중심 아키텍처는 유지되었다. RP에 뿌리둔 공유 트리, 선택적 소스 전용 트리, Register와 Register-Stop, Join/Prune 상태와 타이머가 그것이다. 현재 IANA 레지스트리도 여전히 그 메시지 유형들을 명명한다. 성숙해진 것은 전지식에 대한 환상이 아니라, 부분적이고 만료되는 관찰을 조율하는 더 엄격한 방법이었다.

이것이 유용한 역사적 교훈이다. 스파스 멀티캐스트는 모든 조인을 전달 영수증으로 바꾸는 방식으로 확장되지 않았다. 각 신호가 의미해야 하는 것을 제한함으로써 확장되었다. IGMP 보고는 로컬 그룹 존재를 의미했다. RP 매핑은 현재 셋 하에서 랑데부 포인트를 선택했다. Join은 하나의 상류 관계를 갱신했다. Register는 초기 데이터를 운반했다. Register-Stop은 그 운반을 일시 중지했다.(S,G)항목은 소스 경로를 제안했다. SPT 비트는 그 경로로 데이터가 도착함을 기록했다. 타이머는 더 이상 갱신되지 않는 주장을 철회했다.

시스템은 이 좁은 명세들을 조합함으로써 동작하게 되었다. 오직 어떤 관찰자가 그중 하나를 전체 결과의 증명으로 승격시킬 때만 오도하게 된다.

출처