<?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-bdpframe-extension-01" 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="BDP Frame Extension">BDP Frame Extension</title>

		<author fullname="Nicolas Kuhn" initials="N" surname="Kuhn">
			<organization>Thales Alenia Space</organization>
			<address>
				<email>nicolas.kuhn.ietf@gmail.com</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="Godred Fairhurst" initials="G" surname="Fairhurst">
			<organization>University of Aberdeen</organization>
			<address>				
				<postal>
          			<street>Department of Engineering</street>
          			<street>Fraser Noble Building</street>
          			<city>Aberdeen</city>
          			<code>AB24 3UE</code>
          			<country>Scotland, UK</country>
        			</postal>

				<email>gorry@erg.abdn.ac.uk</email>
			</address>
		</author>
	
		<author fullname="Christian Huitema" initials="C" surname="Huitema">
			<organization>Private Octopus Inc.</organization>
			<address>
				<email>huitema@huitema.net</email>
			</address>
		</author>

		<date year="2023"/>

		<!-- 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, BDPFRAME, careful resume</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>
                This document describes the BDP_FRAME extension for QUIC.
                The frame enables the exchange of CC parameters related to the
                path characteristics between the receiver
                and the sender during a connection.
                These CC parameters can be utilised by the Careful Resume method
                when a new connection is established or for application-limited
                traffic. 
		The CC parameters allows a receiver to prepare to use the additional
		capacity that could be amde available when the method is used.
                This CC parameters can also be used by the receiver to request that
		previously computed CC parameters related to the 
		path characteristics, are not used, when the receiver has additional information
		about the path or traffic to be sent.
		</t>
	</abstract>
	</front>

	<middle>

<!-- Feb 2023, this document now includes all BDP-Frame related text from Careful Resume,
but at this stage probably contains a lot of repetition, and potentially some confusion
about whether QUIC Transport Params, Session Tickets or other Frames are used to send
the CC parameters -->
		
<section anchor="sec:introduction" title="Introduction">
    <t>
    This document extends the Careful Resume
		    method <xref target="I-D.kuhn-tsvwg-careful-resume"></xref> 
    by allowing 
    sender-generated CC parameters to be stored at the receiver.
    By transfering the CC parameters to a receiver, it also releases the
    sender from needing to retain CC parameter state for each
    receiver. This specifically allows
    a receiver to implement a policy that informs a sender
    whether the receiver desires the sender to reuse the CC parameters.
    </t>
    <t>
    This document defines the method to exchange the CC parameters between
    a QUIC receiver and the sender in an interoperable manner. The process
    is outlined here:
    <list style="numbers">
	<t>
	For an established connection, the
	current RTT (current_rtt), bottleneck bandwidth
	(current_bb) and current receiver Endpoint Token 
	(current_endpoint_token) are
	stored as saved_rtt, saved_bb and
	saved_endpoint_token within a BDP_FRAME.
	The sender computes a secured hash with 
	its own selection of the CC parameters of the BDP_FRAME,
	encrypts the hash and sends this within the BDP_FRAME;  
	</t>
	<t>
	The receiver can read the non-encrypted portuon of the BDP_FRAME parameters,
	but is not premitted to modify any CC parameters. 
	The receiver is unable to read the hash.
 	</t>
	<t>
	A receiver later sends a BDP-FRAME back to
        the sender to re-use previously computed CC parameters;
	</t>
	<t>	
	The sender is then able to utilise the CC parameters in the 
	BDP_FRAME in new connection to the same endpoint.
	</t>
    </list>
    </t>

    <!-- PLEASE CHECK NEXT PARA - restructing of sections may have modified this -->
    <t>This method can apply to any resumed QUIC session: both
    a saved_session and a recon_session can be a 0-RTT QUIC
    connection or a 1-RTT QUIC connection.
    </t>
			
    <section anchor="subsec:rationale_client" title="Optimizing Client Requests">
	<t>Where the receiver is aware of a high BDP, it can adapt other CC parameters
	to better utilize the available capacity, such as 
	increasing the value of flow control pararemeters.</t>

        <t>Some designs of application do not use long-lasting transport connections. 
        Instead, they use a series of shorter connections, typically
	each using the same path. This style of application can benefit 
	from this method, and could be enhanced by allowing the application
	to receive an estimate of the expected characteristics, which could help
	to appropriately use the new connection (e.g.,
	adapting the content of quality for a video application; or anticipating
	the time taken to complete the transmission of an object). </t>
	
	<t> For example, a client using Dynamic Adaptive Streaming over HTTPS
        (DASH). Such a client might be unable to receive sufficient data
	to reach the video playback
        quality that is supported by the path, because for each video chunk,
        the transport protocol needs to independently determine the path
        capacity. The lower transfer rate is safe, but can also lead to an
        overly conservative requested rate to the sender, because clients
        often adapt their application-layer requests based on the transport
        performance (i.e., the client could fail to increase the requested
        quality of video chunks, or to fill buffers to avoid stalling playback
        or to send high quality advertisements). </t>
	      
        <t> When using Dynamic Adaptive Streaming over HTTPS (DASH), clients
	might encounter issues in knowing the available path capacity or DASH
	can encounter issues in reaching the best available video playback
	quality.  The client requests could then be adapted and specific
	traffic could utilize the previously observed path characteristics (such
	as encouraging the client to increase the quality of video chunks, to
	fill the buffers and avoid video blocking or to send high quality
	adds).</t>
      </section><!-- End of intro: Optimizing Client Requests -->
	
      <section title ="Three approaches">
	    <t>This section reviews three approaches to implement Careful Resume.</t>
     	   
	    <section anchor="sec-local_storage"
               title="Independent Local Storage of Values">
        	<t>This approach independently lets both a receiver and a sender store
        	their CC parameters: 
		<list style="symbols">
        		<t>During a 1-RTT session, the endpoint stores the RTT (as the
        		saved_rtt) and bottleneck bandwidth (as the saved_bb) together in
        		the session resume ticket. 
        		</t>

               		<t>The sender maintains a table of previously issued tickets,
               		indexed by the random ticket identifier that is used to guarantee
               		uniqueness of the Authenticated Encryption with Associated Data
               		(AEAD) encryption. Old tokens are removed from the table using the
                	Least Recently Used (LRU) logic. For each ticket identifier, the
               		table holds the RTT and bottleneck bandwidth (i.e. saved_rtt and
               		saved_bb), and also the Endpoint Token of the receiver (i.e.
               		saved_endpoint_token).</t>

               		<t>During the new session establishment (0-RTT or 1-RTT), the local endpoint waits for the first
       			RTT measurement from the remote peer. This is used to
        		verify that the current_rtt has not significantly changed from the
        		saved_rtt (used as an indication that the CC parameters are
        		appropriate for the current path).</t>

        		<t>If this RTT is confirmed, the endpoint also verifies that an IW of
        		data has been acknowledged without requiring retransmission or
        		resulting in an ECN CE-mark. This second check detects whether a path
        		is experiencing significant congestion (i.e., where it would not be
        		safe to update the cwnd based on the saved_bb). In practice, this
        		could be realized by a proportional increase in the cwnd, where the
        		increase is (saved_bb/IW)*proportion_of_IW_currently-ACKed.</t>
		</list></t>
        	<t>This solution does not allow a receiver to request the sender not to
		 use the CC parameters in the BDP Frame. If the sender does not want to store the
        	metrics from previous connections, an equivalent of the
        	tcp_no_metrics_save for QUIC may be necessary. This option could be
        	negotiated that allows a receiver to choose whether to use the saved
        	CC parameters.</t>
      	</section> <!-- End of intro: Three appoaches: sec-local_storage -->

      <section anchor="sec-using_new_token" title="Using NEW_TOKEN frames">
        	<t>A sender can send a NEW_TOKEN Frame to the receiver. The token is an
        	opaque (encrypted) blob and the receiver can not read its content (see
        	section 19.7 of <xref target="RFC9000"></xref>). The receiver sends the
        	received token in the header of an Initial packet of a later
       	 	connection.</t>
      </section> <!-- End of intro: Three appoaches: sec-local_storage -->

      <section anchor="sec-bdp_frame_section" title="BDP Frame">
        	<t>Using BDP Frames, the sender could send a set of CC parameters 
		to the receiver. The use of the BDP Frame is
        	negotiated with the receiver. The receiver can read its content. If the
        	receiver permits using the previous CC parameters, it can
        	send the BDP Frame back to the sender in an Initial packet of a later
        	connection.</t>
      </section> <!-- End of intro: Three appoaches: sec-local_storage -->
    </section> <!-- End of intro: Three appoaches-->

