日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SIP协议分析

發布時間:2023/11/27 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SIP协议分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?音視頻通話控制協議SIP介紹。


SIP(Session Initiation Protocol),即會話發起協議,在RFC2543、RFC3261等中被定義,是一個VOIP信令協議,其目的是在IP網絡中實現電話功能,即軟電話功能。


在互聯網基礎期,SIP協議常在硬件電話終端中,隨著網絡的發展,越來越多的軟件也使用SIP來作為語音視頻通話的控制協議。因此,SIP在協議還原領域從未缺位,并且地位相當重要。


SIP協議是純文本協議,通常為UDP承載,使用端口5060,本文對SIP協議的流程作簡單描述,然后對格式進行分析。


注意:網絡流量中SIP協議還會使用TCP承載,也會使用其它端口。


01

SIP流程


一個標準的SIP通話流程如下:

1、 A向B發送一個INVITE消息,邀請B通話。

2、B振鈴,向A回復一個RING消息,通知A振鈴中,A等待。

3、B提機,向A發一個OK消息, ?通知A可以通話,并進行雙方協商,協商信息常用SDP協議承載,SDP信息作為SIP報文的一部分。

4、A向B回復一個回應ACK消息,根據協商的結果正式啟動通話。

5、雙方通話,通話過程通常在另一條會話中進行,常見的是RTP承載。

6、B掛機,向A發一個BYE消息,通知A通話結束。

7、A向B回復一個OK消息,通話結束。


SIP的整個協議里,除上圖中的消息外,還有REGISTER等消息。

但是,在音視頻IM軟件中,SIP作為控制協議并不完全遵循于這個流程,需要具體情況具體分析,一般處理關鍵的SIP消息報文即可。


進行通話協商一般是使用SDP承載,但并不局限于SDP,通話過程則很多情況下是使用RTP、RTCP等,也有可能使用私有協議或者RTP的修改版本。


02


SIP格式


SIP消息分為Request和Response兩種,通常Request消息有六種方法:

REGISTER,INVITE,ACK,CANCEL,BYE,OPTIONS。
Response則為狀態碼和狀態內容,如100 Trying,180 Ringing, 200 OK,401 Unauthorized等。
一個完整的SIP消息由一系列行組成,每行以\r\n結束,這些行分成4個部分:
1、起始行(start line)。2、消息頭部(message header),內含多個頭部字段(head field),每個頭部字段為一行。3、空行(empty line),僅包含一個\r\n,表示頭部的結束。4、消息體(message body),可有可無。
可以看出,SIP的消息和HTTP類似,因為它們是同一個組織IETF制定的。
下面將以幾個實例來體會消息的格式。

REGISTER消息:

REGISTER sip:sip.cybercity.dk SIP/2.0

Via: SIP/2.0/UDP 192.168.1.2;branch=z9hG4bKnp151248737-46ea715e192.168.1.2;rport

From: <sip:voi18063@sip.cybercity.dk>;tag=903df0a

To: <sip:voi18063@sip.cybercity.dk>

Call-ID: 578222729-4665d775@578222732-4665d772

Contact: ?<sip:voi18063@192.168.1.2:5060;line=9c7d2dbd8822013c>;expires=1200;q=0.500

Expires: 1200

CSeq: 68 REGISTER

Content-Length: 0

Max-Forwards: 70

User-Agent: Nero SIPPS IP Phone Version 2.0.51.16?



終端向代理服務器sip.cybercity.dk發起注冊消息。第一行即為起始行,它的格式為:method request-uri sip-version\r\n其中method為請求的方法,即前文中的六種方法,request-uri為請求的用戶或服務器,sip-version為SIP版本號,三者間為空格,結束為\r\n。
之后為消息頭部,消息頭部一般要包括Via, From,?To,?CSeq, Caller-ID, Max-Forwards等字段,每個字段的格式為:name: value;value;value\r\n。name即字段名,value為一個或多個,每個之間為“;”,結束為\r\n。每個value內部可包含多段,消息頭的最后一行為空行,僅含\r\n。
對協議還原,在消息頭部需要關注的是提取?From,?To字段內的發送者接收者等標識用戶的信息,當然,對REGISTER方法,目的地址為服務器,則From、To字段內的用戶信息是相同的,Via字段內的IP、端口信息,如果有其它字段,如User-Agent,可提取終端信息,Contact則是綁定的聯系地址。另外,如果存在Content-Length字段,值非0,則表示帶有消息體,需要對消息體進行解析。
Response 100 Trying消息

SIP/2.0 100 Trying

Call-ID: 578222729-4665d775@578222732-4665d772

CSeq: 69 REGISTER

From: <sip:voi18063@sip.cybercity.dk>;tag=8e948b0

