記錄幾個關鍵的地方,經常容易忘掉。
1。rport :VIA頭域的一個欄位,一種解決nat穿透方案,sip擴充。
2。雖然ack屬於Invite的一個確認響應,但ACK與invite不屬於一個 transaction。屬於一個會話。
3。 sip 中的事務 branch IDs 都由固定字串z9hG4bK開始
4。call-id ,實際上call-id唯一標識一路通話,但是在某些sip proxy 裡同一個會話可能同時發出(proxy forking),所以又添加了
from-tag, 及to-tag ,用來唯一標識一路通話。
5. 100 trying 臨時響應 不是 被叫返回給伺服器,伺服器轉寄給 主叫,而是 伺服器 接到請求後還沒有真正請求被叫時發給主叫的一個
臨時響應。
6。
<--- Transmitting (no NAT) to 10.10.10.84:9060 --->
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 10.10.10.84:9060;branch=z9hG4bK-d87543-93246c4e512dc949-1--d87543-;received=10.10.10.84;rport=9060
From: "1501159973"<sip:1501159973@10.10.10.182>;tag=7953ac38
To: <sip:6669@10.10.10.182>
Call-ID: bb3d847cb55efd0a@cGRs
CSeq: 2 INVITE
這裡,received=10.10.10.84;rport=9060 當伺服器檢測到用戶端支援rport擴充後,伺服器做響應時直接使用 received ip:rport連接埠向用戶端做響應,此處為解決nat問題的一種方式。
7. 183 session progress 彩鈴用progress 做 183 響應,此時有sdp協商過程。。。
<--- Transmitting (no NAT) to 10.10.10.84:9060 --->
SIP/2.0 183 Session Progress
Via: SIP/2.0/UDP 10.10.10.84:9060;branch=z9hG4bK-d87543-93246c4e512dc949-1--d87543-;received=10.10.10.84;rport=9060
From: "1501159973"<sip:1501159973@10.10.10.182>;tag=7953ac38
To: <sip:6669@10.10.10.182>;tag=as406cb069
Call-ID: bb3d847cb55efd0a@cGRs
CSeq: 2 INVITE
Server: Asterisk PBX 1.8.2-rc1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Contact: <sip:6669@10.10.10.182:5060>
Content-Type: application/sdp
Content-Length: 283
//sdp 訊息體
v=0 //版本
o=root 638969202 638969202 IN IP4 10.10.10.182 //用命名, 標識,傳輸類型,地址類型,地址
s=Asterisk PBX 1.8.2-rc1 //伺服器名
c=IN IP4 10.10.10.182 //ip地址。
t=0 0
m=audio 13956 RTP/AVP 3 0 8 101
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv