본문 바로가기

SIP의 이해

[연재] SIP의 이해 2 - 시스코 CUCM SIP Trunking의 이해 (중편)

시작하며
 "SIP의 이해" 연재가 RFC 권고안을 기준으로 개념과 정의에 중점을 두었다면, "SIP의 이해 2"는 실제 시스코 CUCM에서 어떻게 구동되는 지에 대한 쓰임새 위주로 정리하였습니다. 저도 정리하다보니 SIP의 이해에서 막연하게 설명하였던 부분이 좀 더 명쾌하게 정리가 되는 느낌입니다. 

이 편에서는 INVITE 메세지의 나머지 SIP 헤더를 살펴보고, INVITE 메세지의 응답인 180 Ringing의 헤더를 살펴보겠습니다. 

Timer 관련 헤더
타이머과 관련된 헤더들을 아래와 같이 4 가지 정도 있습니다. Expires 헤더를 제외한 나머지 3 개는 상호 연동되도록 되어 있습니다. 

Supported: timer,resource-priority,replaces

Session-Expires: 1800

Min-SE: 1800

Expires: 180


우선은 Supported 헤더 부터 살펴보겠습니다. 
  • Supported: timer,resource-priority,replaces (옵션, 시스코는 필수)
    Supported는 User Agent가 지원하는 SIP 옵션을 정의합니다. 
    - Timer : 세션을 재설정(Refresh)하기 위한 Keep-alive 로써의 세션 타이머를 의미
    - Resource-priority : 자원에 대한 우선 순위 지정
    - Replace : 기존 SIP 다이얼로그를 새로운 SIP 다이얼로그로 대체하기 위한 Replace헤더를 지원하는 것으로 Attended Transfer 나 Call Pickup Retrive 와 같은 부가 기능 사용 시에 필요합니다.  

    Supported 헤더는 현재의 단말이 SIP 옵션을 지원할 수 있다는 것을 알리는 것이며, 상대측이 SIP 옵션을 지원하지 않는다면 의미가 없습니다. Supported 헤더와 관련된 설정은 다음과 같습니다.

    - SIP Profile에서 session Refresh 방식을 설정


    - SIP Trunk Security Profile에서 replace 헤더 설정


    일반적으로 SIP Trunk Security Profile을 설정 시에 항상 체크해 놓는 것이 "Accept replace header" 옵션입니다. ^^


  • Session-Expires: 1800 와 Min-SE: 1800 (옵션)
    Supported 헤더에서 timer 옵션이 있을 경우 Min-SE와 함께 Session-Expires 헤더와 함께 사용됩니다. 세션은  SIP Profile의 설정에 따라 Re-INVITE 또는 UPDATE 요청으로 재설정됩니다. INVITE 메세지를 수신한 착신 UA는 200 OK 메세지 내에 Session-Expires 헤더를 포함하여 응답합니다. 



    Min-SE는 Minimim Session Expores로 최소 60초에서 최대 86400 초 (24시간)로 설정합니다. 최초 발신 UA가 설정한 값을 SIP Proxy는 값을 증가시킬 순 있지만 감소시킬수는 없으며, 설정된 시간 내에 Re-INVITE나 UPDATE를 통해 세션을 재 설정하지 않을 경우에 UA는 자동으로 BYE Request를 전송하고 호를 종료합니다. 


  • Expires: 180 (옵션)
    Expire 헤더는 INVITE 요청에 포함되는 옵션 헤더로 INVITE 메세지의 유효 기간을 명시합니다. 즉, INVITE가 전송된 후 정해진 시간 내에 200 OK 응답을 받지 못하면 설정된 대로 재시도를 진행합니다. 재시도에도 응답이 없으면 자동으로 CANCEL 메세지를 보내 호를 취소합니다. CUCM의 재시도 횟수는 기본적으로 6번으로 설정되어 있습니다. 



    SIP Expires Timer는 mS로 표시되므로 180000mS 는 3분을 의미합니다. 


Event 관련 헤더
이벤트 관련 헤더는 아래와 가티 4 가지 정도 입니다. 

Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACKPRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY
Allow-Events: presence, kpml

Supported: X-cisco-srtp-fallback