</section><!-- End of intro -->
	
<section anchor="sec:terms_def" title="Notations and Terms">
			<t>
			<list style="symbols">
				<t>
				BDP: defined below
				</t>
				<t>
                                CWND: the congestion window used by a
                                sender (maximum number of bytes allowed in flight by the CC)
				</t>
				<t>
				current_bb : Current estimated bottleneck bandwidth
				</t>
				<t>
                                saved_bb: Estimated bottleneck bandwidth preserved
                                from a previous connection
				</t>
				<t>
				RTT: Round-Trip Time
				</t>
				<t>
				current_rtt: Current RTT
				</t>
				<t>
                                saved_rtt: RTT preserved from a previous connection
				</t>
				<t>
				endpoint_token : Endpoint Token of the receiver
				</t>
				<t>
                                current_endpoint_token : Current Endpoint Token of the receiver
				</t>
				<t>
                                saved_endpoint_token : Endpoint Token of the
                                receiver preserved from a previous connection
				</t>
				<t>
                                remembered CC parameters: a combination
                                of saved_rtt and saved_bb
				</t>
				<t>
				secured hash : hash generated by the sender using 
				a list of CC parameters that it selected. The sender
				uses a private key to protect the hash. 
				</t>
			</list>
			</t>
	
			<t>
                	<xref target="RFC6349"></xref>
                        defines the BDP as follows: "Derived from
                        Round-Trip Time (RTT) and network Bottleneck
                        Bandwidth (BB), the Bandwidth-Delay Product
                        (BDP) determines the Send and Received Socket
                        buffer sizes required to achieve the maximum
                        TCP Throughput."
                        This document considers the BDP
                        estimated by a sender for the path to the receiver. This includes all
                        buffering along this network path.
		        The estimated BDP is related to the volume of 
			bytes in flight and the measured path RTT.
			</t> 
                        
			<t>
			A QUIC connection is allowed to use the procedure detailed in 
                        <xref target="RFC6349"></xref>
                        to measure the BDP, but is permitted to choose another
				method <xref target="RFC9002"></xref>.</t>
			
			<t>A sender might be able to also utilise
                        other information to estimate the BDP. 
			Congestion controllers, such as CUBIC or RENO, could estimate the
        saved_bb and current_bb values by combining the
        cwnd/flight_size and the minimum RTT. A different method could be used
        to estimate the same values when using a rate-based congestion
        controller, such as BBR <xref target="I-D.cardwell-iccrg-bbr-congestion-control"></xref>.</t>
			<t>It is important to
        consider whether a method could result in over-estimating the
        bottleneck bandwidth, and the preserved values therefore ought to be used
				with caution.</t>
 		
	<section anchor="sec:req_language" title="Requirements Language">
			<t>
                        The keywords "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 
                        <xref target="RFC2119"></xref>
                        <xref target="RFC8174"></xref>
                        when, and only when, they appear in all capitals, as
                        shown here.
			</t>
			<t>
					Variable-length integer encoding is defined in section 16 of <xref target="RFC9000"></xref>. </t> 
	</section> <!-- Notations and Terms: End of Requirements Language -->
	
</section> <!-- End of Notations and Terms -->

<section anchor="sec:bdp_frame_section" title="BDP Frame">

		<t>
                This section describes the use of a new Frame, the BDP_FRAME.
                The BDP_FRAME can be utilized by the congestion controller
                and its data is not be limited by flow control limits. The sender and the receiver MAY
                send multiple BDP_FRAMEs in both 1-RTT and 0-RTT connections. 
		</t>

		<section anchor="sec:bdp_metadata" title="BDP_FRAME Format">

			<t>
        	        A BDP_FRAME is formatted as shown in <xref target="fig:bdp_frame_format"></xref>.
			</t>

<figure anchor="fig:bdp_frame_format" title="BDP_FRAME Format">
<artwork>
BDP_FRAME {
  Type (i) = 0xXXX,
  Hash (...),
  Lifetime (i),
  Saved BB (i),
  Saved RTT (i),
  Saved Endpoint Token (...)
}
</artwork>
</figure>
			<t>
                	A BDP_FRAME contains the following fields: 
                	<list style="symbols">
			<t>
			Hash (secured_hash): 
			The secured_hash is generated by the sender using other 
			CC parameters from the BDP_FRAME. The sender encrypts the hash so 
			that the receiver can not read it. 
			</t>
			<t>
                        Lifetime (extension_lifetime):
                        The extension_lifetime is a value in milliseconds,
                        encoded as a variable-length integer. This follows the design
                        of a NewSessionTicket of TLS  <xref target="RFC8446"></xref>.
			This represents the validity in time of this extension.
			</t> 

			<t>
                        Saved BB
                        (saved_bb): The
                        saved_bb is a value in bytes, encoded as a variable-length integer. The
                        bottleneck bandwidth estimated for the previous connection by
			the sender.
			Using the previous values of bytes_in_flight defined in 
                        <xref target="RFC9002"></xref>
			can result in overshoot of
			the bottleneck capacity, and is not advised.
			</t>

			<t>
                        Saved RTT
                        (saved_rtt): The
                        saved_rtt is a value in
                        milliseconds, encoded as
                        a variable-length integer.
                        This could be set to 
                        the minimum RTT (min_rtt). The
                        saved_rtt can be set to the
                        min_rtt.  NOTE: The min_rtt defined in 
                        <xref
                        target="RFC9002"></xref>, does not track a
                        decreasing RTT: therefore the
                        min_rtt reported might be larger than the
                        actual minimum RTT measured during the 1-RTT
                        connection.
			</t>
			<t>
                        Saved Endpoint Token (saved_endpoint_token) : The
			saved_endpoint_token (More details in <xref target="I-D.kuhn-tsvwg-careful-resume"></xref>). 
			</t>
			</list>
			</t>
			
		    <t>
   		Note: The Endpoint Token is defined in <xref target="I-D.kuhn-tsvwg-careful-resume"></xref>, 
		and is discussed in the context of this protocol exchange in a later section.
	        </t>
	<!--- eEd of main part of BDP Frame, subsections follow -->

	<section anchor="sec:bdp_activation" title="Extension activation">
			<t>
                	The receiver can accept the transmission
                	of BDP_FRAMEs from the sender by using
                	the enable_bdp transport
                	extension.
			</t>
			<t>
                	enable_bdp (0xTBD): in the 1-RTT
                	connection, the receiver indicates to the
                	sender that it wishes to receive BDP
                	extension Frames. The default value is 0.
			In this specification, enable_bdp values larger than 3 are reserved for future,
			and the receipt of these values MUST be treated
                	as a connection error of type TRANSPORT_PARAMETER_ERROR <xref target="RFC9000"></xref>.
			</t>
			<t><list style="symbols">
				<t>
                	        0: Default value. If the receiver
                	        does not send an enable_bdp parameter,
                	        the sender considers that the
                	        receiver does not support, or does
                	        not wish to activate, the BDP
                	        extension.
				</t>
				<t>
                	        1: The receiver indicates to the
                	        sender that it wishes to receive
                	        BDP_FRAMEs and activates the
                	        the optimization.
				</t>
				<t>
                	        2: The receiver indicates that it
                	        does not wish to receive BDP
                	        Frames but activates the
                	        optimization.
				</t>
				<t>
                	        3: The receiver indicates that it
                	        wishes to receive BDP_FRAMEs, but
                	        does not activate the
                	        optimization.
				</t>
			</list></t>
			<t>
                	This Transport Parameter is encoded as
                	described in Section 18 of 
                	<xref target="RFC9000"></xref>.
			</t>
	</section> <!-- End of Extension activation -->

	<section title="Using the CC parameters with Care">
      		<t>Care is needed in the use of any temporal information
 		to assure safe use of the Internet and to be robust to changes
 		in traffic patterns, network routing and link/node failures.
 		There are also cases where using the CC parameters of a previous
        	connection are not appropriate, and a need to evaluate the potential
       		for malicious use of the method.
		The specification for the QUIC transport protocol <xref
      		target="RFC9000"></xref> therefore notes "Generally, implementations are advised
		to be cautious when using previous values on a new path." </t>
		<t>Careful exploitation of the CC parameters is discussed in <xref target="I-D.kuhn-tsvwg-careful-resume"></xref>.</t>
      	</section>  <!--- end of use with care --> 
		
	<section title="Saving Path CC Parameters">
		<t>Three approaches are compared:</t>
		<list>
			<t>(1) The saved CC parameters are stored at the sender 
        		("Local storage") and is never sent to a receiver;</t>
			<t>(2) Some CC parameters are transmitted to the receiver,
        		which can be used when reconnecting, but the receiver cannot read the
        		CC parameters received from the sender ("NEW TOKEN");</t>
			<t>(3) the saved CC parameters are
        		transmitted to a receiver, which can use it when reconnecting.
        		The receiver can read the CC parameters to accept or not the use of
			CC parameters (a.k.a. "BDP extension").</t>
		</list>
	</section> <!-- End of BDP Frame: Saving path CC Parameters -->
</section>	 <!-- End of BDP Frame -->

<section anchor="sec:discuss" title="Discussion">
		<t>
                A receiver using the BDP_FRAME extension has the choice
                of accepting the reuse of the previous CC parameters,
		or requesting the sender to not reuse the previous CC parameters.
		</t>
		<t>This extension MUST NOT provide an opportunity for the current
      		connection to be a vector for an amplification attack. The QUIC address
      		validation process, used to prevent amplification attacks, SHOULD be
      		performed <xref target="RFC9000"></xref>.</t>

		<t>
                The CC parameters are measured by
                the sender during a previous
                connection to the same receiver. The BDP extension is
                protected by the mechanism that
                protects the exchange of the 0-RTT
                transport parameters. For 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="RFC9001"></xref>.
                This provides a way for the sender to
                verify that the CC parameters proposed by the
                receiver are the same as those that the sender
                sent to the receiver during a previous
                connection.
		</t>

		<t>
                The sender SHOULD NOT trust
                the content of the BDP Frame received from the receiver. 
		Even if the QUIC 
                packets containing the BDP Frame are
                encrypted, a receiver could modify the
                values within the extension and
                encrypt the QUIC packet.
                One way to avoid this is for a sender to also 
                store the saved_rtt and saved_bb parameters.
		Another way to avoid this is to use the secured hash generated by the sender. If the receiver 
		modifies a CC parameter, the result of the hash would be different. The sender should then 
		avoid exploiting previously estimated CC parameters. 
		</t>
		
	<section title="Interoperability and Use Cases">
          	<t>A sender that stores a resumption ticket for each receiver to
          	protect against replay on a third party, it could also store the
          	Endpoint Token (i.e., saved_endpoint_token) and CC parameters (i.e.,
          	saved_rtt and saved_bb) of a previous connection.</t>

          	<t>When the BDP Frame extension is used, locally stored CC
         	parameters at the sender can provide a cross-check of the CC
          	parameters sent by a receiver. The sender can anyway enable a safe
          	jump, but without the BDP Frame extension. However, using the CC
          	parameters enables a receiver to choose whether to request this or
          	not, enabling it to utilize local knowledge of the network
          	conditions, connectivity, or connection requirements.</t>

		<t>Four cases are identified:
		<list style="numbers">
			<t> The network path has changed and the new path is
			different. This might be evident from a change of local interface, a change
			in the client or sender IP address, or similar indication from the network.
			Using the saved CC parameters could increase congestion.</t>
			<t> The network path has changed, but the new path is not known to be
			different. This case might be accompanied by a change in the RTT, or
			evident by loss observed at the start of the new connection and
			the saved CC parameters is not appropriate. </t>
			
			<t> The network conditions have changed and it is discovered that
			the current capacity is
			less than the previously estimated bottleneck bandwidth. Using the saved
			CC parameters would then increase congestion, and the flow needs
			to adjust to a lower safe rate; </t>

			<t> The stored CC parameters is too old. In this case, it is no longer
			be reasonable to expect the path to have same characteristics, and the
			the saved CC parameters is no longer appropriate.</t>
		</list></t>

		<t>In all these case, the
		Careful Resume method is not be used, and a sender needs to return to
		a normal CC behavior.  The method can still be used to characterize the new path,
		enabling later flows to use this method.</t>
	
         	<t>{XXX-Editor-note: Text to be improved: Storing local values
         	related to the BDP would help improve the ingress for new
          	connections, however, not using a BDP Frame extension could reduce
          	the interest of the approach where (1) the receiver knows the BDP
          	estimation at the sender, (2) the receiver decides to accept or reject
          	ingress optimization, (3) the receiver tunes application level
          	requests.}</t>

