sip編程開發(fā)基礎入門_第1頁
sip編程開發(fā)基礎入門_第2頁
sip編程開發(fā)基礎入門_第3頁
sip編程開發(fā)基礎入門_第4頁
sip編程開發(fā)基礎入門_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

sip編程開發(fā)基礎入門sip編程開發(fā)基礎入門sip編程開發(fā)基礎入門xxx公司sip編程開發(fā)基礎入門文件編號:文件日期:修訂次數(shù):第1.0次更改批準審核制定方案設計,管理制度最近在學習SIP協(xié)議的相關(guān)知識,于是上網(wǎng)搜集了部分內(nèi)容,主要包括SIP協(xié)議的概要介紹,SIP所涉及到得相關(guān)協(xié)議,SIP開源軟件介紹,SIP基礎編程范例。SIP協(xié)議全方位概要介紹轉(zhuǎn)載自:

出處:中國電信摘要:SIP協(xié)議是NGN中的重要協(xié)議,越來越得到業(yè)界的重視。本文通過SIP協(xié)議的背景、功能、網(wǎng)絡元素、實現(xiàn)機制、以及SIP消息的組成等幾個方面對SIP協(xié)議做了全方位的概要性介紹,以使讀者對SIP有初步的概念和認識。

一、SIP協(xié)議的背景和功能

SIP(會話初始協(xié)議)的開發(fā)目的是用來幫助提供跨越因特網(wǎng)的高級電話業(yè)務。因特網(wǎng)電話(IP電話)正在向一種正式的商業(yè)電話模式演進,SIP就是用來確保這種演進實現(xiàn)而需要的NGN(下一代網(wǎng)絡)系列協(xié)議中重要的一員。

SIP是IETF標準進程的一部分,它是在諸如SMTP(簡單郵件傳送協(xié)議)和HTTP(超文本傳送協(xié)議)基礎之上建立起來的。它用來建立,改變和終止基于IP網(wǎng)絡的用戶間的呼叫。為了提供電話業(yè)務它還需要結(jié)合不同的標準和協(xié)議:特別是需要確保傳輸(RTP),與當前電話網(wǎng)絡的信令互連,能夠確保語音質(zhì)量(RSVP),能夠提供目錄(LDAP),能夠鑒權(quán)用戶(RADIUS)等等。

SIP被描述為用來生成,修改和終結(jié)一個或多個參與者之間的會話。這些會話包括因特網(wǎng)多媒體會議,因特網(wǎng)(或任何IP網(wǎng)絡)電話呼叫和多媒體發(fā)布。會話中的成員能夠通過多播或單播聯(lián)系的網(wǎng)絡來通信。SIP支持會話描述,它允許參與者在一組兼容媒體類型上達成一致。它同時通過代理和重定向請求到用戶當前位置來支持用戶移動性。SIP不與任何特定的會議控制協(xié)議捆綁。

本質(zhì)上,SIP提供以下功能:

名字翻譯和用戶定位:無論被呼叫方在哪里都確保呼叫達到被叫方。執(zhí)行任何描述信息到定位信息的映射。確保呼叫(會話)的本質(zhì)細節(jié)被支持。

特征協(xié)商:它允許與呼叫有關(guān)的組(這可以是多方呼叫)在支持的特征上達成一致(注意:不是所有方都能夠支持相同級別的特征)。例如視頻可以或不可以被支持??傊嬖诤芏嘈枰獏f(xié)商的范圍。

呼叫參與者管理:呼叫中參與者能夠引入其它用戶加入呼叫或取消到其它用戶的連接。此外,用戶可以被轉(zhuǎn)移或置為呼叫保持。

呼叫特征改變:用戶應該能夠改變呼叫過程中的呼叫特征。例如,一呼叫可以被設置為“voice-only”,但是在呼叫過程中,用戶可以需要開啟視頻功能。也就是說一個加入呼叫的第三方為了加入該呼叫可以開啟不同的特征。

二、SIP網(wǎng)絡元素

SIP中有兩個要素。SIP用戶代理和SIP網(wǎng)絡服務器。用戶代理是呼叫的終端系統(tǒng)元素,而SIP服務器是處理與多個呼叫相關(guān)聯(lián)信令的網(wǎng)絡設備。

用戶代理本身具有一客戶機元素(用戶代理客戶機UAC)和一服務器元素(用戶代理服務器UAS)??蛻魴C元素初始呼叫而服務器元素應答呼叫。這允許點到點的呼叫通過客戶機-服務器協(xié)議來完成。

SIP服務器元素提供多種類型的服務器。有三種服務器形式存在于網(wǎng)絡中--SIP有狀態(tài)代理服務器,SIP無狀態(tài)代理服務器和SIP重定向服務器。由于呼叫者未必知道被呼叫方的IP地址或主機名,SIP服務器的主要功能是提供名字解析和用戶定位??梢垣@得的是email形式的地址或與被呼叫方關(guān)聯(lián)的電話號碼。使用該信息,呼叫者的用戶代理能夠確定特定服務器來解析地址信息--這可能涉及網(wǎng)絡中很多服務器。

SIP代理服務器接收請求,決定將這些請求傳送到何處,并且將它們傳送到下一服務器(使用下一跳路由原理)。在網(wǎng)絡中可以有多跳。

有狀態(tài)和無狀態(tài)代理服務器的區(qū)別是有狀態(tài)代理服務器記住它接收的入請求,以及回送的響應和它轉(zhuǎn)送的出請求。無狀態(tài)代理服務器一旦轉(zhuǎn)送請求后就忘記所有的信息。這允許有狀態(tài)代理服務器生成請求以并行地嘗試多個可能的用戶位置并且送回最好的響應。無狀態(tài)代理服務器可能是最快的,并且是SIP結(jié)構(gòu)的骨干。有狀態(tài)代理服務器可能是離用戶代理最近的本地設備,它控制用戶域并且是應用服務的主要平臺。

重定向服務器接收請求,但不是將這些請求傳遞給下一服務器而是向呼叫者發(fā)送響應以指示被呼叫用戶的地址。這使得呼叫者可以直接聯(lián)系在下一服務器上被呼叫方的地址。

三、SIP協(xié)議的實現(xiàn)機制

SIP是一個分層結(jié)構(gòu)的協(xié)議,這意味著它的行為根據(jù)一組平等獨立的處理階段來描述,每一階段之間只是松耦合。協(xié)議分層描述是為了表達,從而允許功能的描述可在一個部分跨越幾個元素。它不指定任何方式的實現(xiàn)。當我們說某元素包含某層,我們是指它順從該層定義的規(guī)則集。

不是協(xié)議規(guī)定的每個元素都包含各層。而且,由SIP規(guī)定的元素是邏輯元素,不是物理元素。一個物理實現(xiàn)可以選擇作為不同的邏輯元素,甚至可能在一個個事務的基礎上。

