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) |