[RFC 3261] Session Initiation Protocol (기본)

=================================== Keyword ======================================

SIP Basic

=================================== Overview ======================================
RFC 3261는 SIP Protocol의 기본이 되는 권고안이다.
SIP Protocol을 통해 기본적인 호처리를 하기위한 모든 것이 설명되어 있다.
이외의 추가 RFC들은 추가적인 기능들과 보완을 위한 권고안인 것이다. 따라서 RFC 3261를 반드시 이해를 해야 한다.
RFC 3261의 기본적인 내용을 분류하여 정리한다.
섹션은 총 6가지로 이루어 진다.
   1. 기본
   2. Method
   3. Header
   4. UAC
   5. UAS
   6. Proxy

이번 챕터는 말그대로 기본이 되는 사항을 설명한다.

=================================== Table of Contents ==============================
   1          Introduction ........................................    8
   2          Overview of SIP Functionality .......................    9
   3          Terminology .........................................   10
   4          Overview of Operation ...............................   10
   5          Structure of the Protocol ...........................   18
   6          Definitions .........................................   20
   7          SIP Messages ........................................   26
   7.1        Requests ............................................   27
   7.2        Responses ...........................................   28
   7.3        Header Fields .......................................   29
   7.3.1      Header Field Format .................................   30
   7.3.2      Header Field Classification .........................   32
   7.3.3      Compact Form ........................................   32
   7.4        Bodies ..............................................   33
   7.4.1      Message Body Type ...................................   33
   7.4.2      Message Body Length .................................   33
   7.5        Framing SIP Messages ................................   34
--------------------------------------------------------------
   21         Response Codes ......................................  182
   21.1       Provisional 1xx .....................................  182
   21.1.1     100 Trying ..........................................  183
   21.1.2     180 Ringing .........................................  183
   21.1.3     181 Call Is Being Forwarded .........................  183
   21.1.4     182 Queued ..........................................  183
   21.1.5     183 Session Progress ................................  183
   21.2       Successful 2xx ......................................  183
   21.2.1     200 OK ..............................................  183
   21.3       Redirection 3xx .....................................  184
   21.3.1     300 Multiple Choices ................................  184
   21.3.2     301 Moved Permanently ...............................  184
   21.3.3     302 Moved Temporarily ...............................  184
   21.3.4     305 Use Proxy .......................................  185
   21.3.5     380 Alternative Service .............................  185
   21.4       Request Failure 4xx .................................  185
   21.4.1     400 Bad Request .....................................  185
   21.4.2     401 Unauthorized ....................................  185
   21.4.3     402 Payment Required ................................  186
   21.4.4     403 Forbidden .......................................  186
   21.4.5     404 Not Found .......................................  186
   21.4.6     405 Method Not Allowed ..............................  186
   21.4.7     406 Not Acceptable ..................................  186
   21.4.8     407 Proxy Authentication Required ...................  186
   21.4.9     408 Request Timeout .................................  186
   21.4.10    410 Gone ............................................  187
   21.4.11    413 Request Entity Too Large ........................  187
   21.4.12    414 Request-URI Too Long ............................  187
   21.4.13    415 Unsupported Media Type ..........................  187
   21.4.14    416 Unsupported URI Scheme ..........................  187
   21.4.15    420 Bad Extension ...................................  187
   21.4.16    421 Extension Required ..............................  188
   21.4.17    423 Interval Too Brief ..............................  188
   21.4.18    480 Temporarily Unavailable .........................  188
   21.4.19    481 Call/Transaction Does Not Exist .................  188
   21.4.20    482 Loop Detected ...................................  188
   21.4.21    483 Too Many Hops ...................................  189
   21.4.22    484 Address Incomplete ..............................  189
   21.4.23    485 Ambiguous .......................................  189
   21.4.24    486 Busy Here .......................................  189
   21.4.25    487 Request Terminated ..............................  190
   21.4.26    488 Not Acceptable Here .............................  190
   21.4.27    491 Request Pending .................................  190
   21.4.28    493 Undecipherable ..................................  190
   21.5       Server Failure 5xx ..................................  190
   21.5.1     500 Server Internal Error ...........................  190
   21.5.2     501 Not Implemented .................................  191
   21.5.3     502 Bad Gateway .....................................  191
   21.5.4     503 Service Unavailable .............................  191
   21.5.5     504 Server Time-out .................................  191
   21.5.6     505 Version Not Supported ...........................  192
   21.5.7     513 Message Too Large ...............................  192
   21.6       Global Failures 6xx .................................  192
   21.6.1     600 Busy Everywhere .................................  192
   21.6.2     603 Decline .........................................  192
   21.6.3     604 Does Not Exist Anywhere .........................  192
   21.6.4     606 Not Acceptable ..................................  192

