brunch

You can make anything
by writing

C.S.Lewis

by 라인하트 Dec 15. 2018

13장. SIP 응답의 이해

1.  SIP Response가 엔지니어에게 중요한 이유  

RFC 3261에 설명된 INVITE, ACK, BYE, REGISTER, CANCEL, OPETIONS 메쏘드가 200 OK 정상 응답을 주는 경우를 주로 다루었습니다. SIP 컴포넌트들은 다양한 상황에 맞는 이유를 명시한 응답을 전송합니다. 예를 들어, 수신자가 통화 중일 경우에는 통화 중이라는 응답을 전송하고, SIP Proxy 서버의 데이터베이스에 없는 주소는 찾을 수 없는 전화번호나 URI 주소라고 통지합니다.  


따라서, 엔지니어들은 SIP 통화에 문제가 발생하면 제일 먼저 확인하는 것이 응답 메시지입니다. 응답은 에러가 발생한 이유를 추측할 수 있게 합니다.  경험이 많은 엔지니어는 응답 메시지만 보고 원인을 예상할 수 있습니다. 뛰어난 엔지니어는 SIP 문제가 발생할 경우 응답 메시지를 보기 위해 SIP 메시지를 디버깅합니다. 그리고 SIP 응답 메시지가 발생하게 된 원인을 추적하여 문제를 해결합니다.  


2.  SIP Response의 개요

SIP는 요청과 응답(Request / Response) 프로토콜입니다. SIP는 요청과 응답으로 트랜잭션을 완료해야 하기 때문에 모든 요청은 반드시 응답을 받아야 합니다. 정상적인 상황에서 예외는 ACK 메쏘드뿐입니다. 다른 경우는 장애로 인해 사전 정의된 시간 내에 응답 메시지를 못 받는 것입니다.


<그림 13-1> 요청과 응답 프로토콜


SIP 응답은 다음과 같이 일련번호로 정의되어 있습니다.

1xx Provisional : 정보  

2xx Success : 정상

3xx Redirection : 요청을 다른 주소로 재송신 요청

4xx Client Error : 클라이언트 장애

5xx Server Error : 서버 장애

6xx Global Failure : 사용자와 연결은 가능하나 통화는 불가


각각의 응답에 대해 좀 더 자세하게 살펴보겠습니다.



2. 1xx Provisional Responses 또는 1xx Informational Responses

1xx 응답은 요청에 대해 최종 응답(Final Response) 전에 요청을 처리하는 시간이 200ms 이상일 때 서버가 처리 중임을 통지합니다. 1xx 응답은 SIP 메시지 바디에 SDP를 함께 전달할 수 있습니다.   


1) 100 Trying

수신된 요청을 다음 서버로 전송하거나 처리 중입니다. 만일 데이터베이스에 대한 쿼리나 상대방으로부터 응답이 늦어 최종 응답을 보내지 못할 경우 발신자가 재요청을 하지 않도록 100 Trying을 UAC로 전송합니다. 일반적으로 100 Trying은 INVITE 요청을 받자마자 발행됩니다. 최종 응답인 200 OK를 발행하기까지 처리시간이 오래 걸리기 때문입니다.


2) 180 Ringing

수신 전화기의 벨이 울리고 있습니다. 발신 전화기는 180 Ringing을 수신하면 링백톤을 재생하거나 링백톤 수신을 준비합니다. 발신자가 링백톤을 기대하는 시간 이내에 듣는다는 것은 호가 정상적으로 진행된다는 의미이므로 중요한 응답입니다.  


3) 181 Call Is Being Forwarded

수신 전화기가 착신전환 기능을 설정했습니다. 그러므로, 착신전환 번호로 호 시도 중임을 발신 전화기로 통지합니다.


4) 182 Queued

수신 전화기가 일시적으로 통화를 할 수 없는 상태일 때 호를 대기 큐로 전달합니다. 수신 전화기가 통화가 가능해지면 대기 중인 호를 재연 결합니다. 예를 들어, 고객센터에서 모든 상담원이 통화 중일 경우 상담원이 통화가 가능해질 때까지 호는 큐잉되어 음악이나 큐잉 메시지를 듣게 됩니다.


5) 183 Session In Progress