SIP的最底層是語法和編碼。它的編碼使用增強Backus-Nayr形式語法(BNF)來規(guī)定。

第二層是傳輸層。它定義了網(wǎng)絡上一個客戶機如何發(fā)送請求和接收響應以及一個服務器如何接收請求和發(fā)送響應。所有的SIP元素包含傳輸層。

第三層是事務層。事務是SIP的基本元素。一個事務是由客戶機事務發(fā)送給服務器事務的請求(使用傳輸層),以及對應該請求的從服務器事務發(fā)送回客戶機的所有響應組成。事務層處理應用層重傳,匹配響應到請求,以及應用層超時。任何用戶代理客戶機(UAC)完成的任務使用一組事務產(chǎn)生。用戶代理包含一個事務層,有狀態(tài)的代理也有。無狀態(tài)的代理不包含事務層。事務層具有客戶機組成部分(稱為客戶機事務)和服務器組成部分(稱為服務器事務),每個代表有限的狀態(tài)機,它被構(gòu)造來處理特定的請求。

事務層之上的層稱為事務用戶(TU)。每個SIP實體,除了無狀態(tài)代理,都是事務用戶。當一個TU希望發(fā)送請求,它生成一個客戶機事務實例并且向它傳遞請求和IP地址,端口,和用來發(fā)送請求的傳輸機制。一個TU生成客戶機事務也能夠刪除它。當客戶機取消一個事務時,它請求服務器停止進一步的處理,將狀態(tài)恢復到事務初始化之前,并且生成特定的錯誤響應到該事務。這由CANCEL請求完成,它構(gòu)成自己的事務,但涉及要取消的事務。

SIP通過EMAIL形式的地址來標明用戶地址。每一用戶通過一等級化的URL來標識,它通過諸如用戶電話號碼或主機名等元素來構(gòu)造(例如:SIP:)。因為它與EMAIL地址的相似性,SIPURLs容易于用戶的EMAIL地址關(guān)聯(lián)。

SIP提供它自己的可靠性機制從而獨立于分組層,并且只需不可靠的數(shù)據(jù)包服務即可。SIP可典型地用于UDP或TCP之上。

SIP提供必要的協(xié)議機制以保證終端系統(tǒng)和代理服務器提供以下業(yè)務:

●用戶定位

●用戶能力

●用戶可用性

●呼叫建立

●呼叫處理

●呼叫前轉(zhuǎn),包括:(1)等效800類型的呼叫,(2)無應答呼叫前轉(zhuǎn),(3)遇忙呼叫前轉(zhuǎn),(4)無條件呼叫前轉(zhuǎn)

●呼叫號碼傳遞,該號碼可以是任何命名機制。

●個人移動性,例如通過一個單一的、位置無關(guān)的地址來到達被呼叫方,即使被呼叫方改變了終端。

●終端類型的協(xié)商和選擇:呼叫者可以給出選擇如何到達對方,例如通過因特網(wǎng)電話,移動電話或應答業(yè)務等。

●終端能力協(xié)商

●呼叫者和被呼叫者鑒權(quán)

●不知情和指導式的呼叫轉(zhuǎn)移

●多播會議的邀請

當一用戶希望呼叫另一用戶,呼叫者用INVITE請求初始呼叫,請求包含足夠的信息用以被呼叫方參與會話。如果客戶機知道另一方的位置它能夠直接將請求發(fā)送到另一方的IP地址。如果不知道,客戶機將請求發(fā)送到本地配置的SIP網(wǎng)絡服務器。如果服務器是代理服務器它將解析被呼叫用戶的位置并且將請求發(fā)送給它們。有很多方法完成上步,例如搜索DNS或訪問數(shù)據(jù)庫。服務器也可以是重定向服務器,它可以返回被呼叫用戶的位置到呼叫客戶機用以它直接與用戶聯(lián)系。在定位用戶的過程中,SIP網(wǎng)絡服務器當然能夠代理或重定向呼叫到其它的服務器,直到到達一個明確地知道被呼叫用戶IP地址的服務器。

一旦發(fā)現(xiàn)用戶地址,請求就發(fā)送給該用戶,此時將產(chǎn)生幾種選擇。在最簡單的情況,用戶電話客戶機接收請求——也就是,用戶的電話振鈴。如果用戶接受呼叫,客戶機用客戶機軟件的指定能力響應請求并且建立連接。如果用戶拒絕呼叫,會話將被重定向到語音郵箱服務器或另一用戶?!爸付芰Α眳⒄沼脩粝雴⒂玫墓δ?。例如,客戶機軟件可以支持視頻會議,但用戶只想使用音頻會議,那則只會啟用音頻功能。

SIP還具有另外兩個有重要意義的特征。第一個是有狀態(tài)SIP代理服務器具有分割入呼叫或復制入呼叫的能力,從而可以同時運行幾個擴展分支。第一個應答的分支接受呼叫。該特征在用戶工作在兩位置之間(例如實驗室和辦公室)或者同時對經(jīng)理和其秘書振鈴時是非常便利的。

第二個特征是SIP獨特的返回不同媒體類型的能力。舉個用戶聯(lián)系公司的例子。當SIP服務器接收到客戶機的連接請求,它能夠通過WEB交互式語音響應頁面來返回到顧客的客戶機,該頁面具有可獲得的部門分支或提供在列表上的用戶。點擊適當?shù)逆溄雍髮l(fā)送一請求到所點擊選擇的用戶從而建立起呼叫。

四、SIP消息的組成

有兩種類型的SIP消息:

●請求:從客戶機發(fā)到服務器

●響應:從服務器發(fā)到客戶機

SIP請求消息包含三個元素:請求行、頭、消息體。

SIP響應消息包含三個元素:狀態(tài)行、頭、消息體。

請求行和頭域根據(jù)業(yè)務、地址和協(xié)議特征定義了呼叫的本質(zhì),消息體獨立于SIP協(xié)議并且可包含任何內(nèi)容。

SIP定義了下述方法:

INVITE——邀請用戶加入呼叫。

BYE——終止一呼叫上的兩個用戶之間的呼叫。

OPTIONS——請求關(guān)于服務器能力的信息。

ACK——確認客戶機已經(jīng)接收到對INVITE的最終響應。

REGISTER——提供地址解析的映射,讓服務器知道其它用戶的位置。

INFO——用于會話中信令。

五、結(jié)束語

