brunch

You can make anything
by writing

C.S.Lewis

by 라인하트 Dec 11. 2018

6장. 기본적인 SIP Call Flow의 이해

1. 요청과 응답 프로토콜

SIP는 Client/Server 프로토콜이면서 요청과 응답 (Request / Response) 프로토콜입니다. SIP는 세션에 대한 제어 요청과 응답으로 트랜잭션을 진행합니다. 결국, SIP 호 설립 절차를 이해하는 것은 요청과 응답의 과정을 이해하는 것입니다. 


<그림 6-1> 요청과 응답


2. 요청을 위한 14개의 SIP Method 

SIP의 요청(Request) 메시지를 매쏘드 (Method)라고 하고,  RFC 3261에는 6개의 기본 메쏘드가 정의되어 있습니다.   


INVITE
멀티미디어 세션에 참가시키기 위한 서비스 또는 사용자를 초대하기 위한 매쏘드

ACK
ACKnowledgement의 준말
INVITE 메쏘드에 대한 최종 응답인 200 OK를 수신했음을 통지하기 위한 매쏘드
ACK는 별도의 응답을 받지 않음 

BYE
기존의 세션을 종료하기 위한 매쏘드

CANCEL
최종 응답 200 OK를 받기 전에 기존의 요청을 취소하기 위한 메쏘드

OPTIONS
서버의 Capability를 요청하기 위한 매쏘드

REGISTER
User Agent가 Registrar Server에 등록하기 위한 매쏘드


멀티미디어 세션 관리 및 부가 서비스를 위해 8개의 메쏘드가 별도의 IETF의 RFC 문서로 정의되었습니다.  

INFO (RFC 2976) 
기존의 설립된 세션 또는 다이얼로그 내에서 추가적인 정보를 전송하기 위한 매쏘드

PRACK (RFC 3262) 
UAC (User Agent Client)가 임시적으로 Response를 승인하기 위한 매쏘드 

SUBSCRIBE (RFC 3265) 
특정 이벤트를 원격 노드에 요청하기 위한 매쏘드

NOTIFY (RFC 3265) 
특정 이벤트 발생 시 응답하기 위한 매쏘드

UPDATE (RFC 3311) 
세션 설정 파라미터를 업데이트하기 위한 매쏘드

MESSAGE (RFC 3428) 
채팅과 같은 단문 메시지를 (IM, Instant Messaging)을 전달하기 위한 매쏘드

REFEER (RFC 3515) 
호전환 (Call Transfer)을 하기 위한 매쏘드 

PUBLISH (RFC 3903) 
Presence Server에 UA의 상태 정보를 전송하기 위한 매쏘드


SIP는 RFC 3261에 정의된 기본 6개의 메쏘드와 추가 8개의 메쏘드를 합쳐 총 14개의 메쏘드를 사용합니다. SIP 메쏘드만 잘 이해하면 SIP 호를 쉽게 분석할 수 있습니다.  



3. 응답의 유형

요청에 대한 응답은 세 가지 유형으로 구분됩니다. 


Accept (승인)
요청의 처리를 승인하고, 결과로 200 OK를 송신

Reject (거절) 
요청의 처리를 거절하고, 거절의 원인을 송신

Redirect (재송신 요청)
요청의 처리를 보류하고, 요청을 재송신할 다른 주소를 송신


엔지니어들이 가장 좋아하는 응답은 200 OK입니다. Reject는 거절 사유에 따라 SIP Response 가 별도로 규정되어 있습니다.  



4. 기본적인 SIP 호 설립 절차 

RFC 문서에서 앨리스와 밥이 항상 통화합니다. 우리도 엘리스와 밥의 전화 통화를 기술적으로 정리합니다. 여기서 앨리스가 밥에게 통화하는 과정을 SIP 요청과 응답을 기반으로 생각해 봅니다.   


"엘리스는 수화기를 들고 밥의 전화번호를 다이얼링 하는 순간 엘리스의 전화기는 SIP INVITE 메쏘드로 세션 설립 요청을 밥의 전화기로 보냅니다. 밥의 전화기는 요청에 대한 처리의 결과로 벨을 울리기 시작하고 엘리스에게 링백톤(Ringback tone)을 전송합니다. 밥이 벨소리를 듣고 수화기를 드는 순간 밥의 전화기는 200 OK를 송신합니다. 엘리스의 전화기는 링백톤 생성을 중지한 후  200 OK를 수신했음을 확인하는 ACK  메쏘드를 송신합니다." 


