SIP协议(一)

熟悉SIP的一些基本常识概念相关协议,

网络元素,分层结构,

不同请求消息类型,响应消息类型

SDP的一些概念基础

SIP

SIP(Session Initiation Protocol)会话初始化协议,是有IETE(Internet engineering task force,因特网工程任务组)制定的通讯协议,他是一个基于文本的应用层协议,用于创建,修改,释放一方或多方会话,广泛应用于CS(电路交换circuit switched),ISM(Ip multimedia subsystem,ip多媒体子系统),NGN(next generation network,下一代网络),可以支持并应用语音,视频,数据等多媒体业务,同时也可以应用于(presence)呈现,(instant message)即时消息等特色业务,可以说有IP的地方就有SIM协议的存在

与SIP相关的协议

(1)SDP(会话描述协议):描述消息内容的负载情况和特点,SIP使用Internet的此协议来描述终端设备的特点
(2)RSTP(实时流协议) 用于控制流媒体的传输
(3)RTP(实时数据传输协议):负责实时传输
(4)RSVP(资源预留协议):SIP自身不提供服务质量,它与负责语音质量的资源预留协议互操作
(5)LDAP(轻型目录访问协议):负责定位
(6)RADIUS(用户服务):负责身份验证的远程身份验证拨入

SIP的一些特点

(1)不定义要建立的会话类型,只定义应该如何管理会话,有了这种灵活性,SIP可以应用于众多应用和服务中(交互性游戏,音乐和视频,Web会议)
(2)SIP消息基于文本,易于读取和调试。
(3)与存在已久的国际电信联盟(ITU) SS7 标准(用于呼叫建立)和 ITU H.323 视频协议组合标准不同,SIP 独立工作于底层网络传输协议和媒体。它规定一个或多个参与方的终端设备如何能够建立、修改和中断连接,而不论是语音、视频、数据或基于 Web 的内容。

SIP网络元素

SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了 SDP 协议(用于描述消息的内容和特点)的消息来完成 SIP 会话。
(1)SIP 用户代理
SIP 用户代理(UA) 是终端用户设备,用于创建和管理 SIP 会话的移动电话、多媒体手持设备、PC、PDA 等。用户代理客户机发出消息,用户代理服务器对消息进行响应。
(2)SIP 注册服务器
SIP 注册服务器是包含域中所有用户代理的位置的数据库。在 SIP 通信中,这些服务器会检索参对方的 IP 地址和其他相关信息,并将其发送到 SIP 代理服务器。
(3)SIP 代理服务器
SIP 代理服务器接受 SIP UA 的会话请求并查询 SIP 注册服务器,获取收件方 UA 的地址信息。然后,它将会话邀请信息直接转发给收件方 UA(如果它位于同一域中)或代理服务器(如果 UA 位于另一域中)。
(4)SIP 重定向服务器
SIP 重定向服务器允许 SIP 代理服务器将 SIP 会话邀请信息定向到外部域。SIP 重定向服务器可以与 SIP 注册服务器和 SIP 代理服务器同在一个硬件上。

分层结构

SIP是一个分层协议,每层之间松耦合。
第一层:即SIP的最低层是语法和编码。
其编码指定使用巴科斯范式(BNF)。

第二层:传输层。
它定义在网络上客户端如何发送请求和接收响应,服务器如何接收请求和发送响应。所有的SIP元素都包含传输层。

第三层:事务层。
事务层处理应用层转播、响应与请求的匹配、应用层超时。用户代理(User agents)包含一个事务层,如有状态代理(stateful proxies),无状态代理(Statelessproxies)不包含事务层。事务层有一个客户端组件(称为客户端事务)和服务器组件(称为服务端事务),它们都用有限状态机表示,来处理特殊请求。

第四层:事务层之上的层称为事务用户(TU)。
每个SIP实体(SIP entity),除了无状态代理外,都是事务用户。当事务用户想发送请求时,它就创建一个客户端事务实例( transaction instance),并将请求与目的的IP地址、端口一起发送。创建客户端事务的TU也可以取消事务。客户端取消事务的时候,就要求服务器停止进一步的处理,并恢复到初始化事务前的状态,然后返回该事务的一个错误响应。可通过CANCEL请求完成取消事务,CANCEL请求包含自己的事务,同时也提及需要取消的事务。

不同请求消息类型

一个基本的SIP消息包括起始行、一个或多个头字段、说明头字段结束的空行和一个可选的消息体。
消息=起始行(包括请求行/状态行;请求行规定了请求的类别,而状态行指出了每个请求的状态,比如是成功还是失败。如果是失败的话还要给出失败的原因或类型。)
*头字段
CRLF
[消息体]
(消息首部给出了关于请求或应答的更多信息一般包括消息的来源、规定的消息接收方,另外还包括一些其他方面的重要信息。消息体通常描述将要建立会议的类型包括所交换媒体的描述,但不具体定义消息体的内容或结构,其结构或内容使用另外一个协议来描述,就是会话描述协议SDP。)

