SIP - 消息传送
SIP 消息有两种类型:请求和响应。
请求的开头行包含定义请求的方法和定义请求发送位置的请求 URI。
同样,响应的开头行包含响应代码。
请求方法
SIP 请求是用于建立通信的代码。为了补充它们,SIP 响应通常指示请求是成功还是失败。
这些 SIP 请求(称为“方法”)使 SIP 消息变得可行。
METHODS 可以被视为 SIP 请求,因为它们请求另一个用户代理或服务器采取特定操作。
方法分为两种类型 -
核心方法
扩展方法
核心方法
下面讨论了六种核心方法。
邀请
INVITE 用于发起与用户代理的会话。换句话说,INVITE方法用于在用户代理之间建立媒体会话。
INVITE可以在消息体中包含主叫方的媒体信息。
如果 INVITE 已收到成功响应 (2xx) 或已发送 ACK,则认为会话已建立。
成功的 INVITE 请求会在两个用户代理之间建立对话,该对话将持续到发送 BYE 来终止会话为止。
在已建立的对话中发送的 INVITE 称为re-INVITE。
Re-INVITE 用于更改会话特征或刷新对话状态。
邀请示例
以下代码显示了如何使用 INVITE。
INVITE sips:Bob@TMC.com SIP/2.0 Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9 Max-Forwards: 70 From: Alice<sips:Alice@TTP.com>;tag = 1234567 To: Bob<sips:Bob@TMC.com> Call-ID: 12345601@192.168.2.1 CSeq: 1 INVITE Contact: <sips:Alice@client.ANC.com> 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 是用于终止已建立会话的方法。这是一个 SIP 请求,可由呼叫者或被呼叫者发送以结束会话。
它不能由代理服务器发送。
BYE 请求通常会绕过代理服务器进行端到端路由。
BYE 不能发送到待处理的 INVITE 或未建立的会话。
登记
REGISTER 请求执行用户代理的注册。该请求由用户代理发送到注册服务器。
REGISTER 请求可以被转发或代理,直到它到达指定域的权威注册商。
它在正在注册的用户的To标头中携带 AOR(记录地址) 。
REGISTER 请求包含时间段(3600 秒)。
一个用户代理可以代表另一用户代理发送 REGISTER 请求。这称为第三方注册。这里,From标签包含代表To标头中标识的一方提交注册的一方的URI 。
取消
CANCEL 用于终止未建立的会话。用户代理使用此请求来取消先前发起的待处理呼叫尝试。
它可以由用户代理或代理服务器发送。
CANCEL 是逐跳请求,即它遍历用户代理之间的元素并接收下一个有状态元素生成的响应。
确认
ACK 用于确认对 INVITE 方法的最终响应。ACK 始终朝 INVITE 方向发送。如果 INVITE 中不可用,则 ACK 可能包含 SDP 主体(媒体特征)。
ACK 不能用于修改已在初始 INVITE 中发送的媒体描述。
接收 ACK 的有状态代理必须确定是否应将 ACK 向下转发到另一个代理或用户代理。
对于 2xx 响应,ACK 是端到端的,但对于所有其他最终响应,当涉及有状态代理时,它会逐跳工作。
选项
OPTIONS 方法用于查询用户代理或代理服务器的功能并发现其当前的可用性。对请求的响应列出了用户代理或服务器的功能。代理永远不会生成 OPTIONS 请求。
扩展方法
订阅
用户代理使用 SUBSCRIBE 来建立订阅,以获取有关特定事件的通知。
它包含一个Expires标头字段,指示订阅的持续时间。
期限过后,订阅将自动终止。
订阅在用户代理之间建立对话。
您可以在过期时间之前通过在对话框中发送另一个 SUBSCRIBE 来再次重新订阅。
将收到用户的订阅 200 OK。
用户可以通过发送另一个过期值为 0(零)的 SUBSCRIBE 方法来取消订阅。
通知
NOTIFY 由用户代理用来获取特定事件的发生情况。通常,当订阅者和通知者之间存在订阅时,NOTIFY 将在对话框中触发。
如果通知者收到每个 NOTIFY 将得到 200 OK 响应。
NOTIFY 包含指示事件的事件头字段和指示订阅的当前状态的订阅状态头字段。
NOTIFY 始终在订阅开始和终止时发送。
发布
用户代理使用 PUBLISH 将事件状态信息发送到服务器。
当存在多个事件信息源时,PUBLISH 最有用。
PUBLISH 请求与 NOTIFY 类似,只是它不是在对话框中发送。
PUBLISH 请求必须包含Expires标头字段和Min-Expires标头字段。
参考
用户代理使用 REFER 来引用另一个用户代理来访问对话的 URI。
REFER 必须包含Refer-To标头。这是 REFER 的强制标头。
REFER 可以在对话框内部或外部发送。
202 Accepted将触发 REFER 请求,表明其他用户代理已接受该引用。
信息
用户代理使用 INFO 将呼叫信令信息发送到与其建立媒体会话的另一个用户代理。
这是一个端到端的请求。
代理将始终转发 INFO 请求。
更新
如果会话未建立,则使用 UPDATE 修改会话状态。用户可以使用 UPDATE 更改编解码器。
如果建立了会话,则使用重新邀请来更改/更新会话。
普瑞克
PRACK 用于确认收到临时响应(1XX)的可靠传输。
通常,PRACK 由客户端在收到包含RSeq可靠序列号和supported:100rel标头的临时响应时生成。
PRACK 在机架标头中包含 (RSeq + CSeq) 值。
PRACK 方法适用于除 100 Trying 响应之外的所有临时响应,该响应从不可靠传输。
PRACK可以包含消息体;它可以用于报价/答案交换。
信息
它用于使用 SIP 发送即时消息。IM 通常由参与文本对话的参与者实时交换的短消息组成。
MESSAGE 可以在对话框内或对话框外发送。
MESSAGE 的内容作为MIME附件携带在消息正文中。
通常会收到200 OK响应,表明消息已送达目的地。