<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-kuhn-quic-0rtt-bdp-08" ipr="trust200902">
	<!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN"
     they will automatically be output with "(if approved)" -->

	<!-- ***** FRONT MATTER ***** -->

	<front>
		<!-- The abbreviated title is used in the page header - it is only necessary if the
         full title is longer than 39 characters -->

		<title abbrev="Transport for 0-RTT">Transport parameters for 0-RTT connections</title>

		<author fullname="Nicolas Kuhn" initials="N" surname="Kuhn">
			<organization>CNES</organization>
			<address>
				<email>nicolas.kuhn@cnes.fr</email>
			</address>
		</author>

		<author fullname="Emile Stephan" initials="E" surname="Stephan">
			<organization>Orange</organization>
			<address>
				<email>emile.stephan@orange.com</email>
			</address>
		</author>

		<author fullname="Gorry Fairhurst" initials="G" surname="Fairhurst">
			<organization>University of Aberdeen</organization>
			<address>
				<email>gorry@erg.abdn.ac.uk</email>
			</address>
		</author>
	
		<author fullname="Tom Jones" initials="T" surname="Jones">
			<organization>University of Aberdeen</organization>
			<address>
				<email>tom@erg.abdn.ac.uk</email>
			</address>
		</author>
		
		<date year="2021"/>

		<!-- If the month and year are both specified and are the current ones, xml2rfc will fill
         in the current day for you. If only the current year is specified, xml2rfc will fill
	 in the current day and month for you. If the year is not the current one, it is
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to
	 specify just the year. -->

		<!-- Meta-data Declarations -->

		<area>Transport</area>

		<workgroup>Internet Engineering Task Force</workgroup>

		<!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

		<keyword>QUIC, high BDP, Transport, 0-RTT, early_data</keyword>

		<!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

	<abstract>
		<t>
		0-RTT mechanisms reduce the time it takes for the first bytes
		of application data to be processed in a transport connection
		and can greatly reduce connection latency during setup.
		The 0-RTT transport features described by quic-transport help
		clients establish secure connections with a minimal number of
		round-trips.
		</t>
		<t>
		This document describes a generic method to exchange path parameters relating to transport.
		The additional transport parameters can help a connection that continues after
		an interruption or restarts by sharing connection properties.
		They can be used to increase the performance for a path with large RTT.
		</t>
	</abstract>
	</front>

	<middle>

		<section anchor="sec:introduction" title="Introduction">
			<t>
			Each transport connection typically starts without
			knowledge of the path between the endpoints. Transport
			protocols use implicit signals from the network to
			discover the properties of the path. This information
			is used to adapt the transport mechanisms to the
			network path. For example, an Internet transport
			endpoint is unable to determine a safe rate at which to
			start or continue their transmission, and uses
			slow-start to determine a safe rate. This applies to the 
			1-RTT mode of QUIC.
			</t>

			<t> QUIC supports the sending of data in two different
			modes, after the transport handshake has completed,
			1-RTT mode, and sending data along with handshake
			packets, 0-RTT mode.  Using 0-RTT data an
			application is able to send transport parameters with the handshake
			packets, making it possible to reduce the latency
			of the connection setup. </t>

			<t> In 0-RTT mode, a QUIC server must store a copy of a number of flow
			control related transport parameters, or receives an integrity-protected copy of these values in the ticket the client includes in the first message of the handshake, to enable the use
			of 0-RTT data. 
			The setting or omission of one of these parameters can result in QUIC creating a connection, but flow control can still prevent any data being sent by the client. 
			</t>

			<t> For 0-RTT data to be sent, the QUIC server must
			record the values of:</t>

			<t><list style="symbols">
				<t>initial_max_data</t>
				<t>initial_max_stream_data_bidi_local</t>
				<t>initial_max_stream_data_bidi_remote</t>
				<t>initial_max_stream_data_uni</t>
				<t>initial_max_streams_bidi</t>
				<t>initial_max_streams_uni</t>
			</list></t>

			<t> These values set the flow control limits within which a
			connection must operate. The server has to
			store these parameters for a client to send data when resuming during
			0-RTT. The stored values are used
			for any data that is transmitted before the handshake
			has completed and 1-RTT data is able to be sent on the
			connection.  Once the handshake has completed, these
			values are discarded and the values established during
			the handshake are used.</t>

			<t>This document proposes an extension to the transport
			parameters that are shared during the 0-RTT phase to
			allow resumption using additionnal transport and connection
			properties that were discovered in previous
			connections. </t>
		</section>

		<section anchor="sec:rationale" title="Motivation">
			<t> Reducing the number of round-trips required to
			start a connection is an important way to reduce setup
			time and lower overall connection latency. 0-RTT
			mechanisms that allow a client to feed requests to
			a server in the first RTT do not alone improve the
			total time-to-service. The BDP extension described in
			this document aims to improve traffic delivery by
			allowing the connection to short-cut slow RTT-based
			processes that grow connection parameters.</t>

			<t>Currently each side has a proprietary solution to
			measure and to store path characteristics. Recalling
			the parameters of a previous would allow the use-cases
			presented in this section.</t> 

		<section anchor="subsec:rationale_client" title="Optimizing client's requests">
				<t>In cases with Dynamic Adaptive Streaming over HTTPS (DASH), clients may encounter issues in knowing the available bandwidth or DASH can encounter issues in reaching the best available video playback quality. The client's requests could be adapted and specific traffic could use information from the paths characteristics (such as trying to impress the client with high quality videos, to fill the buffers and avoid video blocking or to send high quality adds).</t>
				<t>In other cases, applications may provide additionnal services if clients can know the server's estimation of the path characteristics.</t>
		</section>

		<section anchor="subsec:rationale_jump" title="Safe jump start">
				<t>The server could use information from the
					paths characteristics to adapt to
					non-default path characteristics.
					Moreover, some transport parameters ma
					not need to be re-estimated (i.e.
					minRTT, MTU, bottleneck capacity,
					etc.).</t>
				<t>CDNs currently exploit a very high Initial
					Window <xref target="TMA18"></xref>.
					Using the knowledge of previous path
					characteristics, CDN could:<list
						style="symbols">
						<t>adapt these values to save
							resource at the server
							and increase safely the
							initial congestion
							window such as proposed
							in <xref
								target="I-D.irtf-iccrg-sallantin-initial-spreading"></xref><xref
								target="CONEXT15"></xref>;</t>
						<t>consider client's limitation
							if the client decided
							to reject the
							extension.</t>
					</list></t>

		</section>

		<section anchor="subsec:rationale_sharing" title="Sharing transport information accross multiple connections">
				<t>There is an interest in sharing transport
				information across multiple
				connections. <xref
					target="I-D.ietf-tcpm-2140bis"></xref>
				considers the sharing of transport
				parameters between connections
				originating from the same host. The
				proposal in this document have the
				advantage of storing the information at
				the client and not requiring the server
				to retain additional state for each
				client.</t>
		</section>

		</section>
				
		<section anchor="sec:bdp_metadata" title="BDP metadata parameters">
			<t>Section 7.3.1 of <xref
			target="I-D.ietf-quic-transport"></xref> describes the
			parameters that must be remembered if a client wishes to
			send 0-RTT data.  Both endpoints store the value of the
			server transport parameters from a previous connection and apply
			them to any 0-RTT packets that are sent in subsequent
			connections to the same peer. Of the six mandatory
			parameters, only initial_max_data improves the
			time-to-service of the 0-RTT connection. The BDP
			metadata extension augments the list of server
			transport parameters that are shared with the client to
			improve the time-to-service and save resources such as
			CPU, memory and power.</t>

			<t>The BDP extension proposes two new parameters
			<list style="symbols">

				<t>recon_bytes_in_flight (0x000X): The bytes in
				flight measured on the previous connection by
				the server. Integer number of bytes.
				Using the bytes_in_flight defined in <xref
				target="I-D.ietf-quic-recovery"></xref>,
				recon_bytes_in_flight can be set to
				bytes_in_flight.</t>

				<t>recon_min_rtt (0x000X): The minimum RTT
				measured on the previous connection by the
				server. Integer number of milliseconds. Using
				the min_rtt defined in <xref
				target="I-D.ietf-quic-recovery"></xref>,
				recon_min_rtt can be set to min_rtt. The min_rtt 
				parameter may not track a decreasing RTT: the 
				min_rtt that is reported here may not be the 
				actual minimum RTT measured during the 1-RTT 
				connection, but still reflects the characteristics 
				of the latency on the network.
				</t>

			</list></t>
		</section>

		<section anchor="sec:bdp_activation" title="Extension activation">
			<t>The BDP extension is protected by the same mechanism
			that protects the exchange of the 0-RTT transport
			parameters.  A client that activates 0-RTT data sends
			back the transport parameters received from the server
			during the previous connection (see Section 7.3.1 of
			<xref target="I-D.ietf-quic-transport"></xref>).  </t>

			<t>The client reads the parameters in the BDP
			metadata extension, but can not change them.</t>

			<t>Accept: A client MAY use the extension parameters. 
			Then, it activates ingress optimization 
			and sends back the transport parameters of the BDP
			metadata extension that it received from the server
			during the previous connection.</t>

			<t>Refuse: A client could choose not to use there parameters. 
			Then, it does not support ingress
			optimisation and drops the extension signal. A client that
			disagrees with the extension parameters received from
			the server refuses the optimization.</t>
		</section>

		<section anchor="sec:other_parameter" title="Discussion">
			<section anchor="subsec:other_param_relevance" title="Relevance of the transport parameter">
				<t>The recon_bytes_in_flight parameter is
					higher than the number of bytes in the
					actual BDP since it may include bytes
					in buffers along the path. That being
					said, the recon_bytes_in_fight may be
					lower than the actual value at the end
					of a connection since there may be a
					low amount of data to send to terminate
					the transmission.</t>
			</section>

			<section anchor="subsec:other_param_client_pov" title="The client point-of-view">
				<t>The client can read the values of the
					extension. The client may want to
					reject the extension, to accept and
					adapt the resource and flow control
					parameters or adapt requests. The
					client cannot change the values of the
					extension.</t>
			</section>

			<section anchor="subsec:other_param_bdp_protect" title="BDP extension protected as Much as initial_max_data">
				<t>The BDP metadata parameters are measured by
					the server during a previous
					connection. The BDP extension is
					protected by the mechanism that
					protects the exchange of the 0-RTT
					transport parameters. For the version 1
					of QUIC, the BDP extension is protected
					using the mechanism that already
					protects the "initial_max_data"
					parameter.  This is defined in sections
					4.5 to 4.7 of <xref
						target="I-D.ietf-quic-tls"></xref>.
					It provides the server with a way to
					check the parameters proposed by the
					client are those that the server sent
					to the client during the previous
					connection.</t>
			</section>

			<section anchor="subsec:other_param_safety" title="Congestion control safety">
				<t>The maximum number of initial data packets
					that can be sent without acknowledgment
					needs to be chosen to avoid congestion
					collapse. A mechanism is needed to
					ensure that the information sent by the
					server is relevant and that network
					conditions have not changed. The client
					cannot change the values of the
					extension.</t> 

				<t>The initial window is considered a safe
					starting point for an unknown path to
					avoid adding congestion to a congested
					network. If the reception of IW is
					confirmed for the first RTT of data,
					and also the path is determined to be
					similar to that of a recent previous
					session (e.g., similar RTT), the method
					permits the sender to use the previous
					path information as an input to help
					determine a new safe rate. Another
					safety net could be the pacing of
					packets as a function of the estimated
					RTT. This follows the ideas of <xref
						target="I-D.cardwell-iccrg-bbr-congestion-control"></xref>
					and <xref target="RFC4782"></xref>.</t>
			</section>

		</section>
		
		<section anchor="sec:acknowledgments" title="Acknowledgments">
			<t>The authors would like to thank Gabriel Montenegro, Patrick McManus, Ian Swett, Igor Lubashev, Christian Huitema and Tom Jones for their fruitful comments on earlier versions of this document.</t>
		</section>

		<section anchor="sec:IANA" title="IANA Considerations">
			<t>TBD: Text is required to register the extension BDP_metadata field. Parameters are registered using the procedure defined in <xref target="I-D.ietf-quic-transport"></xref>.</t>
		</section>

		<section anchor="sec:security" title="Security Considerations">
			<t> The BDP metadata parameters are measured by the server during a previous connection.</t>
			<t> The BDP extension is protected by the mechanism that protects the exchange of the 0-RTT transport parameters. For the version 1 of QUIC, the BDP extension is protected using the mechanism that already protects the "initial_max_data" parameter. This is defined in sections 4.5 to 4.7 of <xref target="I-D.ietf-quic-tls"></xref>. It provides the server with a way to check the parameters proposed by the client are those that the server sent to the client during the previous connexion.</t> 
		</section>
	</middle>

	<!--  *****BACK MATTER ***** -->
	<back>
		<!-- References split into informative and normative -->
		<!-- There are 2 ways to insert reference entries from the citation libraries:
	1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
	2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
	(for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")
	Both are cited textually in the same manner: by using xref elements.
	If you use the PI option, xml2rfc will, by default, try to find included files in the same
	directory as the including file. You can also define the XML_LIBRARY environment variable
	with a value containing a set of directories to search.  These can be either in the local
	filing system or remote ones accessed by http (http://domain/dir/... ).-->

		<!-- <references title="Normative References">
			&RFC2119;
		</references> -->

		<references title="Informative References">
			<!-- <?rfc include="reference.RFC.2488.xml"?> -->
			<!-- <?rfc include="reference.RFC.3135.xml"?> -->
			<!-- <?rfc include="reference.RFC.6347.xml"?> -->
			<!-- <?rfc include="reference.RFC.6349.xml"?> -->
			<!-- <?rfc include="reference.RFC.6928.xml"?> -->
			<!-- <?rfc include="reference.RFC.7413.xml"?> -->
			<!-- <?rfc include="reference.RFC.8446.xml"?> -->
			<!-- <?rfc include="reference.I-D.ietf-quic-http.xml"?> -->
			<!-- <?rfc include="reference.I-D.kuehlewind-quic-substrate.xml"?> -->
			<!-- <?rfc include="reference.I-D.pauly-quic-datagram.xml"?> -->
			<?rfc include="reference.I-D.ietf-tcpm-2140bis.xml"?>
			<?rfc include="reference.RFC.4782.xml"?>
			<?rfc include="reference.RFC.2914.xml"?>
			<?rfc include="reference.I-D.cardwell-iccrg-bbr-congestion-control.xml"?>
			<?rfc include="reference.I-D.ietf-quic-tls.xml"?>
			<?rfc include="reference.I-D.ietf-quic-transport.xml"?>
			<!-- <?rfc include="reference.I-D.ietf-quic-http.xml"?> -->
			<?rfc include="reference.I-D.ietf-quic-recovery.xml"?>
			<!-- <?rfc include="reference.I-D.ietf-tls-ticketrequests.xml"?> -->
			<?rfc include="reference.I-D.irtf-iccrg-sallantin-initial-spreading.xml"?>
			<reference anchor="TMA18">
				<front>
					<title>Demystifying TCP Initial Window Configurations of Content Distribution Networks</title>
					<author initials="J" surname="Ruth">
					</author>
					<author initials="O" surname="Hohlfeld">
					</author>
					<date year="2018"/>
				</front>
				<seriesInfo name="2018 Network Traffic Measurement and Analysis Conference (TMA)" value=""/>
			</reference>
			<!-- <reference anchor="PANRG106">
				<front>
					<title>Impact of Asymmetric Path Characteristics</title>
					<author initials="G" surname="Fairhurst">
					</author>
					<date year="2019"/>
				</front>
				<seriesInfo name="IETF PANRG" value="106"/>
			</reference> -->
			<!-- <reference anchor="ICCRG100">
				<front>
					<title>MPTCP and BBR performance over Internet satellite paths</title>
					<author initials="N" surname="Kuhn">
					</author>
					<date year="2017"/>
				</front>
				<seriesInfo name="IETF ICCRG" value="100"/>
			</reference> -->
			<!-- <reference anchor="IJSCN19">
				<front>
					<title>Google QUIC performance over a public SATCOM access</title>
					<author initials="L" surname="Thomas">
					</author>
					<author initials="E" surname="Dubois">
					</author>
					<author initials="N" surname="Kuhn">
					</author>
					<author initials="E" surname="Lochin">
					</author>
					<date year="2019"/>
				</front>
				<seriesInfo name="International Journal of Satellite Communications and Networking" value=""/>
			</reference> -->
			<reference anchor="CONEXT15">
				<front>
					<title>Halfback: Running Short Flows Quickly and Safely</title>
					<author initials="Q" surname="Li">
					</author>
					<author initials="M" surname="Dong">
					</author>
					<author initials="P B" surname="Godfrey">
					</author>
					<date year="2015"/>
				</front>
				<seriesInfo name="ACM CoNEXT" value=""/>
			</reference>
			<!-- <reference anchor="NCT13">
				<front>
					<title>A new survey on improving TCP performances over geostationary satellite link</title>
					<author initials="A" surname="Pirovano">
					</author>
					<author initials="F" surname="Garcia">
					</author>
					<date year="2013"/>
				</front>
				<seriesInfo name="Network and Communication Technologies" value=""/>
			</reference> -->
			<!-- <reference anchor="ICC16">
				<front>
					<title>Reducing web latency through TCP IW: Be smart</title>
					<author initials="R" surname="Sallantin">
					</author>
					<author initials="C" surname="Baudoin">
					</author>
					<author initials="E" surname="Chaput">
					</author>
					<author initials="F" surname="Arnal">
					</author>
					<author initials="E" surname="Dubois">
					</author>
					<author initials="A-L" surname="Beylot">
					</author>
					<date year="2016"/>
				</front>
				<seriesInfo name="IEEE ICC" value=""/>
			</reference> -->
		</references>
		<section anchor="appendix-server" title="Example of server solution">
			<t>This section details a solution at the server to safely increase the maximum amount of packets that the server sends when receiving a 0-RTT packet from a client.</t>
			<t>
			The initial window is considered a safe starting point
			for an unknown path to avoid adding congestion to a
			congested network. The general assumption is that a
			path does not currently suffer persistent congestion,
			and therefore the initial window is applicable until
			feedback about the path is received. The resulting
			initial sending rate is only tentative until the capacity is
			confirmed to be available. If there is loss within this
			initial transmission, then this could be evidence that
			the path is congested, and the sender needs to adjust
			to this congestion.
			</t>
			<t>
			Significant loss could be an indication of congestion
			collapse - i.e. persistent loss, requiring back-off of
			the sending rate.
			</t>
			<t>
			If however, the reception of IW is confirmed for the
			first RTT of data, and also the path is determined to
			be similar to that of a recent previous session
			(e.g., similar RTT), the method permits the sender to
			use the previous path information as an input to help
			determine a new safe rate. One possibility is to
			immediately jump to a new sending rate that is derived
			from the previously sustained rate. This follows the
			ideas of <xref
				target="I-D.cardwell-iccrg-bbr-congestion-control"></xref>
			and <xref target="RFC4782"></xref>.  
			</t>
			<t>
			The QoS mechanisms that are deployed in the networks
			can help in prevent the congestion collapse from
			occurring. However, the sender must provide a
			significant reduction if there is evidence of potential
			congestion collapse <xref target="RFC2914"></xref> from
			his point of view. Precautions can be taken to
			guarantee that it is reasonably safe to jump to a high
			sending rate : measuring that network conditions did
			not change, allowing some space for other flows that
			have started and pace transmission of packets. 
		        The sender might need to rapidly reduce its rate, if the 
		        higher sending rate does not prove to be supported. 
		        It if is supported, the sender can resume standard 
		        congestion control. 	
			</t>
		</section>
	</back>
</rfc>
