요약

  • RFC 3261은180 Ringing을 잠정 응답으로 정의합니다. 수신 사용자 에이전트가 사용자에게 알리려 시도하고 있으며, 이 응답은 발신자 측에서 로컬 벨백을 시작하는 데 사용될 수 있습니다.
  • 180 응답은 상대방 사용자가 알림을 들었는지, 얼리 미디어가 도착했는지, 통화가 수락되었는지를 증명하지 않습니다. RFC 3262와 PRACK을 통한 신뢰할 수 있는 잠정 전달은 메시지 처리를 강화하지만 잠정 상태를 최종 응답으로 바꾸지는 않습니다.
  • 운영 시스템은 알림 증거의 분기(branch), 출처, 시간을 보존하고, 이를 최종 응답, 미디어, 사람의 응답, 애플리케이션 결과 기록과 분리해 유지해야 합니다.

발신자 근처에서 만들어질 수 있는 벨소리

수화기에서 익숙하게 들리는 소리는 단순한 이야기를 유도합니다. 원격 전화가 울리고 있어야 한다고 말이죠. SIP는 의도적으로 더 복잡한 이야기를 허용합니다. RFC 3261에 따르면 사용자 에이전트 클라이언트는 180 응답을 사용해 로컬 벨백을 시작할 수 있습니다. 따라서 신호 메시지가 도착했다는 이유만으로 그 소리가 발신자 측에서 생성될 수 있습니다. 이는 반드시 착신자 환경에서 네트워크를 통해 전송된 오디오가 아닙니다.

이 구분은 의미론적 세부 따지기가 아닙니다. 180 응답은 초대를 수신한 사용자 에이전트가 사용자에게 알리려 시도하고 있다고 말합니다. '시도하고 있다'는 점이 중요합니다. 데스크톱 클라이언트는 배너를 표시할 수 있고, 모바일 기기는 소리를 끌 수 있으며, 등록된 엔드포인트는 포크가 취소되는 시점에 이미 오프라인일 수 있고, 중개자는 하위 분기가 계속되는 동안 응답을 생성했을 수 있습니다. 프로토콜 이벤트는 관찰 가능합니다. 인간의 이벤트는 여전히 조건적입니다.

RFC 3261은 180을 1xx 잠정 응답으로 분류합니다. 잠정적이라는 것은 처리가 계속되고 결과가 확정적이지 않다는 뜻입니다. 초대에 대한 최종 2xx 응답이 수락을 확립하며, 최종 실패 응답은 다른 결과를 보고합니다. 180을 '응답됨'으로 표시하는 모니터는 상태 머신의 두 수준을 하나로 뭉개고, 이 응답 클래스가 보존하도록 설계된 불확실성 자체를 버리는 셈입니다.

헨닝 슐츠리네(Henning Schulzrinne)는 조너선 로젠버그, 곤살로 카마릴로, 앨런 존스턴, 존 피터슨, 로버트 스파크스, 마크 핸들리, 이브 스쿨러와 함께 RFC 3261의 8명의 공동 저자 중 한 명입니다. 이 사양을 집단적 작업으로 다루는 것이 중요합니다. 한 사람이 모든 신호 선택을 발명한 이야기가 아니라는 뜻입니다. 슐츠리네의 더 넓은 기여는 신호, 미디어, 사용자 경험이 서로 혼동되지 않으면서 연관될 수 있는 아키텍처를 정의하는 데 도움을 준 데 있습니다.

미디어가 다른 일을 하는 동안 신호가 도착할 수 있다

곤살로 카마릴로와 슐츠리네가 쓴 RFC 3960은 얼리 미디어와 벨백 톤 생성에 초점을 맞춥니다. 이 문서는 단일 상태 코드만으로 발신자의 경험을 추론할 수 없는 이유를 설명합니다. 세션이 수락되기 전에 네트워크나 원격 엔드포인트에서 미디어가 흐를 수 있습니다. 또는 발신자 기기가 신호에 기반해 로컬 톤을 생성할 수 있습니다. 이들은 신뢰 속성과 실패 속성이 서로 다른 별개의 메커니즘입니다.

게이트웨이가 대역 내 안내 방송(혼잡, 대기열 정보 또는 특수 톤)을 보내는 경우, 로컬 생성 벨백이 그 안내를 가릴 수 있습니다. 얼리 미디어를 기다리다 결코 도착하지 않는 엔드포인트가 있다면, 트레이스에 180 응답이 존재하더라도 발신자는 무음을 들을 수 있습니다. 포킹은 선택을 더 어렵게 만듭니다. 둘 이상의 얼리 다이얼로그가 신호나 미디어를 제공할 수 있기 때문입니다. 따라서 RFC 3960은 상태 코드를 청각적 사실과 동일시하는 보편적 규칙을 승인하는 대신 정책적 절충을 설명합니다.

유용한 모델에는 최소한 세 개의 시계가 있습니다. 신호 시계는 잠정 응답이 언제 수신되었는지 기록합니다. 미디어 시계는 패킷이 언제, 어느 출처에서 사용 가능해졌는지 기록합니다. 인간의 시계는 사람이 언제 알아차렸거나 행동했는지를 다룹니다. 네 번째 시계—최종 다이얼로그 결과—는 수락이나 실패를 기록합니다. 이들은 익숙한 순서로 진행되는 경우가 많지만, 프로토콜은 이들을 '응답'이라는 하나의 타임스탬프로 병합할 것을 보장하지 않습니다.

