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

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

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

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