联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:3810899917

sip 协议如何实现通信的呢?

sip 协议如何实现通信的呢?

SIP(Session Initiation Protocol,会话发起协议)是一种用于在互联网中进行实时通信的信令协议。它主要用于建立、修改和终止通信会话,如语音、视频通话、即时消息等。SIP协议的设计目的是提供一个统一的框架来实现不同设备和应用之间的通信。
SIP协议通过以下几个主要步骤实现通信:

1. 建立会话(邀请阶段)

  • 请求发送:通信的发起方(用户A)向目标方(用户B)发送一个INVITE请求。这个请求包含了会话的参数,例如支持的编解码器、传输协议等信息。

  • 路由:请求可能需要经过多个代理服务器或中间设备。每个设备都会处理请求、转发给目标设备,直到最终到达目标方(用户B)。

例如:

INVITE sip:bob@server.com SIP/2.0
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK12345
Max-Forwards: 70
To: Bob <sip:bob@server.com>
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 1 INVITE
Content-Type: application/sdp
Content-Length: 150

2. 响应阶段

  • 目标设备(用户B)接收到INVITE请求后,进行响应。可能的响应包括:- 180 Ringing:表示目标设备开始响铃。

    • 200 OK:表示目标设备同意建立会话,并且会话已准备好。此时,目标设备会发送一些关于会话的信息(例如编解码器、媒体流等)。

列入:

SIP/2.0 180 Ringing
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK12345
To: Bob <sip:bob@server.com>;tag=server
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 1 INVITE

3. 媒体协商

  • 在响应中,目标设备(用户B)会发送一个200 OK响应,并包含媒体协议信息(通常是SDP,Session Description Protocol),用于描述支持的媒体类型和参数。

  • 发起方(用户A)收到响应后,会检查这些信息,并通过发送一个ACK消息来确认会话的建立。此时,媒体通道也会建立,通信可以开始。

列如:

SIP/2.0 200 OK
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK12345
To: Bob <sip:bob@server.com>;tag=server
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 1 INVITE
Content-Type: application/sdp
Content-Length: 150

之后,发起方会发送一个ACK请求:

ACK sip:bob@server.com SIP/2.0
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK98765
To: Bob <sip:bob@server.com>;tag=server
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 1 ACK

4. 会话进行(媒体传输)

  • 一旦ACK确认消息发送完毕,通信的双方可以通过先前协商的媒体通道进行实际的数据交换(如语音或视频流)。

  • 在此阶段,媒体流通过不同的协议传输,如RTP(Real-time Transport Protocol)用于传输音频和视频数据。

5. 结束会话(BYE阶段)

  • 当任一方希望终止会话时,会发送一个BYE请求。这个请求用于告诉对方会话结束,通信双方也会停止媒体流。

列如:

BYE sip:bob@server.com SIP/2.0
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK54321
To: Bob <sip:bob@server.com>;tag=server
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 2 BYE
  • 目标设备(用户B)收到BYE请求后,发送一个200 OK响应,表示已终止会话。

列如:

SIP/2.0 200 OK
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK54321
To: Bob <sip:bob@server.com>;tag=server
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 2 BYE

SIP的基本消息类型

SIP协议有以下几种基本消息类型:

  • INVITE:请求建立会话。

  • ACK:确认建立会话。

  • BYE:请求结束会话。

  • CANCEL:取消会话请求。

  • OPTIONS:查询服务器的功能和状态。

  • REGISTER:向SIP服务器注册用户信息。

  • PRACK:确认可靠的临时响应。

总结

SIP协议通过发送和接收不同类型的消息来实现通信。其主要流程包括建立会话、媒体协商、数据传输以及终止会话。SIP的优点是灵活且扩展性强,支持各种实时通信应用如语音、视频、即时消息等。

 

下面是一些 sip 常见的协议的备注详解

1. INVITE 请求(发起会话)

INVITE sip:bob@server.com SIP/2.0                     ; 请求URI,目标用户地址
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK12345  ; 路由信息,branch是事务ID
Max-Forwards: 70                                      ; 最大可转发次数,防止环路
To: Bob <sip:bob@server.com>                          ; 目标用户信息
From: Alice <sip:alice@client.com>;tag=client         ; 发起者信息,tag用于区分对话
Call-ID: 1234567890@client.com                        ; 通话标识,全局唯一
CSeq: 1 INVITE                                        ; 序列号和方法名
Contact: <sip:alice@client.com>                       ; 发起方可被联系的地址
Content-Type: application/sdp                         ; 消息体类型为SDP
Content-Length: 150                                   ; 消息体长度
; 秒杀字段(示例):
X-Feature-Seckill: true                               ; 自定义扩展字段,表示启用“秒杀”业务功能(如针对促销通话)

2. 180 Ringing 响铃响应

SIP/2.0 180 Ringing                                   ; 响应码180表示正在响铃
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK12345  ; 与请求中的Via对应
To: Bob <sip:bob@server.com>;tag=server               ; 响应方信息,添加tag标识会话
From: Alice <sip:alice@client.com>;tag=client         ; 原请求发起者
Call-ID: 1234567890@client.com                        ; 会话标识
CSeq: 1 INVITE                                        ; 对应的请求序列号

3. 200 OK 响应(接受会话)

 

SIP/2.0 200 OK                                        ; 表示接受请求,成功建立会话
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK12345  ; 与请求一致
To: Bob <sip:bob@server.com>;tag=server               ; 响应方标识
From: Alice <sip:alice@client.com>;tag=client         ; 请求方标识
Call-ID: 1234567890@client.com                        ; 唯一会话标识
CSeq: 1 INVITE                                        ; 对应请求序列号
Contact: <sip:bob@server.com>                         ; 接收方当前联系地址
Content-Type: application/sdp                         ; 消息体类型
Content-Length: 150                                   ; 消息体长度
; 秒杀字段(示例):
X-Feature-Seckill: true                               ; 标示服务端已开启“秒杀”特性,可能影响资源调度或通话时长限制

4. ACK 确认响应(建立媒体)

 

ACK sip:bob@server.com SIP/2.0                        ; 确认接收到200 OK
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK98765  ; 新的事务ID
To: Bob <sip:bob@server.com>;tag=server               ; 接收方信息
From: Alice <sip:alice@client.com>;tag=client         ; 发送方信息
Call-ID: 1234567890@client.com                        ; 与前面保持一致
CSeq: 1 ACK                                           ; ACK确认消息

5. BYE 结束会话

 

BYE sip:bob@server.com SIP/2.0                        ; 请求终止会话
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK54321  ; 新事务ID
To: Bob <sip:bob@server.com>;tag=server               ; 会话对象
From: Alice <sip:alice@client.com>;tag=client         ; 会话发起者
Call-ID: 1234567890@client.com                        ; 会话标识
CSeq: 2 BYE                                           ; 新的请求序列号

6. 200 OK 响应(确认结束)

 

SIP/2.0 200 OK                                        ; 响应BYE,确认会话已结束
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK54321  ; 对应事务ID
To: Bob <sip:bob@server.com>;tag=server
From: Alice <sip:alice@client.com>;tag=client
Call-ID: 1234567890@client.com
CSeq: 2 BYE

关于 X-Feature-Seckill 字段说明:

  • X-Feature-Seckill 是一个自定义 SIP 扩展头部字段(非标准SIP字段),常用于传递应用层业务标志。

  • 名称中的“秒杀”(Seckill)可能用于标识该通话是否属于特定促销、抢购类业务场景。

  • 应用场景举例:- 限时抢购语音服务

    • 促销活动专线呼叫

    • 临时优惠拨号策略

注意:自定义 SIP 字段应使用 X- 前缀,并确保通信双方都理解其语义。

 

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册