</section>
	
		
		
         <section anchor="sec:discuss_bdp_default"
               title="Trade-off between the different solutions">
	       <!-- Subsection: Use Cases: Tradeoff -->
        	<t>This section provides a description of several implementation
       		options and discusses their respective advantages and drawbacks. </t>

        	<t>While there are some discussions for the solutions regarding
        	Rationale #2, the sender MUST consider Rationale #1 - Solution #2 and
        	avoid Rationale #1 - Solution #1: the sender MUST implement a safety
        	check to measure whether the saved CC parameters (i.e. saved_rtt and
        	saved_bb) are relevant or check that their usage would not cause
		 excessive congestion over the path. </t>

        	<t>
        	The method used to store the CC parameters
        	SHOULD be associated with a lifetime. If no lifetime expiration
        	is provided, safety guidelines should help guarantee that the
        	session resumption is careful. While the sender may not specify
        	how long the data is stored at its level (for the local storage
        	solution), BDP extension Frame proposes a extension_lifetime
        	parameter and "token SHOULD have an expiration time" 
        	<xref target="RFC9000"></xref>.
        	</t>
       </section><!-- Use Cases: Tradeoff -->
    </section> <!--  Use Cases -->

    <section title="Identifying the Path">

    		<t>
    		In a simple network scenario, the sending endpoint could use the IP
    		source address to identify a path. This could work when one
    		globally-allocated IP address is set per interface. There are many cases
    		where the IP address would not an acceptable to identify a path. Section
    		8 of <xref target="RFC9040"></xref> describes cases where the IP address is not a suitable
   		value when performing TCP control block sharing. In general the IP
    		address of the sender is made public in the network-layer header of IP
    		packets. When sharing internal state, <xref target="RFC6973"></xref> identifies relevant
    		privacy considerations.</t>

    		<t>
    		Examples of network uses where a source address is not a suitable endpoint
    		token include:
    		<list style="symbols">
	    		<t>The sending endpoint might not be identifiable remotely from its
            		IP address because a device on the network path translates the
            		address using a form of NAT/NAPT. In this case, a private IP
            		address might be used, which does not identify a specific
	    		endpoint.</t>
	    		<t>In some cases, a sender can choose to vary the source address
            		over time to avoid likability in the observable IP header, e.g.,
            		because the used source address embeds private information, such as
           		 the endpoint's MAC address/EID.
           		</t>
    		</list> </t>
   		<t>
   		Note: There are use-cases where for the purpose of identifying a path,
   		the token does not need to be globally unique, but needs to be
    		sufficiently unique to prevent attempts to misrepresent the path being
    		used such as an attack on the congestion controller. Using a smaller
    		size of token can add to the ambiguity set, reducing this likability.
		</t>
     	<section title="Example use of an Endpoint Token"> <!-- subsection of Identify path-->
		<t>
			NOTE: A different Endpoint Token is used for each direction of transmission. A
			receiver might decide not to provide an Endpoint Token to a sender, to
       			avoid exposing additional linkable information (but also preventing use
       			of any mechanism that relies on the token).
       		</t>

    		<t>
    		The sender computes an Endpoint Token that seeks to uniquely identify
    		the path that it uses to communicate with the receiver (1) this is
    		associated with the path information it sends. The Endpoint Token ought
    		to be encrypted to avoid sending linkable information observable
   	 	eavesdroppers on the path. The receiver stores the path information
    		together with the Endpoint Token, together with the sender's
    		address/name (2). When the receiver later wishes the sender to use the
    		stored path information it returns the information to the sender (3)
    		together with the Endpoint Token. The sender recomputes the Endpoint
    		Token and compares this with the received Endpoint Token before using
    		the CC parameters. The Endpoint Token ought to be encrypted while in
    		transit on the path to avoid provideing an eavesdropper on the path 
		with linkable information.
    		</t>

    		<list style="numbers">
	    	    <t>The Sender transmits the Endpoint Token to the Receiver
	            </t>
	            <t>The Receiver holds an Endpoint Token 
	            </t> 
	            <t>The Receiver transmits the Endpoint Token to the Sender 
	            </t>
    		</list>
	</section> <!-- Example use of an Identify path: Endpoint Token -->    
		
        <section title="Security Related to use of the Endpoint Token">
    	<t>
   	A number of security-related topics have been discussed, mostly
    	concerning the potential exposure of the identity on the path. This information can
   	also be visible in the IP source address or higher-layer data, but can
   	be hidden from a remote endpoint using methods such as MASQUE proxy.
    	When used to inform the transport system using a layered proxy, the
    	transport endpoint token refers to the endpoints of the outer QUIC
    	header, and hence the proxy itself, not the end-to-end communication
    	relayed by the proxy.
    	</t>
    	<t>
    	A sender might decide to not use this method if it has a stroing requirement to prevent
    	flows being linkable with previous flows to the same endpoint. A
    	decision not to provide an Endpoint Token necessarily prevents the
    	sender from requesting the receiver to return path information to allow
    	the same CC parameters to be re-used, potentially strengthening
    	privacy but consequently eliminating any performance benefits.
    	</t>
    </section> <!-- End of: Endpoint Token Sec -->

    </section> <!-- End of Identify path -->

</section> <!-- End of Discussion -->
	
<section anchor="sec:acknowledgments" title="Acknowledgments">
    <t>
    The authors would like to thank Gabriel Montenegro,
    Patrick McManus, Ian Swett, Igor Lubashev, Robin Marx,
    Roland Bless and Franklin Simo for their fruitful
    comments on earlier versions of this document.</t>
    <t>
    The authors would like to particularly thank Tom Jones
    for co-authoring previous versions of this document.
     </t>
</section> <!-- ACK -->

<section anchor="sec:IANA" title="IANA Considerations">
    <t>{XXX-Editor note: Text is required to register the BDP Frame and the enable_bdp
    transport parameter. Parameters are registered using the procedure
    defined in <xref target="RFC9000"></xref>.}</t>

    <t> TBD: Text is required to register the BDP_FRAME and the
    enable_bdp transport parameter. Parameters are
    registered using the procedure defined in 
    <xref target="RFC9000"></xref>.
    </t>
</section><!-- IANA -->

<section anchor="sec:security" title="Security Considerations">
    <t>
    Security considerations for the CC method are discussed 
    in the Security Considerations section of Careful Resume.
    </t>
	
    <section title="Protecton from Malicious Receivers">
        <t>The sender MUST check the integrity of the saved_rtt and saved_bb
        parameters received from a receiver.</t>

        <t>There are several solutions to avoid attacks by malicious receivers:
        <list style="symbols">
            <t>Solution #1 : The sender stores a local estimate
            of the bottleneck bandwidth and RTT parameters as the saved_bb and
            saved_rtt.</t>

            <t>Solution #2 : The sender sends the estimate of
            the bottleneck bandwidth and RTT parameters to the receiver as the
            saved_bb and saved_rtt in a block of CC parameters that is
            authenticated. These CC parameters also could be encrypted by the
            sender. The receiver resends the same CC parameters for a new
            connection. The sender can use its local key information to
            authenticate the CC parameters, without needing to keep a local
            copy.</t>

            <t>Solution #3 : This approach is the same as
            above, except that the sender provides an estimate of the saved_rtt
            and saved_bb parameters in a form that may be read by the receiver.
            Using the security mechanisms provided in this document,
            the sender can verify that the receiver did not change the CC parameters inside the frame.
	    The receiver can 
            read, but not modify, the saved_rtt and saved_bb parameters and
            could enable a receiver to decide whether the new
            CC parameters are thought appropriate, based on receiver-side information about
            the network conditions, connectivity, or needs of the new
            connection.</t>
          </list></t>

      </section> <!-- End of Safety: Malicous Clients -->
	
      <section anchor="sec-bdp_frame"
               title="Rationale behind the different implementation options">
        <t>The NewSessionTickets message of TLS can offer a solution. The
        proposal is to add a 'bdp_metada' field in the NewSessionTickets,
        which the receiver is able to read. The only extension currently defined
        in TLS1.3 that can be seen by the receiver is max_early_data_size (see
        Section 4.6.1 of <xref target="RFC8446"></xref>). However, in the
        general design of QUIC, TLS sessions are managed by a TLS stack.</t>

        <t>Three distinct approaches are presented: sending an opaque blob to
        the receiver that the receiver may return to the sender when establishing
        a future new connection (see <xref
        target="sec-using_new_token"></xref>), enabling local storage of the
        CC parameters (see <xref target="sec-local_storage"></xref>) and a
        BDP Frame extension (see <xref
        target="sec-bdp_frame_section"></xref>).</t>
      </section> <!-- sec -->
</section> <!-- End of sec considerations -->
	</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">		
			<?rfc include="reference.RFC.2119.xml"?>
			<?rfc include="reference.RFC.6349.xml"?>
			<?rfc include="reference.RFC.6973.xml"?>
			<?rfc include="reference.RFC.8174.xml"?>
			<?rfc include="reference.RFC.8446.xml"?>
			<?rfc include="reference.RFC.9000.xml"?>
			<?rfc include="reference.RFC.9001.xml"?>
			<?rfc include="reference.RFC.9002.xml"?>
			<?rfc include="reference.RFC.9040.xml"?>
		</references>
			
		<references title="Informative References">
			<?rfc include="reference.I-D.cardwell-iccrg-bbr-congestion-control.xml"?>
			<?rfc include="reference.I-D.kuhn-tsvwg-careful-resume.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>
			--> 
		</references>
		
		<section anchor="appendix-1" title="Comparing BDP-Frame Solutions">
			<figure anchor="fig-summary" title="Comparing BDP-Frame Solutions">
            <artwork><![CDATA[
+---------+-----------+----------------+---------------+-----------+
|Rationale| Solution  |    Advantage   |    Drawback   |  Comment  |
+---------+-----------+----------------+---------------+-----------+
|#2       |#1         |                |               |           |
|Malicious|Local      |Enforced        |A receiver is  |           |
|receiver |storage    | security       | unable        |           |
|         |           |                | to reject     |           |
|         |           |                |Malicious      |           |
|         |           |                | sender could  |           |
|         |           |                | fill a        |           |
|         |           |                | receive buffer|           |
|         |           |                |Limited        |           |
|         |           |                | use-cases     |Section 4.2|
|         +-----------+----------------+---------------+-----------+
|         |#2         |                |               |           |
|         |NEW_TOKEN  |Save resource   |A malicious    |           |
|         |           | at sender      | receiver could|           |
|         |           |Opaque token    | change token  |           |
|         |           | protected      | even if       |           |
|         |           |                | protected     |           |
|         |           |                |A malicious    |           |
|         |           |                | sender could  |           |
|         |           |                | fill the      |           |
|         |           |                | receive buffer|           |
|         |           |                |sender may not |           |
|         |           |                | trust receiver|Section 4.3|
|         +-----------+----------------+---------------+-----------+
|         |#3         |                |               |           |
|         |BDP        |Extended        |A malicious    |           |
|         |extension  | use-cases      | receiver could|           |
|         |           |Save resource   | change BDP    |           |
|         |           | at sender      | even if       |           |
|         |           |A receiver can  | protected     |           |
|         |           | read and decide|A sender may   |           |
|         |           | to reject      | not trust a   |           |
|         |           |BDP extension   | receiver      |           |
|         |           | protected      |               |           |
|         |           |                |               |Section 4.4|
+---------+-----------+----------------+---------------+-----------+

{XXX-Editor-Note: Need to clarify the text around changing 
the authenticated token.}

]]></artwork>
</figure>
		</section> 
	</back>
</rfc>