현재 처리 중인 호에 대해 추가적인 정보를 발신자에게 전달합니다.


6) 199 Early Dialog Terminated

RFC 6228 SIP Response Code for Indication of Terminated Dialog에 새롭게 명시된 응답으로 수신 전화기와 SIP Proxy 간에 최종 응답인 200 OK 전에 다이얼로그가 종료되었음을 통지합니다.  



2. 2xx Successful

2xx 응답은 요청이 정상적으로 처리되었습니다.  


1) 200 OK

요청을 성공적으로 처리하였습니다.


2) 202 Accepted

요청은 처리가 승인되었지만 아직 처리 중입니다.


3) 204 No Notification

RFC 5839 An Extension to SIP Events for Conditional Event Notification에 명시된 응답으로 기존 다이얼로그 내에서 SUBSCRIBE 메시지와 관련된 응답이 전달되지 않았습니다.  



3. 3xx Redirect

3xx는 사용자가 새로운 위치로 이동하거나 UA 정보가 변경된 서비스로 통합합니다.  


1) 300 Multiple Choices

사용자가 여러 개의 단말을 소유하고 있으므로 선호되는 UA로 호를 진행합니다.


2) 301 Moved Permanently

요청된 Request-URI의 주소로 단말을 찾을 수 없습니다. 발신자는 응답에 포함된 Contact 헤더 주소로 re-INVITE를 요청하고, 로컬 디렉터리와 주소록 등에 정보를 업데이트합니다.


3) 302 Moved temporarily

사용자가 일시적으로 다른 곳으로 이동했습니다. 발신자는 응답에 포함된 Contact Header 주소로 re-INVITE를 진행합니다. 일시적인 이동이므로 로컬 디렉터리와 주소록 등에 정보를 업데이트하지 않습니다.


4) 305 Use Proxy

착신 전화기에 도착한 요청이 SIP Proxy를 경유하지 않았습니다. 요청을 응답에 포함된 SIP Proxy 서버 주소로 재전송합니다.


5) 380 Alternative Service

현재의 서비스 요청은 실패하였으나 다른 서비스는 이용이 가능합니다.



4. 4xx Request Failure

4xx 응답은 요청이 실패하였음을 통지합니다. 응답은 실패의 이유를 명기해야 하고, 발신 전화기는 메시지 변경 없이 같은 요청을 반복하지 않습니다.

 

1) 400 Bad Request

잘못된 문구나 메시지 포맷을 포함하고 있으므로 처리할 수 없습니다. 필수 SIP 헤더가 빠져있을 때 발행됩니다.


2) 401 Unauthorized & 407 Proxy Authentication Required

요청은 사용자 인증이 필요합니다. 등록 서버 나 UAS (수신 전화기)는 401 응답을 SIP Proxy 서버는 407 응답을 발행합니다.


3) 403 Forbidden

서버는 요청에 대한 처리를 거절합니다.


4) 404 Not Found

Request-URI에 있는 도메인 주소가 존재하지 않습니다.


5) 406 Not Acceptable

Accept 헤더에 열거되지 않은 콘텐츠 타입을 요구합니다.


6) 408 Request Timeout

일정 시간 안에 요청에 대한 응답이 불가능합니다.


7) 410 Gone

요청한 자원이 서버에서 고정적으로 이용할 수 없습니다.  


8) 413 Request Entity Too Large

요청이 서버가 처리할 수 있는 용량을 초과합니다. 일시적이라면 Retry-After 헤더로 발신 전화기에 재시도가 가능함을 표시합니다.  


9) 414 Request-URI Too Long

Request-URI가 SIP Proxy 서버가 해석할 수 있는 길이보다 깁니다.  


10) 415 Unsupported Media Type

요청이 포함한 메시지 바디는 서버가 지원하지 않는 타입입니다. 응답은 반드시 Accept, Accept-Encoding, 또는 Accept-Language 헤더 등을 포함해야 합니다.


11) 416 Unsupported URI Scheme

요청이 포함한 Request-URI 스킴을 해석할 수 없습니다.


12) 420 Bad Extension

