SIP의 이해 - 3. Early Media in SDP (RFC 3959, RFC 3960)
라인하트2009. 1. 20. 14:40
글 싣는 순서
1. SIP의 개요 (RFC 3261)
2. SDP의 개요 (RFC 4566 & RFC 3264)
3. Early Media in SDP (RFC 3959, RFC 3960)
4. RFC 3261의 주요 매쏘드 (I)
5. RFC 3261의 주요 매쏘드 (II)
6. RFC 3261의 Response의 이해
7. PRACK (RFC 3262)
8. SUBSCRIBE & NOTIFY (RFC 3265, RFC 3680)
9. INFO (RFC 2976)
10. UPDATE (RFC 3311)
11. REFER (RFC 3515)
12. PUBLSIH (RFC 3903)
SDP를 마무리 짓기 위해 이 부분을 짚고 넘어갑니다. Early Media를 굳이 언급하지 않아도 그 의미를 쉽게 이해하시겠지만, RFC 3959 The Early Session Disposition Type for the SIP와 RFC 3960 "Early Media and Ringing Tone Generation in the SIP" 의 내용을 위주로 정리해 보겠습니다. 표준안을 아는 것과 모르는 것의 차이는 크다는 것을 믿기 때문입니다.
Early Media의 개요 아래 그림은 일반적인 SIP 호 설정 시나리오입니다. 엘리스는 수화기를 들어 전화번호를 누르면 Invite 메세지와 함께 Offer가 이루어집니다. 밥의 전화기는 Ringing (따르릉)하게되며, 180 Ringing 메세지가 엘리스에게 전달됩니다.180 Ringing을 받은 엘리스는 Local Ringback을 들으면서, 밥의 전화기가 울리고 있다고 인지합니다. 밥은 Ringing 소리를 듣고 전화가 왔음을 인지하게 되어 전화기로 다가가 수화기를 드는 순간 200 OK메세지와 Answer가 엘리스에게 전달됩니다. 200 OK를 받은 엘리스는 ACK를 밥에게 전송하며, 통화가 시작됩니다.
일반적인 SIP 통화 시나리오 상에서 두 가지 문제가 발생하게 됩니다.
Remote Ringback
180 Ringing 메세지를 전달받은 엘리스의 전화기는 자체적으로 Ringback tone을 발생시킵니다. 그러나, 현실에서는 컬러링이나 Remote 링백톤을 들을 수 있어야 하니다.
Media Clipping
보통 사람들은 수화기를 들면서 "여보세요"라고 말합니다. 위의 시나리오는 200 OK를 보내고 ACK를 받을 때까지의 이야기는 전달될수 없게 됩니다. 일반적으로 SIP Signaling은 몇개의 Proxy를 거쳐서 전달되지만, RTP는 전화기간에 바로 전달이 됩니다. 따라서 Media Clipping이 발생할 수 밖에 없어 밥의 "여보세요"가 엘리스에게는 "세요"라고 들릴 것입니다.
이러한 문제점은 SDP의 일반적인 Offer / Answer 절차 이전에 Media가 전송되어져야 한다는 것을 의미합니다. 즉, Early Media는 정규 Offer / Answer 절차 이전에 전송되는 RTP를 가리킵니다. 그렇다면, Early Media의 발생시점은 Invite의 생성에서 부터 ACK 신호까지입니다. ACK 이후에는 정상적인 Media가 전송됩니다.
SDP 협상의 방식
기본적으로 Early Media가 동작하기 위해서는 위의 그림과 같이 Invite with SDP로 initial Offer가 발생되어야 합니다. 위에서 언급한 Media Clipping의 경우, Invite with SDP (Offer)로 보내는 대부분의 경우 이러한 Media clipping은 발생하지 않습니다. UAC (송신자)는 200 OK의 수신 여부와는 상관없이 Offer를 하자마자 자기 스스로 들어오는 Media에 대해 재생할 준비를 하도록 되어있습니다. 그러나, 이렇게 Invite with SDP만이 있는 것은 아닙니다.
아래 그림에서 보듯이 200 OK에 밥이 먼저 Offer를 할 수도 있으며, Update Method를 이용하여 SDP를 교환할 수도 있습니다.
Early Media의 두 가지 모델 RFC 3960에 의하면, Early Media는 다음과 같이 두가지 모델로 구분할 수 있습니다.
Gateway Model
이 모델은 SIP 시그널링 상에서 Early Media에 대한 특별한 언급없이 동작합니다. 180 Ringing 메시지를 받으면, Local Ring Backtone을 발생시키고,상대방으로 부터 RTP(Early Media)가 전송되면, Local Ringback tone 발생을 중단하고, RTP를 재생합니다. 이 Gateway 모델의 문제점은 Forking 및 Security 문제가 있습니다.
Application Server Model
SIP 시그널시 early media에 대한 offer/answer를 가능하게 한다. RFC 3959에 정의된 Content-Disposition 헤더에 session 또는 early-session의 새로운 disposition type을 설정하여 Early-media가 가능하게 합니다.
여담으로 글을 읽어보면 3960이 3959보다 먼저 발표된 글인 듯한데 참 RFC 번호는 반대입니다.
Ringback tone 재생 정책 PSTN상에서 수신자가 Alert 메세지를 보내면 Ringback tone은 PBX에 의해 재생됩니다. SIP의 경우 UAS (수신자)에 의해 Ringback이 재생되지 않으면, UAC에서 자체적으로 Ringback tone을 재생하기로 되어 있습니다. 만일, Announcement 또는 special ringing tone이 UAS에 재생이 되면, UAC는 자체적인 재생을 중단하고 UAS로 부터오는 Media를 재생하는 것이 일반적입니다. 그러나, UAS가 early media 전송하려는 의도없이 Early Offer를 진행하기도 하고, reliable provisonal response 없이 Early media를 전송하기도 하기 때문에 UAC는 쉽게 local ringback tone을 재생해야할 지 말아야 할지를 결정할 수 없습니다.
local ringback tone 재생에 관련하여 다음과 같은 정책을 구현해야합니다.
180 Ringing을 받지 않았다면, local ringing을 재생하지 않는다
180 Ringing을 받았으나 수신되는 Media 패킷이 없다면, local ringing을 재생한다.
180 Ringing을 받았으면서 Media 패킷이 수신된다면, Media를 재생하고 local ringing을 재생하지 않는다.
180 Ringing은 수신측의 전화기가 울리고 있음을 의미합니다. (Alert)
Application Server Model 상에서의 Early Media Early Media session은 지금까지 이야기한 Regular Session에서 함께 처리됩니다. 그러나, Application Server Model은 Early Media를 위한 별도의 절차를 수행합니다. 따라서, 하나의 호 시그널링에서 Early Media session과 Regular session을 동시에 Offer / Answer를 수행 한 후 전환합니다. 이 때, Content-Disposition Header에 session과 early-session이라고 하여 각각의 쓰임새를 구분합니다.
early session이 regular session으로 전환될 때 코덱을 변경할 필요가 없도록 하기 위하여 Early Media session과 Media session은 같은 코덱을 사용하는 것을 권장합니다. RFC 3959의 예제를 보도록 하겠습니다.
엘리스는 밥에게 Content-Disposition: session 헤더를 INVITE에 추가해서 전송합니다. 이 헤더의 의미는 INVITE에 포함된 Offer는 regular session에 대한 것임을 표시합니다.
밥은 183 Session Progress를 엘리스에게 전송합니다. 이때, 다중 메세지가 포함되었음을 의미하는 Content-Type:multipart/mixed 라는 정보를 함께 보냅니다. 빨간색으로 된 Content-Disposition 헤더를 보시면 session과 early-session 두가지가 있습니다. 첫번째 바운더리인 Content-Disposition:session은 regular session에 대한 것으로 기존의 INVITE with offer에 대한 answer의 내용입니다. 두번째 바운더리인 Content-Disposition:early-session은 Early Media를 위한 Offer입니다.
엘리스는 INVITE에 대한 200 OK (수화기를 드는 행동)를 밥으로 부터 받기 전까지 Early-Offer에 대한 Answer를 할 수 있는 방법이 없습니다. 따라서 이때 PRACK 가 필요합니다. 이 메쏘드를 통해 아래와 같이 Early Offer에 대한 Answer를 수행합니다.
PRACK에 대한 200 OK를 받게 되면, Early Media를 통해 필요한 대화가 가능합니다. 이미 Regular session과 Early session에 대한 Offer / Answer가 완료되었습니다.
밥이 수화기를 들어 200 OK를 전송할 때, Early session 은 regular session으로 전환이 이루어집니다.
마치며 이제 SDP에 대해서는 완전하게 살펴본 듯합니다. SDP에 대한 것을 완벽하게 이해하셨다면, 다시 RFC 3261로 다시 회귀하도록 하겠습니다.