會話 (session) 由 SIP 協定的 INVITE 方法建立,內容包含可用的媒體描述,讓各方協調出可互通的媒體類型。SIP 使用一些代理伺服器 (proxy) 協助轉送請求到用戶目前的位置、服務存取認證、服務提供者轉送政策等。SIP 也提供機制讓用戶註冊目前位置,給 proxy server 使用。
發話端知道受話端的電話號碼,但不知道目前的位置,所以 INVITE 請求會先在 SIP 的代理伺服器間轉送,直到受話端目前的位置,這個動作叫 routing。當請求到達受話端,受話端會回 response 給發話端。response 裡面包含受話端的 Contact,也就是受話端目前的位置。一開始的請求也包含了發話端的 Contact,這樣雙方就知道彼此的目前位置,接下來的訊息就可以直送對方,沒必要經過 SIP 代理伺服器轉送,增進整體效能,也減少處理延遲。
- Introduction
- Overview of SIP Functionality
- Overview of Operation
- Structure of the Protocol
- 名詞定義
- SIP 訊息 (SIP Messages)
- UA 共通行為 (General User Agent Behavior)
- Canceling a Request
- Registrations (SIP REGISTER)
- Querying for Capabilities
- Dialogs
- Initiating a Session (SIP INVITE)
- Modifying an Existing Session
- Terminating a Session
- Proxy Behavior
- Transactions (交易)
- Transport
- Common Message Components
- 信頭欄位 (Header Fields)
- SIP 回應碼 (Response Codes)
- Usage of HTTP Authentication
- S/MIME
- Examples
- Augmented BNF for the SIP Protocol
- Security Considerations
- IANA Considerations
SIP 網路元件 (SIP elements)
SIP Methods
一些名詞
- Transaction (交易):包括一個請求及其所有回應,採用類似 HTTP request/response transaction 模型。
- 回應包括選擇性的 provisional 回應,到其最後回應。失敗的 INVITE 之後的 ACK 也算在同一 transaction。
- regular transaction:INVITE、ACK、CANCEL 以外的 transaction
- REGISTER
- SIP transaction:
- INVITE/2xx:接受 INVITE 並建立 session。
- ACK:
- INVITE/non-2xx/ACK:這是個特例,包含 ACK 也算在同一個 transaction,沿用 Via branch。
- CANCEL:沿用 Via branch,取消 pending transaction。
- stateful:會紀錄 transcation 狀態,當請求或回應進來會看是否屬於已存在的 transaction,方式是看 Via header 的 branch 參數。以前 RFC 2543 的舊方式比較複雜,需要去 hash To, From, Request-URI 及 CSeq。
- stateless UAS:不送 1xx 回應、不重送回應、忽略 ACK 請求、忽略 CANCEL 請求、To tag
- Call 或 Session (會話):由 dialog 建立及維護,包含所有參與的 dialog 及影音,可能有多個 dialog 的多方通話。
SIP Header 欄位 (UAC 送出的 SIP 請求至少要有 To、From、CSeq、Call-ID、Max-Forwards、及 Via)
DTMF relay
BLF
軟體
參考
- 相關 RFC
- RFC3261 SIP: Session Initiation Protocol
- RFC3265, 3853, 4320, 4916, 5393, 5621, 5626, 5630, 5922, 5954, 6026, 6141, 6665, 6878, 7462, 7463, 8217, 8591
- RFC3263 SIP: Locating SIP Servers:Obsoletes RFC 2543
- http://www.iptel.org/sip/intro
- SIP/RTP NAT Traversal、NAT and RTP proxy
- RFC3666 SIP PSTN Call Flows
host = hostname / IPv4address / IPv6reference
- 以 To header 為例,都會有 addr-spec 這部份,且必須是某個 scheme 加「:」開頭,常見的有 sip:、sips:、或 tel:
- 不管是 sip: 或 sips:,以「@」結尾的 userinfo 是選項,hostport 是必須的,可有「;」開頭的 uri-parameters,「?」開頭的 headers 也是選項。