SIP協(xié)議憑借其簡單、易于擴展、便于實現(xiàn)等諸多優(yōu)點越來越得到業(yè)界的青睞,它正逐步成為NGN(下一代網(wǎng)絡)和3G多媒體子系統(tǒng)域中的重要協(xié)議,并且市場上出現(xiàn)越來越多的支持SIP的客戶端軟件和智能多媒體終端,以及用SIP協(xié)議實現(xiàn)的服務器和軟交換設備。雖然SIP協(xié)議目前還不成熟,但可以預見SIP必定是將來網(wǎng)絡多媒體通信中的明星。SIP開源軟件介紹要在windows或者linux平臺下開發(fā)基于SIP的軟電話,需要以下軟件服務器端軟件:注冊多個客戶端到服務器上,可以進行通話測試SIP客戶端軟件:主要用于測試,可以對別人已經(jīng)完成的客戶端進行抓包,以比對自己程序的發(fā)包數(shù)據(jù)SIP協(xié)議棧:基于某個現(xiàn)成的SIP協(xié)議棧來開發(fā)會加快開發(fā)進度RTP棧:傳輸語言或者視頻數(shù)據(jù)的協(xié)議棧抓包測試工具:調(diào)試網(wǎng)絡程序最有效的辦法以下介紹這些軟件主要以開源軟件為主一服務器端軟件1.Asterisk:Linux系統(tǒng)下開源的IPPBX,功能強大穩(wěn)定,主要用c語言開發(fā)。配置稍麻煩。2.Vocal:Linux系統(tǒng)下開源的SIP服務器端??梢宰鳛镮PPBX也可以作為運營系統(tǒng)。很多voip虛擬運營商都用這個作為自己的運營系統(tǒng)。提供BS結(jié)構(gòu)的管理界面。3.YATE:跨平臺(Linux,Windows)的開源SIP服務器端。在windows下安裝非常簡單。其他方面沒有進行過測試。4.SER:Linux平臺下重量級的SIP服務器斷。功能比較豐富,也是很多voip虛擬運營商的系統(tǒng)選擇。不過據(jù)說配置比較麻煩,具體沒有試過。5.sipX:Linux平臺下的SIP服務器。這個好像不能作為客戶端再次注冊到其他SIP服務器上。提供BS結(jié)構(gòu)的管理界面。二SIP客戶端軟件1.WindowsMessenger:微軟出的SIP客戶端,操作方便。2.YATEClient:跨平臺(Linux,Windows)的開源SIP客戶端軟件。安裝方便,功能簡單。3.xten:windows平臺下的SIP軟電話。功能齊全,使用方便。三SIP協(xié)議棧1.osip:跨平臺的開源SIP協(xié)議棧。用c語言實現(xiàn),體積小。2.exosip:對osip進行封裝,使其方便SIP客戶端軟件開發(fā)。同樣開源跨平臺。3.sipXtackLib:由SIPfoundry提供的開源跨平臺的SIP協(xié)議棧,功能齊全。C++開發(fā),已經(jīng)被用于開發(fā)數(shù)個商業(yè)SIP終端。四RTP棧1.JRTPLIB:開源的跨平臺rtp棧,用C++語言開發(fā),使用方便。五抓包測試工具1.Wireshark:非常有名的開源跨平臺網(wǎng)絡抓包工具,以前叫做Ethereal。幾種開源SIP協(xié)議棧對比隨著VoIP和NGN技術(shù)的發(fā)展,時代即將過渡到SIP時代,在的開源協(xié)議棧中,Openh323占統(tǒng)治地位,它把一個復雜而又先進的協(xié)議棧展現(xiàn)在普通程序員的眼前,為普及立下了汗馬功勞。而然當在SIP時代,則出現(xiàn)了群雄割據(jù)的狀況,SIP相對于簡單,靈活,于是各種協(xié)議棧層出不窮,下面將詳細對比最具有代表性的5個開源項目:OPAL,VOCAL,sipX,ReSIProcate,oSIPOPAL是OpenPhoneAbstractionLibrary,是Openh323的下一個版本,它仍然使用了Openh323的體系結(jié)構(gòu),并在其基礎上進行擴展,同時實現(xiàn)了SIP,,但在音頻和視頻的編碼和傳輸部分有較大改動。OPAL初衷設計是包含任何電話通信協(xié)議,所以其底層進行了高度的抽象化,所以也能夠很容易的支持MGCP,PSTN和將來會出現(xiàn)的協(xié)議。不過由于Openh323的最后一個版本還在開發(fā)中,所以原本6月發(fā)布的OPAL也被推遲,現(xiàn)有的OPAL還非常不完善,BUG也非常多,不過相信以Openh323的開發(fā)班底,一定能讓OPAL十分優(yōu)秀。CVS:/cvsroot/openh323/opalLanguage:C++VxWorksport:YesWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:NoSupportsRFC3515:YesSupportsRFC3262:NoSupportsRFC3311:NoTCP:YesUDP:YesSIZE:8MBLicense:MPLDocument:NoneSamples:UA,GKVOCAL是開發(fā)的SIP系統(tǒng),VOCAL應該是目前功能最完善,使用者最多的開源SIP協(xié)議棧了.它不只包括了協(xié)議棧,還包括了h323與sip轉(zhuǎn)換網(wǎng)關(guān),對SIP的各種Server的功能支持也非常完善.不過很可惜,不支持windows平臺,而且自從vovida被CISCO收購以后就停止了開發(fā),最后的版本是2003年4月的。CVS:/cvsroot/vocalLanguage:C++VxWorksport:NoWin32port:PartialLinuxport:YesSupportsRFC3261:PartialSupportsRFC2327:YesSupportsRFC3264:SupportsRFC3263:SupportsRFC3515:YesSupportsRFC3262:SupportsRFC3311:TCP:YesUDP:YesSIZE:6MBLicense:VovidasoftwarelicencseDocument:FewSamples:UA,GK,GWsipX是一個SIP系統(tǒng),由SIPFoundry開發(fā)。sipX是從reSIProcate分離出來的,sipX除了包括SIPstack外,還包括了sipXphone,sipXproxy,sipXregistry等等...,由它們構(gòu)成了完整的SIP系統(tǒng),而且sipx還支持嵌入式系統(tǒng),各個模塊可以按需取舍。不過可惜是幾乎沒有任何開發(fā)文檔。SVN:Language:C++VxWorksport:YesWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:YesSupportsRFC3515:YesSupportsRFC3262:NoSupportsRFC3311:NoTCP:YesUDP:YesSIZE:<4MbLicense:LGPLDocument:NoneSamples:UA,GK,GWReSIProcate同樣也是由SIPFoundry開發(fā),ReSIProcate最開始起源于Vocal,由于Vocal開始只支持rfc3254,為了支持最新的rfc3261,ReSIProcate誕生了,但現(xiàn)在,ReSIProcate已經(jīng)成為一個獨立SIP協(xié)議棧了,它十分穩(wěn)定,并且很多商業(yè)程序都在使用。SVN:Language:C++VxWorksport:NoWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:PartialSupportsRFC3515:YesSupportsRFC3262:NoSupportsRFC3311:NoTCP:YesUDP:YesSIZE:<MbLicense:VovidaDocument:FewSamples:NoneoSIP的開發(fā)開始于2000年7月,第一個版本在2001年5月發(fā)布,到現(xiàn)在已經(jīng)發(fā)展到了。它采用ANSIC編寫,而且結(jié)構(gòu)簡單小巧,所以速度特別快,它并不提供高層的SIP會話控制API,它主要提供一些解析SIP/SDP消息的API和事務處理的狀態(tài)機,oSIP的作者還開發(fā)了基于oSIP的UAlib:exosip和proxyserverlib:partysip.CVS:/cvsroot/osipLanguage:CVxWorksport:YesWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:YesSupportsRFC3515:NoSupportsRFC3262:NoSupportsRFC3311:YesTCP:YesUDP:YesSIZE:400kbLicense:LGPLSamples:UA,GK綜合上述評測,可以看出5種SIP協(xié)議棧各有千秋,OPAL有發(fā)展?jié)摿?,VOCAL比較完善,sipX兼容性好,ReSIProcate教穩(wěn)定,oSIP小巧而快速。所以要根據(jù)應用的不同選擇恰當?shù)膮f(xié)議棧進行研究開發(fā)要在windows或者linux平臺下開發(fā)基于SIP的軟電話,需要以下軟件服務器端軟件:注冊多個客戶端到服務器上,可以進行通話測試SIP客戶端軟件:主要用于測試,可以對別人已經(jīng)完成的客戶端進行抓包,以比對自己程序的發(fā)包數(shù)據(jù)SIP協(xié)議棧:基于某個現(xiàn)成的SIP協(xié)議棧來開發(fā)會加快開發(fā)進度RTP棧:傳輸語言或者視頻數(shù)據(jù)的協(xié)議棧抓包測試工具:調(diào)試網(wǎng)絡程序最有效的辦法以下介紹這些軟件主要以開源軟件為主一服務器端軟件1.Asterisk:Linux系統(tǒng)下開源的IPPBX,功能強大穩(wěn)定,主要用c語言開發(fā)。配置稍麻煩。2.Vocal:Linux系統(tǒng)下開源的SIP服務器端??梢宰鳛镮PPBX也可以作為運營系統(tǒng)。很多voip虛擬運營商都用這個作為自己的運營系統(tǒng)。提供BS結(jié)構(gòu)的管理界面。3.YATE:跨平臺(Linux,Windows)的開源SIP服務器端。在windows下安裝非常簡單。其他方面沒有進行過測試。4.SER:Linux平臺下重量級的SIP服務器斷。功能比較豐富,也是很多voip虛擬運營商的系統(tǒng)選擇。不過據(jù)說配置比較麻煩,具體沒有試過。5.sipX:Linux平臺下的SIP服務器。這個好像不能作為客戶端再次注冊到其他SIP服務器上。提供BS結(jié)構(gòu)的管理界面。二SIP客戶端軟件1.WindowsMessenger:微軟出的SIP客戶端,操作方便。2.YATEClient:跨平臺(Linux,Windows)的開源SIP客戶端軟件。安裝方便,功能簡單。3.xten:windows平臺下的SIP軟電話。功能齊全,使用方便。三SIP協(xié)議棧1.osip:跨平臺的開源SIP協(xié)議棧。用c語言實現(xiàn),體積小。2.exosip:對osip進行封裝,使其方便SIP客戶端軟件開發(fā)。同樣開源跨平臺。3.sipXtackLib:由SIPfoundry提供的開源跨平臺的SIP協(xié)議棧,功能齊全。C++開發(fā),已經(jīng)被用于開發(fā)數(shù)個商業(yè)SIP終端。四RTP棧1.JRTPLIB:開源的跨平臺rtp棧,用C++語言開發(fā),使用方便。五抓包測試工具1.Wireshark:非常有名的開源跨平臺網(wǎng)絡抓包工具,以前叫做Ethereal。幾種開源SIP協(xié)議棧對比隨著VoIP和NGN技術(shù)的發(fā)展,時代即將過渡到SIP時代,在的開源協(xié)議棧中,Openh323占統(tǒng)治地位,它把一個復雜而又先進的協(xié)議棧展現(xiàn)在普通程序員的眼前,為普及立下了汗馬功勞。而然當在SIP時代,則出現(xiàn)了群雄割據(jù)的狀況,SIP相對于簡單,靈活,于是各種協(xié)議棧層出不窮,下面將詳細對比最具有代表性的5個開源項目:OPAL,VOCAL,sipX,ReSIProcate,oSIPOPAL是OpenPhoneAbstractionLibrary,是Openh323的下一個版本,它仍然使用了Openh323的體系結(jié)構(gòu),并在其基礎上進行擴展,同時實現(xiàn)了SIP,,但在音頻和視頻的編碼和傳輸部分有較大改動。OPAL初衷設計是包含任何電話通信協(xié)議,所以其底層進行了高度的抽象化,所以也能夠很容易的支持MGCP,PSTN和將來會出現(xiàn)的協(xié)議。不過由于Openh323的最后一個版本還在開發(fā)中,所以原本6月發(fā)布的OPAL也被推遲,現(xiàn)有的OPAL還非常不完善,BUG也非常多,不過相信以Openh323的開發(fā)班底,一定能讓OPAL十分優(yōu)秀。CVS:/cvsroot/openh323/opalLanguage:C++VxWorksport:YesWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:NoSupportsRFC3515:YesSupportsRFC3262:NoSupportsRFC3311:NoTCP:YesUDP:YesSIZE:8MBLicense:MPLDocument:NoneSamples:UA,GKVOCAL是開發(fā)的SIP系統(tǒng),VOCAL應該是目前功能最完善,使用者最多的開源SIP協(xié)議棧了.它不只包括了協(xié)議棧,還包括了h323與sip轉(zhuǎn)換網(wǎng)關(guān),對SIP的各種Server的功能支持也非常完善.不過很可惜,不支持windows平臺,而且自從vovida被CISCO收購以后就停止了開發(fā),最后的版本是2003年4月的。CVS:/cvsroot/vocalLanguage:C++VxWorksport:NoWin32port:PartialLinuxport:YesSupportsRFC3261:PartialSupportsRFC2327:YesSupportsRFC3264:SupportsRFC3263:SupportsRFC3515:YesSupportsRFC3262:SupportsRFC3311:TCP:YesUDP:YesSIZE:6MBLicense:VovidasoftwarelicencseDocument:FewSamples:UA,GK,GWsipX是一個SIP系統(tǒng),由SIPFoundry開發(fā)。sipX是從reSIProcate分離出來的,sipX除了包括SIPstack外,還包括了sipXphone,sipXproxy,sipXregistry等等...,由它們構(gòu)成了完整的SIP系統(tǒng),而且sipx還支持嵌入式系統(tǒng),各個模塊可以按需取舍。不過可惜是幾乎沒有任何開發(fā)文檔。SVN:Language:C++VxWorksport:YesWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:YesSupportsRFC3515:YesSupportsRFC3262:NoSupportsRFC3311:NoTCP:YesUDP:YesSIZE:<4MbLicense:LGPLDocument:NoneSamples:UA,GK,GWReSIProcate同樣也是由SIPFoundry開發(fā),ReSIProcate最開始起源于Vocal,由于Vocal開始只支持rfc3254,為了支持最新的rfc3261,ReSIProcate誕生了,但現(xiàn)在,ReSIProcate已經(jīng)成為一個獨立SIP協(xié)議棧了,它十分穩(wěn)定,并且很多商業(yè)程序都在使用。SVN:Language:C++VxWorksport:NoWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:PartialSupportsRFC3515:YesSupportsRFC3262:NoSupportsRFC3311:NoTCP:YesUDP:YesSIZE:<MbLicense:VovidaDocument:FewSamples:NoneoSIP的開發(fā)開始于2000年7月,第一個版本在2001年5月發(fā)布,到現(xiàn)在已經(jīng)發(fā)展到了。它采用ANSIC編寫,而且結(jié)構(gòu)簡單小巧,所以速度特別快,它并不提供高層的SIP會話控制API,它主要提供一些解析SIP/SDP消息的API和事務處理的狀態(tài)機,oSIP的作者還開發(fā)了基于oSIP的UAlib:exosip和proxyserverlib:partysip.CVS:/cvsroot/osipLanguage:CVxWorksport:YesWin32port:YesLinuxport:YesSupportsRFC3261:YesSupportsRFC2327:YesSupportsRFC3264:YesSupportsRFC3263:YesSupportsRFC3515:NoSupportsRFC3262:NoSupportsRFC3311:YesTCP:YesUDP:YesSIZE:400kbLicense:LGPLSamples:UA,GK綜合上述評測,可以看出5種SIP協(xié)議棧各有千秋,OPAL有發(fā)展?jié)摿?,VOCAL比較完善,sipX兼容性好,ReSIProcate教穩(wěn)定,oSIP小巧而快速。所以要根據(jù)應用的不同選擇恰當?shù)膮f(xié)議棧進行研究開發(fā)。。

SIP所涉及到得相關(guān)協(xié)議SIP標準RFC3261:SessionInitiationProtocolRFC3262:ReliabilityofProvisionalResponsesinSIPRFC3263:SIP:LocatingSIPServersRFC3264:AnOfferAnswerModelwithSessionDescriptionRFC3265:SIP-SpecificEventNotificationRFC3311:TheSIPUPDATEMethodRFC3312:IntegrationofResourceManagementandSIPRFC3313:PrivateSessionInitiationProtocol(SIP)ExtensionsforMediaAuthorizationRFC3323:APrivacymechanismfortheSessionInitiationProtocolRFC3325:PrivateExtensionstotheSessionInitiationProtocol(SIP)forAssertedIdentitywithTrustedNetworksRFC3326:TheReasonHeaderfortheSessionInitiationProtocolRFC3327:SessionInitiationProtocol(SIP)ExtensionHeaderFieldforRegisteringNon-AdjacentContactsRFC3329:SecurityMechanismAgreementfortheSIPRFC3372:SIPforTelephones(SIP-T):ContextandArchitecturesRFC3428:SIPExtensionsforInstantMessagingRFC3486:CompressingtheSessionInitiationProtocol(SIP)RFC3515:TheREFERMethodRFC3608:SessionInitiationProtocol(SIP)ExtensionHeaderFieldforServiceRouteDiscoveryDuringRegistrationRFC2806:URLsforTelephoneCallsRFC2848:PINT-IPAccesstoTelephoneCallServicesRFC2915:TheNAPTRDNSResourceRecordRFC2976:TheSIPINFOMethodRFC3204:MIMEmediatypesforISUPandQSIGObjectsdraft-ieft-sipping-e164-02:UsingENUMforSIPApplicationdraft-ieft-sipping-cc-transfer-05:CallTransferdraft-ieft-sip-referredby-00:TheReferred-ByMechansimdraft-ieft-sip-replaces-03:TheSIPReplacesHeaderdraft-ietf-session-timer-10:TheSIPSessionTimerdraft-ietf-sipping-3gpp-r5-requirements-00:3rdGenerationPartnershipProject(3GPP)Release5requirementsontheSessionInitiationProtocoldraft-ietf-sip-nat-02:AnExtensiontotheSessionInitiationProtocolforSysmmetricResponseRouting:AMessageSummaryandMessageWaitingIndicationEventPackagefortheSessionInitiationProtocol.draft-ietf-simple-presence-10:SIP