Supported: Geolocation

  • Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACKPRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY (옵션)
    Allow 헤더는 User Agent가 지원하는 메쏘드 (요청)에 대한 리스트를 정의합니다. 만일 PRACK을 사용하지 않을 경우 아래와 같이 SIP Profile에서 설정할 수 있습니다. SIP는 INVITE에 대한 200 OK 이전의 180 또는 183 과 같은 응답에 대해 신뢰할 만한 응답을 제공하지 못하므로 PRACK 을 이용하여 신뢰성을 제공합니다.   



    SIP Profile 설정에서 SIP Rel1xx Option을 Disable할 경우 Allow 헤더에서 PREACK 메쏘드가 빠지게 됩니다. 


  • Allow-Events: presence, kpml (옵션)
    Allow-Events 헤더는 명시된 이벤트에 대한 SUBSCRIBE 요청을 진행하고 NOFITY 응답을 할 수 있다는 것을 의미합니다. 여기서는 Presence와 KPML (DTMF)를 지원을 명시하였습니다. 시스코의 UA가 이들 이벤트를 지원하더라도 Trunk에 추가적인 설정을 하는 것이 좋습니다.  



    SIP Trunk Security Profile에서 "Accept presence subscription"을 설정할 경우 presence가 Allow-Events 헤더에 표시되고, Trunk 설정에서 DTMF Signaling Method를 설정할 경우에 이벤트가 설정됩니다.   


  • Supported: X-cisco-srtp-fallback (옵션)
    cisco가 명기된 필드값은 시스코가 원활한 호흐름을 위해 직접 만든 헤더로, 타사의 제품이 수신할 경우 자동으로 무시됩니다. 이 헤더는 통신하는 UA가 SRTP를 지원하지 않는다면, RTP로 전환하는 것을 허락한다는 의미입니다. 


  • Supported: Geolocation (옵션)
    Trunk에서 Geolocation을 설정할 설정할 경우에 위치 정보를 전송합니다.





기타 헤더
중요한 헤더들은 이미 대부분 설명을 하였으며, 설명하지 않은 나머지 SIP 헤더를 살펴보겠습니다. 아래에서 중요한 헤더는 Call-info 정도가 될 것입니다. 


Call-Info: <sip:10.10.199.251:5060>;method="NOTIFY;Event=telephone-event;Duration=500"

User-Agent: Cisco-CUCM8.0
Cisco-Guid: 2414147072-3082893189-0000000002-4224127660

Date: Wed, 17 Feb 2010 18:37:57 GMT

Max-Forwards: 70

Content-Length: 0



  • Call-Info: <sip:10.10.199.251:5060>;method="NOTIFY;Event=telephone-event;Duration=500" (옵션)
    Call-Info는 진행중인 호에 대한 좀 더 상세한 정보를 제공하는 헤더입니다. 여기서는 발신 UA의 정보와 Notify를 이용하여 Out-of-band DTMF Relay를 지원한다는 것을 명시하였습니다. 


  • User-Agent: Cisco-CUCM8.0 (옵션)
    요청을 처음 시작한 UA에 대한 정보를 나타냅니다. 이 정보에 대해 상세 설정은 다음에서 할 수 있습니다. SIP Profile 설정에서 CUCM의 버전 및 제품 정보를 표시합니다. 상대방에게 상세한 정보를 전달하기 위해 설정합니다. 




  • Cisco-Guid: 2414147072-3082893189-0000000002-4224127660
    시스코가 만든 헤더로 Trunk를 지나는 호에 대한 식별자로 1 번 트렁크로 들어온 호가 2번 트렁크로 송신되었음을 CDR에 표시하기 위해 사용합니다. 아마도 CUCM SME를 사용하는 환경에서는 유용한 정보이겠지만, 아직은 일반화되어 있지 않은 솔루션입니다. CUCM SME는 시스코의 Class 4 스위치로 이해할 수 있습니다. 


  • Date: Wed, 17 Feb 2010 18:37:57 GMT (옵션)
    실제 시간을 나타냅니다.  


  • Max-Forwards: 70 (필수)
    Max-Forwards 헤더는 IP 패킷의 TTL과 동일합니다. 만일 이 홉을 초과할 경우 483 Too Many Hops라는 에러 메세지로 호는 거절됩니다. 


  • Content-Length: 0 (필수)
    메세지 바디의 길이를 나타냅니다. SDP와 같은 메세지 바디가 포함될 경우에 십진수로 바이트 수를 표시합니다. 


지금까지 INVITE 메세지에 포함한 헤더들을 살펴보았습니다. 이에 대한 180 Ringing 메세지가 리턴되므로 메세지를 분석해 보겠습니다. 


180 RINGING 메세지 분석
이제 착신 UA는 INVITE 메세지를 정확히 수신하고 진행한다는 의미로 100 Trying을 전송할 것이며, 착신 UA의 링이 울리고 있다(Alerting)는 의미로 180 Ringing을 송신합니다. 180 Ringing을 수신한 송신자는 수화기를 통해 Ringback tone을 듣게 됩니다. 



대부분의 헤더 설명은 앞에서 이미 하였으므로 180 Ringing에서 눈여겨 보아야 할 헤더 위주로 정리하겠습니다. 아래는 180 Ringing의 메세지이며, 굵은 색 글씨는 바뀐 값을 표시한 것입니다. 

SIP/2.0 180 Ringing

Via: SIP/2.0/TCP 10.10.199.251:5060;branch=z9hG4bK3395a5cdb

