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

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