- 会话发起协议教程
- SIP - 首页
- SIP - 简介
- SIP - 网络元素
- SIP - 基本呼叫流程
- SIP - 消息
- SIP - 响应码
- SIP - 头部
- SIP - 会话描述协议
- SIP - 提供/应答模型
- SIP - 移动性
- SIP - 分支
- SIP - 代理和路由
- SIP 到 PSTN
- SIP - 编解码器
- SIP - 回拨用户代理 (B2BUA)
- SIP 有用资源
- SIP - 快速指南
- SIP - 有用资源
- SIP - 讨论
SIP - 消息
SIP 消息分为两种:请求和响应。
请求的首行包含一个定义请求的方法和一个定义请求发送位置的请求URI。
类似地,响应的首行包含一个响应代码。
请求方法
SIP 请求是用于建立通信的代码。为了补充它们,有SIP 响应,它们通常指示请求成功还是失败。
这些被称为方法的 SIP 请求使 SIP 消息能够工作。
方法可以被视为 SIP 请求,因为它们请求另一个用户代理或服务器采取特定操作。
方法分为两种类型:
核心方法
扩展方法
核心方法
如下所述,共有六种核心方法。
INVITE
INVITE 用于与用户代理发起会话。换句话说,INVITE 方法用于在用户代理之间建立媒体会话。
INVITE 可以包含消息正文中呼叫者的媒体信息。
如果 INVITE 收到成功响应 (2xx) 或已发送 ACK,则会话被认为已建立。
成功的 INVITE 请求在两个用户代理之间建立一个对话,该对话持续到发送 BYE 以终止会话为止。
在已建立的对话中发送的 INVITE 称为重新邀请 (re-INVITE)。
重新邀请用于更改会话特性或刷新对话状态。
INVITE 示例
以下代码显示了如何使用 INVITE。
INVITE sips:[email protected] SIP/2.0 Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9 Max-Forwards: 70 From: Alice<sips:[email protected]>;tag = 1234567 To: Bob<sips:[email protected]> Call-ID: [email protected] CSeq: 1 INVITE Contact: <sips:[email protected]> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v = 0 o = Alice 2890844526 2890844526 IN IP4 client.ANC.com s = Session SDP c = IN IP4 client.ANC.com t = 3034423619 0 m = audio 49170 RTP/AVP 0 a = rtpmap:0 PCMU/8000
BYE
BYE 是用于终止已建立会话的方法。这是一个 SIP 请求,可以由呼叫者或被叫者发送以结束会话。
它不能由代理服务器发送。
BYE 请求通常端到端路由,绕过代理服务器。
BYE 不能发送到待处理的 INVITE 或未建立的会话。
REGISTER
REGISTER 请求执行用户代理的注册。此请求由用户代理发送到注册服务器。
REGISTER 请求可能会被转发或代理,直到到达指定域的权威注册服务器。
它在正在注册用户的To头部中携带 AOR(记录地址)。
REGISTER 请求包含时间段 (3600 秒)。
一个用户代理可以代表另一个用户代理发送 REGISTER 请求。这被称为第三方注册。这里,From标签包含代表To头部中标识的方提交注册方的 URI。
CANCEL
CANCEL 用于终止未建立的会话。用户代理使用此请求来取消之前发起的待处理呼叫尝试。
它可以由用户代理或代理服务器发送。
CANCEL 是一个逐跳请求,即它通过用户代理之间的元素,并接收下一个有状态元素生成的响应。
ACK
ACK 用于确认对 INVITE 方法的最终响应。ACK 始终与 INVITE 同方向。如果 INVITE 中没有 SDP 主体(媒体特性),则 ACK 可能包含 SDP 主体。
ACK 不能用于修改已在初始 INVITE 中发送的媒体描述。
接收 ACK 的有状态代理必须确定是否应将 ACK 向下游转发到另一个代理或用户代理。
对于 2xx 响应,ACK 是端到端的,但对于所有其他最终响应,当涉及有状态代理时,它基于逐跳工作。
OPTIONS
OPTIONS 方法用于查询用户代理或代理服务器的功能并发现其当前可用性。对请求的响应列出了用户代理或服务器的功能。代理永远不会生成 OPTIONS 请求。
扩展方法
订阅
用户代理使用 SUBSCRIBE 来建立订阅,以获取有关特定事件的通知。
它包含一个Expires头部字段,指示订阅的持续时间。
时间段过去后,订阅将自动终止。
订阅在用户代理之间建立对话。
您可以在过期时间之前,通过在对话中发送另一个 SUBSCRIBE 来再次订阅。
用户将收到来自用户的 200 OK 订阅。
用户可以通过发送另一个 Expires 值为 0(零)的 SUBSCRIBE 方法来取消订阅。
NOTIFY
NOTIFY 用于用户代理获取特定事件的发生。通常,当订阅者和通知者之间存在订阅时,NOTIFY 将在对话中触发。
如果通知者收到每个 NOTIFY,则会获得 200 OK 响应。
NOTIFY 包含一个Event头部字段,指示事件,以及一个subscriptionstate头部字段,指示订阅的当前状态。
NOTIFY 始终在订阅开始和终止时发送。
PUBLISH
PUBLISH 用于用户代理将事件状态信息发送到服务器。
当存在多个事件信息源时,PUBLISH 最有用。
PUBLISH 请求类似于 NOTIFY,不同之处在于它不是在对话中发送的。
PUBLISH 请求必须包含Expires头部字段和Min-Expires头部字段。
REFER
REFER 用于用户代理将另一个用户代理引用到访问对话的 URI。
REFER 必须包含Refer-To头部。这是 REFER 的必填头部。
REFER 可以在对话内或对话外发送。
202 已接受将触发 REFER 请求,这表示另一个用户代理已接受引用。
INFO
INFO 用于用户代理向与其建立了媒体会话的另一个用户代理发送呼叫信令信息。
这是一个端到端请求。
代理将始终转发 INFO 请求。
UPDATE
如果会话未建立,UPDATE 用于修改会话的状态。用户可以使用 UPDATE 更改编解码器。
如果会话已建立,则使用重新邀请来更改/更新会话。
PRACK
PRACK 用于确认临时响应 (1XX) 的可靠传输。
通常,当客户端收到包含RSeq可靠序列号和supported:100rel头部的临时响应时,客户端会生成 PRACK。
PRACK 在rack头部中包含 (RSeq + CSeq) 值。
PRACK 方法适用于所有临时响应,但 100 Trying 响应除外,该响应永远不会可靠地传输。
PRACK 可以包含消息正文;它可用于提供/应答交换。
MESSAGE
它用于使用 SIP 发送即时消息。IM 通常由参与文本对话的参与者实时交换的简短消息组成。
MESSAGE 可以在对话内或对话外发送。
MESSAGE 的内容作为MIME附件包含在消息正文中。
通常会收到200 OK响应以指示消息已交付到其目的地。