王玉巧
(黃河科技學院,鄭州 450063)
會話啟動協議SIP(Session Initiation Protocol)是 由 IETF(Internet Engineering Task Force)組織于1999年提出的多媒體通信框架的應用層信令協議,是在諸如SMTP(簡單郵件傳送協議)和HTTP(超文本傳送協議)基礎之上建立起來的,尤其適用于Internet中的實時通信應用,其設計理念和協議結構完全符合NGN的特性和要求,成為未來多媒體通信系統的主流發展方向。SIP用來生成,修改和終結一個或多個參與者之間的會話。這些會話包括因特網多媒體會議,因特網(或任何IP網絡)電話呼叫和多媒體發布。會話中的成員能夠通過多播或單播聯系的網絡來通信。
Sip呼叫是voip重要部件,它服從整個通信行業的產業政策。國家發改委、科技部等主管部門按“十一五”規劃及國務院8號文件精神,對voip、NGN等通信高新技術及其產業化的支持力度不斷加強,支持重點明確,立項審批加快。
sip呼叫本質上代表著人們通信方式的變革,語音傳輸的IP化、內容的多媒體化、用戶通信智能化、互聯網業務向電信網的遷移的趨勢發展??萍疾慷囗楆P于sip呼叫的研發項目已立項。在上海、南京、杭州等珠三角地市,已經開始了基于sip呼叫的三網合一交換機的應用,鄭州也開始了對于基于sip呼叫的voip的大力支持。
行業sip呼叫的普遍技術水平是:(1)能夠實現sip的呼叫,由于需要重新編譯才能執行,不能隨時更新,對sip的新技術、新功能不能立即實現;(2)平臺單一,不能在各個平臺通用。如在windows上的不能通用于Linux上。(3)架構復雜,用戶使用困難。
在編寫基于sip呼叫的通用軟件處理平臺時,用到oSip以及eXosip開源協議棧。
oSip是遵循IETF標準,使用ANSI C編寫,源代碼開放的SIP協議棧。oSip主要有下列優點:結構小巧簡單,只有400K左右,適合在嵌入式系統上應用;可移植性好,已被成功的應用于Solaris、HP Unix、VxWorks、Windows和GNU/Linux等系統中;工作穩定、兼容性強。oSip主要由解析模塊、工具模塊和狀態機模塊構成,其核心是狀態機模塊。解析模塊完成對SIP請求和響應進行封裝與解析處理。解析模塊又可分為SIP解析、SDP解析與URL解析。工具模塊主要提供一些處理工具用于對話管理和SDP協商。狀態機模塊負責對某個事務(如注冊過程、呼叫過程等)狀態的維持及處理,并在特定的狀態下觸發響應的事件或回調函數。根據RFC描述中關于SIP協議事務層的定義,oSip 協議棧有4種狀態機:客戶端邀請事務(ICT),客戶端非邀請事務(NICT),服務器端要求事務(IST),服務器端非邀請事務(NIST)。前兩種狀態機是由客戶端發起的,后兩種狀態機是由服務器發起的,這4種狀態機涵蓋了SIP的各種事務類型。其中ICT是SIP客戶端中最常見的事務。oSip專注于SIP底層解析,這使得它具有很高的效率。但另一方面,由于沒有提供高層的SIP會話控制API,使得上層應用在調用協議棧時很破碎,降低了易用性。為此oSip的開發者們又在oSip的基礎上開發了eXosip。eXosip是oSip的擴展,它部分封裝了oSip協議棧,使得它更容易被使用。eXosip實現了作為單個SIP終端的大部分功能
因為SIP是一個文本編碼協議,所以SIP信令實際上是以UDP數據報的形式在有線網(例如以太網)上傳送的。
SIP用戶在啟動是,向服務器注冊。注冊該用戶的IP地址,端口號,用戶名,用戶密碼。對于用戶密碼可以加密發送。
在收到被叫用戶電話號碼后,經過服務器號碼和密碼的認證后,向被叫用戶發起呼叫。下圖為一個簡單的SIP呼叫應用。

圖一 一個簡單的SIP會話建立例子
(1)主叫Tesla向被叫發送INVITE,
(2)被叫Marconi空閑時,向主叫方Tesla發送180,表示被叫振鈴。
(3)被叫摘記,向主叫方發送200OK消息。
(4)主叫方發送ACK消息。雙方通話
(5)被叫掛機,向主叫方發送BYE消息。
(6)主叫方發送200OK,表示通話結束。
本產品在windows平臺,Linux平臺,iPhone平臺,winCE平臺,ucOS平臺,嵌入式Linux平臺以及其他手持終端,學習機等上使用。
用戶圖形界面包括電話號碼輸入,摘記和掛機按鈕,sip服務器設置
在Linux(或windows)下編寫make文件,編譯代碼運行。
在調試時用到Asterisk軟件。Asterisk在CenOS編譯運行。主要配置電話用戶和號碼翻譯文本文件。Asterisk為源碼開放的voip呼叫處理軟件。下載Asterisk,在CenOS上解壓,編譯,安裝。如果安裝成功,就有安裝成功的提示。安裝成功后,要修改配置文件。然后運行。用進程命令察看,可以發現有Asterisk和Safe_Asterisk兩個運行進程。
Sip呼叫處理模塊采用互為服務器模式。即交換機終端既是客戶端,同時也是服務器。在交換機終端以http格式,向Asterisk服務器發送上行命令。此時端口一般為5060,udp協議端口。
Asterisk服務器收到交換機終端的上行請求命令,以udp協議,重新向客戶端發起socket消息。
客戶端服務器收到Asterisk服務器以客戶端的形式發送的udp消息后再進一步處理。
客戶端采用定時器方式,即定時的對客戶端狀態檢測。oSip主要有客戶端邀請事務(ICT),客戶端非邀請事務(NICT),服務器端要求事務(IST),服務器端非邀請事務(NIST)等幾個狀態??蛻舳硕〞r對以上幾個狀態處理,完成狀態檢測和狀態遷移。
其運行流程如下:
(1)SIP 呼叫注冊(REGISTER)。
交換機在開機后,定時檢測SIP處理模塊的狀態,如果存在,就向服務器注冊。同時,對于已經注冊的SIP模塊,如果不存在,就向服務器取消注冊。
在注冊時,把本端IP地址(192.168.1.1),本端端口后(5060),用戶名(Telsa),用戶密碼(1234),本端用戶電話號碼(9001),Asterisk服務器的 IP 地址(192.168.1.2),端口號(5060)發送到Asterisk服務器。
在收到200OK消息后,表示注冊成功。
此時,用戶Telsa狀態為注冊狀態。
(2)用戶摘記撥號的處理流程。
Telsa用戶9001,撥打Marchi用戶9002。
用 戶 摘 記,聽 撥 號 音,撥 號 碼“9002”;經Asterisk 服務器,發送“INVITE”消息到 “9002”用戶Marchi。
此時,用戶Telsa狀態由注冊狀態遷移到撥號狀態。
(3)用 戶Marchi此 時 空 閑,振 鈴,發 送180Ringing到Telsa用戶。
此時,用戶Telsa狀態由撥號狀態遷移到振鈴狀態
(4)用戶通話的處理流程。
被叫Marchi摘記,向主叫Telsa,發送200OK,主叫發送“ACK”消息到Marchi用戶。
此時,用戶Telsa狀態由振鈴狀態遷移到通話狀態
(5)被叫Marchi掛機,向主叫Telsa發送“BYE”消息,主叫向被叫發送“200OK”消息
此時,用戶Telsa狀態由通話狀態遷移到注冊狀態。即原始空閑狀態。
所有的狀態在超時后,都回到原始空閑狀態。即注冊狀態。
如果檢測不到用戶Telsa,則向Asterisk發送消息,取消用戶Telsa注冊狀態。
PSTN呼叫處理模塊采用狀態機的方法處理號碼接受和發送呼叫,同時處理SIP的呼叫狀態遷移。