From: <sip:2002@10.10.199.251>;tag=1b1993ff-121d-4616-8dc5-353990242dfe-32552697

To: <sip:1001@10.10.199.250>;tag=abee6e2b-75b0-4537-80f3-7a3a37d0fa55-32557664

Date: Wed, 17 Feb 2010 18:25:39 GMT

Call-ID: 8fe4f600-b7c13785-3-fbc712ac@10.10.199.251

CSeq: 101 INVITE

Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY

Allow-Events: presence

Contact: <sip:1001@10.10.199.250:5060;transport=tcp>

Call-Info: <sip:10.10.199.250:5060>;method="NOTIFY;Event=telephone-event;Duration=500"

Supported: X-cisco-srtp-fallback

Supported: Geolocation

P-Asserted-Identity: <sip:1001@10.10.199.250>

Remote-Party-ID: <sip:1001@10.10.199.250>;party=called;screen=yes;privacy=off

Content-Length: 0


메세지에서 대부분은 착신 UA의 정보를 담아서 보내게 됩니다. 이 과정을 통해 발신 및 착신 UA, 즉 UAC와 UAS간에 기본적인 정보가 교환됩니다.

  • Via 헤더 (필수)
    INVITE 메세지에 포함된 필드값과 동일한 값입니다.  


  • Cseq 헤더 (필수)
    Command Sequence Header의값도  INVITE 메세지와 동일하므로 기존의 101 INVITE 요청과 같은 다이얼로그에 대한 진행임을 쉽게 확인할 수 있습니다. 


  • From 과 To 헤더 (필수)
    INVITE 메세지와 동일한  From과 To의 필드값을 가지므로 이 헤더는 요청의 방향을 나타내는 것이지 메세지의 방향을 나타내는 것이 아님을 다시 확인할 수 있습니다. INVITE에서는 Tag가 From에만 있었지만, 180 Ringing에서는 To 헤더에 착신 UA에 Tag 정보를 추가하였습니다.  

  • Call-ID
    INVITE 메세지와 동일한 필드값을 가지며, 같은 다이얼로그 내에 있음을 알 수 있습니다.


  • P-Asserted-Identity, Remote-Party-ID, Contact
    착신 UA가 전송하는 응답이므로 착신 UA의 정보가 포함됩니다.  

  • Allow-Events
    INVITE에서는 presence와 kpml 에 대한 이벤트 패키지를 지원한다고 하였지만, 응답은 presence만을 지원하고 Out-of-band DTMF를 지원하지 않으므로 In-band DTMF가 지원될 것임을 나타내었습니다.

INVITE 와 180 Ringing으로 각 UA의 기능과 설정들을 교환하였으므로 200 OK시에 호 설정이 됩니다. 지금까지는 CUCM의 기본적인 동작인 Delayed Offer에 대해 다루었으므로 아직까지는 SDP를 통한 코덱 협상이 이루어지지 않았습니다. CUCM은 200 OK에서 SDP Offer가 진행되고, ACK에서 SDP Answer가 이루어집니다. 
 

마치며
마지막 하편에서는 SIP 메세지 분석의 하일라이트인 SDP를 분석해 보겠습니다. SDP는 음성 통화와 영상 통화 부분으로 나누어서 살펴보겠습니다. SDP는 이미 "SIP의 이해"에서 분석을 하였으므로 될 수 있는 한 깊게 들어가 보겠습니다. 제가 모르는 부분은 찾아 보면서...

이 "SIP의 이해 2"의  CUCM에 대한 부분을 올해 안으로 정리하는 것을 목표로 해 보겠습니다. ^^ 


연재의 다른 글

SIP 관련 글들은 오른쪽 탭의 "SIP의 이해" 카테고리에 모두 포함되어 있으며, "SIP의 이해 2"는 아래에 링크를 통해 다시 살펴 보시기 바랍니다.


2013/12/19 - [SIP의 이해] - [연재] SIP의 이해 2 - 시스코 CUCM SIP Trunking의 이해 (상편)

2013/12/23 - [SIP의 이해] - [연재] SIP의 이해 2 - 시스코 CUCM SIP Trunking의 이해 (중편)

2013/12/24 - [SIP의 이해] - [연재] SIP의 이해 2 - 시스코 CUCM SIP Trunking의 이해 (하편)

라인하트 유씨누스(UCnus) (CCIEV #18487)  --------------------------------------
ucwana@gmail.com (라인하트의 구글 이메일) 
http://twitter.com/nexpertnet (넥스퍼트 블로그의 트위터, 최신 업데이트 정보 및 공지 사항) 
http://groups.google.com/group/cciev (시스코 UC를 공부하는 사람들이 모인 구글 구룹스) 
http://groups.google.com/group/ucforum (UC를 공부하는 사람들이 모인 구글 구룹스) 
세상을 이롭게 하는 기술을 지향합니다. ________________________________________________________