INIVTE sip:jerry@california.tel.com Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1 Route:<sip:[5555::a:b:c:d];lr> Route:<sip:telcomx@scscf1.tel.com;lr> Contact:<sip:[4444::2:3:4:5]:1537> From:<sip: tom@telcomx.tel.com>;tag=6e87wa9 To:<sip: jerry@california.tel.com> 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:telcomx@scscf1.tel.com;lr> Contact:<sip:[4444:5:6:7:8]:1078> From:<sip: jerry@california.tel.com>;tag=e42q14d To:<sip: tom@telcomx.tel.com>;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) |