brunch

You can make anything
by writing

C.S.Lewis

by 라인하트 Dec 13. 2018

10 장. SIP REGISTER의 이해

1. REGISTER의 개요

지금까지  SIP Proxy 가 등록된 모든 전화기들의 주소를 안다고 가정하였지만, 실제 SIP Protocol은 어떻게 전화번호와 IP주소 매핑 테이블을 만들 수 있는 지를 추적해 보겠습니다.


SIP 전화기의 수가 많을수록 SIP Proxy 서버나 IP PBX를 이용한 중앙집중식 관리가 효과적입니다. 단말의 등록은 SIP REGISTRAR 서버의 역할이지만, 기업용 PBX 제품들은 SIP Proxy와 SIP REGISTRA 서버를 논리적 기능의 차이이므로 같은 서버로 구현하고 차이를 두지 않습니다. 대규모 전개를 위한 통신 사업자용 소프트 스위치는 구분하기도 합니다.  


전화기는 SIP Registrar 서버에 REGISTER 메쏘드를 이용하여 전송하면 SIP Registrar 서버는 200 OK를 응답함으로써 등록이 이루어집니다. 


등록과정의 메시지를 분석해 보겠습니다. 


1) REGISTER

앨리스의 전화기는 server19.atlanta.com이라는 SIP Registra 서버에 등록하기 위해 SIP REGISTRA 메시지를 전송합니다.


REGISTER sip:server19.atlanta.com SIP/2.0
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bk2l55n1
To: Alice <sip:alice@atlanta.com>
From: Alice <sip:alice@atlanta.com>;tag=283074
Call-ID:a84b4g96te10@pc33.atlanta.com
CSeq: 31862 REGISTER
Contact: <sip:alice@10.1.3.33>
Expires: 21600
Content-Length: 0


등록 메시지의 Request-URI는 SIP Registrar 서버의 주소입니다. From 헤더와 To 헤더는 앨리스 자신을 가리키고 있습니다. 여기서 새롭게 등장한 Expires 헤더는 등록 유효기간을 의미합니다. 앨리스의 전화기는 SIP Proxy 서버에게 21600초 동안 등록을 유지해 줄 것을 요청합니다. 



2) 200 OK

SIP Proxy 서버는 SIP REGISTRA 요청의 200 OK 응답을 전송합니다.   


SIP/2.0 200 OK
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bk2l55n1; received=10.1.3.33
To: Alice <sip:alice@atlanta.com>; tag=a 6c85e3
From: Alice <sip:alice@atlanta.com>;tag=283074
Call-ID:a84b4g96te10@pc33.atlanta.com
CSeq: 31862 REGISTER
Contact: <sip:alice@pc33.atlanta.com>
Contact: <sip:alice@cm9013.atlanta.com>
Service-Route: <sip:bigbox3.atlanta.com;lr>
Expires: 3600
Contact-Length: 0


SIP Proxy 서버는 앨리스의 전화기에 등록을 승인하기 위해 200 OK 응답을 생성하였습니다. Expires 헤더의 값을 21600초에서 3600초로 변경하였으므로  앨리스의 전화기는 3600초마다 재등록을 해야 합니다. 


REGISTER의 재등록 메커니즘은 일정한 간격으로 이루어지므로 SIP Registrar 서버와 간의 Keepalive 메커니즘의 기능도 수행합니다. 그러므로, Expires 헤더의 값이 작으면 잦은 재등록 요청이 발생하고, 너무 크면 Keepalive 메커니즘의 기능을 수행할 수 없습니다. 


200 OK 응답이 포함한 두 개의 Contact 헤더와 Service-Router 헤더에 대해 살펴보겠습니다. 



2. 사용자가 여러 대의 단말을 사용하는 문제  

흔히 직원들은 노트북에 소프트 폰을, 책상 위에 데스크톱 IP 전화기를 그리고 스마트폰에 전화기 앱을 사용합니다. 즉, IP PBX는 사용자 당 여러 대의 전화기를 사용하도록 하기 위해 수신자의 단말을 구분할 필요가 있습니다. 


