<?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="std" docName="draft-caulfield-cdni-rate-pacing-00"
     ipr="trust200902">
  <front>
    <title abbrev="CDNI Rate Pacing">CDNI Rate Pacing</title>

    <author fullname="Matt Caulfield" initials="M." surname="Caulfield">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street>1414 Massachusetts Ave</street>

          <city>Boxborough</city>

          <code>01719</code>

          <region>MA</region>

          <country>USA</country>
        </postal>

        <phone>+1 978 936 9307</phone>

        <email>mcaulfie@cisco.com</email>
      </address>
    </author>

    <date />

    <abstract>
      <t>Rate pacing is a class of network traffic shaping which limits the
      transmission rate of data over a network. This document defines CDNI
      extensions for downstream CDNs to support rate pacing on behalf of
      upstream CDNs.</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>Rate pacing is a class of network traffic shaping which limits the
      transmission rate of data over a network. In the context of a Content
      Delivery Network (CDN), rate pacing provides an important business
      advantage to a Content Service Provider (CSP) by ensuring that a CDN
      which is delivering content on behalf of that CSP does not deliver
      significantly more data than necessary to an end client. </t>

      <t>For example, suppose an end client is watching some Constant Bit Rate
      (CBR) video encoded at 1500 kbps. In the absence of rate pacing, the CDN
      delivering this content may send it to the client at 3000 kbps. If the
      client chooses to terminate the session before watching the entire
      video, up to half the transmitted data is wasted. This waste leads to
      unnecessary cost for the CSP and diminished useful capacity for the
      CDN.</t>

      <t>Rate pacing requires configuration on a per-content basis. In order
      to enable rate pacing in a CDNI environment, the CDNI interfaces need to
      be extended to optionally support this feature.</t>

      <t>This document describes:<list style="numbers">
          <t>a rate pacing algorithm for CDNs</t>

          <t>CDNI interface extensions required for supporting rate pacing</t>
        </list></t>
    </section>

    <section anchor="algo" title="Rate Pacing Algorithm">
      <t>A token bucket algorithm SHOULD be used for implementing rate pacing.
      Other algorithms MAY be used but the traffic shape MUST fit within the
      same envelope of a token bucket algorithm. Token bucket is described by
      <xref target="RFC1363"></xref>. </t>

      <t>The token bucket algorithm is characterized by two parameters:<list
          style="numbers">
          <t>Rate &ndash; the number of tokens added to the bucket per
          second</t>

          <t>Size &ndash; the maximum number of tokens in the bucket</t>
        </list></t>

      <t>For the purpose of this document, each token represents one byte.</t>
    </section>

    <section anchor="impact" title="CDNI Interfaces Impact">
      <section title="Footprint &amp; Capabilities Interface">
        <t><xref
        target="I-D.ietf-cdni-footprint-capabilities-semantics"></xref>defines
        the CDNI Footprint and Capabilities semantics. But at the time of
        writing, no FCI syntax specification has been accepted as a working
        group document. </t>

        <t><xref
        target="I-D.ietf-cdni-footprint-capabilities-semantics"></xref>states
        that:&nbsp;</t>

        <t>"The CDNI FCI specification SHOULD define the registry (and the
        rules for adding new entries to the registry) for the different
        capability types. Each capability type MAY further have a list of
        valid values. The individual CDNI interface specifications which
        define a given capability SHOULD define any necessary registries (and
        the rules for adding new entries to the registry) for the values
        advertised for a given capability type."</t>

        <t>This document defines a new capability type:
        &ldquo;RatePacing&rdquo; to be added to the FCI capability types
        registry. No value needs to be advertised for this capability and
        therefore no additional value registry need to be defined.</t>

        <t>A CDN MAY advertise the &ldquo;RatePacing&rdquo; capability in the
        FCI if it implements this specification.</t>
      </section>

      <section title="Request Routing Redirection Interface">
        <t>A new RatePacing metadata object is defined to represent the
        configuration for rate pacing. The RatePacing object has MIME type
        &ldquo;application/cdni.RatePacing&rdquo;. RatingPacing MAY appear
        within the metadata list of either HostMetadata or PathMetadata (i.e.
        may have either host-level scope or a path-level scope). The following
        section defines the properties of the RatingPacing object.</t>
      </section>

      <section title="Metadata Interface">
        <t>A new RatePacing metadata object is defined to represent the
        configuration for rate pacing. The RatePacing object has MIME type
        &ldquo;application/cdni.RatePacing&rdquo;. RatingPacing MAY appear
        within the metadata list of either HostMetadata or PathMetadata (i.e.
        may have either host-level scope or a path-level scope). The following
        section defines the properties of the RatingPacing object.</t>

        <section title="RatePacing Metadata">
          <t>The presence of the RatePacing Metadata indicates that a dCDN
          MUST comply with the Rate Pacing Algorithm defined by this
          specification in order to deliver a piece of content. </t>

          <t><list style="empty">
              <t>Property: rate<list style="empty">
                  <t>Description: Rate of tokens per second to be added to the
                  bucket as described by the token bucket algorithm. This
                  value MUST be a positive integer. Each token represents one
                  byte.</t>

                  <t>Type: Integer</t>

                  <t>Mandatory-to-Specify: Yes.</t>
                </list></t>

              <t>Property: size<list style="empty">
                  <t>Description: Maximum number of tokens per bucket as
                  described by the token bucket algorithm. This value MUST be
                  a positive integer.</t>

                  <t>Type: Integer</t>

                  <t>Mandatory-to-Specify: Yes.</t>
                </list></t>
            </list></t>
        </section>
      </section>

      <section title="Logging Interface">
        <t>The rate at which a piece of content was delivered MAY be indicated
        via the LI. The &ldquo;sc-rate&rdquo; field indicates the rate in
        bytes per second as a decimal number. The bytes measured should
        correspond to the sc-entity-bytes field.</t>

        <t><list style="empty">
            <t>sc-rate:<list style="empty">
                <t>format: DEC</t>

                <t>field value: the average rate in bytes per second at which
                a response was delivered from Surrogate to client.</t>

                <t>occurence: there MUST be zero or exactly one instances of
                this field.</t>
              </list></t>
          </list></t>
      </section>

      <section title="Control Interface">
        <t>The CI is not impacted by rate pacing.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document requests the following of IANA:</t>

      <t>Addition of RatePacing in the CDNI Capability Registry defined in
      ???.</t>

      <t>Addition of RatePacing in the CDNI GenericMetadata Type Registry
      defined in <xref target="I-D.ietf-cdni-metadata"></xref>.</t>

      <t>Addition of sc-rate in the CDNI Logging Field Names Registry defined
      in <xref target="I-D.ietf-cdni-logging"></xref>.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>A malicious CSP might attempt to use rate pacing to instruct a dCDN
      to delivery some content at a very high rate thereby amplifying a DDOS
      attack. The decision to enforce a rate is left to the discretion of a
      dCDN. An implementation of rate pacing should implement reasonable upper
      bound to avoid such cases.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The author would like to thank Francois Le Faucheur for his
      contributions and feedback.</t>
    </section>
  </middle>

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

      <?rfc include='reference.I-D.ietf-cdni-footprint-capabilities-semantics'?>

      <?rfc include='reference.I-D.ietf-cdni-metadata'?>

      <?rfc include='reference.I-D.ietf-cdni-logging'?>

      <?rfc include='reference.RFC.2119'?>
    </references>
  </back>
</rfc>
