session-timer

Session Timer機制分析

功能介紹

會話初始化協議(SIP)並沒有爲所建立的會話定義存活機制。儘管用戶代理可以通過會話特定的機制判斷會話是否超時,但是代理服務器卻做不到這點。如此一來,代理服務器有時會無法判斷會話是否還是活動的。例如,當一個用戶代理在會話結束時發送BYE消息失敗,或者由於網絡問題BYE消息丟失,代理服務器將不會知道會話已經結束。在這種情況下,代理服務器將保持呼叫的狀態並且無法知道呼叫狀態信息何時失效。

爲了解決這個問題,RFC4028爲SIP會話定義了一種存活機制。用戶代理週期性的發送re-INVITE或UPDATE請求用來保持會話的活動。會話更新請求的間隔通過其定義的協商機制決定。如果在間隔內沒有收到會話更新請求,該會話被認爲已經終止。用戶代理會發送一個BYE消息,代理服務器則將該呼叫的所移除。

工作原理

UAC通過發送一個INVITE消息發起流程,這個消息包括一個帶有可選標籤“timer”的Supported頭字段,用來表明支持Session Timer功能。該請求通過代理服務器傳遞,所經過的任一個代理服務器都可以依據他們的興趣建立會話定時器。每個代理服務器都可以在請求中插入一個Session-Expires頭字段和一個Min-SE頭字段(前提是請求中還沒有這些字段),或者修改上述已存在頭字段的值。

Min-SE頭字段爲會話更新間隔建立了下限,也就是處理這條請求消息的SIP代理的最快會話刷新率。這個頭字段的目的是防止懷有惡意的代理服務器設置任意短的更新間隔以致它的鄰居代理負荷超載。處理請求的每個代理服務器可以提高這個下限(實際上就是提高刷新的週期),但是不能降低下限。

Session-Expires頭字段爲會話更新間隔建立了上限,也就是任何一個代理服務器在處理一個請求之後必須爲這個會話保持狀態的時間週期。任何服務於該請求的代理可以降低這個值,但必須大於Min-SE頭字段指定的值。

如果Session-Expires的間隔太小(小於代理服務器要維護的Min-SE頭字段的值),那麼代理服務器將拒絕這個請求並返回一個422響應。該響應包含一個Min-SE頭字段表明它所支持的最小會話間隔。UAC再次嘗試發送請求,這次請求中包含了Min-SE頭字段,頭字段等於先前接收到的所有422響應中最大的Min-SE頭字段。這樣一來,最小定時器就能滿足所經過的所有代理服務器的約束條件。

在幾次INVITE/422消息的反覆傳送後,請求最終到達UAS。UAS可以調整會話間隔的值就好像它自己也是一個代理服務器。之後,它將這個最終的會話間隔發入2xx響應的Session-Expires頭字段。Session-Expires頭字段還包含一個“refresher”參數用來表示更新的執行者(是當前的UAC還是UAS)。當2xx響應沿代理服務器鏈返回時,任何代理服務器可以觀察這個最終的會話間隔但不能修改它。

通過響應中的Session-Expires頭字段,UAC和UAS都知道會話定時器是活動的,它何時終止以及誰在更新會話。在終止前的某個時刻,當前活動的更新者生成一個會話更新請求,可以是一個re-INVITE或者UPDATE請求。如果更新者始終得不到這個會話更新請求的響應,它就會發送一個BYE消息結束會話。同樣,如果另一端在會話終止前始終收不到會話更新請求,它也會發送一個BYE消息結束會話。 GXP2000Proxy 1Proxy 2GXP2020

圖1-1 Sesstion Timer正常工作流程示意圖

相關參數

(1) Session-Expires頭字段

Session-Expires頭字段用於傳達SIP會話的會話間隔。 該字段只包含在INVITE或UPDATE請求,也包含在INVITE或UPDATE消息的任何一個2xx響應中。當在已經協商確定Session-Expires值,那麼該會話將在Session-Expires/2的時間進行會話更新,該更新方式可以是re-INVITE或者UPDATE的請求。

(2) Min-SE頭字段

Min-SE頭字段表示會話間隔的最小值,以秒爲單位。當它被用在INVITE或UPDATE請求中時,用來表示該會話所要使用的會話間隔的最小值。當它出現在請求或響應中,它的值不能小於90秒。如果這個頭字段沒有被指定,就取它的缺省值90秒。

(3)422迴應代碼

422響應代碼出現在會話協商過程中,當Session-Expires的間隔太小(小於UAS所支持的Min-SE頭字段的值)時,UAS將回應該代碼要求UAC重新協商。

功能相關測試重點

(1)話機終端是否支持Session Timer功能,相關頭字段信息:

Supported: timer;

(2)會話更新的時間準確性,每次更新的時間間隔應爲已經協商確定的Session-Expires值

一半;

(3)會話更新者的確定,可能是UAC也可能是UAS,但無論是哪方進行更新都應該有相

應的更新請求或者回應;

(4) 邏輯驗證會話更新請求發送後,如果在Session-Expires/2的時間內沒有得到對方的響

應(200 OK)信息,則發送BYE以拆掉當前會話;同樣的,假如在規定時間內得不到更新者(Refresher)發送的會話更新請求信息,話機終端是否也會發送BYE;

(5)話機終端在更新過程中,如果更新者(Reresher)變動後,其會話的後續更新邏輯驗證;

(6) 不是所有的參與者都支持Session Timer情況下的會話更新邏輯驗證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章