또한, 직원들이 여러 대의 전화기를 사용한다고 수신자의 데스크톱 IP 전화기의 전화번호, 스마트폰 앱 전화번호, 그리고 소프트 폰 전화번호를 따로 유지해서는 안됩니다. 발신자가 수신자가 받을 수 있는 단말을 예측해서 전화를 건다는 것은 현실적으로 맞지 않습니다. 따라서 밥의 주소로 전화가 오면 SIP Proxy는 자신에게 등록된 여러 대의 단말을 동시에 INVITE 메시지를 전달해야 합니다. 수신자가 자신이 받을 수 있는 단말을 선택합니다. 이동 중이라면 스마트폰의 앱을 책상에서 업무 중이라면 데스크톱 전화기를 선택할 것입니다. 


이런 동작이 가능하려면 SIP Proxy 서버는 앨리스가 여러 대의 단말을 가지고 있다고 인식해야 합니다. 즉, 전화를 주고받는 사람을 인지하는 주소 체계와 사용자의 단말을 인식할 수 있는 주소 체계가 필요합니다. 사람을 인지하는 주소 체계를  address-of-record (AOR) URI 라하고, 단말을 인식할 수 있는 주소 체계를 Contact address라고 합니다.    


AOR (Address of Record)
사용자 주소
예) Bob@biloxi.com

Contact Address
등록된 단말의 주소
예) bob@phone66.biloxi.com


지금까지 전화기의 등록 과정은 전화기의 IP 주소와 사용자의 SIP URI 주소를 연결하는 것입니다. 새로운 주소 체계를 바탕으로 정리해봅시다. SIP 전화기의 등록 과정은 address-of-record (AOR) URI와 Contact address를 매핑 또는 바인딩하는 것입니다. SIP 네트워크가 단순히 E.164 주소체계의 전화번호와 IP 주소를 바인딩한다고 가정한다면, AoR은 전화번호이고 Contact address는 IP 주소입니다.  


<그림 10-2> 여러대의 전화기를 가진 경우


앨리스가 밥에게 전화를 걸 때 전화번호가 아닌 SIP URI인 Bob@biloxi.com로 걸었다고 가정합니다. 밥은 3개의 전화기 및 단말을 사용 중이며, 현재 등록된 단말이 몇 개인지 또는 통화 가능한 단말이 무엇인지는 오직  biloxi.com의 SIP Proxy 서버가 알고 있습니다. 앨리스가 있는 atlanta.com의 속한 전화기들은 밥의  AOR 주소인 Bob@biloxi.com 가 유효합니다. 밥이 있는 biloxi.com의 SIP Proxy 서버는 AOR에 매핑된 단말을 식별할 수 있는 Contact Address가 유효합니다. biloxi.com에서 bob@biloxi.com AOR 주소로는 밥의 전화기들을 찾아갈 수 없습니다. 


SIP 프로토콜에서 등록(Registration)이란 AOR과 Contact Address를 바인딩하는 것입니다. SIP REGISTER 메시지에 대한 응답 200 OK에 2개의 Contact 헤더는 SIP Proxy 서버에 바인딩된 Contact address 정보를 표시한 것입니다. alice@atlanta.com이라는 AOR에 바인딩된 단말은 2개입니다. PC 소프트 폰인 alice@pc33.atlanta.com과 데스크톱 전화기인 sip:alice@cm9013.atlanta.com입니다. 앨리스는 회사에서 데스크톱 전화기와 소프트폰을 사용합니다. 

Contact: <sip:alice@pc33.atlanta.com>
Contact: <sip:alice@cm9013.atlanta.com>
Service-Route: <sip:bigbox3.atlanta.com;lr>
Expires: 3600



3. REGISTER : SIP Proxy 서버 주소 획득의 문제 

