<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="info"
     docName="draft-du-tcpm-ack-rate-adjustment-in-receiver-00"
     ipr="trust200902">
  <front>
    <title abbrev="Adjusting ACK Frequency in Receiver">ACK Frequency
    Adjustment in Receiver</title>

    <author fullname="Zongpeng Du" initials="Z." surname="Du">
      <organization>China Mobile</organization>

      <address>
        <postal>
          <street>No.32 XuanWuMen West Street</street>

          <city>Beijing</city>

          <code>100053</code>

          <country>China</country>
        </postal>

        <email>duzongpeng@foxmail.com</email>
      </address>
    </author>

    <date month="" year=""/>

    <area>WIT Area</area>

    <workgroup>TCPM Working Group</workgroup>

    <keyword>ACK</keyword>

    <abstract>
      <t>This document describes a mechanism for adjusting ACK frequency in
      the receiver.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>In <xref target="I-D.ietf-tcpm-ack-rate-request"/>, it is allowed
      that a sender to request the ACK rate to be used by a receiver. It is a
      straightforward way to modify the frequency of ACK.</t>

      <t>However, in some scenario, it would be useful to enable the receiver
      to modify the frequency of ACK directly without the need of the signal
      from the sender. For example, for a long fat flow, the receiver would
      receive packets of the flow continuingly. Thus, the receiver can predict
      the arrivals of the packets of the flow, and accordingly modify the
      frequency of ACK.&#8204;</t>
    </section>

    <section anchor="ACKRateModification"
             title="Procedure of ACK Frequency Modification">
      <t>For a transport session with long duration and high bandwidth, the
      receiver can predict the arrivals of the packet of the flow. According
      to the statistic of the arrive time of the packets, the receiver can
      speculate about the network status for the flow.</t>

      <t>If every packet arrives in order, and at a relatively reasonable
      interval, the receiver can adjust the ACK frequency. For example, the
      receiver typically sends an ACK for at least every second segment
      received in a stream of full-sized segments, and it can be changed to
      send an ACK at least every third segment received in a stream of
      full-sized segments. An even bigger value would also be possible here,
      for example four segments.</t>

      <t>If all the packets of the stream have a large size, for example a
      full-sized one is about 1500 bytes, the above descriptions would be
      simpler. The receiver would typically return an ACK after receiving
      every two packets, and it can be changed to return an ACK after
      receiving every three or more packets.</t>

      <t>As an option in this document, the receiver can predict the receiving
      time of each packet. If the next packet is received within the predicted
      time interval, we regards the prediction as verified. According to the
      prediction result, we can change the policy of responding ACK for the
      future packets. In a certain period, if all the predictions are
      verified, the ACK rate could decrease, and if not all the prediction are
      verified, the ACK rate would increase. Of course, if an out-of-order
      packet is detected, an ACK will be triggered immediately <xref
      target="RFC5681"/>.</t>

      <t>Hence, the policy of responding ACK in the receiver for a TCP stream
      could be self-adjusted. A general procedure is described as
      follows:<list style="numbers">
          <t>As usual, the receiver would return an ACK every two packets.</t>

          <t>If the predictions of successive N packets are all verified, the
          receiver can change the policy of returning ACK to a less frequent
          one, for example, returning an ACK after receiving every three
          packets. N is an integer greater than 1.</t>

          <t>If an out-of-order packet is detected, an ACK will be triggered
          immediately, and the policy is changed back to the traditional one.
          Normally, it will go back to step 1 after a few moment.</t>
        </list>Alternatively, the receiver can also predict multiple packets
      would be received within a certain period, and afterwards trigger the
      modification of the policy of responding ACK for the packets of the
      stream that would be received in future. The procedure is similar to the
      above one.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>TBD.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>TBD.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>TBD.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.5681"?>

      <?rfc include="reference.I-D.ietf-tcpm-ack-rate-request"?>
    </references>
  </back>
</rfc>