请求消息
请求行 = 方法 + 空格 + 请求地址 + SIP版本号 + 空行
通过一个请求行作为起始行,请求行包括了方法名、请求的URL、协议版本号、中间用空格分开。

六种请求方法:

  INVITE           发出呼叫会话请求
  ACK              INVITE请求被最终请求
  BYE              释放一个呼叫会话
  CANCEL           取消挂起的呼叫
  REGISTER         登记注册用户代理
  OPTIONS          查询服务器能力

响应消息类型
应答消息
状态行 = SIP版本 + 空格 + 状态码 + 空格 + 相关文本短语 + 空行

SIP应答消息状态码与功能

类型 状态码 状态说明

临时应答(1XX)
100 Trying 正在处理中
  180 Ringing 振铃
  181 call being forwarder 呼叫正在前向
  182 queue 排队
  181* session progress 会话进行
    
会话成功(2XX) 200 OK 会话成功

重定向(3XX) 
300 multiple 多重选择
  301 moved permanently 永久移动
  302 moved temporaily 临时移动
  305 use proxy 用户代理
  380 alternative service 替代服务

请求失败(4XX) 
400 bad request 错误请求
 401unauthorized 未授权
 402 payment required 付费要求
 403 forbidden 禁止
 404 not found 未发现
 405 method no allowed 方法不允许
 406 not acceptable 不可接受
 407 proxy authentication required 代理需要认证
 408 request timeout 请求超时
 410 gone 离开
 413 request entity too large 请求实体太大
 414 request-url too long 请求URL太长
 415 unsupported media type 不支持的媒体类型
 416 unsupported url scheme 不支持的URL计划
 420 bad extension 不良扩展
 421 extension required 需要扩展 
 423 interval too brief 间隔太短
 480 temporarily unavailable 临时失效
 481 call/transaction does not exist 呼叫/事务不存在
 482 loop detected 发现环路
 483 too many hops 跳数太多
 484 address incomplete 地址不完整
 485 ambiguous 不明朗
 486 busy here 这里忙
 487 request terminated 请求终止
 488 not acceptable here 这里请求不可接受
 491 request pending 未决请求
 493 undecipherable 不可辨识

服务器失败(5XX) 
500 server internal error 服务器内部错误
 501 not implemented 不可执行
 502 bad gateway 坏网关
 503 service unavailable 服务无效
 504 server time-out 服务器超时
 505 version not supported 版本不支持
 513 message too large 消息太大

全局性错误(6XX) 
600 busy everywhere 全忙
 603 decline 丢弃
 604 does not exist anywhere 不存在
 606 not acceptable 不可接受

SDP

SDP的目的是传送多媒体会话中的媒体流的信息,以使会话描述的接收者可以参加会话。所以,SDP应该包含足够的信息来发起会话或使接收者加入会话。

SDP应该包含:

l 会话名和会话目的
l 会话激活的时间
l 会话由何种媒体组成
l 接收这些媒体的信息(地址,端口,格式等等)
l 会话所用到的带宽信息。
l 连接信息

SDP会话描述有以下三部分内容:会话描述、媒体描述、时间描述。

会话描述:
v= (协议版本protocol version)
o= (所有者和会话标识符owner/creator and session identifier).
s= (会话名session name)
i=* (会话信息session information)
u=* (URI的描述 URI of description)
e=* (邮件地址email address)
p=* (电话号码phone number)
c=* (连接信息connection information - not required if included in all media)
b=* (带宽信息bandwidth information)
One or more time descriptions (see below)
z=* (地区时间调整time zone adjustments)
k=* (加密钥匙encryption key)
a=* (0或多个会话属性行zero or more session attribute lines)
Zero or more media descriptions (see below)

时间描述:
t= (会话激活的时间time the session is active)
r=* (0或多个重复时间zero or more repeat times)

媒体描述:
m= (媒体名和传输地址media name and transport address)
i=* (媒体标题media title)
c=* (连接信息connection information - optional if included at session-level)
b=* (带宽信息bandwidth information)
k=* (加密钥匙encryption key)
a=* (0或多个媒体属性行zero or more media attribute lines)

 

(1)熟悉基本呼叫流程,SIP的基础数据包中的项的意思

(2)抓包分析SIP

基本呼叫流程

1:注册流程

 

(1)首次试呼时,终端代理向代理服务器发送REGISTER注册请求
(2)代理服务器通过后端认证/计费中心获知用户信息不在数据库中,便向终端代理会送401Unauthorized质询信息,其中包含安全认证所需的令牌
(3)终端代理提示用户输入其标识和密码后,根据安全认证令牌将其加密后,再次用REGISTERZ消息报告给代理服务器
(4)代理服务器将REGISTER消息中的用户信息解密,通过认证/计费中心验证其合法后,将该用户的信息登记到数据库里,并向终端代理返回成功响应信息200 OK。

2:注销流程:

(1)终端代理向代理服务器发送REGISTER消息注销,其头中exprie字段置0
(2)代理服务器收到后回发200 OK响应,并将数据库中的相关用户信息注销

3:基本呼叫建立过程

(1)用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求;
(2)代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址,若已包含,说明发生环回,返回指示错误的应答;如果没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示 的被叫终端代理B转送Invite请求;
(3)代理服务器向终端代理A送呼叫处理中的应答消息,100 Trying;
(4)终端代理B 向代理服务器送呼叫处理中的应答消息,100 Trying;
(5)终端代理B指示被叫用户振铃,用户振铃后,向代理服务器发送180 Ringing振铃消息;
(6)代理服务器向终端代理A转发被叫用户振铃信息;
(7)被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200 OK);
(8)代理服务器向终端代理A转发该成功指示(200 OK);
(9)终端代理A收到消息后,向代理服务器发ACK消息确认;
(10)代理服务器将ACK确认消息转发给终端代理B;
(11)主被叫用户之间建立通信连接,开始通话。

4:会话更改流程

(1)用户代理服务端向用户代理客户端发送Invite消息,带有新的SDP协商信息;
(2)用户代理客户端回复200 OK,并将协商后的SDP信息带回;
(3)用户代理服务端发送ACK给用户代理客户端进行确认。

5:正常呼叫释放过程

(2)用户通话结束后,被叫用户挂机,终端代理B向代理服务器发送Bye消息;
(3)代理服务器转发Bye消息至终端代理A,同时向认证/计费中心送用户通话的详细信息,请求计费;
(4)主叫用户挂机后,终端代理A向代理服务器发送确认挂断响应消息200 OK;
(5)代理服务器转发响应消息200 OK给终端代理B。

6:被叫忙呼叫释放

(1)用户A发起一路呼叫,终端代理A向代理服务器发送Invite请求;
(2)代理服务器收到呼叫请求后向被叫终端代理转发该Invite消息;
(3)代理服务器向终端代理A回送100 Trying,告知终端代理A呼叫正在处理;
(4)终端代理B向代理服务器回送100 Trying,告知代理服务器呼叫正在处理;
(5)呼叫请求送到被叫终端代理B后,被叫忙,终端代理B向代理服务器送486被叫忙响应;
(6)代理服务器向终端代理A转发该响应消息;
(7)终端代理A向代理服务器回送ACK确认消息;
(8)代理服务器向终端代理B送ACK确认消息。

7:被叫无应答流程一

(1)用户A发起一路呼叫,终端代理A向代理服务器发Invite请求消息;
(2)代理服务器向被叫用户的终端代理B转发该Invite请求;
(3)代理服务器向终端代理A回送100 Trying响应,表示呼叫已在处理中;
(4)终端代理B向代理服务器回送100 Trying,告知代理服务器呼叫正在处理。
(5)被叫用户振铃,终端代理B向代理服务器送180 Ringing响应;
(6)代理服务器向终端代理A转发该响应消息;
(7)被叫久振铃无应答,终端代理A判断超时后,向代理服务器送Cancel消息放弃该呼叫;
(8)代理服务器将Cancel消息转发给终端代理B;
(9)代理服务器收到Cancel消息后,向终端代理A回送200 OK响应;
(10)终端代理B向代理服务器回送200 OK响应;
(11)终端代理B向代理服务器送487请求已撤销的响应消息;
(13)代理服务器向终端代理A送487请求已撤销消息;
(14)代理服务器收到后回送ACK确认;
(15)终端代理A向代理服务器回送ACK确认。

8:被叫无应答流程二

(1)用户A发起一路呼叫,终端代理A向代理服务器发Invite请求消息;
(2)代理服务器向被叫用户的终端代理B转发该Invite请求;
(3)代理服务器向终端代理A回送100 Trying响应,表示呼叫已在处理中;
(4)终端代理向代理服务器回送100 Trying,告知代理服务器呼叫正在处理;
(5)被叫用户振铃,终端代理B向代理服务器送180 Ringing响应;
(6)代理服务器向终端代理A转发该响应消息;
(7)被叫久振铃无应答,终端代理B判断超时后,向代理服务器送408 Request timeout消息放弃该呼叫;
(8)代理服务器收到408 Request timeout消息后,转发该消息向终端代理A;
(9)代理服务器收到后回送ACK确认给终端代理B;
(10)终端代理A向代理服务器回送ACK确认。

9:遇忙呼叫前转流程

(1)用户A发起一路呼叫,终端代理A向代理服务器发Invite请求消息;
(2)代理服务器向被叫用户的终端代理B转发该Invite请求;
(3)代理服务器向终端代理A回送给100 Trying响应,表示呼叫已在处理中;
(4)终端代理B向代理服务器回送100 Trying,告知代理服务器呼叫正在处理;
(5)终端代理B忙线中,终端代理B 向代理服务器回送486 Buzy here响应;
(6)代理服务器向终端代理B发送ACK响应消息;
(7)代理服务器对此呼叫进行前转,向终端代理C发送Invite请求消息;
(8)代理终端C收到Invite请求后,指示用户振铃,同时向代理服务器发送180Ringing响应;
(9)代理服务器向代理终端A转发收到的180 Ringing响应;
(10)被叫用户C摘机接听电话,代理终端C向代理服务器发送200 OK响应;
(11)代理服务器向代理终端A转发收到的200 OK响应;
(12)终端代理A向代理服务器回送ACK确认;
(13)代理服务器向代理终端C转发收到的ACK确认;
(14)主叫挂机,代理终端A向代理服务器发送BYE请求消息,请求挂机;
(15)代理服务器向代理终端C转发收到的BYE请求消息,指示用户C挂机;
(16)用户C放催挂音,同时向代理服务器回应200 OK响应;
(17)代理服务器向代理终端A转发收到的200 OK响应。

10:无应答呼叫前转

(1)用户A发起一路呼叫,终端代理A向代理服务器发Invite请求消息;
(2)代理服务器向被叫用户的终端代理B转发该Invite请求;
(3)代理服务器向终端代理A回送给100 Trying响应,表示呼叫已在处理中;
(4)终端代理B向代理服务器回送100 Trying,告知代理服务器呼叫正在处理;
(5)被叫用户振铃,终端代理B向代理服务器送180 Ringing响应;
(6)代理服务器向终端代理A转发该响应消息;
(7)被叫久振铃无应答,代理服务器判断超时后,向代理服务器B送Cancel消息放弃该呼叫;
(8)代理服务器B收到Cancel消息后,向代理服务器回送200 OK响应;
(9)终端代理B向代理服务器送487请求已撤销的响应消息;
(10)代理服务器收到后回送ACK确认;
(11)代理服务器对此呼叫进行前转,向终端代理C发送Invite请求消息;
(12)代理终端C收到Invite请求后,指示用户振铃,同时向代理服务器发送180Ringing响应;
(13)代理服务器向代理终端A转发收到的180 Ringing响应;
(14)被叫用户C摘机接听电话,代理终端C向代理服务器发送200 OK响应;
(15)代理服务器向代理终端A转发收到的200 OK响应;
(16)终端代理A向代理服务器回送ACK确认;
(17)代理服务器向代理终端C转发收到的ACK确认;
(18)主叫挂机,代理终端A向代理服务器发送BYE请求消息,请求挂机;
(19)代理服务器向代理终端C转发收到的BYE请求消息,指示用户C挂机;
(20)用户C放催挂音,同时向代理服务器回应200 OK响应;
(21)代理服务器向代理终端A转发收到的200 OK响应。

11:呼叫保持

(1)用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求;
(2)代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址,若已包含,说明发生环回,返回指示错误的应答;如果没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示 的被叫终端代理B转送Invite请求;
(3)代理服务器向终端代理A送呼叫处理中的应答消息,100 Trying;
(4)终端代理B 向代理服务器送呼叫处理中的应答消息,100 Trying;
(5)终端代理B指示被叫用户振铃,用户振铃后,向代理服务器发送180 Ringing振铃消息;
(6)代理服务器向终端代理A转发被叫用户振铃信息;
(7)被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200 OK);
(8)代理服务器向终端代理A转发该成功指示(200 OK);
(9)终端代理A收到消息后,向代理服务器发ACK消息确认;
(10)代理服务器将ACK确认消息转发给终端代理B;
(11)主被叫用户之间建立通信连接,开始通话;
(12)代理终端向代理服务器发送Reinvite请求消息,SDP的c域等于0.0.0.0;
(13)代理服务器转发此消息给代理终端A;
(14)代理终端A收到Reinvite后,回应200 OK响应,表示接受会话更改,同时根据协商结果修改会话方式;
(15)代理服务器转发200 OK给代理终端B;
(16)终端代理B收到消息后,向代理服务器发ACK消息进行确认;
(17)代理服务器将ACK确认消息转发给终端代理A。

12:呼叫等待

(2)用户A,B正处于通话阶段,用户C向A发起呼叫,终端代理C发送Invite消息给代理服务器;
(3)代理服务器向终端代理C回送100 Trying响应,表示呼叫已在处理中;
(4)代理服务器转发invite消息给代理终端A;
(5)用户A振铃,终端代理A向代理服务器发送180 Ringing响应;
(6)代理服务器向终端代理C转发响应消息;
(7)用户A按下呼叫保持键,代理终端A向代理服务器发送Invite消息,请求域代理终端呼叫保持;
(8)代理服务器转发此消息给终端代理B;
(9)代理服务器向终端代理A回送100 Trying响应,表示呼叫已在处理中;
(10)终端代理B收到呼叫保持请求后,发送200 OK给代理服务器,表示接收呼叫保持;
(11)代理服务器转发200 OK响应给终端代理A;
(12)终端代理A向代理服务器回送ACK确认;
(13)代理服务器向代理终端B转发收到的ACK确认;
(14)终端代理A发送200 OK给代理服务器,表示接收C的呼叫;
(15)代理服务器转发200 OK响应给终端代理C;
(16)终端代理C向代理服务器回送ACK确认;
(17)代理服务器向代理终端A转发收到的ACK确认;
A、C之间开始通话;
(18)用户A挂机,终端代理A向代理服务器发送Bye请求消息;
(19)代理服务器转发Bye消息向终端代理C;
(20)终端代理C发送200 OK响应给代理服务器。表示接受请求;
(21)代理服务器转发200 OK响应给终端代理A;
(22)终端代理A重新发送Invite请求给代理服务器,请求和终端代理B恢复通话;
(23)代理服务器向代理终端代理B转发收到的Invite请求。

wireshark抓包分析SIP

拨通之后,在wireshark上进行抓包,过滤出SIP流,分析其呼叫流程,完成以上基本呼叫流程的验证

SIP的基础数据包中项的含义

(1)Request-URI:呼叫请求发送地址,UA生成初始请求消息时,该域中的消息一般与TO中的地址相同,经过网络服务器后,由于实际路由问题,该值可能发生变化;在REGISTER消息中,Request-URI中将会填充注册服务器的地址,而此时TO域中的地址将会填充客户端实际的地址。

(2)From:发起请求方的地址,一般采用USERINFO@HOSTPOST形式,tag参数为随机产生的整数。

(3)To:接受方地址,采用USERINFO@HOSTPOST形式,当该域存在于最终响应消息中时,将会有tag参数。

(4)Call-ID:识别呼叫参数,在同一个DIALOG中,该参数不发生变化,该参数与From中的tag参数、To域中的tag参数相结合用以保证呼叫的唯一性。

(5)CSeq:表征transaction的参数,由于同一个呼叫中会存在多个transaction,因此通过该参数来保证同一个UA发送的不同请求消息间的顺序。

(6)Via:表征呼叫经过的路径,UA生成SIP消息时,会在该域中填写自己的地址;proxy在转发请求消息时,将会增加一个填有自己地址的Via域,表示经过本proxy。Via域的存在可以保证响应消息按照原路径返回到主叫方,代理服务器用它检查其内容,如果新端点已出现在Via列表中,则表示有环路了。

(7)Contact:告知对端自己的地址,当对端发送下一个请求消息时,可直接向该地址发送,不需要关心前一个路由信息(除非有特定原则,例如PROXY可以通过RECORD-ROUTE域来保证下一个请求消息必须经过本PROXY,即使CONTACT域中填写对端客户的地址)。

(8)Expires:给出消息内容超期的时间。

(9)Max-Forwards:用来限制请求到他的目的地中间的跳转,包含一个每隔一个跳转就自动减一的数字,如果Max-Forwards在到达目的之前就减到0,他会报告一个483(太多的路由)错误回应。

(10)Require :UAC通过Require字段列出的选项标签,告知UAS处理请求时需要支持的选项。

(11)Record-Route:由于CONTACT域的存在使得两个用户后续的请求消息可能不经过PROXY,为了运营需要,PROXY在初始INVITE消息中增加了RECORD-ROUTE域,这样可以保证后续请求(例如BYE消息)经过PROXY.通过RECORD-ROUTE与CONTACT的结合,既可避免后续请求旁路网络服务器的行为,又可减少后续请求路径上的环节。

(12)Content-Length头域用来确定每一个SIP消息在通讯流中的结束位置的。

 

抓包熟悉接打电话的基本流程,不同数据包的区别

(注册,带鉴权注册,不成功的注册,激活,注销,呼叫,会话释放,久叫不应,前/后向释放)

一、注册

正常注册

设备发起注册请求Register后,服务器立刻回应200 OK.

带鉴权注册

设备发起注册请求后,服务器回应401unauthorized 未授权
,设备会带着相应鉴权重新发起注册,鉴权通过后,服务器回应200 OK ,即注册成功。

不成功注册

用820注册UCM服务器账号1004,,密码输入有误(注册信息有误),注册失败时,设备发起请求,服务器返回404 Not Found错误。

二、激活

好像激活跟注册没有什么差别

三、注销

注销UCM服务器的账号1004

终端代理向代理服务器发送REGISTER消息注销,Contact头域携带需要注销的具体信息,其头中exprie字段置0

四、呼叫,释放

正常呼叫

释放

久叫不应

被叫久振铃无应答,终端代理B判断超时后,向代理服务器送408 Request timeout消息放弃该呼叫;

五、前后向释放

前向释放

被叫方应答前,主叫方释放会话,返回487 Request Terminated请求终止

后向释放

主叫方发起呼叫后,被叫方忙,拒绝接听后,返回486 Busy Here响应,被叫方当前在这个终端系统上不能接听这个电话。

响应消息486 487 488,Openser,UCM服务器

(1)分析SIP数据包SUBSCRIBE订阅, NOTIFY

(2)SIP响应消息488 487 486的区别

(3)OPenSER服务器与UCM服务器

SUBSCRIBE

Event Package: 定义了通知者向订阅者报告一组状态信息,rfc3680中定义了需要的事件包
Event Template-Package: 定义一组事件包状态
**Notification:**通知者发送NOTIFY到订阅者

用户代理使用SUBSCRIBE建立订阅,以获取有关特定事件的通知。
(1)它包含一个Expires头字段,指示订阅的持续时间。
(2)期限过后,订阅将自动终止。
(3)订阅在用户代理之间建立一个对话。
(4)您可以在到期时间之前通过在对话框内发送另一个SUBSCRIBE来重新订阅。
(5)用户订阅将收到200 OK。
(6)用户可以使用Expires值0(零)发送另一个SUBSCRIBE方法来取消订阅。

关键点:

(1)SUBSCRIBE必须具有expires字段,并且相应200ok必须有expires字段,当expires 值为0时,为取消订阅
(2)注册与订阅的expire字段需要分割开来,注册默认超时时间3600s订阅默认超时时间3761s,防止联合刷新造成的潜在问题

NOTIFY

用户代理使用NOTIFY来获取特定事件的发生。通常,当订户和通知程序之间存在订阅时,NOTIFY将在对话框内触发。
(1)如果通知程序接收到,每个NOTIFY将获得200 OK响应。
(2)NOTIFY包含指示事件的事件头字段和指示订阅的当前状态的subscriptionstate头字段。
(3)始终在订阅的开始和结束时发送NOTIFY。

关键点:

NOTIFY消息中必须包含扩展的Subscription-State头部,指示创建的订阅的状态,共有3种订阅状态,分别是:
(1)active:订阅已被接受且授权成功;
(2)pending:SUBSCRIBE请求已收到,但还没有足够的信息决定接受或拒绝此次订阅;
(3)terminated:订阅未激活,或创建的订阅关系终止。

响应消息488 487 486的区别

486 Busy Here(A打给B,B在忙或者主动挂了)

当成功联系到被叫方的终端系统,但是被叫方当前在这个终端系统上不能接听这个电话,那么应答应当回给呼叫方一个更合适的时间在Retry-After头域 重试。这个用户也许在其他地方有效,比如电话邮箱系统等等。如果我们知道没有其他终端系统能够接听这个呼叫,那么应当返回一个状态码600(Busy Everywhere)。

487 Request Terminated(A打给B,A自己取消)

请求被BYE或者CANCEL所终止。这个应答永远不会给CANCEL请求本身回复。

488 Not Acceptable Here

这个应答和606(Not Acceptable)有相同的含义,但是只是应用于Request-URI所指出的特定资源不能接受,在其他地方请求可能可以接受。
包含了媒体兼容性描述的消息体可以出现在应答中,并且根据INVITE请求中的Accept头域进行规格化(如果没有Accept头域,那么就是application/sdp)。这个应答就像给OPTIONS请求的200(OK)应答的消息体一样。

Openser服务器

openSER是一个SIP代理服务器,除了提供基本的SIP代理及SIP路由功能外,还提供一些应用级的功能,其核心路由功能完全通过脚本来实现,可灵活定制各种路由策略,可灵活应用于语音、视频通信、IM以及Presence等多种应用。
内网192.168.84.226/openser/可以查看Openser号码,没人用的号码可以注册

UCM服务器

UCM(统一变更管理)定义了一个可以立即用于软件开发项目的一致并基于活动的变更管理流程,使用UCM,开发团队可以并发地管理他们的测试工件和相关的开发工件,在UCM项目中,可以在一条构件基线中包含所有的代码工件以及相关的测试需求,测试程序和测试数据。
内网192.168.80.21可以进入UCM服务器,没人用的可自行注册

分别在话机跟820各注册一个UCM号码,即可完成会话

SUBSCRIBE,OPENSE,周期协商,T1T2机制,鉴权过程,OPTIONS

(1)补充抓包SUBSCRIBE与成功订阅后的NOTIFY数据包

(2)OPENSER服务器与UCM服务器的注册流程

周期协商(含注册周期过大,过小)

注销(补充SIP协议三中注销类型)

T1/T2;理解鉴权过程;SIP OPTIONS注册状态查询

SUBSCRIBE订阅

在话机web页点击订阅WMI按钮,进行抓包

(1)SUBSCRIBE必须具有expires字段,并且相应200ok必须有expires字段,当expires 值为0时,为取消订阅
(2)注册与订阅的expire字段需要分割开来,注册默认超时时间3600s订阅默认超时时间3761s,防止联合刷新造成的潜在问题

补充订阅已被接受且授权成功的数据包

周期协商

周期规则:执行性的东西大多有一个周期,是设备有规则周期的去发送注册请求,注册请求会带上上一次所带的鉴权信息(UCM服务器192.168.80.21的默认最小周期是90S)

(1)注册周期小于SIP Server限定的最小周期

当我们设置注册周期为1分钟(小于UCM服务器的最小周期90S)抓包,我们可以看到服务器回应423 interval too brief 间隔太短的数据包,且数据包带有Min-Expires为90的UCM服务器最小周期值,之后话机会重新发送注册周期为Min-Expires的注册数据包

(2)注册周期大于SIP Server限定的最大周期

当我们设置注册周期为64800分钟(UCM服务器的最大周期64800),抓包。只要SIP Server响应的200 OK中携带了Expires,则话机使用SIP Server下发的Expires作为注册周期。

(3)注册周期小于或等于20分钟时

注册周期小于或等于20分钟时,话机更新注册周期为注册周期值的一半。(将周期设置为4min,可以看到设备注册成功后2min更新一次注册。)

(4)注册周期大于20分钟时

注册周期大于20分钟时,话机更新注册周期为注册周期值-10。(将周期设置为24min,可以看到设备注册成功后14min更新一次注册。)

(5)注册期限内重新注册等待时间大于注册超时时间

注册期限内重新注册等待时间大于注册超时时间时,注册期限内重新注册等待时间无效。例如,设置注册超时时间设置为2min,注册期限内重新注册等待时间设置为3min,保存抓包查看观察,设备仍然以注册周期的一半时间去注册,即60s发起注册更新。

(6)注册期限内重新注册等待时间小于注册超时时间

当注册期限内重新注册等待时间小于注册超时时间时,例如,注册期限内重新注册等待时间填写为2min,以3min为注册周期,设备就会以(注册超时时间)减去(重新注册等待时间)所得的差值时间去更新注册(两者差值必须大于5),即3min-2min=60s。

注销

补充SIP协议三中的注销

将重新注册前注销设置为全部,Register包中显示"Remove all bindings",Contact头域携带"*",Expires=0指明注册周期为0,即要求清空所有注册当前分机号在服务器上的注册信息

T1/T2

T1:是对服务器和客户端之间的事务往返延时(RTT)时间评估。
T2:定义了INVITE响应和non-INVITE请求的时间间隔

设置T1为0.5秒,T2为4秒

话机注册,设置一个错误的SIP服务器(与话机不同IP段的服务器),抓包可知第一次注册与第二次注册的时间间隔为T1(0.5S),第二次跟第三次的间隔是2T1(1S),第三次跟第四次的间隔是4T1(2S),第四次与第五次是8T1(4S),此时已经到了T2的设置值,因此往后都是(T2)的间隔重新发送注册请求。总64T1后就又会从T1开始发送注册请求,直到成功为止。

鉴权过程

SIP认证方式
SIP的认证是继承了HTTP的认证方式。根据RFC2617,HTTP的认证方案主要有Basic Authentication Scheme和Digest Access Authentication Scheme两种。而Basic方法使用的口令原文验证的方式,易被盗取,所以SIP已经摒弃这种方式。
Digest认证方案可以对口令进行MD5包装。一般来说,获取口令有两种方式:1.字典攻击,即使用轮询进行口令猜测的方法,如果口令简单比较危险;另一个方法是攻击服务器来获得口令,如果服务器把密码存储起来那样的话就可能被盗取。所以方法是服务器端不再存储密码原文,而是使用MD5包装起来,这样的话当经过MD5包装的认证信息过来后,比较存储的MD5数据则可知道用户的身份了。
SIP OPTIONS注册状态查询
启用SIP OPTIONS保持活动状态的按钮

SIP Options用于话机主动周期性查询与服务器的连接状态,前提是SIP Server必须支持SIP Options响应,且话机已注册成功并启用SIP Options,默认配置情况下(查询间隔与查询最大次数为默认30s、3),话机每隔30s向SIP Server发送SIP Option报文,如果SIP Server响应200 OK,说明话机与SIP Sever之间连接状态正常

如果话机连续3次都收不到SIP服务器的回应,则说明话机与SIP服务器;连接有问题

 

抓包验证呼叫转移,呼叫保持,会议室,备用服务器

呼叫保持

会话保持就是正在通话的用户,可以暂时中断数据原来的电话,而打出新的电话,同时与原来的电话保持联系;当需要回复原来的通话时,则使新打出的电话处于保持状态,再继续与原来的通话方通话,即可以通过操作按键选择及切换这两个通话,还可以分别或同时结束与他们的通话。会话保持业务与基本通话的不同之处在于,它使得我们可以有两个处于连接中的会话,而且可以在这两个会话之间进行任意次的来回切换

抓包分析呼叫保持

通过820注册的UCM服务器号码1004打给话机的1104,在1004端按保持1004,与1104的通话(抓包)

可以看到Re-INVITE消息携带SDP中c=IN IP4 192.168.1.106(与文档的c=IN IP4 0.0.0.0有出入) ,说明该Re-INVITE消息是会话保持消息
此时,媒体流的方向为sendonly.

在此过程中,1004端可以进行与其他通话,而被保持端1104则是会自动播放一段音乐。
在1004端按取消保持1004与1104的通话(抓包)

取消会话保持同样是用Re-INVITE消息完成的,唯一的区别是在Re-INVITE消息携带SDP中的c=IN IP4 192.168.1.106值不同,192.168.1.106地址是1004和1104之间进行媒体传输的地址,
此时,媒体流的方向为sendrecv

 

呼叫转移

由于设备有限,此次抓包呼叫转移,转移的另一个号码跟原号码是同机,因此IP相同,流序列看起来跟成功不太一样,但实际是成功的

呼叫转移业务是一种基本补充业务,包括
(1)无条件呼叫转移业务
(2)分时间段呼叫转移业务
(3)其他:遇忙呼叫前转业务、用户不在线前转业务、勿扰转移业 务和等
该实现通常是由SIP应用服务器来实现的,当用户的电话无法接听或用户不愿接电话,可以将来电转移到其它电话号码上。

(1)无条件呼叫转移业务(Call Forward Unconditional,CFU)

在wp820的web界面上设置好将1004的电话无条件转移并填好转移号为1105,则网络会自动将呼叫1004的通话转移到1105

首先会先收到1004端回应的302moved temporaily 临时移动 数据包,原因是无条件转移

然后再收到服务器端回应的181 call being forwarder 呼叫正在前向的数据包。转向提前设置的1105.

(2)分时间段呼叫转移业务

设置在话机的3点30-4点期间呼叫1104的通话转向1105.
由于设备有限,此次抓包呼叫转移,转移的另一个号码跟原号码是同机,因此IP相同,流序列看起来跟成功不太一样,但实际是成功的

(3)其他

遇忙呼叫前转(Call Forward Busy,CFB)

也叫占线转移,是指如果用户正在通话的过程中,有一个新的呼叫到达,此时网络判断该用户处于忙的状态,就会自动将后续到达的新呼叫转移到到用户预先设置的电话号码上。在激活遇忙呼叫前转业务时,不影响用户发起呼叫。用户在开启遇忙呼叫前转时,可以选择前转的目的地号码

用1004端拨打正在忙的1104,会转播到1105,原因是Busy
由于设备有限,此次抓包呼叫转移,转移的另一个号码跟原号码是同机,因此IP相同,流序列看起来跟成功不太一样,但实际是成功的

无应答呼叫前转(Call Forward No Answer,CFNA)

如果用户电话响铃一定时间内无人接听(预先设置无应答超时时间,例如30秒,其有效值为1-120秒),网络会自动将呼叫转移到预先设置的电话号码上去。即如果用户设置无应答前转的接听电话时间为30秒,则话机来电话时,用户在开始响铃的30秒内可正常接听,超过30秒如未接听则将来电呼转
当用户处于忙状态时,将不执行无应答呼叫前转;无应答呼叫前转不影响用户发起呼叫;用户在开启无应答呼叫前转时,可以选择其前转的目的号码

用1004拨打1104,设置无应答转播1105,无应答超时时间为20S,原因为unavailable

由于设备有限,此次抓包呼叫转移,转移的另一个号码跟原号码是同机,因此IP相同,流序列看起来跟成功不太一样,但实际是成功的

勿扰转移

当用户开启勿扰模式DND时,这项业务允许用户将它的来话转接到预先设置的另一个电话号码上。在激活勿扰转移时,不影响用户发起呼叫。

多方会议

通过1104建立会议室,邀请1106,1091进入会议室

备用服务器

登录到WP820页面,填写服务器地址,把192.168.80.26作为主SIP服务器,设置192.168.80.25,192.168.80.21作为备用服务器地址,只有主服务器地址未注册成功时,设备才会用备用服务器地址进行注册。

  • 9
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值