會(huì)話發(fā)起協(xié)議(SIP)是在VoIP技術(shù)中使用的最常見的協(xié)議之一。 它是一種應(yīng)用層協(xié)議,與其他應(yīng)用層協(xié)議協(xié)同工作,以控制Internet上的多媒體通信會(huì)話。
在進(jìn)一步討論之前,讓我們首先了解有關(guān)VoIP的幾點(diǎn)。
VOIP是一種允許您通過互聯(lián)網(wǎng)提供語(yǔ)音和多媒體(視頻,圖片)內(nèi)容的技術(shù)。 它是任何時(shí)間,任何地方與互聯(lián)網(wǎng)的可用性最便宜的溝通方式之一。
VOIP的一些優(yōu)勢(shì)包括 -
低成本
可移植性
無(wú)額外電纜
靈活性
視頻會(huì)議
對(duì)于VOIP呼叫,您需要的是一臺(tái)帶有互聯(lián)網(wǎng)連接的電腦/筆記本電腦/手機(jī)。 下圖描述了VoIP呼叫如何發(fā)生。
有了這個(gè)基礎(chǔ),讓我們回到SIP。
以下是關(guān)于SIP的幾點(diǎn)注意事項(xiàng) -
SIP是用于通過因特網(wǎng)協(xié)議創(chuàng)建,修改和終止多媒體會(huì)話的信令協(xié)議。 會(huì)話不過是兩個(gè)端點(diǎn)之間的簡(jiǎn)單調(diào)用。 端點(diǎn)可以是智能電話,膝上型計(jì)算機(jī)或可以通過因特網(wǎng)接收和發(fā)送多媒體內(nèi)容的任何設(shè)備。
SIP是由IETF(因特網(wǎng)工程任務(wù)組)標(biāo)準(zhǔn)定義的應(yīng)用層協(xié)議。 它在 RFC 3261 中定義。
SIP體現(xiàn)了客戶端 - 服務(wù)器體系結(jié)構(gòu)以及來(lái)自 HTTP 的URL和URI以及來(lái)自 SMTP 的文本編碼方案和標(biāo)題樣式的使用。
SIP利用SDP(會(huì)話描述協(xié)議)的幫助,SDP描述了用于通過IP網(wǎng)絡(luò)傳遞語(yǔ)音和視頻的會(huì)話和RTP(實(shí)時(shí)傳輸協(xié)議)。
SIP可用于雙方(單播)或多方(多播)會(huì)話。
其他SIP應(yīng)用包括文件傳輸,即時(shí)消息,視頻會(huì)議,在線游戲和蒸汽多媒體分發(fā)。
基本上SIP是一種應(yīng)用層協(xié)議。 它是用于創(chuàng)建和終止與一個(gè)或多個(gè)參與者的會(huì)話的簡(jiǎn)單網(wǎng)絡(luò)信令協(xié)議。 SIP協(xié)議被設(shè)計(jì)為獨(dú)立于底層傳輸協(xié)議,因此SIP應(yīng)用可以在TCP,UDP或其他低層網(wǎng)絡(luò)協(xié)議上運(yùn)行。
下圖說(shuō)明了SIP在事物的一般方案中的位置 -
通常,SIP協(xié)議用于兩個(gè)或更多個(gè)端點(diǎn)之間的互聯(lián)網(wǎng)電話和多媒體分發(fā)。 例如,一個(gè)人可以使用SIP發(fā)起到另一個(gè)人的電話呼叫,或者某人可以與許多參與者創(chuàng)建電話會(huì)議。
SIP協(xié)議被設(shè)計(jì)為非常簡(jiǎn)單,具有有限的命令集。 它也是基于文本的,因此任何人都可以讀取在SIP會(huì)話中的端點(diǎn)之間傳遞的SIP消息。
有一些實(shí)體幫助SIP創(chuàng)建其網(wǎng)絡(luò)。 在SIP中,每個(gè)網(wǎng)絡(luò)元件由類似地址的 SIP URI (統(tǒng)一資源標(biāo)識(shí)符)標(biāo)識(shí)。 以下是網(wǎng)絡(luò)元素 -
它是端點(diǎn)和SIP網(wǎng)絡(luò)的最重要的網(wǎng)絡(luò)元件之一。 端點(diǎn)可以啟動(dòng),修改或終止會(huì)話。 用戶代理是SIP網(wǎng)絡(luò)中最智能的設(shè)備或網(wǎng)絡(luò)元件。 它可以是軟電話,移動(dòng)電話或筆記本電腦。
用戶代理在邏輯上分為兩個(gè)部分 -
用戶代理客戶端(UAC) - 發(fā)送請(qǐng)求并接收響應(yīng)的實(shí)體。
用戶代理服務(wù)器(UAS) - 接收請(qǐng)求并發(fā)送響應(yīng)的實(shí)體。
SIP基于客戶端 - 服務(wù)器架構(gòu),其中呼叫者的電話充當(dāng)發(fā)起呼叫的客戶端,并且被叫者的電話充當(dāng)響應(yīng)呼叫的服務(wù)器。
它是從用戶代理接收請(qǐng)求并將其轉(zhuǎn)發(fā)給另一個(gè)用戶的網(wǎng)絡(luò)元素。
基本上代理服務(wù)器的作用就像一個(gè)路由器。
它具有一些智能來(lái)理解SIP請(qǐng)求并且在URI的幫助下向前發(fā)送它。
代理服務(wù)器位于兩個(gè)用戶代理之間。
源和目標(biāo)之間最多可以有70個(gè)代理服務(wù)器。
有兩種類型的代理服務(wù)器 -
無(wú)狀態(tài)代理服務(wù)器 - 它僅轉(zhuǎn)發(fā)接收的消息。 這種類型的服務(wù)器不存儲(chǔ)呼叫或事務(wù)的任何信息。
狀態(tài)代理服務(wù)器 - 此類型的代理服務(wù)器會(huì)跟蹤收到的每個(gè)請(qǐng)求和響應(yīng),如果需要,將來(lái)可以使用它。 如果沒有來(lái)自另一方的響應(yīng),它可以重傳請(qǐng)求。
注冊(cè)服務(wù)器接受來(lái)自用戶代理的注冊(cè)請(qǐng)求。 它幫助用戶在網(wǎng)絡(luò)中驗(yàn)證自己。 它將URI和用戶的位置存儲(chǔ)在數(shù)據(jù)庫(kù)中,以幫助同一域中的其他SIP服務(wù)器。
請(qǐng)看下面的示例,顯示SIP注冊(cè)的過程。
這里呼叫者想要注冊(cè)到TMC域。 因此它向TMC的注冊(cè)服務(wù)器發(fā)送注冊(cè)請(qǐng)求,并且服務(wù)器在授權(quán)客戶端時(shí)返回200 OK響應(yīng)。
重定向服務(wù)器接收請(qǐng)求并在由注冊(cè)器創(chuàng)建的位置數(shù)據(jù)庫(kù)中查找請(qǐng)求的預(yù)期接收者。
重定向服務(wù)器使用數(shù)據(jù)庫(kù)獲取位置信息,并以3xx(重定向響應(yīng))向用戶作出響應(yīng)。 我們將在本教程的后面討論響應(yīng)代碼。
位置服務(wù)器向重定向和代理服務(wù)器提供關(guān)于呼叫者可能的位置的信息。
只有代理服務(wù)器或重定向服務(wù)器可以聯(lián)系位置服務(wù)器。
下圖描述了每個(gè)網(wǎng)絡(luò)元素在建立會(huì)話時(shí)所扮演的角色。
SIP被構(gòu)造為分層協(xié)議,這意味著其行為是根據(jù)一組相當(dāng)獨(dú)立的處理階段來(lái)描述的,每個(gè)階段之間只有松散的耦合。
SIP的最低層是其語(yǔ)法和編碼。 其編碼使用擴(kuò)充的背景 - 諾爾表單語(yǔ)法(BNF)指定。
第二層是傳輸層。 它定義了客戶端如何發(fā)送請(qǐng)求和接收響應(yīng),以及服務(wù)器如何通過網(wǎng)絡(luò)接收請(qǐng)求和發(fā)送響應(yīng)。 所有SIP元素都包含傳輸層。
接下來(lái)是交易層。 事務(wù)是由客戶機(jī)事務(wù)(使用傳輸層)發(fā)送到服務(wù)器事務(wù)的請(qǐng)求,以及從服務(wù)器事務(wù)發(fā)送回客戶機(jī)的對(duì)該請(qǐng)求的所有響應(yīng)。 用戶代理客戶端(UAC)完成的任何任務(wù)都使用一系列事務(wù)進(jìn)行。 無(wú)狀態(tài)代理不包含事務(wù)層。
交易層上方的圖層稱為交易使用者。 除了無(wú)狀態(tài)代理,每個(gè)SIP實(shí)體都是事務(wù)用戶。
下圖顯示了SIP會(huì)話的基本呼叫流程。
下面給出了上述調(diào)用流程的逐步解釋 -
發(fā)送到代理服務(wù)器的INVITE請(qǐng)求負(fù)責(zé)啟動(dòng)會(huì)話。
代理服務(wù)器立即向呼叫者(Alice)發(fā)送 100 Trying 響應(yīng)以停止INVITE請(qǐng)求的重傳。
代理服務(wù)器在位置服務(wù)器中搜索Bob的地址。 在獲得地址之后,它進(jìn)一步轉(zhuǎn)發(fā)INVITE請(qǐng)求。
此后,由Bob產(chǎn)生的 180響鈴(臨時(shí)響應(yīng))被返回給Alice。
Bob在接聽電話后立即生成 200 OK 響應(yīng)。
Bob收到 200 OK 時(shí),Bob會(huì)收到來(lái)自Alice的 ACK 。
同時(shí),會(huì)話建立并且RTP分組(對(duì)話)開始從兩端流動(dòng)。
在對(duì)話之后,任何參與者(Alice或Bob)可以發(fā)送 BYE 請(qǐng)求以終止會(huì)話。
BYE 直接從Alice到Bob繞過代理服務(wù)器。
最后,Bob發(fā)送 200 OK 響應(yīng)以確認(rèn)BYE并且會(huì)話終止。
在上述基本呼叫流程中,三個(gè)事務(wù)(標(biāo)記為1,2,3)可用。
完整的呼叫(從INVITE到200 OK)稱為 Dialog 。
代理如何幫助將一個(gè)用戶與另一個(gè)用戶連接? 讓我們?cè)谙旅娴膱D的幫助下找出。
圖中所示的拓?fù)浞Q為SIP梯形。 該過程如下進(jìn)行 -
當(dāng)呼叫者發(fā)起呼叫時(shí),向代理服務(wù)器發(fā)送INVITE消息。 在接收到INVITE時(shí),代理服務(wù)器嘗試在DNS服務(wù)器的幫助下解析被調(diào)用者的地址。
在獲得下一個(gè)路由之后,呼叫者的代理服務(wù)器(代理1,也稱為出站代理服務(wù)器)將INVITE請(qǐng)求轉(zhuǎn)發(fā)到被叫者的代理服務(wù)器,該代理服務(wù)器充當(dāng)被叫者的入站代理服務(wù)器(代理2)。
入站代理服務(wù)器與位置服務(wù)器聯(lián)系以獲取有關(guān)用戶注冊(cè)的被叫方地址的信息。
在從位置服務(wù)器獲取信息之后,它將呼叫轉(zhuǎn)發(fā)到其目的地。
一旦用戶代理知道他們的地址,他們可以繞過呼叫,即對(duì)話直接傳遞。
SIP消息有兩種類型 - 請(qǐng)求和響應(yīng)。
請(qǐng)求的開始行包含定義請(qǐng)求的方法,以及定義請(qǐng)求發(fā)送位置的Request-URI。
類似地,響應(yīng)的開始行包含響應(yīng)代碼。
SIP請(qǐng)求是用于建立通信的代碼。 為了補(bǔ)充它們,存在 SIP響應(yīng),其通常指示請(qǐng)求是成功還是失敗。
這些稱為方法的SIP請(qǐng)求使得SIP消息可行。
方法可以被認(rèn)為是SIP請(qǐng)求,因?yàn)樗鼈冋?qǐng)求由另一個(gè)用戶代理或服務(wù)器采取的特定動(dòng)作。
方法分為兩種類型 -
核心方法
擴(kuò)展方法
下面討論六種核心方法。
INVITE用于發(fā)起與用戶代理的會(huì)話。 換句話說(shuō),INVITE方法用于在用戶代理之間建立媒體會(huì)話。
INVITE可以在消息正文中包含呼叫者的媒體信息。
如果INVITE已經(jīng)接收到成功響應(yīng)(2xx)或者已經(jīng)發(fā)送了ACK,則認(rèn)為會(huì)話被建立。
成功的INVITE請(qǐng)求在兩個(gè)用戶代理之間建立對(duì)話,其繼續(xù),直到發(fā)送BYE以終止會(huì)話。
在已建立的對(duì)話中發(fā)送的INVITE被稱為 re-INVITE 。
Re-INVITE用于更改會(huì)話特征或刷新對(duì)話框的狀態(tài)。
以下代碼顯示如何使用INVITE。
INVITE sips:Bob@TMC.com SIP/2.0 Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9 Max-Forwards: 70 From: Alice<sips:Alice@TTP.com>;tag = 1234567 To: Bob<sips:Bob@TMC.com> Call-ID: 12345601@192.168.2.1 CSeq: 1 INVITE Contact: <sips:Alice@client.ANC.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v = 0 o = Alice 2890844526 2890844526 IN IP4 client.ANC.com s = Session SDP c = IN IP4 client.ANC.com t = 3034423619 0 m = audio 49170 RTP/AVP 0 a = rtpmap:0 PCMU/8000
BYE是用于終止已建立的會(huì)話的方法。 這是一個(gè)SIP請(qǐng)求,可以由主叫方或被叫方發(fā)送以結(jié)束會(huì)話。
它不能由代理服務(wù)器發(fā)送。
BYE請(qǐng)求通常繞過代理服務(wù)器端到端路由。
BYE不能發(fā)送到掛起的INVITE或未建立的會(huì)話。
REGISTER請(qǐng)求執(zhí)行用戶代理的注冊(cè)。 此請(qǐng)求由用戶代理發(fā)送到注冊(cè)服務(wù)器。
REGISTER請(qǐng)求可以被轉(zhuǎn)發(fā)或代理,直到它到達(dá)指定域的權(quán)威注冊(cè)器。
它在正在注冊(cè)的用戶的 To 頭中攜帶AOR(記錄地址)。
REGISTER請(qǐng)求包含時(shí)間段(3600秒)。
一個(gè)用戶代理可以代表另一個(gè)用戶代理發(fā)送REGISTER請(qǐng)求。 這稱為第三方注冊(cè)。 這里, From 標(biāo)簽包含代表 To 標(biāo)頭中標(biāo)識(shí)的一方提交注冊(cè)的一方的URI。
CANCEL用于終止未建立的會(huì)話。 用戶代理使用此請(qǐng)求取消之前發(fā)起的待處理呼叫嘗試。
它可以由用戶代理或代理服務(wù)器發(fā)送。
CANCEL是逐跳請(qǐng)求,即,它通過用戶代理之間的元素并接收由下一個(gè)有狀態(tài)元素產(chǎn)生的響應(yīng)。
ACK用于確認(rèn)對(duì)INVITE方法的最終響應(yīng)。 ACK總是向著INVITE的方向。如果在INVITE中不可用,ACK可以包含SDP主體(媒體特性)。
ACK可以不被用于修改已經(jīng)在初始INVITE中發(fā)送的媒體描述。
接收ACK的狀態(tài)代理必須確定ACK是否應(yīng)當(dāng)向下游轉(zhuǎn)發(fā)到另一個(gè)代理或用戶代理。
對(duì)于2xx響應(yīng),ACK是端到端的,但是對(duì)于所有其他最終響應(yīng),當(dāng)涉及狀態(tài)代理時(shí),其工作在逐跳基礎(chǔ)上。
OPTIONS方法用于向用戶代理或代理服務(wù)器查詢其功能,并發(fā)現(xiàn)其當(dāng)前可用性。 對(duì)請(qǐng)求的響應(yīng)列出了用戶代理或服務(wù)器的功能。 代理永遠(yuǎn)不會(huì)生成OPTIONS請(qǐng)求。
用戶代理使用SUBSCRIBE來(lái)建立訂閱,以獲得關(guān)于特定事件的通知。
它包含一個(gè) Expires 頭字段,用于指示訂閱的持續(xù)時(shí)間。
在該時(shí)間段過去之后,訂閱將自動(dòng)終止。
訂閱在用戶代理之間建立對(duì)話。
您可以在到期時(shí)間之前在對(duì)話框中發(fā)送另一個(gè)SUBSCRIBE再次重新訂閱。
將收到來(lái)自用戶的訂閱的200 OK。
用戶可以通過發(fā)送另一個(gè)SUBSCRIBE方法取消訂閱,Expires值為0(零)。
NOTIFY用于由用戶代理獲取特定事件的發(fā)生。 通常,當(dāng)訂閱者和通知者之間存在訂閱時(shí),NOTIFY將在對(duì)話框中觸發(fā)。
每個(gè)NOTIFY將得到200 OK響應(yīng),如果它被通知器接收。
NOTIFY包含指示事件的 Event 頭字段和指示訂閱當(dāng)前狀態(tài)的 subscriptionstate 頭字段。
NOTIFY總是在訂閱的開始和終止時(shí)發(fā)送。
PUBLISH由用戶代理用于向服務(wù)器發(fā)送事件狀態(tài)信息。
當(dāng)有多個(gè)事件信息來(lái)源時(shí),PUBLISH是最有用的。
PUBLISH請(qǐng)求類似于NOTIFY,除了它不是在對(duì)話框中發(fā)送。
PUBLISH請(qǐng)求必須包含 Expires 頭字段和 Min-Expires 頭字段。
REFER由用戶代理使用來(lái)引用另一個(gè)用戶代理來(lái)訪問對(duì)話框的URI。
REFER必須包含 Refer-To 標(biāo)題。 這是REFER的必需標(biāo)題。
REFER可以在對(duì)話框內(nèi)部或外部發(fā)送。
A 202 Accepted 將觸發(fā)REFER請(qǐng)求,指示其他用戶代理已接受引用。
INFO由用戶代理用來(lái)向與其建立媒體會(huì)話的另一用戶代理發(fā)送呼叫信令信息。
這是一個(gè)端到端的請(qǐng)求。
代理將始終轉(zhuǎn)發(fā)INFO請(qǐng)求。
如果會(huì)話未建立,UPDATE用于修改會(huì)話的狀態(tài)。 用戶可以使用UPDATE更改編解碼器。
如果建立了會(huì)話,則使用重新邀請(qǐng)來(lái)改變/更新會(huì)話。
PRACK用于確認(rèn)接收到臨時(shí)響應(yīng)(1XX)的可靠傳輸。
通常,當(dāng)客戶端接收到包含 RSeq 可靠序列號(hào)和支持的:100rel 頭部的臨時(shí)響應(yīng)時(shí),PRACK就會(huì)生成。
PRACK在 rack 標(biāo)題中包含(RSeq&amp; plus; CSeq)值。
PRACK方法適用于所有臨時(shí)響應(yīng),除了100 Trying響應(yīng),其從未可靠地傳送。
PRACK可以包含消息體; 它可以用于提供/應(yīng)答交換。
它用于使用SIP發(fā)送即時(shí)消息。 IM通常包括從事文本會(huì)話的參與者實(shí)時(shí)交換的短消息。
MESSAGE可以在對(duì)話框內(nèi)或?qū)υ捒蛲獍l(fā)送。
MESSAGE的內(nèi)容作為 MIME 附件在郵件正文中傳送。
通常接收到 200 OK 響應(yīng)以指示消息已在其目的地傳送。
SIP響應(yīng)是由用戶代理服務(wù)器(UAS)或SIP服務(wù)器生成的用于回復(fù)由客戶端生成的請(qǐng)求的消息。 它可以是防止UAC重傳請(qǐng)求的正式確認(rèn)。
響應(yīng)可以包含UAC所需的信息的一些附加報(bào)頭字段。
SIP有六個(gè)響應(yīng)。
1xx到5xx已從HTTP借用,6xx已在SIP中引入。
1xx被認(rèn)為是臨時(shí)響應(yīng),其余的是最終響應(yīng)。
S.No。 | 功能&amp; 描述 |
---|---|
1 |
1xx: Provisional/Informational Responses
信息響應(yīng)用于指示呼叫進(jìn)度。 通常響應(yīng)是端到端的(除了100 Trying)。 |
2 |
2xx: Success Responses
這類響應(yīng)用于指示請(qǐng)求已被接受。 |
3 |
3xx: Redirect Responses
通常這些類響應(yīng)由重定向服務(wù)器響應(yīng)INVITE發(fā)送。 它們也稱為重定向類響應(yīng)。 |
4 |
4xx: Client Failure Responses
客戶端錯(cuò)誤響應(yīng)指示無(wú)法滿足請(qǐng)求,因?yàn)閺腢AC側(cè)識(shí)別出一些錯(cuò)誤。 |
5 |
5xx: Server Failure Response
此類響應(yīng)用于指示由于服務(wù)器錯(cuò)誤而無(wú)法處理請(qǐng)求。 |
6 |
6xx: Global Failure Response
此響應(yīng)類指示服務(wù)器知道請(qǐng)求在嘗試的任何地方都將失敗。 因此,請(qǐng)求不應(yīng)發(fā)送到其他位置。 |
報(bào)頭是傳達(dá)關(guān)于消息的信息的SIP消息的組件。 它被構(gòu)造為頭字段序列。
SIP頭字段在大多數(shù)情況下遵循與HTTP頭字段相同的規(guī)則。 標(biāo)題字段定義為 Header:字段,其中Header用于表示標(biāo)題字段名稱,字段是包含信息的標(biāo)記集合。 每個(gè)字段包含一個(gè)字段名稱,后跟冒號(hào)(“:")和字段值(即字段名稱:字段值)。
許多常見的SIP報(bào)頭字段具有緊湊形式,其中報(bào)頭字段名稱由單個(gè)小寫字符表示。 一些例子如下 -
標(biāo)題 | 緊湊型 |
---|---|
To | T |
Via | V |
Call-ID | I |
Contact | M |
From | F |
Subject | S |
Content-Length | I |
下圖顯示了典型SIP頭的結(jié)構(gòu)。
根據(jù)其在SIP中的用法,標(biāo)題被分類如下:
SDP代表會(huì)話描述協(xié)議。 它用于描述參與者通過網(wǎng)絡(luò)理解的格式的多媒體會(huì)話。 根據(jù)該描述,一方?jīng)Q定是否加入會(huì)議或者何時(shí)或如何加入會(huì)議。
會(huì)議的所有者通過發(fā)送包含會(huì)話描述的多播消息在網(wǎng)絡(luò)上廣告它。 所有者的名稱,會(huì)話的名稱,編碼,時(shí)間等。根據(jù)這些信息,廣告的接收者做出關(guān)于參與會(huì)話的決定。
SDP通常包含在通常稱為SIP的會(huì)話發(fā)起協(xié)議的主體部分中。
SDP在RFC 2327中定義。SDP消息由一系列稱為字段的行組成,其名稱由單個(gè)小寫字母縮寫,并且以所需順序來(lái)簡(jiǎn)化解析。
SDP的目的是在多媒體會(huì)話中傳達(dá)關(guān)于媒體流的信息,以幫助參與者加入或收集特定會(huì)話的信息。
SDP是一個(gè)短結(jié)構(gòu)化文本描述。
它傳達(dá)會(huì)話的名稱和目的,媒體,協(xié)議,編解碼格式,定時(shí)和傳輸信息。
臨時(shí)參與者檢查這些信息并決定是否加入會(huì)話,以及如果它決定如何以及何時(shí)加入會(huì)話。
格式具有< type>形式的條目。 =< value>,其中< type> 定義唯一會(huì)話參數(shù),并且< value> 提供該參數(shù)的特定值。
SDP消息的一般形式是 -
SDP消息的一般形式是 - ...
行以單個(gè)小寫字母開頭,例如x。 字母和=之間從不存在任何空格,每個(gè)參數(shù)之間只有一個(gè)空格。 每個(gè)字段都有一定數(shù)量的參數(shù)。
會(huì)話描述(*表示可選)
v =字段包含SDP版本號(hào)。 因?yàn)镾DP的當(dāng)前版本是0,所以有效的SDP消息將始終以v = 0開始。
o =字段包含有關(guān)會(huì)話發(fā)起者和會(huì)話標(biāo)識(shí)符的信息。 此字段用于唯一標(biāo)識(shí)會(huì)話。
該字段包含 -
o =< username>< session-id>< version>< network-type>< address-type>
用戶名參數(shù)包含發(fā)起方的登錄名或主機(jī)。
session-id 參數(shù)是用于確保唯一性的網(wǎng)絡(luò)時(shí)間協(xié)議(NTP)時(shí)間戳或隨機(jī)數(shù)。
版本是一個(gè)數(shù)字字段,對(duì)于會(huì)話的每個(gè)更改都會(huì)增加,也建議為NTP時(shí)間戳。
對(duì)于Internet,網(wǎng)絡(luò)類型始終為IN。 address-type參數(shù)為IPv4或IPv6地址的IP4或IP6(點(diǎn)分十進(jìn)制形式或完全限定的主機(jī)名)。
s =字段包含會(huì)話的名稱。 它可以包含任何非零數(shù)字的字符。 可選的i =字段包含有關(guān)會(huì)話的信息。 它可以包含任意數(shù)量的字符。
可選的u =字段包含具有關(guān)于會(huì)話的更多信息的統(tǒng)一資源指示符(URI)
可選的e =字段包含會(huì)話主機(jī)的電子郵件地址。 可選的p =字段包含電話號(hào)碼。
c =字段包含有關(guān)介質(zhì)連接的信息。
該字段包含 -
c =< network-type>< address-type>< connection-address>
對(duì)于Internet, network-type 參數(shù)定義為IN。
地址類型定義為IPv4地址的IP4和IPv6地址的IP6。
connection-address 是將發(fā)送媒體數(shù)據(jù)包的IP地址或主機(jī),可以是多播或單播。
如果組播,則connection-address字段包含 -
connection-address = base-multicast-address / ttl / number-of-addresses
其中 ttl 是生存時(shí)間值,并且地址數(shù)量指示從基本多播地址開始包括多少個(gè)連續(xù)的多播地址。
可選b =字段包含有關(guān)所需帶寬的信息。 它的形式 -
b = modifier:bandwidth - value
t =字段包含會(huì)話的開始時(shí)間和停止時(shí)間。
t =開始時(shí)間停止時(shí)間
可選的r =字段包含有關(guān)可以在NTP或天( d 小>),小時(shí)( h 小>)或分鐘( > m )。
可選的 z =字段包含有關(guān)時(shí)區(qū)偏移的信息。 如果發(fā)生的會(huì)話跨越從夏令時(shí)到標(biāo)準(zhǔn)時(shí)間的更改,則使用此字段,反之亦然。
可選的 m =字段包含有關(guān)媒體會(huì)話類型的信息。 該字段包含 -
m =媒體端口傳輸格式列表
媒體參數(shù)是音頻,視頻,文本,應(yīng)用程序,消息,圖像或控件。 port參數(shù)包含端口號(hào)。
傳輸參數(shù)包含使用的傳輸協(xié)議或RTP配置文件。
格式列表包含有關(guān)介質(zhì)的更多信息。 通常,它包含在RTP音頻視頻簡(jiǎn)檔中定義的媒體有效載荷類型。
Example: m = audio 49430 RTP/AVP 0 6 8 99
這三個(gè)編解碼器之一可以用于音頻媒體會(huì)話。 如果意圖是建立三個(gè)音頻通道,則將使用三個(gè)單獨(dú)的媒體字段。
可選的a =字段包含前面的媒體會(huì)話的屬性。 此字段可用于擴(kuò)展SDP以提供有關(guān)介質(zhì)的更多信息。 如果SDP用戶沒有完全理解,則可以忽略屬性字段。 媒體字段中列出的每個(gè)媒體有效內(nèi)容類型可以有一個(gè)或多個(gè)屬性字段。
SDP中的屬性可以是
會(huì)話級(jí)別意味著該屬性在SDP中的第一個(gè)媒體行之前列出。 如果是這種情況,該屬性將應(yīng)用于其下的所有媒體行。
媒體級(jí)別表示它在媒體行之后列出。 在這種情況下,屬性僅適用于該特定媒體流。
SDP可以包括會(huì)話級(jí)和媒體級(jí)屬性。 如果相同的屬性同時(shí)出現(xiàn),則媒體級(jí)屬性將覆蓋該特定媒體流的會(huì)話級(jí)屬性。 請(qǐng)注意,連接數(shù)據(jù)字段也可以是會(huì)話級(jí)或媒體級(jí)。
下面給出一個(gè)示例會(huì)話描述,取自RFC 2327 -
v = 0 o = mhandley2890844526 2890842807 IN IP4 126.16.64.4 s = SDP Seminar i = A Seminar on the session description protocol u = http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps e = mjh@isi.edu(Mark Handley) c = IN IP4 224.2.17.12/127 t = 2873397496 2873404696 a = recvonly m = audio 49170 RTP/AVP 0 m = video 51372 RTP/AVP 31 m = application 32416udp wb a = orient:portrait
SDP與SIP的使用在SDP提議回答RFC 3264中給出。SIP中的默認(rèn)消息體類型是 application / sdp 。
主叫方列出他們?cè)敢庠赟DP中接收的媒體能力,通常在INVITE或ACK中。
被叫方在對(duì)INVITE的200 OK響應(yīng)中列出它們的媒體能力。
SDP的典型SIP使用包括以下字段:版本,起源,主題,時(shí)間,連接以及一個(gè)或多個(gè)媒體和屬性。
主題和時(shí)間字段不由SIP使用,但包括為了兼容性。
主題和時(shí)間字段不由SIP使用,但包括為了兼容性。
時(shí)間字段通常設(shè)置為t = 00.SIP使用連接,媒體和屬性字段在UA之間建立會(huì)話。
原始字段對(duì)SIP的使用有限。
session-id通常在整個(gè)SIP會(huì)話中保持不變。
每次更改SDP時(shí),版本都會(huì)增加。 如果發(fā)送的SDP與之前發(fā)送的SDP沒有變化,則版本保持不變。
由于要使用的媒體會(huì)話和編解碼器的類型是連接協(xié)商的一部分,SIP可以使用SDP來(lái)指定多個(gè)替代媒體類型并且選擇性地接受或拒絕那些媒體類型。
offer / answer規(guī)范RFC 3264建議對(duì)每個(gè)媒體字段使用包含a = rtpmap:的屬性。 通過將SDP響應(yīng)中相應(yīng)的媒體字段的端口號(hào)設(shè)置為零來(lái)拒絕媒體流。
在以下示例中,呼叫者Tesla想要使用兩個(gè)可能的音頻編解碼器和在初始INVITE中攜帶的SDP中的視頻編解碼器來(lái)建立音頻和視頻呼叫 -
v = 0 o = John 0844526 2890844526 IN IP4 172.22.1.102 s = - c = IN IP4 172.22.1.102 t = 0 0 m = audio 6000 RTP/AVP 97 98 a = rtpmap:97 AMR/16000/1 a = rtpmap:98 AMR-WB/8000/1 m = video 49172 RTP/AVP 32 a = rtpmap:32 MPV/90000
編解碼器由RTP / AVP配置文件編號(hào)97,98引用。
被叫方Marry應(yīng)答呼叫,為第一媒體字段選擇第二編解碼器,并且拒絕第二媒體字段,只想要AMR會(huì)話。
v = 0 o = Marry 2890844526 2890844526 IN IP4 172.22.1.110 s = - c = IN IP4 200.201.202.203 t = 0 0 m = audio 60000 RTP/AVP 8 a = rtpmap:97 AMR/16000 m = video 0 RTP/AVP 32
如果此僅音頻呼叫不可接受,則Tom將發(fā)送ACK,然后發(fā)送BYE以取消呼叫。 否則,將建立音頻會(huì)話并交換RTP分組。
如該示例所示,除非保持媒體字段的數(shù)量和順序,否則呼叫方將不知道被叫方正在接受和拒絕哪些媒體會(huì)話。
提供/回答規(guī)則在以下部分中總結(jié)。
SDP報(bào)價(jià)必須包括所有必需的SDP字段(這包括v =,o =,s =,c =和t =)。 這些是SDP中的必填字段。
它通常包括一個(gè)媒體字段( m = ),但它不必。 媒體行包含按優(yōu)先順序列出的所有編解碼器。 唯一的例外是,如果端點(diǎn)支持大量的編解碼器,最可能被接受或最優(yōu)選應(yīng)該被列出。 不同的媒體類型包括音頻,視頻,文本,MSRP,BFCP等。
SDP對(duì)報(bào)價(jià)的回答必須根據(jù)以下規(guī)則構(gòu)建:
答案必須具有與答案相同順序的相同數(shù)量的 m = 行。
可以通過將端口號(hào)設(shè)置為0來(lái)拒絕單個(gè)媒體流。
通過發(fā)送非零端口號(hào)接受流。
每個(gè)媒體類型的列出的有效載荷必須是報(bào)價(jià)中列出的有效載荷的子集。
對(duì)于動(dòng)態(tài)有效載荷,不需要在每個(gè)方向上使用相同的動(dòng)態(tài)有效載荷數(shù)。 通常,只選擇單個(gè)有效載荷。
任一方可以發(fā)起另一個(gè)提議/應(yīng)答交換以修改會(huì)話。 修改會(huì)話時(shí),必須遵循以下規(guī)則:
原始( o = )線路版本號(hào)必須與發(fā)送的最后一個(gè)版本號(hào)相同,這表示此SDP與前一個(gè)交換相同,或者可以遞增一,表示新 必須解析的SDP。
優(yōu)惠必須包含所有現(xiàn)有媒體行,并且必須按相同的順序發(fā)送。
附加的媒體流可以添加到 m = 行列表的末尾。
可以通過將端口號(hào)設(shè)置為0來(lái)刪除現(xiàn)有媒體流。此媒體行必須保留在SDP中以及此會(huì)話的所有將來(lái)的提供/應(yīng)答交換。
呼叫中的一方可以暫時(shí)將另一方暫停。 這通過發(fā)送具有與原始INVITE的SDP相同的SDP但具有 a = sendonly 屬性的INVITE來(lái)完成。
通過發(fā)送具有 a = sendrecv 屬性的另一個(gè)INVITE,該調(diào)用再次激活。 下圖顯示了呼叫保持的呼叫流程。
個(gè)人移動(dòng)性是在多個(gè)設(shè)備上擁有常量標(biāo)識(shí)符的功能。 SIP使用REGISTER方法支持基本的個(gè)人移動(dòng)性,其允許移動(dòng)設(shè)備改變其到因特網(wǎng)的IP地址和連接點(diǎn),并且仍然能夠接收呼入呼叫。
SIP還可以支持服務(wù)移動(dòng)性 - 移動(dòng)時(shí)用戶保持相同服務(wù)的能力
設(shè)備通過簡(jiǎn)單的SIP注冊(cè)將其聯(lián)系URI與記錄的地址綁定。 根據(jù)設(shè)備IP地址,注冊(cè)授權(quán)此信息在SIP網(wǎng)絡(luò)中自動(dòng)更新。
在切換期間,用戶代理在不同運(yùn)營(yíng)商之間路由,其中它必須再次向作為AOR的聯(lián)系人注冊(cè)另一服務(wù)提供商。
例如,讓我們以下面的調(diào)用流程為例。 UA已經(jīng)臨時(shí)接收到具有新服務(wù)提供商的新SIP URI。 UA然后執(zhí)行雙重注冊(cè) -
第一次注冊(cè)是使用新的服務(wù)運(yùn)營(yíng)商,它將設(shè)備的Contact URI與新的服務(wù)提供商的AOR URI綁定。
第二個(gè)REGISTER請(qǐng)求被路由回原始服務(wù)提供者,并提供新的服務(wù)提供者的AOR作為聯(lián)系URI。
如稍后在呼叫流程中所示,當(dāng)請(qǐng)求進(jìn)入原始服務(wù)提供商的網(wǎng)絡(luò)時(shí),INVITE被重定向到新的服務(wù)提供商,然后新的服務(wù)提供商將呼叫路由到用戶。
對(duì)于第一次注冊(cè),包含設(shè)備URI的郵件將是 -
REGISTER sip:visited.registrar1.com SIP/2.0 Via: SIP/2.0/UDP 172.22.1.102:5060;branch = z9hG4bK97a7ea349ce0fca Max-Forwards: 70 To: Tom <sip:UA1@registrar1.in> From: Tom <sip:UA1@registrar1.in>;tag = 72d65a24 Call-ID: 4e719d1c1fc9000803630373300@172.22.1.102 CSeq: 1 REGISTER Contact: <sip:Tom@172.22.1.102:5060> Expires: 600000 Content-Length: 0
具有漫游URI的第二注冊(cè)消息將是 -
REGISTER sip:home.registrar2.in SIP/2.0 Via: SIP/2.0/UDP 172.22.1.102:5060;branch = z9hG4bKah4vn2u Max-Forwards: 70 To: Tom <sip:UA1@registrar2.in> From: Tom <sip:UA1@registrar2.in>;tag = 45375 Call-ID:87nr43i@172.22.1.102 CSeq: 6421 REGISTER Contact: <sip:UA1@registrar2.in> Content-Length: 0
在上圖中表示的第一個(gè)INVITE將被發(fā)送到sip:registrar2.in; 第二INVITE將被發(fā)送到sip:sip:Tom@registrar2.in,其將被轉(zhuǎn)發(fā)到 sip:Tom@172.22.1.102 。 它到達(dá)Tom并允許建立會(huì)話。 定期兩個(gè)注冊(cè)都需要刷新。
用戶代理可以在會(huì)話期間更改其IP地址,因?yàn)樗鼜囊粋€(gè)網(wǎng)絡(luò)交換到另一個(gè)網(wǎng)絡(luò)。 基本SIP支持此場(chǎng)景,因?yàn)閷?duì)話框中的re-INVITE可用于更新聯(lián)系URI并更改SDP中的媒體信息。
看看下面圖中提到的呼叫流程。
這里,Tom檢測(cè)到一個(gè)新的網(wǎng)絡(luò),
使用DHCP獲取新的IP地址,和
執(zhí)行re-INVITE以允許信令和媒體流到新的IP地址。
如果UA可以從兩個(gè)網(wǎng)絡(luò)接收媒體,則中斷可以忽略。 如果不是這種情況,則幾個(gè)媒體分組可能丟失,導(dǎo)致呼叫的輕微中斷。
re-INVITE將顯示如下 -
INVITE sip:Jerry@TTP.com SIP/2.0 Via: SIP/2.0/UDP 172.22.1.102:5060;branch = z9hG4bK918f5a84fe6bf7a Max-Forwards: 70 To: <sip:Harry@TTP.com> From: sip:Tom@PPT.com;tag = 70133df4 Call-ID: 76d4861c19c CSeq: 1 INVITE Accept: application/sdp Accept-Language: en Allow: INVITE,ACK,CANCEL,BYE,INFO,OPTIONS,REFER,NOTIFY,SUBSCRIBE Contact: <sip:172.22.1.102:5060>; Content-Type: application/sdp Content-Length: 168 v = 0 o = PPT 40467 40468 IN IP4 192.168.2.1 s = - c = IN IP4 192.168.2.1 b = AS:49 t = 0 0 b = RR:0 b = RS:0 a = rtpmap:97 AMR/8000/1 m = audio 6000 RTP/AVP 96 a = fmtp:102 0-15 a = ptime:20 a = maxptime:240
re-INVITE在Via和Contact報(bào)頭字段和SDP媒體信息中包含Bowditch的新IP地址。
在中間移動(dòng)性中,實(shí)際路由集(SIP消息必須穿越的SIP代理集)必須改變。 我們不能在midcall移動(dòng)中使用re-INVITE
例如,如果NAT穿越需要代理,則必須更改聯(lián)系URI - 必須創(chuàng)建一個(gè)新對(duì)話框。 因此,它必須發(fā)送一個(gè)帶有Replaces標(biāo)頭的新INVITE,它標(biāo)識(shí)現(xiàn)有會(huì)話。
注意 - 假設(shè)A&amp; B都在一個(gè)調(diào)用中,如果A得到另一個(gè)INVITE(我們說(shuō)從C)替換頭(應(yīng)該匹配現(xiàn)有的對(duì)話框),則A必須接受INVITE并終止與B的會(huì)話,并將所有資源轉(zhuǎn)移到新形成的對(duì)話框。
呼叫流程如下圖所示。 它類似于使用re-INVITE的先前呼叫流程,除了當(dāng)接受具有Replaces的INVITE時(shí)自動(dòng)生成BYE以終止現(xiàn)有對(duì)話。
下面是在這種情況下要注意的要點(diǎn) -
Tom和Jerry之間的現(xiàn)有對(duì)話包括舊的訪問代理服務(wù)器。
使用新無(wú)線網(wǎng)絡(luò)的新對(duì)話框需要包括新的訪問代理服務(wù)器。
結(jié)果,由Tom發(fā)送具有Replaces的INVITE,其創(chuàng)建包括新訪問的代理服務(wù)器但不包括舊的訪問的代理服務(wù)器的新對(duì)話。
當(dāng)Jerry接受INVITE時(shí),會(huì)自動(dòng)發(fā)送一個(gè)BYE,以終止通過現(xiàn)在不再包含在會(huì)話中的舊訪問代理服務(wù)器路由的舊對(duì)話。
使用來(lái)自INVITE中的SDP的Tom的新IP地址來(lái)建立所得到的媒體會(huì)話。
SIP中的服務(wù)可以在代理中或在UA中提供。 除非用戶的設(shè)備被相同地配置有相同的服務(wù),否則提供服務(wù)移動(dòng)性以及個(gè)人移動(dòng)性可能是有挑戰(zhàn)性的。
SIP可以輕松地支持Internet上的服務(wù)移動(dòng)性。 當(dāng)連接到Internet時(shí),配置為在印度使用一組代理的UA仍然可以在歐洲漫游時(shí)使用這些代理。 它對(duì)媒體會(huì)話的質(zhì)量沒有任何影響,因?yàn)槊襟w總是直接在兩個(gè)UA之間流動(dòng),并且不穿過SIP代理服務(wù)器。
端點(diǎn)駐留服務(wù)僅在端點(diǎn)連接到Internet時(shí)可用。 如果端點(diǎn)已臨時(shí)丟失其Internet連接,則端點(diǎn)中實(shí)現(xiàn)的端點(diǎn)服務(wù)(例如呼叫轉(zhuǎn)發(fā)服務(wù))將失敗。 因此,使用SIP代理服務(wù)器在網(wǎng)絡(luò)中實(shí)現(xiàn)一些服務(wù)。
有時(shí),代理服務(wù)器將單個(gè)SIP呼叫轉(zhuǎn)發(fā)到多個(gè)SIP端點(diǎn)。 這個(gè)過程被稱為分叉。 這里單個(gè)呼叫可以同時(shí)響鈴多個(gè)端點(diǎn)。
使用SIP分叉,您可以讓您的桌面電話與手機(jī)上的軟件電話或SIP電話同時(shí)響鈴,從而可以輕松地從任一設(shè)備接聽電話。
一般來(lái)說(shuō),在辦公室里,假設(shè)老板無(wú)法接聽電話或離開,SIP分機(jī)允許秘書接聽電話他的分機(jī)。
如果有一個(gè)有狀態(tài)的代理可用,因?yàn)樗枰獔?zhí)行和響應(yīng)從它收到的許多,分叉將是可能的。
我們有兩種類型的分叉 -
在這種情況下,代理服務(wù)器將把INVITE分叉到例如兩個(gè)設(shè)備(UA2,UA3)。 兩個(gè)設(shè)備將產(chǎn)生180響鈴,并且接收呼叫的任何人將產(chǎn)生200 OK。 首先到達(dá)發(fā)起者的響應(yīng)(假設(shè)UA2)將與UA2建立會(huì)話。 對(duì)于其他響應(yīng),將觸發(fā)CANCEL。
如果發(fā)起者同時(shí)接收到這兩個(gè)響應(yīng),則基于q值,它將轉(zhuǎn)發(fā)響應(yīng)。
在這種情況下,代理服務(wù)器將INVITE分叉到一個(gè)設(shè)備(UA2)。 如果UA2在那時(shí)不可用或忙,則代理將它分配到另一個(gè)設(shè)備(UA3)。
分支標(biāo)識(shí)幫助代理匹配對(duì)分叉請(qǐng)求的響應(yīng)。 沒有分支ID,代理服務(wù)器將無(wú)法了解分叉響應(yīng)。 分支標(biāo)識(shí)將在Via標(biāo)頭中可用。
標(biāo)簽由UAC使用以區(qū)分來(lái)自不同UAS的多個(gè)最終響應(yīng)。 UAS無(wú)法解析請(qǐng)求是否已分叉。 因此,它需要添加一個(gè)標(biāo)簽。
代理還可以添加標(biāo)簽,如果它生成最終響應(yīng),他們從來(lái)不插入標(biāo)簽到請(qǐng)求或響應(yīng)他們轉(zhuǎn)發(fā)。
也有可能單個(gè)請(qǐng)求也可以由多個(gè)代理服務(wù)器分叉。 因此,fork的代理將向它創(chuàng)建的分支添加自己的唯一ID。
呼叫支路是指兩個(gè)用戶代理之間的一對(duì)一信令關(guān)系。 呼叫ID是參考呼叫的SIP消息中攜帶的唯一標(biāo)識(shí)符。 呼叫是呼叫線路的集合。
UAC通過發(fā)送INVITE開始。 由于分叉,它可以從不同的UA接收多個(gè)200OK。 每個(gè)對(duì)應(yīng)于相同呼叫中的不同呼叫支路。
UAC通過發(fā)送INVITE開始。 由于分叉,它可以從不同的UA接收多個(gè)200OK。 每個(gè)對(duì)應(yīng)于相同呼叫中的不同呼叫支路。...
呼叫支路的兩個(gè)方向上的CSeq空間是獨(dú)立的。 在單個(gè)方向上,序列號(hào)對(duì)于每個(gè)事務(wù)遞增。
對(duì)于企業(yè)用戶來(lái)說(shuō),語(yǔ)音郵件是非常普遍的。 這是一個(gè)電話應(yīng)用程序。 談到圖片,當(dāng)被叫方不可用或無(wú)法接收呼叫時(shí),PBX將通知主叫方留下語(yǔ)音消息。
如果被叫方的號(hào)碼不可達(dá),用戶代理將獲得3xx響應(yīng)或重定向到語(yǔ)音郵件服務(wù)器。 然而,需要某種SIP分機(jī)來(lái)向語(yǔ)音郵件系統(tǒng)指示要使用哪個(gè)郵箱 - 即,播放哪個(gè)問候語(yǔ)以及在哪里存儲(chǔ)所記錄的消息。 有兩種方法來(lái)實(shí)現(xiàn)這一點(diǎn) -
通過使用SIP頭字段擴(kuò)展
通過使用Request-URI來(lái)發(fā)信號(hào)通知這個(gè)信息
假設(shè)用戶 sip:Tom@tutorialspoint.com 在sip:voicemail.tutorialspoint.com處具有語(yǔ)音郵件系統(tǒng),其提供語(yǔ)音郵件,INVITE的Request-URI,當(dāng)它被轉(zhuǎn)發(fā)到語(yǔ)音郵件服務(wù)器時(shí) 可能看起來(lái)像 -
sip:voicemail.tutorialspoint.com;target = sip:Tom@tutorialspoint.com;cause = 486
下圖顯示了Request-URI如何攜帶郵箱標(biāo)識(shí)符和原因(這里為486)。
我們知道,代理服務(wù)器可以是無(wú)狀態(tài)的或有狀態(tài)的。 在這里,在本章中,我們將討論更多關(guān)于代理服務(wù)器和SIP路由。
無(wú)狀態(tài)代理服務(wù)器簡(jiǎn)單地轉(zhuǎn)發(fā)它接收的消息。 這種服務(wù)器不存儲(chǔ)任何呼叫或交易的信息。
狀態(tài)代理服務(wù)器跟蹤它接收的每個(gè)請(qǐng)求和響應(yīng)。 如果需要,它可以使用未來(lái)存儲(chǔ)的信息。 如果它沒有從另一方接收到響應(yīng),它可以重傳請(qǐng)求。
狀態(tài)代理在轉(zhuǎn)發(fā)請(qǐng)求之后記住請(qǐng)求,因此它們可以使用它來(lái)提前路由。 狀態(tài)代理維護(hù)事務(wù)狀態(tài)。 交易意味著交易狀態(tài),不是呼叫狀態(tài)。
事務(wù)不像無(wú)狀態(tài)的狀態(tài)代理那么快。
如果需要,狀態(tài)代理可以分叉和重傳(例如,例如呼叫前轉(zhuǎn)忙)。
記錄 - 路由報(bào)頭被想要在相同呼叫id的后續(xù)請(qǐng)求的路徑中的代理插入到請(qǐng)求中。 然后由用戶代理使用它來(lái)路由后續(xù)請(qǐng)求。
通過頭由服務(wù)器插入請(qǐng)求以檢測(cè)循環(huán)并幫助響應(yīng)找到他們的方式回到客戶端。 這有助于只有響應(yīng)到達(dá)其目的地。
UA自己在發(fā)送請(qǐng)求時(shí)在Via報(bào)頭字段中生成并添加其自己的地址。
轉(zhuǎn)發(fā)請(qǐng)求的代理將Via頭字段包含其自己的地址添加到Via頭字段列表的頂部。
生成對(duì)請(qǐng)求的響應(yīng)的代理或UA將請(qǐng)求中的所有Via報(bào)頭字段按順序復(fù)制到響應(yīng)中,然后將響應(yīng)發(fā)送到在頂部Via報(bào)頭字段中指定的地址。
接收響應(yīng)的代理檢查頂部Via頭字段并匹配其自身的地址。 如果不匹配,則響應(yīng)已被丟棄。
然后刪除頂部Via頭字段,并將響應(yīng)轉(zhuǎn)發(fā)到在下一個(gè)Via頭字段中指定的地址。
Via頭字段包含協(xié)議名,版本號(hào)和傳輸(SIP / 2.0 / UDP,SIP / 2.0 / TCP等),并包含端口號(hào)和參數(shù),如received,rport,branch。
如果UA或代理從與在頂部Via頭字段中指定的地址不同的地址接收到請(qǐng)求,則將所接收的標(biāo)簽添加到Via報(bào)頭字段。
分支參數(shù)通過UA和代理被添加到Via報(bào)頭字段,其被計(jì)算為Request-URI的哈希函數(shù),以及To,F(xiàn)rom,Call-ID和CSeq數(shù)。
SIP(軟電話)和PSTN(舊電話)都是不同的網(wǎng)絡(luò),并使用不同的語(yǔ)言。 因此,我們需要一個(gè)翻譯器(網(wǎng)關(guān)在這里)在這兩個(gè)網(wǎng)絡(luò)之間通信。
讓我們舉一個(gè)例子來(lái)說(shuō)明SIP電話如何通過PSTN網(wǎng)關(guān)向PSTN發(fā)出電話呼叫。
在此示例中,Tom (sip:tom@tutorialspoint.com)是sip電話,Jerry使用全球電話號(hào)碼+91401234567。
下圖顯示了通過網(wǎng)關(guān)從SIP到PSTN的呼叫流。
下面給出了從SIP電話到PSTN的呼叫時(shí)所進(jìn)行的所有過程的逐步解釋。
首先,(Tom)SIP電話撥打全球號(hào)碼+91401234567到達(dá)Jerry。 SIP用戶代理將其理解為全局編號(hào),并使用DNS將其轉(zhuǎn)換為請(qǐng)求uri并觸發(fā)請(qǐng)求。
SIP電話直接向網(wǎng)關(guān)發(fā)送INVITE。
網(wǎng)關(guān)通過選擇SS7 ISUP中繼線到PSTN中的下一個(gè)電話交換機(jī)來(lái)發(fā)起進(jìn)入PSTN的呼叫。
來(lái)自INVITE的撥號(hào)數(shù)字被映射到ISUP IAM。 ISUP地址完成消息(ACM)由PSTN發(fā)回以指示中繼已經(jīng)創(chuàng)建。
電話產(chǎn)生鈴聲,并進(jìn)入電話交換機(jī)。 網(wǎng)關(guān)將ACM映射到183會(huì)話進(jìn)度響應(yīng),其包含指示網(wǎng)關(guān)將用于橋接來(lái)自PSTN的音頻的RTP端口的SDP。
在接收到183時(shí),呼叫者的UAC開始接收從網(wǎng)關(guān)發(fā)送的RTP分組,并將該音頻呈現(xiàn)給呼叫者,使得他們知道被叫者在PSTN中前進(jìn)。
當(dāng)被叫方應(yīng)答電話時(shí),呼叫完成,這使得電話交換機(jī)向網(wǎng)關(guān)發(fā)送應(yīng)答消息(ANM)。
網(wǎng)關(guān)然后在兩個(gè)方向上切斷PSTN音頻連接,并向呼叫者發(fā)送200 OK響應(yīng)。 由于RTP媒體路徑已經(jīng)建立,網(wǎng)關(guān)在183中回復(fù)SDP,但是不會(huì)改變RTP連接。
UAC發(fā)送ACK以完成SIP信令交換。 由于在ISUP中沒有等效消息,網(wǎng)關(guān)吸收ACK。
呼叫者發(fā)送BYE到網(wǎng)關(guān)終止。 網(wǎng)關(guān)將BYE映射到ISUP釋放消息(REL)。
網(wǎng)關(guān)向BYE發(fā)送200OK,并從PSTN接收RLC。
編解碼器,編碼器 - 解碼器的簡(jiǎn)稱,做兩個(gè)基本操作 -
首先,它將模擬語(yǔ)音信號(hào)轉(zhuǎn)換為其等效數(shù)字形式,以便可以容易地發(fā)送。
此后,它將壓縮的數(shù)字信號(hào)轉(zhuǎn)換回其原始模擬形式,以便可以重放。
市場(chǎng)上有許多編解碼器 - 有些是免費(fèi)的,有些則需要許可。 編解碼器在聲音質(zhì)量上不同,并且?guī)捪鄳?yīng)地變化。
硬件設(shè)備如電話和網(wǎng)關(guān)支持幾種不同的編解碼器。 當(dāng)彼此交談時(shí),他們談判使用哪個(gè)編解碼器。
在這里,在本章中,我們將討論一些流行的SIP音頻編解碼器,被廣泛使用。
G.711是國(guó)際電聯(lián)在1972年引入的用于數(shù)字電話的編解碼器。 編解碼器有兩種變體: A-Law 正在歐洲和國(guó)際電話鏈接中使用, uLaw 用于美國(guó)和日本。
G.711使用對(duì)數(shù)壓縮。 它將每個(gè)16位樣本壓縮為8位,從而實(shí)現(xiàn)1:2的壓縮比。
一個(gè)方向的比特率為64 kbit / s,因此一個(gè)呼叫消耗128 kbit / s。
G.711是與PSTN網(wǎng)絡(luò)使用的相同的編解碼器,因此它提供最好的語(yǔ)音質(zhì)量。 然而,它消耗比其他編解碼器更多的帶寬。
它在我們有很多帶寬的局域網(wǎng)中工作的最好。
G.729是一種具有低帶寬要求的編解碼器; 它提供良好的音頻質(zhì)量。
編解碼器以10毫秒長(zhǎng)的幀編碼音頻。 給定8kHz的采樣頻率,10ms幀包含80個(gè)音頻樣本。
編解碼算法將每個(gè)幀編碼為10個(gè)字節(jié),因此在一個(gè)方向上產(chǎn)生的比特率為8 kbit / s。
G.729是許可編解碼器。 想要使用此編解碼器的最終用戶應(yīng)購(gòu)買實(shí)現(xiàn)它的硬件(無(wú)論是VoIP電話還是網(wǎng)關(guān))。
G.729的常用變體是G.729a。 它與原始編解碼器線路兼容,但具有較低的CPU要求。
G.723.1是國(guó)際電聯(lián)宣布的競(jìng)爭(zhēng)的結(jié)果,目的是設(shè)計(jì)一個(gè)編解碼器,允許呼叫超過28.8和33 kbit / s調(diào)制解調(diào)器鏈路。
我們有兩個(gè)G.723.1的變體。 它們都在30ms的音頻幀(即240個(gè)采樣)上操作,但算法不同。
第一變體的比特率是6.4kbit / s,而對(duì)于第二變體,它是5.3kbit / s。
兩個(gè)變體的編碼幀分別為24和20字節(jié)長(zhǎng)。
GSM 06.10是為GSM移動(dòng)網(wǎng)絡(luò)設(shè)計(jì)的編解碼器。 它也稱為GSM全速率。
這種GSM編解碼器的變體可以自由使用,所以你經(jīng)常會(huì)在開源VoIP應(yīng)用中找到它。
編解碼器對(duì)20ms長(zhǎng)(即160個(gè)樣本)的音頻幀進(jìn)行操作,并且將每個(gè)幀壓縮為33字節(jié),因此所得的比特率為13kbit /。
背靠背用戶代理(B2BUA)是SIP應(yīng)用程序中的邏輯網(wǎng)絡(luò)元素。 它是一種SIP UA,它接收SIP請(qǐng)求,然后重新格式化請(qǐng)求,并將其作為新請(qǐng)求發(fā)送出去。
與代理服務(wù)器不同,它維護(hù)對(duì)話狀態(tài),并且必須參與在其建立的對(duì)話框上發(fā)送的所有請(qǐng)求。 B2BUA打破了SIP的端到端性質(zhì)。
B2BUA代理在電話呼叫的兩個(gè)端點(diǎn)之間操作,并且將通信信道劃分為兩個(gè)呼叫分支。 B2BUA是UAC和UAS的串聯(lián)。 它參與呼叫兩端之間的所有SIP信令,它已經(jīng)建立。 由于對(duì)話服務(wù)提供商中可用的B2BUA可以實(shí)現(xiàn)一些增值特征。
在始發(fā)呼叫段中,B2BUA充當(dāng)用戶代理服務(wù)器(UAS),并將該請(qǐng)求作為用戶代理客戶端(UAC)處理到目的地端,處理 端點(diǎn)之間的信令。
B2BUA維護(hù)其處理的調(diào)用的完整狀態(tài)。 B2BUA的每一側(cè)作為RFC 3261中規(guī)定的標(biāo)準(zhǔn)SIP網(wǎng)絡(luò)元件操作。
B2BUA提供以下功能 -
呼叫管理(計(jì)費(fèi),自動(dòng)呼叫斷開,呼叫轉(zhuǎn)移等)
網(wǎng)絡(luò)互通(可能與協(xié)議適配)
隱藏網(wǎng)絡(luò)內(nèi)部(私有地址,網(wǎng)絡(luò)拓?fù)涞?
通常,B2BUA也在媒體網(wǎng)關(guān)中實(shí)現(xiàn)以橋接媒體流以完全控制會(huì)話。
許多專用交換機(jī)(PBX)企業(yè)電話系統(tǒng)包含B2BUA邏輯。
一些防火墻內(nèi)置了ALG(應(yīng)用層網(wǎng)關(guān))功能,允許防火墻授權(quán)SIP和媒體流量,同時(shí)仍然保持高水平的安全性。
另一種常見類型的B2BUA稱為會(huì)話邊界控制器(SBC)。
更多建議: