📜  SIP-消息传递

📅  最后修改于: 2020-10-29 03:48:26             🧑  作者: Mango


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

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

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

申请方法

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

这些被称为“方法”的SIP请求使SIP消息可行。

  • 方法可以视为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;tag = 1234567 
   To: Bob
   Call-ID: 12345601@192.168.2.1  
   CSeq: 1 INVITE 
   Contact:  
   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主体(媒体特征)。

SDP确认

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

SDP确认

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

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

选项

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

扩展方法

订阅

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

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

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

  • 订阅将在用户代理之间建立一个对话框。

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

  • 从用户那里收到200 OK的订阅。

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

示例订阅

通知

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

  • 如果通知程序收到每个NOTIFY通知,则将获得200 OK响应。

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

  • 通知始终在订阅的开始和结束时发送。

发布

用户代理使用PUBLISH将事件状态信息发送到服务器。

发布

  • 当事件信息有多个来源时,发布最有用。

  • PUBLISH请求类似于NOTIFY,不同之处在于它不是在对话框中发送的。

  • PUBLISH请求必须包含Expires标头字段和Min-Expires标头字段。

参考

用户代理使用REFER引用另一个用户代理来访问对话框的URI。

  • REFER必须包含Refer-To标头。这是REFER的必需标头。

  • 可以在对话框内部或外部发送参考。

  • 202已接受”将触发REFER请求,该请求指示其他用户代理已接受参考。

信息

用户代理使用INFO向与之建立媒体会话的另一个用户代理发送呼叫信令信息。

  • 这是一个端到端的请求。

  • 代理将始终转发INFO请求。

更新

如果未建立会话,则使用UPDATE修改会话的状态。用户可以使用UPDATE更改编解码器。

更新资料

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

包装

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

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

  • PRACK在机架标题中包含(RSeq+ CSeq)值。

  • PRACK方法适用于除100 Trying响应之外的所有临时响应,后者永远不会可靠地传输。

  • PRACK可能包含消息正文;它可以用于报价/答案交换。

信息

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

信息

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

  • MESSAGE的内容作为MIME附件包含在消息主体中。

  • 通常会收到200 OK响应,以指示该消息已在其目的地传递。