=================================== 내용 정리 ===================================
SIP Protocol은 H.323과 함께 Internet상의 기본적인 호처리를 위한 Signal Protocol이다.
SIP 1.0 Version (RFC 2543)에서는 H.323에 비하여 효용성이 떨어졌으나, 현재 2.0 Version을 Internet 망의 호처리 Protocol의 주를 이루며 사용되고 있다. (현재 한국의 기반망의 Signal Base는 SIP Protocol이 주를 이룬다.)

== 기본 Flow ==

















옆의 그림은 SIP의 기본 Flow이다.
발/착신자가 INVITE -> 200 -> ACK Method를 주고 받으면서 기본적인 호처리 정보와 미디어 정보를 주고 받고, ACK를 수신한 시점부터 음성/영상을 주고 받으며 전화를 할 수 있게 된다.
RTP는 SIP를 통한 Signal이 성립된 이후 음성/영상 데이터를 주고 받는 또 다른 Protocol이다.
즉 SIP Protocol로 Signal처리가 완료되면, RTP Protocol을 이용하여 실제 음성/영상을 주고 받는 것이다.
BYE는 호를 종료할 때 사용되는 Method이다.


== SIP Message ABNF ==

String 기반의 SIP의 기본적인 메시지는 다음과 같은 형태를 같는다.
-------------------- SIP Message ABNF -----------------------------
generic-message  =  start-line
                             *message-header
                             CRLF
                             [ message-body ]
start-line = Request-Line / Status-Line
Request-Line = Method SP Request-URI SP SIP-Version CRLF
Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
---------------------------------------------------------------------
"start-line" 은 SIP Version, 메시지의 Type과 착신자 정보 혹은 Response 정보등을 담는다.
메시지 Type는 Requset, Response로 나뉘는데 start-line의 형태를 보고 판별한다.

"message-header"는 호처리를 위한 정보를 담는다. 이 정보를 통하여 Proxy나 UAS/UAC가 동작한다.
필수로 들어가야 Header들도 있고, 추가적인 정보들을 담는 Header들도 있다.

"message-body"는 호처리 이외의 정보들을 담는다. Media를 주고받는 RTP Session을 생성하는 정보, SMS에 주고 받는 메시지 데이터등 여러 정보들을 가질 수 있다.


== Start Line ==

Start-Line은 위에서 말한것 처럼 기본적인 Message의 정보를 가지고 있다.
Start-Line이 Request-Line의 형태를 갖는다면, 이 메시지는 Request Message이고, Status-Line의 형태를 갖는다면 Response Message라고 판별한다.
이 Line을 한줄만 허용된다.

"Request-Line"의 Method는 이 Request Message가 무엇을 위한 것인지 판별하는데 사용된다.
"Request-Line"의 Request-URI는 다음 착신자의 정보를 갖는다. (이는 Loose-Route냐 Strict-Route냐에 따라 다르다.)
"Request-Line"의 SIP-Version은 이 메시지의 SIP Protocol Version을 의미한다. (기본적으로 상위 버전은 하위 버전을 호환하도록 설계 및 개발 되어야 한다. 실제 Version 1.0의 메시지가 오지 않더라도, 거의 모든 망업체의 요구 사항이다.) 

"Status-Line"의 Status-Code는 Request Message를 받은 측에서 Message를 처리한 정보로 Request Message를 보낸 측에서 다음의 행동을 결정한다. 이 값은 범위가 정의되어 있다. 
1xx: Provisional -- request received, continuing to process the request;
2xx: Success -- the action was successfully received, understood, and accepted;
3xx: Redirection -- further action needs to be taken in order to complete the request;
4xx: Client Error -- the request contains bad syntax or cannot be fulfilled at this server;
5xx: Server Error -- the server failed to fulfill an apparently valid request;
6xx: Global Failure -- the request cannot be fulfilled at any server.

현재 정의 된 이외의 Code 값을 추가적으로 정의 할 수 있지만, Resonse Code의 범위 값 내에서 정의 하는 것이 좋다.

