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

下載本文檔

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

文檔簡介

最近在學(xué)習(xí)SIP協(xié)議的相關(guān)知識,于是上網(wǎng)搜集了部分內(nèi)容,主要包括SIP協(xié)議的概要介紹,SIP所

涉及到得相關(guān)協(xié)議,SIP開源軟件介紹,SIP基礎(chǔ)編程范例。

SIP協(xié)議全方位概要介紹

轉(zhuǎn)載自:出處:中國電信

摘要:SIP協(xié)議是NGN中的重要協(xié)議,越來越得到業(yè)界的重視。本文通過SIP協(xié)議的背景、功能、

網(wǎng)絡(luò)元素、實(shí)現(xiàn)機(jī)制、以及SIP消息的組成等幾個方面對SIP協(xié)議做了全方位的概要性介紹,以使

讀者對SIP有初步的概念和認(rèn)識。

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

SIP(會話初始協(xié)議)的開發(fā)目的是用來幫助提供跨越因特網(wǎng)的高級電話業(yè)務(wù)。因特網(wǎng)電話(IP

電話)正在向一種正式的商業(yè)電話模式演進(jìn),SIP就是用來確保這種演進(jìn)實(shí)現(xiàn)而需要的NGN(下一

代網(wǎng)絡(luò))系列協(xié)議中重要的一員。

SIP是IETF標(biāo)準(zhǔn)進(jìn)程的一部分,它是在諸如SMTP(簡單郵件傳送協(xié)議)和HTTP(超文本傳送

協(xié)議)基礎(chǔ)之上建立起來的。它用來建立,改變和終止基于IP網(wǎng)絡(luò)的用戶間的呼叫。為了提供電話

業(yè)務(wù)它還需要結(jié)合不同的標(biāo)準(zhǔn)和協(xié)議:特別是需要確保傳輸(RTP),與當(dāng)前電話網(wǎng)絡(luò)的信令互連,

能夠確保語音質(zhì)量(RSVP),能夠提供目錄(LDAP),能夠鑒權(quán)用戶(RADIUS)等等。

SIP被描述為用來生成,修改和終結(jié)一個或多個參與者之間的會話。這些會話包括因特網(wǎng)多媒體

會議,因特網(wǎng)(或任何IP網(wǎng)絡(luò))電話呼叫和多媒體發(fā)布。會話中的成員能夠通過多播或單播聯(lián)系的

網(wǎng)絡(luò)來通信。SIP支持會話描述,它允許參與者在一組兼容媒體類型上達(dá)成一致。它同時通過代理和

重定向請求到用戶當(dāng)前位置來支持用戶移動性。SIP不與任何特定的會議控制協(xié)議捆綁。

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

名字翻譯和用戶定位:無論被呼叫方在哪里都確保呼叫達(dá)到被叫方。執(zhí)行任何描述信息到定位信

息的映射。確保呼叫(會話)的本質(zhì)細(xì)節(jié)被支持。

特征協(xié)商:它允許與呼叫有關(guān)的組(這可以是多方呼叫)在支持的特征上達(dá)成一致(注意:不是

所有方都能夠支持相同級別的特征)。例如視頻可以或不可以被支持??傊?,存在很多需要協(xié)商的范

圍。

呼叫參與者管理:呼叫中參與者能夠引入其它用戶加入呼叫或取消到其它用戶的連接。此外,用

戶可以被轉(zhuǎn)移或置為呼叫保持。

呼叫特征改變:用戶應(yīng)該能夠改變呼叫過程中的呼叫特征。例如,一呼叫可以被設(shè)置為

''voice-only",但是在呼叫過程中,用戶可以需要開啟視頻功能。也就是說一個加入呼叫的第三方為

了加入該呼叫可以開啟不同的特征。

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

SIP中有兩個要素。SIP用戶代理和SIP網(wǎng)絡(luò)服務(wù)器。用戶代理是呼叫的終端系統(tǒng)元素,而SIP

服務(wù)器是處理與多個呼叫相關(guān)聯(lián)信令的網(wǎng)絡(luò)設(shè)備。

用戶代理本身具有一客戶機(jī)元素(用戶代理客戶機(jī)UAC)和一服務(wù)器元素(用戶代理服務(wù)器UAS)。

客戶機(jī)元素初始呼叫而服務(wù)器元素應(yīng)答呼叫。這允許點(diǎn)到點(diǎn)的呼叫通過客戶機(jī)-服務(wù)器協(xié)議來完成。

SIP服務(wù)器元素提供多種類型的服務(wù)器。有三種服務(wù)器形式存在于網(wǎng)絡(luò)中--SIP有狀態(tài)代理服務(wù)

器,SIP無狀態(tài)代理服務(wù)器和SIP重定向服務(wù)器。由于呼叫者未必知道被呼叫方的IP地址或主機(jī)名,

SIP服務(wù)器的主要功能是提供名字解析和用戶定位。可以獲得的是email形式的地址或與被呼叫方關(guān)

聯(lián)的電話號碼。使用該信息,呼叫者的用戶代理能夠確定特定服務(wù)器來解析地址信息--這可能涉及網(wǎng)

絡(luò)中很多服務(wù)器。

SIP代理服務(wù)器接收請求,決定將這些請求傳送到何處,并且將它們傳送到下一服務(wù)器(使用下

一跳路由原理)。在網(wǎng)絡(luò)中可以有多跳。

有狀態(tài)和無狀態(tài)代理服務(wù)器的區(qū)別是有狀態(tài)代理服務(wù)器記住它接收的入請求,以及回送的響應(yīng)和

它轉(zhuǎn)送的出請求。無狀態(tài)代理服務(wù)器一旦轉(zhuǎn)送請求后就忘記所有的信息。這允許有狀態(tài)代理服務(wù)器生

成請求以并行地嘗試多個可能的用戶位置并且送回最好的響應(yīng)。無狀態(tài)代理服務(wù)器可能是最快的,并

且是SIP結(jié)構(gòu)的骨干。有狀態(tài)代理服務(wù)器可能是離用戶代理最近的本地設(shè)備,它控制用戶域并且是應(yīng)

