您當(dāng)前的位置是:  首頁 > 資訊 > 文章精選 >
 首頁 > 資訊 > 文章精選 >

完整SIP/SDP媒體協(xié)商概論-SIP/WebRTC概要

2020-02-17 10:46:41   作者: james.zhu   來源:Asterisk開源派   評(píng)論:0  點(diǎn)擊:


  Session Description Protocol(簡稱是SDP)全稱是會(huì)話描述協(xié)議,此協(xié)議用來創(chuàng)建一種協(xié)商機(jī)制,這種協(xié)商機(jī)制是由呼叫控制協(xié)議創(chuàng)建的介于兩個(gè)呼叫用戶之間的會(huì)話進(jìn)行,協(xié)商機(jī)制支持的四大協(xié)商方式是:
  • 功能協(xié)商
  • 性能協(xié)商
  • 語音和視頻的安全設(shè)置協(xié)商
  • 在多媒體會(huì)議中的數(shù)據(jù)協(xié)商

  為了說明SDP的具體內(nèi)容討論,我們首先需要明確呼叫控制協(xié)議的概念。目前,絕大部分的呼叫控制協(xié)議中,市場上主要使用SIP和WebRTC來實(shí)現(xiàn)呼叫控制。因?yàn)槠藓彤?dāng)前實(shí)用性的考慮,我們僅介紹SIP協(xié)議和WebRTC協(xié)議。SIP協(xié)議已經(jīng)部署了很多年,已經(jīng)普遍使用在VoIP的絕大部分場景中。WebRTC是最近幾年比較熱門的實(shí)時(shí)通信協(xié)議,也逐漸進(jìn)入了應(yīng)用場景中。本章節(jié),我們將先從呼叫控制協(xié)議介紹開始,介紹SIP協(xié)議基本內(nèi)容和WebRTC協(xié)議的基礎(chǔ)知識(shí)。

  圖片來自于互聯(lián)網(wǎng)資源

  注意:如果一些讀者已經(jīng)具備了基本的SIP協(xié)議和WebRTC協(xié)議的基礎(chǔ),可以跳過本章節(jié)的基礎(chǔ)介紹。如果讀者想了解更多完整的SIP協(xié)議和WebRTC介紹文檔,可以查閱本公眾號(hào)歷史文檔來進(jìn)一步學(xué)習(xí)。這里,僅為了為SDP協(xié)議的介紹做一個(gè)簡單的SIP和WebRTC的回顧介紹。

  1、呼叫控制協(xié)議

  我們知道,一個(gè)簡單的電話呼叫涉及了很多其他輔助功能,其目的是保證此呼叫功能正常,并且保證運(yùn)營層面的業(yè)務(wù)監(jiān)控也正常工作。呼叫控制協(xié)議是電話網(wǎng)絡(luò)環(huán)境中一個(gè)必不可少的環(huán)節(jié),其主要功能大致包括呼叫數(shù)據(jù)流量路由控制,增值服務(wù)計(jì)費(fèi)支撐,終端之間的連接性,可靠性傳輸機(jī)制,信令控制和媒體通信等功能。在傳統(tǒng)的或者現(xiàn)在的基礎(chǔ)網(wǎng)絡(luò)中,很多控制協(xié)議仍然是核心的協(xié)議,例如,Q.931和H323等具體協(xié)議。此概念將會(huì)涉及太多的底層細(xì)節(jié)的協(xié)議和歷史介紹,例如,PRI和SS7等相關(guān)協(xié)議。它們通過電路時(shí)隙或者通道實(shí)現(xiàn)信令控制和語音傳輸。因?yàn)槠臀恼轮黝}的關(guān)系,我們不再討論那些配置。有興趣的讀者可以查閱一些常用的文章來補(bǔ)充這方面的知識(shí)。通過以上簡單介紹,我們知道,如果實(shí)現(xiàn)一個(gè)簡單的,哪怕最簡單的呼叫都需要呼叫控制協(xié)議參與,否則沒有辦法發(fā)起呼叫,也沒有辦法對(duì)呼叫拆線執(zhí)行掛機(jī)。在目前大家非常熟悉的VoIP環(huán)境中,SIP是一種非常常見的呼叫控制協(xié)議,基本上是目前主流的呼叫控制協(xié)議。另外,WebRTC也是我們正在逐步使用的呼叫控制協(xié)議。我們在本文章后續(xù)部分就重點(diǎn)回顧這兩種協(xié)議,為將來進(jìn)一步深入討論SDP做一個(gè)準(zhǔn)備工作。

  2、SIP協(xié)議概要

  SIP全稱是Session Initiation Protocol。它是我們重點(diǎn)介紹的一種呼叫信令控制協(xié)議,用來創(chuàng)建,修改和拆線基于網(wǎng)絡(luò)通信的會(huì)話,會(huì)話由語音視頻和多方視頻數(shù)據(jù)等構(gòu)成,通過RFC3261的規(guī)定的請(qǐng)求實(shí)現(xiàn)。SDP作為消息體的在SIP交互中負(fù)責(zé)雙方媒體協(xié)商,支持能力的協(xié)商。另外,SIP使用RTP/RTCP的傳輸參數(shù)支持語,視頻和數(shù)據(jù)的參數(shù)。因此,SDP和RTP/RTCP是創(chuàng)建SIP媒體會(huì)話的最基本的要求。

  圖片來自于互聯(lián)網(wǎng)資源

  任何協(xié)議都有其規(guī)范的語法結(jié)構(gòu),SIP協(xié)議也是一樣的。它的基本語法結(jié)構(gòu)和HTTP的HTML語法類似。其信令消息包括兩個(gè)部分:消息頭和消息體。通過各種語法參數(shù)設(shè)置來支持SIP協(xié)議中的支持能力,協(xié)商和應(yīng)用層級(jí)的通信。SIP頭消息主要目的是對(duì)從呼叫方到被呼叫方的SIP消息進(jìn)行路由管理,信令消息中包含一個(gè)Request-line,它由請(qǐng)求類型,目的地的SIP URL,或下一跳(next hop),還有SIP版本構(gòu)成等。取決于消息體類型,SIP消息體是一個(gè)可選項(xiàng)。SIP消息中的消息頭和消息體通過空白行來加以區(qū)分。消息體構(gòu)建有太多話題可以討論,如果讀者有興趣的話,可以參考RFC 3261-13.2.1章節(jié)。

  如果SIP請(qǐng)求中創(chuàng)建的會(huì)話中包含了會(huì)話描述的具體消息內(nèi)容,會(huì)話描述中包含了雙方的媒體類型和編碼等,那么,消息體中將會(huì)作為SDP包含這些會(huì)話描述的消息內(nèi)容。

  因?yàn)镾DP消息包含了很多參數(shù)設(shè)置,涉及了太多SIP消息的頭和消息體設(shè)置,因此,關(guān)于SIP消息的內(nèi)容,我們這里需要再花費(fèi)一點(diǎn)時(shí)間做進(jìn)一步的介紹,以便幫助讀者了解后續(xù)章節(jié)中的SDP內(nèi)容討論。RFC3261規(guī)定了SIP協(xié)議的消息格式,根據(jù)官方的描述說明,雖然其語法和HTTP/1.1類似(客戶-服務(wù)器端協(xié)議架構(gòu)),但是SIP協(xié)議是一種請(qǐng)求-響應(yīng)機(jī)制的處理方式,通過雙方請(qǐng)求消息和對(duì)方響應(yīng)消息來實(shí)現(xiàn)信令的協(xié)商。因此,其消息構(gòu)成包括起始行,一個(gè)或者多個(gè)頭消息,空行(表示頭消息結(jié)束),最后,還有一個(gè)可選消息體構(gòu)成。

  generic-message = start-line*message-headerCRLF[ message-body ]start-line = Request-Line / Status-Line

  具體關(guān)于SIP消息的語法結(jié)構(gòu),讀者可以參考RFC3261-7章節(jié)。提醒讀者,根據(jù)RFC3261的規(guī)定,無論是否有可選消息體存在,空行是必須保留的。在SIP消息底部的start-line部分,讀者可以看到,它可以支持Request-Line或者Status-Line。如果是從客戶端對(duì)服務(wù)器端發(fā)送請(qǐng)求的話,start-line就是Request-Line,它包含請(qǐng)求method名稱,請(qǐng)求URL,協(xié)議版本和CRLF,它們通過一個(gè)單倍行距隔開(SP字符)。沒有其他額外的空格或者其他字符。SIP消息中Request-Line具體用法格式為:

  Request-Line = Method SP Request-URI SP SIP-Version CRLF

  在以上語法中,SIP支持了以下Methods:

  • REGISTER:用戶注冊Method
  • INVITE,ACK,和CANCEL:用來呼叫和創(chuàng)建會(huì)話
  • BYE:結(jié)束會(huì)話
  • OPTIONS:查詢服務(wù)器端支持能力
  • MESSAGE:即時(shí)聊天
  • REFER:呼叫轉(zhuǎn)移
  • SUBSCRIBE和NOTIFY :SIP會(huì)話相關(guān)的事件管理
  • PUBLISH:發(fā)布SIP指定事件狀態(tài)
  • UPDATE :更新會(huì)話參數(shù)
  • INFO:支持mid-session 信息轉(zhuǎn)發(fā)
  • PRACK:類似請(qǐng)求確認(rèn)

  除了我們提到的請(qǐng)求和以上的Request-Line中的method以外,服務(wù)器端回復(fù)響應(yīng)消息來表示對(duì)請(qǐng)求的處理狀態(tài)。響應(yīng)中的Status code是一個(gè)重要的標(biāo)識(shí)。具體的狀態(tài)碼如下:

  在日常的排查活動(dòng)中,系統(tǒng)技術(shù)人員需要以上狀態(tài)碼來判斷系統(tǒng)所處狀態(tài)。當(dāng)然,在六大狀態(tài)分類中,還有其子分類,子分類中包含了更加詳細(xì)的說明。用戶可參考RFC 3261-13.2.2(處理INVITE響應(yīng))和21章節(jié)來學(xué)習(xí),這里不再討論。

  當(dāng)然,除了請(qǐng)求methods和響應(yīng)狀態(tài)碼以外,因?yàn)橄Ⅲw可能需要通過SIP代理/轉(zhuǎn)發(fā)服務(wù)器和注冊服務(wù)器的處理節(jié)點(diǎn),因此消息體具有很強(qiáng)的靈活性,它可以被讀取,被修改,被移除或者重新處理,為了滿足多種場景的響應(yīng),消息體也可能增加一些必要的拓展,包括SIP可選tags標(biāo)簽,修改的SIP標(biāo)簽,同時(shí)它也可能增加支持Content type的頭域,以下這些頭域都可能添加到消息體中:Allow, Allow-Events, Content-Disposition, Content-Encoding, Content-Language, Content-Length和Content-Type。以上這些頭域值得介紹在RFC3261-20,此章節(jié)介紹了具體的定義。

  另外,在SIP消息中,讀者需要了解基本的消息格式,其中請(qǐng)求消息格式和響應(yīng)消息告訴都有不同的語法結(jié)構(gòu)。兩者的消息內(nèi)容有明顯的區(qū)別:

  • 請(qǐng)求消息格式包括三個(gè)主要部分:Request-Line,Header和Message-Body。
  • 響應(yīng)消息格式包括三個(gè)主要部分:Status-Line,Header和 Message-Body。

  請(qǐng)求消息格式和響應(yīng)消息格式對(duì)比如下:


 請(qǐng)求消息格式規(guī)范

  響應(yīng)消息格式規(guī)范

  關(guān)于消息體更多的規(guī)定,讀者可以參考RFC3261-7章節(jié)。

  接下來,我們討論一下關(guān)于SIP在網(wǎng)絡(luò)拓?fù)渲泻推渌嚓P(guān)協(xié)議的關(guān)聯(lián)性。

  SIP是一種應(yīng)用層的協(xié)議規(guī)范,和其他的前面所提到的協(xié)議同屬應(yīng)用層的協(xié)議。它的目的是用來實(shí)現(xiàn)網(wǎng)絡(luò)媒體的創(chuàng)建服務(wù),電話呼叫,電話會(huì)議,視頻會(huì)議,媒體共享等應(yīng)用。在這些應(yīng)用服務(wù)中,終端需要支持不同的數(shù)據(jù)形式,語音編碼,數(shù)據(jù)文件,視頻編碼等。在這些數(shù)據(jù)交換的過程中,用戶之間的通信可能通過UDP傳輸/TCP傳輸方式來傳輸RTP,也需要RTCP來對(duì)媒體流傳輸控制進(jìn)行處理。因此,SIP協(xié)議協(xié)議配合其他的協(xié)議完成整個(gè)通信服務(wù)的處理,其相關(guān)協(xié)議如下示例圖所示:

  SIP和其他相關(guān)協(xié)議的關(guān)系

  通過以上圖例讀者可以看到,事實(shí)上,在一個(gè)普通的應(yīng)用環(huán)境中,一個(gè)環(huán)境可能涉及了很多終端和服務(wù)器端以及各種應(yīng)用程序的協(xié)商支持,通過確保雙方功能協(xié)商和性能能力的協(xié)商,確保雙方具有一系列共同確認(rèn)的參數(shù)才能進(jìn)行通信(例如,傳輸方式是否相同,端口是否一致,編碼是否支持)。因此,雙方都認(rèn)可的,標(biāo)準(zhǔn)的,共同支持的協(xié)商機(jī)制是必不可少的。SDP就是SIP協(xié)議中進(jìn)行協(xié)商的標(biāo)準(zhǔn)機(jī)制。

  通過以上對(duì)SIP以及基本語法的介紹,我們大概了解了SIP的消息和一些必要的請(qǐng)求響應(yīng)消息體構(gòu)成。接下來,筆者從宏觀的角度介紹一下SIP網(wǎng)絡(luò)技術(shù)環(huán)境中一些核心的實(shí)體構(gòu)件,包括支持SIP場景的客戶端和服務(wù)器端的功能,以及SIP/SDP整體協(xié)商流程。

  如果我們從最基本的SIP網(wǎng)絡(luò)構(gòu)成中討論的話,基本的SIP網(wǎng)絡(luò)構(gòu)成包括以下幾個(gè)核心的模塊:各種UA,注冊服務(wù)器,轉(zhuǎn)發(fā)服務(wù)器,定位服務(wù)器和代理服務(wù)器,還有應(yīng)用服務(wù)器等。如果實(shí)現(xiàn)完整的SIP媒體通信的話,SIP需要支持至少五種功能:

  • 定位服務(wù):決定通信使用的最終終端系統(tǒng)。
  • 用戶有效性:決定被呼叫方是否有意愿加入到通信環(huán)境中。
  • 用戶媒體支持能力:決定雙方通信所需要的媒體和媒體參數(shù)
  • 會(huì)話創(chuàng)建:創(chuàng)建會(huì)話,啟動(dòng)ring振鈴等。
  • 會(huì)話管理:轉(zhuǎn)接,修改會(huì)話參數(shù),發(fā)起其他服務(wù),結(jié)束會(huì)話等。

  通過以上五種功能的支持,SIP網(wǎng)絡(luò)中的核心構(gòu)件才能成功工作。這些核心模塊負(fù)責(zé)以上五種能力的支持。當(dāng)然,隨著當(dāng)前SIP網(wǎng)絡(luò)的應(yīng)用場景不斷變化和用戶業(yè)務(wù)需求的變化,SIP網(wǎng)絡(luò)中有可能各種服務(wù)器的部署不是固定的,因此此圖例不一定完全表示所有的應(yīng)用場景。關(guān)于SIP服務(wù)器端的討論,用戶可以參考筆者歷史文章做進(jìn)一步的學(xué)習(xí)。

  在以上圖例中,我們看到一些核心的模塊包括了SIP UA(User Agent),UA又可分為UAS和UAC,另外,UA是以客戶端-服務(wù)器端模式的模式工作的用戶,這表示一個(gè)UA實(shí)體,為了滿足SIP的邏輯實(shí)體的要求,它既可能是UAC,又可能是UAS,也是我們通常所的背靠背代理方式。如下示例說明了一個(gè)應(yīng)用場景中兩個(gè)SIP終端通過兩個(gè)代理的呼叫流程:

  兩個(gè)UA通過不同代理進(jìn)行呼叫整體協(xié)商流程

  兩個(gè)UA首先注冊到各自的服務(wù)器端,然后通過服務(wù)器呼叫另外一個(gè)終端。讀者需要注意,這里假設(shè),Alice在F5 INVITE(標(biāo)識(shí)部分)可能已經(jīng)攜帶了本端SDP的媒體支持能力,而且,Bob收到服務(wù)器端通過F8 INVITE發(fā)送到請(qǐng)求,也回復(fù)了可接受的媒體支持能力。雙方都協(xié)商一致,然后開始語音媒體流發(fā)送(F19)。

  UA又根據(jù)具體呼叫控制角色不同,可能劃分為不同的UA使用角色,電話會(huì)議就是一個(gè)例子。RFC4579中定義了電話會(huì)議中的在SIP 構(gòu)件中UA定義:

  Conference-unaware UA:最簡單的UA,參與電話會(huì)議,忽略了所有SIP相關(guān)消息。此UA可通過撥號(hào)加入會(huì)議或者被邀請(qǐng)加入會(huì)議。它僅支持RFC 3261規(guī)范。

  Conference-aware UA-此UA可以支持呼叫控制,另外可以支持SIP轉(zhuǎn)發(fā)處理,也可以訂閱消息等。

  Focus-控制發(fā)起會(huì)議,負(fù)責(zé)會(huì)議呼叫控制,包含一個(gè)Conference-aware UA。

  我們前面已經(jīng)討論,SIP服務(wù)器類型支持了多種處理方式,并且都具有不同的處理流程。有時(shí),這些服務(wù)器的功能定位可能互相交叉,因此一些讀者可能比較迷惑。如果讀者單純從定義上了理解的話,可能有引起很多誤解,讀者可以查閱筆者的歷史文檔來理解這些概念:IPPBX的工作模式SBC/B2BUA的處理方式

  深入理解SIP服務(wù)器的注冊和定位服務(wù)流程

  3、關(guān)于WebRTC基本介紹

  前面,我們簡單概述了SIP協(xié)議作為呼叫控制協(xié)議的基本內(nèi)容,利用消息體中的SDP參數(shù)進(jìn)行呼叫媒體協(xié)商。WebRTC也是一種呼叫控制協(xié)議,只是WebRTC利用的是瀏覽器的方式。這里,筆者不打算花費(fèi)時(shí)間再介紹一次WebRTC,筆者以前發(fā)布過一篇關(guān)于WebRTC的概要,讀者通過此文章基本上可以理解WebRTC的基本要點(diǎn):

  完整WebRTC技術(shù)及應(yīng)用概要

  4、總結(jié)

  一個(gè)最基本的呼叫場景都至少需要兩個(gè)部分來完成。首先是呼叫控制協(xié)議的創(chuàng)建,然后才能實(shí)現(xiàn)SDP 媒體協(xié)商的流程。因此,在本章節(jié)中,我們介紹了呼叫控制協(xié)議的基本概念,接下來,筆者介紹了呼叫控制協(xié)議中的SIP協(xié)議和WebRTC協(xié)議。在SIP協(xié)議的概要介紹中,我們介紹了SIP消息的基本結(jié)構(gòu)和核心模塊。通過這些基本的介紹,為我們后續(xù)關(guān)于SDP的深入討論打下一個(gè)基礎(chǔ)。在后續(xù)章節(jié)中,我們將逐步介紹SDP和其相關(guān)規(guī)范。

  再次說明,在本章節(jié)中,筆者針對(duì)SIP和WebRTC的介紹僅是為了在后續(xù)章節(jié)中為SDP討論做一個(gè)鋪墊作用,可能有一些內(nèi)容不是讀者所希望了解的,望見諒。

  參考資料:

  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)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享

  Asterisk freepbx FreeSBC技術(shù)文檔: www.freepbx.org.cn

  融合通信/IPPBX商業(yè)解決方案:www.hiastar.com

  如何使用FreeSBC,qq技術(shù)分享群:334023047

 
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

相關(guān)熱詞搜索: SIP SDP WebRTC

上一篇:安恒信息遠(yuǎn)程辦公安全指南

下一篇:最后一頁

專題

CTI論壇會(huì)員企業(yè)