Session mode for multiple QUIC TunnelsUCLouvainmaxime.piraux@uclouvain.beUCLouvainolivier.bonaventure@uclouvain.beApple Inc.adi@apple.com
Internet Area
Internet Area Working GroupInternet-DraftThis document specifies methods for grouping QUIC tunnel connections in a single
session enabling the exchange of packets of Internet protocols over several QUIC
connections.IntroductionMobile devices such as laptops, smartphones or tablets have different
requirements than the traditional fixed devices. These mobile devices
often change their network attachment. They are often attached to
trusted networks, but sometimes they need to be connected to untrusted
networks where their communications can be eavesdropped, filtered or
modified. In these situations, the classical approach is to rely on VPN
protocols such as DTLS or IPSec. These VPN protocols provide the
encryption and authentication functions to protect those mobile clients
from malicious behaviors in untrusted networks.Today's mobile devices are often multihomed and many expect
to be able to perform seamless handovers from one access network to another
without breaking the established VPN sessions. In some situations it can
also be beneficial to combine two or more access networks together to
increase the available host bandwidth. A protocol such as Multipath
TCP
supports those handovers and allows aggregating the bandwidth of
different access links. It could be combined with single-path VPN
protocols to support both seamless handovers and bandwidth aggregation
above VPN tunnels. Unfortunately, Multipath TCP is not yet deployed on most
Internet servers and thus few applications would benefit from such a use
case.This document explores how QUIC could be used to
enable multi-homed mobile devices to communicate securely in untrusted
networks.This document is organized as follows.
describes the reference environment. Then, we propose
a new mode of operation, explained in , that use the
recently proposed datagram extension
() for QUIC to transport plain IP packets over a
QUIC connection. specifies how a connection
is established in this document proposal. details the format
of the messages introduced by this document.Conventions and DefinitionsThe 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
when, and only when, they appear in all capitals, as shown here.Reference environmentThe reference environment is illustrated in , in which
a client-initiated flow is tunneled through the concentrator.Such a multihomed client would like to benefit from the different access
networks available to reach the concentrator. These access networks
can be used for load-sharing, failover or other purposes. One
possibility to efficiently use these two access networks is to rely on
the proposed Multipath extensions to QUIC
. Another approach is to create
one QUIC connection using the single-path QUIC protocol
over each access network and glue these
different connections together in a single session on the concentrator.
Given the migration capabilities of QUIC, this approach could support failover
with a single active QUIC connection at a time.The tunnel session modeThe "tunnel session" mode enables the client and the concentrator to exchange
packets of several network protocols through the QUIC tunnel connection at the
same time. It also leverages the QUIC datagram extension
.This document specifies the following format for encoding packets in QUIC
DATAGRAM frame. It allows encoding packets from several protocols by
identifying the corresponding protocol of the packet in each QUIC DATAGRAM
frame. describes this encoding.This encoding defines three fields.
Protocol Type: The Protocol Type field contains the protocol type of the
payload packet. The values for the different protocols are defined as
"ETHER TYPES" in . A QUIC tunnel that receives a
Protocol Type representing an unsupported protocol MAY drop the associated
Packet. QUIC tunnel endpoints willing to exchange Ethernet frames can use
the value 0x6558 for .
Packet Tag: An opaque 16-bit value. The QUIC tunnel application is free to
decide its semantic value. For instance, a QUIC tunnel endpoint MAY encode
the sending order of packets in the Packet Tag, e.g. as a timestamp or a
sequence number, to allow reordering on the receiver.
Packet: The packet conveyed inside the QUIC tunnel connection.
illustrates how a UDP packet is tunneled using the tunnel
session mode.
The main advantage of the tunnel session mode is that it supports IP and any
protocol above the network layer. Any IP packet can be transported
using the datagram extension over a QUIC connection. However, this
advantage comes with a large per-packet overhead since each packet
contains both a network and a transport header. All these headers must be
transmitted in addition with the IP/UDP/QUIC headers of the QUIC connection.
For TCP connections for instance, the per-packet overhead can be large.Joining a tunneling sessionIf the client is multihomed, it can use Multipath QUIC
to efficiently use its
different access networks. This version of the document does not elaborate in
details on this possibility. If the concentrator does not support
Multipath QUIC, then the client creates several QUIC connections
and joins them at the application layer. This works as
illustrated in figure . Each message is exchanged over a dedicated
unidirectional QUIC stream. Their format is detailed in .
When the client opens the first QUIC connection with the concentrator, (1) it
can request a QUIC tunnel session identifier. (2) The concentrator replies
with a variable-length opaque value that identifies the QUIC tunneling session.
When opening a QUIC connection over another access network, (3) the client
can send this identifier to join the QUIC tunneling session.
The concentrator matches the session identifier with the existing
session with the client. It can then use both sessions to reach the
client and receive tunneled packets from the client.Joining a tunneling session allows grouping several QUIC connections to the
concentrator. Each endpoint can then coordinate the use of the Packet Tag across
the tunneling session as presented in .Both QUIC tunnel endpoints open their first unidirectional stream (i.e. stream 2
and 3), hereafter named the QUIC tunnel control stream, to exchange these
messages. A QUIC tunnel endpoint MUST NOT close its control stream and
SHOULD provide enough flow control credit to its peer.The messages format used for this purpose are described in .
The client initiates the procedure and MAY either start a new session or join
an existing session. This negotiation MUST NOT take place more than once per
QUIC connection.Coordinate use of the Packet TagWhen using the tunnel session mode, each packet is associated with a 16-bit value
called Packet Tag. This document leaves defining the meaning of this value to
implementations. This section provides some examples on how it can be used to
implement packet reordering across several QUIC tunnel connections grouped in a
tunneling session.A first simple example of use is to encode the timestamp at which the datagram
was sent. Using a millisecond precision and encoding the 16 lower bits of the
timestamp makes the value wrapping around in a bit more than 65 seconds.Another example of use is to maintain a value counting the datagrams sent over
all QUIC tunnel connections of the tunneling session. The 16-bit value allows
distinguishing at most 32768 packets in flight.The QUIC tunnel receiver can then distinguish, buffer and reorder packets based
on this value. Mechanisms for managing the datagram buffer and negotiating the
use of the Packet Tag are out of scope of this document.Connection establishmentDuring connection establishment, the tunnel session mode
support is indicated by setting the ALPN token "qt-session" in the TLS
handshake. Draft-version implementations MAY specify a particular draft version
by suffixing the token, e.g. "qt-session-00" refers to the first version of this
document.Messages formatIn the following sections, we specify the format of each message introduced in
this document. They are encoded as TLVs, following the format defined in Section
7 of .QUIC tunnel control TLVsThis document specifies additional QUIC tunnel control TLVs:The New Session TLV is used by the client to initiate a new tunneling session.
The Session ID TLV is used by the concentrator to communicate to the client the
Session ID identifying this tunneling session. The Join Session TLV is used to
join a given tunneling session, identified by a Session ID.
All QUIC these tunnel control TLVs MUST NOT be sent on other streams than the
QUIC tunnel control streams.When the tunnel session mode is in use, the Access Report TLV defined in Section
7.1.1 of MUST be sent on other streams than
the QUIC tunnel control stream.New Session TLVThe New Session TLV contains an optional value. It initiates a new tunneling
session at the concentrator, and can contain an opaque value giving an
indication on the type of traffic conveyed over this session. The concentrator
can use this indication for QoS purposes for instance.The concentrator MUST send a Session ID TLV in
response, with the Session ID corresponding to the tunneling session created.
After sending a New Session TLV, the client MUST close the QUIC tunnel control
stream.The concentrator MUST NOT send New Session TLVs.Session ID TLVThe Session ID TLV contains an opaque value that identifies the current
tunneling session. It can be used by the client in subsequent QUIC connections
to join them to this tunneling session. The concentrator MUST send a Session ID
TLV in response of a New Session TLV, with the Session ID corresponding to the
tunneling session created.The client MUST NOT send a Session ID TLV. The concentrator MUST close the QUIC
tunnel control stream after sending a Session ID TLV.Join Session TLVThe Join Session TLV contains an opaque value that identifies a tunneling
session to join. The client can send a Join Session TLV to join the QUIC
connection to a particular tunneling session. The tunneling session is
identified by the Session ID.
After sending a Join Session TLV, the client MUST close the QUIC tunnel control
stream.The concentrator MUST NOT send Join Session TLVs. After receiving a Join Session
TLV, the concentrator MUST use the Session ID to join this QUIC connection to
the tunneling session. Joining the tunneling session implies merging the state
of this QUIC tunnel connection to the session.
A successful joining of connection is indicated by the
closure of the QUIC tunnel control stream of the concentrator.In cases of failure when joining a tunneling session, the concentrator MUST send
a RESET_STREAM with an application error code discerning the cause of the
failure. The possible codes are listed below:
UNKNOWN_ERROR (0x0): An unknown error occurred when joining the tunneling
session. QUIC tunnel endpoints SHOULD use more specific error codes when
applicable.
UNKNOWN_SESSION_ID (0x1): The Session ID used in the Join Session TLV is not a
valid ID. It was not issued in a Session ID TLV or refers to an expired
tunneling session.
CONFLICTING_STATE (0x2): The current state of the QUIC tunnel connection
could not be merged with the tunneling session.
Security ConsiderationsThe security considerations of are also applicable to this document.IANA ConsiderationsRegistration of QUIC tunnel Identification StringThis document creates a new registration for the identification of the QUIC
tunnel protocol in the "Application Layer Protocol Negotiation (ALPN) Protocol
IDs" registry established in .The "qt-session" string identifies the QUIC tunnel protocol tunnel session mode.
QUIC tunnel control TLVsThe following subsections detail new registries within "QUIC tunnel control
Parameters" registry.QUIC tunnel control TLVs TypesThis document creates three new registrations to identify the QUIC tunnel
control TLVs defined in this document in the "QUIC tunnel control TLVs Types"
sub-registry defined in .The values to be added in the registry are as follows:QUIC tunnel control Error CodesThis document establishes a registry for QUIC tunnel control stream error
codes. The "QUIC tunnel control Error Code" registry manages a 62-bit space. New
values are assigned via IETF Review (Section 4.8 of ).The initial values to be assigned at the creation of the registry are as
follows:ReferencesNormative ReferencesKey words for use in RFCs to Indicate Requirement LevelsIn many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.Tunneling Internet protocols inside QUICThis document specifies methods for tunneling packets of Internet protocols inside a QUIC connection.Ambiguity of Uppercase vs Lowercase in RFC 2119 Key WordsRFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.Informative ReferencesAn Unreliable Datagram Extension to QUICThis document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection. Discussion of this work is encouraged to happen on the QUIC IETF mailing list quic@ietf.org [1] or on the GitHub repository which contains the draft: https://github.com/tfpauly/draft-pauly-quic- datagram [2].QUIC: A UDP-Based Multiplexed and Secure TransportThis document defines the core of the QUIC transport protocol. Accompanying documents describe QUIC's loss detection and congestion control and the use of TLS for key negotiation. Note to Readers Discussion of this draft takes place on the QUIC working group mailing list (quic@ietf.org (mailto:quic@ietf.org)), which is archived at https://mailarchive.ietf.org/arch/search/?email_list=quic Working Group information can be found at https://github.com/quicwg; source code and issues list for this draft can be found at https://github.com/quicwg/base-drafts/labels/-transport.Multipath Extensions for QUIC (MP-QUIC)This document specifies extensions to the QUIC protocol to enable the simultaneous usage of multiple paths for a single connection. These extensions are compliant with the single-path QUIC design and preserve QUIC privacy features.Transport Layer Security (TLS) Application-Layer Protocol Negotiation ExtensionThis document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.Guidelines for Writing an IANA Considerations Section in RFCsMany protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.This is the third edition of this document; it obsoletes RFC 5226.TCP Extensions for Multipath Operation with Multiple AddressesTCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths. This document defines an Experimental Protocol for the Internet community.IANA ETHER TYPESGeneric Routing Encapsulation (GRE)This document specifies a protocol for performing encapsulation of an arbitrary network layer protocol over another arbitrary network layer protocol. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.Change LogAcknowledgments