王玉巧
(黃河科技學(xué)院,鄭州 450063)
會話啟動協(xié)議SIP(Session Initiation Protocol)是 由 IETF(Internet Engineering Task Force)組織于1999年提出的多媒體通信框架的應(yīng)用層信令協(xié)議,是在諸如SMTP(簡單郵件傳送協(xié)議)和HTTP(超文本傳送協(xié)議)基礎(chǔ)之上建立起來的,尤其適用于Internet中的實時通信應(yīng)用,其設(shè)計理念和協(xié)議結(jié)構(gòu)完全符合NGN的特性和要求,成為未來多媒體通信系統(tǒng)的主流發(fā)展方向。SIP用來生成,修改和終結(jié)一個或多個參與者之間的會話。這些會話包括因特網(wǎng)多媒體會議,因特網(wǎng)(或任何IP網(wǎng)絡(luò))電話呼叫和多媒體發(fā)布。會話中的成員能夠通過多播或單播聯(lián)系的網(wǎng)絡(luò)來通信。
Sip呼叫是voip重要部件,它服從整個通信行業(yè)的產(chǎn)業(yè)政策。國家發(fā)改委、科技部等主管部門按“十一五”規(guī)劃及國務(wù)院8號文件精神,對voip、NGN等通信高新技術(shù)及其產(chǎn)業(yè)化的支持力度不斷加強(qiáng),支持重點明確,立項審批加快。
sip呼叫本質(zhì)上代表著人們通信方式的變革,語音傳輸?shù)腎P化、內(nèi)容的多媒體化、用戶通信智能化、互聯(lián)網(wǎng)業(yè)務(wù)向電信網(wǎng)的遷移的趨勢發(fā)展??萍疾慷囗楆P(guān)于sip呼叫的研發(fā)項目已立項。在上海、南京、杭州等珠三角地市,已經(jīng)開始了基于sip呼叫的三網(wǎng)合一交換機(jī)的應(yīng)用,鄭州也開始了對于基于sip呼叫的voip的大力支持。
行業(yè)sip呼叫的普遍技術(shù)水平是:(1)能夠?qū)崿F(xiàn)sip的呼叫,由于需要重新編譯才能執(zhí)行,不能隨時更新,對sip的新技術(shù)、新功能不能立即實現(xiàn);(2)平臺單一,不能在各個平臺通用。如在windows上的不能通用于Linux上。(3)架構(gòu)復(fù)雜,用戶使用困難。
在編寫基于sip呼叫的通用軟件處理平臺時,用到oSip以及eXosip開源協(xié)議棧。
oSip是遵循IETF標(biāo)準(zhǔn),使用ANSI C編寫,源代碼開放的SIP協(xié)議棧。oSip主要有下列優(yōu)點:結(jié)構(gòu)小巧簡單,只有400K左右,適合在嵌入式系統(tǒng)上應(yīng)用;可移植性好,已被成功的應(yīng)用于Solaris、HP Unix、VxWorks、Windows和GNU/Linux等系統(tǒng)中;工作穩(wěn)定、兼容性強(qiáng)。oSip主要由解析模塊、工具模塊和狀態(tài)機(jī)模塊構(gòu)成,其核心是狀態(tài)機(jī)模塊。解析模塊完成對SIP請求和響應(yīng)進(jìn)行封裝與解析處理。解析模塊又可分為SIP解析、SDP解析與URL解析。工具模塊主要提供一些處理工具用于對話管理和SDP協(xié)商。狀態(tài)機(jī)模塊負(fù)責(zé)對某個事務(wù)(如注冊過程、呼叫過程等)狀態(tài)的維持及處理,并在特定的狀態(tài)下觸發(fā)響應(yīng)的事件或回調(diào)函數(shù)。根據(jù)RFC描述中關(guān)于SIP協(xié)議事務(wù)層的定義,oSip 協(xié)議棧有4種狀態(tài)機(jī):客戶端邀請事務(wù)(ICT),客戶端非邀請事務(wù)(NICT),服務(wù)器端要求事務(wù)(IST),服務(wù)器端非邀請事務(wù)(NIST)。前兩種狀態(tài)機(jī)是由客戶端發(fā)起的,后兩種狀態(tài)機(jī)是由服務(wù)器發(fā)起的,這4種狀態(tài)機(jī)涵蓋了SIP的各種事務(wù)類型。其中ICT是SIP客戶端中最常見的事務(wù)。oSip專注于SIP底層解析,這使得它具有很高的效率。但另一方面,由于沒有提供高層的SIP會話控制API,使得上層應(yīng)用在調(diào)用協(xié)議棧時很破碎,降低了易用性。為此oSip的開發(fā)者們又在oSip的基礎(chǔ)上開發(fā)了eXosip。eXosip是oSip的擴(kuò)展,它部分封裝了oSip協(xié)議棧,使得它更容易被使用。eXosip實現(xiàn)了作為單個SIP終端的大部分功能
因為SIP是一個文本編碼協(xié)議,所以SIP信令實際上是以UDP數(shù)據(jù)報的形式在有線網(wǎng)(例如以太網(wǎng))上傳送的。
SIP用戶在啟動是,向服務(wù)器注冊。注冊該用戶的IP地址,端口號,用戶名,用戶密碼。對于用戶密碼可以加密發(fā)送。
在收到被叫用戶電話號碼后,經(jīng)過服務(wù)器號碼和密碼的認(rèn)證后,向被叫用戶發(fā)起呼叫。下圖為一個簡單的SIP呼叫應(yīng)用。
圖一 一個簡單的SIP會話建立例子
(1)主叫Tesla向被叫發(fā)送INVITE,
(2)被叫Marconi空閑時,向主叫方Tesla發(fā)送180,表示被叫振鈴。
(3)被叫摘記,向主叫方發(fā)送200OK消息。
(4)主叫方發(fā)送ACK消息。雙方通話
(5)被叫掛機(jī),向主叫方發(fā)送BYE消息。
(6)主叫方發(fā)送200OK,表示通話結(jié)束。
本產(chǎn)品在windows平臺,Linux平臺,iPhone平臺,winCE平臺,ucOS平臺,嵌入式Linux平臺以及其他手持終端,學(xué)習(xí)機(jī)等上使用。
用戶圖形界面包括電話號碼輸入,摘記和掛機(jī)按鈕,sip服務(wù)器設(shè)置
在Linux(或windows)下編寫make文件,編譯代碼運(yùn)行。
在調(diào)試時用到Asterisk軟件。Asterisk在CenOS編譯運(yùn)行。主要配置電話用戶和號碼翻譯文本文件。Asterisk為源碼開放的voip呼叫處理軟件。下載Asterisk,在CenOS上解壓,編譯,安裝。如果安裝成功,就有安裝成功的提示。安裝成功后,要修改配置文件。然后運(yùn)行。用進(jìn)程命令察看,可以發(fā)現(xiàn)有Asterisk和Safe_Asterisk兩個運(yùn)行進(jìn)程。
Sip呼叫處理模塊采用互為服務(wù)器模式。即交換機(jī)終端既是客戶端,同時也是服務(wù)器。在交換機(jī)終端以http格式,向Asterisk服務(wù)器發(fā)送上行命令。此時端口一般為5060,udp協(xié)議端口。
Asterisk服務(wù)器收到交換機(jī)終端的上行請求命令,以udp協(xié)議,重新向客戶端發(fā)起socket消息。
客戶端服務(wù)器收到Asterisk服務(wù)器以客戶端的形式發(fā)送的udp消息后再進(jìn)一步處理。
客戶端采用定時器方式,即定時的對客戶端狀態(tài)檢測。oSip主要有客戶端邀請事務(wù)(ICT),客戶端非邀請事務(wù)(NICT),服務(wù)器端要求事務(wù)(IST),服務(wù)器端非邀請事務(wù)(NIST)等幾個狀態(tài)??蛻舳硕〞r對以上幾個狀態(tài)處理,完成狀態(tài)檢測和狀態(tài)遷移。
其運(yùn)行流程如下:
(1)SIP 呼叫注冊(REGISTER)。
交換機(jī)在開機(jī)后,定時檢測SIP處理模塊的狀態(tài),如果存在,就向服務(wù)器注冊。同時,對于已經(jīng)注冊的SIP模塊,如果不存在,就向服務(wù)器取消注冊。
在注冊時,把本端IP地址(192.168.1.1),本端端口后(5060),用戶名(Telsa),用戶密碼(1234),本端用戶電話號碼(9001),Asterisk服務(wù)器的 IP 地址(192.168.1.2),端口號(5060)發(fā)送到Asterisk服務(wù)器。
在收到200OK消息后,表示注冊成功。
此時,用戶Telsa狀態(tài)為注冊狀態(tài)。
(2)用戶摘記撥號的處理流程。
Telsa用戶9001,撥打Marchi用戶9002。
用 戶 摘 記,聽 撥 號 音,撥 號 碼“9002”;經(jīng)Asterisk 服務(wù)器,發(fā)送“INVITE”消息到 “9002”用戶Marchi。
此時,用戶Telsa狀態(tài)由注冊狀態(tài)遷移到撥號狀態(tài)。
(3)用 戶Marchi此 時 空 閑,振 鈴,發(fā) 送180Ringing到Telsa用戶。
此時,用戶Telsa狀態(tài)由撥號狀態(tài)遷移到振鈴狀態(tài)
(4)用戶通話的處理流程。
被叫Marchi摘記,向主叫Telsa,發(fā)送200OK,主叫發(fā)送“ACK”消息到Marchi用戶。
此時,用戶Telsa狀態(tài)由振鈴狀態(tài)遷移到通話狀態(tài)
(5)被叫Marchi掛機(jī),向主叫Telsa發(fā)送“BYE”消息,主叫向被叫發(fā)送“200OK”消息
此時,用戶Telsa狀態(tài)由通話狀態(tài)遷移到注冊狀態(tài)。即原始空閑狀態(tài)。
所有的狀態(tài)在超時后,都回到原始空閑狀態(tài)。即注冊狀態(tài)。
如果檢測不到用戶Telsa,則向Asterisk發(fā)送消息,取消用戶Telsa注冊狀態(tài)。
PSTN呼叫處理模塊采用狀態(tài)機(jī)的方法處理號碼接受和發(fā)送呼叫,同時處理SIP的呼叫狀態(tài)遷移。