ExtensionsforPresencedraft-ieft-simple-im-sdp-00:SIP-SDPExtensionsforSIPInstantMessageSessionsITU-TRecommendation:Proceduresforreal-timeGroup3facsimilecommunicationoverIPnetworksdraft-yu-tel-trl-07:ExtensiontoTelURLtosupportNumberPortabiltiyandFreephoneServicedraft-ietf-mmusic-sdp-qos-00:EstablishingQOSandSecurityPreconditionsforSDPsessionsSIP相關(guān)協(xié)議RFC1006:ISOtransportservicesontopoftheTCPVersion3RFC2030:SimpleNetworkTimeProtocol(SNTP)Version4forIPv4,IPv6andOSIRFC2246:TheTLSProtocolVersionRFC2327:SDPSessionDescriptionProtocolRFC3024:MIMEmediatypesofISUPandQSIGObjects

SIP學習入門范例(1)學習SIP協(xié)議最快捷的方法是通過范例來學習,因此我從UnderstandSIP上找了4個最簡單呼叫過程來分析。通過對這些流程圖以及每個呼叫所包含的消息體文本分析,盡快熟悉SIP呼叫原理。PS.如果有什么地方說明不妥,請告訴我一、基本SIP會話建立范例下面的流程圖顯示出最簡單的SIP呼叫流程。它由兩個呼叫終端組成(其實真正的系統(tǒng)并沒有這么簡單),呼叫終端可以為SIP電話機或者具備SIP功能的手機等終端設備。在這里我們假設它是能夠連接到IP網(wǎng)的終端設備,并且它們已經(jīng)知道對方的IP地址。PS.因為這是第一節(jié),每個字段我們講得會比較詳細,后面章節(jié)如何字段意義差不多,我們將會省略。對于某些常用的,有重要意義的字段,我們還將在專門的地方說明。INVITE主叫方Tesla首先發(fā)起INVITE消息到被叫方Marconi。INVITE消息包含會話類型和一些呼叫所必須的參數(shù)。會話類型可能是單純的語音,也可能是網(wǎng)絡會議所用的多媒體視頻,還可能是游戲會話。下面是消息體范例,我們來詳細分析各個字段的意義:INVITESIP/