요청한 Proxy-Require 헤더 또는 Require 헤더에 정의된 Extension (확장)을 이해하지 못합니다. 응답은 반드시 Unsupported 헤더에 지원하지 않는 Extension을 명기합니다.


13) 421 Extension Required

UAS는 요청을 처리하기 위해 특정 Extension이 필요하지만, Supported Header에 명기되지 않았습니다. 응답은 Require헤더에 필요한 Extension을 명기합니다.


14) 423 Interval Too Brief

요청하는 자원을 확보하기 위한 시간이 너무 부족합니다.


15) 480 Temporarily Unavailable

요청을 정상적으로 처리하고 연결할 수 있지만 상대방이 응답 가능하지 않습니다. 예를 들면, 로그인은 했지만 통화가 안 되거나 Do not Disturb 기능을 이용 중입니다.


16) 481 Call/Transaction Does not Exist

요청은 기존 다이얼로그 나 트랜잭션과 매치되지 않습니다.


17) 482 Loop Detected

루프 상황이 검출되었습니다. Via 헤더의 값으로 서버가 전송한 요청이 되돌아온 것을 알 수 있습니다.


18) 483 Too Many Hops

Max-Forwards 헤더 값이 0인 요청을 받았습니다.


19) 484 Address Incomplete

요청은 불완전한 Request-URI를 포함합니다.


20) 485 Ambiguous

요청은 애매모호한 Request-URI를 포함합니다. 응답은 Contact 헤더에 명확한 주소를 리스팅합니다.


21) 486 Busy Here

요청을 정상적으로 처리하고 연결할 수 있지만 상대방이 응답 가능하지 않습니다. 예를 들면, 통화 중입니다.


22) 487 Request Terminated

요청은 BYE나 CANCEL 요청에 의해 종료되었습니다. CANCEL 요청에 대한 정상 응답은 200 OK이며, CANCEL에 의해 취소된 INVITE에 대한 응답으로 사용합니다.


23) 488 Not Acceptable Here

Request-URI에 명기된 특정 자원이나 코덱을 사용할 수 없습니다.


24) 491 Request Pending

UAS는 같은 다이얼로그에 미결된 요청이 있습니다.


25) 493 Undecipherable

요청에 포함된 메시지 바디에 암호화된 MIME이 있어 처리할 수 없습니다.



5. 5xx Server Error

5xx 응답은 서버의 에러로 인해 요청을 처리할 수 없음을 통지합니다.

   

1) 500 Server Internal Error

요청을 처리하던 중에 서버 내부 문제로 인해 처리할 수 없습니다.


2) 501 Not Implemented

요청을 처리하기 위한 서비스나 기능이 서버에서 지원되지 않습니다.


3) 502 Bad Gateway

게이트웨이나 Proxy서버는 요청에 대한 잘못된 응답을 다른 서버로부터 받았습니다.


4) 503 Service Unavailable

서버는 일시적인 과부하나 유지보수로 인해 요청을 처리할 수 없습니다. 응답은 Retry-After 헤더를 포함하여 UAC 가 요청을 재전송할 수 있게 합니다.


5) 504 Server Time-out

서버는 외부 서버로부터 정해진 시간 내에 응답을 받지 못했습니다.


6) 505 Version Not Supported

서버는 SIP 프로토콜 버전을 지원하지 않습니다.


7) 513 Message Too Long

서버는 요청의 메시지가 너무 길어서 처리할 수 없습니다.



6. 6xx Global Failures

6xx 응답은 특정 사용자에 대한 최종 정보를 가지고 있음을 통지합니다.


1) 600 Busy Everywhere

착신 전화기와 연결되었지만 전화를 받지 않습니다. 예를 들어, 수신자가 바빠서 받지 않습니다.


2) 603 Decline

착신 전화기와 연결되었지만 전화를 받지 않습니다. 예를 들어, 상대방이 통화를 원하지 않습니다.


3) 604 Does Not Exist Anywhere

요청에 포함된 Request-URI의 사용자가 존재하지 않습니다.


4) 606 Not Acceptable

착신 전화기와 연결되었지만 전화를 받지 않습니다. 예를 들어, 요청된 미디어나 대역폭의 부족으로 연결할 수 없습니다.



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


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


매거진의 이전글 12장. SIP OPTIONS의 이해
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari