요약
- RTP의 예시 수신기는 처음 보는 동기화 소스를 수습 상태에 두었습니다. 설득력 있는 패킷 하나로는 부족했고, 짧은 연속 구간이 연속성에 대한 약한 근거를 제공했습니다.
- 같은 상태 기계는 과도한 순번 점프를 거부하고 후속 번호를 기억했으며, 그 다음 번호가 도착했을 때만 다시 동기화했습니다. 이는 손실 회계를 보호했지만 발신자를 인증하거나 성공적인 플레이아웃을 입증하지는 못했습니다.
소스가 통과하기 전에 헤더가 먼저 통과할 수 있었다
SSRC0x4A17을 한 번도 본 적 없는 회의 수신기가 갑자기 순번 41,900을 받는 상상을 해봅시다. 패킷은 RTP 버전 2라고 말합니다. 페이로드 타입은 세션이 이해하는 것입니다. 패딩과 길이는 서로 일관됩니다. 그러나 이러한 사실들 중 어느 것도 이 데이터그램이 의도된 회의에 속한다는 것을 증명하지 못합니다. 잘못 전달된 트래픽일 수도 있고, 잘못된 컨텍스트로 복호화된 패킷일 수도 있고, 우연한 충돌이거나, 역사가 아직 알려지지 않은 진짜 소스의 시작일 수도 있습니다.
최초의 RTP 표준인RFC 1889는 바로 이 근거 부족 문제에 정면으로 직면했습니다. 후속 표준인RFC 3550은 이 설계를 유지하면서 설명을 더 정교하게 다듬었습니다. 이전에 들어본 적 없는 소스에 대해서는 약한 헤더 유효성 검사만 사용할 수 있습니다. 버전, 페이로드 타입, 패딩, 확장, 길이는 일부 불가능한 해석을 배제할 수 있습니다. 그러나 단독 패킷을 역사로 바꿀 수는 없습니다.
그래서 수신기는 시간을 검사의 일부로 만들었습니다. 새로 관측된 SSRC는 수습 상태에 들어갑니다. 예시 알고리즘은 소스를 유효하다고 선언하기 전에 연속된 순번의 작은 구간이 도착하기를 기다립니다. 전형적인MIN_SEQUENTIAL값이 2이므로, 패킷 41,900은 후보로 남습니다. 패킷 41,901은 어느 한 패킷만으로는 찾을 수 없는 최초의 관계를 제공합니다.
이 관계는 의도적으로 소박합니다. 연속된 두 숫자는 사람을 식별하거나, 장치를 인증하거나, 페이로드가 디코딩될 것임을 확립하지 못합니다. 한 패킷 전과 비교해 하나의 운영상 가설을 더 유용하게 만들 뿐입니다: 이것은 순번을 유지하는 소스처럼 보인다는 것.
수습은 더 적은 사고를 위해 지연 시간을 지불했다
RTP는 애플리케이션이 수습 패킷을 버리거나, 결과적으로 생기는 지연이 허용된다면 검증될 때까지 보관할 수 있도록 허용했습니다. 이 선택은 더 강한 입장 허용의 실제 비용을 드러냅니다. 더 많은 연속 패킷을 요구하면 우연히 겹치는 헤더와 숫자가 통과할 확률이 줄어들지만, 초기 미디어를 더 많이 유보하게 됩니다. 손실이 많은 경로에서는 요구되는 긴 연속 구간이 진짜 소스가 아예 유효해지지 못하게 만들 수도 있습니다.
표준은 하나의 상수가 모든 애플리케이션에 맞는다고 주장하지 않았습니다. 부록 안에 알고리즘과 전형적인 매개변수를 제시했습니다. 이미 유효한 RTCP 패킷을 수용한 수신기는 더 강한 컨텍스트에서 시작할 수 있습니다. 타임스탬프가 예측 가능한 증분을 따르는 페이로드 포맷은 또 하나의 검사를 제공할 수 있습니다. 전화 대화, 저장된 스트림, 높은 지연의 멀티캐스트 세션은 거짓 허용과 지연된 음성 사이에서 같은 균형을 살 필요가 없습니다.
그래서 “수습(prohibition)”보다 “probation”이 더 나은 이름입니다. 이는 불확실성 아래의 국소적 입장 정책입니다. 수신기가 얼마나 많은 시간적 일관성이 시작 비용을 감수할 만한지를 선택하는 것입니다.
숫자는 원형 공간에 살았다
입장이 허용된 뒤에도 수신기는 순번을 보통 정수처럼 비교할 수 없었습니다. RTP는 16비트 순번을 사용합니다. 65,535 다음은 0입니다. 따라서 큰 숫자 뒤에 오는 작은 숫자는 완전히 건강한 순환일 수 있지, 뒤로 가는 여정이 아닙니다.
예시 상태는 관측된 최고 숫자와 완료된 16비트 주기의 수를 유지합니다. 둘을 합쳐 회계용 확장 순번을 이룹니다. 이 덕분에 RTCP 보고서가 와이어 필드를 확장하지 않고도 순환을 넘어 예상 패킷 수를 말할 수 있습니다.
그러나 네트워크는 패킷을 재정렬하기도 합니다. 최대치보다 살짝 뒤처진 숫자는 늦게 도착한 패킷이거나 중복일 수 있습니다. 약간 앞선 숫자는 간격을 드러낼 수 있습니다. 수신기는 단일 동등성 검사가 아니라 현재 최대치 주변의 수용 가능한 이웃 범위를 필요로 합니다.
RFC 3550의 예시는MAX_MISORDER100과MAX_DROPOUT3,000을 사용합니다. 그에 딸린 가정이 중요합니다: 초당 50패킷, 최대 재정렬 2초, 최대 손실 구간 1분. 이들은 시대를 초월하는 자연 상수가 아니라, 예시가 경계를 그리는 운영 세계를 설명해 줍니다.
불가능한 점프는 즉각적인 전기(傳記)를 받지 않았다
이제 진행 중인 소스가 순번 12,000에 도달한 뒤 50,000을 전달한다고 합시다. 차이를 손실로 계산하면 확신에 찬 재난 보고서가 나옵니다. 50,000을 즉시 재시작으로 수용하는 것도 하나의 이상 현상으로부터 역사를 낳습니다. 손상된 패킷, 낙동 물건(잡음 트래픽), 불연속, 소스 재시작 또는 수신기가 관측하지 못한 매우 긴 주기일 수 있습니다.
예시 알고리즘은 어느 쪽 지름길도 택하지 않습니다. 큰 점프를 거부하고, 거부된 숫자에 1을 더한 값을bad_seq로 저장합니다. 다음으로 받은 패킷이 50,001이면, 이 쌍은 연속적인 시작을 제공합니다. 수신기는 그때 50,001이 새 에포크의 첫 수용 패킷인 것처럼 순번 상태를 다시 초기화합니다.
의심스러운 숫자 하나만으로 과거를 다시 정의할 수는 없었습니다. 그 후속 숫자가 재시작 가설을 행동 가능한 것으로 만들었습니다.
이 두 패킷 추론은 초기 수습과 비슷하지만 다른 질문에 답합니다. 초기 수습은 처음 보는 SSRC가 오래 지속되는 소스 상태를 받을 자격이 있는지 묻습니다. 재시작 확인은 이미 알던 SSRC의 오래된 순번 역사가 지금 도착하는 패킷을 더 이상 기술하지 않는지 묻습니다. 둘 다 연속성을 사용하는데, 명시적인 재시작 메시지를 가정할 수 없기 때문입니다.
카운터를 초기화하는 것은 무지의 인정이었다
큰 점프 후 수신기가 다시 동기화할 때 손실 통계를 초기화합니다. 근거를 버리는 것처럼 보일 수 있습니다. 사실 옛 기준선을 유지하는 것은 수신기가 실제로 얻지 못한 근거를 날조하는 것입니다.
긴 손실 구간 동안 여러 개의 완전한 16비트 주기가 지나갔을 수 있습니다. 소스는 무작위 순번에서 재시작했을 수도 있습니다. 관측된 다리가 없다면, 수신기는 오래된 에포크와 새 에포크 사이에 몇 패킷이 있었는지 알 수 없습니다. 연속된 누적 손실 수치는 그 알 수 없는 구간을 정밀해 보이는 숫자로 바꿔버릴 것입니다.
RTP 손실 회계는 이미 대시보드 백분율이 암시하는 것보다 미묘합니다. RFC 3550은 누적 손실을 예상 패킷 수에서 실제 수신한 패킷 수를 뺀 것으로 정의하며, “수신”에는 늦게 도착한 패킷과 중복이 포함됩니다. 중복이 누락보다 많으면 결과는 음수가 될 수 있습니다.RFC 3611은 나중에 손실과 중복에 대한 흔적(trace)을 추가하고, 보고자에게 해석에 서두르기보다 관측된 사건을 보존할 것을 권했습니다.
에포크 경계가 분모의 의미를 결정합니다. 초기화는 이전 손실이 중요하지 않았다고 말하지 않습니다. 옹호 가능한 순번 산술은 관측되지 않은 재탄생을 넘어갈 수 없다고 말하는 것입니다.
RFC 3550은 아이디어가 아니라 예시를 고쳤다
이 메커니즘은 1996년 RFC 1889에 등장했습니다. 2003년 RFC 3550이 그것을 대체할 때, 변경 기록은 작지만 결과가 큰 수정들을 문서화했습니다.base_seq초기화가 하나 덜한 값이 아니라 실제 수신된 순번이 되도록 바뀌었습니다. 불량 순번에 1을 더한 값이 저장된다는 산문이 정정되었습니다. 초기화 단계들이 분리되어 구현자가 하나의 함수 호출을 전체 설정으로 오해하지 않게 되었고, RFC 1889가 출판 과정에서 잃어버린 단어들이 복원되었습니다.
이 역사가 중요한 이유는 예시가 인프라가 되기 때문입니다. 의사코드 부록은 그 한계를 설명하는 단락보다 더 널리 복사됩니다. 시작점의 오프바이원 오류는 예상 패킷 산술을 바꾸고,bad_seq주변의 모호한 산문은 어떤 두 번째 패킷이 새 에포크를 확인하는지를 바꿉니다.
이 수정은 설계의 진짜 중심도 드러냅니다. 영리한 부분은 2, 100, 3,000이라는 문자 그대로의 값이 아닙니다. 불확실성을 명시적 상태에 배치한 것입니다: 후보, 유효한 순번, 수용 가능한 재정렬, 의심스러운 불연속, 확인된 새 시작.
연속성은 암호학적 권위가 아니었다
연속된 숫자를 내보낼 수 있는 위조 발신자는 순번-연속성 검사를 통과할 수 있습니다. 진짜 발신자는 손실 때문에 실패할 수 있습니다. 잘못 구성된 단말은 아름답게 정렬된 헛소리를 만들 수 있습니다. RTP의 헤더 검사와 수습은 우발적인 잘못 전달과 불그럽다한 상태를 걸러내는 필터이지 출처의 증명이 아닙니다.
RFC 3711은 나중에 SRTP를 정의하여 적절한 키 관리와 함께 기밀성, 메시지 인증, 재생 보호를 제공했습니다. 이는 서로 다른 근거 계층입니다. SRTP조차 사람이 들었다는 것, 미디어가 이해 가능했다는 것, 비즈니스 대화가 이루어졌다는 것을 증명하지 못합니다. SRTP는 암호학적 컨텍스트 안의 패킷을 보호합니다.
유용한 역사적 교훈은 더 좁고 더 오래 지속됩니다. 필드는 그것을 해석하는 상태를 통해서만 근거가 됩니다. 첫 순번은 과거가 없는 주장입니다. 두 번째는 연속성을 확립할 수 있습니다. 거대한 점프는 옛 계정을 중단시킵니다. 다음 번호는 새 에포크를 확립할 수 있습니다. 모든 단계에서 수신기가 결정을 소유하며, 그 결정이 말할 수 있는 것과 말할 수 없는 것을 보존해야 합니다.
출처
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





