一個用戶代理代表一個終端系統(tǒng),包含一個用戶終端UAC,用于產(chǎn)生請求方法;包含一個用戶代理服務端UAS,用來產(chǎn)生響應。用戶按下觸發(fā)鍵時可以使得UAC發(fā)出請求和處理應答,UAS是一個能接收請求,并且根據(jù)用戶的輸入產(chǎn)生響應的應答。當一個UAC發(fā)送請求時,該請求通過PROXY代理服務器傳遞到UAS;當UAS產(chǎn)生一個應答,該應答同樣被傳送到UAC。
UAC和UAS處理請求和應答的特點:
- 請求和應答是否在同一個對話中
- 請求的方法
產(chǎn)生一個請求
合法的SIP請求至少需要包含:Via,From,To,Cseq,Call-ID,Max-Forwards。這6個字段是SIP消息的基本組成部分,包含了消息地址,響應的路由,消息傳遞次數(shù),序列號,事務的唯一標志。這些頭域是在請求行(起始行)之后,請求行:Request-URI,SIP版本(SIP版本一般為SIP/2.0)
1. Via
(1) 作用
路由響應:記錄請求經(jīng)過的路徑,確保響應按原路徑返回。
NAT 穿透:標記請求的實際源地址(通過 received 和 rport 參數(shù))。
協(xié)議適配:標識傳輸層協(xié)議(如 UDP, TCP, TLS)。
(2) 格式
Via: SIP/2.0/UDP client.example.com:5060;branch=z9hG4bK776asdhds
參數(shù):
branch:唯一標識事務(以 z9hG4bK 開頭,避免沖突)。
received:記錄請求的實際源 IP(由服務器添加)。
rport:記錄請求的實際源端口(由服務器添加)。
(3) 規(guī)則
每經(jīng)過一個代理,代理會在 Via 頭部頂部插入自己的地址。
響應按 Via 列表逆序逐跳返回(類似“?!苯Y構)。
2. From
(1) 作用
標識發(fā)起方:標記請求的原始發(fā)送者(可能與實際發(fā)送地址不同)。
對話匹配:與 To 和 Call-ID 共同標識一個 SIP 對話(Dialog)。
(2) 格式
From: "Alice" <sip:alice@example.com>;tag=12345
參數(shù):
tag:唯一標識對話中的參與者(由 UAC 生成,避免重復)。
顯示名:可包含可讀名稱(如 "Alice"),非必需。
(3) 規(guī)則
UAS 必須原樣返回 From 頭域(包括 tag)在響應中。
3. To
(1) 作用
標識目標方:標記請求的預期接收者(可能未實際處理請求)。
對話匹配:與 From 和 Call-ID 共同標識一個 SIP 對話。
(2) 格式
To: "Bob" <sip:bob@example.org>;tag=67890
參數(shù):
tag:由 UAS 在響應中添加,用于區(qū)分同一對話中的不同參與者。
初始請求:To 頭域可能無 tag,直到 UAS 生成響應。
4. CSeq
(1) 作用
事務排序:唯一標識一個事務(請求+響應),確保請求與響應匹配。
重傳檢測:相同 CSeq 值的請求視為重傳。
(2) 格式
CSeq: 1 INVITE
組成:
序列號:數(shù)字(從 1 開始遞增)。
方法名:必須與請求方法一致(如 INVITE, BYE)。
(3) 規(guī)則
每個新請求的 CSeq 序列號必須遞增(同一對話內(nèi))。
UAS 必須驗證 CSeq 方法是否與請求方法一致。
5. Call-ID
(1) 作用
唯一標識對話:全局唯一標識符,用于關聯(lián)同一會話中的所有請求和響應。
(2) 格式
Call-ID: a84b4c76e66710@client.example.com
生成規(guī)則:通常為隨機字符串 + @ + 主機名(如 UAC 的 IP/域名)。
唯一性:同一對話中所有消息的 Call-ID 必須相同。
6. Max-Forwards
(1) 作用
防循環(huán):限制請求經(jīng)過的代理跳數(shù),避免無限循環(huán)。
(2) 格式
Max-Forwards: 70
初始值:通常設為 70(RFC 建議值)。
處理規(guī)則:
每經(jīng)過一個代理,值減 1。
若值為 0,代理返回 483 Too Many Hops 錯誤。