지금까지 SIP 전화기인 UA (User Agent)가 SIP Registrar 서버에 등록을 위해 SIP REGISTRA 서버의 주소와 SIP Proxy 서버의 주소를 자동으로 획득한다고 가정하였습니다. 일반적으로 SIP REGISTRA 서버와 SIP Proxy 서버를 동일 서버에서 구현하더라도 SIP 서버의 주소를 획득하는 과정이 필요합니다. 


서버의 주소를 획득하는 방법은 여러 가지가 있습니다. 첫 번째로 관리자가 전화기(UA)에 SIP Proxy 서버의 주소를 직접 입력합니다. 가장 일반적인 방법이지만 단말이 많을수록 관리가 어렵고 SIP Proxy 주소가 변경될 경우 엄청난 작업이 됩니다. 두 번째로 HTTP 나 TFTP와 같은 프로토콜 활용합니다. TFTP를 이용하여 전화기 별로 다른 설정 파일을 전달합니다. 시스코와 같은 기업이 널리 사용하는 방법이지만 방화벽이 있는 환경에서는 사용이 복잡하고, 전화기가 SIP 외에도 HTTPS와 TFTP 등의 기타 프로토콜을 구현해야 한다는 단점이 있습니다. 


SIP Proxy 또는 IP PBX 서버의 주소를 획득하는 방법은 RFC 3261에 정의되어 있지 않습니다. RFC 3261 권고안이 발표되기 전에 많은 인터넷 전화 제조 기업들이 각자의 방법을 구현하였기 때문입니다. SIP Proxy 서버의 주소를 획득하는 가장 쉬운 방법은 DHCP (Dynamic Host Configuration Protocol)를 이용하여 전화기가 부팅되어 IP주소를 획득할 때 SIP Proxy 서버의 주소를 같이 획득합니다. DHCP 서버는 IP 주소 할당 외에 DNS 나 TFTP 서버의 주소를 함께 할당할 수 있습니다. 즉, 전화기는 TFTP 서버의 주소를 받은 후 전화기 구성 정보 파일을 다운로드합니다. 구성 정보 파일은 SIP Proxy 서버 또는 SIP Registrar 서버의 주소 그리고 각종 필요한 정보 및 정책을 공유합니다. 


SIP REGISTRA 서버의 주소는 여러 경로를 통해 획득하였다고 가정하였습니다. 하지만, IETF RFC 3608  Service Route Extension Header에 정의된 헤더를 이용하여 SIP Proxxy 서버의 주소를 공유됩니다. 즉, REGISTER 메시지를 받은 SIP Registrar 서버는 200 OK 응답 전송 시 Service-Route 헤더에 명시적으로 사용할 SIP Proxy 서버를 통지합니다.  


REGISTER 메시지에 표시된 Service-Route 헤더의 값은 bigbox3.atlanta.com으로 SIP Proxy서버의 주소입니다.

Contact: <sip:alice@pc33.atlanta.com>
Contact: <sip:alice@cm9013.atlanta.com>
Service-Route: <sip:bigbox3.atlanta.com;lr>
Expires: 3600



4. 발신자가 전화를 걸고 나서 갑자기 수화기를 내려놓을 때

발신자가 전화번호 또는 SIP URI 주소로 통화를 시도하면 반드시 상대방이 받았습니다. 상대방이 전화를 받으면 200 OK 응답이 수신되며, 호를 종료하고 싶을 때는 BYE 요청을 이용합니다. 그런데, 발신자가 전화번호를 잘못 누르거나 통화 중에 직장 상사가 불러서 통화 시도를 중지하는 경우가 있습니다. 즉, INVITE 요청에 대한 200 OK를 수신하기 전에 통화를 종료하고 싶을 때 SIP 프로토콜은 어떤 방법을 선택했을 까요? 



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


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


매거진의 이전글 9장. Route 헤더와 Record-Route 헤더
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari