SIP - 消息传递


SIP消息有两种类型 − 请求响应

  • 请求的开头行包含定义请求的方法和定义请求发送位置的 Request-URI。

  • 同样,响应的开头行包含响应代码。

请求方法

SIP 请求是用于建立通信的代码。 为了补充它们,SIP 响应通常指示请求是成功还是失败。

这些 SIP 请求(称为"方法")使 SIP 消息变得可行。

  • METHODS 可以被视为 SIP 请求,因为它们请求另一个用户代理或服务器采取特定操作。

  • 方法分为两种类型 −

    • 核心方法

    • 扩展方法

核心方法

有如下讨论的六种核心方法。

INVITE

INVITE 用于发起与用户代理的会话。 换句话说,INVITE方法用于在用户代理之间建立媒体会话。

  • INVITE可以在消息正文中包含主叫方的媒体信息。

  • 如果 INVITE 已收到成功响应 (2xx) 或已发送 ACK,则认为会话已建立。

  • Invite
  • 成功的 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 主体(媒体特征)。

SDP Ack
  • ACK 不能用于修改已在初始 INVITE 中发送的媒体描述。

SDP 确认
  • 接收 ACK 的有状态代理必须确定是否应将 ACK 向下游转发到另一个代理或用户代理。

  • 对于 2xx 响应,ACK 是端到端的,但对于所有其他最终响应,当涉及有状态代理时,它会逐跳工作。

OPTIONS

OPTIONS 方法用于查询用户代理或代理服务器的功能并发现其当前的可用性。 对请求的响应列出了用户代理或服务器的功能。 代理永远不会生成 OPTIONS 请求。

扩展方法

Subscribe

SUBSCRIBE 由用户代理用来建立订阅,以获取有关特定事件的通知。

  • 它包含一个 Expires 标头字段,指示订阅的持续时间。

  • 超过该时间段后,订阅将自动终止。

  • 订阅在用户代理之间建立对话。

  • 您可以在过期时间之前通过在对话框中发送另一个 SUBSCRIBE 来重新订阅。

  • 将收到用户的订阅 200 OK。

  • 用户可以通过发送另一个过期值为 0(零)的 SUBSCRIBE 方法来取消订阅。

Example Subscribe

NOTIFY

NOTIFY 由用户代理用来获取特定事件的发生。 通常,当订阅者和通知者之间存在订阅时,NOTIFY 将在对话框中触发。

  • 每个 NOTIFY 如果被通知者收到,将会得到 200 OK 响应。

  • NOTIFY 包含指示事件的 Event 标头字段和指示订阅当前状态的 subscriptionstate 标头字段。

  • NOTIFY 始终在订阅开始和终止时发送。

PUBLISH

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 更改编解码器。

Update

如果建立了会话,则使用重新邀请来更改/更新会话。

PRACK

PRACK 用于确认收到临时响应 (1XX) 的可靠传输。

  • 通常,PRACK 是由客户端在收到包含 RSeq 可靠序列号和 supported:100rel 标头的临时响应时生成的。

  • PRACK 在 rack 标头中包含 (RSeq + CSeq) 值。

  • PRACK 方法适用于除 100 Trying 响应之外的所有临时响应,该响应从不可靠传输。

  • PRACK 可以包含消息正文; 它可以用于offer/answer交换。

MESSAGE

它用于使用SIP发送即时消息。 IM 通常由参与文本对话的参与者实时交换的短消息组成。

Message
  • MESSAGE 可以在对话框内或对话框外发送。

  • MESSAGE 的内容作为 MIME 附件携带在消息正文中。

  • 通常会收到 200 OK 响应,表明消息已送达目的地。