- 功能協(xié)商
- 性能協(xié)商
- 語(yǔ)音和視頻的安全設置協(xié)商
- 在多媒體會(huì )議中的數據協(xié)商
為了說(shuō)明SDP的具體內容討論,我們首先需要明確呼叫控制協(xié)議的概念。目前,絕大部分的呼叫控制協(xié)議中,市場(chǎng)上主要使用SIP和WebRTC來(lái)實(shí)現呼叫控制。因為篇幅所限和當前實(shí)用性的考慮,我們僅介紹SIP協(xié)議和WebRTC協(xié)議。SIP協(xié)議已經(jīng)部署了很多年,已經(jīng)普遍使用在VoIP的絕大部分場(chǎng)景中。WebRTC是最近幾年比較熱門(mén)的實(shí)時(shí)通信協(xié)議,也逐漸進(jìn)入了應用場(chǎng)景中。本章節,我們將先從呼叫控制協(xié)議介紹開(kāi)始,介紹SIP協(xié)議基本內容和WebRTC協(xié)議的基礎知識。
圖片來(lái)自于互聯(lián)網(wǎng)資源
注意:如果一些讀者已經(jīng)具備了基本的SIP協(xié)議和WebRTC協(xié)議的基礎,可以跳過(guò)本章節的基礎介紹。如果讀者想了解更多完整的SIP協(xié)議和WebRTC介紹文檔,可以查閱本公眾號歷史文檔來(lái)進(jìn)一步學(xué)習。這里,僅為了為SDP協(xié)議的介紹做一個(gè)簡(jiǎn)單的SIP和WebRTC的回顧介紹。
1、呼叫控制協(xié)議
我們知道,一個(gè)簡(jiǎn)單的電話(huà)呼叫涉及了很多其他輔助功能,其目的是保證此呼叫功能正常,并且保證運營(yíng)層面的業(yè)務(wù)監控也正常工作。呼叫控制協(xié)議是電話(huà)網(wǎng)絡(luò )環(huán)境中一個(gè)必不可少的環(huán)節,其主要功能大致包括呼叫數據流量路由控制,增值服務(wù)計費支撐,終端之間的連接性,可靠性傳輸機制,信令控制和媒體通信等功能。在傳統的或者現在的基礎網(wǎng)絡(luò )中,很多控制協(xié)議仍然是核心的協(xié)議,例如,Q.931和H323等具體協(xié)議。此概念將會(huì )涉及太多的底層細節的協(xié)議和歷史介紹,例如,PRI和SS7等相關(guān)協(xié)議。它們通過(guò)電路時(shí)隙或者通道實(shí)現信令控制和語(yǔ)音傳輸。因為篇幅和文章主題的關(guān)系,我們不再討論那些配置。有興趣的讀者可以查閱一些常用的文章來(lái)補充這方面的知識。通過(guò)以上簡(jiǎn)單介紹,我們知道,如果實(shí)現一個(gè)簡(jiǎn)單的,哪怕最簡(jiǎn)單的呼叫都需要呼叫控制協(xié)議參與,否則沒(méi)有辦法發(fā)起呼叫,也沒(méi)有辦法對呼叫拆線(xiàn)執行掛機。在目前大家非常熟悉的VoIP環(huán)境中,SIP是一種非常常見(jiàn)的呼叫控制協(xié)議,基本上是目前主流的呼叫控制協(xié)議。另外,WebRTC也是我們正在逐步使用的呼叫控制協(xié)議。我們在本文章后續部分就重點(diǎn)回顧這兩種協(xié)議,為將來(lái)進(jìn)一步深入討論SDP做一個(gè)準備工作。
2、SIP協(xié)議概要
SIP全稱(chēng)是Session Initiation Protocol。它是我們重點(diǎn)介紹的一種呼叫信令控制協(xié)議,用來(lái)創(chuàng )建,修改和拆線(xiàn)基于網(wǎng)絡(luò )通信的會(huì )話(huà),會(huì )話(huà)由語(yǔ)音視頻和多方視頻數據等構成,通過(guò)RFC3261的規定的請求實(shí)現。SDP作為消息體的在SIP交互中負責雙方媒體協(xié)商,支持能力的協(xié)商。另外,SIP使用RTP/RTCP的傳輸參數支持語(yǔ),視頻和數據的參數。因此,SDP和RTP/RTCP是創(chuàng )建SIP媒體會(huì )話(huà)的最基本的要求。
圖片來(lái)自于互聯(lián)網(wǎng)資源
任何協(xié)議都有其規范的語(yǔ)法結構,SIP協(xié)議也是一樣的。它的基本語(yǔ)法結構和HTTP的HTML語(yǔ)法類(lèi)似。其信令消息包括兩個(gè)部分:消息頭和消息體。通過(guò)各種語(yǔ)法參數設置來(lái)支持SIP協(xié)議中的支持能力,協(xié)商和應用層級的通信。SIP頭消息主要目的是對從呼叫方到被呼叫方的SIP消息進(jìn)行路由管理,信令消息中包含一個(gè)Request-line,它由請求類(lèi)型,目的地的SIP URL,或下一跳(next hop),還有SIP版本構成等。取決于消息體類(lèi)型,SIP消息體是一個(gè)可選項。SIP消息中的消息頭和消息體通過(guò)空白行來(lái)加以區分。消息體構建有太多話(huà)題可以討論,如果讀者有興趣的話(huà),可以參考RFC 3261-13.2.1章節。
如果SIP請求中創(chuàng )建的會(huì )話(huà)中包含了會(huì )話(huà)描述的具體消息內容,會(huì )話(huà)描述中包含了雙方的媒體類(lèi)型和編碼等,那么,消息體中將會(huì )作為SDP包含這些會(huì )話(huà)描述的消息內容。
因為SDP消息包含了很多參數設置,涉及了太多SIP消息的頭和消息體設置,因此,關(guān)于SIP消息的內容,我們這里需要再花費一點(diǎn)時(shí)間做進(jìn)一步的介紹,以便幫助讀者了解后續章節中的SDP內容討論。RFC3261規定了SIP協(xié)議的消息格式,根據官方的描述說(shuō)明,雖然其語(yǔ)法和HTTP/1.1類(lèi)似(客戶(hù)-服務(wù)器端協(xié)議架構),但是SIP協(xié)議是一種請求-響應機制的處理方式,通過(guò)雙方請求消息和對方響應消息來(lái)實(shí)現信令的協(xié)商。因此,其消息構成包括起始行,一個(gè)或者多個(gè)頭消息,空行(表示頭消息結束),最后,還有一個(gè)可選消息體構成。
generic-message = start-line*message-headerCRLF[ message-body ]start-line = Request-Line / Status-Line
具體關(guān)于SIP消息的語(yǔ)法結構,讀者可以參考RFC3261-7章節。提醒讀者,根據RFC3261的規定,無(wú)論是否有可選消息體存在,空行是必須保留的。在SIP消息底部的start-line部分,讀者可以看到,它可以支持Request-Line或者Status-Line。如果是從客戶(hù)端對服務(wù)器端發(fā)送請求的話(huà),start-line就是Request-Line,它包含請求method名稱(chēng),請求URL,協(xié)議版本和CRLF,它們通過(guò)一個(gè)單倍行距隔開(kāi)(SP字符)。沒(méi)有其他額外的空格或者其他字符。SIP消息中Request-Line具體用法格式為:
Request-Line = Method SP Request-URI SP SIP-Version CRLF
在以上語(yǔ)法中,SIP支持了以下Methods:
- REGISTER:用戶(hù)注冊Method
- INVITE,ACK,和CANCEL:用來(lái)呼叫和創(chuàng )建會(huì )話(huà)
- BYE:結束會(huì )話(huà)
- OPTIONS:查詢(xún)服務(wù)器端支持能力
- MESSAGE:即時(shí)聊天
- REFER:呼叫轉移
- SUBSCRIBE和NOTIFY :SIP會(huì )話(huà)相關(guān)的事件管理
- PUBLISH:發(fā)布SIP指定事件狀態(tài)
- UPDATE :更新會(huì )話(huà)參數
- INFO:支持mid-session 信息轉發(fā)
- PRACK:類(lèi)似請求確認
除了我們提到的請求和以上的Request-Line中的method以外,服務(wù)器端回復響應消息來(lái)表示對請求的處理狀態(tài)。響應中的Status code是一個(gè)重要的標識。具體的狀態(tài)碼如下:
在日常的排查活動(dòng)中,系統技術(shù)人員需要以上狀態(tài)碼來(lái)判斷系統所處狀態(tài)。當然,在六大狀態(tài)分類(lèi)中,還有其子分類(lèi),子分類(lèi)中包含了更加詳細的說(shuō)明。用戶(hù)可參考RFC 3261-13.2.2(處理INVITE響應)和21章節來(lái)學(xué)習,這里不再討論。
當然,除了請求methods和響應狀態(tài)碼以外,因為消息體可能需要通過(guò)SIP代理/轉發(fā)服務(wù)器和注冊服務(wù)器的處理節點(diǎn),因此消息體具有很強的靈活性,它可以被讀取,被修改,被移除或者重新處理,為了滿(mǎn)足多種場(chǎng)景的響應,消息體也可能增加一些必要的拓展,包括SIP可選tags標簽,修改的SIP標簽,同時(shí)它也可能增加支持Content type的頭域,以下這些頭域都可能添加到消息體中:Allow, Allow-Events, Content-Disposition, Content-Encoding, Content-Language, Content-Length和Content-Type。以上這些頭域值得介紹在RFC3261-20,此章節介紹了具體的定義。
另外,在SIP消息中,讀者需要了解基本的消息格式,其中請求消息格式和響應消息告訴都有不同的語(yǔ)法結構。兩者的消息內容有明顯的區別:
- 請求消息格式包括三個(gè)主要部分:Request-Line,Header和Message-Body。
- 響應消息格式包括三個(gè)主要部分:Status-Line,Header和 Message-Body。
請求消息格式和響應消息格式對比如下:
請求消息格式規范
關(guān)于消息體更多的規定,讀者可以參考RFC3261-7章節。
接下來(lái),我們討論一下關(guān)于SIP在網(wǎng)絡(luò )拓撲中和其他相關(guān)協(xié)議的關(guān)聯(lián)性。
SIP是一種應用層的協(xié)議規范,和其他的前面所提到的協(xié)議同屬應用層的協(xié)議。它的目的是用來(lái)實(shí)現網(wǎng)絡(luò )媒體的創(chuàng )建服務(wù),電話(huà)呼叫,電話(huà)會(huì )議,視頻會(huì )議,媒體共享等應用。在這些應用服務(wù)中,終端需要支持不同的數據形式,語(yǔ)音編碼,數據文件,視頻編碼等。在這些數據交換的過(guò)程中,用戶(hù)之間的通信可能通過(guò)UDP傳輸/TCP傳輸方式來(lái)傳輸RTP,也需要RTCP來(lái)對媒體流傳輸控制進(jìn)行處理。因此,SIP協(xié)議協(xié)議配合其他的協(xié)議完成整個(gè)通信服務(wù)的處理,其相關(guān)協(xié)議如下示例圖所示:
SIP和其他相關(guān)協(xié)議的關(guān)系
通過(guò)以上圖例讀者可以看到,事實(shí)上,在一個(gè)普通的應用環(huán)境中,一個(gè)環(huán)境可能涉及了很多終端和服務(wù)器端以及各種應用程序的協(xié)商支持,通過(guò)確保雙方功能協(xié)商和性能能力的協(xié)商,確保雙方具有一系列共同確認的參數才能進(jìn)行通信(例如,傳輸方式是否相同,端口是否一致,編碼是否支持)。因此,雙方都認可的,標準的,共同支持的協(xié)商機制是必不可少的。SDP就是SIP協(xié)議中進(jìn)行協(xié)商的標準機制。
通過(guò)以上對SIP以及基本語(yǔ)法的介紹,我們大概了解了SIP的消息和一些必要的請求響應消息體構成。接下來(lái),筆者從宏觀(guān)的角度介紹一下SIP網(wǎng)絡(luò )技術(shù)環(huán)境中一些核心的實(shí)體構件,包括支持SIP場(chǎng)景的客戶(hù)端和服務(wù)器端的功能,以及SIP/SDP整體協(xié)商流程。
如果我們從最基本的SIP網(wǎng)絡(luò )構成中討論的話(huà),基本的SIP網(wǎng)絡(luò )構成包括以下幾個(gè)核心的模塊:各種UA,注冊服務(wù)器,轉發(fā)服務(wù)器,定位服務(wù)器和代理服務(wù)器,還有應用服務(wù)器等。如果實(shí)現完整的SIP媒體通信的話(huà),SIP需要支持至少五種功能:
- 定位服務(wù):決定通信使用的最終終端系統。
- 用戶(hù)有效性:決定被呼叫方是否有意愿加入到通信環(huán)境中。
- 用戶(hù)媒體支持能力:決定雙方通信所需要的媒體和媒體參數
- 會(huì )話(huà)創(chuàng )建:創(chuàng )建會(huì )話(huà),啟動(dòng)ring振鈴等。
- 會(huì )話(huà)管理:轉接,修改會(huì )話(huà)參數,發(fā)起其他服務(wù),結束會(huì )話(huà)等。
通過(guò)以上五種功能的支持,SIP網(wǎng)絡(luò )中的核心構件才能成功工作。這些核心模塊負責以上五種能力的支持。當然,隨著(zhù)當前SIP網(wǎng)絡(luò )的應用場(chǎng)景不斷變化和用戶(hù)業(yè)務(wù)需求的變化,SIP網(wǎng)絡(luò )中有可能各種服務(wù)器的部署不是固定的,因此此圖例不一定完全表示所有的應用場(chǎng)景。關(guān)于SIP服務(wù)器端的討論,用戶(hù)可以參考筆者歷史文章做進(jìn)一步的學(xué)習。
在以上圖例中,我們看到一些核心的模塊包括了SIP UA(User Agent),UA又可分為UAS和UAC,另外,UA是以客戶(hù)端-服務(wù)器端模式的模式工作的用戶(hù),這表示一個(gè)UA實(shí)體,為了滿(mǎn)足SIP的邏輯實(shí)體的要求,它既可能是UAC,又可能是UAS,也是我們通常所的背靠背代理方式。如下示例說(shuō)明了一個(gè)應用場(chǎng)景中兩個(gè)SIP終端通過(guò)兩個(gè)代理的呼叫流程:
兩個(gè)UA通過(guò)不同代理進(jìn)行呼叫整體協(xié)商流程
兩個(gè)UA首先注冊到各自的服務(wù)器端,然后通過(guò)服務(wù)器呼叫另外一個(gè)終端。讀者需要注意,這里假設,Alice在F5 INVITE(標識部分)可能已經(jīng)攜帶了本端SDP的媒體支持能力,而且,Bob收到服務(wù)器端通過(guò)F8 INVITE發(fā)送到請求,也回復了可接受的媒體支持能力。雙方都協(xié)商一致,然后開(kāi)始語(yǔ)音媒體流發(fā)送(F19)。
UA又根據具體呼叫控制角色不同,可能劃分為不同的UA使用角色,電話(huà)會(huì )議就是一個(gè)例子。RFC4579中定義了電話(huà)會(huì )議中的在SIP 構件中UA定義:
Conference-unaware UA:最簡(jiǎn)單的UA,參與電話(huà)會(huì )議,忽略了所有SIP相關(guān)消息。此UA可通過(guò)撥號加入會(huì )議或者被邀請加入會(huì )議。它僅支持RFC 3261規范。
Conference-aware UA-此UA可以支持呼叫控制,另外可以支持SIP轉發(fā)處理,也可以訂閱消息等。
Focus-控制發(fā)起會(huì )議,負責會(huì )議呼叫控制,包含一個(gè)Conference-aware UA。
我們前面已經(jīng)討論,SIP服務(wù)器類(lèi)型支持了多種處理方式,并且都具有不同的處理流程。有時(shí),這些服務(wù)器的功能定位可能互相交叉,因此一些讀者可能比較迷惑。如果讀者單純從定義上了理解的話(huà),可能有引起很多誤解,讀者可以查閱筆者的歷史文檔來(lái)理解這些概念:IPPBX的工作模式SBC/B2BUA的處理方式
深入理解SIP服務(wù)器的注冊和定位服務(wù)流程
3、關(guān)于WebRTC基本介紹
前面,我們簡(jiǎn)單概述了SIP協(xié)議作為呼叫控制協(xié)議的基本內容,利用消息體中的SDP參數進(jìn)行呼叫媒體協(xié)商。WebRTC也是一種呼叫控制協(xié)議,只是WebRTC利用的是瀏覽器的方式。這里,筆者不打算花費時(shí)間再介紹一次WebRTC,筆者以前發(fā)布過(guò)一篇關(guān)于WebRTC的概要,讀者通過(guò)此文章基本上可以理解WebRTC的基本要點(diǎn):
完整WebRTC技術(shù)及應用概要
4、總結
一個(gè)最基本的呼叫場(chǎng)景都至少需要兩個(gè)部分來(lái)完成。首先是呼叫控制協(xié)議的創(chuàng )建,然后才能實(shí)現SDP 媒體協(xié)商的流程。因此,在本章節中,我們介紹了呼叫控制協(xié)議的基本概念,接下來(lái),筆者介紹了呼叫控制協(xié)議中的SIP協(xié)議和WebRTC協(xié)議。在SIP協(xié)議的概要介紹中,我們介紹了SIP消息的基本結構和核心模塊。通過(guò)這些基本的介紹,為我們后續關(guān)于SDP的深入討論打下一個(gè)基礎。在后續章節中,我們將逐步介紹SDP和其相關(guān)規范。
再次說(shuō)明,在本章節中,筆者針對SIP和WebRTC的介紹僅是為了在后續章節中為SDP討論做一個(gè)鋪墊作用,可能有一些內容不是讀者所希望了解的,望見(jiàn)諒。
參考資料:
https://www.ccexpert.us/network-design/call-control-and-transport-protocols.html
https://ribboncommunications.com/company/get-help/glossary/call-control
https://tools.ietf.org/html/rfc5589
https://en.wikipedia.org/wiki/Skinny_Call_Control_Protocol
https://www.itu.int/rec/T-REC-Q.1912.5-200403-S/en
https://tools.ietf.org/html/rfc3261
關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
Asterisk freepbx FreeSBC技術(shù)文檔: www.freepbx.org.cn
融合通信/IPPBX商業(yè)解決方案:www.hiastar.com
如何使用FreeSBC,qq技術(shù)分享群:334023047