為了處理對(duì)話存活機(jī)制進(jìn)行管理,SIP協(xié)議支持了一個(gè)非常重要的關(guān)于定時(shí)器的擴(kuò)展協(xié)議,這就是RFC4028。在此協(xié)議中規(guī)定了兩個(gè)針對(duì)SIP會(huì)話超時(shí)定時(shí)器:Session-Expires(SE)和Min-SE(MSE)。這里提醒讀者,一些人理解這里的M為MAX了,當(dāng)然后續(xù)就會(huì)有很多悲劇出現(xiàn)。Session-Expires 終端用來通過INVITE或者UPDATE傳輸會(huì)話生命周期,Min-SE用來傳輸代理服務(wù)器端允許最小會(huì)話周期值。UAs通過周期性地發(fā)送re-INVITE或者UPDATE請(qǐng)求來保持會(huì)話存活狀態(tài)。示例中是鼎信SIP 話機(jī)設(shè)置中關(guān)于定時(shí)器(SE)設(shè)置:
根據(jù)RFC4028-5,MSE默認(rèn)設(shè)置為90秒,通過響應(yīng)碼422返回中傳輸。服務(wù)器端通過MSE設(shè)置來校驗(yàn)其設(shè)置范圍,鼎信IPPBX UC200 示例關(guān)于定時(shí)器設(shè)置:
通過終端(SE)和服務(wù)器端(MSE)設(shè)置可以看出,盡管在用戶端設(shè)置了某個(gè)參數(shù)值,但是如果超過了服務(wù)器端MSE的設(shè)置,仍然不會(huì)成功設(shè)置。因?yàn)榉⻊?wù)器端MSE也進(jìn)行了設(shè)置處理。在具體的關(guān)于SIP話話定時(shí)器的SE和MSE的處理流程如下:
關(guān)于SIP會(huì)話超時(shí)SE和MSE協(xié)商機(jī)制-RFC4028
在以上示例中,我們可以看到,用戶通過INVITE發(fā)送一個(gè)SE為:50秒,服務(wù)器端不接受,因此返回一個(gè)422(參考rfc4028-6),假設(shè)服務(wù)器指示僅接受最小80秒的MSE。終端又根據(jù)服務(wù)器端的設(shè)置最小要求,設(shè)置為SE為80秒。代理服務(wù)器 1 看到終端按照此建議值設(shè)置了SE,滿足了自己本身的MSE要求,然后轉(zhuǎn)發(fā)到第二個(gè)代理服務(wù)器,在設(shè)置中設(shè)置了SE 80秒,MSE也是80秒。假設(shè)第二個(gè)代理服務(wù)器同樣也不能接受這樣的設(shè)置,也對(duì)第一個(gè)代理發(fā)送一個(gè)建議的MSE值:90秒。第一個(gè)代理服務(wù)器通過和第一個(gè)終端協(xié)商后又重新發(fā)送一個(gè)新的SE設(shè)置為90秒的定時(shí)器超時(shí)設(shè)置,并且攜帶了第二個(gè)代理服務(wù)器的MSE定時(shí)器設(shè)置90秒。最后實(shí)現(xiàn)存活機(jī)制流程。
通過以上關(guān)于ME和MSE處理機(jī)制的流程我們看到,用戶側(cè)不能任意設(shè)置ME,服務(wù)器端也需要小心設(shè)置MSE值。因?yàn)椋琈SE事實(shí)上是一種對(duì)服務(wù)器的一種保護(hù)機(jī)制,如果服務(wù)器端對(duì)話話處理能力遇到性能瓶頸,資源不足的話,SE設(shè)置過低,導(dǎo)致服務(wù)器端驗(yàn)證響應(yīng)過于頻繁,可能最后導(dǎo)致系統(tǒng)穩(wěn)定性問題。筆者這里僅介紹了關(guān)于會(huì)話定時(shí)器SE和MSE的關(guān)系設(shè)置,在SIP服務(wù)器的環(huán)境配置中還有其他的定時(shí)器討論需要讀者做進(jìn)一步的了解,通過這些定時(shí)器設(shè)置獲得更多關(guān)于SIP處理的時(shí)間設(shè)置:
參考資料:
- https://www.rfc-editor.org/rfc/rfc4028.html
- www.dinstar.cn
- www.asterisk.org.cn