用服務(wù)的主要平臺。

重定向服務(wù)器接收請求,但不是將這些請求傳遞給下一服務(wù)器而是向呼叫者發(fā)送響應(yīng)以指示被呼

叫用戶的地址。這使得呼叫者可以直接聯(lián)系在下一服務(wù)器上被呼叫方的地址。

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

SIP是一個分層結(jié)構(gòu)的協(xié)議,這意味著它的行為根據(jù)一組平等獨(dú)立的處理階段來描述,每一階段

之間只是松耦合。協(xié)議分層描述是為了表達(dá),從而允許功能的描述可在一個部分跨越幾個元素。它不

指定任何方式的實(shí)現(xiàn)。當(dāng)我們說某元素包含某層,我們是指它順從該層定義的規(guī)則集。

不是協(xié)議規(guī)定的每個元素都包含各層。而且,由SIP規(guī)定的元素是邏輯元素,不是物理元素。一

個物理實(shí)現(xiàn)可以選擇作為不同的邏輯元素,甚至可能在一個個事務(wù)的基礎(chǔ)上。

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

第二層是傳輸層。它定義了網(wǎng)絡(luò)上一個客戶機(jī)如何發(fā)送請求和接收響應(yīng)以及一個服務(wù)器如何接收

請求和發(fā)送響應(yīng)。所有的SIP元素包含傳輸層。

第三層是事務(wù)層。事務(wù)是SIP的基本元素。一個事務(wù)是由客戶機(jī)事務(wù)發(fā)送給服務(wù)器事務(wù)的請求(使

用傳輸層),以及對應(yīng)該請求的從服務(wù)器事務(wù)發(fā)送回客戶機(jī)的所有響應(yīng)組成。事務(wù)層處理應(yīng)用層重傳,

匹配響應(yīng)到請求,以及應(yīng)用層超時。任何用戶代理客戶機(jī)(UAC)完成的任務(wù)使用一組事務(wù)產(chǎn)生。用

戶代理包含一個事務(wù)層,有狀態(tài)的代理也有。無狀態(tài)的代理不包含事務(wù)層。事務(wù)層具有客戶機(jī)組成部

分(稱為客戶機(jī)事務(wù))和服務(wù)器組成部分(稱為服務(wù)器事務(wù)),每個代表有限的狀態(tài)機(jī),它被構(gòu)造來

處理特定的請求。

事務(wù)層之上的層稱為事務(wù)用戶(TU)o每個SIP實(shí)體,除了無狀態(tài)代理,都是事務(wù)用戶。當(dāng)一個

TU希望發(fā)送請求,它生成一個客戶機(jī)事務(wù)實(shí)例并且向它傳遞請求和IP地址,端口,和用來發(fā)送請求

的傳輸機(jī)制。一個TU生成客戶機(jī)事務(wù)也能夠刪除它。當(dāng)客戶機(jī)取消一個事務(wù)時,它請求服務(wù)器停止

進(jìn)一步的處理,將狀態(tài)恢復(fù)到事務(wù)初始化之前,并且生成特定的錯誤響應(yīng)到該事務(wù)。這由CANCEL

請求完成,它構(gòu)成自己的事務(wù),但涉及要取消的事務(wù)。

SIP通過EMAIL形式的地址來標(biāo)明用戶地址。每一用戶通過一等級化的URL來標(biāo)識,它通過諸

如用戶電話號碼或主機(jī)名等元素來構(gòu)造(例如:SIP:)。因?yàn)樗cEMAIL地址

的相似性,SIPURLs容易于用戶的EMAIL地址關(guān)聯(lián)。

SIP提供它自己的可靠性機(jī)制從而獨(dú)立于分組層,并且只需不可靠的數(shù)據(jù)包服務(wù)即可。SIP可典

型地用于UDP或TCP之上。

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

?用戶定位

?用戶能力

?用戶可用性

?呼叫建立

?呼叫處理

?呼叫前轉(zhuǎn),包括:(1)等效800類型的呼叫,(2)無應(yīng)答呼叫前轉(zhuǎn),(3)遇忙呼叫前轉(zhuǎn),

(4)無條件呼叫前轉(zhuǎn)

?呼叫號碼傳遞,該號碼可以是任何命名機(jī)制。

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

端。

?終端類型的協(xié)商和選擇:呼叫者可以給出選擇如何到達(dá)對方,例如通過因特網(wǎng)電話,移動電話

或應(yīng)答業(yè)務(wù)等。

?終端能力協(xié)商

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

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

?多播會議的邀請

當(dāng)一用戶希望呼叫另一用戶,呼叫者用INVITE請求初始呼叫,請求包含足夠的信息用以被呼叫

方參與會話。如果客戶機(jī)知道另一方的位置它能夠直接將請求發(fā)送到另一方的IP地址。如果不知道,

客戶機(jī)將請求發(fā)送到本地配置的SIP網(wǎng)絡(luò)服務(wù)器。如果服務(wù)器是代理服務(wù)器它將解析被呼叫用戶的位

置并且將請求發(fā)送給它們。有很多方法完成上步,例如搜索DNS或訪問數(shù)據(jù)庫。服務(wù)器也可以是重

定向服務(wù)器,它可以返回被呼叫用戶的位置到呼叫客戶機(jī)用以它直接與用戶聯(lián)系。在定位用戶的過程

中,SIP網(wǎng)絡(luò)服務(wù)器當(dāng)然能夠代理或重定向呼叫到其它的服務(wù)器,直到到達(dá)一個明確地知道被呼叫用

戶IP地址的服務(wù)器。

一旦發(fā)現(xiàn)用戶地址,請求就發(fā)送給該用戶,此時將產(chǎn)生幾種選擇。在最簡單的情況,用戶電話客

戶機(jī)接收請求一一也就是,用戶的電話振鈴。如果用戶接受呼叫,客戶機(jī)用客戶機(jī)軟件的指定能力響

