<?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="std" docName="draft-kuhn-quic-bdpframe-extension-03" 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>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 Congestion Control (CC) parameters related to the
        path characteristics between the receiver
        and the sender during a connection.
		These CC parameters allow a receiver to prepare to use any additional
		capacity that is made available when using Careful Resume.
        It also allows a receiver to request that
		previously computed CC parameters, are not used when
        the receiver has additional information
		about the current path or traffic that is 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.ietf-tsvwg-careful-resume"></xref>
    to allow
    sender-generated CC parameters to be stored at the receiver.
    Transfering the CC parameters to a receiver, can release the
    sender from needing to retain CC parameter state for each
    receiver. This also allows
    a receiver to implement a policy that informs a sender
    whether the receiver desires the sender to reuse previously saved CC parameters.</t>
    
    <t>
    It 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, measured capacity
        and receiver Endpoint Token are computed and are respectively
        stored as the saved_rtt, saved_capacity and saved_endpoint_token.
        These are placed within a BDP_FRAME.
        The sender also computes a secured hash over
        these CC parameters and sends this within the BDP_FRAME.</t>
        
        <t>The receiver can read the non-encrypted portion of the BDP_FRAME parameters.
            It cannot verify the hash and is not permitted
            to modify any CC parameters.</t>
        
        <t>At a later time, the receiver sends the BDP-FRAME to
                the sender to re-use previously computed CC parameters.</t>
 
        <t>Upon reception, the sender MUST verify the hash, and only use
        the CC parameters when valid. This is to prevent a receiver
        from modifying the parameters.
        The sender is able to utilise the CC parameters in a received
        BDP_FRAME when it is connected to the same endpoint.</t>
    </list>
    </t>

    <!--{NOTE: PLEASE CHECK NEXT PARA - restructing of sections may have modified this.}</t>
     <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. -->

    <section title ="Three approaches">
        <t>This section reviews three approaches to implement the storage of CC parameters:
        <list>
          <t>(1) The saved CC parameters are stored at the sender
              ("Local storage") and are not sent to a receiver, this does not use a BDP_Frame;</t>
          <t>(2) The saved  CC parameters are transmitted to the receiver in a BDP_FRAME,
              these can be used when reconnecting, but a receiver does not read the
              CC parameters;</t>
          <t>(3) The saved CC parameters are
              transmitted to a receiver in a BDP_Frame,
              which can use these when reconnecting.
              The receiver can also read, but not modify,
              the CC parameters to accept or not the use of these parameters.</t>
        </list></t>
    </section> <!--- still intro, end of 3 approaches -->
    
   <!--  <section anchor="sec-local_storage" title="Local Storage of Values">
          <t>Local Storage allows both a sender to store saved CC parameters:
          <list style="symbols">
              <t>-During a 1-RTT session, the endpoint stores the RTT (as the
              saved_rtt) and path capacity (as the saved_capacity) together in
              the session resume ticket.

                     <t>The sender maintains a table of previously stored CC parameters.
                      Old enteries could be removed from the table using the
                  Least Recently Used (LRU) logic.</t>
          </list></t>
          <t>If a sender does not wish to store the
          metrics from previous connections, an equivalent of the
          tcp_no_metrics_save for QUIC could be used. This option could be
          negotiated to allow a receiver to choose whether to use any saved
          CC parameters.</t> -->

    <section anchor="sec-using_new_token" title="Using the BDP_FRAME">
          <t>The use of the BDP_Frame is negotiated with the receiver.</t>
          <t> A sender can send a BDP_FRAME to the receiver  with
        CC parameters that were collected during the Careful Resume Observe Phase.</t>
      <!--The data in the frame can be an
          opaque (encrypted) blob and the receiver can not read its content (see
          section 19.7 of <xref target="RFC9000"></xref>).-->
        <t>The receiver can read the BDP_Frame content and later decide to
        send the BDP_FRAME back to the sender in the header of an Initial packet, or later in a
        connection. This frame needs to be received during the Reconaisance Phase
        of a Careful Resume sender.</t>
    </section> <!-- End of intro: Three appoaches: sec-local_storage -->

    <section anchor="subsec:rationale_client" title="Optimizing Client Requests">
        <t>Where the receiver is aware it is using a path with high Bandwidth-Delay Product (BDP),
        it can also adapt other protocol parameters
        to better utilize the available capacity, e.g., to estimate a
        larger size for the flow credit.</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
        when the receiver provides
        an estimate of the expected characteristics (e.g., to
        adapt the content of quality for a video application; or anticipate
        the time taken to complete the transmission of an object).
        An example scenario considers a client using Dynamic Adaptive Streaming over HTTPS
        (DASH) that is unable to receive sufficient data
        to reach the desired video playback
        quality supported by the path, because for each video chunk,
        the transport CC method needs to independently determine the path
        capacity. In this example,
        a lower transfer rate is safe, but could lead to an
        overly conservative requested rate when the rate is
        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).
        These client requests could then be adapted based on the previously
        observed path characteristics,
        enabling a client to increase the requested quality of video chunks, to
        fill receiver buffers and avoid stalling playback.</t>
    </section><!-- End of intro: Optimizing Client Requests -->

