SIP - 消息传递
SIP消息有两种类型 − 请求和响应。
请求的开头行包含定义请求的方法和定义请求发送位置的 Request-URI。
同样,响应的开头行包含响应代码。
请求方法
SIP 请求是用于建立通信的代码。 为了补充它们,SIP 响应通常指示请求是成功还是失败。
这些 SIP 请求(称为"方法")使 SIP 消息变得可行。
METHODS 可以被视为 SIP 请求,因为它们请求另一个用户代理或服务器采取特定操作。
方法分为两种类型 −
核心方法
扩展方法
核心方法
有如下讨论的六种核心方法。
INVITE
INVITE 用于发起与用户代理的会话。 换句话说,INVITE方法用于在用户代理之间建立媒体会话。
INVITE可以在消息正文中包含主叫方的媒体信息。
如果 INVITE 已收到成功响应 (2xx) 或已发送 ACK,则认为会话已建立。
成功的 INVITE 请求会在两个用户代理之间建立一个对话,该对话将持续到发送 BYE 来终止会话为止。
在已建立的对话中发送的 INVITE 称为重新 INVITE。
Re-INVITE 用于更改会话特征或刷新对话状态。
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
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 中不可用,则 ACK 可能包含 SDP 主体(媒体特征)。
ACK 不能用于修改已在初始 INVITE 中发送的媒体描述。
接收 ACK 的有状态代理必须确定是否应将 ACK 向下游转发到另一个代理或用户代理。
对于 2xx 响应,ACK 是端到端的,但对于所有其他最终响应,当涉及有状态代理时,它会逐跳工作。
OPTIONS
OPTIONS 方法用于查询用户代理或代理服务器的功能并发现其当前的可用性。 对请求的响应列出了用户代理或服务器的功能。 代理永远不会生成 OPTIONS 请求。
扩展方法
Subscribe
SUBSCRIBE 由用户代理用来建立订阅,以获取有关特定事件的通知。
它包含一个 Expires 标头字段,指示订阅的持续时间。
超过该时间段后,订阅将自动终止。
订阅在用户代理之间建立对话。
您可以在过期时间之前通过在对话框中发送另一个 SUBSCRIBE 来重新订阅。
将收到用户的订阅 200 OK。
用户可以通过发送另一个过期值为 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 Accepted 将触发 REFER 请求,表明其他用户代理已接受该引用。
INFO
用户代理使用 INFO 将呼叫信令信息发送到与其建立媒体会话的另一个用户代理。
这是一个端到端请求。
代理将始终转发 INFO 请求。
UPDATE
如果会话未建立,则使用 UPDATE 来修改会话的状态。 用户可以通过 UPDATE 更改编解码器。
如果建立了会话,则使用重新邀请来更改/更新会话。
PRACK
PRACK 用于确认收到临时响应 (1XX) 的可靠传输。
通常,PRACK 是由客户端在收到包含 RSeq 可靠序列号和 supported:100rel 标头的临时响应时生成的。
PRACK 在 rack 标头中包含 (RSeq + CSeq) 值。
PRACK 方法适用于除 100 Trying 响应之外的所有临时响应,该响应从不可靠传输。
PRACK 可以包含消息正文; 它可以用于offer/answer交换。
MESSAGE
它用于使用SIP发送即时消息。 IM 通常由参与文本对话的参与者实时交换的短消息组成。
MESSAGE 可以在对话框内或对话框外发送。
MESSAGE 的内容作为 MIME 附件携带在消息正文中。
通常会收到 200 OK 响应,表明消息已送达目的地。