應(yīng)請求并且建立連接。如果用戶拒絕呼叫,會話將被重定向到語音郵箱服務(wù)器或另一用戶。''指定能

力''參照用戶想啟用的功能。例如,客戶機(jī)軟件可以支持視頻會議,但用戶只想使用音頻會議,那則

只會啟用音頻功能。

SIP還具有另外兩個有重要意義的特征。第一個是有狀態(tài)SIP代理服務(wù)器具有分割入呼叫或復(fù)制

入呼叫的能力,從而可以同時運(yùn)行幾個擴(kuò)展分支。第一個應(yīng)答的分支接受呼叫。該特征在用戶工作在

兩位置之間(例如實(shí)驗(yàn)室和辦公室)或者同時對經(jīng)理和其秘書振鈴時是非常便利的。

第二個特征是SIP獨(dú)特的返回不同媒體類型的能力。舉個用戶聯(lián)系公司的例子。當(dāng)SIP服務(wù)器接

收到客戶機(jī)的連接請求,它能夠通過WEB交互式語音響應(yīng)頁面來返回到顧客的客戶機(jī),該頁面具有

可獲得的部門分支或提供在列表上的用戶。點(diǎn)擊適當(dāng)?shù)逆溄雍髮l(fā)送一請求到所點(diǎn)擊選擇的用戶從而

建立起呼叫。

四、SIP消息的組成

有兩種類型的SIP消息:

?請求:從客戶機(jī)發(fā)到服務(wù)器

?響應(yīng):從服務(wù)器發(fā)到客戶機(jī)

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

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

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

任何內(nèi)容。

SIP定義了下述方法:

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

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

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

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

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

INFO一一用于會話中信令。

五、結(jié)束語

SIP協(xié)議憑借其簡單、易于擴(kuò)展、便于實(shí)現(xiàn)等諸多優(yōu)點(diǎn)越來越得到業(yè)界的青睞,它正逐步成為NGN

(下一代網(wǎng)絡(luò))和3G多媒體子系統(tǒng)域中的重要協(xié)議,并且市場上出現(xiàn)越來越多的支持SIP的客戶端

軟件和智能多媒體終端,以及用SIP協(xié)議實(shí)現(xiàn)的服務(wù)器和軟交換設(shè)備。雖然SIP協(xié)議目前還不成熟,

但可以預(yù)見SIP必定是將來網(wǎng)絡(luò)多媒體通信中的明星。

SIP開源軟件介紹

要在windows或者linux平臺下開發(fā)基于SIP的軟電話,需要以下軟件

服務(wù)器端軟件:注冊多個客戶端到服務(wù)器上,可以進(jìn)行通話測試

SIP客戶端軟件:主要用于測試,可以對別人已經(jīng)完成的客戶端進(jìn)行抓包,以比對自己程序的發(fā)包

數(shù)據(jù)

SIP協(xié)議棧:基于某個現(xiàn)成的SIP協(xié)議棧來開發(fā)會加快開發(fā)進(jìn)度

RTP棧:傳輸語言或者視頻數(shù)據(jù)的協(xié)議棧

抓包測試工具:調(diào)試網(wǎng)絡(luò)程序最有效的辦法

以下介紹這些軟件主要以開源軟件為主

-服務(wù)器端軟件

1.Asterisk:Linux系統(tǒng)下開源的IPPBX,功能強(qiáng)大穩(wěn)定,主要用c語言開發(fā)。配置稍麻煩。

/

2.Vocal:Linux系統(tǒng)下開源的SIP服務(wù)器端??梢宰鳛镮PPBX也可以作為運(yùn)營系統(tǒng)。很多voip

虛擬運(yùn)營商都用這個作為自己的運(yùn)營系統(tǒng)。提供BS結(jié)構(gòu)的管理界面。/

3.YATE:跨平臺(Linux,Windows)的開源SIP服務(wù)器端。在windows下安裝非常簡單。其

他方面沒有進(jìn)行過測試。http://yate.null.ro/pmwiki/

4.SER:Linux平臺下重量級的SIP服務(wù)器斷。功能比較豐富,也是很多voip虛擬運(yùn)營商的系統(tǒng)

選擇。不過據(jù)說配置比較麻煩,具體沒有試過。/ser/

5.sipX:Linux平臺下的SIP服務(wù)器。這個好像不能作為客戶端再次注冊到其他SIP服務(wù)器上。

提供BS結(jié)構(gòu)的管理界面。

二SIP客戶端軟件

1.WindowsMessenger5.1:微軟出的SIP客戶端,操作方便。

2.YATEClient:跨平臺(Linux,Windows)的開源SIP客戶端軟件。安裝方便,功能簡單。

http://yate.null.ro/pmwiki/

3.xten:windows平臺下的SIP軟電話。功能齊全,使用方便。/

三SIP協(xié)議棧

1.osip:跨平臺的開源SIP協(xié)議棧。用c語言實(shí)現(xiàn),體積小。http:〃/software/osip/

2.exosip:對osip進(jìn)行封裝,使其方便SIP客戶端軟件開發(fā)。同樣開源跨平臺。

/projects/exosip/

3.sipXtackLib:由SIPfoundry提供的開源跨平臺的SIP協(xié)議棧,功能齊全。C++開發(fā),已經(jīng)被

用于開發(fā)數(shù)個商業(yè)SIP終端。

四RTP棧

1.JRTPLIB:開源的跨平臺rtp棧,用C++語言開發(fā),使用方便。

http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib

五抓包測試工具

1.Wireshark:非常有名的開源跨平臺網(wǎng)絡(luò)抓包工具,以前叫做Ethereal。

/

幾種開源SIP協(xié)議棧對比

隨著VoIP和NGN技術(shù)的發(fā)展,H.323時代即將過渡到SIP時代,在H.323的開源協(xié)議棧中,

Openh323占統(tǒng)治地位,它把一個復(fù)雜而又先進(jìn)的H.323協(xié)議棧展現(xiàn)在普通程序員的眼前,為