<=

請求方法、請求地址(Request-URI)、SIP版本號(目前都是SIP/)

<=請求地址一般就是被叫方地址,跟MSN中好友eMail地址類似

Via:SIP/UDP

<=SIP版本號()、傳輸類型(UDP)、呼叫地址、

<=branch是一隨機碼,它被看作傳輸標識

<=Via字段中地址是消息發(fā)送方或代理轉(zhuǎn)發(fā)方設備地址,一般由主機地址和端口號組成

<=傳輸類型可以為UDP、TCP、TLS、SCTP

Max-Forwards:70

<=最大跳躍數(shù),就是經(jīng)過SIP服務器的跳躍次數(shù),主要是防止循環(huán)跳躍

<=每盡管一臺代理服務器,該整數(shù)減一

To:G.Marconi>

From:NikolaTesla>;tag=76341

<=表示請求消息的發(fā)送方和目標方

<=如果里面有用戶名標簽,地址要求用尖括號包起來

<=對于INVITE消息,可以在From字段中包含tag,它也是個隨機碼

Call-ID:

<=呼叫ID是由本地設備生成的,全局唯一值。每次呼叫該值唯一不變

<=對于用戶代理發(fā)送INVITE消息,本地將生成Fromtag和Call-ID全局唯一碼,被叫方代理則生成Totag全局唯一碼。這三個隨機碼做為整個對話中對話標識(dialogindentifier)在通話雙方使用。

CSeq:1INVITE

<=CSeq,又叫命令隊列(CommandSeqence),每發(fā)送一個新的請求,該數(shù)自動加1

*

以上幾個字段是所有SIP消息體所必須的,其它頭字段有些是可選的,有些在特定請求也是必須

Subject:AboutThatPowerOutage...

Contact>

<=Contact是INVITE消息所必須的,它用來路由到被叫設備地址,也稱為用戶代理(UA)

Content-Type:application/sdp

Content-Length:158

<=最后兩位附屬字段說明消息體類型以及字段長度v=0

<=SDP版本號,目前都是0

o=Tesla262890844526INIP4

<=主叫源地址,類型等

s=PhoneCall

<=主題

c=INIP4

<=連接

t=00

<=時間戳

m=audio49170RTP/AVP0

<=媒體

a=rtpmap:0PCMU/8000

<=媒體屬性

<=從上面SDP消息體我們可以得出下面信息

<=連接IP地址:

<=媒體格式:audio

<=端口號:49170

<=媒體傳輸類型:RTP

<=媒體編碼:PCMuLaw

<=采樣率:8000Hz180Ringing當被叫方接收到INVITE請求消息后,將回復180Ringing。顧名思義,就是發(fā)回鈴音,提示主叫方電話已連接上了,正等待被叫應答。被叫方接收到INVITE消息后也會發(fā)生響鈴或者其它有呼入提示,這由被叫方設定(我們可以把它想象成我們自己設定手機鈴聲)。對于180響應又被稱為“消息及時響應”,它是一種用來測試被叫狀態(tài)的一種響應。因此它所包含的信息不多,具體180響應消息如下:SIP/180Ringing

Via:SIP/UDP

;received=

<=這里增加一個received參數(shù),標識接收方IP地址

To:G.Marconi>;tag=a53e42

<=上已提到,Totag做為被叫方標識

From:NikolaTesla>;tag=76341

<=要求很發(fā)送方Fromtag一致

Call-ID:

CSeq:1INVITE

Contact>

Content-Length:0

<=對于180Ringing響應,基本上就是將INVITE的Via、To、From、Call-ID和CSeq內(nèi)容復制過來,對于首行標出SIP版本號,響應代碼(180)和動作原因(reasonphrase)

<=注意這里From和To地址,因為它們用來指定呼叫方向,因此這里的200OK響應并沒有將地址對調(diào),仍然保持原樣。一點不同的是To頭字段添加了由被叫方Marconi生成的tag標識200Ok被叫響鈴后,如果被叫用戶Marconi接起電話,則發(fā)出200OK響應。這個響應除了做為接通指示之外,還有一個功能是用來指定被叫允許的連接媒體格式,讓主叫方確認是否可以接收該媒體。

消息體如下:SIP/200OK

Via:SIP/UDP

;received=

To:G.Marconi>;tag=a53e42

From:NikolaTesla>;tag=76341

Call-ID:

CSeq:1INVITE

Contact>

Content-Type:application/sdp

Content-Length:155

<=頭字段部分基本同上

v=0

o=Marconi282890844528INIP4

s=PhoneCall

c=INIP4

t=00

m=audio60000RTP/AVP0

a=rtpmap:0PCMU/8000

<=從上面SDP消息體我們可以得出下面信息

<=終端IP地址:

<=媒體格式:audio

<=端口號:60000

<=媒體傳輸類型:RTP

<=媒體編碼:PCMuLaw

<=采樣率:8000HzACK通話前最后一步是主叫方確認200OK響應。該項確認證明連接被允許,即將使用另一種協(xié)議開始媒體連接。這另一種協(xié)議是上面在SDP消息段中所協(xié)商好的RTP格式。該ACK響應內(nèi)容如下:ACKSIP/

Via:SIP/UDP321g

Max-Forwards:70

To:G.Marconi>;tag=a53e42

From:NikolaTesla>;tag=76341

Call-ID:

CSeq:1ACK

Content-Length:0BYE通話完畢后,由被叫方Marconi首先掛機,發(fā)送BYE請求命令。注意這回由Marconi做為主叫方了,因此Via字段和From、To與INVITE字段有所不同。其實也就是倒置。BYESIP/

Via:SIP/UDP

Max-Forwards:70

To:NikolaTesla>;tag=76341

From:G.Marconi>;tag=a53e42

Call-ID:

CSeq:1BYE

Content-Length:0200OKBYE之后,要求被叫方發(fā)200Ok確認,也就是讓主叫知道被叫已經(jīng)知道你掛斷了。(注意這里所說的主被叫角色已經(jīng)倒過來了)打個比方,通話之后,有一方要求掛機,另一方需要知道它已經(jīng)掛機了。SIP/200OK

Via:SIP/UDP

;received=

To:NikolaTesla>;tag=76341

From:G.Marconi>;tag=a53e42

Call-ID:

CSeq:1BYE

