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