H.323普及立下了汗馬功勞。而然當(dāng)在SIP時代,則出現(xiàn)了群雄割據(jù)的狀況,SIP相對于H.323

簡單,靈活,于是各種協(xié)議棧層出不窮,下面將詳細(xì)對比最具有代表性的5個開源項目:

OPAL,VOCAL,sipX,ReSIProcate,oSIP

OPAL是OpenPhoneAbstractionLibrary,是Openh323的下一個版本,它仍然使用了

Openh323的體系結(jié)構(gòu),并在其基礎(chǔ)上進(jìn)行擴(kuò)展,同時實(shí)現(xiàn)了SIP,H.323,但在音頻和視頻的編碼

和傳輸部分有較大改動。OPAL初衷設(shè)計是包含任何電話通信協(xié)議,所以其底層進(jìn)行了高度的抽象化,

所以也能夠很容易的支持MGCP,PSTN和將來會出現(xiàn)的協(xié)議。不過由于Openh323的最后一個版

本還在開發(fā)中,所以原本6月發(fā)布的OPAL也被推遲,現(xiàn)有的OPAL還非常不完善,BUG也非常多,

不過相信以O(shè)penh323的開發(fā)班底,一定能讓OPAL十分優(yōu)秀。

CVS::pserver:anonymous@:/cvsroot/openh323/opal

Language:C++

VxWorksport:Yes

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:No

SupportsRFC3515:Yes

SupportsRFC3262:No

SupportsRFC3311:No

TCP:Yes

UDP:Yes

SIZE:8MB

License:MPL

Document:None

Samples:UA,GK

VOCAL是開發(fā)的SIP系統(tǒng),VOCAL應(yīng)該是目前功能最完善,使用者最多的開源

SIP協(xié)議棧了.它不只包括了協(xié)議棧,還包括了h323與sip轉(zhuǎn)換網(wǎng)關(guān),對SIP的各種Serve「的功

能支持也非常完善,不過很可惜,不支持windows平臺,而且自從vovida被CISCO收購以后就停

止了開發(fā),最后的版本是2003年4月的L5.0。

CVS::pserver:anonymous@:/cvsroot/vocal

Language:C++

VxWorksport:No

Win32port:Partial

Linuxport:Yes

SupportsRFC3261:Partial

SupportsRFC2327:Yes

SupportsRFC3264:

SupportsRFC3263:

SupportsRFC3515:Yes

SupportsRFC3262:

SupportsRFC3311:

TCP:Yes

UDP:Yes

SIZE:6MB

License:Vovidasoftwarelicencse

Document:Few

Samples:UA,GK,GW

sipX是一個SIP系統(tǒng),由SIPFoundry開發(fā)。sipX是從reSIProcate分離出來的,sipX除了

包括SIPstack外,還包括了sipXphone,sipXproxy,sipXregistry等等…,由它們構(gòu)成了完整的

SIP系統(tǒng),而且sipx還支持嵌入式系統(tǒng),各個模塊可以按需取舍。不過可惜是幾乎沒有任何開發(fā)文

檔。

SVN:/viewsvn/

Language:C++

VxWorksport:Yes

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:Yes

SupportsRFC3515:Yes

SupportsRFC3262:No

SupportsRFC3311:No

TCP:Yes

UDP:Yes

SIZE:<4Mb

License:LGPL

Document:None

Samples:UA,GK,GW

ReSIProcate同樣也是由SIPFoundry開發(fā),ReSIProcate最開始起源于Vocal,由于Vocal

開始只支持rfc3254,為了支持最新的rfc3261,ReSIProcate誕生了,但現(xiàn)在,ReSIProcate已

經(jīng)成為一個獨(dú)立SIP協(xié)議棧了,它十分穩(wěn)定,并且很多商業(yè)程序都在使用。

SVN:/viewsvn/resiprocate/main/sip/

Language:C++

VxWorksport:No

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:Partial

SupportsRFC3515:Yes

SupportsRFC3262:No

SupportsRFC3311:No

TCP:Yes

UDP:Yes

SIZE:<2.5Mb

License:Vovida

Document:Few

Samples:None

OSIP的開發(fā)開始于2000年7月,第一個版本在2001年5月發(fā)布,到現(xiàn)在已經(jīng)發(fā)展到2.0.9

了。它采用ANSIC編寫,而且結(jié)構(gòu)簡單小巧,所以速度特別快,它并不提供高層的SIP會話控制

API,它主要提供一些解析SIP/SDP消息的API和事務(wù)處理的狀態(tài)機(jī),oSIP的作者還開發(fā)了基于

oSIP的UAlib:exosip和proxyserverlib:partysip.

CVS::ext:anoncvs@:/cvsroot/osip

Language:C

VxWorksport:Yes

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:Yes

SupportsRFC3515:No

SupportsRFC3262:No

SupportsRFC3311:Yes

TCP:Yes

UDP:Yes

SIZE:400kb

License:LGPL

Samples:UA,GK

綜合上述評測,可以看出5種SIP協(xié)議棧各有千秋,OPAL有發(fā)展?jié)摿Γ琕OCAL比較完善,sipX

兼容性好,ReSIProcdte教穩(wěn)定,oSIP小巧而快速。所以要根據(jù)應(yīng)用的不同選擇恰當(dāng)?shù)膮f(xié)議棧進(jìn)行

研究開發(fā)要在windows或者linux平臺下開發(fā)基于SIP的軟電話,需要以下軟件

服務(wù)器端軟件:注冊多個客戶端到服務(wù)器上,可以進(jìn)行通話測試

SIP客戶端軟件:主要用于測試,可以對別人已經(jīng)完成的客戶端進(jìn)行抓包,以比對自己程序的發(fā)包

數(shù)據(jù)

SIP協(xié)議棧:基于某個現(xiàn)成的SIP協(xié)議棧來開發(fā)會加快開發(fā)進(jìn)度

RTP棧:傳輸語言或者視頻數(shù)據(jù)的協(xié)議棧

抓包測試工具:調(diào)試網(wǎng)絡(luò)程序最有效的辦法

以下介紹這些軟件主要以開源軟件為主

-服務(wù)器端軟件

1.Asterisk:Linux系統(tǒng)下開源的IPPBX,功能強(qiáng)大穩(wěn)定,主要用c語言開發(fā)。配置稍麻煩。

/

2.Vocal:Linux系統(tǒng)下開源的SIP服務(wù)器端??梢宰鳛镮PPBX也可以作為運(yùn)營系統(tǒng)。很多voip

虛擬運(yùn)營商都用這個作為自己的運(yùn)營系統(tǒng)。提供BS結(jié)構(gòu)的管理界面。/

3.YATE:跨平臺(Linux,Windows)的開源SIP服務(wù)器端。在windows下安裝非常簡單。其

他方面沒有進(jìn)行過測試。http://yate.null.ro/pmwiki/

4.SER:Linux平臺下重量級的SIP服務(wù)器斷。功能比較豐富,也是很多voip虛擬運(yùn)營商的系統(tǒng)

選擇。不過據(jù)說配置比較麻煩,具體沒有試過。/ser/

5.sipX:Linux平臺下的SIP服務(wù)器。這個好像不能作為客戶端再次注冊到其他SIP服務(wù)器上。

提供BS結(jié)構(gòu)的管理界面。

二SIP客戶端軟件

1.WindowsMessenger5.1:微軟出的SIP客戶端,操作方便。

2.YATEClient:跨平臺(Linux,Windows)的開源SIP客戶端軟件。安裝方便,功能簡單。

http://yate.null.ro/pmwiki/

3.xten:windows平臺下的SIP軟電話。功能齊全,使用方便。/

三SIP協(xié)議棧

1.osip:跨平臺的開源SIP協(xié)議棧。用c語言實(shí)現(xiàn),體積小。http:〃/software/osip/

2.exosip:對osip進(jìn)行封裝,使其方便SIP客戶端軟件開發(fā)。同樣開源跨平臺。

/projects/exosip/

3.sipXtackLib:由SIPfoundry提供的開源跨平臺的SIP協(xié)議棧,功能齊全。C++開發(fā),已經(jīng)被

用于開發(fā)數(shù)個商業(yè)SIP終端。

四RTP棧

1.JRTPLIB:開源的跨平臺rtp棧,用C++語言開發(fā),使用方便。

http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib

五抓包測試工具

1.Wireshark:非常有名的開源跨平臺網(wǎng)絡(luò)抓包工具,以前叫做Ethereal。

/

幾種開源SIP協(xié)議棧對比

隨著VoIP和NGN技術(shù)的發(fā)展,H.323時代即將過渡到SIP時代,在H.323的開源協(xié)議棧中,

Openh323占統(tǒng)治地位,它把一個復(fù)雜而又先進(jìn)的H.323協(xié)議棧展現(xiàn)在普通程序員的眼前,為

H.323普及立下了汗馬功勞。而然當(dāng)在SIP時代,則出現(xiàn)了群雄割據(jù)的狀況,SIP相對于H.323

簡單,靈活,于是各種協(xié)議棧層出不窮,下面將詳細(xì)對比最具有代表性的5個開源項目:

OPAL,VOCAL,sipX,ReSIProcate,oSIP

OPAL是OpenPhoneAbstractionLibrary,是Openh323的下一個版本,它仍然使用了

Openh323的體系結(jié)構(gòu),并在其基礎(chǔ)上進(jìn)行擴(kuò)展,同時實(shí)現(xiàn)了SIP,H.323,但在音頻和視頻的編碼

和傳輸部分有較大改動。OPAL初衷設(shè)計是包含任何電話通信協(xié)議,所以其底層進(jìn)行了高度的抽象化,

所以也能夠很容易的支持MGCP,PSTN和將來會出現(xiàn)的協(xié)議。不過由于Openh323的最后一個版

本還在開發(fā)中,所以原本6月發(fā)布的OPAL也被推遲,現(xiàn)有的OPAL還非常不完善,BUG也非常多,

不過相信以O(shè)penh323的開發(fā)班底,一定能讓OPAL十分優(yōu)秀。

CVS::pserver:anonymous@:/cvsroot/openh323/opal

Language:C++

VxWorksport:Yes

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:No

SupportsRFC3515:Yes

SupportsRFC3262:No

SupportsRFC3311:No

TCP:Yes

UDP:Yes

SIZE:8MB

License:MPL

Document:None

Samples:UA,GK

VOCAL是開發(fā)的SIP系統(tǒng),VOCAL應(yīng)該是目前功能最完善,使用者最多的開源

SIP協(xié)議棧了.它不只包括了協(xié)議棧,還包括了h323與sip轉(zhuǎn)換網(wǎng)關(guān),對SIP的各種Serve「的功

能支持也非常完善,不過很可惜,不支持windows平臺,而且自從vovida被CISCO收購以后就停

止了開發(fā),最后的版本是2003年4月的L5.0。

CVS::pserver:anonymous@:/cvsroot/vocal

Language:C++

VxWorksport:No

Win32port:Partial

Linuxport:Yes

SupportsRFC3261:Partial

SupportsRFC2327:Yes

SupportsRFC3264:

SupportsRFC3263:

SupportsRFC3515:Yes

SupportsRFC3262:

SupportsRFC3311:

TCP:Yes

UDP:Yes

SIZE:6MB

License:Vovidasoftwarelicencse

Document:Few

Samples:UA,GKZGW

sipX是一個SIP系統(tǒng),由SIPFoundry開發(fā)。sipX是從reSIP「ocdte分離出來的,sipX除了

包括SIPstack外,還包括了sipXphone,sipXproxy,sipXregistry等等由它們構(gòu)成了完整的

SIP系統(tǒng),而且sipx還支持嵌入式系統(tǒng),各個模塊可以按需取舍。不過可惜是幾乎沒有任何開發(fā)文

檔。

SVN:/viewsvn/

Language:C++

VxWorksport:Yes

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:Yes

SupportsRFC3515:Yes

SupportsRFC3262:No

SupportsRFC3311:No