Content-Length:0到此,我們已經(jīng)將最簡單的呼叫過程講完了。該過程簡單在于兩個終端之間沒有其它設備,完全的點對點連接,它們之間只需要知道對方IP地址即可?,F(xiàn)實生活中這種呼叫形式是很少見的。后面我們將繼續(xù)介紹另一種利用代理方式進行呼叫連接。留個疑問:為什么說這種點對點的方式比較少用

SIP學習入門范例(2)二、通過代理服務器的SIP呼叫在前面一個例子中,我們事先假設兩個終端知道對方IP地址。而在現(xiàn)實情況下,這種非常少見。因為IP地址不像是電話號碼,基本上每個人都是固定的,大多數(shù)情況,我們只知道被叫方名字,而并不知道對方在哪,也不知道對方終端的IP地址。因此今天,我們繼續(xù)介紹另一種呼叫方式,即通過代理服務器進行呼叫。通過代理服務器進行呼叫,和我們使用HTTP代理上網(wǎng)大同小異。我們這個例子,只有一個代理服務器。PS.因為這里有很多內(nèi)容和第一節(jié)相似,我們大量列舉內(nèi)容,只在個別地方說明M1:首先是主叫方Schroedinger發(fā)送Invite請求給代理服務器。INVITESIP/

<=對于基于代理服務器的呼叫連接,代理服務器要處理2部分內(nèi)容。"@"前的是用戶,后面是終端設備地址,需要DNS解析成標準IP地址。

Via:SIP/UDP:5060;branch=z9hG4bKmp17a

Max-Forwards:70

To:Heisenberg>

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1INVITE

Subject:Whereareyouexactly?

Contact>

Content-Type:application/sdp

Content-Length:159v=0

o=schroed5244262890844526INIP4

s=PhoneCall

t=00

c=INIP4102.103

49170RTP/AVP0

a=rtpmap:0PCMU/8000代理服務器在它的定位數(shù)據(jù)庫中查找SIP地址()。這里有兩個步驟:

1、首先UA查詢DNS,確定代理服務器位置;然后由代理服務器查詢定位被叫地址

2、代理服務器將Invite消息轉(zhuǎn)發(fā)到被叫地址,在Invite消息中增加第二Via字段M2:代理服務器轉(zhuǎn)發(fā)INVITE消息INVITEsip:@SIP/

Via:SIP/UDP

<=這里增加了個新Via,由代理服務器產(chǎn)生

Via:SIP/UDP:5060;branch=z9hG4bKmp17a

Max-Forwards:69

<=經(jīng)過一個跳躍,這里減1

To:Heisenberg>

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1INVITE

Contact>

Content-Type:application/sdp

Content-Length:159v=0

o=schroed5244262890844526INIP4

s=PhoneCall

c=INIP4

t=00

m=audio49172RTP/AVP0

a=rtpmap:0PCMU/8000M3:被叫放回鈴180RingingSIP/180Ringing

Via:SIP/UDP

;received=

Via:SIP/UDP:5060;branch=z9hG4bKmp17a

To:Heisenberg>;tag=314159

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1INVITE

Contact:<sip:@>

Content-Length:0M4:代理轉(zhuǎn)發(fā)180RingingSIP/180Ringing

Via:SIP/UDP:5060;branch=z9hG4bKmp17a

To:Heisenberg>;tag=314159

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1INVITE

Contact:<sip:@>

Content-Length:0M5:被叫接通電話,發(fā)200OKSIP/200OK

Via:SIP/UDP

;received=

Via:SIP/UDP:5060;branch=z9hG4bKmp17a

To:Heisenberg>;tag=314159

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1INVITE

Contact:<sip:@>

Content-Type:application/sdp

Content-Length:159v=0

o=heisenberg262890844526INIP4

s=PhoneCall

c=INIP4

t=00

m=audio49172RTP/AVP0

a=rtpmap:0PCMU/8000M6:代理轉(zhuǎn)發(fā)200OKSIP/200OK

Via:SIP/UDP:5060;branch=z9hG4bKmp17a

To:Heisenberg>;tag=314159

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1INVITE

Contact:<sip:@>

Content-Type:application/sdp

Content-Length:159

v=0

o=heisenberg262890844526INIP4202.203

IP4

t=00

m=audio49170RTP/AVP0

a=rtpmap:0PCMU/8000M7:主叫收到200OK,直接發(fā)ACK到被叫ACKsip:@SIP/

Via:SIP/UDP:5060;branch=z9hG4bKka42

Max-Forwards:70

To:Heisenberg>;tag=314159

From:E.Schroedinger>;tag=42

Call-ID:10@

CSeq:1ACK

Content-Length:0M8:被叫掛機,發(fā)BYEBYESIP/

Via:SIP/UDP:5060;branch=z9hG4bK4332

Max-Forwards:70

To:E.Schroedinger>;tag=42

From:Heisenberg>;tag=314159

Call-ID:10@

CSeq:2000BYE

Content-Length:0M9:回200OKSIP/200OK

Via:SIP/UDP:5060;branch=z9hG4bK4332

To:E.Schroedinger>;tag=42

From:Heisenberg>;tag=314159

Call-ID:10@

CSeq:2000BYE

Content-Length:0SIP學習入門范例(3)三、SIP注冊范例今天開始講注冊部分。這個例子是及其簡化的一個注冊例子。以后還會詳細介紹。在本例中Heisenberg向注冊服務器發(fā)送REGISTER請求,SIP服務器接收到注冊請求,該請求消息中To頭字段是HeisenbergSIP請求,就好像是我們共用的eMail地址一樣。后面IP地址是當前用戶使用設備的IP地址。注冊服務器將SIP地址和設備IP地址綁定起來,并保存到數(shù)據(jù)庫中待用。(前面一個例子中所介紹的代理服務器就是通過查詢注冊服務器數(shù)據(jù)庫信息,然后給SIP用戶終端定位的。)由Heisenberg發(fā)送的REGISTER消息內(nèi)容如下:REGISTERsip:SIP/

Via:SIP/UDP:5060;branch=z9hG4bKus19

Max-Forwards:70

To:WernerHeisenberg>

From:WernerHeisenberg>;tag=3431

Call-ID:23@

CSeq:1REGISTER

Contact:sip:@

Content-Length:0首行中請求地址是注冊服務器的地址,To字段包含用戶SIP地址,這里是。除非出現(xiàn)第三方注冊,一般來說,To和From內(nèi)容一樣。而Contact字段中的信息用來保存到注冊服務器數(shù)據(jù)庫中。注冊服務器確認成功后,發(fā)200Ok回復終端,證明Contact字段已經(jīng)保存成功。SIP/200OK

Via:SIP/UDP:5060;branch=z9hG4bKus19

To:WernerHeisenberg>;tag=8771