"Reason-Phrase"는 Status-Code에 대한 추가적 정보로 반드시 있는 것은 아니며, 또한 권고안에서 정한 값이 아닐 수 있다. (애드팍 단말기중 구 버전은 이 부분이 없다면 단말기에서 Message를 처리 못하는 경우를 본적있다.)


== Message-Header==

Header의 기본형태는 다음과 같다.
-------------------- Header ABNF -----------------------------
header  =  "header-name" HCOLON header-value *(COMMA header-value)
---------------------------------------------------------------

항상 Header-name으로 시작하며 Header field값(Header-value)는 ":"으로 구분된다.
SIP Message에 반드시 하나만 넣을 수 있는 Header가 있는 반면, 연속된 멀티라인으로 구성할 수 있는 Header들이 존재 한다.
멀티라인으로 사용할 수 있는헤더는 반드시 연속되어야 한다는 것을 주의해야 하며, 한 Header의 최대 길이는 1000 character를 넘을수 없다는 것 또한 주의 해야 한다. (RFC 2822 Section 2.1.1 Line Length Limits)


== Message-Body ==

Message Body는 여러가지 형태를 갖는다. SDP형태 일반적인 String등 여러가지 형태를 지원한다.
Message Body는 SIP Message에 항상 존재해야하는 것은 아니다.


== Response Codes==

SIP Response Code는 위에 언급한 것처럼 범위가 정의 되어 있다.

1xx Response Code는 Final Response (2xx ~ 6xx) 이전에 UAS(Request를 수신한 측)에서 추가 적인 정보를 UAC(Request를 전달한 측)에게 전달 하기 위해서 사용된다.
권고안에서는 Final Response를 보내기 200 ms 이전에 1xx Response를 보내야 한다는 말이 있지만, 사실 그렇지도 않다. 18x Reponse 를 수신하지 못하고 200 Response를 받는다면 호처리에 성공하지 못하는 단말들도 꽤 있기때문에.. 어쩔수 없이 보내야 하는 경우도 있고, 또한 Server단에서는 1 ms 가 지나기도 전에 메시지를 처리 하는 경우도 있다. 따라서 순서에 맞게 전달 할 수 있게 설계하는 것이 좋다.

2xx Response Code는 Request에 대한 처리가 성공되었다는 것을 의미한다.
3xx Response Code는 Request를 다른 쪽으로 재전달 하라는 것을 의미한다.
4xx Response Code는 UAC의 Requset Message에 문제가 있어 Fai l되었다는 것을 의미한다.
5xx Response Code는 UAS에서 Request Message를 처리하다가 문제가 발생되어 Fail 되었다는 것을 의미한다.
6xx Response는 Global Fail Response Code로 Request Message처리에는 성공하였으나, 다른 이유로 호를 종료해야 하고자 할 때 사용된다.


== 기본적인 용어==

  1. Proxy Server : SIP Message를 중계해주는 역활을 하는 서버로, 사용자 등록을 위한 REGISTER 메시지처리, 호처리 메시지 중계, Location Server와의 연동을 통한 착신자 위치 찾기등을 담당한다. 
    IMS망의 거의 모든 SIP처리하는 서버(CSCF)도 기본적으로 Proxy의 기능을 기반으로 만들었다고 해도 과언이 아닐 것이다.
  2. Register Server : Register 기능을 담당하는 서버로 Location Server에 사용자 위치등을 등록하는 기능을 담당
  3. Location Server : 사용자의 위치정보를 관리하며, Proxy에서 질의할 사용자의 정보를 알려주는 기능을 담당
  4. UAC : Request Message를 생성하여 전송하는 UA
  5. UAS : Request Message를 수신하여 처리하는 UA
  6. Dialog : 호 한개에 대한 Session 이라고 보면되는데, 호가 시작될 때 생성되며, 끝나는 시점까지 유지된다.
  7. Transaction : Reqeust메시지와 Response Message에 대한 처리의 한 과정 동안 유지되는데, Re-Trans 기능을 담당한다. 



 

by 소걸음 | 2009/09/11 10:00 | [SIP] | 트랙백 | 덧글(1)

트랙백 주소 : http://lukiji.egloos.com/tb/3208752
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 띠굴띠굴 at 2009/12/07 10:36
안녕하세요 포스트가 너무 좋아 퍼갑니다..^^;;

:         :

:

비공개 덧글

◀ 이전 페이지                    다음 페이지 ▶