SIP (Session Initiation Protocol)
기본 정보
SIP (Session Initiation Protocol)은 IP 네트워크 상에서 음성, 비디오 및 즉시 메시징을 포함한 멀티미디어 세션을 설정, 수정 및 종료하는 데 널리 사용되는 신호 및 통화 제어 프로토콜입니다. **인터넷 공학 작업군 (IETF)**에 의해 개발된 SIP는 RFC 3261에서 정의되어 VoIP 및 통합 통신의 표준으로 자리 잡았습니다.
SIP의 주요 기능은 다음과 같습니다:
텍스트 기반 프로토콜: SIP는 텍스트 기반 프로토콜로, 사람이 읽기 쉽고 디버깅이 쉽습니다. HTTP와 유사한 요청-응답 모델을 기반으로 하며, INVITE, ACK, BYE 및 CANCEL과 같은 메서드를 사용하여 통화 세션을 제어합니다.
확장성 및 유연성: SIP는 매우 확장 가능하며 소규모 배포뿐만 아니라 대규모 기업 및 캐리어급 환경에서 사용할 수 있습니다. 새로운 기능을 쉽게 추가하여 다양한 사용 사례와 요구 사항에 적응할 수 있습니다.
상호 운용성: SIP의 널리 퍼진 채택과 표준화는 서로 다른 장치, 응용 프로그램 및 서비스 제공 업체 간의 더 나은 상호 운용성을 보장하여 다양한 플랫폼 간의 원활한 통신을 촉진합니다.
모듈식 설계: SIP는 미디어 전송을 위해 RTP (실시간 전송 프로토콜) 및 멀티미디어 세션을 설명하기 위해 **SDP (세션 설명 프로토콜)**와 같은 다른 프로토콜과 함께 작동합니다. 이 모듈식 설계는 다양한 미디어 유형 및 코덱과의 더 큰 유연성과 호환성을 제공합니다.
프록시 및 리디렉트 서버: SIP는 프록시 및 리디렉트 서버를 사용하여 통화 라우팅을 용이하게 하고 통화 전달, 통화 전달 및 음성 메일 서비스와 같은 고급 기능을 제공할 수 있습니다.
존재 및 즉시 메시징: SIP는 음성 및 비디오 통신에만 한정되지 않습니다. 존재 및 즉시 메시징을 지원하여 다양한 통합 통신 애플리케이션을 가능하게 합니다.
많은 장점을 가지고 있지만, SIP는 NAT 트래버스 및 방화벽 문제와 관련하여 구성 및 관리하기 복잡할 수 있습니다. 그러나 산업 전반에 걸쳐 다양한 지원과 다양성, 확장성으로 인해 VoIP 및 멀티미디어 통신에 대한 인기 있는 선택지가 되었습니다.
SIP 메서드
RFC 3261에서 정의된 핵심 SIP 메서드는 다음과 같습니다:
INVITE: 새 세션(통화)을 시작하거나 기존 세션을 수정하는 데 사용됩니다. INVITE 메서드는 세션 설명(일반적으로 SDP를 사용)을 전송하여 수신자에게 미디어 유형, 코덱 및 전송 프로토콜과 같은 제안된 세션의 세부 정보를 알립니다.
ACK: INVITE 요청에 대한 최종 응답의 수신을 확인하기 위해 전송됩니다. ACK 메서드는 최종-최종 확인을 제공하여 INVITE 트랜잭션의 신뢰성을 보장합니다.
BYE: 설정된 세션(통화)을 종료하는 데 사용됩니다. BYE 메서드는 통신을 종료하고자 하는 세션의 양쪽에서 전송됩니다.
CANCEL: 세션이 설정되기 전에 보류 중인 INVITE 요청을 취소하는 데 사용됩니다. CANCEL 메서드를 사용하여 수신자로부터 응답이 없거나 보내는 사람이 마음을 바꾸었을 때 INVITE 트랜잭션을 중단할 수 있습니다.
OPTIONS: SIP 서버 또는 사용자 에이전트의 기능을 조회하는 데 사용됩니다. OPTIONS 메서드는 세션을 설정하지 않고도 지원되는 메서드, 미디어 유형 또는 다른 확장에 대한 정보를 요청하는 데 사용될 수 있습니다.
REGISTER: 사용자 에이전트가 현재 위치를 SIP 등록 서버에 등록하는 데 사용됩니다. REGISTER 메서드는 사용자의 SIP URI와 현재 IP 주소 간의 최신 매핑을 유지하여 통화 라우팅 및 전달을 지원합니다.
누군가에게 전화를 걸기 위해서는 REGISTER를 사용할 필요가 없습니다.
그러나 INVITE를 수행하려면 호출자가 먼저 인증해야 할 수도 있으며 그렇지 않으면 401 Unauthorized
응답을 받을 수 있습니다.
이러한 핵심 메서드 외에도 다른 RFC에서 정의된 여러 SIP 확장 메서드가 있습니다:
SUBSCRIBE: RFC 6665에서 정의된 SUBSCRIBE 메서드는 특정 리소스(사용자의 존재 또는 통화 상태와 같은)의 상태에 대한 알림을 요청하는 데 사용됩니다.
NOTIFY: RFC 6665에서도 정의된 NOTIFY 메서드는 모니터링 중인 리소스의 상태 변경에 대해 구독된 사용자 에이전트에게 알립니다.
REFER: RFC 3515에서 정의된 REFER 메서드는 수신자가 전송이나 제삼자를 참조하도록 요청하는 데 사용됩니다. 이는 일반적으로 통화 전달 시나리오에 사용됩니다.
MESSAGE: RFC 3428에서 정의된 MESSAGE 메서드는 SIP 사용자 에이전트 간에 즉시 메시지를 보내는 데 사용되어 SIP 프레임워크 내에서 텍스트 기반 통신을 가능하게 합니다.
UPDATE: RFC 3311에서 정의된 UPDATE 메서드는 기존 대화 상태를 변경하지 않고 세션을 수정할 수 있습니다. 이는 진행 중인 통화 중에 코덱이나 미디어 유형과 같은 세션 매개변수를 업데이트하는 데 유용합니다.
PUBLISH: RFC 3903에서 정의된 PUBLISH 메서드는 사용자 에이전트가 이벤트 상태 정보를 서버에 게시하는 데 사용되어 다른 관심 있는 당사자에게 이를 제공합니다.
SIP 응답 코드
1xx (임시 응답): 이러한 응답은 요청이 수신되었으며 서버가 계속 처리 중임을 나타냅니다.
100 Trying: 요청이 수신되었으며 서버가 처리 중입니다.
180 Ringing: 피 호출자가 경고를 받고 통화를 받을 것입니다.
183 Session Progress: 통화의 진행 상황에 대한 정보를 제공합니다.
2xx (성공 응답): 이러한 응답은 요청이 성공적으로 수신되고 이해되었으며 수락되었음을 나타냅니다.
200 OK: 요청이 성공했으며 서버가 이를 완수했습니다.
202 Accepted: 요청이 처리를 위해 수락되었지만 아직 완료되지 않았습니다.
3xx (리다이렉션 응답): 이러한 응답은 요청을 충족하기 위해 추가 조치가 필요함을 나타내며 일반적으로 대체 리소스에 연락하여 처리합니다.
300 Multiple Choices: 여러 옵션이 있으며 사용자나 클라이언트가 하나를 선택해야 합니다.
301 Moved Permanently: 요청된 리소스에 새로운 영구 URI가 할당되었습니다.
302 Moved Temporarily: 요청된 리소스가 일시적으로 다른 URI에서 사용 가능합니다.
305 Use Proxy: 요청은 지정된 프록시로 보내야 합니다.
4xx (클라이언트 오류 응답): 이러한 응답은 요청이 잘못된 구문을 포함하거나 서버가 이를 충족할 수 없음을 나타냅니다.
400 Bad Request: 요청이 잘못되었거나 유효하지 않았습니다.
401 Unauthorized: 요청에는 사용자 인증이 필요합니다.
403 Forbidden: 서버가 요청을 이해했지만 이를 충족하기를 거부합니다.
404 Not Found: 요청한 리소스를 서버에서 찾을 수 없습니다.
408 Request Timeout: 서버가 기다릴 시간 내에 완전한 요청을 받지 못했습니다.
486 Busy Here: 피 호출자가 현재 바쁘기 때문에 통화를 받을 수 없습니다.
5xx (서버 오류 응답): 이러한 응답은 서버가 유효한 요청을 충족하지 못했음을 나타냅니다.
500 Internal Server Error: 서버가 요청을 처리하는 동안 오류가 발생했습니다.
501 Not Implemented: 서버가 요청을 충족하는 데 필요한 기능을 지원하지 않습니다.
503 Service Unavailable: 서버가 현재 유지보수 또는 과부하로 인해 요청을 처리할 수 없습니다.
6xx (전역 실패 응답): 이러한 응답은 어떤 서버도 요청을 충족할 수 없음을 나타냅니다.
600 Busy Everywhere: 통화를 위한 모든 가능한 대상이 바쁩니다.
603 Decline: 피 호출자가 통화에 참여하고 싶지 않습니다.
604 Does Not Exist Anywhere: 요청된 리소스가 네트워크 어디에도 없습니다.
예시
SIP INVITE 예시
SIP REGISTER 예제
REGISTER 방법은 세션 시작 프로토콜 (SIP)에서 사용되며, VoIP 전화기 또는 소프트폰과 같은 사용자 에이전트 (UA)가 SIP 등록 서버와 위치를 등록할 수 있도록 합니다. 이 프로세스를 통해 서버는 등록된 사용자를 위한 수신 SIP 요청을 어디로 라우팅해야 하는지 알 수 있습니다. 등록 서버는 일반적으로 SIP 프록시 서버 또는 전용 등록 서버의 일부입니다.
다음은 REGISTER 인증 프로세스에 관련된 SIP 메시지의 상세한 예제입니다:
UA에서 등록 서버로의 초기 REGISTER 요청:
이 초기 REGISTER 메시지는 UA(Alice)에서 등록 서버로 전송됩니다. 원하는 등록 기간(Expires), 사용자의 SIP URI(sip:alice@example.com), 그리고 사용자의 연락처 주소(sip:alice@192.168.1.100:5060)와 같은 중요한 정보가 포함되어 있습니다.
등록 서버로부터의 401 Unauthorized 응답:
Registrar 서버는 "401 Unauthorized" 메시지로 응답하며 "WWW-Authenticate" 헤더를 포함합니다. 이 헤더에는 UA가 자체를 인증하기 위해 필요한 정보인 인증 realm, nonce 및 알고리즘이 포함됩니다.
인증 자격 증명을 사용한 REGISTER 요청:
UA는 다른 REGISTER 요청을 보내는데, 이번에는 사용자 이름, realm, nonce 및 응답 값과 같은 필요한 자격 증명이 포함된 "Authorization" 헤더를 포함합니다. 이 정보와 사용자의 비밀번호를 사용하여 계산된 **"Authorization 응답"**은 다음과 같이 계산됩니다:
레지스트라 서버로부터의 성공적인 등록 응답:
등록 서버가 제공된 자격 증명을 확인한 후, "200 OK" 응답을 보내어 등록이 성공적이었음을 나타냅니다. 응답에는 등록된 연락처 정보와 등록 만료 시간이 포함됩니다. 이 시점에서 사용자 에이전트(앨리스)는 SIP 등록 서버에 성공적으로 등록되었으며, 앨리스로 들어오는 SIP 요청은 적절한 연락처 주소로 라우팅될 수 있습니다.
통화 예시
언급되지 않았지만, 사용자 B는 호출을 수신하기 전에 Proxy 2로 REGISTER 메시지를 보내야 합니다.
Last updated