




摘要:作為融合網絡中語音業務(VoIP)及新型網絡應用的基礎協議,SIP協議的靈活性和可擴展性使得它跟網絡層的IP協議一樣,在應用層成為事實上的“協議標準”。近幾年國內企業使用較為廣泛的視頻會議應用SparkleComm即是用SIP協議進行開發。本文利用SDL語言對SIP協議進行形式化研究,包括協議交互消息的形式化定義,用戶代理客戶端/服務器端的形式化描述,客戶端/服務器端請求事務的內部流程形式化等工作,進而使用SDL語言形式化地描述了SIP呼叫建立的完整流程。這樣當我們在SIP協議的基礎上進行新型應用協議開發時候,可以在開發初期將協議一致性、可達性、活鎖、死鎖等協議驗證工作做好,提前將部分協議錯誤在設計初期找出來,以加快企業新型應用的開發效率。
關鍵詞:SIP;形式化描述語言;協議;融合網絡
一、引言
VoIP 代表融合網絡中的語音,可以實現語音應用在智能手機、臺式機、筆記本電腦、傳統電話等異構平臺進行互聯互通。SIP協議雖然不是支持VoIP的唯一協議,但卻是目前使用最普及的協議。近幾年國內眾多企業使用較為廣泛的視頻會議應用SparkleComm也是使用SIP協議開發的。
SIP(Session Initiation Protocol) [1] 是一個應用層協議,能控制語音、視頻等各種多媒體類型的會話。SIP除了能啟動端到端,即一對一的語音會話, 還可用于通過網絡進行視頻會議、即時消息等多對多的語音視頻應用。作為電信運營商最為盈利的語音業務,也是廣泛地采用了SIP協議。 部署靈活、易使用、擴展性強使得應用層的SIP協議跟網絡層的IP協議一樣,成為事實上的協議標準。
跟在軟件開發領域應用廣泛的UML語言相比,SDL[2]語言主要是電信設備提供商廣泛使用的一門形式化語言。SDL由ITU-T(國際電信聯盟電信標準分局)制定,在ITU-T Z.100中給出了SDL的完整定義。它利用直觀的二維圖形將通信協議高效簡潔地描述出來。但 SDL 不是諸如C、Java這樣的編程語言,用 SDL形式化系統之后還是需要將它改寫成實際可運行的程序才有實際價值。本文借助于集成開發工具(Telelogic TAU)使用SDL對于SIP進行協議形式化研究,這樣當我們在SIP協議的基礎上進行新型應用協議開發時候,可以借鑒SIP協議形式化成果在新型應用協議開發初期將協議一致性、可達性、活鎖、死鎖等協議驗證工作做好,提前將部分協議錯誤在設計初期找出來,以加快企業新型應用的開發效率。
二、SIP協議功能
SIP作為應用層的控制協議,不僅可以建立一對一的單方語音通信,也可以邀請參與者參加已經存在的會話Session,這種模式就是多對多的視頻會議模式或者白板模式,可以非常方便地增加或者刪除一個已經存在的會話中的各類通信媒體資源。
SIP呼叫建立的流程如圖1所示,基于請求、應答的通信模式,該圖用消息順序圖MSC的形式表示整個呼叫控制流程。在應答中,呼叫方的終端發送一個含有被叫方的SIP/URI地址的INVITE通信請求報文,INVITE請求消息包含多個特定含義的消息報文的包頭域。包頭域中包含有如下的字段:呼叫的唯一標識,被叫方Callee的地址,呼叫方Caller的地址,Caller和Callee建立會話的類型,此處同時協商通信雙方所需的網絡服務質量QoS,包括根據實際網絡情況是否考慮帶寬需求降級等。
三、SIP協議形式化描述
(一)SDL 及開發工具
一個SDL系統一般由系統system、功能塊block、進程process、過程procedure四個層級構成。系統以外的部分被視為當前SDL系統的外部環境,外部環境也可以用另一個SDL系統來描述。SDL系統通過信道channel與外部環境env進行通信。SDL描述系統行為的基礎是擴展有限狀態機EFSM。
Telelogic TAU[3]是瑞典Telelogic公司推出的一款SDL語言的集成開發環境,目前由IBM公司收購并維護后續軟件版本,用于實現SDL系統形式化過程中的畫圖、仿真、測試、執行、自動代碼生成、早期錯誤檢測等功能,其最大特點在于SDL和MSC的圖形化,為各種設計和開發任務提供自頂向下的工程設計輔助方法。其中當前自動代碼生成的是C++代碼,代碼中變量函數名全部都是自動生成,代碼可讀性及可維護性非常差,目前這個模塊并沒有得到實際的使用。
(二)SIP的SDL設計
根據SIP協議的描述,在呼叫建立的過程里,定義了5種消息,即INVITE、TRYING、RINGING、OK、ACK。每種消息都有主要的頭部字段, From、To、Call-ID、CSeq、Contact、Via。用SDL定義如圖2所示。
圖3為SIP呼叫流程對應的系統描述。說明如下:用戶代理客戶端UserAgentClient(UAC)用來產生請求,用戶代理服務端UserAgentServer(UAS)用來響應請求。用戶代理客戶端可以由外部事件觸發而發出請求和處理應答,用戶代理服務端能夠接收請求,并且產生應答。
事務是SIP協議的基本組成部分。其中InviteTransactionServer負責服務端請求事務,InviteTransactionClient負責客戶端請求事務。圖4給出了UAC的內部進程模塊,包括了事務用戶(TU)、請求事務客戶進程和傳輸進程,TU位于事務層之上。發送INVITE、ACK消息,并接收RINGING、TRYING、OK消息。
圖5展示了UAS的內部進程模塊。包括事務用戶(TU)、請求事務服務進程和傳輸進程。與UAC相反,UAS接收INVITE、ACK消息,返回RINGING、TRYING、OK消息。在上述兩個事務進程中,信號的傳輸采用UDP方式。
圖6形式化地定義了請求客戶端事務進程內部流程。InviteTransactionClient有Trying、Proceeding、Completed、Terminated等四個狀態。
Timer A,B,D分別代表了重新發送請求超時T1(500ms)、 事務超時(64*T1),和在UDP傳輸下在Completed狀態的保持時間。在這里定義了一個信號Failure(signal),它代表事務客戶端進程收到的300~699的狀態信號。當收到300~699的狀態信號時,請求客戶端事務發送ACK信號給TU。
圖7形式化地定義了服務器端事務進程內部流程。InviteTransactionServer有Waiting、Trying、Proceeding、Completed、Confirmed、Terminated這些狀態。同樣地在這里定義的Failure信號代表事務服務端收到的300~699的狀態信號。其中需要說明的是,當在Completed狀態的時候,如果接收到重發的請求,服務端事務應當把應答交給傳輸介質層即通信層再次發送。
四、結束語
當前已有的文獻中多使用UML對SIP協議[4]進行描述和建模,本文通過用SDL語言對SIP協議進行描述,一方面更適用于在電信領域進行行業內的業務描述和新型業務開發,另一方面更加深刻闡明SDL作為協議形式化工具的便捷之處以及其在工程領域的強大功能。本文借助于集成開發工具(Telelogic TAU)使用SDL對于SIP進行協議形式化,這樣當我們在SIP協議的基礎上進行新型應用協議開發時候,可以在開發初期將協議一致性、可達性、活鎖、死鎖等協議驗證工作做好,提前將部分協議bug在設計初期找出來,以加快企業新型應用的開發效率。
作者單位:劉業" " 蘇州市職業大學" 計算機工程學院
參" 考" 文" 獻
[1] Donohue D ," Mallory D ," Salhoff K . Session Initiation Protocol[J]. IETF RFC, 2006.
[2] ITU-T. Specification and Description Language[J]. ITU-T(CCITT), Recomendation Z.100, 2011.
[3] IBM Telelogic Tau 4.2." [EB/OL]. https://www.ibm.com/support [2022-04-02].
[4] 任子龍. 基于SIP協議的多媒體通信系統的設計與實現[D].北京郵電大學,2019.