</section><!-- End of intro -->
<!-- ***************************************************************** -->

<section anchor="sec:terms_def" title="Notation and Terms">
    <t> <list style="symbols">
        <t>BDP: Bandwdith Delay Product of the path (maximum path capacity);</t>
        <t>saved_capacity: The capacity preserved from a
        previous connection;</t>

        <t>saved_rtt: The preserved minimum RTT, corresponding to the minimum
        of a set RTT of measurements taken at the time when the
        saved_capacity was estimated;</t>

        <t>endpoint_token: An Endpoint Token for a receiver;</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>
			 		
	<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 Notation and Terms -->
<!-- ***************************************************************** -->

<section anchor="sec-bdp_frame_section" title="BDP_Frame">
    <t>This section describes the use of a new QUIC Frame, the BDP_FRAME.
    This can be utilized by the congestion controller in the Careful Resume method.</t>

    <t>Sending a BDP_FRAME 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.
    The rate of update SHOULD be limited (e.g., much less frequent than once for several RTTs).</t>

        <t>The format of a BDP_FRAME is 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 Capacity (i),
  Saved RTT (i),
  Saved Endpoint Token (...)
}
</artwork>
</figure>
    <t>This contains the following fields:
    <list style="symbols">
        <t>Hash (secured_hash):
        The secured_hash is generated by the sender using
        CC parameters from the BDP_FRAME. The sender encrypts the hash to
        prevent the receiver from reading it, and allow the sender bto verify
        that the contents were not changed.</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 capacity estimate (saved_capacity): The
        saved_capacity is a value in bytes, encoded as a variable-length integer. The
        available capacity can be 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 ought to be used carefully.
        It is advised to not only use the amount of bytes in flight,
        but also the goodput.</t>

        <t>Saved RTT (saved_rtt): The saved_rtt is a value in
        milliseconds, encoded as a variable-length integer.
        The saved_rtt is 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) :
        Note: The Endpoint Token is defined in <xref target="I-D.ietf-tsvwg-careful-resume"></xref>,
        and is discussed in the context of this protocol exchange in a later section.</t>
    </list> </t>
    <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 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>
        
        <t> If the receiver activates the extension,
        it agrees to receive and read BDP_FRAMEs.
        If the receiver activates the optimization, 
        it allows the sender to utilise the previously computed CC parameters.
        A receiver could then  perform session resumption optimization 
        without actually reading the previous CC parameters.</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.ietf-tsvwg-careful-resume"></xref>.</t>
    </section>  <!--- end of use with care -->
</section> <!-- End of BDP_Frame -->
<!-- ***************************************************************** -->

