sip协议的超时机制
0、前言:
在講解sip協(xié)議的超時機制之前,先簡單地介紹一下sip協(xié)議中的message、dialog、session 和 transaction
(1)Messages(消息)? ?
? ? ? ?消息是在服務(wù)器和客戶端之間交換的獨立文本,有兩種類型的消息,分別是請求(Requests)和響應(yīng)(Responses)。
(2)Dialog(對話)? ?
? ? ? ?對話是兩個UAs(user agent) 之間持續(xù)一段時間的端到端(peer-to-peer)的SIP 關(guān)系.。一個對話由一個Call-ID、一個local tag 和 一個remote tag來標(biāo)識,對話過去也叫做 "call leg"。dialog的建立是收到UAS的響應(yīng)(To tag)時開始建立的。收到180響應(yīng)時建立dialog叫做早期對話(early dialog),收到2XX的應(yīng)答開始才是真正的dialog建立。
? ? ? ?當(dāng)UA發(fā)送初始INVITE請求后,只有接收到失敗響應(yīng)才有可能建立DIALOG。通過Callid、From域中的tag參數(shù)和To域中的tag參數(shù)來唯一標(biāo)識DIALOG。?From域中的參數(shù)由主叫添加,To域中的參數(shù)由被叫添加。
(3)Transaction(事務(wù))??
? ? ? ?事務(wù)發(fā)生于客戶端和服務(wù)器端之間,包含從客戶端發(fā)出請求給服務(wù)器,到服務(wù)器響應(yīng)給客戶端的最終消息(non-1xx message)之間的所有消息.。如果請求是一個"Invite"消息,并且最終的響應(yīng)是一個non-2xx消息,那么該事務(wù)包含一個"Ack"響應(yīng)消息。如果服務(wù)器的響應(yīng)是一個2xx消息,那么,隨后的ACK是一個單獨的事務(wù)。
(4)Session(會話)?
? ? ? ?session是媒體交換之后才建立的,具體而言就是通過offer/answer方式交換sdp的媒體。session的建立可以使INVITE-200 也可以是200-ACK。這要看媒體的交換發(fā)生的時間。 具體來說,INVITE 中的消息體用sdp語言來描述自己可處理的媒體類型,200OK中 帶回UAS端可處理的媒體類型,這個時候媒體交換就算是完成了,也就是session建立起來了。
下面的示意圖清晰的顯示了Transaction和Dialog之間的關(guān)系:
?
1、sip協(xié)議超時機制
? ? ? ?SIP協(xié)議中無論是Client端還是Server端,在定時器和消息重發(fā)的處理上,可分為與INVITE相關(guān)的Transaction?和與INVITE不相關(guān)的Transaction。RFC3261中定義了兩個基準(zhǔn)定時器 T1=500ms 和 T2=4s。
無論是可靠傳送還是不可靠傳送,當(dāng)實體發(fā)送消息(包括請求或響應(yīng)消息)后,都會啟動一個64?倍的T1定時器(計時器B、H、F),當(dāng)此定時器終結(jié)時,如果沒有收到相應(yīng)的響應(yīng)或確認消息,實體將會清掉相關(guān)的Transaction。
(1)INVITE客戶端事務(wù)
當(dāng)SIP實體(包括UA和Proxy)發(fā)送INVITE消息后,無論是可靠傳送還是不可靠傳送,實體都會啟動定時器B(Timer B=64*T1,如果T1=500ms,則此定時器為32S)。
在不可靠傳送的情況下,實體同時會啟動定時器A(初始值為T1),如果T1時間間隔后沒有收到任何響應(yīng)消息,實體將會重發(fā)INVITE消息,之后的間隔分別為2T1、4T1、8T1、16T1、32T1,在此期間,如果收到響應(yīng)消息,實體將會終止重發(fā)行為。
當(dāng)定時器B(Timer B=64T1)終結(jié)時,如果實體仍然沒有收到響應(yīng)消息,實體將終止該呼叫請求,客戶端不產(chǎn)生ACK。
當(dāng)客戶端收到300~699的應(yīng)答時,客戶端需要產(chǎn)生ACK請求。(ACK請求必須和原始請求發(fā)送到相同的地址、端口和transport),并啟動定時器D(缺省值是在非可靠通訊上至少是32秒,在可靠通訊上是0秒)
(2)INVITE服務(wù)端事務(wù)
當(dāng)被叫用戶應(yīng)答時,被叫側(cè)UA(UAS)將會向?qū)Χ税l(fā)送200消息,表示對INVITE消息的確認,主叫側(cè)UA(UAC收到200消息)后,將會發(fā)送ACK消息,表示收到200消息。因此,對Server側(cè)來講,當(dāng)發(fā)送200消息后,為了等待ACK消息,將會啟動定時器H(Timer H=64T1)。
在不可靠傳送的情況下,Server還會啟動T1定時器(計時器G),如果T1終結(jié),沒有收到ACK消息,UAS將會重發(fā)200?消息。以后的間隔分別為2T1,4T1,8T1,當(dāng)時間達到T2(T2=8T1)后,后續(xù)重發(fā)的間隔將一直為T2。
當(dāng)定時器H(Timer H=64T1)終了時,如果實體仍然沒有收到ACK確認消息,實體將會終止該呼叫請求。
其它的最終響應(yīng)消息,消息的重傳和定時器保護也與200消息的相同。
(3)非INVITE客戶端事務(wù)
當(dāng)實體發(fā)送INFO或BYE等消息后,實體將會啟動定時器F(Timer F=64T1)。如果定時器F終了時,沒有收到最終響應(yīng)消息,實體將會清掉Transaction。
在不可靠傳送的情況下,實體同時啟動定時器E(初始值T1)。如果在此期間沒有收到1XX臨時響應(yīng)消息,實體將會以MIN(2(4,8..)*T1,T2)的間隔重發(fā),直到間隔達到T2(4秒)。如果沒有收到任何響應(yīng)消息,實體重發(fā)的行為將與INVITE消息相關(guān)的最終響應(yīng)行為(Server)相同。
ACK只有在響應(yīng)非200 OK時才和INVITE一樣,否則與INVITE不為同一事務(wù),只屬于同一個對話。
(4)非INVITE服務(wù)端事務(wù)
當(dāng)收到一個不是INVITE或者ACK請求的時候,服務(wù)端的狀態(tài)初始化為"Trying"狀態(tài),在此狀態(tài)下,任何重發(fā)的請求都會被忽略。當(dāng)服務(wù)端發(fā)送一個1XX的臨時應(yīng)答后,進入"Proceeding"狀態(tài);在"Proceeding"狀態(tài)下收到一個重發(fā)的請求,服務(wù)端將發(fā)送一個最近的1XX臨時應(yīng)答;如果在"Proceeding"狀態(tài)下,服務(wù)端發(fā)送一個終結(jié)應(yīng)答(應(yīng)答碼是200—699),那么服務(wù)端就進入“Completed”狀態(tài)。
當(dāng)服務(wù)端進入"Completed"狀態(tài),對于不可靠傳輸來說,必須設(shè)定一個定時器J=64*T1秒;對于可靠傳輸來說,設(shè)定為0秒(即:不設(shè)定定時器)。在“Completed”狀態(tài)下,收到一個重發(fā)的請求時,服務(wù)端需要將上一次的終結(jié)應(yīng)答重新發(fā)送。
服務(wù)端事務(wù)保持“Completed”狀態(tài)知道定時器J觸發(fā),當(dāng)定時器J觸發(fā)后,服務(wù)端事務(wù)必須進入“Terminated”狀態(tài)。
?
2、SIP協(xié)議中的各類定時器解析
| T1 | 500 ms | 一個估計的循環(huán)時間(RTT) |
| T2 | 4 秒 | 非 INVITE 請求和 INVITE 響應(yīng)的最長重傳時間間隔 |
| T4 | 5 秒 | 網(wǎng)絡(luò)在客戶端和服務(wù)端事務(wù)中傳輸消息可能的時間 |
| 定時器 A | 最初為 T1 | INVITE 請求重傳時間間隔(僅適用于不可靠傳輸,如:UDP) |
| 定時器 B | 64*T1 | INVITE 事務(wù)超時定時器 |
| ? 定時器?D | 大于等于 32 秒(對于 UDP) | ? 響應(yīng)重傳的等待時間 |
| 0 秒(對于 TCP 和 SCTP) | ||
| 定時器 E | 最初為 T1 | 非 INVITE 請求重傳時間間隔(僅適用于不可靠傳輸,如:UDP) |
| 定時器 F | 64*T1 | 非 INVITE 事務(wù)超時定時器 |
| 定時器 G | 最初為 T1 | INVITE 響應(yīng)重傳時間間隔 |
| 定時器 H | 64*T1 | ACK 接收的等待時間 |
| ? 定時器 I | T4(對于 UDP) | ? ACK 重傳的等待時間 |
| 0 秒(對于 TCP 和 SCTP) | ||
| ? 定時器 J | 64*T1(對于 UDP) | ? 重傳非 INVITE 請求的等待時間 |
| 0 秒(對于 TCP 和 SCTP) | ||
| ? 定時器 K | T4(對于 UDP) | ? 響應(yīng)重傳的等待時間 |
| 0 秒(對于 TCP 和 SCTP) |
參考:
https://www.jianshu.com/p/84d7289a4d3b
https://blog.csdn.net/daitu3201/article/details/80831429
總結(jié)
以上是生活随笔為你收集整理的sip协议的超时机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用PS把背景完全扣掉,变成透明
- 下一篇: 中国 AI 天才养成计划:清华姚班和 1