Internet DRAFT - draft-hurst-sip-quic

draft-hurst-sip-quic







Network Working Group                                           S. Hurst
Internet-Draft                                BBC Research & Development
Intended status: Experimental                            25 October 2022
Expires: 28 April 2023


     SIP-over-QUIC: Session Initiation Protocol over QUIC Transport
                        draft-hurst-sip-quic-00

Abstract

   This document describes a mapping of Session Initiation Protocol
   (SIP) semantics over QUIC Transport.  It allows the creation,
   modification and termination of media sessions with one or more
   participants, possibly carried over the same QUIC transport
   connection, using RTP/AVP directly, or some mixture of both.

   SIP-over-QUIC enables a more efficient use of network resources by
   introducing field compression to the header fields carried in SIP
   transactions.

About This Document

   This note is to be removed before publishing as an RFC.

   The latest revision of this draft can be found at https://probable-
   train-1d24d093.pages.github.io/draft-hurst-sip-quic.html.  Status
   information for this document may be found at
   https://datatracker.ietf.org/doc/draft-hurst-sip-quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/bbc/draft-hurst-sip-quic.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."




Hurst                     Expires 28 April 2023                 [Page 1]

Internet-Draft                SIP-over-QUIC                 October 2022


   This Internet-Draft will expire on 28 April 2023.

Copyright Notice

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

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://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 include Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  Conventions . . . . . . . . . . . . . . . . . . . . . . .   4
     1.2.  Definitions . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  SIP-over-QUIC Protocol Overview . . . . . . . . . . . . . . .   5
     2.1.  QUIC Transport  . . . . . . . . . . . . . . . . . . . . .   6
       2.1.1.  Draft Version Identification  . . . . . . . . . . . .   6
     2.2.  Connection Reuse  . . . . . . . . . . . . . . . . . . . .   7
   3.  Expressing SIP Semantics Over QUIC Transport  . . . . . . . .   7
     3.1.  QUIC Clients and Servers  . . . . . . . . . . . . . . . .   7
     3.2.  SIP Transaction Framing . . . . . . . . . . . . . . . . .   7
       3.2.1.  Request Cancellation and Rejection  . . . . . . . . .   8
       3.2.2.  Malformed Requests And Responses  . . . . . . . . . .   9
     3.3.  SIP Header Fields . . . . . . . . . . . . . . . . . . . .  10
       3.3.1.  SIP-over-QUIC Header Compression  . . . . . . . . . .  10
       3.3.2.  SIP Control Data  . . . . . . . . . . . . . . . . . .  11
       3.3.3.  Via Transport Parameter . . . . . . . . . . . . . . .  13
       3.3.4.  SIP URI Transport Parameter . . . . . . . . . . . . .  13
       3.3.5.  Transaction Sequence Number . . . . . . . . . . . . .  13
     3.4.  Connection Keep-Alive . . . . . . . . . . . . . . . . . .  13
   4.  Compatibility With Earlier SIP Versions . . . . . . . . . . .  13
     4.1.  Transactions  . . . . . . . . . . . . . . . . . . . . . .  15
     4.2.  Dialogs . . . . . . . . . . . . . . . . . . . . . . . . .  15
   5.  Stream Mapping and Usage  . . . . . . . . . . . . . . . . . .  15
     5.1.  Bidirectional Streams . . . . . . . . . . . . . . . . . .  16
     5.2.  Unidirectional Streams  . . . . . . . . . . . . . . . . .  16
       5.2.1.  Control Streams . . . . . . . . . . . . . . . . . . .  17
   6.  SIP Methods . . . . . . . . . . . . . . . . . . . . . . . . .  18
   7.  SIP Framing Layer . . . . . . . . . . . . . . . . . . . . . .  18
     7.1.  Frame Layout  . . . . . . . . . . . . . . . . . . . . . .  19
     7.2.  Frame Definitions . . . . . . . . . . . . . . . . . . . .  20



Hurst                     Expires 28 April 2023                 [Page 2]

Internet-Draft                SIP-over-QUIC                 October 2022


       7.2.1.  DATA  . . . . . . . . . . . . . . . . . . . . . . . .  20
       7.2.2.  HEADERS . . . . . . . . . . . . . . . . . . . . . . .  20
       7.2.3.  CANCEL  . . . . . . . . . . . . . . . . . . . . . . .  20
       7.2.4.  SETTINGS  . . . . . . . . . . . . . . . . . . . . . .  21
   8.  Error Handling  . . . . . . . . . . . . . . . . . . . . . . .  22
     8.1.  SIP-over-QUIC Error Codes . . . . . . . . . . . . . . . .  23
   9.  Extensions to SIP-over-QUIC . . . . . . . . . . . . . . . . .  24
   10. Future Carriage of Media Sessions . . . . . . . . . . . . . .  25
     10.1.  Carriage Of RTP In A QUIC Transport Session  . . . . . .  26
     10.2.  Carriage Of Non-RTP Media Streaming Protocols In A QUIC
            Transport Session  . . . . . . . . . . . . . . . . . . .  26
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  27
   12. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  27
     12.1.  Registration Of SIP Identification Strings . . . . . . .  27
     12.2.  New Registries . . . . . . . . . . . . . . . . . . . . .  28
       12.2.1.  Frame Types  . . . . . . . . . . . . . . . . . . . .  29
       12.2.2.  Settings Parameters  . . . . . . . . . . . . . . . .  29
       12.2.3.  Error Codes  . . . . . . . . . . . . . . . . . . . .  30
       12.2.4.  Stream Types . . . . . . . . . . . . . . . . . . . .  32
   13. References  . . . . . . . . . . . . . . . . . . . . . . . . .  33
     13.1.  Normative References . . . . . . . . . . . . . . . . . .  33
     13.2.  Informative References . . . . . . . . . . . . . . . . .  34
   Appendix A.  Acknowledgments  . . . . . . . . . . . . . . . . . .  37
   Appendix B.  QPACK Static Table . . . . . . . . . . . . . . . . .  37
   Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  41
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  43

1.  Introduction

   The Session Initiation Protocol (SIP) [RFC3261] is widely used for
   managing media sessions over the Internet.  Examples of these media
   sessions include Internet telephony services, video conferencing and
   live streaming of media.

   [SIP2.0] uses whitespace-delimited text fields to convey SIP messages
   in a similar format to HTTP/1.1 [HTTP1.1], and may optionally be
   transported over TLS (so-called "SIPS").  SIP-over-QUIC, as defined
   by this document, uses a binary framing layer carried over QUIC
   streams and is protected by the mandatory TLS encryption afforded by
   the QUIC transport connection.

      *Author's Note:* A future optional extension may introduce the
      ability to carry SIP messages in QUIC Datagrams [QUIC-DATAGRAMS].








Hurst                     Expires 28 April 2023                 [Page 3]

Internet-Draft                SIP-over-QUIC                 October 2022


1.1.  Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

   This document uses the variable-length integer encoding from
   Section 16 of [QUIC-TRANSPORT].

   Packet and frame diagrams in this document use the format described
   in Section 1.3 of [QUIC-TRANSPORT].

1.2.  Definitions

   The following terms are used:

   abort:  An abrupt termination of a connection or stream, possibly due
      to an error condition.

   endpoint:  Either the client or server of the connection.

   connection:  A transport-layer connection between two endpoints using
      QUIC as the transport protocol.

   connection error:  An error that affects the entire SIP-over-QUIC
      connection.

   frame:  The smallest unit of communication on a stream in SIP-over-
      QUIC, consisting of a header and a variable-length sequence of
      bytes structured according to the frame type.

      Protocol elements called "frames" exist in both this document and
      [QUIC-TRANSPORT].  Where frames from [QUIC-TRANSPORT] are
      referenced, the frame name will be prefaced with "QUIC".  For
      example, "QUIC CONNECTION_CLOSE frames".  References without this
      preface refer to frames defined in Section 7.2.

   peer:  An endpoint.  When discussing a particular endpoint, "peer"
      refers to the endpoint that is remote to the primary subject of
      discussion.

   receiver:  An endpoint that is receiving frames.

   sender:  An endpoint that is transmitting frames.

   SIP/2.0:  The SIP/2.0 specification as described in RFC3261 [SIP2.0].



Hurst                     Expires 28 April 2023                 [Page 4]

Internet-Draft                SIP-over-QUIC                 October 2022


   SIP-over-QUIC connection:  A QUIC connection where the negotiated
      application protocol is SIP-over-QUIC.

   stream:  A bidirectional or unidirectional bytestream provided by the
      QUIC transport.  All streams within an SIP-over-QUIC connection
      can be considered "SIP-over-QUIC streams", but multiple stream
      types are defined within SIP-over-QUIC.

   stream error:  An application-level error on the individual stream.

   transport client:  The endpoint that initiates a SIP-over-QUIC
      connection.

   transport server:  The endpoint that accepts a SIP-over-QUIC
      connection.

   The terms "call", "dialog", "header", "header field", "header field
   value", "initiator", "invitee", "message", "method", "proxy server",
   "request", "(SIP) transaction", "user agent client" and "user agent
   server" are defined in Section 6 of [SIP2.0].

2.  SIP-over-QUIC Protocol Overview

   SIP-over-QUIC provides a transport for SIP semantics using the QUIC
   transport protocol and an internal framing layer inspired by [HTTP3].

   Once a user agent client knows that a user agent server supports SIP-
   over-QUIC, it opens a QUIC connection.  QUIC provides protocol
   negotiation, stream-based multiplexing, and flow control services to
   the SIP-over-QUIC transaction layer above.  SIP transactions are
   multiplexed across QUIC streams as described in Section 2 of
   [QUIC-TRANSPORT].  Each request and response message pair in a SIP-
   over-QUIC transaction consumes a single QUIC stream.

   Within each QUIC stream, the basic unit of SIP-over-QUIC
   communication is a frame as described in Section 7.  Each frame type
   serves a different purpose.  The HEADERS and DATA frames form the
   basis of the offer/answer transaction model described in [RFC3264]
   and are described in Section 3.2.

   In [SIP2.0], some header fields may be compressed by using
   abbreviated versions.  In SIP-over-QUIC, all request and response
   header fields are compressed for transmission using [QPACK], in which
   header fields may be mapped to indexed values, or literal values may
   be encoded using a codepoint in a Huffman table.  [QPACK] uses two
   tables for its indexed values: the static table is predefined with
   common SIP header fields and values, and the dynamic table can be
   used to encode frequently used header fields in a SIP-over-QUIC



Hurst                     Expires 28 April 2023                 [Page 5]

Internet-Draft                SIP-over-QUIC                 October 2022


   connection to reduce repetition.  Because [QPACK]'s static table is
   designed to work with [HTTP3], this specification replaces the
   default static table defined in Appendix A of [QPACK] with the one in
   Appendix B.

2.1.  QUIC Transport

   SIP-over-QUIC relies on QUIC version 1 as the underlying transport.
   The use of other QUIC transport versions with SIP-over-QUIC MAY be
   defined by future specifications.

   QUIC connections are established as described in [RFC9000].  During
   connection establishment, SIP-over-QUIC support is indicated by
   selecting the ALPN token "sips/quic" in the TLS handshake.  Support
   for other application-layer protocols MAY be offered in the same
   handshake.

      *Author's Note:* The original intention of this document was to
      define the next major version of SIP, i.e. SIPv3.  Therefore, the
      future ALPN token could be sips/3 or s3 (similarly to h2/h3).

   QUIC version 1 uses TLS version 1.3 or greater as its handshake
   protocol.  SIP-over-QUIC user agents MUST support a mechanism to
   indicate the target host to the server during the TLS handshake.  If
   the target destination user agent server is identified by a domain
   name [RFC8499], clients MUST send the Server Name Indication ([SNI])
   TLS extension unless an alternative mechanism to indicate the target
   host is used.

   SIP-over-QUIC messages are carried in reliable QUIC streams;
   therefore, the SIP-over-QUIC protocol defined by this document is a
   reliable SIP transport.  Thus, client and server transactions using
   SIP-over-QUIC for transport MUST follow the procedures and timer
   values for reliable transports as defined in [SIP2.0].

2.1.1.  Draft Version Identification

      *RFC Editor's Note:* Please remove this section prior to
      publication of a final version of this document.

   Only implementations of the final, published RFC can identify
   themselves as "sips/quic".  Until such an RFC exists, implementations
   MUST NOT identify themselves using this string.  Implementations of
   draft versions of the protocol MUST add the string "-h" and the
   corresponding draft number to the identifier.  For example, draft-
   hurst-sip-quic-00 is identified using the string "sips/quic-h00".





Hurst                     Expires 28 April 2023                 [Page 6]

Internet-Draft                SIP-over-QUIC                 October 2022


   Non-compatible experiments that are based on these draft versions
   MUST append the string "-" and an experiment name to the identifier.
   For example, an experimental implementation based on draft-hurst-sip-
   quic-00 which uses QUIC datagrams instead of QUIC streams to carry
   SIP messages might identify itself as "sips/quic-h00-datagrams".
   Note that any label MUST conform to the "token" syntax defined in
   Section 5.6.2 of [HTTP-SEMANTICS].  Experimenters are encouraged to
   coordinate their experiments.

2.2.  Connection Reuse

   SIP-over-QUIC connections are persistent across multiple request-
   response transactions.  A SIP-over-QUIC connection MAY also be shared
   by multiple concurrent dialogs, with each dialog individually
   identified by the Call-ID header and tag= parameters on the To and
   From headers.

3.  Expressing SIP Semantics Over QUIC Transport

3.1.  QUIC Clients and Servers

   This specification introduces two new terms: "transport client" to
   denote the host that initiates the QUIC transport connection for
   exchanging SIP-over-QUIC messages, and "transport server" as its
   peer.  These terms are orthogonal to SIP's concepts of user agent
   client (UAC) and user agent server (UAS): transport clients and
   servers may take on either role in the SIP-over-QUIC connection.

3.2.  SIP Transaction Framing

   SIP-over-QUIC transactions begin with a request message sent by a UAC
   on a request stream, which is a bidirectional QUIC stream; see
   Section 5.  If the user agent client making the request is accessing
   the transport connection from the transport client endpoint, then the
   request stream is carried on a client-initiated bidirectional QUIC
   stream.  If the user agent client making the request is accessing the
   transport connection from the transport server endpoint, then the
   request stream is carried on a server-initiated bidirectional QUIC
   stream.

   Each SIP-over-QUIC transaction has exclusive use of a request stream.
   Only one request is made per request stream.  The UAS sends zero or
   more provisional responses on the same stream as the request,
   followed by one or more final responses.  See Section 7.2 of [SIP2.0]
   for a description of provisional and final responses.

   On a given request stream, receipt of multiple requests MUST be
   treated as malformed.



Hurst                     Expires 28 April 2023                 [Page 7]

Internet-Draft                SIP-over-QUIC                 October 2022


   A SIP message (request or response) consists of:

   1.  the header section, including message control data, sent in SIP-
       over-QUIC as a single HEADERS frame,

   2.  optionally, the message body, if present, sent in SIP-over-QUIC
       as a series of DATA frames.

   Headers are described in Section 7.3 of [SIP2.0].  Message bodies are
   described in Section 7.4 of [SIP2.0].

   Receipt of an invalid sequence of frames MUST be treated as a
   connection error of type SIP_FRAME_UNEXPECTED.  In particular, a DATA
   frame received before any HEADERS frame is considered invalid.  Other
   frame types, especially unknown frame types, MAY be permitted,
   subject to their own rules, see Section 9.

   The HEADERS frame might reference updates to the QPACK dynamic table.
   While these updates are not directly part of the message exchange,
   they MUST be received and processed before the message can be
   consumed.

   After sending a request, the UAC MUST close the stream for sending
   (see Section 3.4 of [QUIC-TRANSPORT]).  After sending the last final
   response, the UAS MUST close the stream for sending.  At this point,
   the QUIC stream is fully closed.

   When a stream is closed, this indicates the completion of the SIP-
   over-QUIC transaction.  If a stream terminates without enough of the
   request to provide a complete response, the UAS SHOULD abort the
   stream with the error code SIP_REQUEST_INCOMPLETE.

3.2.1.  Request Cancellation and Rejection

   Once a request stream has been opened, the request MAY be cancelled
   by either endpoint for the reasons given in Section 9 of [SIP2.0].
   Cancellations are categorised as either graceful or abrupt.  An
   endpoint MAY abruptly cancel any request by resetting the stream
   using a RESET_STREAM frame and aborting the reception of further data
   on that stream using a STOP_SENDING frame as described in Section 2.4
   of [QUIC-TRANSPORT].

   The UAC SHOULD gracefully cancel requests if the response is no
   longer of interest by using the CANCEL frame.  For example, where a
   UAC is attempting to reach a user at multiple endpoints, and has
   already received a final response from one endpoint that it is
   satisfied with.




Hurst                     Expires 28 April 2023                 [Page 8]

Internet-Draft                SIP-over-QUIC                 October 2022


   UACs MAY use the error code SIP_REQUEST_CANCELLED to abruptly cancel
   requests.  Upon receipt of this error code, a UAS MAY abruptly
   terminate the response using the error code SIP_REQUEST_REJECTED if
   no processing was performed.  A UAC MUST NOT use the
   SIP_REQUEST_REJECTED error code, except when the corresponding UAS
   has requested closure of the request stream with this error code.

   A UAS receiving a CANCEL request (not frame) MUST respond to the
   request immediately with a 405 Method Not Allowed error as described
   in Section 21.4.6 of [SIP2.0].  A user agent server receiving a
   CANCEL frame for a stream that has not been opened MUST be treated as
   a connection error of type SIP_CANCEL_FRAME_CLOSED.

      *Author's Note:* This is because the CSeq header has been removed,
      so the CANCEL request method cannot be used.

   The UAS cancels requests if they are unable or choose not to respond.
   UAS cancellations are always abrupt cancellations.  When a UAS
   abruptly cancels a request without performing any application
   processing, the request is considered "rejected".  In this case, the
   UAS SHOULD abort its response stream with the error code
   SIP_REQUEST_REJECTED.  (In this context, "processed" means that some
   data from the request stream was passed to some higher layer of
   software that might have taken some action as a result.)  The UAC MAY
   treat a request rejected by the UAS as though it had never been sent
   at all, and may retry the request later.

   A UAS MUST NOT use the SIP_REQUEST_REJECTED error code for requests
   that were partially or fully processed.  When a UAS abandons a
   response after partial processing, it SHOULD abort its response
   stream with the error code SIP_REQUEST_CANCELLED.

3.2.2.  Malformed Requests And Responses

   A malformed request or response is one that is a sequence of
   syntactically valid SIP-over-QUIC frames but that is invalid due to:

   *  an invalid sequence of SIP-over-QUIC frames, such as a DATA frame
      preceding a HEADERS frame,

   *  the presence of prohibited header fields or pseudo-header fields
      in a HEADERS frame,

   *  the absence of mandatory pseudo-header fields in a HEADERS frame,

   *  invalid values for pseudo-header fields in a HEADERS frame,

   *  pseudo-header fields after header fields in a HEADERS frame,



Hurst                     Expires 28 April 2023                 [Page 9]

Internet-Draft                SIP-over-QUIC                 October 2022


   *  the inclusion of uppercase header field names in a HEADERS frame,

   *  the inclusion of invalid characters in field names or values in a
      HEADERS frame.

   A request or response that is defined as having content when it
   contains a Content-Length header field (see Section 18.3 of [SIP2.0])
   is malformed if the value of the Content-Length header field does not
   equal the sum of the received DATA frame lengths.

   Intermediaries that process SIP-over-QUIC request or response
   messages (such as a proxy server) MUST NOT forward a malformed
   request or response.  Malformed requests or responses that are
   detected MUST be treated as a stream error of type SIP_MESSAGE_ERROR.

   A UAS MAY respond to a malformed request, indicating the error prior
   to closing or resetting the stream.

   A UAC MUST NOT accept a malformed response.

3.3.  SIP Header Fields

   SIP messages carry metadata as a series of key-value pairs called
   "SIP header fields"; see Section 7.3 of [SIP2.0].  For a listing of
   registered SIP header fields, see the "Session Initiation Protocol
   (SIP) Parameters - Header Fields Registry" maintained at
   https://www.iana.org/assignments/sip-parameters/sip-
   parameters.xhtml#sip-parameters-2 (https://www.iana.org/assignments/
   sip-parameters/sip-parameters.xhtml#sip-parameters-2).

3.3.1.  SIP-over-QUIC Header Compression

   The abbreviated forms of SIP header fields described in Section 7.3.3
   of [SIP2.0] MUST NOT be used with SIP-over-QUIC.  Instead, header
   fields (including the control data present in the header section) are
   compressed an decompressed using the [QPACK] codec.

   A SIP-over-QUIC implementation MAY impose a limit on the maximum size
   of the encoded field section it will accept for an individual SIP
   message using the SETTINGS_MAX_FIELD_SECTION_SIZE parameter.  Unlike
   HTTP, there is no response code in SIP for the size of a header block
   being too large.  If a user agent receives an encoded field section
   larger than it has promised to accept, it MUST treat this as stream
   error of type SIP_HEADER_TOO_LARGE, and discard the response.







Hurst                     Expires 28 April 2023                [Page 10]

Internet-Draft                SIP-over-QUIC                 October 2022


   Section 4.2 of [QPACK] describes the definition of two unidirectional
   stream types for the encoder and decoder streams.  The values of
   these stream types are identical when used with SIP-over-QUIC, see
   Section 5.2.

   The static table defined in Appendix A of [QPACK] is designed for use
   with HTTP and, as such, contains header fields that are of little
   interest to SIP endpoints.  Appendix B in this document defines a
   replacement static table that MUST be used by SIP-over-QUIC transport
   clients and servers.

   To bound the memory requirements of the decoder for the QPACK dynamic
   table, the decoder limits the maximum value the encoder is permitted
   to set for the dynamic table capacity, as specified in Section 3.2.3
   of [QPACK].  The dynamic table capacity is determined by the value of
   the SETTINGS_QPACK_MAX_TABLE_CAPACITY parameter sent by the decoder.
   Use of the dynamic table can be disabled by setting this value to
   zero.  If both endpoints disable use of the dynamic table, then the
   endpoints SHOULD NOT open the encoder and decoder streams.

   When the dynamic table is in use, a QPACK decoder may encounter an
   encoded field section that references a dynamic table entry that it
   has not yet received, because QUIC does not guarantee order between
   data on different streams.  In this case, the stream is considered
   "blocked" as described in Section 2.1.2 of [QPACK].  The HTTP/3
   setting SETTINGS_QPACK_BLOCKED_STREAMS is replicated as a SIP-over-
   QUIC parameter, set by the recipient, determines the maximum number
   of streams that are allowed to be "blocked" by pending dynamic table
   updates.  If a decoder encounters more blocked streams than it
   promised to support, it MUST treat this as a connection error of type
   SIP_HEADER_DECOMPRESSION_FAILED.

   Stream blocking can be avoided by sending Huffman-encoded literals
   instead of updating the QPACK dynamic table.

3.3.2.  SIP Control Data

   SIP-over-QUIC employs a series of pseudo-header fields where the
   field name begins with the : character (ASCII 0x3a).  These pseudo-
   header fields convey message control data, which replaces the
   Request-Line described in Section 7.1 of [SIP2.0].

   Pseudo-header fields are not SIP header fields.  Endpoints MUST NOT
   generate pseudo-header fields other than those defined in this
   document.  However, an extension could negotiate a modification of
   this restriction; see Section 9.





Hurst                     Expires 28 April 2023                [Page 11]

Internet-Draft                SIP-over-QUIC                 October 2022


   Pseudo-header fields are only valid in the context in which they are
   defined.  Pseudo-header fields defined for requests MUST NOT appear
   in responses; pseudo-header fields defined for responses MUST NOT
   appear in requests.  Pseudo-header fields MUST NOT appear in trailer
   sections.  Endpoints MUST treat a request or response that contains
   undefined or invalid pseudo-header fields as malformed.

   All pseudo-header fields MUST appear in the header section before
   regular header fields.  Any request or response that contains a
   pseudo-header field that appears in a header section after a regular
   header field MUST be treated as malformed.

3.3.2.1.  Request Pseudo-header fields

   The following pseudo-header fields are defined for requests:

   *  ":method": Contains the SIP method.  See Section 6 to understand
      SIP-over-QUIC-specific usages of SIP methods.

   *  ":request-uri": Contains the SIPS URI as described in Section 19.1
      of [SIP2.0].

   All SIP-over-QUIC requests MUST include exactly one value for the
   :method and :request-uri pseudo-header fields.  The SIP-Version
   element of the Request-Line structure in Section 7.1 of [SIP2.0] is
   omitted, and all SIP-over-QUIC requests implicitly have a protocol
   version of "2.0".

   A SIP request that omits any mandatory pseudo-header fields or
   contains invalid values for those pseudo-header fields is malformed.

3.3.2.2.  Response Pseudo-header fields

   For responses, a single ":status" pseudo-header field is defined that
   carries the SIP status code, see Section 7.2 of [SIP2.0].

   All SIP-over-QUIC responses MUST include exactly one value for the
   ":status" pseudo-header field.  The SIP-Version and Reason-Phrase
   elements of the Status-Line structure in Section 7.2 of [SIP2.0] are
   omitted, and all SIP-over-QUIC responses implicitly have a protocol
   version of "2.0".  If it is required, for example to provide a human
   readable string of a received status code, the Reason-Phrase can be
   inferred from the list of reason phrases accompanying the status
   codes listed in Section 21 of [SIP2.0].







Hurst                     Expires 28 April 2023                [Page 12]

Internet-Draft                SIP-over-QUIC                 October 2022


3.3.3.  Via Transport Parameter

   The Via header field in SIP messages carry a transport protocol
   identifier.  This document defines the value "QUIC" to be used for
   SIP-over-QUIC requests over QUIC transport.

   The updated ABNF (Augmented Backus-Naur Form) [RFC5234] for this
   parameter is the following:

   transport  =/  "QUIC"

   A full example Via: header is as follows:

   Via: SIP/2.0/QUIC wxp6O3dffes2.example.com;branch=z9hG4bKXG1gNkhgOiNR

3.3.4.  SIP URI Transport Parameter

   This document defines the value "quic" as the transport parameter
   value for a SIP-over-QUIC URI [RFC3986] where the transport mechanism
   used for sending SIP messages will be QUIC transport, extending the
   parameter names defined in Section 19.1.1 of [SIP2.0].

   The updated ABNF for this parameter is the following:

   transport-param  =/  "transport=" "quic"

3.3.5.  Transaction Sequence Number

   SIP-over-QUIC endpoints MUST NOT use the CSeq header field (see
   Section 20.16 of [SIP2.0]).  The correct order of SIP-over-QUIC
   transactions is instead inferred from the QUIC stream identifier as
   described in Section 5.  Intermediaries that forward SIP-over-QUIC
   messages to SIP sessions running over other transports are
   responsible for defining the value carried in the CSeq header field
   for those messages, and for mapping those values back to the correct
   SIP-over-QUIC request stream in the opposite direction.

3.4.  Connection Keep-Alive

   SIP-over-QUIC endpoints may keep their QUIC connection active and
   open by sending periodic PING frames to defer the QUIC idle timeout
   as described in Section 10.1.2 of [QUIC-TRANSPORT].

4.  Compatibility With Earlier SIP Versions







Hurst                     Expires 28 April 2023                [Page 13]

Internet-Draft                SIP-over-QUIC                 October 2022


  +-----------+          +-------+         +-------+         +---------+
  |           |          |       |         |       |         |         |
  |           <=SIP-QUIC=> Proxy <-SIP/2.0-> Proxy <-SIP/2.0->         |
  |           |          |   A   |(TCP/UDP)|   B   |(TCP/UDP)|         |
  | Initiator |          +-------+         +-------+         | Invitee |
  |   (UAC)   |                                              |  (UAS)  |
  |           <==================SIP-QUIC====================>         |
  |           |                                              |         |
  +-----------+                                              +---------+

              Figure 1: Example showing mixed SIP transports

   In the above example, the Initiator, Invitee and the proxy server
   identified as "Proxy A" all support SIP-over-QUIC, but the proxy
   server identified as "Proxy B" only supports SIP/2.0 over TCP/TLS and
   UDP.  When Proxy A attempts to connect to Proxy B, it may have
   previous knowledge of the lack of support for SIP-over-QUIC on Proxy
   B, or either of the DNS SRV record [RFC2782] or DNS service binding
   record [DNS-SVCB] may have indicated that the server only supports
   SIPS services over TCP, thereby implying SIP/2.0.

   If Proxy B only supports unencrypted SIP over UDP, then Proxy A MUST
   NOT forward messages from the secure SIP-over-QUIC over an
   unencrypted protocol because this could constitute a downgrade
   attack.  Instead, if the designated Invitee cannot be contacted by
   means other than via Proxy B, then Proxy A MUST return a response of
   502 Bad Gateway to the initiator for that transaction.

   When initiating direct communication with an invitee after the
   conclusion of the initial INVITE transaction, SIP-over-QUIC SHOULD be
   used if:

   *  The DNS SRV record for the SIPS URI indicates that the invitee
      supports SIPS over UDP, or

   *  The DNS service binding record for the SIPS URI indicates the
      sips/quic ALPN token as described in Section 2.1, or

   *  The Contact: header field indicates a SIPS URI carrying the "quic"
      transport parameter as described in Section 3.3.4.











Hurst                     Expires 28 April 2023                [Page 14]

Internet-Draft                SIP-over-QUIC                 October 2022


4.1.  Transactions

   In [SIP2.0], messages pertaining to a given SIP transaction are
   identified as such using the branch parameter on the Via: header
   fields carried in requests and responses.  In SIP-over-QUIC,
   individual transactions are tracked using the QUIC streams that are
   used to carry them.  SIP-over-QUIC endpoints MAY omit this parameter.
   For intermediaries converting between SIP-over-QUIC and SIP sessions
   running over other transport protocols, these endpoints SHOULD insert
   missing branch parameters.  To avoid leaking details of the QUIC
   transport connection, these converted branch parameters MUST NOT be
   textual representations of the stream IDs used to carry a given
   transactions, or any other representation that could be used to infer
   stream IDs that have been used in a given QUIC transport connection.

4.2.  Dialogs

   In [SIP2.0], dialogs are tracked by use of the Call-ID: header field
   and the tag= parameter on the To: and From: header fields.  The
   current document does not introduce any additional means for tracking
   dialogs, and as such the Call-ID: and tag= values MUST continue to be
   used in SIP-over-QUIC.

5.  Stream Mapping and Usage

   A QUIC stream provides reliable and in-order delivery of bytes on
   that stream, but makes no guarantees about order of delivery with
   regard to bytes on other streams.  The semantics of the QUIC stream
   layer is opaque to the SIP framing layer.  The transport layer
   buffers and orders received stream data, exposing a reliable byte
   stream to the application.  Although QUIC permits out-of-order
   delivery within a stream, SIP-over-QUIC does not make use of this
   feature.

   QUIC streams can be either unidirectional, carrying data only from
   initiator to receiver, or bidirectional, carrying data in both
   directions.  In the context of this specification, bidirectional
   streams are used to convey SIP-over-QUIC request and response
   messages; unidirectional streams are used only for controlling the
   SIP-over-QUIC session itself.  A bidirectional stream ensures that
   the response can be readily correlated with the request.  These
   streams are referred to as request streams.

   [SIP2.0] is designed to run over unreliable transports such as UDP.
   Since QUIC guarantees reliability, some of the features of SIP/2.0
   are not required.  User agents MUST NOT send the CSeq header field in
   requests or responses because the messages are already associated
   with a QUIC stream.  Intermediaries that convert SIP-over-QUIC to



Hurst                     Expires 28 April 2023                [Page 15]

Internet-Draft                SIP-over-QUIC                 October 2022


   other transport protocols when forwarding messages are responsible
   for handing the mapping of the CSeq header field to individual
   transactions.

      *Author's note:* The author invites feedback as to whether the
      MUST NOT in relation to the CSeq header could be relaxed to a
      SHOULD NOT, or whether there is a valid use case that I have not
      identified that means this restriction should be relaxed even
      further.

   If the [QPACK] dynamic table is used, then the unidirectional encoder
   and decoder streams described in Section 4.2 of [QPACK] will be in
   operation in a SIP-over-QUIC connection.

5.1.  Bidirectional Streams

   Bidirectional QUIC streams are used for SIP requests and responses.
   These streams are referred to as request streams.

5.2.  Unidirectional Streams

   SIP-over-QUIC makes use of unidirectional QUIC streams.  The purpose
   of a given unidirectional stream is indicated by a stream type, which
   is sent as a variable-length integer at the start of the stream.  The
   format and structure of data that follows this integer is determined
   by the stream type.

   Unidirectional Stream Header {
     Stream Type (i),
   }

                   Figure 2: Unidirectional Stream Header

   One stream type is defined in this document: the control stream.  In
   addition, the HTTP/3 stream types defined by Section 4.2 of [QPACK]
   are mapped to the same values in SIP-over-QUIC (0x2 for the encoder
   stream and 0x3 for the decoder stream).

   In addition, the stream type value of 0x4 is reserved by this
   document for future use as the media stream.











Hurst                     Expires 28 April 2023                [Page 16]

Internet-Draft                SIP-over-QUIC                 October 2022


   Each SIP-over-QUIC user agent MUST create at least one unidirectional
   stream for the SIP-over-QUIC control stream.  If the QPACK dynamic
   table is used, then each endpoint will open two additional
   unidirectional streams each.  Other extensions might require further
   unidirectional streams.  Therefore, the transport parameters sent by
   both endpoints MUST allow the peer to create at least three
   unidirectional streams.  These transport parameters SHOULD also
   provide at least 1,024 bytes of flow-control credit to each
   unidirectional stream.

   If the stream header indicates a stream type that is not supported by
   the recipient, the receiver MUST abort reading the stream, discard
   incoming data without further processing, and reset the stream with
   the SIP_STREAM_CREATION_ERROR error code.  The recipient MUST NOT
   consider unknown stream types to be a connection error of any kind.

   Since certain stream types can affect connection state, a recipient
   user agent SHOULD NOT discard data from incoming unidirectional
   streams prior to reading the stream type.

   Implementations SHOULD wait for the reception of a SETTINGS frame
   describing what stream types their peer user agent supports before
   sending streams of that type.  Implementations MAY send stream types
   that do not modify the state or semantics of existing protocol
   components before it is known whether the peer user agent supports
   them, but MUST NOT send stream types that do (such as QPACK).

   A sender can close or reset a unidirectional stream unless otherwise
   specified.  A receiver MUST tolerate unidirectional streams being
   closed or reset prior to the reception of the unidirectional stream
   header.

5.2.1.  Control Streams

   A control stream is indicated by a stream type of 0x00.  Data on this
   stream consists of SIP-over-QUIC frames, as defined in Section 7.

   Each SIP-over-QUIC user agent MUST initiate a single control stream
   at the beginning of the connection and send its SETTINGS frame as the
   first frame on this stream.  If the first frame of the control stream
   is any other frame type, this MUST be treated as a connection error
   of type SIP_MISSING_SETTINGS.  Only one control stream is permitted
   per user agent; receipt of a second stream claiming to be a control
   stream MUST be treated as a connection error of type
   SIP_STREAM_CREATION_ERROR.






Hurst                     Expires 28 April 2023                [Page 17]

Internet-Draft                SIP-over-QUIC                 October 2022


   The control stream MUST NOT be closed by the sender, and the receiver
   MUST NOT request that the sender close the control stream.  If either
   control stream is closed at any point, this MUST be treated as a
   connection error of type SIP_CLOSED_CRITICAL_STREAM.

   Connection errors are described in Section 8.

   Because the contents of the control stream are used to manage the
   behaviour of other streams, user agents SHOULD provide enough flow-
   control credit to keep the peer's control stream from becoming
   blocked.

6.  SIP Methods

   The REGISTER, INVITE, ACK and BYE methods as described in [SIP2.0]
   continue to operate in SIP-over-QUIC as they do in SIP running over
   other transport protocols.

   The CANCEL method MUST NOT be used in SIP-over-QUIC.  If a SIP-over-
   QUIC request needs to be cancelled, the CANCEL frame SHOULD be used
   instead, or the stream for that request reset using the QUIC
   RESET_STREAM frame (Section 19.4 of [QUIC-TRANSPORT]).  Note that
   SIP-over-QUIC messages in flight at the time may still arrive on a
   stream before the cancellation is received and processed by the peer.

      *Author's note:* I have not done a comprehensive review of all
      SIP/2.0 extensions and their applicability to this document, so I
      invite feedback on any other methods that may be problematic.

7.  SIP Framing Layer

   SIP-over-QUIC frames are carried on QUIC streams, as described in
   Section 5.  SIP-over-QUIC defines a single stream type: the Request
   Stream.  This section describes SIP-over-QUIC frame formats; see
   Table 1 for an overview.
















Hurst                     Expires 28 April 2023                [Page 18]

Internet-Draft                SIP-over-QUIC                 October 2022


      +==========+================+================+===============+
      | Frame    | Request Stream | Control Stream | Section       |
      +==========+================+================+===============+
      | DATA     | Yes            | No             | Section 7.2.1 |
      +----------+----------------+----------------+---------------+
      | HEADERS  | Yes            | No             | Section 7.2.2 |
      +----------+----------------+----------------+---------------+
      | CANCEL   | No             | Yes            | Section 7.2.3 |
      +----------+----------------+----------------+---------------+
      | SETTINGS | No             | Yes            | Section 7.2.4 |
      +----------+----------------+----------------+---------------+

                                 Table 1

   Note that, unlike QUIC frames, SIP-over-QUIC frames can span multiple
   QUIC or UDP packets.

7.1.  Frame Layout

   All frames have the following format:

   SIP-over-QUIC Frame Format {
     Type (i),
     Length (i),
     Frame Payload (...)
   }

                    Figure 3: SIP-over-QUIC Frame Format

   A frame includes the following fields:

   *  Type: A variable-length integer that identifies the frame type.

   *  Length: A variable-length integer that describes the length in
      bytes of the Frame Payload.

   *  Frame Payload: A payload, the semantics of which are determined by
      the Type field.

   Each frame's payload MUST contain exactly the fields identified in
   its description.  A frame payload that contains additional bytes
   after the identified fields of a frame payload that terminates before
   the end of the identified fields MUST be treated as a connection
   error of type SIP_FRAME_ERROR.







Hurst                     Expires 28 April 2023                [Page 19]

Internet-Draft                SIP-over-QUIC                 October 2022


   When a stream terminates cleanly, if the last frame on the stream was
   truncated, this MUST be treated as a connection error of type
   SIP_FRAME_ERROR.  Streams that terminate abruptly may be reset at any
   point in a frame.

7.2.  Frame Definitions

7.2.1.  DATA

   DATA frames (type=0x00) are only sent on Request Streams.  The frame
   payload carried in the Data field conveys an arbitrary, variable-
   length sequences of bytes associated with a SIP-over-QUIC request or
   response message.

   DATA frames MUST be associated with a SIP request or response.

   DATA Frame {
     Type (i) = 0x00,
     Length (i),
     Data (..)
   }

                            Figure 4: DATA Frame

7.2.2.  HEADERS

   HEADERS frames (type=0x01) are only sent on Request Streams.  They
   are used to carry the collection of SIP header fields associated with
   a SIP request or response message, as described in Section 3.3.  The
   payload, carried in Encoded Field Section, is encoded using [QPACK].

   HEADERS Frame {
     Type (i) = 0x01,
     Length (i),
     Encoded Field Section (..)
   }

                          Figure 5: HEADERS Frame

7.2.3.  CANCEL

   The CANCEL frame (type=0x02) is only sent on a Control Stream and
   informs the receiver that its peer user agent does not intend to do
   any further processing on the message carried by the associated
   bidirectional stream ID.  If the receiver has already completed the
   processing for the message, sent the response and closed the sending
   end of the stream, it MUST disregard this frame.




Hurst                     Expires 28 April 2023                [Page 20]

Internet-Draft                SIP-over-QUIC                 October 2022


      *Author's Note:* Remove the length from this frame type as the
      stream ID field is self-describing.

   CANCEL Frame {
     Type (i) = 0x02,
     Length (i),
     Stream ID (i)
   }

                           Figure 6: CANCEL Frame

   Senders MUST NOT send this frame with a stream ID that has not been
   acknowledged by its peer.  A user agent that receives a CANCEL frame
   with a stream ID that has not yet been opened MUST respond with a
   connection error of type SIP_CANCEL_STREAM_CLOSED error.

7.2.4.  SETTINGS

   The SETTINGS frame (type=0x04) is only sent on a Control Stream.  It
   conveys configuration parameters that affect how SIP-over-QUIC user
   agents communicate, such as preferences and constraints on peer
   behaviour.  The parameters always apply to an entire SIP-over-QUIC
   connection, never to a single transaction.  A SETTINGS frame MUST be
   sent as the first frame of each Control Stream by each peer user
   agent, and it MUST NOT be sent subsequently.  If a SIP-over-QUIC user
   agent receives a second SETTINGS frame on the control stream, or any
   other stream, the user agent MUST respond with a connection error of
   type SIP_FRAME_UNEXPECTED.

   SETTINGS parameters are not negotiated; they describe characteristics
   of the sending user agent that can be used by the receiving user
   agent.  However, a negotiation can be implied by the use of SETTINGS:
   each user agent uses SETTINGS to advertise a set of supported values.
   Each user agent combines the two sets to conclude which choice will
   be used.  SETTINGS does not provide a mechanism to identify when the
   choice takes effect.

   Different values for the same parameter can be advertised by the two
   user agents.

   The same parameter MUST NOT occur more than once in the SETTINGS
   frame.  A receiver MAY treat the presence of duplicate setting
   identifiers as a connection error of type SIP_SETTINGS_ERROR.

   The payload of a SETTINGS frame consists of zero or more parameters.
   Each parameter consists of a parameter identifier and a value, both
   encoded as QUIC variable-length integers.




Hurst                     Expires 28 April 2023                [Page 21]

Internet-Draft                SIP-over-QUIC                 October 2022


   Parameter {
     Identifier (i),
     Value (i)
   }

   SETTINGS Frame {
     Type (i) = 0x04,
     Length (i),
     Parameter (..) ...
   }

                          Figure 7: SETTINGS Frame

   An implementation MUST ignore any parameter with an identifier it
   does not understand.

7.2.4.1.  Defined SETTINGS Parameters

   The following parameters are defined in SIP-over-QUIC:

   SETTINGS_QPACK_MAX_TABLE_CAPACITY (0x01):  The default value is zero.
      See Section 3.3 for usage.

   SETTINGS_MAX_FIELD_SECTION_SIZE (0x06):  The default value is
      unlimited.  See Section 3.3 for usage.

   SETTINGS_QPACK_BLOCKED_STREAMS (0x07):  The default value is zero.
      See Section 3.3 for usage.

8.  Error Handling

   When a request cannot be completed successfully, or if there is an
   issue with the underlying QUIC stream, QUIC allows the application
   protocol to abruptly reset that stream and communicate a reason (see
   Section 2.4 of [QUIC-TRANSPORT].  This is referred to as a "stream
   error".  A SIP-over-QUIC implementation can decide to close a QUIC
   stream and communicate the type of error.  The wire encoding of error
   codes is defined in Section 8.1.  Stream errors are distinct from SIP
   status codes that indicate error conditions.  Stream errors indicate
   that the sender did not transfer or consume the full request or
   response message, while SIP status codes indicate the result of a
   request that was successfully received and processed by the
   recipient.








Hurst                     Expires 28 April 2023                [Page 22]

Internet-Draft                SIP-over-QUIC                 October 2022


   If an entire connection needs to be terminated, QUIC similarly
   provides mechanisms to communicate a reason (see Section 5.3 of
   [QUIC-TRANSPORT]).  This is referred to as a "connection error".
   Similar to stream errors, a SIP-over-QUIC implementation can
   terminate a QUIC connection and communicate the reason using an error
   code from Section 8.1.

   Although called a "stream error", this does not necessarily indicate
   a problem with either the implementation or the connection as a
   whole.  Streams MAY also be reset if the result of a SIP response is
   no longer of interest to the user agent client, see Section 3.2.1.

   Section 9 specifies that extensions may define new error codes
   without negotiation.  Use of an unknown error code or a known error
   code in an unexpected context MUST be treated as equivalent to
   SIP_NO_ERROR.

8.1.  SIP-over-QUIC Error Codes

   The following error codes are defined for use when abruptly
   terminating streams, aborting reading of streams, or immediately
   closing SIP-over-QUIC connections.

   SIP_NO_ERROR (0x0300):  No error.  This is used when the connection
      or stream needs to be closed, but there is no error to signal.

   SIP_GENERAL_PROTOCOL_ERROR (0x0301):  Peer violated protocol
      requirements in a way that does not match a more specific error
      code or endpoint declines to use a more specific error code.

   SIP_INTERNAL_ERROR (0x0302):  An internal error has occurred in the
      SIP-over-QUIC stack.

   SIP_STREAM_CREATION_ERROR (0x0303):  The endpoint detected that its
      peer created a stream that it will not accept.

   SIP_CLOSED_CRITICAL_STREAM (0x0304):  A stream required by the SIP-
      over-QUIC connection was closed or reset.

   SIP_FRAME_ERROR (0x0305):  A frame that fails to satisfy layout
      requirements or with an invalid size was received.

   SIP_FRAME_UNEXPECTED (0x0306):  A frame was received that was not
      permitted in the current state or on the current stream.

   SIP_CANCEL_FRAME_CLOSED (0x0307):  A CANCEL frame was received that
      referenced an unknown stream ID.




Hurst                     Expires 28 April 2023                [Page 23]

Internet-Draft                SIP-over-QUIC                 October 2022


   SIP_SETTINGS_ERROR (0x0309):  An endpoint detected an error in the
      payload of a SETTINGS frame.

   SIP_MISSING_SETTINGS (0x030a):  No SETTINGS frame was received at the
      beginning of the control stream.

   SIP_REQUEST_INCOMPLETE (0x030d):  An endpoint's stream terminated
      without containing a fully formed request.

   SIP_REQUEST_REJECTED (0x030b):  A server rejected a request without
      performing any application processing.

   SIP_REQUEST_CANCELLED (0x030c):  The request or its response is
      cancelled.

   SIP_MESSAGE_ERROR (0x030e):  A SIP message was malformed and cannot
      be processed.

   SIP_HEADER_COMPRESSION_FAILED (0x0310):  The QPACK decoder failed to
      interpret an encoded field section and is not able to continue
      decoding that field. section

   SIP_HEADER_TOO_LARGE (0x0311):  The received encoded field section
      was larger than the receiver has previously promised to accept.
      See Section 3.3.

9.  Extensions to SIP-over-QUIC

   SIP-over-QUIC permits extension of the protocol.  Within the
   limitations described in this section, protocol extensions can be
   used to provide additional services or alter any aspect of the
   protocol.  Extensions are effective only within the scope of a single
   SIP-over-QUIC connection.

   This applies only to the protocol elements defined in this document.
   This does not affect the existing options for extending SIP, such as
   defining new methods, status codes or header fields.

   Extensions are permitted to use new frame types (Section 7.2), new
   settings (Section 7.2.4.1), new error codes (Section 8.1), or new
   stream types (Section 5).

      *RFC Editor's Note:* Establish registries for frame types,
      settings, error codes and stream types.

   Implementations MUST ignore unknown or unsupported values in all
   extensible protocol elements.  This means that any of these extension
   points can be safely used by extensions without prior arrangement or



Hurst                     Expires 28 April 2023                [Page 24]

Internet-Draft                SIP-over-QUIC                 October 2022


   negotiation.  However, where a known frame type is required to be in
   a specific location, such as the SETTINGS frame (see Section 5.2.1),
   an unknown frame type does not satisfy that requirement and SHOULD be
   treated as an error.

   Extensions that could change the semantics of existing protocol
   components MUST be negotiated before being used.  For example, an
   extension that allows the multiplexing of other protocols such as
   media transport protocols over bidirectional QUIC streams MUST NOT be
   used until the peer user agent has given a positive signal that this
   is acceptable.

   This document does not mandate a specific method for negotiating the
   use of any extension, but it notes that a parameter (Section 7.2.4.1)
   could be used for that purpose.  If both peer user agents set a value
   that indicates willingness to use the extension, then the extension
   can be used.  If a parameter is used in this way, the default value
   MUST be defined in such a way that the extension is disabled if the
   setting is omitted.

10.  Future Carriage of Media Sessions

      *Author's Note:* This section is intended to foster discussion
      around how the QUIC transport connection established and used by
      SIP-over-QUIC could be also used for carriage of media.

      *RFC Editor's Note:* Please remove this section prior to
      publication of a final version of this document.

   Future versions of this specification may include support for
   carrying media sessions within the same QUIC transport connection as
   SIP-over-QUIC, with the intention being that they will be negotiated
   using the SDP offer/answer mechanism.

   There already exists several attempts to define carriage of media
   over QUIC transport, such as [QRT], [RTP-over-QUIC], [QuicR-Arch],
   [RUSH] and [Warp].

   In the case of media carried in QUIC datagrams, a user agent cannot
   propose sending media using this mechanism unless its peer has
   indicated its support for receiving datagrams by means of the
   max_datagram_frame_size parameter as described in Section 3 of
   [QUIC-DATAGRAMS].

   In the case of media carried in QUIC streams, if the media streams
   are transmitted using unidirectional streams, then new stream types
   will need to be defined.  This document reserves the stream type
   value 0x04 for this, see Section 5.2.  In the unlikely case where



Hurst                     Expires 28 April 2023                [Page 25]

Internet-Draft                SIP-over-QUIC                 October 2022


   media streams are to be transmitted using bidirectional streams, the
   stream type mechanism will need to be extended to cover bidirectional
   streams, because this specification currently assumes that SIP-over-
   QUIC messages have exclusive use of the bidirectional streams.

10.1.  Carriage Of RTP In A QUIC Transport Session

   Both [QRT] and [RTP-over-QUIC] define ways to carry RTP and RTCP
   messages over QUIC DATAGRAM frames.  With SIP and SDP already closely
   aligned with RTP media sessions, adapting SIP-over-QUIC to coexist
   within the same QUIC transport connection as RTP/RTCP would save at
   least one network round trip.

   *  QRT only defines a way to carry RTP and RTCP in QUIC DATAGRAM
      frames.

   *  RTP-over-QUIC defines a way to carry RTP and RTCP over
      unidirectional QUIC STREAM frames as well as QUIC DATAGRAM frames.

   In addition, QRT attempts to define SDP attributes to allow the
   negotiation of QRT sessions in SIP.  [SDP-QUIC] also describes a
   different set of SDP attributes to perform a similar task.

   Future versions of this document or the above documents may specify a
   mechanism for signalling that a given media session will be carried
   in the same QUIC connection as the SIP-over-QUIC session.

10.2.  Carriage Of Non-RTP Media Streaming Protocols In A QUIC Transport
       Session

   [RUSH] does not specify a means to discover the presence of a RUSH
   streaming session, nor a mechanism for negotiating the encoding
   parameters of media that is being exchanged.  RUSH has two modes of
   operation: Normal and Multi Stream modes.  Normal mode, as described
   in Section 4.3.1 of [RUSH], uses a single bidirectional QUIC stream
   to send and receive media streams.  Multi Stream mode, as described
   in Section 4.3.2 of [RUSH], uses a bidirectional QUIC stream for each
   individual media frame.  Bidirectional streams appear to be used in
   order to give error feedback, as opposed to having a separate control
   stream for handling errors or using the QUIC transport error
   mechanism.  If the stream type mechanism described in Section 5.2 is
   expanded to cover bidirectional streams as well, then SIP-over-QUIC
   could be used with RUSH.

   [Warp] specifies that sessions are established using HTTP/3
   WebTransport ([WebTransH3]).  However, to the author's best knowledge
   WebTransport does not yet contain any signalling or media negotiation
   similar to how WebRTC would use SDP offer/answer exchanges, so some



Hurst                     Expires 28 April 2023                [Page 26]

Internet-Draft                SIP-over-QUIC                 October 2022


   form of session establishment mechanism like SIP-over-QUIC could be
   useful in filling this gap.  Warp uses QUIC unidirectional streams
   for sending media.  Similar to MPEG-DASH, media is sent in ISO-BMFF
   "segments", with each stream carrying a single segment.  This can
   easily be accommodated by the media stream type reserved in
   Section 5.2.

   [QuicR-Arch] describes SDP as overly complicated, and [QuicR-Proto]
   defines the QuicR Manifest for advertising media sessions and
   endpoint capabilities and, as such, SIP-over-QUIC probably isn't
   required.  However, it is possible that trying to design this
   manifest mechanism from scratch is likely to require extra time and
   effort to develop, while SDP is a perfectly usable solution.

11.  Security Considerations

   The security considerations of SIP-over-QUIC should be comparable to
   those of [SIP2.0] and [HTTP3].

   SIP-over-QUIC relies on QUIC, which itself relies on TLS 1.3 and thus
   supports by default the protections against downgrade attacks
   described in [BCP195].  QUIC-specific issues and their mitigations
   are described in Section 21 of [QUIC-TRANSPORT].

   Section 4.1 gives specific guidance on the conversion of transactions
   between SIP-over-QUIC and carriage of SIP over other transport
   protocols which make use of the branch parameter, in order to avoid
   leaking details of the underlying QUIC transport connection.

12.  IANA Considerations

      *Author's Note*: This section of the document reflects future IANA
      registrations, and not current ones.  The intention is for these
      registrations to occur once this Internet-Draft becomes an RFC.

   This document registers a new ALPN protocol IDs (Section 12.1) and
   creates new registries that manage the assignment of code points in
   SIP-over-QUIC (Section 12.2).

12.1.  Registration Of SIP Identification Strings

   This document creates a new registration of SIP-over-QUIC in the "TLS
   Application-Layer Protocol Negotiation (ALPN) Protocol IDs" registry
   established in [RFC7301].

   The "sips/quic" string identifies SIP-over-QUIC:

   Protocol:  SIP-over-QUIC



Hurst                     Expires 28 April 2023                [Page 27]

Internet-Draft                SIP-over-QUIC                 October 2022


   Identification Sequence:  0x73 0x69 0x70 0x73 0x2F 0x71 0x75 0x69
      0x63 ("sips/quic")

   Specification:  This document

   This document creates a new registration of SIP/2.0 over TLS in the
   "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs"
   registry established in [RFC7301].

   The "sips/2.0" string identifies SIP/2.0 over TLS:

   Protocol:  SIP/2.0 over TLS

   Identification Sequence:  0x73 0x69 0x70 0x73 0x2F 0x32 0x2E 0x30
      ("sips/2.0")

   Specification:  [SIP2.0]

   This document creates a new registration of SIP/2.0 over UDP in the
   "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs"
   registry established in [RFC7301].

   The "sip/2.0" string identifies SIP/2.0 over UDP:

   Protocol:  SIP/2.0 over UDP

   Identification Sequence:  0x73 0x69 0x70 0x2F 0x32 0x2E 0x30
      ("sip/2.0")

   Specification:  [SIP2.0]

12.2.  New Registries

   New registries created in this document operate under the QUIC
   registration policy documented in Section 22.1 of [QUIC-TRANSPORT].
   These registries all include the common set of fields listed in
   Section 22.1.1 of [QUIC-TRANSPORT].  These registries are collected
   under the "Session Initiation Protocol over QUIC Transport (SIP-over-
   QUIC)" heading.

   The initial allocations in these registries are all assigned
   permanent status and list a change controller of the IETF and a
   contact of the _[TBC]_ working group.








Hurst                     Expires 28 April 2023                [Page 28]

Internet-Draft                SIP-over-QUIC                 October 2022


12.2.1.  Frame Types

   This document establishes a registry for SIP-over-QUIC frame type
   codes.  The "SIP-over-QUIC Frame Types" registry governs a 62-bit
   space.  This registry follows the QUIC registry policy; see
   Section 12.2.  Permanent registrations in this registry are assigned
   using the Specification Required policy [RFC8126]), except for values
   between 0x00 and 0x3f (in hexadecimal; inclusive), which are assigned
   using Standards Action or IESG Approval as defined in Sections 4.9
   and 4.10 of [RFC8126].

   In addition to common fields as described in Section 12.2, permanent
   registrations in this registry MUST include the following fields:

   Frame type:  A name or label for the frame type.

   Specifications of frame types MUST include a description of the frame
   layout and its semantics, including any parts of the frame that are
   conditionally present.

   The entries in Table 2 are registered by this document.

                  +============+=======+===============+
                  | Frame Type | Value | Specification |
                  +============+=======+===============+
                  | DATA       | 0x00  | Section 7.2.1 |
                  +------------+-------+---------------+
                  | HEADERS    | 0x01  | Section 7.2.2 |
                  +------------+-------+---------------+
                  | CANCEL     | 0x02  | Section 7.2.3 |
                  +------------+-------+---------------+
                  | SETTINGS   | 0x04  | Section 7.2.4 |
                  +------------+-------+---------------+

                      Table 2: Initial SIP-over-QUIC
                               Frame Types

12.2.2.  Settings Parameters

   This document establishes a registry for SIP-over-QUIC parameters.
   The "SIP-over-QUIC Parameters" registry governs a 62-bit space.  This
   registry follows the QUIC registry policy; see Section 12.2.
   Permanent registrations in this registry are assigned using the
   Specification Required policy [RFC8126]), except for values between
   0x00 and 0x3f (in hexadecimal; inclusive), which are assigned using
   Standards Action or IESG Approval as defined in Sections 4.9 and 4.10
   of [RFC8126].




Hurst                     Expires 28 April 2023                [Page 29]

Internet-Draft                SIP-over-QUIC                 October 2022


   In addition to common fields as described in Section 12.2, permanent
   registrations in this registry MUST include the following fields:

   Parameter Name:  A symbolic name for the parameter.  Specifying a
      parameter name is optional.

   Default:  The value of the parameter unless otherwise indicated.  A
      default SHOULD be the most restrictive possible value.

   The entries in Table 3 are registered by this document.

   +===================================+=====+===============+=========+
   | Parameter Name                    |Value| Specification |Default  |
   +===================================+=====+===============+=========+
   | SETTINGS_QPACK_MAX_TABLE_CAPACITY |0x01 | Section       |0        |
   |                                   |     | 7.2.4.1       |         |
   +-----------------------------------+-----+---------------+---------+
   | SETTINGS_MAX_FIELD_SECTION_SIZE   |0x06 | Section       |Unlimited|
   |                                   |     | 7.2.4.1       |         |
   +-----------------------------------+-----+---------------+---------+
   | SETTINGS_QPACK_BLOCKED_STREAMS    |0x07 | Section       |0        |
   |                                   |     | 7.2.4.1       |         |
   +-----------------------------------+-----+---------------+---------+

                 Table 3: Initial SIP-over-QUIC Parameters

12.2.3.  Error Codes

   This document establishes a registry for SIP-over-QUIC error codes.
   The "SIP-over-QUIC Error Codes" registry governs a 62-bit space.
   This registry follows the QUIC registry policy; see Section 12.2.
   Permanent registrations in this registry are assigned using the
   Specification Required policy [RFC8126]), except for values between
   0x0300 and 0x033f (in hexadecimal; inclusive), which are assigned
   using Standards Action or IESG Approval as defined in Sections 4.9
   and 4.10 of [RFC8126].

   In addition to common fields as described in Section 12.2, permanent
   registrations in this registry MUST include the following fields:

   Name:  A name for the error code.

   Description:  A brief description of the error code semantics.

   The entries in Table 4 are registered by this document.  These error
   codes were selected from the range that operates on a Specification
   Required policy to avoid collisions with HTTP/2 and HTTP/3 error
   codes.



Hurst                     Expires 28 April 2023                [Page 30]

Internet-Draft                SIP-over-QUIC                 October 2022


   +===============================+======+==============+=============+
   | Name                          |Value | Description  |Specification|
   +===============================+======+==============+=============+
   | SIP_NO_ERROR                  |0x0300| No error.    |Section 8.1  |
   +-------------------------------+------+--------------+-------------+
   | SIP_GENERAL_PROTOCOL_ERROR    |0x0301| Non-specific |Section 8.1  |
   |                               |      | error code.  |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_INTERNAL_ERROR            |0x0302| An internal  |Section 8.1  |
   |                               |      | error        |             |
   |                               |      | occurred.    |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_STREAM_CREATION_ERROR     |0x0303| Peer created |Section 8.1  |
   |                               |      | an           |             |
   |                               |      | unacceptable |             |
   |                               |      | stream.      |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_CLOSED_CRITICAL_STREAM    |0x0304| A required   |Section 8.1  |
   |                               |      | stream was   |             |
   |                               |      | closed.      |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_FRAME_ERROR               |0x0305| An invalid   |Section 8.1  |
   |                               |      | frame was    |             |
   |                               |      | received.    |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_FRAME_UNEXPECTED          |0x0306| A not        |Section 8.1  |
   |                               |      | permitted    |             |
   |                               |      | frame was    |             |
   |                               |      | received.    |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_CANCEL_FRAME_CLOSED       |0x0307| A CANCEL     |Section 8.1  |
   |                               |      | frame        |             |
   |                               |      | referenced   |             |
   |                               |      | an unopened  |             |
   |                               |      | stream ID.   |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_SETTINGS_ERROR            |0x0309| An error was |Section 8.1  |
   |                               |      | detected in  |             |
   |                               |      | a SETTINGS   |             |
   |                               |      | frame.       |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_MISSING_SETTINGS          |0x030a| No SETTINGS  |Section 8.1  |
   |                               |      | frame was    |             |
   |                               |      | received.    |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_REQUEST_REJECTED          |0x030b| User agent   |Section 8.1  |
   |                               |      | server       |             |
   |                               |      | rejected a   |             |



Hurst                     Expires 28 April 2023                [Page 31]

Internet-Draft                SIP-over-QUIC                 October 2022


   |                               |      | request.     |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_REQUEST_CANCELLED         |0x030c| The request  |Section 8.1  |
   |                               |      | or its       |             |
   |                               |      | response is  |             |
   |                               |      | cancelled.   |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_REQUEST_INCOMPLETE        |0x030d| Stream       |Section 8.1  |
   |                               |      | terminated   |             |
   |                               |      | without a    |             |
   |                               |      | full         |             |
   |                               |      | request.     |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_MESSAGE_ERROR             |0x030e| A SIP        |Section 8.1  |
   |                               |      | message was  |             |
   |                               |      | malformed.   |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_HEADER_COMPRESSION_FAILED |0x0310| Failed to    |Section 8.1  |
   |                               |      | interpret an |             |
   |                               |      | encoded      |             |
   |                               |      | field        |             |
   |                               |      | section.     |             |
   +-------------------------------+------+--------------+-------------+
   | SIP_HEADER_TOO_LARGE          |0x0311| Received     |Section 8.1  |
   |                               |      | encoded      |             |
   |                               |      | field        |             |
   |                               |      | section is   |             |
   |                               |      | too large.   |             |
   +-------------------------------+------+--------------+-------------+

                 Table 4: Initial SIP-over-QUIC Error Codes

12.2.4.  Stream Types

   This document establishes a registry for SIP-over-QUIC stream types.
   The "SIP-over-QUIC Stream Types" registry governs a 62-bit space.
   This registry follows the QUIC registry policy; see Section 12.2.
   Permanent registrations in this registry are assigned using the
   Specification Required policy [RFC8126]), except for values between
   0x00 and 0x3f (in hexadecimal; inclusive), which are assigned using
   Standards Action or IESG Approval as defined in Sections 4.9 and 4.10
   of [RFC8126].

   In addition to common fields as described in Section 12.2, permanent
   registrations in this registry MUST include the following fields:

   Stream Type:  A name or label for the stream type.




Hurst                     Expires 28 April 2023                [Page 32]

Internet-Draft                SIP-over-QUIC                 October 2022


   Sender:  Which endpoint on a SIP-over-QUIC connection may initiate a
      stream of this type.  Values are "Client", "Server", or "Both".

   The entries is Table 5 are registered by this document.

         +======================+=======+===============+========+
         | Stream Type          | Value | Specification | Sender |
         +======================+=======+===============+========+
         | Control Stream       | 0x00  | Section 5.2.1 | Both   |
         +----------------------+-------+---------------+--------+
         | QPACK Encoder Stream | 0x02  | Section 5.2   | Both   |
         +----------------------+-------+---------------+--------+
         | QPACK Decoder Stream | 0x03  | Section 5.2   | Both   |
         +----------------------+-------+---------------+--------+
         | Reserved             | 0x04  | Section 5.2   | Both   |
         +----------------------+-------+---------------+--------+

                Table 5: Initial SIP-over-QUIC Stream Types

13.  References

13.1.  Normative References

   [BCP195]   Sheffer, Y., Holz, R., and P. Saint-Andre,
              "Recommendations for Secure Use of Transport Layer
              Security (TLS) and Datagram Transport Layer Security
              (DTLS)", BCP 195, RFC 7525, May 2015.

              Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS
              1.1", BCP 195, RFC 8996, March 2021.

              <https://www.rfc-editor.org/info/bcp195>

   [HTTP-SEMANTICS]
              Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP Semantics", STD 97, RFC 9110,
              DOI 10.17487/RFC9110, June 2022,
              <https://www.rfc-editor.org/rfc/rfc9110>.

   [HTTP3]    Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114,
              June 2022, <https://www.rfc-editor.org/rfc/rfc9114>.

   [QPACK]    Krasic, C., Bishop, M., and A. Frindell, Ed., "QPACK:
              Field Compression for HTTP/3", RFC 9204,
              DOI 10.17487/RFC9204, June 2022,
              <https://www.rfc-editor.org/rfc/rfc9204>.





Hurst                     Expires 28 April 2023                [Page 33]

Internet-Draft                SIP-over-QUIC                 October 2022


   [QUIC-TRANSPORT]
              Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
              Multiplexed and Secure Transport", RFC 9000,
              DOI 10.17487/RFC9000, May 2021,
              <https://www.rfc-editor.org/rfc/rfc9000>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/rfc/rfc2119>.

   [RFC3261]  Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
              A., Peterson, J., Sparks, R., Handley, M., and E.
              Schooler, "SIP: Session Initiation Protocol", RFC 3261,
              DOI 10.17487/RFC3261, June 2002,
              <https://www.rfc-editor.org/rfc/rfc3261>.

   [RFC3264]  Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
              with Session Description Protocol (SDP)", RFC 3264,
              DOI 10.17487/RFC3264, June 2002,
              <https://www.rfc-editor.org/rfc/rfc3264>.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, January 2005,
              <https://www.rfc-editor.org/rfc/rfc3986>.

   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "Guidelines for
              Writing an IANA Considerations Section in RFCs", BCP 26,
              RFC 8126, DOI 10.17487/RFC8126, June 2017,
              <https://www.rfc-editor.org/rfc/rfc8126>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.

   [RFC9000]  Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
              Multiplexed and Secure Transport", RFC 9000,
              DOI 10.17487/RFC9000, May 2021,
              <https://www.rfc-editor.org/rfc/rfc9000>.

   [SIP2.0]   Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
              A., Peterson, J., Sparks, R., Handley, M., and E.
              Schooler, "SIP: Session Initiation Protocol", RFC 3261,
              DOI 10.17487/RFC3261, June 2002,
              <https://www.rfc-editor.org/rfc/rfc3261>.

13.2.  Informative References



Hurst                     Expires 28 April 2023                [Page 34]

Internet-Draft                SIP-over-QUIC                 October 2022


   [DNS-SVCB] Schwartz, B., Bishop, M., and E. Nygren, "Service binding
              and parameter specification via the DNS (DNS SVCB and
              HTTPS RRs)", Work in Progress, Internet-Draft, draft-ietf-
              dnsop-svcb-https-11,
              <https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-
              svcb-https-11>.

   [HTTP1.1]  Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112,
              June 2022, <https://www.rfc-editor.org/rfc/rfc9112>.

   [QRT]      Hurst, S., "QRT: QUIC RTP Tunnelling", Work in Progress,
              Internet-Draft, draft-hurst-quic-rtp-tunnelling-01,
              <https://datatracker.ietf.org/doc/html/draft-hurst-quic-
              rtp-tunnelling-01>.

   [QUIC-DATAGRAMS]
              Pauly, T., Kinnear, E., and D. Schinazi, "An Unreliable
              Datagram Extension to QUIC", RFC 9221,
              DOI 10.17487/RFC9221, March 2022,
              <https://www.rfc-editor.org/rfc/rfc9221>.

   [QuicR-Arch]
              Jennings, C. and S. Nandakumar, "QuicR - Media Delivery
              Protocol over QUIC", Work in Progress, Internet-Draft,
              draft-jennings-moq-quicr-arch-01,
              <https://datatracker.ietf.org/doc/html/draft-jennings-moq-
              quicr-arch-01>.

   [QuicR-Proto]
              Jennings, C., Nandakumar, S., and C. Huitema, "QuicR -
              Media Delivery Protocol over QUIC", Work in Progress,
              Internet-Draft, draft-jennings-moq-quicr-proto-01,
              <https://datatracker.ietf.org/doc/html/draft-jennings-moq-
              quicr-proto-01>.

   [RFC2782]  Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
              specifying the location of services (DNS SRV)", RFC 2782,
              DOI 10.17487/RFC2782, February 2000,
              <https://www.rfc-editor.org/rfc/rfc2782>.

   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/rfc/rfc5234>.






Hurst                     Expires 28 April 2023                [Page 35]

Internet-Draft                SIP-over-QUIC                 October 2022


   [RFC7301]  Friedl, S., Popov, A., Langley, A., and E. Stephan,
              "Transport Layer Security (TLS) Application-Layer Protocol
              Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301,
              July 2014, <https://www.rfc-editor.org/rfc/rfc7301>.

   [RFC8499]  Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS
              Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499,
              January 2019, <https://www.rfc-editor.org/rfc/rfc8499>.

   [RTP-over-QUIC]
              Ott, J. and M. Engelbart, "RTP over QUIC", Work in
              Progress, Internet-Draft, draft-ietf-avtcore-rtp-over-
              quic-01, <https://datatracker.ietf.org/doc/html/draft-
              ietf-avtcore-rtp-over-quic-01>.

   [RUSH]     Pugin, K., Frindell, A., Cenzano, J., and J. Weissman,
              "RUSH - Reliable (unreliable) streaming protocol", Work in
              Progress, Internet-Draft, draft-kpugin-rush-01,
              <https://datatracker.ietf.org/doc/html/draft-kpugin-rush-
              01>.

   [SDP-QUIC] Dawkins, S., "SDP Offer/Answer for RTP using QUIC as
              Transport", Work in Progress, Internet-Draft, draft-
              dawkins-avtcore-sdp-rtp-quic-00,
              <https://datatracker.ietf.org/doc/html/draft-dawkins-
              avtcore-sdp-rtp-quic-00>.

   [SNI]      Eastlake 3rd, D., "Transport Layer Security (TLS)
              Extensions: Extension Definitions", RFC 6066,
              DOI 10.17487/RFC6066, January 2011,
              <https://www.rfc-editor.org/rfc/rfc6066>.

   [Warp]     Curley, L., "Warp - Segmented Live Media Transport", Work
              in Progress, Internet-Draft, draft-lcurley-warp-02,
              <https://datatracker.ietf.org/doc/html/draft-lcurley-warp-
              02>.

   [WebTransH3]
              Frindell, A., Kinnear, E., and V. Vasiliev, "WebTransport
              over HTTP/3", Work in Progress, Internet-Draft, draft-
              ietf-webtrans-http3-03,
              <https://datatracker.ietf.org/doc/html/draft-ietf-
              webtrans-http3-03>.








Hurst                     Expires 28 April 2023                [Page 36]

Internet-Draft                SIP-over-QUIC                 October 2022


Appendix A.  Acknowledgments

   The author would like to acknowledge Richard Bradbury as the
   inspiration for the idea behind this document, and to Piers O'Hanlon
   for his review comments.

Appendix B.  QPACK Static Table

      *Author's Note:* This is only a preliminary table.  The original
      HPACK static table was created after analysing the frequency of
      common HTTP header fields and their values.  QPACK repeated that
      effort at a later date, which resulted in a different static
      table.  The author welcomes any data that would permit a similar
      level of analysis for the frequency of common SIP header fields
      and their values.

             +=======+=====================+=================+
             | Index | Name                | Value           |
             +=======+=====================+=================+
             | 0     | :request-uri        |                 |
             +-------+---------------------+-----------------+
             | 1     | from                |                 |
             +-------+---------------------+-----------------+
             | 2     | to                  |                 |
             +-------+---------------------+-----------------+
             | 3     | call-id             |                 |
             +-------+---------------------+-----------------+
             | 4     | via                 |                 |
             +-------+---------------------+-----------------+
             | 5     | :method             | REGISTER        |
             +-------+---------------------+-----------------+
             | 6     | :method             | INVITE          |
             +-------+---------------------+-----------------+
             | 7     | :method             | ACK             |
             +-------+---------------------+-----------------+
             | 8     | :method             | BYE             |
             +-------+---------------------+-----------------+
             | 9     | :method             | CANCEL          |
             +-------+---------------------+-----------------+
             | 10    | :method             | UPDATE          |
             +-------+---------------------+-----------------+
             | 11    | :method             | REFER           |
             +-------+---------------------+-----------------+
             | 12    | :method             | OPTIONS         |
             +-------+---------------------+-----------------+
             | 13    | :method             | MESSAGE         |
             +-------+---------------------+-----------------+
             | 14    | :status             | 100             |



Hurst                     Expires 28 April 2023                [Page 37]

Internet-Draft                SIP-over-QUIC                 October 2022


             +-------+---------------------+-----------------+
             | 15    | :status             | 180             |
             +-------+---------------------+-----------------+
             | 16    | :status             | 200             |
             +-------+---------------------+-----------------+
             | 17    | :status             | 301             |
             +-------+---------------------+-----------------+
             | 18    | :status             | 302             |
             +-------+---------------------+-----------------+
             | 19    | :status             | 400             |
             +-------+---------------------+-----------------+
             | 20    | :status             | 401             |
             +-------+---------------------+-----------------+
             | 21    | :status             | 404             |
             +-------+---------------------+-----------------+
             | 22    | :status             | 407             |
             +-------+---------------------+-----------------+
             | 23    | :status             | 408             |
             +-------+---------------------+-----------------+
             | 24    | contact             |                 |
             +-------+---------------------+-----------------+
             | 25    | content-type        | application/sdp |
             +-------+---------------------+-----------------+
             | 26    | content-type        | text/html       |
             +-------+---------------------+-----------------+
             | 27    | content-disposition | session         |
             +-------+---------------------+-----------------+
             | 28    | content-disposition | render          |
             +-------+---------------------+-----------------+
             | 29    | content-length      |                 |
             +-------+---------------------+-----------------+
             | 30    | accept              | application/sdp |
             +-------+---------------------+-----------------+
             | 31    | accept-encoding     | gzip            |
             +-------+---------------------+-----------------+
             | 32    | accept-language     |                 |
             +-------+---------------------+-----------------+
             | 33    | alert-info          |                 |
             +-------+---------------------+-----------------+
             | 34    | allow               | REGISTER        |
             +-------+---------------------+-----------------+
             | 35    | allow               | INVITE          |
             +-------+---------------------+-----------------+
             | 36    | allow               | ACK             |
             +-------+---------------------+-----------------+
             | 37    | allow               | BYE             |
             +-------+---------------------+-----------------+
             | 38    | allow               | CANCEL          |



Hurst                     Expires 28 April 2023                [Page 38]

Internet-Draft                SIP-over-QUIC                 October 2022


             +-------+---------------------+-----------------+
             | 39    | allow               | UPDATE          |
             +-------+---------------------+-----------------+
             | 40    | allow               | REFER           |
             +-------+---------------------+-----------------+
             | 41    | allow               | OPTIONS         |
             +-------+---------------------+-----------------+
             | 42    | allow               | MESSAGE         |
             +-------+---------------------+-----------------+
             | 43    | authentication-info |                 |
             +-------+---------------------+-----------------+
             | 44    | authorization       |                 |
             +-------+---------------------+-----------------+
             | 45    | call-info           |                 |
             +-------+---------------------+-----------------+
             | 46    | content-encoding    |                 |
             +-------+---------------------+-----------------+
             | 47    | content-language    |                 |
             +-------+---------------------+-----------------+
             | 48    | date                |                 |
             +-------+---------------------+-----------------+
             | 49    | error-info          |                 |
             +-------+---------------------+-----------------+
             | 50    | expires             |                 |
             +-------+---------------------+-----------------+
             | 51    | in-reply-to         |                 |
             +-------+---------------------+-----------------+
             | 52    | max-forwards        |                 |
             +-------+---------------------+-----------------+
             | 53    | min-expires         |                 |
             +-------+---------------------+-----------------+
             | 54    | mime-version        |                 |
             +-------+---------------------+-----------------+
             | 55    | organization        |                 |
             +-------+---------------------+-----------------+
             | 56    | priority            | Non-urgent      |
             +-------+---------------------+-----------------+
             | 57    | priority            | Normal          |
             +-------+---------------------+-----------------+
             | 58    | priority            | Urgent          |
             +-------+---------------------+-----------------+
             | 59    | priority            | Emergency       |
             +-------+---------------------+-----------------+
             | 60    | proxy-authenticate  |                 |
             +-------+---------------------+-----------------+
             | 61    | proxy-authorization |                 |
             +-------+---------------------+-----------------+
             | 62    | proxy-require       |                 |



Hurst                     Expires 28 April 2023                [Page 39]

Internet-Draft                SIP-over-QUIC                 October 2022


             +-------+---------------------+-----------------+
             | 63    | record-route        |                 |
             +-------+---------------------+-----------------+
             | 64    | reply-to            |                 |
             +-------+---------------------+-----------------+
             | 65    | require             |                 |
             +-------+---------------------+-----------------+
             | 66    | retry-after         |                 |
             +-------+---------------------+-----------------+
             | 67    | route               |                 |
             +-------+---------------------+-----------------+
             | 68    | server              |                 |
             +-------+---------------------+-----------------+
             | 69    | subject             |                 |
             +-------+---------------------+-----------------+
             | 70    | supported           |                 |
             +-------+---------------------+-----------------+
             | 71    | timestamp           |                 |
             +-------+---------------------+-----------------+
             | 72    | unsupported         |                 |
             +-------+---------------------+-----------------+
             | 73    | user-agent          |                 |
             +-------+---------------------+-----------------+
             | 74    | warning             | 300             |
             +-------+---------------------+-----------------+
             | 75    | warning             | 301             |
             +-------+---------------------+-----------------+
             | 76    | warning             | 302             |
             +-------+---------------------+-----------------+
             | 77    | warning             | 303             |
             +-------+---------------------+-----------------+
             | 78    | warning             | 304             |
             +-------+---------------------+-----------------+
             | 79    | warning             | 305             |
             +-------+---------------------+-----------------+
             | 80    | warning             | 306             |
             +-------+---------------------+-----------------+
             | 81    | warning             | 307             |
             +-------+---------------------+-----------------+
             | 82    | warning             | 330             |
             +-------+---------------------+-----------------+
             | 83    | warning             | 331             |
             +-------+---------------------+-----------------+
             | 84    | warning             | 370             |
             +-------+---------------------+-----------------+
             | 85    | warning             | 399             |
             +-------+---------------------+-----------------+
             | 86    | www-authenticate    |                 |



Hurst                     Expires 28 April 2023                [Page 40]

Internet-Draft                SIP-over-QUIC                 October 2022


             +-------+---------------------+-----------------+

                           Table 6: Static Table

Index

   B C D H M S U

      B

         bidirectional stream  Section 5, Paragraph 2; Section 5,
            Paragraph 2; Section 7.2.3, Paragraph 1; Section 10,
            Paragraph 6; Section 10, Paragraph 6; Section 10, Paragraph
            6; Section 10.2, Paragraph 1

      C

         CANCEL  Table 1; Section 8.1, Paragraph 2.16.1; Table 2;
            Table 4; Table 6; Table 6
         connection error  Section 1.2; Section 3.2, Paragraph 7;
            Section 3.2.1, Paragraph 4; Section 3.3.1, Paragraph 6;
            Section 5.2, Paragraph 6; Section 5.2.1, Paragraph 2;
            Section 5.2.1, Paragraph 2; Section 5.2.1, Paragraph 3;
            Section 7.1, Paragraph 5; Section 7.1, Paragraph 6;
            Section 7.2.3, Paragraph 4; Section 7.2.4, Paragraph 1;
            Section 7.2.4, Paragraph 4; Section 8, Paragraph 2
         control stream  Section 5.2, Paragraph 3; Section 5.2,
            Paragraph 5; Section 5.2.1, Paragraph 1; Section 5.2.1,
            Paragraph 2; Section 5.2.1, Paragraph 2; Section 5.2.1,
            Paragraph 2; Section 5.2.1, Paragraph 2; Section 5.2.1,
            Paragraph 3; Section 5.2.1, Paragraph 3; Section 5.2.1,
            Paragraph 3; Section 5.2.1, Paragraph 5; Section 5.2.1,
            Paragraph 5; Section 7.2.4, Paragraph 1; Section 8.1,
            Paragraph 2.20.1; Section 10.2, Paragraph 1

      D

         DATA  Section 2, Paragraph 3; Section 3.2, Paragraph 5, Item 2;
            Section 3.2, Paragraph 7; Section 3.2.2, Paragraph 2, Item
            1; Table 1; Table 2

      H

         HEADERS  Section 2, Paragraph 3; Section 3.2, Paragraph 5, Item







Hurst                     Expires 28 April 2023                [Page 41]

Internet-Draft                SIP-over-QUIC                 October 2022


            1; Section 3.2, Paragraph 7; Section 3.2, Paragraph 8;
            Section 3.2.2, Paragraph 2, Item 1; Section 3.2.2, Paragraph
            2, Item 2; Section 3.2.2, Paragraph 2, Item 3;
            Section 3.2.2, Paragraph 2, Item 4; Section 3.2.2, Paragraph
            2, Item 5; Section 3.2.2, Paragraph 2, Item 6;
            Section 3.2.2, Paragraph 2, Item 7; Table 1; Table 2

      M

         malformed  Section 3.2, Paragraph 3; Section 3.2.2, Paragraph
            1; Section 3.2.2, Paragraph 3; Section 3.2.2, Paragraph 4;
            Section 3.2.2, Paragraph 5; Section 3.2.2, Paragraph 6;
            Section 3.3.2, Paragraph 3; Section 3.3.2, Paragraph 4;
            Section 3.3.2.1, Paragraph 4; Section 8.1, Paragraph 2.28.1;
            Table 4

      S

         SETTINGS  Section 5.2, Paragraph 8; Table 1; Section 8.1,
            Paragraph 2.18.1; Section 8.1, Paragraph 2.20.1; Section 9,
            Paragraph 5; Table 2; Table 4; Table 4
         SETTINGS_MAX_FIELD_SECTION_SIZE  Section 3.3.1, Paragraph 2;
            Section 7.2.4.1; Table 3
         SETTINGS_QPACK_BLOCKED_STREAMS  Section 3.3.1, Paragraph 6;
            Section 7.2.4.1; Table 3
         SETTINGS_QPACK_MAX_TABLE_CAPACITY  Section 3.3.1, Paragraph 5;
            Section 7.2.4.1; Table 3
         SIP_CANCEL_FRAME_CLOSED  Section 3.2.1, Paragraph 4;
            Section 8.1; Table 4
         SIP_CLOSED_CRITICAL_STREAM  Section 5.2.1, Paragraph 3;
            Section 8.1; Table 4
         SIP_FRAME_ERROR  Section 7.1, Paragraph 5; Section 7.1,
            Paragraph 6; Section 8.1; Table 4
         SIP_FRAME_UNEXPECTED  Section 3.2, Paragraph 7; Section 7.2.4,
            Paragraph 1; Section 8.1; Table 4
         SIP_GENERAL_PROTOCOL_ERROR  Section 8.1; Table 4
         SIP_HEADER_COMPRESSION_FAILED  Section 8.1; Table 4
         SIP_HEADER_TOO_LARGE  Section 3.3.1, Paragraph 2; Section 8.1;
            Table 4
         SIP_INTERNAL_ERROR  Section 8.1; Table 4
         SIP_MESSAGE_ERROR  Section 3.2.2, Paragraph 4; Section 8.1;
            Table 4
         SIP_MISSING_SETTINGS  Section 5.2.1, Paragraph 2; Section 8.1;
            Table 4
         SIP_NO_ERROR  Section 8, Paragraph 4; Section 8.1; Table 4
         SIP_REQUEST_CANCELLED  Section 3.2.1, Paragraph 3;
            Section 3.2.1, Paragraph 7; Section 8.1; Table 4
         SIP_REQUEST_INCOMPLETE  Section 3.2, Paragraph 10; Section 8.1;



Hurst                     Expires 28 April 2023                [Page 42]

Internet-Draft                SIP-over-QUIC                 October 2022


            Table 4
         SIP_REQUEST_REJECTED  Section 3.2.1, Paragraph 3;
            Section 3.2.1, Paragraph 3; Section 3.2.1, Paragraph 6;
            Section 3.2.1, Paragraph 7; Section 8.1; Table 4
         SIP_SETTINGS_ERROR  Section 7.2.4, Paragraph 4; Section 8.1;
            Table 4
         SIP_STREAM_CREATION_ERROR  Section 5.2, Paragraph 6;
            Section 5.2.1, Paragraph 2; Section 8.1; Table 4
         stream error  Section 1.2; Section 3.2.2, Paragraph 4;
            Section 3.3.1, Paragraph 2; Section 8, Paragraph 1;
            Section 8, Paragraph 2; Section 8, Paragraph 3

      U

         unidirectional stream  Section 3.3.1, Paragraph 3; Section 5,
            Paragraph 2; Section 5.2, Paragraph 1; Section 5.2,
            Paragraph 5; Section 5.2, Paragraph 5; Section 5.2,
            Paragraph 5; Section 5.2, Paragraph 5; Section 5.2,
            Paragraph 5; Section 5.2, Paragraph 7; Section 5.2,
            Paragraph 9; Section 5.2, Paragraph 9; Section 5.2,
            Paragraph 9; Section 10, Paragraph 6; Section 10.2,
            Paragraph 2

Author's Address

   Sam Hurst
   BBC Research & Development
   Email: sam.hurst@bbc.co.uk























Hurst                     Expires 28 April 2023                [Page 43]