TCP:Yes

UDP:Yes

SIZE:<4Mb

License:LGPL

Document:None

Samples:UA,GK,GW

ReSIProcate同樣也是由SIPFoundry開發(fā),ReSIProcate最開始起源于Vocal,由于Vocal

開始只支持rfc3254,為了支持最新的rfc3261,ReSIProcate誕生了,但現(xiàn)在,ReSIProcate已

經(jīng)成為一個獨(dú)立SIP協(xié)議棧了,它十分穩(wěn)定,并且很多商業(yè)程序都在使用。

SVN:/viewsvn/resiprocate/main/sip/

Language:C++

VxWorksport:No

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:Partial

SupportsRFC3515:Yes

SupportsRFC3262:No

SupportsRFC3311:No

TCP:Yes

UDP:Yes

SIZE:<2.5Mb

License:Vovida

Document:Few

Samples:None

OSIP的開發(fā)開始于2000年7月,第一個版本在2001年5月發(fā)布,到現(xiàn)在已經(jīng)發(fā)展到2.0.9

了。它采用ANSIC編寫,而且結(jié)構(gòu)簡單小巧,所以速度特別快,它并不提供高層的SIP會話控制

API,它主要提供一些解析SIP/SDP消息的API和事務(wù)處理的狀態(tài)機(jī),OSIP的作者還開發(fā)了基于

oSIP的UAlib:exosip和proxyserverlib:partysip.

CVS::ext:anoncvs@:/cvsroot/osip

Language:C

VxWorksport:Yes

Win32port:Yes

Linuxport:Yes

SupportsRFC3261:Yes

SupportsRFC2327:Yes

SupportsRFC3264:Yes

SupportsRFC3263:Yes

SupportsRFC3515:No

SupportsRFC3262:No

SupportsRFC3311:Yes

TCP:Yes

UDP:Yes

SIZE:400kb

License:LGPL

Samples:UA,GK

綜合上述評測,可以看出5種SIP協(xié)議棧各有千秋,OPAL有發(fā)展?jié)摿?,VOCAL比較完善,sipX

兼容性好,ReSIProcate教穩(wěn)定,oSIP小巧而快速。所以要根據(jù)應(yīng)用的不同選擇恰當(dāng)?shù)膮f(xié)議棧進(jìn)行

研究開發(fā)。。

SIP所涉及到得相關(guān)協(xié)議

SIP標(biāo)準(zhǔn)

1.RFC3261:SessionInitiationProtocol

2RFC3262:ReliabilityofProvisionalResponsesinSIP

3R.FC3263:SIP:LocatingSIPServers

4RFC3264:AnOfferAnswerModelwithSessionDescription

5RFC3265:SIP-SpecificEventNotification

6RFC3311:TheSIPUPDATEMethod

7.RFC3312:IntegrationofResourceManagementandSIP

8RFC3313:PrivateSessionInitiationProtocol(SIP)ExtensionsforMedia

Authorization

9.RFC3323:APrivacymechanismfortheSessionInitiationProtocol

10.RFC3325:PrivateExtensionstotheSessionInitiationProtocol(SIP)for

AssertedIdentitywithTrustedNetworks

11.RFC3326:TheReasonHeaderfortheSessionInitiationProtocol

12.RFC3327:SessionInitiationProtocol(SIP)ExtensionHeaderFieldfor

RegisteringNon-AdjacentContacts

13.RFC3329:SecurityMechanismAgreementfortheSIP

14.RFC3372:SIPforTelephones(SIP-T):ContextandArchitectures

15.RFC3428:SIPExtensionsforInstantMessaging

16.RFC3486:CompressingtheSessionInitiationProtocol(SIP)

17.RFC3515:TheREFERMethod

18.RFC3608:SessionInitiationProtocol(SIP)ExtensionHeaderFieldforService

RouteDiscoveryDuringRegistration

19.RFC2806:URLsforTelephoneCalls

20.RFC2848:PINT-IPAccesstoTelephoneCallServices

21.RFC2915:TheNAPTRDNSResourceRecord

22.RFC2976:TheSIPINFOMethod

23.RFC3204:MIMEmediatypesforISUPandQSIGObjects

24.draft-ieft-sipping-el64-02:UsingENUMforSIPApplication

25.draft-ieft-sipping-cc-transfer-05:CallTransfer

26.draft-ieft-sip-referredby-OO:TheReferred-ByMechansim

27.draft-ieft-sip-replaces-03:TheSIPReplacesHeader

28.draft-ietf-session-timer-10:TheSIPSessionTimer

29.draft-ietf-sipping-3gpp-r5-requirements-00:3rdGenerationPartnershipProject

(3GPP)Release5requirementsontheSessionInitiationProtocol

30.draft-ietf-sip-nat-02:AnExtensiontotheSessionInitiationProtocolfor

SysmmetricResponseRouting

31.draft-ietf-sipping-mwi-02.txt:AMessageSummaryandMessageWaiting

IndicationEventPackagefortheSessionInitiationProtocol.

32.draft-ietf-simpie-presence-10:SIPExtensionsforPresence

33.draft-ieft-simple-im-sdp-00:SIP-SDPExtensionsforSIPInstantMessage

Sessions

34.ITU-TRecommendationT.38:Proceduresforreal-timeGroup3facsimile

communicationoverIPnetworks

35.draft-yu-tel-trl-07:ExtensiontoTelURLtosupportNumberPortabiltiyand

FreephoneService

36.draft-ietf-mmusic-sdp-qos-OO:EstablishingQOSandSecurityPreconditionsfor

SDPsessions

SIP相關(guān)協(xié)議

1.RFC1006:ISOtransportservicesontopoftheTCPVersion3

2.RFC2030:SimpleNetworkTimeProtocol(SNTP)Version4forIPv4,IPv6and

OSI

3.RFC2246:TheTLSProtocolVersion1.0

4.RFC2327:SDPSessionDescriptionProtocol

5.RFC3024:MIMEmediatypesofISUPandQSIGObjects

SIP學(xué)習(xí)入門范例(1)

