본문 바로가기

SIP의 이해

[연재] 다시쓰는 SIP의 이해 - 21편 Chapter 7. 가끔 보는 SIP Method


Chapter 7. 가끔 보는 SIP Method



7. PUBLISH 메쏘드
과거에 즐겨 사용하던 구글, 네이트온, MSN 등과 같은 데스크탑 메신저는 
상대방의 Presence (현재의 상태) 정보를 반드시 필요로 합니다. 상태정보(Presence)는 네트워크 상에서 통신을 위한 사용자의 상태정보 (willingness and ability) 입니다. 온라인(on-line) 또는 오프라인(off-line) 정보와 같은 단순 정보에서 부터 회의중 (Meeting), 통화중 (Busy), 자리비움 (Away) 등과 같은 복잡한 정보로 까지 확장할 수 있습니다. 


사용자 상호간에 상태정보를 주고 받기 위해서는  REGISTER, PUBLISH, SUBSCRIBE, NOTIFY메쏘드가 유기적으로 동작되어야 합니다. 특히, PUBLISH 메쏘드는 AoR (Address-of-Record)과 연관된 Event State를 생성, 변경, 제거하기 위한 메쏘드로 상태정보 교환이 부족한 부분을 채워줄 것입니다.  


RFC 2778 A Model for Presnece and Instant Messaging 과 RFC 3903 SIP Extension for Event State Publication의 용어 정의를 통해 구성 요소를 살펴보겠습니다.


  • Event State
    자원의 상태 정보 

  • EPA (Event Publication Agent) 
    PUBLISH 요청를 발행하는 UAC 
    RFC 3856의 PUA (Presence User Agent) 

  • ESC (Event State Compositor) 
    PUBLISH 요청을 수신받아 처리하는 UAS
    RFC 3856의 PA (Presence Agent)
    Proxy 및 Register와 공존할 수 있음

  • Event Hard State 
    자원의 default Event State로 AoR에 대한 고정된 상태 정보 
    ESC는 Soft State publication이 없을 때 사용 

  • Event Soft State 
    PUBLISH 매커니즘을 통해 EPA가 발행하는 Event State, 유효기간을 가지고 있으며, 만료시에 재협상되는 유효기간 내에서만 의미있는 Event State를 나타냄


위의 용어들은 복잡해 보이지만 기능별로 정의된 용어이므로 쉽게 이해할 수 있을 것입니다. 아래 그림에서 앨리스는 PUBLISH 메쏘드를 이용하여 자신의 상태정보를 Compositor에게 업데이트하고, 엘리스의 상태정보를 알고 싶어하는 사용자들은 SUBSCRIBE 메쏘드를 이용하여 앨리스의 Presence Compositor에 요청합니다. 




Presence Compositors는 ESC (Event State Compositor)로 자신의 도메인에 있는 사용자의 상태정보를 관리하는 서버입니다. 또한, 특정 사용자에 대한 상태정보 업데이트 요청인 SUBSCRIBE 요청을 받아서 관리합니다. 앨리스의 상태정보가 변경되면 밥, 캐롤, 리사, 데이브에게 정보를 업데이트를 해야 합니다.  앨리스가 로그인하기 위해 REGISTER 요청을 SIP Registrar 서버로 보낼것이며, ESC로 PUBLISH 요청을 보냅니다. 앨리스가 등록이 아닌 로그인을 하면서 단순한 정보 외에 온라인, 위치, 프로파일, 시간 등의 정보가 나타날 것입니다. 앨리스의 정보가 모든 SUBSCRIBE를 요청한 사용자에게 보내지는 것이 아니라 룰에 의해 선택됩니다. ESC는 NOFITY 메쏘드를 이용하여 정보 업데이트를 하겠지만, 룰에 맞지 않는 데이브에게는 업데이트를 하지 않습니다.



PUBLSIH 와 REGISTER는 비슷하지만 다이얼로그를 생성하지 않기 때문에 상태 변화에 즉각적인 퍼블리싱이 가능할 뿐만 아니라 기존 다이얼로그에 영향을 미치지 않습니다. 상태정보를 저장하는 Presence Compositor입장에서는 REGISTER 메쏘드가 제공하는 것보다 더 다양한 정보를 제공할 수 있습니다. 