<section anchor="sec:discuss" title="Discussion">
    <t>A receiver using the BDP_FRAME extension has the choice
    of allowing the reuse of the previous CC parameters,
    or requesting the sender to not reuse these 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 by observing a previous
    connection to the same receiver. During transmission,
    the BDP_Frame is
    protected by the mechanism that protects the exchange of the 0-RTT
    transport parameters. For version 1 of QUIC, the this 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>.
    It 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>
    Although a BDP_Frame is
    encrypted on transmission, a receiver could modify the
    value of the received CC parameters.
    The sender detects this by adding a secured hash over the
    CC parameters.
    If the receiver modifies any CC parameter,
    the result of the hash would be different.
    If a sender fails to veridy the secured hash,
    it MUST not use the CC parameters.</t>

    <t>An example of an implementation where the sender computes an
    Endpoint Token that seeks to uniquely identify the receiver
    is provided in <xref target="sec_example-token"></xref>.
    The implementation details are independent from the specification of BDP_Frame.</t>
	
    <section title="Interoperability and Use Cases">
        <!--A sender that stores a resumption ticket for each receiver to
            protect against replay on a third party, could also store the
            Endpoint Token (i.e., saved_endpoint_token) and CC parameters (i.e.,
            saved_rtt and saved_capacity) of a previous connection.-->

            <!--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. A Careful Resume sender can anyway enable a safe
            jump, but without using 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>Four cases are identified where Careful Resume is not appropriate and
        using the saved CC parameters could increase congestion:
        
        <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.
            The saved CC parameters are not appropriate.</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.
            This case could be detected in the Careful Resume Reconaissance Phase.
            The saved CC parameters are not appropriate to the current path.</t>

            <t> The network conditions have changed and it is discovered that
            the current capacity is
            less than the previously estimated bottleneck capacity. 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 are too old. It is no longer
            reasonable to expect the path to have same characteristics, and the
            the saved CC parameters are not appropriate.</t>
        </list></t>

        <t>In all these cases, a sender needs to return to
        the normal CC behavior.  The method can still be used to characterize the new path,
        enabling later flows to use the Careful Resume method.</t>
    </section> <!-- Subsection on Interop -->

    <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 linkability in the observable IP header, e.g.,
            when the source address embeds private information, such as
            an endpoint's MAC address/EIDID.</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>

        <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>
    </section>

    <section anchor="sec_example-token" title="Example use of an Endpoint Token"> <!-- subsection of Identify path-->

        <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 to
        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.

        <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> </t>
    </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 identified
    	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 strong 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 Discussion -->
<!-- ************************************************************************** -->

<section anchor="sec:acknowledgments" title="Acknowledgments">
    <t>
    The authors 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 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_capacity
        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 capacity and RTT parameters as the saved_capacity and
            saved_rtt.</t>

            <t>Solution #2 : The sender sends the estimate of
            the capacity and RTT parameters to the receiver as the
            saved_capacity and saved_rtt in a block of CC parameters that is
            authenticated by the secure hash including local key 
            information. The parameters may be encryptedd and
            are not read by the rceeiver.
            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 of the parameters.</t>

            <t>Solution #3 : This approach is the same as
                above, except the receiver can
                read the saved_rtt and saved_capacity 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.
                The sender will verify that the receiver did not change
                the CC parameters inside the frame.
            </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 and a BDP_Frame extension
        (see <xref target="sec-bdp_frame_section"></xref>).</t>
      </section>  -->

</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.8174.xml"?>
			<?rfc include="reference.RFC.9000.xml"?>
		</references>
			
		<references title="Informative References">
            <?rfc include="reference.RFC.9040.xml"?>
           <?rfc include="reference.RFC.6973.xml"?>
           <?rfc include="reference.RFC.8446.xml"?>
           <?rfc include="reference.RFC.9001.xml"?>
           <?rfc include="reference.RFC.9002.xml"?>

	<!--<?rfc include="reference.I-D.cardwell-iccrg-bbr-congestion-control.xml"?> -->
			<?rfc include="reference.I-D.ietf-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="Changes" title="Change Log">
            <t> This section to be rmeoved prior to publication.
            <list>
                <t>-00 Introduced session tickets and BDP_Frames</t>
                <t>-01 Reviewed receiver actions when a receiver holds CC parameters</t>
                <t>-02 Interim version to align with terminology in Careful Resume</t>
                <t>-03 Rewritten to align with Careful Resume and use the BDP_Frame method. Removed annexe 1, and discussion of session tickets, prefering BDP Frames.</t>
            </list>
            </t>
       </section>

	</back>
</rfc>