To: <sip:voi18063@sip.cybercity.dk>

Via: SIP/2.0/UDP 192.168.1.2;received=80.230.219.70;rport=5060;branch=z9hG4bKnp149505178-438c528b192.168.1.2

Content-Length: 0



Response消息是對請求的六個消息的響應,第一行同樣為起始行,它的格式為:sip-version status-code reason-phrase\r\n其中sip-version為SIP版本號;status-code為三位數字組成的返回狀態碼,其中第一個數字表示狀態的類型,如1xx表示中間狀態,收到的消息正在處理,2xx表示某個階段的成功,另外還有3xx,4xx,5xx,6xx等,分別表示不同含義,如跳轉,失敗,錯誤等;reason-phrase為對狀態碼的描述;三者間為空格,結束為\r\n。
之后的消息頭部與請求一致。同樣,響應消息也可以帶有消息體,由消息頭部的相關字段確定。
INVITE消息:

INVITE sip:0097239287044@sip.cybercity.dk SIP/2.0

Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bKnp85213694-430aa1de192.168.1.2;rport

From: "arik" <sip:voi18062@sip.cybercity.dk>;tag=51449dc

To: <sip:0097239287044@sip.cybercity.dk>

Call-ID: 85216695-42dcdb1d@192.168.1.2

CSeq: 1 INVITE

User-Agent: Nero SIPPS IP Phone Version 2.0.51.16

Expires: 120

Accept: application/sdp

Content-Type: application/sdp

Content-Length: 270

Contact: <sip:voi18062@192.168.1.2>

Max-Forwards: 70

Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, INFO


v=0

o=SIPPS 85214742 85214739 IN IP4 192.168.1.2

s=SIP call

c=IN IP4 192.168.1.2

t=0 0

m=audio 30000 RTP/AVP 0 8 97 2 3

a=rtpmap:0 pcmu/8000

a=rtpmap:8 pcma/8000

a=rtpmap:97 iLBC/8000

a=rtpmap:2 G726-32/8000

a=rtpmap:3 GSM/8000

a=fmtp:97 mode=20

a=sendrecv


終端向代理服務器sip.cybercity.dk發起請求通話的消息,服務器收到消息后會向目的終端發起通話消息。
在INVITE消息的消息頭部,從From、To字段內就能夠提取到通話雙方的賬號信息,以及昵稱。在這個消息中,Content-Length非0,說明帶有消息體,長度為270,Content-Type字段,描述了消息體的類型,消息體可以有很多中類型,此處為SDP。
根據SDP協議的格式,可以提取到通話內容使用的IP、端口、承載協議、可使用的語音編碼相關信息。如上述消息中,提取的本端可連IP為192.168.1.2,端口為30000,內容承載協議為RTP/AVP,可選語音編碼分別為pcmu、pcma、iLBC、G726-32、GSM等,采樣頻率均為8000,傳輸中對應的編號為0,8,97,2,3。
ACK消息:

ACK sip:0097239287044@sip.cybercity.dk SIP/2.0

From: "arik" <sip:voi18062@sip.cybercity.dk>;tag=51449dc

Call-ID: 85216695-42dcdb1d@192.168.1.2

Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bKnp85213694-430aa1de192.168.1.2;rport

To: <sip:0097239287044@sip.cybercity.dk>;tag=00-04073-1701b482-069239f90

CSeq: 1 ACK

Content-Length: 0?



ACK消息表示在對端返回Response消息之后對對端的回應,格式內容與其它消息類似。
CANCEL消息和BYE消息:

CANCEL sip:97239287044@voip.brujula.net SIP/2.0

Via: SIP/2.0/UDP 192.168.1.2;branch=z9hG4bKnp104984053-44ce4a41192.168.1.2;rport

From: "arik" <sip:816666@voip.brurjula.net>;tag=6433ef9

To: <sip:97239287044@voip.brujula.net>

Call-ID: 105090259-446faf7a@192.168.1.2

CSeq: 1 CANCEL

Content-Length: 0

Max-Forwards: 70

User-Agent: Nero SIPPS IP Phone Version 2.0.51.16?



CANCEL消息和BYE消息使用在不同的場景,按理解,CANCEL消息為取消的意思,而BYE消息則為結束的意思。在一次通話請求的過程中,CANCEL一般為拒絕通話,使通話結束,而BYE則是通話正常結束,對語音的控制消息的處理,二者稍有差異,但本質上是相同的。
另外,在使用SIP協議的APP中,常常會使用SIP協議進行文本聊天,文件傳輸等功能的實現,這樣,一般是承載在消息體內的,根據具體消息格式進行解析即可。
如果覺得本文有價值,請關注我,come on~

長按進行關注。






總結

以上是生活随笔為你收集整理的SIP协议分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:SIP协议分析