- 會話發起協議教程
- SIP - 首頁
- SIP - 簡介
- SIP - 網路元素
- SIP - 基本呼叫流程
- SIP - 訊息傳遞
- SIP - 響應程式碼
- SIP - 報頭
- SIP - 會話描述協議
- SIP - 提供/應答模型
- SIP - 移動性
- SIP - 分支
- SIP - 代理與路由
- SIP 到 PSTN
- SIP - 編解碼器
- SIP - B2BUA
- SIP 有用資源
- SIP - 快速指南
- SIP - 有用資源
- SIP - 討論
SIP - 請求與響應報頭欄位
接受
Accept 報頭欄位用於指示訊息正文中可接受的訊息 Internet 媒體型別。
該報頭欄位使用 Internet 中常用的型別/子型別格式描述媒體型別。
如果不存在,則假定的可接受訊息正文格式為application/sdp。
媒體型別列表可以使用q值引數設定優先順序。
Accept-Encoding
Accept-Encoding 報頭欄位用於指定可接受的訊息正文編碼方案。
編碼可用於確保具有大型訊息正文的 SIP 訊息適合單個 UDP 資料報。
可以使用q值引數設定優先順序。如果 UAC 不接受列出的任何方案,則返回 406 Not Acceptable 響應。如果未包含,則假定的編碼將為text/plain。
To
To指示請求的最終接收者。UA 生成的任何響應都將包含此報頭欄位,並附加一個標籤。這是一個必填報頭。
代理生成的任何響應都必須在To報頭欄位中新增一個標籤。
To報頭欄位 URI 從不用於路由。
From
From報頭欄位指示請求的發起者。它是用於識別對話的兩個地址之一。
From報頭欄位可能包含用於標識特定呼叫的標籤。
它可能包含顯示名稱,在這種情況下,URI 括在<>中。
這是一個必填報頭。
Call-ID
Call-ID 報頭欄位在所有 SIP 請求和響應中都是必填的。它用於唯一標識兩個使用者代理之間的呼叫。
Call-ID 在呼叫之間必須唯一。
使用者代理的所有註冊都應使用相同的 Call-ID。
Call-ID 始終由使用者代理建立,並且永遠不會被伺服器修改。
它是一個加密隨機識別符號。
Via
Via 用於記錄請求所採用的 SIP 路由,這有助於將響應路由回發起者。
生成請求的 UA 會在其 Via 報頭欄位中記錄自己的地址。
轉發請求的代理會將包含其自身地址的 Via 報頭欄位新增到 Via 報頭欄位列表的頂部。
代理或生成對請求的響應的 UA 會按順序將請求中的所有 Via 報頭欄位複製到響應中,然後將響應傳送到頂部 Via 報頭欄位中指定的地址。
接收響應的代理會檢查頂部 Via 報頭欄位並與其自身地址匹配。
如果不匹配,則響應已被丟棄。
然後刪除頂部 Via 報頭欄位,並將響應轉發到下一個 Via 報頭欄位中指定的地址。
Via 報頭欄位包含協議名稱、版本號和傳輸 (SIP/2.0/UDP、SIP/2.0/TCP 等),並且可能包含埠號和引數,例如 received、rport、branch、maddr和ttl。
如果 UA 或代理從與頂部 Via 報頭欄位中指定的地址不同的地址接收請求,則會在 Via 報頭欄位中新增received標籤。
UA 和代理會在 Via 報頭欄位中新增分支引數,該引數計算為 Request-URI、To、From、Call-ID 和 CSeq 編號的雜湊函式。
CSeq
CSeq 報頭欄位是每個請求中都需要的報頭欄位。它包含一個十進位制數字,該數字對於每個請求都會增加。
通常,它在每個新請求中增加 1,但CANCEL和ACK請求除外,它們使用其引用的 INVITE 請求的 CSeq 編號。
UAS 使用 CSeq 計數來確定順序錯誤的請求或區分新請求(不同的 CSeq)或重傳(相同的 CSeq)。
UAC 使用 CSeq 報頭欄位將響應與其引用的請求匹配。
例如,傳送 INVITE 請求然後傳送 CANCEL 請求的 UAC 可以透過 CSeq 中的方法判斷 200 OK 響應是對邀請請求還是取消請求的響應。
Contact
Contact 報頭欄位用於向其他使用者傳達請求發起者的地址。收到 Contact 報頭欄位後,可以快取 URI 並將其用於對話中未來請求的路由。
例如,INVITE 的 200 OK 響應中的 Contact 報頭欄位可以允許確認 ACK 訊息和此呼叫期間的所有未來請求繞過代理並直接傳送到被叫方。
Record-Route
Record-Route 報頭欄位用於強制透過代理路由兩個 UA 之間會話(對話)中的所有後續請求。
通常,Contact 報頭欄位的存在允許 UA 直接傳送訊息,繞過初始請求中使用的代理鏈。
代理將其地址插入 Record-Route 報頭欄位會覆蓋此操作,並強制將來的請求包含一個 Route 報頭欄位,其中包含該代理的地址,從而強制包含此代理。
希望實現此功能的代理會插入包含其自身 URI 的報頭欄位,或將其 URI 新增到已存在的 Record-Route 報頭欄位中。
URI 的構造方式使得 URI 解析回代理伺服器。UAS 將 Record-Route 報頭欄位複製到對請求的 200 OK 響應中。
代理會將報頭欄位不變地轉發回 UAC。然後,UAC 會儲存 Record-Route 代理列表以及 200 OK 中存在的 Contact 報頭欄位,以在所有後續請求中用於 Route 報頭欄位。
Organization
Organization 報頭欄位用於指示訊息發起者所屬的組織。
代理也可以在訊息從一個組織傳遞到另一個組織時插入它。
與所有 SIP 報頭欄位一樣,它可以被代理用於做出路由決策,並被 UA 用於做出呼叫篩選決策。
Retry-After
它用於指示資源或服務何時可能再次可用。
在 503 Service Unavailable 響應中,它指示伺服器何時可用。
在 404 Not Found、600 Busy Everywhere 和 603 Decline 響應中,它指示被叫 UA 何時可能再次可用。
它包含以“秒”為單位的時間段。
Subject
可選的 Subject 報頭欄位用於指示媒體會話的主題。
報頭欄位的內容也可以在提醒期間顯示,以幫助使用者決定是否接受呼叫。
Example: Subject: How are you?
Supported
Supported 報頭欄位用於列出 UA 或伺服器實現的一個或多個選項。
它通常包含在對 OPTIONS 請求的響應中。
如果未實現任何選項,則不包含報頭欄位。
如果 UAC 在 Supported 報頭欄位中列出選項,則代理或 UAS 可以在呼叫期間使用該選項。
如果必須使用或支援該選項,則改為使用 Require 報頭欄位。
Example: Supported: rel100
Expires
Expires 報頭欄位用於指示請求或訊息內容有效的時段。
當出現在 INVITE 請求中時,報頭欄位會為完成 INVITE 請求設定時間限制。
也就是說,UAC 必須在此時間段內收到最終響應(非 1xx),否則 INVITE 請求將自動取消,並返回 408 Request Timeout 響應。
會話建立後,原始 INVITE 中 Expires 報頭欄位的值無效——必須為此目的使用 Session-Expires 報頭欄位。
如果出現在 REGISTER 請求中,則報頭欄位會為 Contact 報頭欄位中不包含expires引數的 URI 設定時間限制。
Expires 也用於 SUBSCRIBE 請求以指示訂閱持續時間。
Example: Expires: 30
User-Agent
此報頭欄位用於傳達有關發起請求的 UA 的資訊。