學(xué)習(xí)SIP協(xié)議最快捷的方法是通過范例來學(xué)習(xí),因此我從UnderstandSIP上找了4個最簡單呼

叫過程來分析。通過對這些流程圖以及每個呼叫所包含的消息體文本分析,盡快熟悉SIP呼叫原理。

PS.如果有什么地方說明不妥,請告訴我

一、基本SIP會話建立范例

下面的流程圖顯示出最簡單的SIP呼叫流程。它由兩個呼叫終端組成(其實(shí)真正的系統(tǒng)并沒有這么

簡單),呼叫終端可以為SIP電話機(jī)或者具備SIP功能的手機(jī)等終端設(shè)備。在這里我們假設(shè)它是

能夠連接到IP網(wǎng)的終端設(shè)備,并且它們已經(jīng)知道對方的IP地址。

PS.因?yàn)檫@是第一節(jié),每個字段我們講得會比較詳細(xì),后面章節(jié)如何字段意義差不多,我們將會省略。

對于某些常用的,有重要意義的字段,我們還將在專門的地方說明。

INVITE

主叫方Tesla首先發(fā)起INVITE消息到被叫方Marconi。INVITE消息包含會話類型和一些呼叫所

必須的參數(shù)。會話類型可能是單純的語音,也可能是網(wǎng)絡(luò)會議所用的多媒體視頻,還可能是游戲會話。

下面是消息體范例,我們來詳細(xì)分析各個字段的意義:

INVITEsip:marconi@SIP/2.0

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

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

Via:SIP/2.0/UDP:5060;branch=z9hG4bKfwl9b

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

v=branch是一隨機(jī)碼,它被看作傳輸標(biāo)識

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

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

Max-Forwards:70

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

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

To:G.Marconi<sip:Marconi@>

From:NikolaTesla<sip:n.tesla@>;tag=76341

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

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

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

Call-ID:123456789@

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

<二對于用戶代理發(fā)送INVITE消息,本地將生成Fromtag和Call-ID全局唯一碼,被

叫方代理則生成Totag全局唯一碼。這三個隨機(jī)碼做為整個對話中對話標(biāo)識(dialogidentifier)

在通話雙方使用。

CSeq:1INVITE

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

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

Subject:AboutThatPowerOutage...

Contact:<sip:n.tesla@>

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

Content-Type:application/sdp

Content-Length:158

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

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

o=Tesla28908445262890844526INIP4v=主叫源地址,類型等

s=PhoneCallv=主題

c=INIP403v=連接

t=00v=時間戳

m=audio49170RTP/AVP0v=媒體

a=rtpmap:0PCMU/8000<=媒體屬性

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

v=連接IP地址:03

v=媒體格式:audio

<=端口號:49170

<=媒體傳輸類型:RTP

v=媒體編碼:PCMuLaw

<=采樣率:8000Hz

180Ringing

當(dāng)被叫方接收到INVITE請求消息后,將回復(fù)180Ringing。顧名思義,就是發(fā)回鈴音,提示主叫

方電話已連接上了,正等待被叫應(yīng)答。被叫方接收到INVITE消息后也會發(fā)生響鈴或者其它有呼入

提示,這由被叫方設(shè)定(我們可以把它想象成我們自己設(shè)定手機(jī)鈴聲)。對于180響應(yīng)又被稱為''消

息及時響應(yīng)〃,它是一種用來測試被叫狀態(tài)的一種響應(yīng)。因此它所包含的信息不多,具體180響應(yīng)

消息如下:

SIP/2.0180Ringing

Via:SIP/2.0/UDP:5060;branch=z9hG4bKfw19b

;received=03v=這里增加一個received參數(shù),標(biāo)識接收方IP地址

To:G.Marconi<sip:marconi@>;tag=a53e42<=上已提至ij,Totag做為被叫

方標(biāo)識

From:NikolaTesla<sip:n.tesla@>;tag=76341v=要求很發(fā)送方From

tag一致

Call-ID:123456789@

CSeq:1INVITE

Contact:<sip:marconi@>

Content-Length:0

v=對于180Ringing響應(yīng),基本上就是將INVITE的Via、To、From、Call-ID和CSeq

內(nèi)容復(fù)制過來,對于首行標(biāo)出SIP版本號,響應(yīng)代碼(180)和動作原因(reasonphrase)

<=注意這里From和To地址,因?yàn)樗鼈冇脕碇付ê艚蟹较?,因此這里的200OK響應(yīng)并沒

有將地址對調(diào),仍然保持原樣。一點(diǎn)不同的是To頭字段添加了由被叫方Marconi生成的tag標(biāo)

200Ok

被叫響鈴后,如果被叫用戶Marconi接起電話,則發(fā)出200OK響應(yīng)。這個響應(yīng)除了做為接通指

示之外,還有一個功能是用來指定被叫允許的連接媒體格式,讓主叫方確認(rèn)是否可以接收該媒體。

消息體如下:

SIP/2.0200OK

Via:SIP/2.0/UDP:5060;branch=z9hG4bKfw19b

;received=03

To:G.Marconi<sip:marconi@>;tag=a53e42

From:NikolaTesla<sip:n.tesla@>;tag=76341

Call-ID:123456789@

CSeq:1INVITE

Contact:<sip:marconi@>

Content-Type:application/sdp

Content-Length:155

v=頭字段部分基本同上

v=0

o=Marconi28908445282890844528INIP4

s=PhoneCall

c=INIP403

t=00

m=audio60000RTP/AVP0

a=rtpmap:0PCMU/8000

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

v=終端IP地址:03

v=媒體格式:audio

<=端口號:60000

<=媒體傳輸類型:RTP

v=媒體編碼:PCMuLaw

<=采樣率:8000Hz

ACK

通話前最后一步是主叫方確認(rèn)200OK響應(yīng)。該項確認(rèn)證明連接被允許,即將使用另一種協(xié)議開始

媒體連接。這另一種協(xié)議是上面在SDP消息段中所協(xié)商好的RTP格式。該ACK響應(yīng)內(nèi)容如下:

ACKsip:marconi@SIP/2.0

Via:SIP/2.0/UDP:5060;branch=z9hG4bK321g

Max-Forwards:70

To:G.Marconi<sip:marconi@>;tag=a53e42

From:NikolaTesla<sip:n.tesla@>;tag=76341

Call-ID:123456789@

CSeq:1ACK

Content-Length:0

BYE

通話完畢后,由被叫方Marconi首先掛機(jī),發(fā)送BYE請求命令。注意這回由Marconi做為主叫

方了,因此Via字段和From、To與INVITE字段有所不同。其實(shí)也就是倒置。

BYEsip:n.tesla@SIP/2.0

Via:SIP/2.0/UDP:5060;branch=z9hG4bK392kf

Max-Forwards:70

To:NikolaTesla<sip:n.tesla@>;tag=76341

From:G.Marconi<sip:marconi@>;tag=a53e42

Call-ID:123456789@

CSeq:1BYE

Content-Length:0

200OK

BYE之后,要求被叫方發(fā)200Ok確認(rèn),也就是讓主叫知道被叫已經(jīng)知道你掛斷了。(注意這里所

說的主被叫角色已經(jīng)倒過來了)打個比方,通話之后,有一方要求掛機(jī),另一方需要知道它已經(jīng)掛機(jī)

了。

SIP/2.0200OK

Via:SIP/2.0/UDP:5060;branch=z9hG4bK392kf

;received=03

To:NikolaTesla<sip:n.tesla@>;tag=76341

From:G.Marconi<sip:marconi@>;tag=a53e42

Call-ID:123456789@

CSeq:1BYE

Content-Length:0

到此,我們已經(jīng)將最簡單的呼叫過程講完了。該過程簡單在于兩個終端之間沒有其它設(shè)備,完全的點(diǎn)

對點(diǎn)連接,它們之間只需要知道對方IP地址即可?,F(xiàn)實(shí)生活中這種呼叫形式是很少見的。后面我們

將繼續(xù)介紹另一種利用代理方式進(jìn)行呼叫連接。

留個疑問:為什么說這種點(diǎn)對點(diǎn)的方式比較少用?

TeslaMarconi

_INVITE

~>

180Ringing

4二

200OK

-4

ACK

?

?Mediasession.

BYE一

?-

200OK

SIP學(xué)習(xí)入門范例(2)

二、通過代理服務(wù)器的SIP呼叫

在前面一個例子中,我們事先假設(shè)兩個終端知道對方IP地址。而在現(xiàn)實(shí)情況下,這種非常少見。因

為IP地址不像是電話號碼,基本上每個人都是固定的,大多數(shù)情況,我們只知道被叫方名字,而并

不知道對方在哪,也不知道對方終端的IP地址。因此今天,我們繼續(xù)介紹另一種呼叫方式,即通過

代理服務(wù)器進(jìn)行呼叫。通過代理服務(wù)器進(jìn)行呼叫,和我們使用HTTP代理上網(wǎng)大同小異。我們這個

例子,只有一個代理服務(wù)器。

PS.因?yàn)檫@里有很多內(nèi)容和第一節(jié)相似,我們大量列舉內(nèi)容,只在個別地方說明

Ml:首先是主叫方Schroedinger發(fā)送Invite請求給代理服務(wù)器。

INVITEsip:werner.heisenberg@munich.deSIP/2.0

v=對于基于代理服務(wù)器的呼叫連接,代理服務(wù)器要處理2部分內(nèi)容?!盄“前的是用戶,后面是

終端設(shè)備地址,需要DNS解析成標(biāo)準(zhǔn)IP地址。

Via:SIP/2.0/UDP03:5060;branch=z9hG4bKmpl7a

Max-Forwards:70

To:Heisenberg<sip:werner.heisenberg@munich.de>

From:E.Schroedinger<sip:schroed5244@>;tag=42

Call-ID:10@100,101.102.103

CSeq:1INVITE

Subject:Whereareyouexactly?

Contact:<sip:schroed5244@>

Content-Type:application/sdp

Content-Length:159

v=0

o=schroed524428908445262890844526INIP403

s=PhoneCall

t=00

c=INIP403

m=audio49170RTP/AVP0

a=rtpmap:0PCMU/8000

代理服務(wù)器在它的定位數(shù)據(jù)庫中查找SIP地址(sip:werner.heisenberg@munich.de)。這里有

兩個步驟:

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

2、代理服務(wù)器將Invite消息轉(zhuǎn)發(fā)到被叫地址,在Invite消息中增加第二Via字段

M2:代理服務(wù)器轉(zhuǎn)發(fā)INVITE消息

INVITEsip:werner.heisenberg@03SIP/2.0

Via:SIP/2.0/UDPproxy.munich.de:5060;branch=z9hG4bK83842.1

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

Via:SIP/2.0/UDP03:5060;branch=z9hG4bKmpl7a

Max-Forwards:69<=經(jīng)過一個跳躍,這里減1

To:Heisenberg<sip:werner.heisenberg@munich.de>

From:E.Schroedinger<sip:schroed5244@>;tag=42

Call-ID:10@100,101.102.103

CSeq:1INVITE

Contact:vsip:schroed5244@pc33,>

Content-Type:application/sdp

Content-Length:159

v=0

o=schroed524428908445262890844526INIP403

s=PhoneCall

c=INIP403

t=00

m=audio49172RTP/AVP0

a=rtpmap:0PCMU/8000

M3:被叫放回鈴180Ringing

SIP/2.0180Ringing

Via:SIP/2.0/UDPproxy.munich.de:5060;branch=z9hG4bK83842.1

;received=05

Via:SIP/2.0/UDP03:5060;branch=z9hG4bKmpl7a

To:Heisenberg<sip:werner.heisenberg@munich.de>;tag=314159

From:E.Schroedinger<sip:schroed5244@>;tag=42

Call-ID:10@03

CSeq:1INVITE

Contac

溫馨提示

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

評論

0/150

提交評論