PUBLISH메쏘드는 4 가지 운영 모드에서 동작합니다.


  • Initial
    PUBLISH를 발생하는 UAC( EPA)의 초기 상태 설정

  • Refresh
    전에 발행된 상태 정보를 expires 타임 전에 timer를 초기화하여 기존 상태를 계속 유지함

  • Modify
    전에 발행된 상태정보를 최신 상태로 변경함

  • Remove
    현재의 상태정보를 제거함



Presence Compositor에서 상대방의 상태정보 업데이트를 받기 위해서는 SUBSCRIBE와 NOTIFY 메쏘드를 이용하지만, Presence Compositor에 자신의 상태정보를 업데이트를 하기 위해서는 PUBLISH입니다. 마지막으로 설명할 메쏘드는 PUBLISH 입니다.  



  • PUBLISH
    Alice는 ESC에 자신의 Presence 정보를 업데이트합니다. 메세지 바디는  NOTIFY 응답과 동일한 MIME로 정의됩니다. Event 헤더의 값이 REGISTER의 경우에는 Event:reg 로 되어 있었지만, PUBLISH는 Event:presence 로 되어 있습니다. 두 메쏘드는 동일한 Expires 헤더를 가집니다. 

     PUBLISH sip:esc1@atlanta.com SIP/2.0
     Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK776asegma
     Max-Forwards: 70
     To: Alice <sip:alice@atlanta.com >
     From: Alice <sip:alice@atlanta.com>;tag=1928301774
     Call-ID: a84b4c76e66710@pc33.atlanta.com 
     CSeq: 22756 PUBLISH
     Event: presence 
     Expires: 21600
     Content-Type: application/pidf+xml
     Content-Length: 126

     
    (XML message body not shown) 


  • 200 OK
    새롭게 추가된 헤더는 SIP-ETag로 PUBLISH요청이 성공적으로 처리되어 ESC는 entity-tag를 생성하여 할당하고 이것을 돌려주는 것입니다. 이후의 업데이트나 변경등의  PUBLISH 요청은 SIP-ETag를 항상 포함해야 합니다. 

     
    SIP/2.0 200 OK
     Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK776asegma ;received=10.1.3.33
     To: sip: sip:bob@biloxi.com>;tag=1928301774 
     From: alice@atlanta.com
     Call-ID: a84b4c76e66710@pc33.atlanta.com 
     CSeq: 22756 PUBLISH
     SIP-ETag: hp169abc
     Expires: 1800


마치며
드디어 마직막 챕터를 정리합니다. 



"다시쓰는 SIP의 이해" 연재의 다른 글  


2015/07/09 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 22편 Chapter 8. RTP의 이해


2015/07/09 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 21편 Chapter 7. 가끔 보는 SIP Method


2015/07/08 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 20편 Chapter 7. 가끔 보는 SIP Method


2015/05/20 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 19편 Chapter 7. 가끔 보는 SIP Method


2015/05/18 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 18편 Chapter 7. 가끔 보는 SIP Method


2015/05/07 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 17편 Chapter 6. SIP Method


2015/02/26 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 16편 Chapter 6. SIP Method


2015/02/23 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 15편 Chapter 6. SIP Method


2015/02/11 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 14편 Chapter 6. SIP Method

2015/01/30 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 13편 Chaper 5.SDP


2015/01/29 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 12편 Chapter 5. SDP


2015/01/05 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 11편 Chapter 5. SDP


2014/12/09 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 10편 Chapter 4. SIP Response


2014/12/04 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 9편 Chapter 3. SIP Method on RFC 3261


2014/12/03 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 8편 Chapter 3. SIP Method on RFC 3261


2014/12/02 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 7편 Chapter 3. SIP Method on RFC 3261


2014/11/26 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 6편 Chapter 2. SIP Overview


2014/11/21 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 5편 Chapter 2. SIP Overview


2014/11/19 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 4편 Chapter 1. VoIP의 이해 (3)


2014/11/11 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 3편 Chapter 1. VoIP의 이해 (2)


2014/11/05 - [SIP의 이해] - [연재] 다시쓰는 SIP의 이해 - 2편 Chapter 1. VoIP의 이해 (1)




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