이것이 사양 경계의 분석적 가치입니다. 트레이스는 특정 시점에 특정 SIP 요소가 메시지를 수신했다는 것을 증명할 수 있습니다. 그러나 사용자의 스피커가 무엇을 출력했는지, 운영체제가 알림을 억제했는지, 사람이 그 자리에 있었는지는 증명할 수 없습니다. 이러한 질문에는 그들 자신의 제어 표면에서 나오는 증거가 필요합니다.

PRACK은 잠정 메시지를 승인하지, 통화를 승인하지 않는다

신뢰할 수 없는 잠정 전달은 실용적 문제를 만듭니다. 초대가 여전히 처리 중인 동안 상태 업데이트는 손실되거나 중복되거나 재정렬될 수 있습니다. 조너선 로젠버그와 슐츠리네가 쓴 RFC 3262는 신뢰할 수 있는 잠정 응답을 추가합니다. 신뢰성 있는 1xx 응답은 시퀀스 정보를 담고, 사용자 에이전트 클라이언트는PRACK으로 이를 승인합니다.

이 메커니즘은 그 이름에 걸맞습니다. 잠정 응답이 순서대로 수신되었음을 확립할 수 있습니다. 그러나 승인된 것은 여전히 잠정적입니다. PRACK은 최종 2xx 응답에 대한 ACK가 아니며, 미디어 수신의 증거도 아니고, 사용자가 응답했다는 선언도 아닙니다. RFC 3262는 최종 응답이 PRACK이 도착하기 전에 전송되는 것조차 허용합니다. 신뢰성은 상태 메시지의 보관 관리를 개선할 뿐, 그 메시지의 의미를 확대하지 않습니다.

이것은 반복되는 엔지니어링 함정입니다. 이벤트가 재전송 규칙, 상관 필드, 대응되는 승인을 갖추면 대시보드는 그것을 내구성 있는 이정표로 취급하는 경향이 있습니다. 그러나 프로토콜 신뢰성은 '상대가 이 항목을 받았는가?'라는 질문에는 답하지만 '세계가 우리가 그 항목에 연관시키는 비즈니스 상태에 도달했는가?'에는 답하지 않습니다. 더 견고한 PRACK 교환이 가치 있는 것은 바로 이 두 질문을 구분하게 해주기 때문입니다.

포킹은 하나의 통화를 여러 잠정 이야기로 만든다

SIP 초대는 여러 연락처에 도달할 수 있습니다. 한 분기는 180을 반환하는 동안 다른 분기는 얼리 미디어를 공급하거나 요청을 거부하거나 결국 응답할 수 있습니다. '벨소리' 같은 통화 수준 단일 라벨은 어떤 분기가 말했는지, 그 상태가 여전히 중요한지를 숨깁니다.

RFC 6228은 199 응답을 추가하여 프록시가 상위 사용자 에이전트에게 하나의 얼리 다이얼로그가 종료되었다고 알릴 수 있게 합니다. 이 응답 역시 잠정 메시지입니다. 다른 얼리 다이얼로그를 종료하지 않으며, 원래 초대에 대한 최종 응답을 대체하지도 않습니다. 그 가치는 선택적입니다. 최종 다이얼로그가 되지 않을 분기와 연관된 상태와 미디어를 수신자가 폐기할 수 있게 합니다.

RFC 6228은 슐츠리네가 아니라 크리스터 홈베리가 저작했습니다. 이 문서는 또 다른 슐츠리네의 공적이 아니라, 아키텍처의 결과에 대한 후속 증거로 여기에 속합니다. 이 문서는 중요한 운영적 지점을 드러냅니다. 잠정 상태에는 출처(provenance)가 있다는 것입니다. '180이 발생했다'는 기록이 어떤 얼리 다이얼로그가 그것을 생성했는지, 이후 이벤트가 그 분기를 대체했는지를 알지 못하면 불완전합니다.

이렇게 되었다고 180이 무용해지는 것은 아닙니다. 분기 범위의alerting-started이벤트는 정직하면서도 운영적으로 가치 있을 수 있습니다. 라우팅 진행을 측정하고, 결코 진전되지 않는 기기를 드러내며, 초대와 최종 처분 사이의 간격 비교를 돕습니다. 조건은 데이터 모델이 출처, 분기, 시간, 대체 상태를 유지하면서 이 이벤트를 응답 수신서로 승격시키지 않는 것입니다.

신중한 귀속은 신중한 증거의 일부다

슐츠리네의 현재 컬럼비아 프로필은 그를 수리방법·컴퓨터과학 분야의 줄리언 클래런스 레비 교수이자 전기공학 교수로 기록합니다. IETF Datatracker는 그와 광범위한 RFC 작업을 연관시키며, 현재 스냅샷은 90개의 RFC를 나열합니다. 이러한 사실들은 표준화 참여의 규모를 확립하지만, 이 글을 단독 발명가 전기로 바꿀 근거가 되지는 않습니다.

더 좁은 귀속이 더 유용합니다. RFC 3261은 집단적 작업입니다. RFC 3262는 로젠버그–슐츠리네 문서입니다. RFC 3960은 카마릴로와 슐츠리네의 정보성(Informational) RFC이며 인터넷 표준이 아닙니다. RFC 6228은 홈베리의 후속 확장입니다. 이러한 역할을 정확히 유지하는 것은 신호 증거에 요구되는 것과 같은 규율을 모델링합니다. 출처를 밝히고, 범위를 보존하고, 편리한 라벨이 그 출처가 뒷받침하는 것보다 더 많은 것을 주장하지 못하게 하는 것입니다.

출처