电竞比分网-中国电竞赛事及体育赛事平台

分享

Freeswitch之SIP協(xié)議

 草莓加冰 2017-05-20

1、SIP的基本概念和相關(guān)元素

SIP是一個(gè)對(duì)等的協(xié)議,類(lèi)似P2P。例如:Bob給Alice發(fā)送一個(gè)INVITE請(qǐng)求,說(shuō)“Hi,一起吃飯吧”,Alice說(shuō)“好的”,電話就接通了。

在SIP網(wǎng)絡(luò)中,Alice和Bob都稱(chēng)為用戶(hù)代理(UA)。UA是在SIP網(wǎng)絡(luò)中發(fā)起或者響應(yīng)SIP處理的邏輯實(shí)體。UA是由狀態(tài)的。UA有兩種:一種是UAC,它是發(fā)起SIP請(qǐng)求的一方,如Bob;另一種是UAS,它是接受請(qǐng)求并發(fā)送響應(yīng)的一方,如Alice。

若Bob和Alice是經(jīng)人介紹認(rèn)識(shí)的,Bob想請(qǐng)Alice吃飯就需要中間人M傳話,而中間這個(gè)人就叫代理服務(wù)器(Proxy Server)。還有另一種中間人稱(chēng)為重定向服務(wù)器(Rediret Server),它類(lèi)似于M告訴Bob,我不知道Alice在哪,但W知道,我把W的電話號(hào)碼告訴你,你直接問(wèn)她。這樣的M叫重定向服務(wù)器,W叫代理服務(wù)器。這兩種服務(wù)器都是UAS,它們主要是提供一對(duì)欲通話的UA之間路由選擇功能。

若Alice的位置會(huì)不停發(fā)生變化,但它又希望Bob能隨時(shí)找到他,只要Alice每換一個(gè)位置就告訴M,它就向M重新“注冊(cè)”,這樣M就叫注冊(cè)服務(wù)器。

為了理解B2BUA,我們來(lái)看一個(gè)故事。M認(rèn)識(shí)Bob而W認(rèn)識(shí)Alice,M和W有意撮合兩個(gè)年輕人,但兩人沒(méi)有互留電話。Bob想知道Alice對(duì)他的感覺(jué),于是打電話問(wèn)M,M不認(rèn)識(shí)Alice,就問(wèn)W,W就打電話問(wèn)Alice,Alice說(shuō)印象還不錯(cuò),W就把這句話告訴M,M就告訴Bob。M面向Bob,W面向Alice,他們兩個(gè)合在一起,就稱(chēng)為B2BUA。 

其實(shí)四個(gè)人全是UA,在SIP世界中,所有UA都是平等的。M和W組成了實(shí)現(xiàn)軟交換功能的交換機(jī),它們對(duì)外說(shuō)的語(yǔ)言是SIP,在內(nèi)部使用自己的語(yǔ)言溝通。Bob和Alice就分別成為軟電話或者SIP電話機(jī)。

2、SIP協(xié)議的基本方法和頭域簡(jiǎn)介

SIP定義了6中基本方法:

基本方法

說(shuō)明

REGISTER 

注冊(cè)聯(lián)系信息

INVITE

發(fā)起一個(gè)呼叫 

ACK

對(duì)INVITE消息的最終響應(yīng) 

CANCEL

取消一個(gè)等待處理或者正在處理的請(qǐng)求

BYE

終止一個(gè)會(huì)話

OPTIONS

查詢(xún)服務(wù)器和能力,也可用作ping測(cè)試

所有SIP消息必須包含以下6個(gè)頭域:

名稱(chēng)

描述 

Call-ID

用于區(qū)分不同會(huì)話的唯一標(biāo)志 

CSeq

順序號(hào),用于在同一會(huì)話中區(qū)分事務(wù)

From

說(shuō)明請(qǐng)求來(lái)源

To

說(shuō)明請(qǐng)求接受方

Max-Forword

限制跳躍點(diǎn)數(shù)和最大轉(zhuǎn)發(fā)次數(shù)

Via

描述請(qǐng)求消息經(jīng)過(guò)的路徑

3、SIP注冊(cè)  

Alice發(fā)起注冊(cè):

REGISTER sip:191.169.150.30 SIP/2.0

From: sip:6540012@191.169.150.30;tag=16838c16838

To: sip:6540012@191.169.150.30;tag=946e6f96

Call-Id: 1-reg@191.169.150.251

Cseq: 2762 REGISTER

Contact: sip:6540012@191.169.150.251

Expires: 100

Content-Length: 0

Accept-Language: en

Supported: sip-cc, sip-cc-01, timer

User-Agent: Pingtel/1.2.7 (VxWorks)

Via: SIP/2.0/UDP 191.169.150.251

第一行:請(qǐng)求起始行。REGISTER請(qǐng)求消息。表示終端向IP地址為191.169.150.30的SoftX3000發(fā)起登記。SIP版本號(hào)為2.0。

第二行:From字段。指明該REGISTER請(qǐng)求消息由SoftX3000(IP地址:191.169.150.30)控制的Alice發(fā)起的。

第三行:To字段。指明REGISTER請(qǐng)求接收方的地址。此時(shí)REGISTER請(qǐng)求的接收方為IP地址為191.169.150.30的SoftX3000。

第四行:Call-ID字段。該字段唯一標(biāo)識(shí)一個(gè)特定的邀請(qǐng),全局唯一。Call-ID為“1-reg@191.169.150.251”,191.169.150.251為發(fā)起REGISTER請(qǐng)求的Alice的IP地址,1-reg為本地標(biāo)識(shí)。

第五行:Cseq字段。此時(shí)用于將REGISTER請(qǐng)求和其觸發(fā)的響應(yīng)相關(guān)聯(lián)。

第六行:Contact字段。在REGISTER請(qǐng)求中的Contact字段指明用戶(hù)可達(dá)位置。表示Alice當(dāng)前的IP地址為“191.169.150.251”,電話號(hào)碼為“6540012”。

第七行:表示該登記生存期為100s。

第八行:表明此請(qǐng)求消息消息體的長(zhǎng)度為空,即此消息不帶會(huì)話描述。

第九行:表示原因短語(yǔ)、會(huì)話描述或應(yīng)答消息中攜帶的狀態(tài)應(yīng)答內(nèi)容的首選語(yǔ)言為英語(yǔ)。

第十行:表示發(fā)送該消息的UA實(shí)體支持sip-cc, sip-cc01以及timer擴(kuò)展協(xié)議。timer表示終端支持session-timer擴(kuò)展協(xié)議。

第十一行:發(fā)起請(qǐng)求的用戶(hù)終端的信息。此時(shí)為UA的型號(hào)和版本。

第十二行:Via字段。該字段用于指示該請(qǐng)求歷經(jīng)的路徑?!癝IP/2.0/UDP”表示發(fā)送的協(xié)議,協(xié)議名為“SIP”,協(xié)議版本為2.0,傳輸層為UDP;“191.169.150.251”表示該請(qǐng)求消息發(fā)送方SIP終端IP地址為191.169.150.251。

Freeswitch返回401響應(yīng):

SIP/2.0 401 Unauthorized

From:;tag=16838c16838

To:;tag=946e6f96

CSeq: 2762 REGISTER

Call-ID: 1-reg@191.169.150.251

Via: SIP/2.0/UDP 191.169.150.251

WWW-Authenticate: Digest realm="huawei.com",nonce="200361722310491179922"

Content-Length: 0

Alice重新發(fā)起注冊(cè)請(qǐng)求:

REGISTER sip:191.169.150.30 SIP/2.0

From: sip:6540012@191.169.150.30;tag=16838c16838

To: sip:6540012@191.169.150.30;tag=946e6f96

Call-Id: 1-reg@191.169.150.251

Cseq: 2763 REGISTER

Contact: sip:6540012@191.169.150.251

Expires: 100

Content-Length: 0

Accept-Language: en

Supported: sip-cc, sip-cc-01, timer

User-Agent: Pingtel/1.2.7 (VxWorks)

Authorization: DIGEST USERNAME="6540012", REALM="huawei.com", NONCE="200361722310491179922", RESPONSE="b7c848831dc489f8dc663112b21ad3b6", URI="sip:191.169.150.30"

Via: SIP/2.0/UDP 191.169.150.251

用戶(hù)認(rèn)證成功:

SIP/2.0 200 OK

From:;tag=16838c16838

To:;tag=946e6f96

CSeq: 2763 REGISTER

Call-ID: 1-reg@191.169.150.251

Via: SIP/2.0/UDP 191.169.150.251

Contact:;expires=3600

4、SIP呼叫流程

UA間直接呼叫

首先Bob向Alice發(fā)送INVITE消息請(qǐng)求建立SIP會(huì)話。Alice的UA回100 Trying消息,意思是說(shuō)我收到你的請(qǐng)求了,先等一會(huì)。接著Alice電話開(kāi)始振鈴,并給對(duì)方回復(fù)180 Ringing。Bob的

UA收到該消息后即可以播放回鈴音,以提示Bob對(duì)方的話機(jī)正在振鈴。接著Alice接了電話,她發(fā)送200 OK消息給Bob,該消息是對(duì)INVITE消息的最終響應(yīng),而先前的100和180消息都是臨時(shí)狀態(tài)。Bob收到200后向Alice回復(fù)ACK證實(shí)消息。INVITE-200-ACK完成三次握手的操作,保證呼叫可以正常進(jìn)行。其中INVITE-1xx-200等消息合在一起成為一個(gè)事務(wù)。最后Alice掛斷電話,向Bob發(fā)送BYE消息,Bob收到BYE后回復(fù)200 OK,通話完畢。

SIP狀態(tài)碼由三位數(shù)字組成:

1xx:響應(yīng)為臨時(shí)狀態(tài),表明呼叫進(jìn)展的情況;

2xx:表明請(qǐng)求已被成功收到、理解和接受;

3xx:表明SIP請(qǐng)求需要轉(zhuǎn)向到另一個(gè)UAS處理;

4xx:由客戶(hù)端或網(wǎng)絡(luò)引起的請(qǐng)求失敗,客戶(hù)端應(yīng)該重新修改請(qǐng)求,然后重發(fā);

5xx:服務(wù)器內(nèi)部錯(cuò)誤;

6xx:全局性錯(cuò)。

通過(guò)B2BUA呼叫

呼叫流程略。

注意:Bob呼叫Alice,由于Bob是主叫方,他已經(jīng)知道服務(wù)器的地址了,因此可以直接給服務(wù)器發(fā)送INVITE消息,因而它是不需要注冊(cè)的。而Alice不同,它是作為被叫的一方,為了讓服務(wù)器能夠找到它,必須事先通過(guò)REGISTER消息注冊(cè)到服務(wù)器上。

5、SDP

SIP負(fù)責(zé)建立會(huì)話和釋放會(huì)話,一般來(lái)說(shuō),會(huì)話會(huì)包含相關(guān)的媒體,如視頻和音頻。媒體數(shù)據(jù)是由SDP描述的,它被放在SIP協(xié)議的正文中。

一個(gè)空行把SIP頭與SIP正文隔開(kāi),下面我們主要討論SDP部分:

v=0

o=HuaweiSoftX3000 1073741831 1073741831 IN IP4 191.169.200.61

s=Sip Call

c=IN IP4 191.169.200.61

b=AS:2064

t=0 0

m=audio 30014 RTP/AVP 8 0 98 101

a=rtpmap:98 ILBC/8000

a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-15

a=sendrecv

m=video 32914 RTP/AVP 123

b=TIAS:2000000

a=rtpmap:123 H264/90000

a=fmtp:123 profile-level-id=428014;packetization-mode=0

a=rtcp-fb:* nack pli

a=sendrecv

v=:表示協(xié)議的版本號(hào);

o=:表示源。值域中各項(xiàng)含義依次是 用戶(hù)名、會(huì)話ID、會(huì)話版本號(hào)、網(wǎng)絡(luò)類(lèi)型、地址類(lèi)型、單播地址;

s=:表示SDP所描述的Session的名稱(chēng);

c=:連接數(shù)據(jù),值域中以空格分配的兩個(gè)字段分別是網(wǎng)絡(luò)類(lèi)型和網(wǎng)絡(luò)地址,以后的RTP流就會(huì)發(fā)到該地址上;

b=:帶寬類(lèi)型;

t=:起止時(shí)間。0表示無(wú)限;

m=:媒體類(lèi)型。audio表示音頻,30014表示音頻端口號(hào),RTP/AVP是傳輸協(xié)議,后面是支持的Codec類(lèi)型,8和0分別代表PCMA和PCMU,它們屬于靜態(tài)編碼,98和101屬于動(dòng)態(tài)編碼;

a=:屬性。用于描述音頻的屬性。上面98代表8000Hz的ILBC編碼,101代表RFC2833DTMF事件。a=sendrecv表示該媒體流可用于收和發(fā),還有sendonly(僅收)、recvonly(僅發(fā))和inactive(不收不發(fā))。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多