SIP協議學習筆記

友情提示:初次接觸SIP(Session Initiation Protocol)協議的同學,強烈建議先將文末參考文章中的鏈接,先看至少二遍!
 
一、SIP協議是一個文本協議
言外之意:不同於二進制難以閱讀,SIP是僅憑肉眼就能看懂大意的協議。來一個示例:
 
INVITE的請求示例:
INIVTE sip:[email protected]
 Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1
 Route:<sip:[5555::a:b:c:d];lr>
 Route:<sip:[email protected];lr>
 Contact:<sip:[4444::2:3:4:5]:1537>
 From:<sip: [email protected]>;tag=6e87wa9
 To:<sip: [email protected]>
 Call-ID: apb03a0s09dkjdfoaidy49555
 CSeq: 1 INVITE
 Max-Forwards: 70
 Content-Length:183
(必須的空行)
(SDP 請求消息體)

注:類似HTTP協議有GET/POST/PUT/DELETE等基本操作一樣,SIP中有INVITE/BYE/REGISTER等操作,INVITE通常用於A向B發起呼叫。

第2行,表示是這SIP協議,版本爲2.0,採用UDP協議傳輸。

 

INVITE的響應示例:

SIP/2.0 183 Session in Progress 
 Via: SIP/2.0/UDP scscf2.california.tel.com;branch=12fd3 
 Via: SIP/2.0/UDP icscf2.california.tel.com;branch=24re3 
 Via: SIP/2.0/UDP scscf1.tel.com;branch=64w32 
 Via: SIP/2.0/UDP pcscf1.tel.com;branch=412d2 
 Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1 
 Route-Route:<sip pcscf2.california.tel.com;lr> 
 Route-Route:<sip scscf2.california.tel.com;lr> 
 Route-Route:<sip scscf1.tel.com;lr> 
 Route-Route:<sip pcscf1.tel.com;lr> 
 Route:<sip:[email protected];lr> 
 Contact:<sip:[4444:5:6:7:8]:1078> 
 From:<sip: [email protected]>;tag=e42q14d 
 To:<sip: [email protected]>;tag=6e87wa9 
 Call-ID: apb03a0s09dkjdfoaidy49555 
 CSeq: 2 183 
 Max-Forwards: 70 
 Content-Length:165 
(必須的空行)
(SDP 請求消息體)

 
二、SIP協議所處的位置

下面是從網上淘來的一張圖

可以看到,SIP跟HTTP一樣,屬於應用層協議。SIP下層即可使用UDP,也可以使用TCP。

 

三、相關術語

3.1 UAC/UAS

UAC 即User Agent Client 通常指發起呼叫的應用。UAS 即User Agent Server 通常指被叫端,主要負責接受、重定向或者拒絕請求,給到來的請求發送響應。UAC與UAS是一個相對的概念,當某個SIP終端(比如:軟電話應用)向外撥打時,它就是UAC,而反過來,對方打電話給它,它變成被叫時,就是UAS。

3.2 Register Server 

通常SIP終端(不管是軟電話還是硬話機)使用前,要先向某個服務器,發出REGISTER請求註冊自己,負責處理REGISTER請求的服務器,即爲Register Server。

打個比方:某老闆很忙,是一個空中飛人,經常來去不定,每次出行前只告訴助理自己的聯繫方式,別人要找他,必須先問助理:老闆在哪?怎麼聯繫?助理相當於就是Register Server.

3.3 Location Server

用於跟蹤用戶位置,Location Server與Register Server只是邏輯上的劃分,通常都由一個物理實體充當2種角色。

3.4 Proxy Server

負責接收和轉發 SIP 請求,如果有需要,也可以解析並修改SIP部分信息,但是不允許影響請求或會話的狀態。

打個比方:張三要追李四的閨蜜,但是不知道怎麼聯繫,李四說對他說,你寫個情書,我幫你轉交給她,這事兒包在我身上,這時候李四就是張三的Proxy Server.

3.5 Redirect Server

將請求的地址映射成新地址,對請求進行重定向,與Proxy Server的區別在於不轉發INVITE。

還是剛纔那個比方:張三要追李四的閨蜜,不知道怎麼聯繫,李四說,我把閨蜜的微信號給你,你自己去加好友吧,成不成得靠你自己,我只能幫你到這兒了。這時候李四隻是張三的Redirect Server,最終INVITE發起請求,還是張三自己來。

3.6 B2BUA

所謂的Back To Back User Agent (背靠背用戶代理)。簡單點講,這是UAC+UAS的合體,FreeSwitch就是一個B2BUA的經典案例。

把上述術語都畫到一張圖裏,感受下:

 

四、SIP請求方法列表及響應碼含義

請求名稱 含義 參考協議
REGISTER 將URI註冊到Location服務器  RFC 3261
INVITE  發起電話呼叫  RFC 3261
ACK  確認INVITE請求  RFC 3261 
BYE  掛斷電話  RFC 3261
CANCEL  取消Pending中的請求  RFC 3261
OPTIONS    RFC 3261
SUBSCRIBE  訂閱事件  RFC 6665
NOTIFY  通知事件  RFC 6665
PRACK  臨時確認  RFC 3262
UPDATE    RFC 3311
MESSAGE 發送文本消息  RFC 3428
REFER    RFC 3515
PUBLISH    RFC 3903
INFO    RFC 6086

 

 常見響應碼:

分類 代碼 含義  最終狀態?
1xx   臨時應答   No
  100 試呼叫(Trying)  
  180 振鈴(Ringing)  
  181 呼叫正在前轉(Call is Being Forwarded)  
2xx   會話成功  Yes
  200 成功響應(OK)  
3XX   重定向  Yes 
  302 臨時遷移(Moved Temporarily)  
4xx   請求失敗 Yes 
  400 錯誤請求(Bad Request)  
  401 未授權(Unauthorized)  
  403 禁止(Forbidden)  
  404 用戶不存在(Not Found)  
  408 請求超時(Request Timeout)  
  480 暫時無人接聽(Temporarily Unavailable)  
  486 線路忙(Busy Here)  
5xx   服務器錯誤 Yes 
   504 服務器超時(Server Time-out)  
6xx   全局錯誤 Yes 
   600 全忙(Busy Everywhere)  

 

 
參考文章:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章