為了處理對話存活機制進行管理,SIP協(xié)議支持了一個非常重要的關(guān)于定時器的擴展協(xié)議,這就是RFC4028。在此協(xié)議中規(guī)定了兩個針對SIP會話超時定時器:Session-Expires(SE)和Min-SE(MSE)。這里提醒讀者,一些人理解這里的M為MAX了,當然后續(xù)就會有很多悲劇出現(xiàn)。Session-Expires 終端用來通過INVITE或者UPDATE傳輸會話生命周期,Min-SE用來傳輸代理服務(wù)器端允許最小會話周期值。UAs通過周期性地發(fā)送re-INVITE或者UPDATE請求來保持會話存活狀態(tài)。示例中是鼎信SIP 話機設(shè)置中關(guān)于定時器(SE)設(shè)置:

根據(jù)RFC4028-5,MSE默認設(shè)置為90秒,通過響應(yīng)碼422返回中傳輸。服務(wù)器端通過MSE設(shè)置來校驗其設(shè)置范圍,鼎信IPPBX UC200 示例關(guān)于定時器設(shè)置:

通過終端(SE)和服務(wù)器端(MSE)設(shè)置可以看出,盡管在用戶端設(shè)置了某個參數(shù)值,但是如果超過了服務(wù)器端MSE的設(shè)置,仍然不會成功設(shè)置。因為服務(wù)器端MSE也進行了設(shè)置處理。在具體的關(guān)于SIP話話定時器的SE和MSE的處理流程如下:

關(guān)于SIP會話超時SE和MSE協(xié)商機制-RFC4028
在以上示例中,我們可以看到,用戶通過INVITE發(fā)送一個SE為:50秒,服務(wù)器端不接受,因此返回一個422(參考rfc4028-6),假設(shè)服務(wù)器指示僅接受最小80秒的MSE。終端又根據(jù)服務(wù)器端的設(shè)置最小要求,設(shè)置為SE為80秒。代理服務(wù)器 1 看到終端按照此建議值設(shè)置了SE,滿足了自己本身的MSE要求,然后轉(zhuǎn)發(fā)到第二個代理服務(wù)器,在設(shè)置中設(shè)置了SE 80秒,MSE也是80秒。假設(shè)第二個代理服務(wù)器同樣也不能接受這樣的設(shè)置,也對第一個代理發(fā)送一個建議的MSE值:90秒。第一個代理服務(wù)器通過和第一個終端協(xié)商后又重新發(fā)送一個新的SE設(shè)置為90秒的定時器超時設(shè)置,并且攜帶了第二個代理服務(wù)器的MSE定時器設(shè)置90秒。最后實現(xiàn)存活機制流程。
通過以上關(guān)于ME和MSE處理機制的流程我們看到,用戶側(cè)不能任意設(shè)置ME,服務(wù)器端也需要小心設(shè)置MSE值。因為,MSE事實上是一種對服務(wù)器的一種保護機制,如果服務(wù)器端對話話處理能力遇到性能瓶頸,資源不足的話,SE設(shè)置過低,導致服務(wù)器端驗證響應(yīng)過于頻繁,可能最后導致系統(tǒng)穩(wěn)定性問題。筆者這里僅介紹了關(guān)于會話定時器SE和MSE的關(guān)系設(shè)置,在SIP服務(wù)器的環(huán)境配置中還有其他的定時器討論需要讀者做進一步的了解,通過這些定時器設(shè)置獲得更多關(guān)于SIP處理的時間設(shè)置:
參考資料:
- https://www.rfc-editor.org/rfc/rfc4028.html
- www.dinstar.cn
- www.asterisk.org.cn