基本了解
参考:
SIP [RFC3261]
请求类型
响应类型
- 100试呼叫(Trying)
- 180振铃(Ringing)
- 181呼叫正在前转(Call is Being Forwarded)
- 200成功响应(OK)
- 302临时迁移(Moved Temporarily)
- 400错误请求(Bad Request)
- 401未授权(Unauthorized)
- 403禁止(Forbidden)
- 404用户不存在(Not Found)
- 408请求超时(Request Timeout)
- 480暂时无人接听(Temporarily Unavailable)
- 486线路忙(Busy Here)
- 504服务器超时(Server Time-out)
- 600全忙(Busy Everywhere)
参考:
wiki
消息示例
参考:
SIP常用消息实例参考
会议相关
参考:
SIP的视频会议系统结构和原理介绍【详解】
SIP视频会议框架与信令控制流程
过程分析
以下是A,B注册到代理服务器,然后A呼叫B,B接听,B挂断的过程。
A的ip为192.168.1.18,用户名101;B的ip为192.168.1.31,用户名100;代理服务器的ip为192.168.1.175。
注册成功的过程,看抓包得发两次REGISTER两次,第一次不携带鉴权信息,第二次携带鉴权信息。
通过观察,REGISTER会定时发送,不是说只发开始的一次而已。
一. A,B注册到代理服务器
说明
第一次注册时,可能不携带Authorization字段或携带了但内容不对,这时候代理服务器会应答401,客户端重新携带Authorization字段或携带正确的内容,进行注册成功。
图解
抓包详解(B客户端)
- 两次注册,两次应答
- 客户端第一次注册(无鉴权信息/鉴权信息有误)
- 代理服务器第一次应答(失败401)
- 客户端第二次注册(有鉴权信息)
- 代理服务器第二次应答(成功200)
二. A呼叫B
说明
通过观察抓包可以知道,A呼叫B时,我们可知INVITE请求头和请求行携带的号码和IP信息:
From字段规律:通过观察A呼叫B的整个过程(包括B接听),所有来回的通信中携带的信息都为<sip:101@192.168.1.175>
To字段规律:通过观察A呼叫B的整个过程(包括B接听),所有来回的通信中携带的信息都为<sip:100@192.168.1.175>
说明From字段和To字段并不是按某个节点的理解,而是按最开始的INVITE携带到整个完整的处理周期,且完全一样这两个值。
挂断类似上面的,按挂断的第一包BYE的信息为主。
Contact存在INVITE包,且携带的信息按各自发起的。
Via字段,携带的ip,则按照A-代理服务器之间的指令都以A的ip,代理服务器-B之间的指令都以代理服务器的为主。
图解
抓包详解
A开始呼叫B,A与代理服务器通信
- 两次呼叫,两次应答
- 客户端第一次呼叫(无鉴权信息)
- 代理服务器第一次应答(失败401)
- 客户端响应ACK给代理服务器
- 客户端第二次呼叫(有鉴权信息)
- 代理服务器第二次应答(成功100)
代理服务器与B通信
- 一次呼叫一次应答一次振铃
- 呼叫
- 应答
- 振铃
代理服务器与A通信
- 振铃
三. B开始接听
图解
抓包详解
- xx
- 接听
- 应答
- 回复
- 应答
四. B开始挂断
图解
抓包详解
- 11
- 挂断
- 应答
- 挂断
- 应答