Internet Engineering Task Force (IETF)                        S. Okumura
Request for Comments: 6337                                     Softfront
Category: Informational                                        T. Sawada
ISSN: 2070-1721                                         KDDI Corporation
                                                              P. Kyzivat
                                                             August 2011
        
Internet Engineering Task Force (IETF)                        S. Okumura
Request for Comments: 6337                                     Softfront
Category: Informational                                        T. Sawada
ISSN: 2070-1721                                         KDDI Corporation
                                                              P. Kyzivat
                                                             August 2011
        

Session Initiation Protocol (SIP) Usage of the Offer/Answer Model

会话启动协议(SIP)提供/应答模型的使用

Abstract

摘要

The Session Initiation Protocol (SIP) utilizes the offer/answer model to establish and update multimedia sessions using the Session Description Protocol (SDP). The description of the offer/answer model in SIP is dispersed across multiple RFCs. This document summarizes all the current usages of the offer/answer model in SIP communication.

会话发起协议(SIP)利用提供/应答模型,使用会话描述协议(SDP)建立和更新多媒体会话。SIP中提供/应答模型的描述分散在多个RFC中。本文档总结了SIP通信中提供/应答模型的所有当前用法。

Status of This Memo

关于下段备忘

This document is not an Internet Standards Track specification; it is published for informational purposes.

本文件不是互联网标准跟踪规范;它是为了提供信息而发布的。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Not all documents approved by the IESG are a candidate for any level of Internet Standard; see Section 2 of RFC 5741.

本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被互联网工程指导小组(IESG)批准出版。并非IESG批准的所有文件都适用于任何级别的互联网标准;见RFC 5741第2节。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6337.

有关本文件当前状态、任何勘误表以及如何提供反馈的信息,请访问http://www.rfc-editor.org/info/rfc6337.

Copyright Notice

版权公告

Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved.

版权所有(c)2011 IETF信托基金和确定为文件作者的人员。版权所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must

本文件受BCP 78和IETF信托有关IETF文件的法律规定的约束(http://trustee.ietf.org/license-info)自本文件出版之日起生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从该文档中提取的代码组件必须

include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

包括信托法律条款第4.e节中所述的简化BSD许可证文本,且不提供简化BSD许可证中所述的担保。

Table of Contents

目录

   1. Introduction ....................................................3
   2. Summary of SIP Usage of the Offer/Answer Model ..................3
      2.1. Terminology ................................................3
      2.2. Offer/Answer Exchange Pairs in SIP Messages ................4
      2.3. Rejection of an Offer ......................................5
      2.4. Session Description That Is Not an Offer or an Answer ......7
   3. Detailed Discussion of the Offer/Answer Model for SIP ...........8
      3.1. Offer/Answer for the INVITE method with 100rel Extension ...8
           3.1.1. INVITE Request with SDP .............................8
           3.1.2. INVITE Request without SDP .........................11
      3.2. Offer/Answer Exchange in Early Dialog .....................12
      3.3. Offer/Answer Exchange in an Established Dialog ............12
      3.4. Recovering from a Failed Re-INVITE ........................13
   4. Exceptional Case Handling ......................................13
      4.1. Message Crossing Case Handling ............................13
      4.2. Glare Case Handling .......................................18
      4.3. Interworking of UPDATE and Re-INVITE ......................21
   5. Content of Offers and Answers ..................................25
      5.1. General Principle for Constructing Offers and Answers .....26
      5.2. Choice of Media Types and Formats to Include and Exclude ..26
           5.2.1. Sending an Initial INVITE with Offer ...............26
           5.2.2. Responding with an Offer When the Initial
                  INVITE Has No Offer ................................27
           5.2.3. Answering an Initial INVITE with Offer .............27
           5.2.4. Answering When the Initial INVITE Had No Offer .....28
           5.2.5. Subsequent Offers and Answers ......................28
      5.3. Hold and Resume of Media ..................................29
      5.4. Behavior on Receiving SDP with c=0.0.0.0 ..................31
   6. Security Considerations ........................................31
   7. Acknowledgements ...............................................31
   8. References .....................................................32
      8.1. Normative References ......................................32
      8.2. Informative References ....................................33
        
   1. Introduction ....................................................3
   2. Summary of SIP Usage of the Offer/Answer Model ..................3
      2.1. Terminology ................................................3
      2.2. Offer/Answer Exchange Pairs in SIP Messages ................4
      2.3. Rejection of an Offer ......................................5
      2.4. Session Description That Is Not an Offer or an Answer ......7
   3. Detailed Discussion of the Offer/Answer Model for SIP ...........8
      3.1. Offer/Answer for the INVITE method with 100rel Extension ...8
           3.1.1. INVITE Request with SDP .............................8
           3.1.2. INVITE Request without SDP .........................11
      3.2. Offer/Answer Exchange in Early Dialog .....................12
      3.3. Offer/Answer Exchange in an Established Dialog ............12
      3.4. Recovering from a Failed Re-INVITE ........................13
   4. Exceptional Case Handling ......................................13
      4.1. Message Crossing Case Handling ............................13
      4.2. Glare Case Handling .......................................18
      4.3. Interworking of UPDATE and Re-INVITE ......................21
   5. Content of Offers and Answers ..................................25
      5.1. General Principle for Constructing Offers and Answers .....26
      5.2. Choice of Media Types and Formats to Include and Exclude ..26
           5.2.1. Sending an Initial INVITE with Offer ...............26
           5.2.2. Responding with an Offer When the Initial
                  INVITE Has No Offer ................................27
           5.2.3. Answering an Initial INVITE with Offer .............27
           5.2.4. Answering When the Initial INVITE Had No Offer .....28
           5.2.5. Subsequent Offers and Answers ......................28
      5.3. Hold and Resume of Media ..................................29
      5.4. Behavior on Receiving SDP with c=0.0.0.0 ..................31
   6. Security Considerations ........................................31
   7. Acknowledgements ...............................................31
   8. References .....................................................32
      8.1. Normative References ......................................32
      8.2. Informative References ....................................33
        
1. Introduction
1. 介绍

SIP utilizes the offer/answer model to establish and update sessions. The rules that govern the offer/answer behaviors in SIP are described in several RFCs: [RFC3261], [RFC3262], [RFC3264], [RFC3311], and [RFC6141].

SIP利用提供/应答模型来建立和更新会话。管理SIP中提供/应答行为的规则在几个RFC中进行了描述:[RFC3261]、[RFC3262]、[RFC3264]、[RFC3311]和[RFC6141]。

The primary purpose of this document is to describe all forms of SIP usage of the offer/answer model in one document to help the readers to fully understand it. Also, this document tries to incorporate the results of the discussions on the controversial issues to avoid repeating the same discussions later.

本文档的主要目的是在一个文档中描述提供/应答模型的所有形式的SIP使用,以帮助读者完全理解它。此外,本文件试图纳入关于有争议问题的讨论结果,以避免以后重复同样的讨论。

This document describes ambiguities in the current specifications and the authors' understanding of the correct interpretation of these specifications. This document is not intended to make any changes to those specifications, but rather is intended to provide a reference for future standards development work on the SIP offer/answer model and to developers looking for advice on how to implement in compliance with the standards.

本文件描述了当前规范中的歧义以及作者对这些规范正确解释的理解。本文档无意对这些规范进行任何更改,而是旨在为SIP提供/应答模型的未来标准开发工作提供参考,并为寻求如何按照标准实施建议的开发人员提供参考。

2. Summary of SIP Usage of the Offer/Answer Model
2. 提供/应答模型的SIP使用摘要

The offer/answer model itself is independent from the higher layer application protocols that utilize it. SIP is one of the applications using the offer/answer model. [RFC3264] defines the offer/answer model, but does not specify which SIP messages should convey an offer or an answer. This should be defined in the SIP core and extension RFCs.

提供/应答模型本身独立于使用它的高层应用程序协议。SIP是使用提供/应答模型的应用程序之一。[RFC3264]定义提供/应答模型,但未指定哪些SIP消息应传达提供或应答。这应该在SIP核心和扩展RFC中定义。

In theory, any SIP message can include a session description in its body. But a session description in a SIP message is not necessarily an offer or an answer. Only certain session description usages that conform to the rules described in Standards-Track RFCs can be interpreted as an offer or an answer. The rules for how to handle the offer/answer model are defined in several RFCs.

理论上,任何SIP消息都可以在其正文中包含会话描述。但是SIP消息中的会话描述不一定是提供或回答。只有符合标准跟踪RFCs中所述规则的特定会话描述用法才能解释为要约或答复。在几个RFC中定义了如何处理报价/应答模型的规则。

The offer/answer model defines a mechanism for update of sessions. In SIP, a dialog is used to associate an offer/answer exchange with the session that it is to update. In other words, only the offer/ answer exchange in the SIP dialog can update the session that is managed by that dialog.

提供/应答模型定义了会话更新的机制。在SIP中,一个对话框用于将提供/应答交换与要更新的会话相关联。换句话说,只有SIP对话框中的提供/应答交换可以更新由该对话框管理的会话。

2.1. Terminology
2.1. 术语

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照[RFC2119]中所述进行解释。

The following abbreviations are used in this document.

本文件中使用了以下缩写。

UA: User Agent.

用户代理。

UAC: User Agent Client.

用户代理客户端。

UAS: User Agent Server.

UAS:用户代理服务器。

SDP: Session Description Protocol [RFC4566].

会话描述协议[RFC4566]。

2.2. Offer/Answer Exchange Pairs in SIP Messages
2.2. SIP消息中的提供/应答交换对

Currently, the rules on the offer/answer model are defined in [RFC3261], [RFC3262], [RFC3264], [RFC3311], and [RFC6141]. In these RFCs, only the six patterns shown in Table 1 are defined for exchanging an offer and an answer with SIP messages.

目前,关于报价/应答模型的规则在[RFC3261]、[RFC3262]、[RFC3264]、[RFC3311]和[RFC6141]中定义。在这些RFC中,仅定义了表1中所示的六种模式,用于使用SIP消息交换要约和应答。

Note that an offer/answer exchange initiated by an INVITE request must follow exactly one of the Patterns 1, 2, 3, 4. When an initial INVITE causes multiple dialogs due to forking, an offer/answer exchange is carried out independently in each distinct dialog. When an INVITE request contains no offer, only Pattern 2 or Pattern 4 apply. According to Section 13.2.1 of [RFC3261], 'The first reliable non-failure message' must have an offer if there is no offer in the INVITE request. This means that the User Agent (UA) that receives the INVITE request without an offer must include an offer in the first reliable response with 100rel extension. If no reliable provisional response has been sent, the User Agent Server (UAS) must include an offer when sending 2xx response.

请注意,由INVITE请求发起的提供/应答交换必须完全遵循模式1、2、3、4中的一种。当初始邀请由于分叉而导致多个对话框时,在每个不同的对话框中单独执行要约/应答交换。当INVITE请求不包含报价时,只应用模式2或模式4。根据[RFC3261]第13.2.1节,如果INVITE请求中没有要约,则“第一条可靠无故障消息”必须有要约。这意味着接收到INVITE请求但没有提供服务的用户代理(UA)必须在第一个具有100rel扩展的可靠响应中包括提供服务。如果未发送可靠的临时响应,则用户代理服务器(UAS)在发送2xx响应时必须包含报价。

In Pattern 3, the first reliable provisional response may or may not have an answer. When a reliable provisional response contains a session description, and is the first to do so, then that session description is the answer to the offer in the INVITE request. The answer cannot be updated, and a new offer cannot be sent in a subsequent reliable response for the same INVITE transaction.

在模式3中,第一个可靠的临时响应可能有答案,也可能没有答案。如果可靠的临时响应包含会话描述,并且是第一个这样做的响应,那么该会话描述就是对INVITE请求中提供的响应。无法更新答案,并且无法在同一INVITE事务的后续可靠响应中发送新报价。

In Pattern 5, a Provisional Response ACKnowledgement (PRACK) request can contain an offer only if the reliable response that it acknowledges contains an answer to the previous offer/answer exchange.

在模式5中,临时响应确认(PRACK)请求只有在其确认的可靠响应包含对先前的要约/应答交换的应答时才能包含要约。

NOTE: It is legal to have UPDATE/2xx exchanges without offer/ answer exchanges (Pattern 6). However, when re-INVITEs are sent for non-offer/answer purposes, an offer/answer exchange is required. In that case, the prior SDP will typically be repeated.

注:在没有提供/应答交换的情况下进行更新/2xx交换是合法的(模式6)。但是,当出于非报价/应答目的发送重新邀请时,需要进行报价/应答交换。在这种情况下,通常将重复先前的SDP。

There may be ONLY ONE offer/answer negotiation in progress for a single dialog at any point in time. Section 4 explains how to ensure this. When an INVITE results in multiple dialogs, each has a separate offer/answer negotiation.

在任何时间点,对于单个对话,可能只有一个报价/应答谈判正在进行中。第4节解释了如何确保这一点。当一个邀请产生多个对话框时,每个对话框都有一个单独的报价/应答协商。

NOTE: This is when using a Content-Disposition of "session". There may be a second offer/answer negotiation in progress using a Content-Disposition of "early-session" [RFC3959]. That is not addressed by this document.

注意:这是在使用“会话”的内容处置时发生的。可能正在使用“早期会话”[RFC3959]的内容配置进行第二次报价/应答协商。本文件未涉及这一点。

            Offer                Answer             RFC    Ini Est Early
     -------------------------------------------------------------------
     1. INVITE Req.          2xx INVITE Resp.     RFC 3261  Y   Y    N
     2. 2xx INVITE Resp.     ACK Req.             RFC 3261  Y   Y    N
     3. INVITE Req.          1xx-rel INVITE Resp. RFC 3262  Y   Y    N
     4. 1xx-rel INVITE Resp. PRACK Req.           RFC 3262  Y   Y    N
     5. PRACK Req.           200 PRACK Resp.      RFC 3262  N   Y    Y
     6. UPDATE Req.          2xx UPDATE Resp.     RFC 3311  N   Y    Y
        
            Offer                Answer             RFC    Ini Est Early
     -------------------------------------------------------------------
     1. INVITE Req.          2xx INVITE Resp.     RFC 3261  Y   Y    N
     2. 2xx INVITE Resp.     ACK Req.             RFC 3261  Y   Y    N
     3. INVITE Req.          1xx-rel INVITE Resp. RFC 3262  Y   Y    N
     4. 1xx-rel INVITE Resp. PRACK Req.           RFC 3262  Y   Y    N
     5. PRACK Req.           200 PRACK Resp.      RFC 3262  N   Y    Y
     6. UPDATE Req.          2xx UPDATE Resp.     RFC 3311  N   Y    Y
        

Table 1: Summary of SIP Usage of the Offer/Answer Model

表1:提供/应答模型的SIP使用汇总

In Table 1, '1xx-rel' corresponds to the reliable provisional response that contains the 100rel option defined in [RFC3262].

在表1中,“1xx rel”对应于包含[RFC3262]中定义的100rel选项的可靠临时响应。

The 'Ini' column shows the ability to exchange the offer/answer to initiate the session. 'Y' indicates that the pattern can be used in the initial offer/answer exchange, while 'N' indicates that it cannot. Only the initial INVITE transaction can be used to exchange the offer/answer to establish a multimedia session.

“Ini”列显示交换报价/应答以启动会话的能力。”Y'表示该模式可用于初始报价/应答交换,而N'表示不能。只有初始INVITE事务可用于交换报价/应答以建立多媒体会话。

The 'Est' column shows the ability to update the established session.

“Est”列显示更新已建立会话的能力。

The 'Early' column indicates which patterns may be used to modify the established session in an early dialog. There are two ways to exchange a subsequent offer/answer in an early dialog.

“早期”列指示哪些模式可用于在早期对话框中修改已建立的会话。有两种方法可以在早期对话中交换后续报价/答复。

2.3. Rejection of an Offer
2.3. 拒绝要约

It is not always clear how to reject an offer when it is unacceptable, and some methods do not allow explicit rejection of an offer. For each of the patterns in Table 1, Table 2 shows how to reject an offer.

当要约不可接受时,如何拒绝要约并不总是明确的,有些方法不允许明确拒绝要约。对于表1中的每个模式,表2显示了如何拒绝报价。

When a UA receives an INVITE request with an unacceptable offer, it should respond with a 488 response, preferably with Warning header field indicating the reason of the rejection, unless another response code is more appropriate to reject it (Pattern 1 and Pattern 3).

当UA接收到带有不可接受要约的INVITE请求时,它应以488响应响应,最好使用警告标头字段指示拒绝的原因,除非另一个响应代码更适合拒绝它(模式1和模式3)。

If this is a re-INVITE, extra care must be taken, as detailed in [RFC6141]. Specifically, if the offer contains any changes or additions to media stream properties, and those have already been used to transmit/receive media before the final response is sent, then a 2xx response should be sent, with a syntactically correct session description. This may optionally be followed by an UPDATE request to rearrange the session parameters if both ends support the UPDATE method. Alternatively, the UA may send an error response to the (re-)INVITE request to terminate the dialog or to roll back the offer/answer status before sending re-INVITE request. In this case, the UAS should not continue to retransmit the unacknowledged reliable provisional response; the User Agent Client (UAC) should not continue to retransmit a PRACK request.

如果是重新邀请,必须格外小心,详见[RFC6141]。具体而言,如果报价中包含对媒体流属性的任何更改或添加,并且这些更改或添加在发送最终响应之前已用于发送/接收媒体,则应发送2xx响应,并提供语法正确的会话描述。如果两端都支持更新方法,则可以选择在更新请求之后重新安排会话参数。或者,UA可以向(重新)邀请请求发送错误响应,以在发送重新邀请请求之前终止对话或回滚提供/应答状态。在这种情况下,UAS不应继续重新传输未确认的可靠临时响应;用户代理客户端(UAC)不应继续重新传输PRACK请求。

When a UA receives an UPDATE request with an offer that it cannot accept, it should respond with a 488 response, preferably with Warning header field indicating the reason of the rejection, unless another response code is more appropriate to reject it (Pattern 6).

当UA收到一个更新请求,其中包含一个它无法接受的报价时,它应该用488响应进行响应,最好用警告头字段指示拒绝的原因,除非另一个响应代码更适合拒绝它(模式6)。

When a UA receives a PRACK request with an offer that it cannot accept, it may respond with a 200 response with a syntactically correct session description. Optionally, this may be followed by an UPDATE request to rearrange the session parameters if both ends support the UPDATE method. Alternatively, the UA may terminate the dialog and send an error response to the INVITE request (Pattern 5).

当UA收到一个PRACK请求,其中包含一个它无法接受的提议时,它可以用一个语法正确的会话描述的200响应进行响应。可选地,如果两端都支持更新方法,则这之后可能会有一个更新请求来重新安排会话参数。或者,UA可以终止对话框并向INVITE请求发送错误响应(模式5)。

In addition, there is a possibility for UAC to receive a 488 response for an PRACK request. In that case, UAC may send again a PRACK request without an offer or send a CANCEL request to terminate the INVITE transaction.

此外,UAC还可能收到488个PRACK请求响应。在这种情况下,UAC可能会再次发送一个没有报价的PRACK请求,或者发送一个取消请求来终止INVITE事务。

NOTE: In [RFC3262], the following restriction is defined with regard to responding to a PRACK request.

注:在[RFC3262]中,以下限制是关于响应PRACK请求的定义。

"If the PRACK does match an unacknowledged reliable provisional response, it MUST be responded to with a 2xx response."

“如果PRACK与未确认的可靠临时响应匹配,则必须使用2xx响应对其进行响应。”

This restriction is not clear. There are cases where it is unacceptable to send a 2xx response. For example, the UAS may need to send an authentication challenge in a 401 response. This is an open issue and out of scope for this document.

这一限制并不明确。在某些情况下,发送2xx响应是不可接受的。例如,UAS可能需要在401响应中发送认证质询。这是一个未解决的问题,超出了本文档的范围。

When a UA receives a response with an offer that it cannot accept, the UA does not have a way to reject it explicitly. Therefore, a UA should respond to the offer with the correct session description and rearrange the session parameters by initiating a new offer/answer

当UA收到无法接受的报价响应时,UA无法明确拒绝。因此,UA应使用正确的会话描述响应该提议,并通过发起新的提议/应答来重新安排会话参数

exchange, or alternatively terminate the session (Pattern 2 and Pattern 4). When initiating a new offer/answer, a UA should take care not to cause an infinite offer/answer loop.

交换,或者终止会话(模式2和模式4)。在发起新的报价/应答时,UA应注意不要造成无限报价/应答循环。

Section 14.2 of [RFC3261], "UAS Behavior", states:

[RFC3261]第14.2节“无人机行为”规定:

The UAS MUST ensure that the session description overlaps with its previous session description in media formats, transports, or other parameters that require support from the peer. This is to avoid the need for the peer to reject the session description.

UAS必须确保会话描述在媒体格式、传输或其他需要对等方支持的参数中与其先前的会话描述重叠。这是为了避免对等方拒绝会话描述。

This is a rule for an offer within 2xx response to a re-INVITE. This rule should be applied to an offer within a reliable provisional response and a PRACK request.

这是对重新邀请的2xx响应内的报价的规则。这一规则应适用于可靠的临时回复和PRACK请求中的要约。

        Offer                Rejection
     ------------------------------------------------------------------
     1. INVITE Req. (*)      488 INVITE Response
     2. 2xx INVITE Resp.     Answer in ACK Req. followed by new offer
                             OR termination of dialog
     3. INVITE Req.          488 INVITE Response (same as Pattern 1)
     4. 1xx-rel INVITE Resp. Answer in PRACK Req. followed by new offer
     5. PRACK Req. (**)      200 PRACK Resp. followed by new offer
                             OR termination of dialog
     6. UPDATE Req.          488 UPDATE Response
        
        Offer                Rejection
     ------------------------------------------------------------------
     1. INVITE Req. (*)      488 INVITE Response
     2. 2xx INVITE Resp.     Answer in ACK Req. followed by new offer
                             OR termination of dialog
     3. INVITE Req.          488 INVITE Response (same as Pattern 1)
     4. 1xx-rel INVITE Resp. Answer in PRACK Req. followed by new offer
     5. PRACK Req. (**)      200 PRACK Resp. followed by new offer
                             OR termination of dialog
     6. UPDATE Req.          488 UPDATE Response
        

(*) If this was a re-INVITE, a failure response should not be sent if media has already been exchanged using the new offer.

(*)如果这是重新邀请,如果已经使用新的报价交换了媒体,则不应发送失败响应。

(**) A UA should only use PRACK to send an offer when it has strong reasons to expect the receiver will accept the offer.

(**)UA只有在有充分理由期望接收方接受要约时才应使用PRACK发送要约。

Table 2: Rejection of an Offer

表2:拒绝要约

2.4. Session Description That Is Not an Offer or an Answer
2.4. 不是报价或答复的会话描述

As previously stated, a session description in a SIP message is not necessarily an offer or an answer. For example, SIP can use a session description to describe capabilities apart from offer/answer exchange. Examples of this are a 200 OK response for OPTIONS and a 488 response for INVITE.

如前所述,SIP消息中的会话描述不一定是提供或应答。例如,SIP可以使用会话描述来描述除提供/应答交换之外的功能。例如,选项的200 OK响应和邀请的488响应。

3. Detailed Discussion of the Offer/Answer Model for SIP
3. SIP提供/应答模型的详细讨论
3.1. Offer/Answer for the INVITE method with 100rel Extension
3.1. 带100rel扩展名的INVITE方法的报价/应答

The INVITE method provides the basic procedure for offer/answer exchange in SIP. Without the 100rel option, the rules are simple as described in [RFC3261]. If an INVITE request includes a session description, Pattern 1 is applied and if an INVITE request does not include a session description, Pattern 2 is applied.

INVITE方法提供了SIP中提供/应答交换的基本过程。如果没有100rel选项,规则很简单,如[RFC3261]所述。如果INVITE请求包含会话描述,则应用模式1;如果INVITE请求不包含会话描述,则应用模式2。

With 100rel, Patterns 3, 4, and 5 are added and this complicates the rules. An INVITE request may cause multiple responses. Note that even if both UAs support the 100rel extension, not all the provisional responses may be sent reliably.

使用100rel时,会添加模式3、4和5,这会使规则复杂化。一个INVITE请求可能会导致多个响应。请注意,即使两个UAs都支持100rel扩展,也不能可靠地发送所有临时响应。

3.1.1. INVITE Request with SDP
3.1.1. 使用SDP邀请请求

When a UAC includes an SDP body in the INVITE request as an offer, only the first SDP in a reliable non-failure response to the INVITE request is the real answer. No other offer/answer exchanges can occur within the messages (other responses and ACK) of the INVITE transaction.

当UAC在INVITE请求中包含SDP主体作为要约时,只有对INVITE请求的可靠无故障响应中的第一个SDP才是真正的答案。在INVITE事务的消息(其他响应和ACK)中不能发生其他提供/应答交换。

In [RFC3261] there are some descriptions about an offer/answer exchange, but those cause a little confusion. We interpret those descriptions as follows,

[RFC3261]中有一些关于要约/应答交换的描述,但这些描述会引起一些混乱。我们对这些描述的解释如下:,

UAC behavior:

UAC行为:

1. If the first SDP that the UAC received is included in an unreliable provisional response to the INVITE request, [RFC3261] (Section 13.2.1, second bullet) requires that this be treated as an answer. However, because that same section states that the answer has to be in a reliable non-failure message, this SDP is not the true answer and therefore the offer/answer exchange is not yet completed.

1. 如果UAC收到的第一个SDP包含在对INVITE请求的不可靠临时响应中,[RFC3261](第13.2.1节,第二个项目符号)要求将其视为回答。但是,由于同一节规定答案必须在可靠的非故障消息中,因此此SDP不是真实答案,因此报价/答案交换尚未完成。

2. After the UAC has received the answer in a reliable provisional response to the INVITE, [RFC3261] requires that any SDP in subsequent responses be ignored.

2. UAC收到对邀请的可靠临时响应中的答案后,[RFC3261]要求忽略后续响应中的任何SDP。

3. If the second and subsequent SDP (including a real answer) is different from the first SDP, the UAC should consider that the SDP is equal to the first SDP. Therefore, the UAC should not switch to the new SDP.

3. 如果第二和随后的SDP(包括真实答案)与第一SDP不同,UAC应考虑SDP等于第一SDP。因此,UAC不应切换到新的SDP。

UAS behavior:

UAS行为:

1. [RFC3261] requires all SDP in the responses to the INVITE request to be identical.

1. [RFC3261]要求INVITE请求响应中的所有SDP都相同。

2. After the UAS has sent the answer in a reliable provisional response to the INVITE, the UAS should not include any SDPs in subsequent responses to the INVITE.

2. 在UAS以可靠的临时响应方式向INVITE发送应答后,UAS不应在后续的INVITE响应中包含任何SDP。

3. [RFC3261] permits the UAS to send any provisional response without SDP regardless of the transmission of the answer.

3. [RFC3261]允许UAS在不使用SDP的情况下发送任何临时响应,无论应答的传输情况如何。

A session description in an unreliable response that precedes a reliable response can be considered a "preview" of the answer that will be coming.

可靠响应之前的不可靠响应中的会话描述可以被视为即将到来的答案的“预览”。

NOTE: This "preview" session description rule applies to a single offer/answer exchange. In parallel offer/answer exchanges (caused by forking), a UA may obviously receive a different "preview" of an answer in each dialog. UAs are expected to deal with this.

注意:此“预览”会话描述规则适用于单个报价/应答交换。在并行提供/应答交换(由分叉引起)中,UA可能会在每个对话中收到不同的应答“预览”。预计UAs将处理这一问题。

Although [RFC3261] says a UA should accept media once an INVITE with an offer has been sent, in many cases, an answer (or, at least a preview of it) is required in order for media to be accepted. Two examples of why this might be required are as follows:

尽管[RFC3261]说UA应该在发出邀请和报价后接受媒体,但在许多情况下,媒体接受需要回答(或者至少是预览)。以下是两个可能需要这样做的例子:

o To avoid receiving media from undesired sources, some User Agents assume symmetric RTP will be used, ignore all incoming media packets until an address/port has been received from the other end, and then use that address/port to filter incoming media packets.

o 为了避免从不需要的来源接收媒体,一些用户代理假定将使用对称RTP,忽略所有传入的媒体数据包,直到从另一端接收到地址/端口,然后使用该地址/端口过滤传入的媒体数据包。

o In some networks, an intermediate node must authorize a media stream before it can flow and requires a confirming answer to the offer before doing so.

o 在某些网络中,中间节点必须在媒体流能够流动之前对其进行授权,并且在这样做之前需要对提议的确认回答。

Therefore, a UAS should send an SDP answer reliably (if possible) before it starts sending media. And, if neither the UAC nor the UAS support 100rel, the UAS should send a preview of the answer before it starts sending media.

因此,UAS应该在开始发送媒体之前可靠地发送SDP应答(如果可能)。而且,如果UAC和UAS都不支持100rel,UAS应该在开始发送媒体之前发送答案预览。

     UAC                   UAS
      | F1  INVITE (SDP)    | <- The offer in the offer/answer model.
      |-------------------->|
      | F2     1xx (SDP)    | <- The offer/answer exchange is not
      |<--------------------|    closed yet, but UAC acts as if it
      |                     | ^  receives the answer.
      | F3 1xx-rel (no SDP) | |<- a 1xx-rel may be sent without answer
      |<--------------------| |   SDP.
      | F4   PRACK (no SDP) | |
      |-------------------->| | The UAC must not send a new offer.
      | F5 2xx PRA (no SDP) | |
      |<--------------------| v
      |                     |
      | F6 1xx-rel (SDP)    | <- The answer in the offer/ answer model.
      |<--------------------| -
      | F7   PRACK          | | The UAC can send a new offer in a PRACK
      |-------------------->| | request to acknowledge F6.
      | F8 2xx PRA          | | After F7, the UAC and UAS can send a new
      |<--------------------| v offer in an UPDATE request.
      |                     |
      | F9 1xx-rel          | <- SDP should not be included in the
      |<--------------------|    subsequent 1xx-rel once offer/answer
      | F10  PRACK          |    has been completed.
      |-------------------->|
      | F11 2xx PRA         |
      |<--------------------|
      |                     |
      | F12 2xx INV         | <- SDP should not be included in the
      |<--------------------|    final response once offer/answer has
      | F13    ACK          |    been completed.
      |-------------------->|
        
     UAC                   UAS
      | F1  INVITE (SDP)    | <- The offer in the offer/answer model.
      |-------------------->|
      | F2     1xx (SDP)    | <- The offer/answer exchange is not
      |<--------------------|    closed yet, but UAC acts as if it
      |                     | ^  receives the answer.
      | F3 1xx-rel (no SDP) | |<- a 1xx-rel may be sent without answer
      |<--------------------| |   SDP.
      | F4   PRACK (no SDP) | |
      |-------------------->| | The UAC must not send a new offer.
      | F5 2xx PRA (no SDP) | |
      |<--------------------| v
      |                     |
      | F6 1xx-rel (SDP)    | <- The answer in the offer/ answer model.
      |<--------------------| -
      | F7   PRACK          | | The UAC can send a new offer in a PRACK
      |-------------------->| | request to acknowledge F6.
      | F8 2xx PRA          | | After F7, the UAC and UAS can send a new
      |<--------------------| v offer in an UPDATE request.
      |                     |
      | F9 1xx-rel          | <- SDP should not be included in the
      |<--------------------|    subsequent 1xx-rel once offer/answer
      | F10  PRACK          |    has been completed.
      |-------------------->|
      | F11 2xx PRA         |
      |<--------------------|
      |                     |
      | F12 2xx INV         | <- SDP should not be included in the
      |<--------------------|    final response once offer/answer has
      | F13    ACK          |    been completed.
      |-------------------->|
        

Figure 1: Example of Offer/Answer with 100rel Extension (1)

图1:100rel扩展的报价/应答示例(1)

For example, in Figure 1, only the SDP in F6 is the answer. The SDP in the non-reliable response (F2) is the preview of the answer and must be the same as the answer in F6. Receiving F2, the UAC should act as if it receives the answer. However, offer/answer exchange is not completed yet and the UAC must not send a new offer until it receives the same SDP in a reliable non-failure response, which is the real answer. After sending the SDP in F6, the UAS must prepare to receive a new offer from the UAC in a PRACK request or in an UPDATE request if the UAS supports UPDATE.

例如,在图1中,只有F6中的SDP是答案。非可靠响应(F2)中的SDP是答案的预览,必须与F6中的答案相同。收到F2时,UAC应表现得好像收到了答案一样。但是,要约/应答交换尚未完成,UAC不得发送新要约,直到收到可靠无故障响应中的相同SDP,这是真正的应答。在F6中发送SDP后,UAS必须准备在PRACK请求或更新请求(如果UAS支持更新)中接收来自UAC的新报价。

The UAS does not include SDP in responses F9 and F12. However, the UAC should prepare to receive SDP bodies in F9 and/or F12, and just ignore them, to handle a peer that does not conform to the recommended implementation.

UAS在F9和F12响应中不包括SDP。但是,UAC应准备接收F9和/或F12中的SDP主体,并忽略它们,以处理不符合建议实施的对等方。

3.1.2. INVITE Request without SDP
3.1.2. 不带SDP的邀请请求

When a UAC does not include an SDP body in the INVITE request, [RFC3261] (Section 13.2.1, first bullet) requires that the UAS include an offer in the first reliable non-failure response. However, a UAC might not expect an SDP in the other responses to the INVITE request because RFC 3261 simply does not anticipate the possibility. Therefore, the UAS ought not include any SDP in the other responses to the INVITE request.

当UAC未在INVITE请求中包含SDP正文时,[RFC3261](第13.2.1节,第一个项目符号)要求UAS在第一个可靠的非故障响应中包含报价。但是,UAC可能不希望在对INVITE请求的其他响应中出现SDP,因为RFC 3261根本没有预料到这种可能性。因此,UAS不应在对INVITE请求的其他响应中包含任何SDP。

NOTE: In Figure 2, the UAS should not include SDP in the responses F6 and F9. However, the UAC should prepare to receive SDP bodies in F6 and/or F9, and just ignore them to handle a peer that does not conform to the recommended implementation.

注:在图2中,UAS不应在F6和F9响应中包含SDP。但是,UAC应该准备接收F6和/或F9中的SDP主体,而忽略它们来处理不符合建议实施的对等体。

    UAC                   UAS
     | F1  INVITE (no SDP) |
     |-------------------->|
     | F2     1xx          |
     |<--------------------|
     |                     |
     | F3 1xx-rel (SDP)    | <- The first 1xx-rel must contain SDP
     |<--------------------|    as the offer.
     | F4   PRACK (SDP)    | <- A PRACK request to the first 1xx-rel
     |-------------------->|    must contain SDP as the answer.
     | F5 2xx PRA (no SDP) | -
     |<--------------------| |
     |                     | |
     | F6 1xx-rel (no SDP) | <- The subsequent 1xx-rel should not
     |<--------------------| |  contain SDP.
     | F7   PRACK          | |
     |-------------------->| | The UAC can send a new offer in an UPDATE
     | F8 2xx PRA          | | request after F4.
     |<--------------------| v
     |                     |
     | F9 2xx INV (no SDP) | <- The final response should not
     |<--------------------|    contain SDP.
     | F10    ACK          |
     |-------------------->|
        
    UAC                   UAS
     | F1  INVITE (no SDP) |
     |-------------------->|
     | F2     1xx          |
     |<--------------------|
     |                     |
     | F3 1xx-rel (SDP)    | <- The first 1xx-rel must contain SDP
     |<--------------------|    as the offer.
     | F4   PRACK (SDP)    | <- A PRACK request to the first 1xx-rel
     |-------------------->|    must contain SDP as the answer.
     | F5 2xx PRA (no SDP) | -
     |<--------------------| |
     |                     | |
     | F6 1xx-rel (no SDP) | <- The subsequent 1xx-rel should not
     |<--------------------| |  contain SDP.
     | F7   PRACK          | |
     |-------------------->| | The UAC can send a new offer in an UPDATE
     | F8 2xx PRA          | | request after F4.
     |<--------------------| v
     |                     |
     | F9 2xx INV (no SDP) | <- The final response should not
     |<--------------------|    contain SDP.
     | F10    ACK          |
     |-------------------->|
        

Figure 2: Example of Offer/Answer with 100rel Extension (2)

图2:100rel扩展的报价/应答示例(2)

Note that in the case that the UAC needs to prompt the user to accept or reject the offer, the reliable provisional response with SDP as an offer (Pattern 4) can result in the retransmission until the PRACK request can be sent. The UAC should take care to avoid this situation when it sends the INVITE request without SDP.

请注意,在UAC需要提示用户接受或拒绝要约的情况下,使用SDP作为要约的可靠临时响应(模式4)可能导致重新传输,直到可以发送PRACK请求。当UAC在没有SDP的情况下发送INVITE请求时,应该注意避免这种情况。

3.2. Offer/Answer Exchange in Early Dialog
3.2. 在早期对话中提供/应答交换

When both UAs support the 100rel extension, they can update the session in the early dialog once the first offer/answer exchange has been completed.

当两个UAs都支持100rel扩展时,它们可以在第一次提供/应答交换完成后在早期对话框中更新会话。

From a UA sending an INVITE request:

从发送INVITE请求的UA:

A UA can send an UPDATE request with a new offer if both ends support the UPDATE method. Note that if the UAS needs to prompt the user to accept or reject the offer, the delay can result in retransmission of the UPDATE request.

如果两端都支持更新方法,UA可以发送带有新报价的更新请求。请注意,如果UAS需要提示用户接受或拒绝报价,则延迟可能会导致更新请求的重新传输。

A UA can send a PRACK request with a new offer only when acknowledging the reliable provisional response carrying the answer to an offer in the INVITE request. Compared to using the UPDATE method, using PRACK can reduce the number of messages exchanged between the UAs. However, to avoid problems or delays caused by PRACK offer rejection, the UA is recommended to send a PRACK request only when it has strong reasons to expect the receiver will accept it. For example, the procedure used in precondition extension [RFC3312] is a case where a PRACK request should be used for updating the session status in an early dialog. Note also that if a UAS needs to prompt the user to accept or reject the offer, the delay can result in retransmission of the PRACK request.

UA只有在确认包含邀请请求中的报价答案的可靠临时响应时,才能发送带有新报价的PRACK请求。与使用更新方法相比,使用PRACK可以减少UAs之间交换的消息数量。然而,为了避免PRACK要约被拒绝所导致的问题或延迟,建议UA仅在有充分理由期望接收方接受PRACK请求时才发送PRACK请求。例如,前置条件扩展[RFC3312]中使用的过程是一种情况,即应使用PRACK请求更新早期对话中的会话状态。还请注意,如果UAS需要提示用户接受或拒绝报价,则延迟可能导致PRACK请求的重新传输。

From a UA receiving an INVITE request:

从接收INVITE请求的UA:

A UA can send an UPDATE request with a new offer if both ends support the UPDATE method. A UAS cannot send a new offer in the reliable provisional response, so the UPDATE method is the only method for a UAS to update an early session.

如果两端都支持更新方法,UA可以发送带有新报价的更新请求。UAS无法在可靠的临时响应中发送新要约,因此更新方法是UAS更新早期会话的唯一方法。

3.3. Offer/Answer Exchange in an Established Dialog
3.3. 在已建立的对话框中交换报价/应答

Both the re-INVITE and UPDATE methods can be used in an established dialog to update the session.

在已建立的对话框中,可以使用REINVITE和UPDATE方法来更新会话。

The UPDATE method is simpler and can save at least one message compared with the INVITE method. But both ends must support the UPDATE method for it to be used.

与INVITE方法相比,UPDATE方法更简单,至少可以保存一条消息。但是两端都必须支持UPDATE方法才能使用它。

The INVITE method needs at least three messages to complete but no extensions are needed. Additionally, the INVITE method allows the peer to take time to decide whether or not it will accept a session update by sending provisional responses. That is, re-INVITE allows the UAS to interact with the user at the peer, while UPDATE needs to be answered automatically by the UAS. It is noted that re-INVITE

INVITE方法至少需要三条消息才能完成,但不需要扩展。此外,INVITE方法允许对等方花时间通过发送临时响应来决定是否接受会话更新。也就是说,重新邀请允许UAS与对等方的用户交互,而更新需要UAS自动应答。值得注意的是,重新邀请

should be answered immediately unless such a user interaction is needed. Otherwise, some Third Party Call Control (3PCC) [RFC3725] flows will break.

除非需要这样的用户交互,否则应立即回答。否则,一些第三方呼叫控制(3PCC)[RFC3725]流将中断。

3.4. Recovering from a Failed Re-INVITE
3.4. 从失败的重新邀请中恢复

Section 14.1 of [RFC3261] requires that the session parameters in effect prior to a re-INVITE remain unchanged if the re-INVITE fails, as if no re-INVITE had been issued. This remains the case even if multiple offer/answer exchanges have occurred between the sending of the re-INVITE and its failure, and even if media has been exchanged using the proposed changes in the session. Because this can be difficult to achieve in practice, a newer specification [RFC6141] recommends the UAS to send a 2xx response to a re-INVITE in cases where rolling back changes would be problematic.

[RFC3261]第14.1节要求,如果重新邀请失败,则重新邀请之前有效的会话参数保持不变,就像没有发出重新邀请一样。即使在重新邀请的发送和失败之间发生了多次提供/应答交换,并且即使已使用会话中建议的更改交换了媒体,情况仍然如此。因为这在实践中很难实现,一个较新的规范[RFC6141]建议UAS在回滚更改有问题的情况下向重新邀请发送2xx响应。

Nevertheless, a UAC may receive a failure response to a re-INVITE after proposed changes that must be rolled back have already been used. In such a case, the UAC should send an UPDATE offering the SDP that has been reinstated. (See [RFC6141] for details.)

然而,UAC可能会在必须回滚的提议更改已经使用后收到重新邀请的失败响应。在这种情况下,UAC应发送更新,提供已恢复的SDP。(详见[RFC6141])

4. Exceptional Case Handling
4. 特殊案件处理

In [RFC3264], the following restrictions are defined with regard to sending a new offer.

在[RFC3264]中,关于发送新要约,定义了以下限制。

At any time, either agent MAY generate a new offer that updates the session. However, it MUST NOT generate a new offer if it has received an offer which it has not yet answered or rejected. Furthermore, it MUST NOT generate a new offer if it has generated a prior offer for which it has not yet received an answer or a rejection.

任何时候,任一代理都可以生成更新会话的新报价。但是,如果收到尚未答复或拒绝的要约,则不得生成新要约。此外,如果它已经生成了先前的报价,但尚未收到答复或拒绝,则它不得生成新报价。

Assuming that the above rules are guaranteed, there seem to be two possible 'exceptional' cases to be considered in SIP offer/answer usage: the 'message crossing' case and the 'glare' case. One of the reasons why the usage of SIP methods to exchange offer/answer needs to be carefully restricted in the RFCs is to ensure that the UA can detect and handle appropriately the 'exceptional' cases to avoid incompatible behavior.

假设上述规则得到保证,在SIP提供/应答使用中似乎有两种可能的“例外”情况需要考虑:“消息交叉”情况和“眩光”情况。在RFCs中需要仔细限制SIP方法在交换要约/应答中的使用,原因之一是为了确保UA能够检测并适当处理“异常”情况,以避免不兼容行为。

4.1. Message Crossing Case Handling
4.1. 消息交叉案例处理

When message packets cross in the transport network, an offer may be received before the answer for the previous offer/answer exchange, as shown in Figure 3. In such a case, UA A must detect that the session description SDP-2 is not the answer to offer1.

当消息包在传输网络中交叉时,在前一个提供/应答交换的应答之前可能会收到一个提供,如图3所示。在这种情况下,UA a必须检测到会话描述SDP-2不是对offer1的应答。

                            A                  B
                            |SDP-1     (offer1)|
                         M1 |----------------->|
                            |SDP-2    (answer1)|
                         M2 |<------\  /-------|
                            |        \/        |
                            |SDP-3   /\(offer2)|
                         M3 |<------/  \-------|
        
                            A                  B
                            |SDP-1     (offer1)|
                         M1 |----------------->|
                            |SDP-2    (answer1)|
                         M2 |<------\  /-------|
                            |        \/        |
                            |SDP-3   /\(offer2)|
                         M3 |<------/  \-------|
        

Figure 3: Message Crossing Case

图3:消息交叉情况

Because of the restrictions on placement of offers and answers (summarized in Table 1), there are a limited number of valid exchanges of messages that may lead to this message crossing case. These are enumerated in Table 3. (This table only shows messages containing offers or answers. There could be other messages, without session descriptions, which are not shown.)

由于要约和答复的放置受到限制(总结见表1),因此可能导致这种消息交叉情况的有效消息交换数量有限。表3列举了这些情况。(此表仅显示包含报价或答案的邮件。可能还有其他不包含会话说明的邮件未显示。)

When a response to an UPDATE request crosses a reliable response to an INVITE request, there are variants shown in Figures 4 and 5, which are dependent on an INVITE (Mx) that contains no offer. These are also included in Table 3.

当对更新请求的响应与对INVITE请求的可靠响应交叉时,图4和图5中显示了一些变体,它们依赖于不包含报价的INVITE(Mx)。这些也包括在表3中。

                   A                               B
                   |                               |
                   |UPDATE(offer1)                 |
                M1 |==============================>|
                   |re-INVITE(no offer)            |
                Mx |------------------------------>| --+
                   |               2xx-UPD(answer1)|   |
                M2 |<===========\  /===============|   | first reliable
                   |             \/ 1xx-rel/2xx-INV|   | response
                   |             /\        (offer2)|   |
                M3 |<===========/  \===============| <-+
                   |PRACK/ACK(answer2)             |
                My |------------------------------>|
                   |                               |
        
                   A                               B
                   |                               |
                   |UPDATE(offer1)                 |
                M1 |==============================>|
                   |re-INVITE(no offer)            |
                Mx |------------------------------>| --+
                   |               2xx-UPD(answer1)|   |
                M2 |<===========\  /===============|   | first reliable
                   |             \/ 1xx-rel/2xx-INV|   | response
                   |             /\        (offer2)|   |
                M3 |<===========/  \===============| <-+
                   |PRACK/ACK(answer2)             |
                My |------------------------------>|
                   |                               |
        

Figure 4: Avoidable Message Crossing Cases

图4:可避免的消息交叉情况

To avoid the message crossing condition shown in Figure 4, UA A should not send this re-INVITE request until an UPDATE transaction has been completed. If UA B encounters this message crossing condition, it should reject this re-INVITE request with a 500 response.

为了避免图4所示的消息交叉情况,UA不应在更新事务完成之前发送此重新邀请请求。如果UA B遇到此消息交叉条件,它应以500响应拒绝此重新邀请请求。

                   A                               B
                   |                               |
                   |re-INVITE(no offer)            |
                Mx |------------------------------>| --+
                   |UPDATE(offer1)                 |   |
                M1 |==============================>|   |
                   |               2xx-UPD(answer1)|   |
                M2 |<===========\  /===============|   | first reliable
                   |             \/ 1xx-rel/2xx-INV|   | response
                   |             /\        (offer2)|   |
                M3 |<===========/  \===============| <-+
                   |PRACK/ACK(answer2)             |
                My |------------------------------>|
                   |                               |
        
                   A                               B
                   |                               |
                   |re-INVITE(no offer)            |
                Mx |------------------------------>| --+
                   |UPDATE(offer1)                 |   |
                M1 |==============================>|   |
                   |               2xx-UPD(answer1)|   |
                M2 |<===========\  /===============|   | first reliable
                   |             \/ 1xx-rel/2xx-INV|   | response
                   |             /\        (offer2)|   |
                M3 |<===========/  \===============| <-+
                   |PRACK/ACK(answer2)             |
                My |------------------------------>|
                   |                               |
        

Figure 5: Avoidable Message Crossing Cases

图5:可避免的消息交叉情况

To avoid the message crossing condition shown in Figure 5, UA A should not send this UPDATE request until an ACK or a PRACK transaction associated with an offer/answer has been completed. If UA B encounters this message crossing condition, it should reject this UPDATE request with a 500 response.

为了避免图5所示的消息交叉情况,UA不应发送此更新请求,直到完成与报价/应答相关联的ACK或PRACK事务。如果UA B遇到此消息交叉条件,它应以500响应拒绝此更新请求。

The situation when a PRACK request crosses UPDATE request is shown in Figure 6.

PRACK请求与UPDATE请求交叉时的情况如图6所示。

                   A                               B
                   |                               |
                   |           re-INVITE (no offer)|
   1st reliable+-- |<------------------------------|
   response    | M1|1xx-rel(offer1)                |
               +-> |==============================>| --+
                   |                 PRACK(answer1)| M3| Acknowledge
                   |<===========\  /===============| <-+
                   |             \/                |
                   |             /\  UPDATE(offer2)|
                   |<===========/  \===============| M2
                   |500-UPD                        |
                   |------------------------------>|
                   |2xx-PRA                        |
                   |------------------------------>|
                   |                               |
        
                   A                               B
                   |                               |
                   |           re-INVITE (no offer)|
   1st reliable+-- |<------------------------------|
   response    | M1|1xx-rel(offer1)                |
               +-> |==============================>| --+
                   |                 PRACK(answer1)| M3| Acknowledge
                   |<===========\  /===============| <-+
                   |             \/                |
                   |             /\  UPDATE(offer2)|
                   |<===========/  \===============| M2
                   |500-UPD                        |
                   |------------------------------>|
                   |2xx-PRA                        |
                   |------------------------------>|
                   |                               |
        

Figure 6: Avoidable Message Crossing Cases

图6:可避免的消息交叉情况

To avoid the message crossing condition shown in Figure 6, UA B should not send this UPDATE request until a PRACK transaction associated with an offer/answer has been completed. If UA A encounters this message crossing condition, it should reject this UPDATE request with a 500 response.

为了避免图6所示的消息交叉情况,UA B不应发送此更新请求,直到与报价/应答关联的PRACK事务完成。如果UA A遇到此消息交叉条件,它应以500响应拒绝此更新请求。

The situation when a reliable provisional response to an INVITE request crosses UPDATE request is shown in Figure 7.

图7显示了对INVITE请求的可靠临时响应与UPDATE请求交叉时的情况。

                   A                               B
                   |                               |
                   |re-INVITE(offer1)              |
                M1 |==============================>|
                   |               1xx-rel(answer1)|
                   |<===========\  /===============| M3
                   |             \/                |
                   |             /\  UPDATE(offer2)|
               +-- |<===========/  \===============| M2
               |   |491-UPD                        |
   Acknowledge |   |------------------------------>|
               |   |PRACK                          |
               +-> |------------------------------>|
                   |                               |
        
                   A                               B
                   |                               |
                   |re-INVITE(offer1)              |
                M1 |==============================>|
                   |               1xx-rel(answer1)|
                   |<===========\  /===============| M3
                   |             \/                |
                   |             /\  UPDATE(offer2)|
               +-- |<===========/  \===============| M2
               |   |491-UPD                        |
   Acknowledge |   |------------------------------>|
               |   |PRACK                          |
               +-> |------------------------------>|
                   |                               |
        

Figure 7: Avoidable Message Crossing Cases

图7:可避免的消息交叉情况

To avoid the message crossing condition shown in Figure 7, UA B should not send this UPDATE request until a PRACK transaction associated with an offer/answer has been completed. If UA A encounters this message crossing condition, it should reject this UPDATE request with a 491 response.

为了避免图7所示的消息交叉情况,UA B不应发送此更新请求,直到与报价/应答相关联的PRACK事务完成。如果UA A遇到此消息交叉条件,它应以491响应拒绝此更新请求。

The situation when a 2xx response to an INVITE request crosses UPDATE request is shown in Figure 8.

图8显示了对INVITE请求的2xx响应与UPDATE请求交叉的情况。

                   A                               B
                   |                               |
                   |re-INVITE(offer1)              |
                   |==============================>|
                   |               2xx-INV(answer1)|
                   |<===========\  /===============|
                   |             \/                |
                   |             /\  UPDATE(offer2)|
               +-- |<===========/  \===============|
               |   |491-UPD                        |
   Acknowledge |   |------------------------------>|
               |   |ACK                            |
               +-> |------------------------------>|
                   |                               |
        
                   A                               B
                   |                               |
                   |re-INVITE(offer1)              |
                   |==============================>|
                   |               2xx-INV(answer1)|
                   |<===========\  /===============|
                   |             \/                |
                   |             /\  UPDATE(offer2)|
               +-- |<===========/  \===============|
               |   |491-UPD                        |
   Acknowledge |   |------------------------------>|
               |   |ACK                            |
               +-> |------------------------------>|
                   |                               |
        

Figure 8: Avoidable Message Crossing Cases

图8:可避免的消息交叉情况

This is a true glare. To avoid the message crossing condition shown in Figure 8, UA B should not send the UPDATE request until it has received an ACK request. But there is no problem even if UA B sends it. If UA A encounters this message crossing condition, it should reject this UPDATE request with a 491 response.

这是真正的眩光。为了避免图8所示的消息交叉情况,UA B在收到ACK请求之前不应发送更新请求。但即使UA B发送,也没有问题。如果UA A遇到此消息交叉条件,它应以491响应拒绝此更新请求。

The situation when a response to an UPDATE request crosses a PRACK request is shown in Figure 9.

更新请求的响应与PRACK请求交叉时的情况如图9所示。

                   A                               B
                   |                               |
                   |              re-INVITE(offer0)|
                   |<------------------------------|
                   |1xx-rel(answer0)               |
                   |------------------------------>| --+
                   |UPDATE(offer1)                 |   |
                M1 |==============================>|   |
                   |               2xx-UPD(answer1)|   | Acknowledge
                   |<===========\  /===============| M3|
                   |             \/                |   |
                   |             /\   PRACK(offer2)| M2|
                   |<===========/  \===============| <-+
                   |                               |
        
                   A                               B
                   |                               |
                   |              re-INVITE(offer0)|
                   |<------------------------------|
                   |1xx-rel(answer0)               |
                   |------------------------------>| --+
                   |UPDATE(offer1)                 |   |
                M1 |==============================>|   |
                   |               2xx-UPD(answer1)|   | Acknowledge
                   |<===========\  /===============| M3|
                   |             \/                |   |
                   |             /\   PRACK(offer2)| M2|
                   |<===========/  \===============| <-+
                   |                               |
        

Figure 9: Avoidable Message Crossing Case

图9:可避免的消息交叉情况

To avoid the message crossing condition shown in Figure 9, UA A should not send this UPDATE request until a PRACK transaction associated with an offer/answer has been completed. If UA B encounters this message crossing condition, it should reject this UPDATE request with a 491 response.

为了避免图9所示的消息交叉情况,UA不应发送此更新请求,直到与报价/应答相关联的PRACK事务完成。如果UA B遇到此消息交叉条件,它应以491响应拒绝此更新请求。

Table 3 summarizes this section. Each action is described in Section 4.3.

表3总结了这一节。第4.3节描述了每项操作。

        | M1     | M3       | M2        |Action |Action |Figure|
        |(offer1)|(answer1) |(offer2)   | of A  | of B  |      |
        +--------+----------+-----------+-------+-------+------+
        | UPDATE | 2xx-UPD  | UPDATE    |UAS-UcU|       |      |
        |        |          +-----------+-------+ -     |      |
        |        |          | INVITE    |UAS-UcI|       |      |
        |        |          +-----------+-------+-------+------+
        |        |          | 1xx-INV   |       |       |      |
        |        |          +-----------+UAC-UI,|UAS-UsI| 4,5  |
        |        |          | 2xx-INV   |UAC-IU |UAS-IsU|      |
        |        |          +-----------+-------+-------+------+
        |        |          | PRACK  (*)|UAC-IU |UAS-IcU|  9   |
        +--------+----------+-----------+-------+-------+------+
        | PRACK  | 2xx-PRA  | UPDATE    |UAS-IcU|       |      |
        +--------+----------+-----------+-------+       |      |
        | 2xx-INV| ACK      | UPDATE    |UAS-IsU| -     |      |
        |        |          +-----------+-------+       |      |
        |        |          | INVITE    |UAS-IsI|       |      |
        +--------+----------+-----------+-------+-------+------+
        | 1xx-rel| PRACK    | UPDATE    |UAS-IsU|       |  6   |
        +--------+----------+-----------+-------+UAC-IU +------+
        | INVITE | 1xx-rel  | UPDATE (*)|       |       |  7   |
        |        +----------+-----------+UAS-IcU+-------+------+
        |        | 2xx-INV  | UPDATE (*)|       | -     |  8   |
        +--------+----------+-----------+-------+-------+------+
        (*) invalid sequences if INVITE request is an initial one
        
        | M1     | M3       | M2        |Action |Action |Figure|
        |(offer1)|(answer1) |(offer2)   | of A  | of B  |      |
        +--------+----------+-----------+-------+-------+------+
        | UPDATE | 2xx-UPD  | UPDATE    |UAS-UcU|       |      |
        |        |          +-----------+-------+ -     |      |
        |        |          | INVITE    |UAS-UcI|       |      |
        |        |          +-----------+-------+-------+------+
        |        |          | 1xx-INV   |       |       |      |
        |        |          +-----------+UAC-UI,|UAS-UsI| 4,5  |
        |        |          | 2xx-INV   |UAC-IU |UAS-IsU|      |
        |        |          +-----------+-------+-------+------+
        |        |          | PRACK  (*)|UAC-IU |UAS-IcU|  9   |
        +--------+----------+-----------+-------+-------+------+
        | PRACK  | 2xx-PRA  | UPDATE    |UAS-IcU|       |      |
        +--------+----------+-----------+-------+       |      |
        | 2xx-INV| ACK      | UPDATE    |UAS-IsU| -     |      |
        |        |          +-----------+-------+       |      |
        |        |          | INVITE    |UAS-IsI|       |      |
        +--------+----------+-----------+-------+-------+------+
        | 1xx-rel| PRACK    | UPDATE    |UAS-IsU|       |  6   |
        +--------+----------+-----------+-------+UAC-IU +------+
        | INVITE | 1xx-rel  | UPDATE (*)|       |       |  7   |
        |        +----------+-----------+UAS-IcU+-------+------+
        |        | 2xx-INV  | UPDATE (*)|       | -     |  8   |
        +--------+----------+-----------+-------+-------+------+
        (*) invalid sequences if INVITE request is an initial one
        

Table 3: Offer/Answer Crossing Message Sequences

表3:提供/应答交叉消息序列

4.2. Glare Case Handling
4.2. 眩光案件处理

When both ends in a dialog send a new offer at nearly the same time, as described in Figure 10, a UA may receive a new offer before it receives the answer to the offer it sent. This case is usually called a 'glare' case.

如图10所示,当对话框两端几乎同时发送一个新要约时,UA可能会在收到对其发送的要约的答复之前收到一个新要约。这种情况通常称为“眩光”情况。

                            A                  B
                            |offer1      offer2|
                         M1 |-------\  /-------| M2
                            |        \/        |
                            |        /\        |
                            |<------/  \------>|
        
                            A                  B
                            |offer1      offer2|
                         M1 |-------\  /-------| M2
                            |        \/        |
                            |        /\        |
                            |<------/  \------>|
        

Figure 10: Glare Case

图10:眩光情况

When offer2 is in an UPDATE request or (re-)INVITE request, it must be rejected with a 491 or 500 response.

当offer2在更新请求或(重新)邀请请求中时,必须以491或500响应拒绝它。

There is a variant of Figure 7. When offer2 is in a PRACK request (within the current rules, only possible if offer1 is in an UPDATE request), as shown in Figure 11, UA A has a dilemma.

图7有一个变体。当offer2在PRACK请求中时(在当前规则范围内,仅当offer1在更新请求中时才可能),如图11所示,UA a有一个两难选择。

                   A                               B
                   |                               |
                   |              re-INVITE(offer0)|
                   |<------------------------------|
                   |1xx-rel(answer0)               |
                   |------------------------------>| --+
                   |UPDATE(offer1)    PRACK(offer2)| M2| Acknowledge
                M1 |============\  /===============| <-+
                   |             \/                |
                   |             /\                |
                   |<===========/  \==============>|
                   |                        491-UPD|
                   |<------------------------------|
                   |                               |
        
                   A                               B
                   |                               |
                   |              re-INVITE(offer0)|
                   |<------------------------------|
                   |1xx-rel(answer0)               |
                   |------------------------------>| --+
                   |UPDATE(offer1)    PRACK(offer2)| M2| Acknowledge
                M1 |============\  /===============| <-+
                   |             \/                |
                   |             /\                |
                   |<===========/  \==============>|
                   |                        491-UPD|
                   |<------------------------------|
                   |                               |
        

Figure 11: Avoidable Glare Case

图11:可避免的眩光情况

All PRACKs are supposed to be accepted with a 200 response, yet there is no way to indicate the problem with a 200 response. At best, it could proceed on the assumption that the UPDATE will be rejected with a 491. To avoid the glare condition shown in Figure 11, UA A should not send this UPDATE request until a PRACK transaction associated with an offer/answer has been completed. If UA B encounters this glare condition, it should reject this UPDATE request with a 491 response.

所有的恶作剧都应该以200回答被接受,但是没有办法用200回答来表明问题所在。充其量,它可以假设更新将被491拒绝。为了避免图11所示的眩光情况,UA不应发送此更新请求,直到与报价/应答相关联的PRACK事务完成。如果UA B遇到这种眩光情况,它应以491响应拒绝该更新请求。

Glare can also occur when offer2 is in a 1xx or 2xx response. This is a variant of Figure 5, as shown in Figure 12.

当offer2处于1xx或2xx响应时,也可能出现眩光。这是图5的一个变体,如图12所示。

                   A                               B
                   |                               |
                   |re-INVITE(no offer)            |
                   |------------------------------>| --+
                   |                1xx-rel/2xx-INV|   | 1st reliable
                   |UPDATE(offer1)         (offer2)| M2| response
                M1 |============\  /===============| <-+
                   |             \/                |
                   |             /\                |
                   |<===========/  \==============>|
                   |                        500-UPD|
                   |<------------------------------|
                   |                               |
        
                   A                               B
                   |                               |
                   |re-INVITE(no offer)            |
                   |------------------------------>| --+
                   |                1xx-rel/2xx-INV|   | 1st reliable
                   |UPDATE(offer1)         (offer2)| M2| response
                M1 |============\  /===============| <-+
                   |             \/                |
                   |             /\                |
                   |<===========/  \==============>|
                   |                        500-UPD|
                   |<------------------------------|
                   |                               |
        

Figure 12: Avoidable Glare Case

图12:可避免的眩光情况

To avoid the glare condition shown in Figure 12, UA A should not send this UPDATE request until an ACK or a PRACK transaction associated with an offer/answer has been completed. If UA B encounters this glare condition, it should reject this UPDATE request with a 500 response.

为了避免图12中所示的眩光情况,UA A不应发送此更新请求,直到与报价/应答相关联的ACK或PRACK事务完成。如果UA B遇到这种眩光情况,它应以500响应拒绝该更新请求。

There is a variant of Figure 4, as shown in Figure 13.

图4有一个变体,如图13所示。

                   A                               B
                   |                               |
                   |UPDATE(offer1)                 |
                   |==========\                    |
                   |re-INVITE  \  (no offer)       |
                   |------------\----------------->| --+
                   |             \  1xx-rel/2xx-INV|   | 1st reliable
                   |              \        (offer2)|   | response
                   |<==============\===============| <-+
                   |                \              |
                   |                 \============>|
                   |                        500-UPD|
                   |<------------------------------|
                   |                               |
        
                   A                               B
                   |                               |
                   |UPDATE(offer1)                 |
                   |==========\                    |
                   |re-INVITE  \  (no offer)       |
                   |------------\----------------->| --+
                   |             \  1xx-rel/2xx-INV|   | 1st reliable
                   |              \        (offer2)|   | response
                   |<==============\===============| <-+
                   |                \              |
                   |                 \============>|
                   |                        500-UPD|
                   |<------------------------------|
                   |                               |
        

Figure 13: Avoidable Glare Case

图13:可避免的眩光情况

To avoid the glare condition shown in Figure 13, UA A should not send this re-INVITE request until an UPDATE transaction has been completed. If UA B encounters this glare condition, it should reject this UPDATE request with a 500 response.

为了避免图13所示的眩光情况,UA不应在更新事务完成之前发送此重新邀请请求。如果UA B遇到这种眩光情况,它应以500响应拒绝该更新请求。

Table 4 summarizes this section. Each action is described in Section 4.3.

表4总结了这一节。第4.3节描述了每项操作。

       | offer1    | offer2    |Action |Action |Figure|
       |  M1       |  M2       | of A  | of B  |      |
       +-----------+-----------+-------+-------+------+
       |           | re-INVITE |UAS-IcI|UAS-IcI|      |
       | re-INVITE +-----------+-------+-------+      |
       |           | UPDATE    |UAS-IcU|UAS-UcI|      |
       +-----------+-----------+-------+-------+      |
       |           | UPDATE    |UAS-UcU|UAS-UcU|      |
       |           +-----------+-------+-------+------+
       |           | 1xx-rel   |       |       |      |
       | UPDATE    +-----------+UAC-IU,|UAS-IsU|12,13 |
       |           | 2xx-INV   |UAC-UI |       |      |
       |           +-----------+-------+-------+------+
       |           | PRACK (*) |UAC-IU |UAS-IcU|  11  |
       +-----------+-----------+-------+-------+------+
        (*) invalid sequences if INVITE request is an initial one
        
       | offer1    | offer2    |Action |Action |Figure|
       |  M1       |  M2       | of A  | of B  |      |
       +-----------+-----------+-------+-------+------+
       |           | re-INVITE |UAS-IcI|UAS-IcI|      |
       | re-INVITE +-----------+-------+-------+      |
       |           | UPDATE    |UAS-IcU|UAS-UcI|      |
       +-----------+-----------+-------+-------+      |
       |           | UPDATE    |UAS-UcU|UAS-UcU|      |
       |           +-----------+-------+-------+------+
       |           | 1xx-rel   |       |       |      |
       | UPDATE    +-----------+UAC-IU,|UAS-IsU|12,13 |
       |           | 2xx-INV   |UAC-UI |       |      |
       |           +-----------+-------+-------+------+
       |           | PRACK (*) |UAC-IU |UAS-IcU|  11  |
       +-----------+-----------+-------+-------+------+
        (*) invalid sequences if INVITE request is an initial one
        

Table 4: Offer/Answer Glare Message Sequences

表4:提供/回答眩光信息序列

4.3. Interworking of UPDATE and Re-INVITE
4.3. 更新和重新邀请的互通

Almost all exceptional cases are caused by an interworking of UPDATE and re-INVITE. The interworking is described in Section 5 of [RFC3311]. And UAC behavior sending an UPDATE is described in Section 5.1 of [RFC3311]. There are two concerns in this section:

几乎所有例外情况都是由更新和重新邀请的交互作用引起的。[RFC3311]第5节描述了互通。[RFC3311]第5.1节描述了UAC发送更新的行为。本节中有两个问题:

1. It seems to describe different rules for each of initial INVITE and re-INVITE. But there is no particular reason why the rules are separated. The lack of restrictions for sending a re-INVITE request cause a lot of problems shown in Section 4.1.

1. 它似乎为每个初始邀请和重新邀请描述了不同的规则。但没有特别的理由解释为什么这些规则是分开的。发送重新邀请请求缺乏限制会导致第4.1节所示的许多问题。

2. It seems to describe that a UA may send an UPDATE request after sending or receiving a PRACK request. But it should be "after PRACK transaction is completed by 2xx response", because it causes the message-crossing case shown in Figure 6.

2. 它似乎描述了UA可以在发送或接收PRACK请求之后发送更新请求。但它应该是“在PRACK事务通过2xx响应完成之后”,因为它会导致图6所示的消息交叉情况。

Since it is assumed that the language in this section itself is non-normative and is justified as a corollary of [RFC3261], we interpret it as follows:

由于假设本节中的语言本身是非规范性的,并且是[RFC3261]的推论,我们将其解释如下:

UAC-II: While an INVITE transaction is incomplete or ACK transaction associated with an offer/answer is incomplete, a UA must not send another INVITE request.

UAC-II:当INVITE事务不完整或与报价/应答关联的ACK事务不完整时,UA不得发送另一个INVITE请求。

UAC-UU: While an UPDATE transaction is incomplete, a UA must not send another UPDATE request.

UAC-UU:更新事务不完整时,UA不得发送另一个更新请求。

UAC-UI: While an UPDATE transaction is incomplete, a UA should not send a re-INVITE request.

UAC-UI:更新事务不完整时,UA不应发送重新邀请请求。

UAC-IU: While an INVITE transaction is incomplete, and an ACK or a PRACK transaction associated with an offer/answer is incomplete, a UA should not send an UPDATE request.

UAC-IU:当INVITE事务不完整,且与报价/应答关联的ACK或PRACK事务不完整时,UA不应发送更新请求。

When a 2xx response to an INVITE includes an offer, the ACK transaction is considered to be associated with an offer/answer.

当对邀请的2xx响应包含要约时,ACK事务被视为与要约/应答关联。

When a reliable provisional response to an INVITE includes an offer or an answer, the PRACK transaction is considered to be associated with an offer/answer.

当对邀请的可靠临时响应包括要约或答复时,PRACK交易被视为与要约/答复相关。

UAS behavior receiving an UPDATE is described in Section 5.2 of [RFC3311]. There are two concerns in this section:

[RFC3311]第5.2节描述了接收更新的UAS行为。本节中有两个问题:

1. There is no description about the interworking of an UPDATE request and an INVITE request without an offer.

1. 没有关于更新请求和邀请请求在没有报价的情况下互通的说明。

2. There is no description about the interworking of an UPDATE request and reliable response to an INVITE with an offer.

2. 没有关于更新请求与邀请的可靠响应与要约的交互的描述。

We interpret this section as follows:

我们对本节的解释如下:

UAS-IcI: While an INVITE client transaction is incomplete or ACK transaction associated with an offer/answer is incomplete, a UA must reject another INVITE request with a 491 response.

UAS IcI:当INVITE客户端事务不完整或与报价/应答关联的ACK事务不完整时,UA必须以491响应拒绝另一个INVITE请求。

UAS-IsI: While an INVITE server transaction is incomplete or ACK transaction associated with an offer/answer is incomplete, a UA must reject another INVITE request with a 500 response.

UAS IsI:当INVITE服务器事务不完整或与报价/应答关联的ACK事务不完整时,UA必须以500响应拒绝另一个INVITE请求。

UAS-UcU: While an UPDATE client transaction is incomplete, a UA must reject another UPDATE request with a 491 response.

UAS UcU:当更新客户端事务不完整时,UA必须拒绝另一个更新请求,并给出491响应。

UAS-UsU: While an UPDATE server transaction is incomplete, a UA must reject another UPDATE request with a 500 response.

UAS UsU:当更新服务器事务不完整时,UA必须拒绝另一个响应为500的更新请求。

UAS-UcI: While an UPDATE client transaction is incomplete, a UA should reject a re-INVITE request with a 491 response.

UAS UcI:当更新客户端事务不完整时,UA应拒绝带有491响应的重新邀请请求。

UAS-UsI: While an UPDATE server transaction is incomplete, a UA should reject a re-INVITE request with a 500 response.

UAS UsI:当更新服务器事务不完整时,UA应以500响应拒绝重新邀请请求。

UAS-IcU: While an INVITE client transaction is incomplete, and an ACK or a PRACK transaction associated with an offer/answer is incomplete, a UA should reject an UPDATE request with a 491 response.

UAS IcU:当INVITE客户端事务不完整,且与报价/应答关联的ACK或PRACK事务不完整时,UA应拒绝带有491响应的更新请求。

UAS-IsU: While an INVITE server transaction is incomplete, and an ACK or a PRACK transaction associated with an offer/answer is incomplete, a UA should reject an UPDATE request with a 500 response.

UAS IsU:当INVITE服务器事务不完整,且与报价/应答关联的ACK或PRACK事务不完整时,UA应拒绝500响应的更新请求。

These rules are shown in following figures.

这些规则如下图所示。

               A                               B
               |                               |
               |                         UPDATE|
               |<------------------------------|
               |UPDATE                         |
               |==============================>|
               |                            491|
               |<==============================|
               |                               |
        
               A                               B
               |                               |
               |                         UPDATE|
               |<------------------------------|
               |UPDATE                         |
               |==============================>|
               |                            491|
               |<==============================|
               |                               |
        

Figure 14: Example of UAC-UU and UAS-UcU

图14:UAC-UU和UAS UcU示例

               A                               B
               |                               |
               |UPDATE CSeq:m                  |
               |------------------------------>|
               |UPDATE CSeq:n(>m)              |
               |==============================>|
               |            500 (UPDATE CSeq:n)|
               |<==============================|
               |                               |
        
               A                               B
               |                               |
               |UPDATE CSeq:m                  |
               |------------------------------>|
               |UPDATE CSeq:n(>m)              |
               |==============================>|
               |            500 (UPDATE CSeq:n)|
               |<==============================|
               |                               |
        

Figure 15: Example of UAC-UU and UAS-UsU

图15:UAC-UU和UAS UsU示例

               A                               B
               |                               |
               |                 UPDATE(offer1)|
               |<------------------------------|
               |reINVITE(no offer)             |
               |==============================>|
               |                   491 (INVITE)|
               |<==============================|
               |                               |
        
               A                               B
               |                               |
               |                 UPDATE(offer1)|
               |<------------------------------|
               |reINVITE(no offer)             |
               |==============================>|
               |                   491 (INVITE)|
               |<==============================|
               |                               |
        

Figure 16: Example of UAC-UI and UAS-UcI

图16:UAC-UI和UAS UcI示例

               A                               B
               |                               |
               |UPDATE(offer1)                 |
               |------------------------------>|
               |reINVITE(no offer)             |
               |==============================>|
               |                   500 (INVITE)|
               |<==============================|
               |                               |
        
               A                               B
               |                               |
               |UPDATE(offer1)                 |
               |------------------------------>|
               |reINVITE(no offer)             |
               |==============================>|
               |                   500 (INVITE)|
               |<==============================|
               |                               |
        

Figure 17: Example of UAC-UU and UAS-UsI

图17:UAC-UU和UAS UsI示例

               A                               B
               |                               |
               |             reINVITE(no offer)|
               |<------------------------------|
               |1xx-rel(offer0)                |
               |------------------------------>|
               |UPDATE(offer1)                 |
               |==============================>|
               |                   491 (UPDATE)|
               |<==============================|
               |                               |
        
               A                               B
               |                               |
               |             reINVITE(no offer)|
               |<------------------------------|
               |1xx-rel(offer0)                |
               |------------------------------>|
               |UPDATE(offer1)                 |
               |==============================>|
               |                   491 (UPDATE)|
               |<==============================|
               |                               |
        

Figure 18: Example of UAC-IU and UAS-IcU

图18:UAC-IU和UAS IcU示例

               A                               B
               |                               |
               |reINVITE(no offer)             |
               |------------------------------>|
               |                1xx-rel(offer0)|
               |<------------------------------|
               |UPDATE(offer1)                 |
               |==============================>|
               |                   500 (UPDATE)|
               |<==============================|
               |                               |
        
               A                               B
               |                               |
               |reINVITE(no offer)             |
               |------------------------------>|
               |                1xx-rel(offer0)|
               |<------------------------------|
               |UPDATE(offer1)                 |
               |==============================>|
               |                   500 (UPDATE)|
               |<==============================|
               |                               |
        

Figure 19: Example of UAC-IU and UAS-IsU

图19:UAC-IU和UAS智能开关单元示例

In addition, it is assumed that the UPDATE request in this section includes an offer. The interworking of a re-INVITE and an UPDATE without an offer is out of scope for this document.

此外,假设本节中的更新请求包括报价。重新邀请和无报价更新的交互不在本文档的范围内。

5. Content of Offers and Answers
5. 提议和答复的内容

While [RFC3264] and [RFC3312] give some guidance, questions remain about exactly what should be included in an offer or answer. This is especially a problem when the common "hold" feature has been activated, and when there is the potential for a multimedia call.

虽然[RFC3264]和[RFC3312]提供了一些指导,但关于报价或答复中应包含哪些内容的问题仍然存在。当常用的“保持”功能被激活时,以及当有可能进行多媒体通话时,这尤其是一个问题。

Details of behavior depend on the capabilities and state of the User Agent. The kinds of recommendations that can be made are limited by the model of device capabilities and state that is presumed to exist.

行为的详细信息取决于用户代理的功能和状态。可以提出的建议种类受到设备能力模型和假定存在的状态的限制。

This section focuses on a few key aspects of offers and answers that have been identified as troublesome, and will consider other aspects to be out of scope. This section considers:

本节重点介绍了被认定为麻烦的提供和答案的几个关键方面,并将考虑其他方面超出范围。本节认为:

o choice of supported media types and formats to include and exclude

o 选择要包括和排除的受支持媒体类型和格式

o hold and resume of media

o 媒体的保留和恢复

The following are out of scope for this document:

以下内容超出了本文件的范围:

o NAT traversal and Interactive Connectivity Establishment (ICE)

o NAT穿越和交互式连接建立(ICE)

o specific codecs and their parameters

o 特定编解码器及其参数

o the negotiation of secure media streams

o 安全媒体流的协商

o grouping of media streams

o 媒体流分组

o preconditions

o 前提条件

5.1. General Principle for Constructing Offers and Answers
5.1. 构造报价和应答的一般原则

A UA should send an offer that indicates what it, and its user, are interested in using/doing at that time, without regard for what the other party in the call may have indicated previously. This is the case even when the offer is sent in response to an INVITE or re-INVITE that contains no offer. (However, in the case of re-INVITE, the constraints of [RFC3261] and [RFC3264] must be observed.)

UA应发送一份要约,表明其及其用户当时对使用/做什么感兴趣,而不考虑通话中的另一方之前可能已经表示的内容。即使在发送要约以响应不包含要约的邀请或重新邀请时也是如此。(但是,在重新邀请的情况下,必须遵守[RFC3261]和[RFC3264]的约束。)

A UA should send an answer that includes as close an approximation to what the UA and its user are interested in doing at that time, while remaining consistent with the offer/answer rules of [RFC3264] and other RFCs.

UA应发送一份答复,其中应尽可能接近UA及其用户当时感兴趣的内容,同时与[RFC3264]和其他RFC的报价/答复规则保持一致。

NOTE: "at that time" is important. The device may permit the user to configure which supported media are to be used by default.

注意:“当时”很重要。该设备可允许用户配置默认情况下要使用的支持媒体。

In some cases, a UA may not have direct knowledge of what it is interested in doing at a particular time. If it is an intermediary, it may be able to delegate the decision. In the worst case, it may apply a default, such as assuming it wants to use all of its capabilities.

在某些情况下,UA可能无法直接了解其在特定时间感兴趣做什么。如果它是一个中间人,它可能能够委托决策。在最坏的情况下,它可能会应用默认值,例如假设它希望使用其所有功能。

5.2. Choice of Media Types and Formats to Include and Exclude
5.2. 选择要包括和排除的媒体类型和格式
5.2.1. Sending an Initial INVITE with Offer
5.2.1. 发送带有报价的初始邀请

When a UAC sends an initial INVITE with an offer, it has complete freedom to choose which media type(s) and media format(s) (payload types in the case of RTP) it should include in the offer.

当UAC发送带有报价的初始邀请时,它完全可以自由选择应包含在报价中的媒体类型和媒体格式(RTP情况下为有效负载类型)。

The media types may be all or a subset of the media the UAC is capable of supporting, with the particular subset being determined by the design and configuration (e.g., via [RFC6080]) of the UAC combined with input from the user interface of the UAC.

媒体类型可以是UAC能够支持的媒体的全部或子集,特定子集由UAC的设计和配置(例如,通过[RFC6080])结合来自UAC用户界面的输入来确定。

The media formats may be all or a subset of the media formats the UAC is capable of supporting for the corresponding media type, with the particular subset being determined by the design and configuration of the UAC combined with input from the user interface of the UAC.

媒体格式可以是UAC能够支持相应媒体类型的媒体格式的全部或子集,特定子集由UAC的设计和配置结合来自UAC的用户界面的输入来确定。

Including all supported media formats will maximize the possibility that the other party will have a supported format in common. But including many can result in an unacceptably large SDP body.

包括所有受支持的媒体格式将最大限度地提高另一方拥有共同受支持格式的可能性。但包括许多可能会导致一个不可接受的大SDP机构。

5.2.2. Responding with an Offer When the Initial INVITE Has No Offer
5.2.2. 当初始邀请没有报价时,以报价响应

When a UAS has received an initial INVITE without an offer, it must include an offer in the first reliable response to the INVITE. It has largely the same options as when sending an initial INVITE with an offer, but there are some differences. The choice may be governed by both static (default) selections of media types as well as dynamic selections made by a user via interaction with the device while it is alerting.

当UAS收到没有报价的初始邀请时,它必须在对邀请的第一个可靠响应中包含报价。它的选择基本上与发送带有报价的初始邀请时相同,但也存在一些差异。该选择可以由媒体类型的静态(默认)选择以及用户在设备发出警报时通过与设备交互进行的动态选择控制。

NOTE: The offer may be sent in a reliable provisional response, before the user of the device has been alerted and had an opportunity to select media options for the call. In this case, the UAS cannot include any call-specific options from the user of the device. If there is a possibility that the user of the device will wish to change what is offered before answering the call, then special care should be taken. If PRACK and UPDATE are supported by caller and callee then an initial offer can be sent reliably, and changed with an UPDATE if the user desires a change. If PRACK and UPDATE are not supported, then the initial offer cannot be changed until the call is fully established. In that case, the offer in a 200 response for the initial INVITE should include only the media types and formats believed to be acceptable to the user.

注意:在设备用户收到警报并有机会为呼叫选择媒体选项之前,可通过可靠的临时响应发送报价。在这种情况下,UAS不能包括来自设备用户的任何呼叫特定选项。如果设备用户可能希望在接听电话之前更改所提供的内容,则应特别小心。如果调用者和被调用者支持PRACK和UPDATE,则可以可靠地发送初始报价,如果用户希望更改,则可以通过更新进行更改。如果不支持PRACK和UPDATE,则在通话完全建立之前,无法更改初始报价。在这种情况下,初始邀请的200响应中的报价应仅包括用户认为可接受的媒体类型和格式。

5.2.3. Answering an Initial INVITE with Offer
5.2.3. 以报价回应最初的邀请

When a UAS receives an initial INVITE with an offer, what media lines the answer may contain is constrained by [RFC3264]. The answer must contain the same number of "m=" lines as the offer, and they must contain the same media types. Each media line may be accepted, by including a non-zero port number, or rejected by including a zero port number in the answer. The media lines that are accepted should typically be those with types and formats the UAS would have included if it were the offerer.

当UAS收到带有报价的初始邀请时,答案可能包含的媒体行受[RFC3264]约束。答案必须包含与报价相同数量的“m=”行,并且它们必须包含相同的媒体类型。每个媒体线路可以通过包括非零端口号来接受,也可以通过在应答中包括零端口号来拒绝。被接受的媒体线路通常应该是那些具有UAS(如果UAS是报价人)可能包含的类型和格式的线路。

The media formats the answer may contain are constrained by [RFC3264]. For each accepted "m=" line in the answer, there must be at least one media format in common with the corresponding "m=" line of the offer. The UAS may also include other media formats it is able to support at this time. Doing so establishes an asymmetric media format situation, where these "other" media formats may only be sent from the offerer to the answerer. This asymmetric media situation is also limited because it cannot be sustained if there is a subsequent offer/answer exchange in the opposite direction. Also, there is limited value in including these other media formats because there is no assurance that the offerer will be able to use them.

答案可能包含的媒体格式受[RFC3264]约束。对于答案中每个接受的“m=”行,必须至少有一种媒体格式与报价的相应“m=”行相同。UAS还可能包括目前能够支持的其他媒体格式。这样做建立了一种不对称的媒体格式情况,即这些“其他”媒体格式只能从报价人发送给应答人。这种不对称的媒体情况也受到限制,因为如果随后出现相反方向的报价/应答交换,这种情况将无法持续。此外,包含这些其他媒体格式的价值有限,因为无法保证报价人能够使用它们。

If the UAS does not wish to indicate support for any of the media types in a particular media line of the offer it must reject the corresponding media line, by setting the port number to zero.

如果UAS不希望表示支持产品特定媒体线路中的任何媒体类型,则必须通过将端口号设置为零来拒绝相应的媒体线路。

When the UAS wishes to reject all of the media lines in the offer, it may send a 488 failure response. Alternatively, it may send a reliable non-failure response including all media lines with port numbers set to zero.

当UAS希望拒绝报价中的所有媒体线路时,它可能会发送488失败响应。或者,它可以发送可靠的无故障响应,包括端口号设置为零的所有媒体线路。

5.2.4. Answering When the Initial INVITE Had No Offer
5.2.4. 在最初的邀请没有报价时回答

When a UAC has sent an initial INVITE without an offer, and then receives a response with the first offer, it should answer in the same way as a UAS receiving an initial INVITE with an offer.

当UAC发送了一个没有报价的初始邀请,然后收到了第一个报价的响应时,它应该以与收到带有报价的初始邀请的UAS相同的方式回答。

Because the offer arrives in a response to the INVITE, the UAC cannot reject the message containing the offer. If the UAC wishes to reject the entire offer, it must send a PRACK or ACK request including all the media lines with ports set to zero. Then, if it does not wish to continue the session, it may send a CANCEL or BYE request to terminate the dialog.

因为要约是在响应邀请时到达的,所以UAC不能拒绝包含要约的消息。如果UAC希望拒绝整个报价,则必须发送PRACK或ACK请求,包括端口设置为零的所有媒体线路。然后,如果它不希望继续会话,它可以发送取消或BYE请求来终止对话框。

5.2.5. Subsequent Offers and Answers
5.2.5. 后续报价和答复

The guidelines above (Sections 5.1 and 5.2.1 through Section 5.2.4) apply, but constraints in [RFC3264] must also be followed. The following are of particular note because they have proven troublesome:

上述指南(第5.1节和第5.2.1节至第5.2.4节)适用,但也必须遵守[RFC3264]中的约束条件。以下是特别值得注意的,因为事实证明它们很麻烦:

o The number of "m=" lines may not be reduced in a subsequent offer. Previously rejected media streams must remain, or be reused to offer the same or a different stream. (Section 6 of [RFC3264].)

o 后续报价中不得减少“m=”行的数量。以前被拒绝的媒体流必须保留,或重新使用以提供相同或不同的流。(参考[RFC3264]第6节)

o In the "o=" line, only the version number may change, and if it changes, it must increment by one from the one previously sent as an offer or answer. (Section 8 of [RFC3264].) If it doesn't change, then the entire SDP body must be identical to what was previously sent as an offer or answer. Changing the "o=" line, except version number value, during the session is an error case. The behavior when receiving such a non-compliant offer/answer SDP body is implementation dependent. If a UA needs to negotiate a 'new' SDP session, it should use the INVITE/Replaces method.

o 在“o=”行中,只有版本号可以更改,如果版本号更改,则必须从先前作为报价或应答发送的版本号增加1。(第8节[RFC3264])如果不改变,则整个SDP正文必须与先前作为要约或答复发送的内容相同。在会话期间更改“o=”行(版本号值除外)是一种错误情况。收到此类不合规的报价/应答SDP正文时的行为取决于实现。如果UA需要协商“新”SDP会话,则应使用INVITE/Replaces方法。

o In the case of RTP, the mapping from a particular dynamic payload type number to a particular codec within that media stream ("m=" line) must not change for the duration of the session. (Section 8.3.2 of [RFC3264].)

o 在RTP的情况下,在会话期间,从特定的动态有效负载类型号到该媒体流中的特定编解码器(“m=”line)的映射不得更改。(参考[RFC3264]第8.3.2节)

NOTE: This may be impossible for a back-to-back user agent (B2BUA) to follow in some cases (e.g., 3PCC transfer) if it does not terminate media.

注意:如果背对背用户代理(B2BUA)不终止介质,则在某些情况下(例如,3PCC传输),可能无法遵循此操作。

When the new offer is sent in response to an offerless (re-)INVITE, it should be constructed according to the General Principle for Constructing Offers and Answers (Section 5.1 ): all codecs the UA is currently willing and able to use should be included, not just the ones that were negotiated by previous offer/answer exchanges. The same is true for media types -- so if UA A initially offered audio and video to UA B, and they end up with only audio, and UA B sends an offerless (re-)INVITE to UA A, A's resulting offer should most likely re-attempt video, by reusing the zeroed "m=" line used previously.

当新要约响应无要约(重新)邀请发送时,应根据构建要约和应答的一般原则(第5.1节)构建新要约:应包括UA当前愿意并能够使用的所有编解码器,而不仅仅是先前要约/应答交换协商的编解码器。媒体类型也是如此——因此,如果UA A最初向UA B提供音频和视频,但最终只提供音频,而UA B向UA A发送无报价(重新)邀请,则A的最终报价很可能会重新尝试视频,方法是重用前面使用的零“m=”行。

NOTE: The behavior above is recommended, but it is not always achievable, for example, in some interworking scenarios. Or, the offerer may simply not have enough resources to offer "everything" at that point. Even if the UAS is not able to offer any other SDP that the one currently being used, it should not reject the re-INVITE. Instead, it should generate an offer with the currently used SDP with "o=" line unchanged.

注意:以上行为是推荐的,但并不总是可以实现的,例如,在某些互通场景中。或者,发盘方可能根本没有足够的资源在那个时候提供“一切”。即使UAS无法提供当前正在使用的任何其他SDP,也不应拒绝重新邀请。相反,它应该使用当前使用的SDP生成报价,并且“o=”行保持不变。

5.3. Hold and Resume of Media
5.3. 媒体的保留和恢复

[RFC3264] specifies (using non-normative language) that "hold" should be indicated in an established session by sending a new offer containing "a=sendonly" attribute for each media stream to be held. An answerer is then to respond with "a=recvonly" attribute to acknowledge that the hold request has been understood.

[RFC3264]指定(使用非规范性语言)在已建立的会话中应通过发送包含每个待保留媒体流的“a=sendonly”属性的新要约来指示“保留”。然后,应答者将使用“a=recvonly”属性进行响应,以确认等待请求已被理解。

Note that the use of sendonly/recvonly is not limited to hold. These may be used for other reasons, such as devices that are only capable of sending or receiving. So receiving an offer with "a=sendonly" attribute must not be treated as a certain indication that the offerer has placed the media stream on hold.

请注意,sendonly/RecvoOnly的使用不限于hold。这些可用于其他原因,例如仅能够发送或接收的设备。因此,接收带有“a=sendonly”属性的要约不能被视为要约人已暂停媒体流的特定指示。

This model is based on an assumption that the UA initiating the hold will want to play Music on Hold, which is not always the case. A UA may, if desired, initiate hold by offering "a=inactive" attribute if it does not intend to transmit any media while in hold status.

该模型基于一个假设,即发起暂停的UA希望在暂停时播放音乐,但情况并非总是如此。如果UA在保持状态时不打算传输任何媒体,则如果需要,UA可以通过提供“A=inactive”属性来启动保持。

The rules of [RFC3264] constrain what may be in an answer when the offer contains "sendonly", "recvonly", or "inactive" in an "a=" line. But they do not constrain what must be in a subsequent offer. The "General Principle for Constructing Offers and Answers" (Section 5.1) is important here. The initiation of "hold" is a local action. It should reflect the desired state of the UA. It then affects what the UA includes in offers and answers until the local state is reset.

[RFC3264]的规则限制了当报价在“a=”行中包含“sendonly”、“RecvoOnly”或“inactive”时答案中可能包含的内容。但它们并不限制后续报价中必须包含的内容。“构建报价和应答的一般原则”(第5.1节)在这里很重要。“暂停”的启动是一个局部动作。它应该反映UA的期望状态。然后,它会影响UA在报价和应答中包含的内容,直到重置本地状态。

The receipt of an offer containing "a=sendonly" attribute or "a=inactive" attribute and the sending of a compatible answer should not change the desired state of the recipient. However, a UA that has been "placed on hold" may itself desire to initiate its own hold status, based on local input.

接收包含“a=sendonly”属性或“a=inactive”属性的要约以及发送兼容的答复不应改变收件人的所需状态。然而,已“暂停”的UA本身可能希望根据本地输入启动其自己的暂停状态。

If UA2 has previously been "placed on hold" by UA1, via receipt of "a=sendonly" attribute, then it may initiate its own hold by sending a new offer containing "a=sendonly" attribute to UA1. Upon receipt of that, UA1 will answer with "a=inactive" attribute because that is the only valid answer that reflects its desire not to receive media.

如果UA1之前通过接收“a=sendonly”属性将UA2“搁置”,则它可以通过向UA1发送包含“a=sendonly”属性的新要约来启动自己的搁置。收到该消息后,UA1将使用“a=inactive”属性回答,因为这是唯一反映其不接收媒体愿望的有效答案。

NOTE: Section 8.4 of [RFC3264] contains a conflicting recommendation that the offer contain "a=inactive" attribute in this case. We interpret that recommendation to be non-normative. The use of "a=sendonly" attribute in this case will never produce a worse outcome, and can produce a better outcome in useful cases.

注:[RFC3264]的第8.4节包含一个相互冲突的建议,即在这种情况下,报价包含“a=inactive”属性。我们认为该建议是非规范性的。在这种情况下使用“a=sendonly”属性永远不会产生更糟糕的结果,在有用的情况下可以产生更好的结果。

Once in this state, to resume a two-way exchange of media, each side must reset its local hold status. If UA1 is first to go off hold, it will then send an offer with "a=sendrecv" attribute. The UA2 will respond with its desired state of "a=sendonly" attribute because that is a permitted response. When UA2 desires to also resume, it will send an offer with "a=sendrecv" attribute. In this case, because UA1 has the same desire it will respond with "a=sendrecv" attribute. In the same case, when UA2 receives the offer with "a=sendrecv" attribute, if it has decided it wants to reset its local hold but has not yet signaled the intent, it may send "a=sendrecv" attribute in the answer.

一旦处于这种状态,要恢复介质的双向交换,每一方都必须重置其本地保持状态。如果UA1是第一个停止等待的,那么它将发送一个带有“a=sendrecv”属性的报价。UA2将使用其所需的状态“a=sendonly”属性进行响应,因为这是允许的响应。当UA2希望恢复时,它将发送一个带有“a=sendrecv”属性的报价。在这种情况下,由于UA1具有相同的愿望,它将使用“a=sendrecv”属性进行响应。在相同的情况下,当UA2收到带有“a=sendrecv”属性的要约时,如果它已经决定要重置其本地持有,但尚未发出意向信号,它可能会在应答中发送“a=sendrecv”属性。

If UA2 has been "placed on hold" by UA1 via receipt of "a=inactive" attribute, and subsequently wants to initiate its own hold, also using "a=inactive" attribute, it need not send a new offer, since the only valid response is "a=inactive" attribute and that is already in effect. However, its local desired state will now be either "inactive" or "a=sendonly" attribute. This affects what it will send in future offers and answers.

如果UA1通过接收“a=inactive”属性将UA2“搁置”,并且随后想要启动其自己的搁置(也使用“a=inactive”属性),则UA2无需发送新要约,因为唯一有效的响应是“a=inactive”属性,并且该属性已经生效。但是,它的本地所需状态现在将是“inactive”或“a=sendonly”属性。这将影响它在未来的报价和答复中发送的内容。

If a UA has occasion to send another offer in the session, without any desire to change the hold status (e.g., in response to a re-INVITE without an offer, or when sending a re-INVITE to refresh the session timer), it should follow the "General Principle for Constructing Offers and Answers" (Section 5.1). If it previously initiated a "hold" by sending "a=sendonly" attribute or "a=inactive" attribute, then it should offer that again. If it had not previously initiated "hold", then it should offer "a=sendrecv" attribute, even

如果UA有机会在会话中发送另一个要约,而不希望更改保留状态(例如,响应无要约的重新邀请,或发送重新邀请以刷新会话计时器),则UA应遵循“构建要约和回答的一般原则”(第5.1节)。如果它之前通过发送“a=sendonly”属性或“a=inactive”属性启动了“保持”,那么它应该再次提供该属性。如果它之前没有启动“保持”,那么它应该提供“a=sendrecv”属性,甚至

if it had previously been forced to answer something else. Without this behavior it is possible to get "stuck on hold" in some cases, especially when a 3pcc is involved.

如果它以前被迫回答其他问题。如果没有这种行为,在某些情况下,特别是涉及到3pcc时,可能会“卡在等待中”。

5.4. Behavior on Receiving SDP with c=0.0.0.0
5.4. c=0.0.0.0时接收SDP的行为

[RFC3264] requires that an agent be capable of receiving SDP with a connection address of 0.0.0.0, in which case it means that neither RTP nor RTCP should be sent to the peer.

[RFC3264]要求代理能够接收连接地址为0.0.0.0的SDP,在这种情况下,这意味着不应向对等方发送RTP或RTCP。

If a UA generates an answer to the offer received with "c=IN IP4 0.0.0.0", the direction attribute of the accepted media stream in the answer must still be based on direction attribute of the offered stream and rules specified in [RFC3264] to form the direction "a=" line in the answer. There is no clear rule about the use of "c=IN IP4 0.0.0.0" in the answer; it may be used or "c=" line with a valid IP address may be used. RTP/RTCP will not be sent toward an address of 0.0.0.0 because it is an invalid address.

如果UA以“IP4 0.0.0.0中的c=生成对接收到的要约的答复,则答复中接受的媒体流的方向属性仍必须基于所提供流的方向属性和[RFC3264]中指定的规则,以形成答复中的方向“a=”行。答案中没有关于“c=在IP4 0.0.0.0中”的明确规定;可以使用它,也可以使用具有有效IP地址的“c=”行。RTP/RTCP不会发送到0.0.0.0的地址,因为该地址无效。

6. Security Considerations
6. 安全考虑

This document clarifies ambiguities in the intended behavior of the two SIP User Agents engaged in a dialog. The primary specification of offer/answer behavior that is being clarified resides in [RFC3261] and [RFC3264], with extensions in [RFC3311], [RFC3312], and [RFC6141]. The focus of this document is on cases where ambiguities can result failed or degraded calls when there is no attacker. The clarifications exclude call flows that lead to difficulties, without legitimizing any formerly invalid call flows. Thus, the security considerations of the above mentioned documents continue to apply and need not be extended to handle any additional cases.

本文档澄清了参与对话的两个SIP用户代理的预期行为中的歧义。正在澄清的提供/应答行为的主要规范在[RFC3261]和[RFC3264]中,扩展在[RFC3311]、[RFC3312]和[RFC6141]中。本文档的重点是在没有攻击者的情况下,歧义可能导致调用失败或降级的情况。澄清排除了导致困难的调用流,而没有使任何以前无效的调用流合法化。因此,上述文件的安全考虑继续适用,无需扩展到处理任何其他案件。

The offer/answer process can be disrupted in numerous ways by an attacker. SIP provides mechanisms to protect the offer/answer exchange from tampering by third parties. Of note is "Enhancements for Authenticated Identity Management in the Session Initiation Protocol (SIP)" [RFC4474], as well as Section 26.3.2, "Security Solutions", of [RFC3261].

攻击者可以通过多种方式中断提供/应答过程。SIP提供了保护提供/应答交换免受第三方篡改的机制。值得注意的是“会话启动协议(SIP)中认证身份管理的增强”[RFC4474],以及[RFC3261]第26.3.2节“安全解决方案”。

7. Acknowledgements
7. 致谢

The authors would like to thank Christer Holmberg, Rajeev Seth, Nataraju A B, Byron Campen, Jonathan Rosenberg, Gonzalo Camarillo, and Gao Yang for their thorough reviews and comments. Many of their suggestions and ideas have been incorporated in this document.

作者要感谢Christer Holmberg、Rajeev Seth、Nataraju A B、Byron Campen、Jonathan Rosenberg、Gonzalo Camarillo和Gao Yang的全面评论和评论。他们的许多建议和想法已纳入本文件。

8. References
8. 工具书类
8.1. Normative References
8.1. 规范性引用文件

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,1997年3月。

[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002.

[RFC3261]Rosenberg,J.,Schulzrinne,H.,Camarillo,G.,Johnston,A.,Peterson,J.,Sparks,R.,Handley,M.,和E.Schooler,“SIP:会话启动协议”,RFC 3261,2002年6月。

[RFC3262] Rosenberg, J. and H. Schulzrinne, "Reliability of Provisional Responses in Session Initiation Protocol (SIP)", RFC 3262, June 2002.

[RFC3262]Rosenberg,J.和H.Schulzrinne,“会话启动协议(SIP)中临时响应的可靠性”,RFC 32622,2002年6月。

[RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, June 2002.

[RFC3264]Rosenberg,J.和H.Schulzrinne,“具有会话描述协议(SDP)的提供/应答模型”,RFC 3264,2002年6月。

[RFC3311] Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE Method", RFC 3311, October 2002.

[RFC3311]Rosenberg,J.,“会话启动协议(SIP)更新方法”,RFC3311,2002年10月。

[RFC3312] Camarillo, G., Marshall, W., and J. Rosenberg, "Integration of Resource Management and Session Initiation Protocol (SIP)", RFC 3312, October 2002.

[RFC3312]Camarillo,G.,Marshall,W.,和J.Rosenberg,“资源管理和会话启动协议(SIP)的集成”,RFC 3312,2002年10月。

[RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session Description Protocol", RFC 4566, July 2006.

[RFC4566]Handley,M.,Jacobson,V.,和C.Perkins,“SDP:会话描述协议”,RFC4566,2006年7月。

[RFC6141] Camarillo, G., Holmberg, C., and Y. Gao, "Re-INVITE and Target-Refresh Request Handling in the Session Initiation Protocol (SIP)", RFC 6141, March 2011.

[RFC6141]Camarillo,G.,Holmberg,C.,和Y.Gao,“会话启动协议(SIP)中的重新邀请和目标刷新请求处理”,RFC 61412011年3月。

8.2. Informative References
8.2. 资料性引用

[RFC3725] Rosenberg, J., Peterson, J., Schulzrinne, H., and G. Camarillo, "Best Current Practices for Third Party Call Control (3pcc) in the Session Initiation Protocol (SIP)", BCP 85, RFC 3725, April 2004.

[RFC3725]Rosenberg,J.,Peterson,J.,Schulzrinne,H.,和G.Camarillo,“会话启动协议(SIP)中第三方呼叫控制(3pcc)的当前最佳实践”,BCP 85,RFC 37252004年4月。

[RFC3959] Camarillo, G., "The Early Session Disposition Type for the Session Initiation Protocol (SIP)", RFC 3959, December 2004.

[RFC3959]Camarillo,G.“会话启动协议(SIP)的早期会话处置类型”,RFC 3959,2004年12月。

[RFC4474] Peterson, J. and C. Jennings, "Enhancements for Authenticated Identity Management in the Session Initiation Protocol (SIP)", RFC 4474, August 2006.

[RFC4474]Peterson,J.和C.Jennings,“会话启动协议(SIP)中身份验证管理的增强”,RFC 4474,2006年8月。

[RFC6080] Petrie, D. and S. Channabasappa, "A Framework for Session Initiation Protocol User Agent Profile Delivery", RFC 6080, March 2011.

[RFC6080]Petrie,D.和S.Channabasappa,“会话启动协议用户代理配置文件交付框架”,RFC 60802011年3月。

Authors' Addresses

作者地址

OKUMURA Shinji Softfront 28-196, Noth9, West15, Chuo-ku Sapporo, Hokkaido 060-0009 Japan

日本北海道札幌中古15号西北9号OKUMURA Shinji Softfront 28-196 060-0009

   EMail: shinji.okumura@softfront.jp
        
   EMail: shinji.okumura@softfront.jp
        

Takuya Sawada KDDI Corporation 3-10-10, Iidabashi, Chiyoda-ku Tokyo Japan

日本东京千代田区Iidabashi Sawada-Takuya KDDI公司3-10-10

   EMail: tu-sawada@kddi.com
        
   EMail: tu-sawada@kddi.com
        

Paul H. Kyzivat Hudson, MA 01749 USA

Paul H.Kyzivat Hudson,马萨诸塞州,美国01749

   EMail: pkyzivat@alum.mit.edu
        
   EMail: pkyzivat@alum.mit.edu