SIP Message
- text based protocol
- UTF-8 charset
- request, response
*message-header
CRLF <-- 반드시 들어가 야 함
[ message-body ]
start-line = Request-Line / Status-Line
7.1 Requests#
Request-Line = Method SP Request-URI SP SIP-Version CRLF
- Method : REGISTER, INVITE, ACK, CANCEL, BYE, OPTION
- Request-URI : SIP, SIPS, general URI, unescaped spaces 또는 control caracter를 포함하면 안됨(MUST NOT), "<>"로 싸여 있으면 안됨(MUST NOT)
- SIP-Version : 사용하는 SIP의 버전, 이 규격서를 따를 경우는 "SIP/2.0"을 적어줘야 함(MUST), case-insensitive 하지만 구현시 대문자로(MUST)
끝은 무조건 CRLF로 사용 - CR이나 LF는 허용되지 않음
7.2 Responses#
Status-LIne
- 3-digit integer, request의 결과를 알 수 있음
first digit는 Status-Code에서 정의한 response의 class를 의미
- 1xx : Provisional
- 2xx : Success
- 3xx : Redirection
- 4xx : Client Error
- 5xx : Server Error
- 6xx : Global Failure
- 1xx : Provisional
- 3-digit integer, request의 결과를 알 수 있음
Reason-Phrase
- Status code에 대한 간단한 문자열 설명
- Accept-Language 헤더 필드에서 선언한 다른 언어 사용 가능(MAY)
- Status code에 대한 간단한 문자열 설명
7.3 Header Fields#
header = "header-name" HCOLON header-value *(COMMA header-value)
- HTTP 헤더 필드와 비슷
- RFC 2234를 따름 (whitespace, folding를 제외)
- Comma-separated list : 같은 필드 네임에 대한 값을 comma를 이용하여 한 필드에 적을 수 있음, 값이 "*" 일 경우 제외
7.3.1 Header Field Format#
헤더 필드는 다음과 같은 형식을 가짐
field-name: field-value
- 콜론 사이의 임의의 양의 whitespace가 올 수 있음
- 구현시는 field name과 콜론사이는 space를 주지 않고 콜론과 field-value 사이에는 하나의 SP를 구어야 함
- 헤더 필드는 multiple line으로 확장 가능, link break와 이후 whitespace는 SP로 처리
- 다른 헤더 필드들 사이의 순서는 의미가 없음
- 헤더필드의 순서를 proxy 처리 순서(Via, Route, Record-Route, Proxy-Require, Max-Forwards, Proxy-Authorization)으로 적어 추는 것을 추천함(RECOMMENDED)
- 같은 헤더 필드의 순서는 중요함
- 같은 헤더 필드들을 하나의 헤더필드로 결합 가능해야 함(MUST) - WWW-Authenticate, Authorization, Proxy-Authenticate, Proxy-Authorization 헤더 필드 제외, 하나의 헤더 필드로 결합하면 안됨(MUST NOT)
- 구현시 multiple header field rows의 처리를 위해서 singple-value-per-line과 comma-separated가 모두 가능 해야 함(MUST)
field-name: field-value *(;parameter-name=parameter-value)
- 헤더의 field-vale는 헤더마다 다른 정의를 가짐
- parameter pair(parameter-name, parameter-value)들은 세미 콜론으로 구분
- 임의의 수의 parameter pair가 올 수 잇음
- parameter name은 헤더 필드에 한번 이상 올 수 없음(MUST NOT)
- 비교시 case-insensitive : parameter names, parameter values, tokens
- quoted string은 case-sensitive 함
다음의 표현은 같은 의미를 가짐
Subject : lunch
Subject :lunch
Subject: lunch <- 추천
다음의 두 헤더필드는 동일 함
Subject: I know you're there,
pick up the phone
and talk to me!
다음 블럭들은 모두 동일한 의미를 가짐 (Route 헤더 필드의 값들의 순서가 동일)
Subject: Lunch
Route: <sip:bob@biloxi.com>
Route: <sip:carol@chicago.com>
Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>
Route: <sip:carol@chicago.com>
Subject: Lunch
Subject: Lunch
Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>,
<sip:carol@chicago.com>
다음 블럭들은 모두 다른 의미를 가짐 (Route 헤더 필드의 값들의 순서가 다름)
Route: <sip:bob@biloxi.com>
Route: <sip:carol@chicago.com>
Route: <sip:bob@biloxi.com>
Route: <sip:alice@atlanta.com>
Route: <sip:carol@chicago.com>
Route: <sip:alice@atlanta.com>,<sip:carol@chicago.com>,
<sip:bob@biloxi.com>
다음은 동일한 표현들임
CONTACT: <sip:alice@atlanta.com>;ExPiReS=3600
Content-Disposition: session;handling=optional
content-disposition: Session;HANDLING=OPTIONAL
다음은 다른 표현임
Warning: 370 devnull "Choose a bigger pipe"
Warning: 370 devnull "CHOOSE A BIGGER PIPE"
7.3.2 Header Field Classification#
특정 헤더 필드는 request나 response에만 올 수 있음
request header field, response header field라 부름
만약 매칭 되지 않는 곳에 header field가 나타 난다면 무시해야 함(MUST)
7.3.3 Compact Form#
common header field name들은 추약형으로 표현이 가능
메시지의 의미 없이 긴 header field name을 줄 일 수 있음
하나의 메시지에 long form, short form이 나올 수 있음 (MAY)
구현시 각각의 header field에 대하여 long form, short form 둘다 가능 하도록 해야 함(MUST)
7.4 Bodies#
request : method에 따라 body가 올 수 있음
response : request method와 response status에 따라 body의 종류와 해석이 가능, 모든 response들은 바디를 가지고 있을 수도 있음(MAY)
7.4.1 Message Body Type
Content-Type header field
- 메시지 body의 Internet media 타입을 표시 하여야 함(MUST)
Content-Encoding header field
- body가 enconding 되어 있다면 반드시 encoding을 표시 되어야 함(MUST)
- Content-Type header field에서 인지 가능한 character set이라면 생략 가능
- body가 enconding 되어 있다면 반드시 encoding을 표시 되어야 함(MUST)
multpart
- MIME 타입이 올 수도 있음(MAY)
- request가 body에 multpart를 가지고 있으나 remote가 Accept header field에 multpart를 포함하지 않았다면 non-multipart 메시지 바디처럼 세션 디스크립션을 보내야 함(MUST)
- MIME 타입이 올 수도 있음(MAY)
Binary body or body part
- 메시지 바디에 바이너리나 바디의 일부분이 포함 될 수 있음(MAY)
- sender는 특정 charset parameter를 사용하지 않음
- 메시지 바디에 바이너리나 바디의 일부분이 포함 될 수 있음(MAY)
7.4.2 Message Body Length#
Content-Length header field : body의 길이를 body로 표현
HTTP/1.1의 "chunked" transfer encoding은 SIP에서 사용 되지 않아야 함(MUST)
7.5 Framing SIP Messages#
HTTP와 달리, UDP와 같은 unreliable한 datagram protocol들이 구현 되어 짐
Stream-oriented의 경우는 start-line전의 CRLF는 무시해야 함(MUST)
Content-Length header field는 스트림에서 SIP 메시지의 끝을 알아내는데 사용함
'Protocol > SIP' 카테고리의 다른 글
| 09. Canceling a Request (0) | 2013.09.25 |
|---|---|
| 08. General User Agent Behavior (0) | 2013.09.25 |
| 06. Definitions (0) | 2013.09.25 |
| 05. Structure of the Protocol (0) | 2013.09.25 |
| 04. Overview of Operation (0) | 2013.09.25 |