sip信令超時機制

2021-08-21 01:30:36 字數 3392 閱讀 4433

dialog

當ua 傳送初始invite

請求後,只有接收到失敗響應才有可能建立dialog

。通過callid,from

域中的tag

引數,to

域中的tag

引數來唯一標識

dialog

。 from

域中的引數由主叫新增,to

域中的引數由被叫新增。

根據dialog的定義,只有當101-199或200訊息中的to域中帶有tag引數時,此時才建立dialog。對通過101-199訊息(目前一般是18×訊息)建立的dialog,我們稱之為早期會話(early dialog).

訊息傳送和定時器保護

無論是client

還是server

方,在定時器和訊息重發的處理上,可分為與

invite

相關的transaction 

和與invite

不相關的

transaction

。rfc3261

中定義了

兩個基準定時器

t1=500ms和t2=4s

。無論是可靠傳送還是不可靠傳送,當實體傳送訊息(包括請求或響應訊息)後,都會啟動乙個64 

倍的t1

定時器(計時器b、h、f),當此定時器終結時,如果沒有收到相應的響應或確認訊息,實體將會清掉相關的transaction

。一、與invite請求

訊息相關的行為(client

側行為)

當sip

實體(包括ua

和proxy

)傳送invite

訊息後,無論是可靠傳送還是不可靠傳送,實體都會啟動 transaction

保護,啟動定時器b

(timer b=64*t1

,如果t1

=500ms,

則此定時器為32s

)。在不可靠傳送的情況下,實體同時會啟動t1(

500ms

)定時器(a定時器),如果

t1終結了沒有收到任何響應訊息,實體將會重發

invite

訊息,以後的間隔分別為

2t1,4t1,8t1,16t1,32t1,

在此期間,如果收到響應訊息,實體將會終止重發行為。

當定時器b

(timer b=64t1

)終結時,如果實體仍然沒有收到響應訊息,實體將終止該呼叫請求。

二、與invite

訊息相關的最終響應行為(server

側行為)

當被叫使用者應答時,被叫側ua

(uas

)將會向對端傳送200

訊息,表示對invite

訊息的確認,主叫側ua

(uac

收到200

訊息)後,將會傳送ack

訊息,表示收到200

訊息。因此,對server

側來講,當傳送200

訊息後,為了等待ack

訊息,將會啟動定時器h

(timer h=64t1

)。在不可靠傳送的情況下,

server

還會啟動

t1定時器(計時器g)

如果t1

終結,沒有收到

ack訊息,

uas將會重發

200 

訊息。以後的間隔分別為

2t1,4t1,8t1,

當時間達到t2(

t2=8t1)後,後續重發的間隔將一直為

t2。當定時器h

(timer h=64t1

)終了時,如果實體仍然沒有收到ack

確認訊息,實體將會終止該呼叫請求。

其它的最終響應訊息,訊息的重傳和定時器保護也與200

訊息的相同。

三、與invite訊息無關的請求訊息的行為(client

側行為)

其它請求(非invite

請求)訊息,例如info

訊息或bye

訊息,實體接收到最終響應後,由於不需要對最終響應訊息進行確認,因此訊息重發行為上與invite

訊息的重發存在不同。

當實體傳送info

或bye

訊息後,實體將會啟動定時器f

(timer f=64t1

)。如果定時器f

終了時,沒有收到最終響應訊息,實體將會清掉transaction

。在不可靠傳送的情況下,實體同時啟動t1

定時器(計時器e)。如果沒有收到任何響應訊息,實體重發的行為將與invite

訊息相關的最終響應行為(server

)相同。如果在此期間沒有收到臨時響應訊息,實體將會以t2

的間隔重發。

ack 只有在響應非200 ok

時才和invite

一樣,否則與invite

不為同一事務,只屬於同乙個對話。

預設值節

含義t1

500 ms

17.1.1.1

經歷來回時間(rtt)

t24 秒

17.1.2.2

非 invite 請求和 invite 響應的最長重新傳輸時間間隔

t45 秒

17.1.2.2

訊息可保留在網路中的最長持續時間

計時器 a

最初為 t1

17.1.1.2

invite 請求重新傳輸時間間隔(僅適用於 udp)

計時器 b

64*t1

17.1.1.2

invite 事務超時計時器

計時器 d

大於 32 秒(對於 udp)

17.1.1.2

響應重新傳輸的等待時間

0 秒(對於 tcp 和 sctp)

計時器 e

最初為 t1

17.1.2.2

非 invite 請求重新傳輸時間間隔(僅適用於 udp)

計時器 f

64*t1

17.1.2.2

非 invite 事務超時計時器

計時器 g

最初為 t1

17.2.1

invite 響應重新傳輸時間間隔

計時器 h

64*t1

17.2.1

ack 接收的等待時間

計時器 i

t4(對於 udp)

17.2.1

ack 重新傳輸的等待時間

0 秒(對於 tcp 和 sctp)

計時器 j

64*t1(對於 udp)

17.2.2

重新傳輸非 invite 請求的等待時間

0 秒(對於 tcp 和 sctp)

計時器 k

t4(對於 udp)

17.1.2.2

響應重新傳輸的等待時間

0 秒(對於 tcp 和 sctp)

RPC超時機制

linux下rpc支援簡單的超時重傳機制,採用了固定超時時間間隔和固定重試次數。當rpc服務傳送乙個報文時 對應一次遠端過程呼叫 它便啟動乙個定時器 如果定時器在遠端過程呼叫應答到達前期滿,rpc服務便重發請求。程式設計師可以為某個給定應用調整超時時間間隔以及重試次數,但無法自適應。這種簡單機制無法...

haproxy 超時機制

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!code class python option redispatch option redispatch 是否允許重新分配在session 失敗後 option abortonclose 丟棄由於客戶端等待時間過長而關閉連線但仍在haproxy等...

inpu超時機制

input的超時檢測機制跟service broadcast provider截然不同,為了更好的理解input過程先來介紹兩個重要執行緒的相關工作 input的超時機制並非時間到了一定就會 而是處理後續上報事件的過程才會去檢測是否該 所以更相信是掃雷的過程,具體如下圖所示。inputreader執...