From:WernerHeisenberg>;tag=3431

Call-ID:23@

CSeq:1REGISTER

Contact>;expires=3600

Content-Length:0注意這里Contact地址包含一個過期時間,也就是注冊有效期。很容易理解。SIP學習入門范例(4)四、SIP狀態(tài)和及時短消息范例這個實例最簡單的說法就是,利用SIP獲取好友狀態(tài)信息以及發(fā)送及時消息。我們經(jīng)常用的QQ或MSN就是這種方式。一方用戶可以獲取另一方用戶狀態(tài)信息。狀態(tài)信息用來表示該用戶目前的工作狀態(tài),例如:工作中、休息中等等。目前新版本的聊天工具還可以顯示個人消息的能力。在SIP協(xié)議中,規(guī)定可以使用SUBSCRIBE來請求狀態(tài)或者改寫狀態(tài),用NOTIFY獲得狀態(tài)信息。在本例中,Chebychev希望和Possion通信。為了能夠知道Possion的狀態(tài)情況,Chebychev通過發(fā)送SUBSCRIBE訂閱Possion狀態(tài)信息,消息內(nèi)容如下:SUBSCRIBESIP/

ViaSIP/TCP

Max-Forwards:70

To:M.Poisson>

From:P.L.Chebychev>;tag=21171

Call-ID:58dkfj34924lk34452k592520

CSeq:3412SUBSCRIBE

Allow-Events:presence

Allow:ACK,INVITE,CANCEL,BYE,NOTIFY,SUBSCRIBE,MESSAGE

Contact;transport=tcp>

Event:presence

Content-Length:0Poisson接收到SUBSCRIBE消息后,發(fā)送202Accepted響應返回到ChebychevSIP/202Accepted

ViaSIP/TCP

;branch=z9hG4bK3;received=

To:M.Poisson>;tag=25140

From:P.L.Chebychev>;tag=21171

Call-ID:58dkfj34924lk34452k592520

CSeq:3412SUBSCRIBE

Allow-Events:presence

Allow:ACK,INVITE,CANCEL,BYE,NOTIFY,SUBSCRIBE,MESSAGE

Contact;transport=tcp>

Event:presence

Expires:36之后,Possion向Chebychev發(fā)送NOTIFY消息,表示其當前狀態(tài)NOTIFYSIP/

ViaSIP/TCP

Max-Forwards:70

To:P.L.Chebychev>;tag=21171

From:M.Poisson>;tag=25140

Call-ID:58dkfj34924lk34452k592520

CSeq:1026NOTIFY

Allow:ACK,INVITE,CANCEL,BYE,NOTIFY,SUBSCRIBE,MESSAGE

Allow-Events:dialog

Contact;transport=tcp>

Subscription-State:active;expires=3600

Event:presence

Content-Type:application/cpim-pidf+xml

Content-Length:244

<xmlversion=""encoding="UTF-8">

<presencexmlns="urn:ietf:params:xml:ns:cpim-pidf"

entity="">

<tupleid="5">

<status>

<basic>closed</basic>

</status>

</tuple>

</presence>Chebychev發(fā)送200OK響應NOTIFYSIP/200OK

ViaSIP/TCP

;branch=z9hG4bK4321;received=

To:P.L.Chebychev>;tag=21171

From:M.Poisson>;tag=25140

Call-ID:58dkfj34924lk34452k592520

CSeq:1026NOTIFY

Content-Length:0之后,當Poisson登陸后,再次發(fā)送NOTIFY消息NOTIFYSIP/

ViaSIP/TCP

Max-Forwards:70

To:P.L.Chebychev>;tag=21171

From:M.Poisson>;tag=25140

Call-ID:58dkfj34924lk34452k592520

CSeq:1027NOTIFY

Allow:ACK,INVITE,CANCEL,BYE,NOTIFY,SUBSCRIBE,MESSAGE

Allow-Events:presence

Contact;transport=tcp>

Subscription-State:active;expires=1800

Event:presence

Content-Type:application/cpim-pidf+xml

Content-Length:325

<xmlversion=""encoding="UTF-8">

<presencexmlns="urn:ietf:params:xml:ns:cpim-pidf"

entity="">

<tupleid="5">

<status>

<basic>open</basic>

</status>;transport=tcp

</contact>

</tuple>

</presence>Chebychev發(fā)200OK確認SIP/200OK

ViaSIP/TCP

;branch=z9hG4bK334241;received=

To:P.L.Chebychev>;tag=21171

From:M.Poisson>;tag=25140

Call-ID:58dkfj34924lk34452k592520

CSeq:1027NOTIFY

Content-Length:0現(xiàn)在Chebychev已經(jīng)知道Possion在線了,開始發(fā)送及時消息。MESSAGESIP/

ViaSIP/TCP

Max-Forwards:70

To:M.Poisson>

From:P.L.Chebychev>;tag=4542

Call-ID:9dkei93vjq1ei3

CSeq:15MESSAGE

Allow:ACK,INVITE,CANCEL,BYE,NOTIFY,SUBSCRIBE,MESSAGE

Content-Type:text/plain

Content-Length:9

HiThere!注意到這里,MESSAGE是獨立與會話的,它不屬于任何會話。每個消息都含有一個新的Call-ID和Fromtag。200OK用來確認收到該信息。SIP/200OK

ViaSIP/TCP19.34.3

To:M.Poisson>;tag=2321

From:P.L.Chebychev>;tag=4542

Call-ID:9dkei93vjq1ei3

CSeq:15MESSAGE

Content-Length:0Possion開始回復消息MESSAGESIP/

ViaSIP/TCP

Max-Forwards:70

To:P.L.Chebychev>

From:M.Poisson>;tag=14083

Call-ID:lk34452k592520

CSeq:2321MESSAGE

Allow:ACK,INVITE,CANCEL,BYE,NOTIFY,SUBSCRIBE,MESSAGE

Content-Type:text/plain

Content-Length:30

Well,hellotheretoyou,too!收到消息后,發(fā)200OKSIP/200OK

ViaSIP/TCP

To:P.L.Chebychev>;tag=mc3bg5q77wms

From:M.Poisson>;tag=14083

Call-ID:lk34452k592520

CSeq:2321MESSAGE

Content-Length:0

SIP編程開發(fā)介紹我們的系統(tǒng)是建立在TrilliumTAPA架構(gòu)之上的,有關(guān)TAPA架構(gòu)請參閱相關(guān)文檔,這里就不具體介紹了。今天我們的任務是學習如何建立SIP網(wǎng)絡構(gòu)架,也就是如何編程開發(fā)。SIP協(xié)議是獨立于下層協(xié)議的傳輸機制。它可以通過TCP傳,也可以通過UDP傳。它自己本身提供了一套可靠方案,而使

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論