SIP

SIP #

SIP 协议使用 RTP 协议传送音视频数据流,使用 SDP 协议进行媒体描述。

CALL-ID #

SIP 的一次通话,可以通过 From, To, Call-ID 三元组来区分。

CALL-ID 字段用于标识一个特定邀请以及与这个邀请相关的所有后续事务(即标识一个会话)


包内容 #

Message #

Session Initiation Protocol (MESSAGE)
    Request-Line: MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
    Message Header
        Via: SIP/2.0/UDP 192.168.137.109:5060;rport;branch=z9hG4bK1013136823
        From: <sip:34020000001320000001@3402000000>;tag=676399389
        To: <sip:34020000002000000001@3402000000>
        Call-ID: 1119613114
        CSeq: 20 MESSAGE
        Content-Type: Application/MANSCDP+xml
        Max-Forwards: 70
        User-Agent: IP Camera
        Content-Length:   178
    Message Body
        <?xml version="1.0" encoding="GB2312"?>\n
        <Notify>\n
        <CmdType>Keepalive</CmdType>\n
        <SN>123</SN>\n
        <DeviceID>34020000001320000001</DeviceID>\n
        <Status>OK</Status>\n
        <Info>\n
        </Info>\n
        </Notify>\n

Bye #

同一个会话,CSeq 要 +1

Invite->100->200->Ack ->Bye->200

Bye 的包,From 和 To 要和 Ack 的一致(包括 tag),Call-ID 也要一致


包字段 #

SN(命令序列号) #

MANSCDP 消息中的 SN 值用于与请求命令的匹配处理,响应命令中的 SN 值应使用请求命令中的 SN 值。


SIP Proxy #

SIP Proxy 有分为两种模式,一种是状态代理模式,另外一种是无状态代理模式。

SIP 代理自己本身不能发起 INVITE 或者 BYE 请求,这样就不能满足 IP 语音通信的基本呼叫功能。

双方终端通过多个 Proxy 代理以后,根据 Route Set 返回处理流程。 但是,在一些情况下,如果终端忽略了 Route Set 以后,直接通过呼叫方和被呼叫方,双方可能进行非法呼叫, 它们跳过了代理服务器,导致业务控制层很难对其进行管理。

为了解决这个问题,引入了 B2BUA 机制,通过背靠背的方式来实现业务能力的管理和会话的管理

开源实现 #

Kamalio #

kamailio/kamailio Github stars

OpenSIPS #

OpenSIPS/opensips Github stars


B2BUA #

B2BUA 是一个逻辑实体,它由一个 UAS 和一个 UAC 两个部分构成,分别负责接收请求,处理请求和生成请求。 B2BUA 和 SIP 代理不同,它必须保持在 dialog 中所有创建的请求。只有这样,B2BUA 才能完全控制所有需要管理的会话。

B2BUA 具体的构成如下:

B2BUA 介于两个终端之间

  1. UAC 对 B2BUA 发起一个 INVITE 请求,在 B2BUA 端,B2BUA 是一个 UAS 来接收这个请求,创建了第一个会话来管理这个请求。双方保存了彼此的 Route Set 记录消息。
  2. 为了对另外一个终端发起 INVITE 请求,B2BUA 同时也扮演了一个 UAC 的角色,它创建了第二个会话,并且再次对下游终端发起 INVITE 请求。这里,UAC 需要从 UAS 端拷贝 SDP 消息和其他必要消息内容。然后,UAC 对下游终端发起 INVITE 请求。终端接收了 INVITE 请求,并且保存了 Route Set 数据记录。
  3. 为了响应 INVITE 请求,这里,下游终端就会变成一个 UAS 回复 B2BUA 200 OK。B2BUA 再次拷贝 200 OK 的消息,然后通过 UAS 再次返回到 UAC 终端。
  4. UAC 终端收到 200 OK 以后,保存为 Route Set 数据内容。

为什么需要 B2BUA #

如果计费模块检测到双方呼叫费用出现超额的时候,这时,B2BUA 会切换成 UAC/UAC 的状态,同时对终端发送 BYE 消息。


教程 #


参考 #


本文访问量

本站总访问量

本站总访客数