<그림 6-2> 단순한 SIP  Call Flow


호가 설립되는 과정을 SIP Call Flow, 호 프로시저 또는 호 절차라고 부릅니다. INVITE와 ACK는 SIP 메쏘드이며, 200 OK는 INVITE에 대한 최종 응답입니다. 위의 그림은 필수 SIP 메쏘드 및 응답만으로 이루어진 SIP 세션 설립 절차이므로 모든 SIP 세션 설립에 반드시 포함됩니다. 


특히, INVITE, 200 OK, ACK의 교환 과정을 SIP 세션 설정을 위한 "three-way handshake"라고 합니다. TCP three-way Handshake가 SYN, SYN/ACK, ACK를 교환으로 TCP 세션 설립을 완료하듯이 SIP도 INVITE, 200 OK, ACK를 교환하면서 세션 설립을 완료합니다.  



5. 실제 사용되는 SIP 호 설립 절차 

SIP 세션을 설립하기 위한 3-way Handshake에 사용되는 INVITE, 200 OK, ACK는 필수 메시지입니다. 실제 호 절차에서는 옵션 메시지인 100 Trying 응답과 180 Ringing 응답을 함께 사용합니다. 100 Trying 응답은 SIP INVITE를 수신하여 처리하는 중임을 나타내며, 180 Ringing 응답은 착신 전화기의 벨이 울리고 있으니 링백톤을 재생하거나 컬러링과 같은 음 수신을 준비하라는 의미를 나타냅니다. 


<그림 6-3>  SIP Call Flow


엘리스가 밥에게 전화하는 과정에서 두 가지 응답을 위한 프로시저를 추가합니다.


"엘리스는 수화기를 들고 밥의 전화번호를 다이얼링 하는 순간 엘리스의 전화기는 SIP INVITE 메쏘드로 세션 설립 요청을 밥의 전화기로 보냅니다. 밥의 전화기는 요청을 정상적으로 수신했음을 알리기 위해 100 Trying응답을 전달하고 벨을 울리기 시작한 후 180 Ringing을 엘리스에게 링백톤(Ringback tone)을 전송합니다. 밥이 벨소리를 듣고 수화기를 드는 순간 밥의 전화기는 200 OK를 송신합니다. 엘리스의 전화기는 링백톤 생성을 중지한 후  200 OK를 수신했음을 확인하는 ACK메쏘드를 송신합니다." 


즉, 밥의 전화기는 SIP INVITE를 수신하자마자 100 Trying을 송신하고, 전화기에서 벨소리를 생성하자마자 180 Ringing을 송신합니다. 


IVR이나 음성사서함 등의 SIP 시스템과 시스템 간의 연결 시에는 180 Ringing이 생략되기도 하지만, 거의 모든 SIP 세션 설립에 필수적으로 포함됩니다.



6. SIP 호 종료 절차 

통화 중 한 사람이 수화기를 내려놓으면, BYE 요청이 송신되고 상대방의 전화기가 200 OK로 응답하면서 세션이 종료됩니다.  


<그림 6-4> SIP 세션 종료 절차


7. ISDN Q.931와 SIP 호 절차 비교

요즘은 Voice Gateway와 IP PBX 간에 SIP Trunk를 많이 구현하므로 ISDN E1 PRI의 Q.931 호 절차와 SIP의 호 절차를 비교하는 경우가 많습니다. ISDN Q.931 시그널링의 SETUP 메시지는 SIP INVITE와 대응되는 것처럼 각 메시지는 상호 대응되는 관계입니다. 


<그림 6-5> ISDN Q.931 과 SIP 세션 설립 절차


엔지니어는 ISDN Q.931과 SIP의 세션 설립 및 종료 절차는 반드시 숙지해야 합니다. 장애처리나 이기종간 연동을 위해 SIP 메시지를 디버깅할 때 반드시 필요합니다. SIP를 공부하는 엔지니어라면 와이어샤크로 SIP 메시지를 캡처하여 호 설립 절차를 살펴봐야 합니다. 가장 좋은 공부 방법은 책을 여러 번 보는 것보다 직접 분석해 보는 것입니다. 



'엔지니어를 위한 인터넷 전화와 SIP의 이해'를 책으로 만들다


https://brunch.co.kr/@linecard/188


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari