<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<rfc category="info" docName="draft-briscoe-tsvarea-fair-02.pdf"
     ipr="full3978">
  <?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>

  <!-- Alterations to I-D/RFC boilerplate -->

  <?rfc private="" ?>

  <!-- Default private="" Produce an internal memo 2.5pp shorter than an I-D or RFC -->

  <?rfc rfcprocack="yes" ?>

  <!-- Default rfcprocack="no" add a short sentence acknowledging xml2rfc -->

  <?rfc rfcedstyle="no" ?>

  <!-- Default rfcedstyle="yes" attempt to closely follow finer details from the latest observable RFC-Editor style -->

  <!-- IETF process -->

  <?rfc iprnotified="no" ?>

  <!-- Default iprnotified="no" I haven't disclosed existence of IPR to IETF -->

  <!-- ToC format -->

  <?rfc toc="yes" ?>

  <!-- Default toc="no" No Table of Contents -->

  <!-- Cross referencing, footnotes, comments -->

  <?rfc symrefs="yes" ?>

  <!-- Default symrefs="no" Don't use anchors, but use numbers for refs -->

  <?rfc sortrefs="yes"?>

  <!-- Default sortrefs="no" Don't sort references into order -->

  <?rfc comments="yes" ?>

  <!-- Default comments="no" Don't render comments -->

  <!-- Pagination control -->

  <?rfc compact="yes"?>

  <!-- Default compact="no" Start sections on new pages -->

  <?rfc subcompact="no"?>

  <!-- Default subcompact="(as compact setting)" yes/no is not quite as compact as yes/yes -->

  <!-- HTML formatting control -->

  <?rfc emoticonic="yes" ?>

  <!-- Default emoticonic="no" Doesn't prettify HTML format -->

  <front>
    <title abbrev="Flow Rate Fairness:Dismantling a Religion">Flow Rate
    Fairness: Dismantling a Religion</title>

    <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
      <organization>BT &amp; UCL</organization>

      <address>
        <postal>
          <street>B54/77, Adastral Park</street>

          <street>Martlesham Heath</street>

          <city>Ipswich</city>

          <code>IP5 3RE</code>

          <country>UK</country>
        </postal>

        <phone>+44 1473 645196</phone>

        <email>bob.briscoe@bt.com</email>

        <uri>http://www.cs.ucl.ac.uk/staff/B.Briscoe/</uri>
      </address>
    </author>

    <date day="06" month="July" year="2007" />

    <area>Transport</area>

    <workgroup>Transport Area Working Group</workgroup>

    <keyword>Congestion Control</keyword>

    <keyword>Protocol</keyword>

    <keyword>Fairness</keyword>

    <abstract>
      <t>Resource allocation and accountability have been major unresolved
      problems with the Internet ever since its inception. The reason we never
      resolve these issues is a broken idea of what the problem is. The
      applied research and standards communities are using completely
      unrealistic and impractical fairness criteria. The resulting mechanisms
      don't even allocate the right thing and they don't allocate it between
      the right entities. We explain as bluntly as we can that thinking about
      fairness mechanisms like TCP in terms of sharing out flow rates has no
      intellectual heritage from any concept of fairness in philosophy or
      social science, or indeed real life. Comparing flow rates should never
      again be used for claims of fairness in production networks. Instead, we
      should judge fairness mechanisms on how they share out the `cost' of
      each user's actions on others.</t>
    </abstract>

    <!-- ================================================================ -->

    <note title="Summary of Changes (to be removed by the RFC Editor on Publication)">
      <t>Full diffs created using the rfcdiff tool are available at
      &lt;http://www.cs.ucl.ac.uk/staff/B.Briscoe/pubs.html#rateFairDis&gt;</t>

      <t><list style="hanging">
          <t hangText="From -01 to -02 (the present version):"></t>

          <t>Introduction: Added motivation for more optimal fairness so ISPs
          don't try to make allocations more optimal manually using DPI etc.
          Clarified minimal impact on 'legacy' protocols using flow rate
          fairness as a goal, even if it is no longer a goal for future
          protocols.</t>

          <t><xref target="fair_Structure"></xref>: clarified that cost
          fairness and re-ECN are not equivalent in any sense.</t>

          <t>Considerably clarified <xref target="fair_Cost_Benefit"></xref>
          "Cost, not Benefit", explaining better why the product of congestion
          and rate represents the cost to other users and why being able to
          reduce prices towards cost is desirable for users. Emphasised that
          cost fairness does not require congestion pricing and we do not
          recommend it. Also emphasised that ISPs don't have to use the
          congestion metric to enforce cost fairness, even if it is available.
          Clarified that fairness is relevant within more Diffserv behaviour
          aggregates than just best effort. Clarified that congestion includes
          congestion of lower layer resources including radio resources etc.
          Recommended Siris's algorithm rather than MulTCP.</t>

          <t><xref target="fair_Comparing_Costs"></xref> "Comparing Costs":
          expanded on the marginal cost example. Re-emphasised that putting a
          limit on congestion in a service level agreement is not congestion
          pricing.</t>

          <t><xref target="fair_Related_Work"></xref> "Seminal Literature":
          added Jain's index of fairness.</t>

          <t>Added reference to the new TFRC-SP RFC in <xref
          target="fair_TFRC"></xref> on TFRC and in <xref
          target="fair_RFC_Implications"></xref> on "Implications for the RFC
          Series".</t>

          <t><xref target="fair_Packet_Size"></xref> on "Packet Size and
          Fairness": Summarised advice in referenced I-D.</t>

          <t>Updated references and numerous other minor edits and
          clarifications.</t>

          <t hangText="From -00 to -01:"></t>

          <t>Toned down the polemic.</t>

          <t>Added <xref target="fair_Specific_Critiques"></xref> "Critiques
          of Specific Schemes", adding subsections on TCP and WFQ to
          previously disparate material on max-min fairness, TFRC &amp;
          router-based fairness approaches like XCP, which have been shortened
          and clarified. Also added subsections on TCP-style fairness wrt. RTT
          and packet size that has been copied by other transports.</t>

          <t>Added substantial new <xref
          target="fair_RFC_Implications"></xref> "Implications for the RFC
          Series". Added to the introduction the importance of the issue and
          the general implications.</t>

          <t>Created an expanded and clarified new subsection <xref
          target="fair_Comparing_Costs"></xref> "Comparing Costs" from text
          previously at the end of <xref target="fair_Myopia"></xref>
          "Something to Integrate the Allocations"</t>

          <t>Added quote on flow granularity from RFC2309 &amp; RFC2914.</t>

          <t>Clarified and expanded <xref target="fair_Policing_Edge"></xref>
          "Enforcing Cost Fairness".</t>

          <t>Various clarifications throughout.</t>
        </list></t>
    </note>
  </front>

  <middle>
    <!-- ================================================================ -->

    <section anchor="fair_Introduction" title="Introduction">
      <t><list style="empty">
          <t>"But he has nothing on at all."</t>

          <t><list style="empty">
              <t><spanx style="emph">The Emperor's New Clothes, Hans Christian
              Andersen</spanx></t>
            </list></t>
        </list></t>

      <t>This document is deliberately destructive. It sets out to destroy an
      ideology that is blocking progress&mdash;the idea that fairness between
      multiplexed packet traffic can be achieved by controlling relative flow
      rates alone. Flow rate fairness was the goal behind fair resource
      allocation in widely deployed protocols like weighted fair queuing
      &nbsp;<xref target="WFQ"></xref>, TCP congestion control&nbsp;<xref
      target="RFC2581"></xref> and TCP-friendly rate control&nbsp;<xref
      target="RFC3448"></xref>. But it is actually just unsubstantiated dogma
      to say that equal flow rates are fair. This is why resource allocation
      and accountability keep reappearing on every list of requirements for
      the Internet architecture (e.g.&nbsp;<xref target="NewArchReq"></xref>),
      but never get solved. Obscured by this broken idea, we wouldn't know a
      good solution from a bad one.</t>

      <t>Controlling relative flow rates <spanx style="emph">alone</spanx> is
      a completely impractical way of going about the problem. To be realistic
      for large-scale Internet deployment, relative flow rates should be the
      <spanx style="emph">outcome</spanx> of another fairness mechanism, not
      the mechanism itself. That other mechanism should share out the `cost'
      of one user's actions on others&mdash;how much each user's transfers
      restrict other transfers, given capacity constraints. Then flow rates
      will depend on a deeper level of fairness that has so far remained
      unnamed in the literature, but is best termed `cost fairness'.</t>

      <t>It really is only the idea of flow rate fairness that needs
      destroying&mdash;nearly everything we've engineered can remain. The
      Internet architecture needs some minor additions, but otherwise it is
      largely already suited to cost fairness.</t>

      <t>The metric required to arbitrate cost fairness is simply volume of
      congestion, that is congestion times the bit rate of each user causing
      it, taken over time. In engineering terms, for each user it can be
      measured very easily as the amount of data the user sent that was
      dropped. Or with explicit congestion notification (ECN&nbsp;<xref
      target="RFC3168"></xref>) the amount of each user's data to have been
      congestion marked. Importantly, unlike flow rates, this metric
      integrates easily and correctly across different flows on different
      paths and across time, so it can be easily incorporated into future
      service level agreements of ISPs.</t>

      <t>What we call cost fairness has been in the literature for nearly a
      decade, but it hasn't been put so bluntly before. We were moved to spell
      it out unambiguously (and avoiding maths), because this isn't just some
      dry academic fairness debate that might change allocation percentages
      somewhere in the third decimal place. The outcomes due to flow rate
      fairness that we see on the Internet today are hopelessly unlike the
      outcomes that would result from cost fairness.</t>

      <t>Not that the outcomes we see are the deliberate intent of flow rate
      fairness. They are the random result of an absence of fairness control,
      because flow rate fairness isn't even capable of reasoning about
      questions like, "How many flows is it fair to start between two
      endpoints? or over different routes?" or, "What rate is fair for a flow
      that has been running longer than another?".</t>

      <t>Resource allocation and accountability are two issues that reappear
      on every list of requirements for a new Internet architecture&nbsp;<xref
      target="NewArchReq"></xref>. We could have started filling this
      architectural vacuum a decade ago, but architecture not only requires
      foundational ideas, it also requires consensus. In 1997, the basis of
      the dominant consensus was completely undermined, but its believers
      didn't even notice.</t>

      <t>While everyone prevaricates, novel p2p applications have started to
      thoroughly exploit this architectural vacuum with no guilt or shame, by
      just running more flows for longer. Application developers assume, and
      they have been led to assume, that fairness is dealt with by TCP at the
      transport layer. In response some ISPs are deploying kludges like volume
      caps or throttling specific applications using deep packet inspection.
      Innocent experimental probing has turned into an arms race. The p2p
      community's early concern for the good of the Internet is being set
      aside, aided and abetted by commercial concerns, in pursuit of a more
      pressing battle against the ISPs that are fighting back. Bystanders
      sharing the same capacity are suffering heavy collateral damage.</t>

      <t>This trend has spread beyond the p2p community. There is now no shame
      in opening multiple TCP connections, or offering VoIP or video streaming
      software without any congestion control.</t>

      <t>Whether the prevailing notion of flow rate fairness has been the root
      cause or not, there will certainly be no solution until the networking
      community gets its head out of the sand and understands how unrealistic
      its view is; and how important this issue is&mdash;a conflict between
      the vested interests of real businesses and real people. </t>

      <t>Certainly fairness is not a question of technical function&mdash;any
      allocation `works'. But allowing self-interest to go largely unchecked
      leads to an outcome hopelessly skewed away from one that would better
      satisfy more people more of the time. ISPs intuitively know that their
      capacity isn't being shared in the best interests of the majority of
      their customers. This is why technologies like deep packet inspection
      middleboxes have been developed&mdash;ISPs know that throttling certain
      applications puts them at a considerable competitive advantage over ISPs
      that don't. These middleboxes are blocking the potential of the Internet
      to evolve future applications, but instead of wringing our hands over
      this issue, we should provide a protocol architecture that does a much
      better job of automatically sharing out Internet capacity. Then ISPs
      won't need these kludges to protect the experience of their customers.
      </t>

      <t>But isn't it a basic article of faith that multiple views of fairness
      should be able to co-exist, the choice depending on policy? Absolutely
      correct&mdash;and we shall return to how this can be done later. But
      that doesn't mean we have to give the time of day to any random idea of
      fairness.</t>

      <t>Fair allocation of rates between flows was used in good faith as a
      guiding principle, but it isn't based on any respected definition of
      fairness from philosophy or the social sciences. It has just gradually
      become the way things are done in networking. But it's actually
      self-referential dogma. Or put more bluntly, bonkers.</t>

      <t>We expect to be fair to people, groups of people, institutions,
      companies&mdash;things the security community would call `principals'.
      But a flow is merely an information transfer between two applications.
      Where does the argument come from that information transfers should have
      equal rights with each other? It's equivalent to claiming food rations
      are fair because the boxes are all the same size, irrespective of how
      many boxes each person gets or how often they get them.</t>

      <t>Because flows don't deserve rights in real life, it is not surprising
      that two loopholes the size of barn doors appear when trying to allocate
      rate fairly to flows in a non-cooperative environment. If at every
      instant a resource is shared among the flows competing for a share, any
      real-world entity can gain by i) creating more flows than anyone else,
      and ii) keeping them going longer than anyone else.</t>

      <t>We appeal to the networking community to quietly set aside rate
      fairness between flows. It had its time, but now it has been shown to be
      unfounded, unrealistic and impractical. Future papers and standards
      proposals claiming fairness on the basis of flow rates should be
      rejected. This does not mean we need to phase out 'legacy' protocols
      that aimed for flow rate fairness&mdash;they will continue to function
      adequately (<xref target="fair_RFC_Implications"></xref>); they simply
      might not make best use of future service level agreements offered by
      ISPs. But no-one should ever set flow rate fairness as a goal in future
      Internet protocols&mdash;it places arbitrary requirements on the system
      that can't be met and wouldn't achieve any meaningful sort of fairness
      even if they could be met.</t>

      <t>Alternatively, someone should write a defence of flow rate fairness.
      Continuing to use flow rate fairness as the dominant ideology, without
      rebutting Kelly's seminal 1997 paper that undermined it, just leaves the
      Internet community divided into religious sects, making a mockery of the
      scientific process towards consensus.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Reqs_notation" title="Requirements notation">
      <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"></xref>.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Fair_Allocation_What"
             title="Fair Allocation of What Among What?">
      <t>The issue with flow rate fairness is far more basic than whether
      allocations should be max-min, proportional or whatever. Flow rate
      fairness doesn't even allocate the correct thing. And it doesn't
      allocate it among the correct entities either. At this most basic level
      we will contrast the two main contending views: <list style="symbols">
          <t>Allocate rate among flows (flow rate fairness)</t>

          <t>Allocate congestion cost among the bits sent by economic entities
          (cost fairness)</t>
        </list></t>

      <t>When cost fairness was proposed, it stated its case in terms of the
      dominant belief system&mdash;flow rate fairness. Unfortunately, this
      meant that the dominant belief system didn't notice it had been struck
      an intellectual death blow. Its believers carried on regardless and it
      remains dominant today.</t>

      <t>As a result, one sees talk of weighted proportional fairness in the
      same context as proportional, max-min or min-max fairness as if they are
      all members of the same set. They are not. Weighted proportional
      fairness has an extra weight parameter w that all the others lack. With
      weighted proportional fairness, the interesting bit is what regulates
      users in their choice of w. Otherwise, it would hardly be a useful
      definition of fairness to say it is fair for flow A to go w times as
      fast as flow B, if the user behind flow A has free choice of w.</t>

      <t>In fact, it turns out that the interesting bit is nothing to do with
      flows, or their weights. For internetworking the <spanx
      style="emph">only</spanx> interesting definition of fairness depends on
      the allocation of cost among the bits sent by economic entities,
      regardless of which flows the bits are in. A user's choice of w then
      depends on that.</t>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_Structure" title="Structure of Document">
        <t>The body of this document is structured around our question, "Fair
        allocation of what among what?": <list style="symbols">
            <t><xref target="fair_Cost_Benefit"></xref> answers the
            "&hellip;of what&hellip;?" question, explaining why fair
            allocation of costs is a sufficient and realistic form of
            fairness, and allocation of rate is not.</t>

            <t><xref target="fair_Agents_not_Flows"></xref> answers the
            "&hellip;among what?" question, explaining why fairness among
            economic entities naturally spans all flows from that entity
            across the Internet (space) and across time, whereas fairness
            among flows can only be myopic; in one location and at one
            instant. Also, to demonstrate that it would be practical to
            enforce cost fairness, we briefly outline a protocol proposal
            called re-ECN. Note that cost fairness and re-ECN are in no sense
            equivalent; re-ECN is just one possible way in which cost fairness
            might be enforced and anyway re-ECN was actually designed to
            enforce both cost fairness and flow rate fairness.</t>
          </list></t>

        <t>Having debunked the dominant ideology of flow rate fairness, and
        replaced it with cost fairness, in <xref
        target="fair_Economics"></xref> we discuss how other forms of fairness
        can be asserted locally. Then, before we draw conclusions, <xref
        target="fair_Related_Work"></xref> maps the progression of seminal
        ideas in the literature on which this memo is based and <xref
        target="fair_Specific_Critiques"></xref> outlines concrete criticisms
        of specific fairness schemes: max-min flow rate fairness, TCP, TFRC,
        WFQ and XCP as well as discussions of dependence on RTT and packet
        size. Finally, <xref target="fair_RFC_Implications"></xref> surveys
        which RFCs will have to be updated if we are to stop using flow rate
        fairness as a goal for future IETF protocols. A FAQ Web
        page&nbsp;<xref target="FairFAQ"></xref> is also planned to answer
        some frequently asked questions that didn't fit easily into the main
        flow of this document.</t>
      </section>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Cost_Benefit" title="Cost, not Benefit">
      <t>The issues of fair allocation of resources comes under the domain of
      political economy, with philosophy reasoning about our judgements. In
      <xref target="fair_Economics"></xref> we will discuss how different
      fairness policies can co-exist. But to answer our question, "Fair
      allocation of what?" we start from the premise used in microeconomics
      (and life) that fairness concerns comparing benefits, costs or both.</t>

      <t>The benefit of a data transfer can be assumed to increase with flow
      rate, but the shape and size of the function relating the two (the
      utility function) is unknown, subjective and private to each user. Flow
      rate itself is an extremely inadequate measure for comparing benefits:
      user benefit per bit rate might be ten orders of magnitude different for
      different types of flow (e.g.&nbsp;SMS and video). So different
      applications might derive completely different benefits from equal flow
      rates and equal benefits might be derived from very different flow
      rates.</t>

      <t>Turning to the cost of a data transfer across a network, flow rate
      alone is not the measure of that either. Cost is also dependent on the
      level of congestion on the path. This is counter-intuitive for some
      people so we shall explain a little further. Once a network has been
      provisioned at a certain size, it doesn't cost a network operator any
      more whether a user sends more data or not. But if the network becomes
      congested, each user restricts every other user, which can be
      interpreted as a cost <spanx style="emph">to all</spanx>&mdash;an
      externality in economic terms. When there is no congestion, more usage
      costs nothing. But at each instant that congestion exists, continued
      usage of the congested resource leads to a cost to all those trying to
      use it. This cost is proportional to the risk of data not being
      forwarded&mdash;the loss rate. Each user causes the cost to everyone
      else as well as to themselves.</t>

      <t>Kelly showed&nbsp;<xref target="wPropFair"></xref> that the system
      becomes optimal if the blame for congestion is attributed among all the
      users causing it, in proportion to their bit rates. That's exactly what
      routers are designed to do anyway. During congestion, a queue randomly
      distributes the losses so all flows see about the same loss rate (or ECN
      marking rate); if a flow has twice the bit rate of another it should see
      twice the losses. In this respect random early detection (RED&nbsp;<xref
      target="RFC2309"></xref>) is slightly fairer than drop tail, but to a
      first order approximation they both meet this criterion.</t>

      <t>So in networking, the usage cost of one flow's behaviour depends on
      the congestion volume it causes, which is the product of its
      instantaneous flow rate and congestion on its path, integrated over
      time. For instance, if two users are sending at 200kbps and 300kbps into
      a 450kbps line for 0.5s, congestion is (200+300-450)/(200+300) = 10% so
      the congestion volume each causes is 200k&times; 10%&times; 0.5 = 10kb
      and 15kb respectively.</t>

      <t>So cost depends not only on flow rate, but on congestion as well.
      Typically congestion might be in the fractions of a percent but it
      varies from zero to tens of percent. So, flow rate can never alone serve
      as a measure of cost.</t>

      <t>To summarise so far, flow rate is a hopelessly incorrect proxy both
      for benefit and for cost. Even if the intent was to equalise benefits,
      equalising flow-rates wouldn't achieve it. Even if the intent was to
      equalise costs, equalising flow-rates wouldn't achieve it.</t>

      <t>But actually a realistic resource allocation mechanism only needs to
      concern itself with costs, then benefits will look after themselves. In
      life, as long as people cover the cost of their actions, it is generally
      considered fair enough. If one person enjoys a hot shower more than
      their neighbour enjoys the toast they made with equal units of
      electricity, no-one expects the one who enjoyed the shower to have to
      pay more. If someone makes more of their lot in life than another, some
      complain it's not fair, but most call this envy, not unfairness. Market
      economics works on the same premise (unsurprisingly given life and
      market economics are closely related). </t>

      <t>The ideal of pure microeconomics is to ensure that everyone pays as
      little as possible (the cost) for the things they value. The reason we
      try to ensure markets are competitive is that any provider who tries to
      sell above cost price will be undercut by a competitor. And once things
      are sold at cost, the idea is that people will choose not to have an
      item if they will get less benefit from it than it costs. Being
      prevented from having something if you aren't prepared to cover the cost
      is a basic level of fairness that is particularly important when the
      cost is suffered by others around you.</t>

      <t>The problem with the current Internet architecture is that the cost
      of usage (congestion volume) is hidden from network providers. Everyone
      would like prices to drop towards cost, but even if Internet provision
      gets more competitive, there is no mechanism to reveal what the costs
      are. So no-one can stop certain users causing more costs to others than
      they have paid for (except by using the damaging kludges mentioned
      early). </t>

      <t>So far, we have only used the pure microeconomics of a market. But
      this only ensures benefits are as fairly distributed as is consistent
      with the pre-existing inequalities in life, setting aside other forms of
      fairness that might be required (the concern of political economy). But
      once we have a feasible, scalable system that counterbalances basic
      self-interest and at least implements one defined form of fairness, we
      will show (in <xref target="fair_Economics"></xref>) how to build other
      forms of fairness within that.</t>

      <t>To further summarise so far, making people accountable for the cost
      of their actions is a basic form of fairness, and we can only achieve
      various more sophisticated forms of fairness if a basic market mechanism
      can make people accountable for the costs of their actions (and various
      market failures are avoided).</t>

      <t>We deliberately say `make people accountable' to avoid the phrase
      `make people pay', because users tend to prefer flat rate subscription
      for Internet access not unpredictable congestion charges. So, ISPs will
      want to be able to limit the congestion costs their users are able to
      cause (<xref target="fair_Policing_Edge"></xref>), rather than charge
      them for whatever unlimited costs they cause. We are certainly not
      advocating congestion pricing for retail users. No matter how many times
      we say this, people still wrongly jump to this conclusion. So note well
      again: we neither require nor recommend that retail users pay congestion
      prices to be able to achieve cost fairness. </t>

      <t>Indeed, all we are saying is that a congestion metric should be
      visible to those ISPs who want to include it in their service level
      agreements. We are <spanx style="emph">not</spanx> saying ISPs <spanx
      style="emph">should</spanx> do this, just that it is in everyone's
      interests that the costs people cause can be limited to what they have
      paid. So the Internet architecture should be <spanx
      style="emph">able</spanx> to reveal a cost metric. </t>

      <t>If we do make users truly accountable for the cost of the congestion
      they cause, a form of fairness between flow rates emerges automatically.
      As everyone increases the rate of each of their flows, congestion rises.
      As congestion rises, everyone pays due regard to the share of the cost
      attributed to them. So, each individual will want their congestion
      control algorithm to continuously adjust its rate to maximise their net
      utility&mdash;benefit minus cost. Kelly&nbsp;<xref
      target="wPropFair"></xref> shows that even if each user keeps their
      utility function private but we <spanx style="emph">model</spanx> all
      the different users by an arbitrary weight that scales their utility
      function relative to others, users will allocate themselves flow rates
      so that the cost they cause will equal the weight they
      choose&mdash;weighted proportional fairness.</t>

      <t>But such a flow rate allocation is not the measure of fairness, it is
      merely a possible <spanx style="emph">outcome</spanx> caused by cost
      fairness, given some assumptions about how to model the shape of users'
      private utility functions. Enforcing underlying cost fairness is in
      itself a sufficient form of fairness. We repeat: <spanx style="emph">the
      resulting relative flow rates are not the measure of
      fairness</spanx>.</t>

      <t>Most importantly, Kelly proved cost fairness would lead everyone to
      maximise their combined aggregate utility across the whole Internet. In
      other words, if anyone was allocated more and someone else less, the
      outcome would be less aggregate utility as a whole. This is why cost
      fairness is so important, as other forms of fairness cannot be better,
      unless some major flaw is found in Kelly's assumptions. Kelly <spanx
      style="emph">et al</spanx> also proved that, even though relative flow
      rates would likely be very different from those seen today, the Internet
      would remain stable given reasonable constraints and
      assumptions&nbsp;<xref target="wPropStab"></xref>.</t>

      <t>While on the subject of assumptions, we should add that the benefit
      of a real-time application depends on jitter, not just transfer rate.
      But simple scaling arguments show that it will be possible for network
      operators to minimise congestion delay as networks increase in
      capacity&nbsp;(<xref target="SelfMan"></xref> &sect;2), an argument
      supported by recent research showing that router buffers are often
      significantly oversized&nbsp;<xref target="BufSizUp"></xref>. </t>

      <t>We should also point out that fairness can be relevant within any
      Diffserv behaviour aggregate <xref target="RFC2475"></xref>, not just
      best effort, and that congestion is not solely a property of network
      layer buffers. Path congestion can consist of contributions from
      near-exhaustion of all sorts of physical resources at all layers: e.g.
      radio transmitter power, spectrum interference and battery power. Siris
      <xref target="ECNFixedWireless"></xref> explains how all these can and
      should be collected together along a path into ECN markings at the
      network layer to be fed back to the source transport. </t>

      <t>These are what we mean by reasonable assumptions around Kelly's
      fairness definition. On the other hand, no-one has even tried to claim
      that flow rate equality achieves any fairness objective. It has just
      been asserted as an arbitrary engineer's dogma. This is why flow rate
      fairness is so open to criticism as unrealistic&mdash;having no basis in
      any recognised form of fairness in real life, science or philosophy.</t>

      <t>Proponents of flow-rate fairness might be forgiven for aiming for an
      `unrealistic' form of fairness if a `realistic' form was difficult to
      implement in practice. In fact, it is flow rate fairness that is
      completely impractical to enforce (<xref
      target="fair_Cheating"></xref>). The reason we are resurrecting cost
      fairness is that we believe there are now much more practical ways to
      enforce it&mdash;ways that are built around existing Internet congestion
      control but, unlike Kelly's, they don't require all ISPs to change their
      retail model to congestion charging (<xref
      target="fair_Policing_Edge"></xref>).</t>

      <t>But how would users "allocate themselves flow rates in proportion to
      the share of the cost that they cause"? If they were made accountable
      for congestion, they would install a version of TCP with a weight
      parameter, at least for TCP-based applications. MulTCP&nbsp;<xref
      target="MulTCP"></xref> is a simple example of such a TCP. An
      application can give it a parameter w to emulate the congestion
      behaviour of w TCP flows. MulTCP is conceptually useful for those
      familiar with TCP, but it has various failings (e.g. w&lt;1 became
      increasingly problematic). Instead we would recommend an algorithm such
      as Siris's weighted window-based control <xref
      target="WindowPropFair"></xref>.</t>

      <t>Of course, most users wouldn't want the fuss of weighting each
      individual flow. But if they chose to set policies on average for large
      classes of flows (or to accept the defaults set by application
      developers), the resulting suboptimal outcome for themselves would be
      their own private choice to trade optimality against hassle. The
      underlying fairness criterion would still be met: that people should be
      accountable for the costs they cause to others.</t>

      <t>In contrast, with flow-rate fairness, two flows may cause orders of
      magnitude different costs to others (for instance if one has been
      running orders of magnitude longer) by running at equal rates. Nowhere
      do we find any justification for the dogma that flow rates must be equal
      to be fair. Nowhere do we find any rebuttal of Kelly's destruction of
      flow rate fairness, even after ten years.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Agents_not_Flows"
             title="Economic Entities not Flows">
      <!-- ________________________________________________________________ -->

      <section anchor="fair_Myopia"
               title="Something to Integrate the Allocations">
        <t>Imagine loaves of bread are regularly delivered to a famine-struck
        refugee camp. Each time a loaf is brought out, a queue forms and the
        loaf is divided equally among those in the queue. If the individuals
        who appear in each queue are always different, except for one who
        always appears in every queue, would it still be fair to share each
        loaf equally among those in each queue?</t>

        <t>This example shows that realistic fairness policies must depend on
        an individual's history. But if that isn't a convincing argument, it
        doesn't have to be. We don't have to show that fairness policies
        <spanx style="emph">must</spanx> depend on history, only that
        realistic ones <spanx style="emph">probably will</spanx>. So a
        fairness mechanism that claims to support commercially realistic
        fairness policies must be structured to hold individual history
        without destroying scalability. And here, `individual' means some
        real-world entity with an economic existence, not a flow.</t>

        <t>Router-based flow rate fairness mechanisms tend to have to be
        myopic. To be otherwise would seem to require holding the history of
        most Internet connected individuals on most routers, because a flow
        from nearly any individual in the world might appear at nearly any
        router. So instead, router-based schemes tend to share out flow rate
        at each instant without regard to individual history&mdash;and
        unfortunately without regard to commercial reality.</t>

        <t>Instead of arbitrating fairness on routers, fairness can be and
        already is arbitrated where state can be held scalably&mdash;at the
        endpoints where the congestion costs of each individual are already
        collected together. One reason for our frustration with the networking
        community's focus on flow rate fairness is that the TCP/IP-based
        architecture of the Internet already has a structure very close to
        that required to arbitrate fairness based on the costs that
        individuals cause, rather than on flow rates.</t>

        <t>Congested routers generate cost signals (losses or ECN marks) that
        are carried to the transport causing the congestion, piggy-backed in
        the packet stream either as gaps in the transport stream or as ECN
        marks. These congestion signals are already fed back to the sending
        transport by nearly all transport protocols. And congestion control
        algorithms like TCP already adapt their flow rates in response to
        congestion. So all we would need to change would be to use a weighted
        TCP algorithm&nbsp;<xref target="WindowPropFair"></xref> (or
        equivalent for inelastic applications) that could weight itself under
        the control of a process overarching all the flows of one user, which
        would take into account the user's cost history across all flows.</t>

        <t>Of course, there is no incentive for anyone to voluntarily subject
        themselves to such fairness (nonetheless, they already subject
        themselves to TCP which voluntarily halves its rate whenever it senses
        congestion). But as we shall see in <xref
        target="fair_Cheating"></xref>, policing fairness between individuals
        (and between networks) at their point of attachment to the Internet
        has already been solved, whereas getting every router to police
        fairness between every individual connected to the Internet is a pipe
        dream, because it would be extremely complicated for routers to have
        to know about individuals globally.</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_Comparing_Costs" title="Comparing Costs">
         

        <t>So, how come one attachment point can arbitrate fairness between
        everyone on the Internet when it only knows about locally attached
        individuals? Do we have to add some fully connected mesh of
        co-ordination messages between every endpoint in the world? The answer
        is no, because, in a very subtle sense, we already have such a mesh.
        Fairness at one endpoint is kept in line with all the others by the
        commonly aligned discipline of <spanx style="emph">cost</spanx>
        throughout the globe. Cost in any part of the world has an exchange
        value with cost in any other part, because, wherever there's an
        Internet attachment, there's a connection with the global economy.</t>

         

        <t>Different types of users (heavy users, light users, servers, server
        farms, companies) will want to be able to cause different volumes of
        congestion. As long as congestion can be equated to cost, it can be
        related to the amount each user has paid for their attachment to the
        Internet. Even if some localised authority asserts a non-economic
        variant of fairness between some sub-set of users (e.g. in a
        university or corporation), the authority as a whole will still align
        its understanding of cost with that of the global economy (see <xref
        target="fair_Economics" />) on Fairness between Fairnesses.</t>

         

        <t>To be able to compare costs globally, we cannot merely talk of
        volume of congestion as a cost to other users without calibrating
        it&mdash;without specifying how it relates to monetary cost. In a
        competitive market, the monetary cost that should be assigned to
        congestion volume turns out to be the marginal cost of the capacity
        needed to alleviate the congestion&nbsp;<xref target="PrCong" /> (see
        FAQ&nbsp;<xref target="FairFAQ" /> for details).</t>

         

        <t>The term `marginal' cost is used in economics for the slope of the
        curve of cost against capacity. To take a toy example, imagine a
        10Gbps interface card costs $1,000 and the cost follows a rough square
        root law so that a 20Gbps interface card will cost about $1,400 (2
        times the capacity costs sqrt(2) times as much). Even though the
        average cost of the 10Gbps card is $100 per Gbps, the marginal cost is
        only $50 per Gbps. (Because: If X is capacity, C is cost and k is a
        constant, we have assumed C = k sqrt(X), so marginal cost = dC/dX =
        k/2sqrt(X) = C/2X, which is half of the average cost = C/X). This
        implies an 11Gbps card (if cards could be upgraded with such fine
        granularity) would cost about $1,050.</t>

        <t>Note that when we say that the cost of congestion equates to the
        marginal cost of capacity, we are not introducing any additional cost;
        we are merely categorising cost into sub-divisions. So, an existing
        flat fee Internet charge should be considered to consist of parts to
        cover: <list style="symbols">
            <t>operational (non-capacity) costs;</t>

            <t>capacity upgrade costs to alleviate congestion (the $50/Gbps
            marginal cost);</t>

            <t>the balance of the average cost of capacity
            ($100-$50=$50/Gbps).</t>
          </list></t>

         

        <t>The distinction between the last two is important, because the cost
        of capacity is traditionally shared out in proportion to access link
        capacity. But different users with the same access link capacity can
        cause <spanx style="emph">hugely</spanx> different volumes of
        congestion across time and across all the Internet links they
        regularly use, so it is fair to share out the upgrade cost part in
        proportion to congestion caused, not access link capacity.</t>

        <t>Once a cost is assigned to congestion that equates to the cost of
        alleviating it, users will only cause congestion if they want extra
        capacity enough to be willing to pay its cost (e.g. using up
        congestion quota they have paid for). Of course, there will be no need
        to be too precise about that rule. Perhaps some people might be
        allowed to get more than they pay for and others less. Perhaps some
        people will be prepared to pay for what others get, and so on.</t>

        <t>But, in a system the size of the Internet, there has to be some
        handle to arbitrate how much cost some users cause to others. Flow
        rate fairness comes nowhere near being up to the job. It just isn't
        realistic to create a system the size of the Internet and define
        fairness within the system without reference to fairness outside the
        system&mdash;in the real world where everyone grudgingly accepts that
        fairness usually means "you get what you pay for".</t>

        <t>Note that we use the phrase "you get what you pay for" not just
        "you pay for what you get". In Kelly's original formulation, users had
        to pay for the congestion they caused, which was unlikely to be taken
        up commercially. But the reason we are revitalising Kelly's work is
        that recent advances (<xref target="fair_Policing_Edge" />) should
        allow ISPs to keep their popular flat fee pricing packages along with
        a service level agreement that ensures users cannot cause excessive
        congestion (e.g. not more congestion cost than their flat fee pays
        for). Note that limiting congestion is <spanx style="emph">not</spanx>
        congestion pricing, just as a volume cap is not volume charging.</t>

         

        <t>The engineering details of all these commercially realistic
        accountability systems don't have to concern the research or standards
        communities in networking. It is sufficient to design protocols so
        that congestion costs <spanx style="emph">can</spanx> be integrated
        into one simple counter across different flows and across time for
        some higher layer to use, so that senders <spanx
        style="emph">can</spanx> be made accountable for the congestion they
        cause. Systems and protocols intended for Internet deployment do not
        have to <spanx style="emph">always</spanx> realise the sort of
        fairness over time that we find around us in the real world, but they
        must <spanx style="emph">be able</spanx> to.</t>

         

        <t>This subtle connection with the global economy at every Internet
        attachment point ensures that there is no need for some system to
        decide how far back the history of each individual's costs should
        still be taken into account. Once the cost that one entity causes to
        others (integrated over time and over all its flows) has been suffered
        by that entity itself (e.g. by subtracting from a quota), it can be
        forgotten. Just like the costs for all the other benefits everyone
        assimilates in their daily lives. And the concept of a customer
        account also naturally ensures that a user cannot escape
        accountability merely by roaming or mobility.</t>

         

        <t>Finally, note well that this `ISP' and `customer' terminology
        doesn't preclude peer-to-peer creations that arbitrate fair use of the
        resources of a self-provided community network&nbsp;<xref
        target="ArchP2pEcon" />.</t>

         
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_Enforcement" title="Enforcement of Fairness">
        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

        <section anchor="fair_Cheating"
                 title="Cheating with Whitewashed or Split Flow Identities">
          <t>In the real world of deployed networks, if it is easy to cheat
          the fairness mechanism to get an unfair allocation, it's hardly a
          useful fairness mechanism. All known flow rate fairness mechanisms
          are wide open to cheating. The network community cannot continue in
          denial of this glaring inconsistency if we claim to be designing
          commercially realistic protocols.</t>

          <t>For instance, if I am the customer of a system giving max-min
          flow rate allocations, it is in my interest to split the identities
          of my flows into lots of little flows until they are all less than
          the minimum allocation. Then the system will dance to my tune and
          reduce the allocations of everyone else in order to increase all the
          allocations of my little flows. The more I split my traffic down
          across more and more identifiers, the larger share of the resource
          all my flows taken together will get.</t>

          <t>If a history-based fairness mechanism (<xref
          target="fair_Myopia"></xref>) believes it should allocate fewer
          resources to one flow identifier that it considers has already been
          given enough, it is trivially easy for the source behind that
          identifier to create a new identifier with a whitewashed reputation
          for its traffic.</t>

          <t>And it's no good imagining that a router will be able to tell
          which flow IDs are actually all from the same entity (either in the
          security sense or the economic sense), because routers have to
          arbitrate between flows emanating from networks many domains away.
          They cannot be expected to know which sets of flow identifiers
          should be treated as a single entity. Flows between a pair of IP
          addresses may even be attributable to more than one entity, for
          instance, an IP address may be shared by many hundreds of accounts
          on a Web or e-mail hosting site or behind a NAT. And anyway, even if
          entities could be identified separately, not all entities are equal,
          for instance compare your granny's PC with a large server.</t>

          <?rfc needLines="19" ?>

          <figure align="center" alt="Splitting flow identifiers."
                  anchor="fair_Fig_split" src="images/split.gif"
                  title="Splitting flow identifiers to cheat against flow rate fairness.">
            <artwork><![CDATA[
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |See draft-briscoe-tsvarea-fair-02.pdf version for figure here
    |
    |
    |
]]></artwork>
          </figure>

          <t>Bottleneck policers&nbsp;<xref target="pBox"></xref>,<xref
          target="XCHOKe"></xref>,<xref target="AFD"></xref>, suffer from the
          same inherent problem. They look for a flow ID at a bottleneck that
          is consuming much more bit rate than other flows in order to police
          use of TCP. But anyone can cheat by simply running multiple TCP
          flows. If the policer looks for cheating pairs of source-destination
          IP addresses, without regard to port numbers, a pair of
          corresponding nodes can still cheat by creating extra flows from
          spoofed source addresses after telling each other out of band where
          to send acknowledgements (or just using error correcting coding, not
          acks).</t>

          <t>Alternatively, pairs of corresponding nodes can collude to share
          parts of each other's flows. For instance, if the three pairs of
          nodes in <xref target="fair_Fig_split"></xref> are trying to
          communicate, the senders can act as stepping stones for each other
          so that their three (n) flows appear as nine (n^2) across the
          bottleneck link in the middle. In effect, they have created a
          routing overlay, much like BitTorrent file-sharing software does. If
          one pair of na&iuml;ve nodes competes for this bottleneck against n
          pairs of nodes adopting this strategy, it will get about n times
          smaller share than each of the other pairs, assuming n is large.</t>

          <t>These inherent problems with how to define flow granularity were
          understood when recommendations on active queue management (AQM)
          were made <xref target="RFC2309"></xref>, also quoted in the IETF's
          best current practice on congestion control <xref
          target="RFC2914"></xref>. The problem was known to be particularly
          acute in the context of the above bottleneck policer ideas, which
          were current at the time. But the answer was left open "We would
          guess that the source/destination host pair gives the most
          appropriate granularity in many circumstances. The granularity of
          flows for congestion management is, at least in part, a policy
          question that needs to be addressed in the wider IETF
          community.".</t>

          <t>Given identifiers can generally be freely created in cyberspace,
          it is well-known that they shouldn't be relied on for resource
          allocation (or more generally for negative reputation)&nbsp;<xref
          target="FrRideP2p"></xref>,<xref target="CheapPseud"></xref>.
          Kelly&nbsp;<xref target="wPropFair"></xref> chose cost-based
          fairness (his term was `pricing per unit share') because it was
          immune to this problem&mdash;it allocates cost to bits not to flows
          and hence doesn't rely on any cyber-identifiers.</t>

          <t>In summary, once one accepts that fairness should be based on
          concepts from social science, fairness can only be meaningful
          between entities with real-world identities&mdash;humans,
          organisations, institutions, businesses. Otherwise two entities can
          claim to have arbitrarily many flows between them, making fairness
          between flows completely meaningless.</t>
        </section>

        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

        <section anchor="fair_Policing_Edge" title="Enforcing Cost Fairness">
          <t>If enforcing flow rate fairness is impractical, is enforcing cost
          fairness any more achievable? Happily, the Internet's architecture
          is already suited to carrying the right cost information for cost
          fairness mechanisms to be enforced in a non-cooperative
          environment.</t>

          <t>Kelly's stated motivation for his focus on pricing was so that
          the system would be applicable to a non-cooperative environment. In
          1999, Gibbens and Kelly went further, pointing out&nbsp;<xref
          target="Evol_cc"></xref> that ECN&nbsp;<xref
          target="RFC3168"></xref> provided an ideal basis on which to base
          cost fairness. The idea was simply for network operators to ECN mark
          traffic at congested routers without regard to flows, then to apply
          a price to the volume of traffic carrying ECN marks, which would
          make the transport endpoints accountable for the congestion they
          caused.</t>

          <t>However, understandably, the idea of Internet retailers charging
          their end-customers directly for congestion met strong resistance.
          Customers are known to be highly averse to unpredictable charges for
          services&nbsp;(<xref target="PMP"></xref> &sect;5) so Kelly's
          duration charging for each Internet flow was unlikely to replace
          flat monthly charging.</t>

          <t>Many threw out the baby with the bath water, associating Kelly's
          theoretical work solely with its suggested pricing model. But over
          the ensuing years, an active research community has sought to keep
          the underlying theory but wrapped around with more realistic and
          flexible pricing and service possibilities.</t>

          <t>Indeed the recent proposal called re-ECN&nbsp;<xref
          target="Re-TCP"></xref> claims to do just that. We will give an
          overview or re-ECN below, but first we must make it absolutely clear
          that re-ECN shouldn't be equated with cost fairness. Re-ECN could
          provide one way to achieve cost fairness but other mechanisms might
          also be feasible. Also re-ECN was designed to be able to enforce
          flow rate fairness as well as cost fairness. </t>

          <t>So here the discussion is confined to whether the economic
          structure and functional effect on the network service that re-ECN
          aspires to is valid. If it is, the research agenda should be focused
          on producing that outcome, even if re-ECN itself isn't the answer.
          (Readers tempted to game re-ECN shouldn't rely on the brief
          description here; rather they should use the full spec above, which,
          as of mid-2007, documents one outstanding vulnerability and defences
          against other known attacks.)</t>

          <t>Re-ECN aims not to constrain retail pricing, requiring no change
          to typical flat rate Internet contracts. But it enables addition of
          a policer that can limit the volume of congestion a customer's sent
          traffic causes over, say, a moving month. Thus, if endpoint
          congestion control doesn't voluntarily act fairly the network
          ingress can force it to. It is expected that various styles of
          policing (including none) will evolve through market selection.
          Policing can be per-user or per flow, but bulk per-user policing is
          sufficient for cost fairness.</t>

          <t>Although Gibbens &amp; Kelly rightly identified that standard ECN
          reveals the necessary information for cost-based fairness, it
          doesn't reveal it in the right place for network layer
          policing&mdash;at the <spanx style="emph">sender's</spanx> network
          attachment. In the current TCP/IP architecture, congestion
          information emerges from the end of a forward data path, which is
          the last point in the feedback loop that any network operator can
          reliably intercept it&mdash;the wrong end for policing the
          sender.</t>

          <t>Re-ECN reveals congestion at the start of a data path while
          managing to preserve IP's connectionless datagram model. It makes
          delivery conditional on the sender `pre-loading' packet streams with
          enough `credit' to remain non-negative despite being decremented by
          congestion experienced along the path. It should then be in <spanx
          style="emph">both</spanx> the endpoints' interests for the sender to
          use a pattern of feedback where the sender re-inserts the feedback
          from each congestion event into the next sent packet as a `credit'
          (re-feedback&nbsp;<xref target="Re-fb"></xref>). It should also be
          in the sender's interest to start every flow slowly and with some
          initial `credit' while it establishes the path's congestion
          level.</t>

          <t>Like Kelly's original proposal, re-ECN uses ECN routers (and
          receivers) unchanged to ensure the cost of congestion is
          communicated to each transport causing it, precisely in proportion
          to their bit rates, without any per-flow processing in the network.
          But, unlike Kelly, sources not receivers are held responsible and
          the network cannot raise unsolicited charges without the sender
          deliberately marking packets itself.</t>

          <t>Re-ECN also aims to ensure cost-fairness between whole networks.
          Because the congestion level in every stream of packets decrements
          towards zero, at an inter-domain border both neighbouring networks
          can count the bulk volume of congestion that the passing packets are
          causing downstream of the border. If the downstream neighbour
          penalises the upstream neighbour proportionate to this volume of
          congestion (complementing fixed capacity charges), the upstream
          network should in turn want to ensure its upstream users (or
          networks) are accountable for their share of these costs arriving
          from their borders.</t>

          <t>Each network could choose to share out its downstream costs
          between its upstream customers by some other fairness policy than
          cost (including absence of policy, which ensures incremental
          deployment). So, on the grander scale, re-ECN aims to ensure that
          networks have to be fair to each other, and that different fairness
          policies can co-exist, which is the subject of the next section.</t>
        </section>
      </section>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Economics" title="Fairness between Fairnesses">
      <t>A social anthropologist would be able to give numerous examples of
      tribes and societies holding differing opinions on fairness. But, we
      must also recognise that societal views of fairness are heavily
      influenced by the fairness that a market would produce&nbsp;<xref
      target="SovJstce"></xref>. Just as gravity pre-dated Newton, the
      invisible hand of the (maturing) market had been allocating resources in
      society long before Adam Smith noticed, particularly where the larger
      picture of trade between societies was concerned. Equality is sometimes
      considered fair for life's essentials, but in life few expect to get an
      equal share of every cake for nothing. As a society, we accept that a
      reasonably competitive market mechanism does produce a `realistic' form
      of fairness; a form of fairness that people grudgingly accept they have
      to live with, where the buyer gets no more than she pays for, at a
      competitive price that reflects the effort expended by the seller.</t>

      <t>However, monarchs, governments, charities and so on have also been
      stamping their own view of fairness on this backdrop, sometimes less
      equal sometimes more. But even if different allocation schemes are
      chosen locally, perhaps taking account of social inequality, on a global
      scale arbitration between local views on fairness has largely been
      through market economics&mdash;we are not asking anyone to judge whether
      this is good or bad, it just is. The Internet should at least be able to
      cope with the world as it is (as well as how it might be). This doesn't
      imply we believe that economic forces are somehow above policy control.
      Rather, we observe that market forces (aside from wars) have been the
      default <spanx style="emph">global</spanx> resource allocation mechanism
      over many centuries. In the Greco-Roman civilisations, in the Buddhist,
      Confucian and later in the Islamic world, trade was a necessary but not
      central aspect of life. And over the last two decades, Western
      civilisations have been going through a phase of `economics
      imperialism', where attempting to exert policy control over economics is
      even viewed as counter-productive.</t>

      <t>However, we must not assume the current globalisation
      trend&nbsp;<xref target="Saul05"></xref> heralds the end of history. The
      Internet should be able to reflect the shifting of societal forces as
      different local fairness regimes come and go&mdash;`design for
      tussle'&nbsp;<xref target="Tussle"></xref>. On the whole, interworking
      of resource allocation between most parts of the Internet must <spanx
      style="emph">be able</spanx> to be based on market economics, but it
      should be possible to apply other fairness criteria locally. For
      instance, a University might choose to allocate network resources to
      each student equally rather than by how much their parents can afford.
      But the network resources one whole University gets relative to another
      institution depend on how much each pays their service provider.</t>

      <t>With arbitration of fairness at the network edge, these enclaves
      where local fairness prevails can be virtual networks of disparate
      users; they need not align with physical network boundaries and users
      could roam too, with their service level agreement following them. A
      distance-learning University or company with a mobile sales-force could
      buy quotas from different networks and redistribute the aggregate among
      its members using its own view of fairness. Or whole countries might
      arrange to subsidise a minimum universal service obligation for Internet
      <spanx style="emph">usage</spanx>, but still, the country as a whole
      would be expected to pay its way in the world.</t>

      <t>On the other hand, in market-led countries, commercial ISPs might
      solely allocate resources proportionate to customer subscriptions. Local
      pockets of heterogeneity will exist, from computer clubs to NATO, but
      the overall fabric of resource allocation gluing all these pockets
      together at the (inter)network layer is likely to be market-based.</t>

      <t>This is what we mean by `realistic'&mdash;fitting the commercial
      reality of a global market economy. We are fully aware that the power of
      market economics can be stretched too far; controlling aspects of
      society where economic assumptions break down (prompting Samuelson to
      describe Friedman as "&hellip;somebody who had learned how to spell
      banana but didn't know where to stop"&nbsp;<xref
      target="Swed90"></xref>). But we are not advocating that one religion
      should replace another&mdash;market economics replacing flow rate
      fairness. However, in the case of Internet resource allocation, it must
      at least <spanx style="emph">be possible</spanx> to use market
      economics, despite its known failings, given it is currently the most
      appropriate tool for managing conflicting demands on resources from any
      part of the globe.</t>

      <t>A market is meant to optimise allocations in the face of conflicts of
      self-interest. If we want to assert other fairness regimes, we must
      recognise this acts against self-interest. If we don't understand how to
      overcome self-interest, its invisible hand will force its will on us
      some other way, distorting our attempts to work against it. This is why
      the loopholes in flow rate fairness are being so thoroughly
      exploited.</t>

      <t>And this is our point. A market <spanx style="emph">mechanism</spanx>
      has to be <spanx style="emph">designed</spanx>. A weak design will be
      exploited mercilessly. The designs behind flow rate fairness are worse
      than weak. They are not even aware that, as resource allocation
      mechanisms, they <spanx style="emph">should</spanx> be able to meet the
      stringent requirements of a good market mechanism, such as
      forgery-resistant `currency', information symmetry, internalisation of
      externalities and so forth.</t>

      <t>If we did wish to promote the cause of equality, equalising flow
      rates would in no way achieve our ends. In fact, it would only promote
      the cause of selfishness and malice, because flows don't equate to
      people, so its broken logic can be thoroughly exploited. Only by
      providing a bullet-proof mechanism to arbitrate self-interest, can we
      then move on to allocate resources locally in other ways.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Related_Work" title="The Seminal Literature">
      <t>For a rigorous tutorial on the various form of fairness, the reader
      is referred to Le Boudec&nbsp;<xref target="ccFairTut"></xref>.</t>

      <t>Max-min flow rate fairness has a long history in networking, with
      research to find distributed (router-based) max-min algorithms starting
      in 1980&nbsp;<xref target="DeMaxMin"></xref> and Nagle proposing a novel
      approach in 1985 <xref target="RFC0970"></xref>. All these early `fair
      queuing' algorithms considered fairness should be considered among
      sources and that equality implied fairness. Indeed, in 1984, Jain et al
      proposed an index of fairness <xref target="FairIdx"></xref> that
      quantified how far a set of shares were from equality. In 1989, to solve
      the problem of some sources deserving more rate than others, the authors
      of `weighted fair queuing' (WFQ) proposed that per-source destination
      pair would be a better model of the size of different sources. It was
      admitted that a source could deny service to other sources by faking
      transfers with numerous destinations, but a reasonable trade-off between
      efficiency and security was required&nbsp;<xref target="WFQ"></xref>.
      Recently, an approach called Justice&nbsp;<xref target="Jstce"></xref>
      has proposed a return to (weighted) per source fair queuing, but with
      configurable link weights throughout the network. However, all these
      `fair queuing' approaches allocate bit rate as their measure of
      fairness.</t>

      <t>TCP congestion control was also introduced in the late
      1980s&nbsp;<xref target="TCPcc"></xref>, based on the assumption that it
      would be fair if flow rates through a single bottleneck converged on
      equality.</t>

      <!-- <t>The section on fairness in the informational `Gateway Congestion Control Survey' <xref target="RFC1254" /> was grappling with the questions of fairness over time and between users in Aug 1991. Quoting &quot;We would like gateways to allocate resources fairly to users. [...] If demands were equal, a fair allocation of the resource would be to provide an equal share to each user. But even over short intervals, demands are not equal. Identifying the fair share of the resource for the user becomes hard. Having identified it, it is desirable to allocate at least this fair share to each user. However, not all users may take advantage of this allocation. The unused capacity can be given to other users. The resulting final allocation is termed a maximally fair allocation. [...]&quot;
    </t> -->

      <t>In 1991, Mazumdar <spanx style="emph">et al</spanx>&nbsp;<xref
      target="UtilFair"></xref> pointed out that there was nothing special
      about max-min fair rate allocation, and that other <spanx
      style="emph">ad hoc</spanx> definitions of fairness perhaps based on
      ratios of individual demands would be no less valid. Instead Mazumdar
      <spanx style="emph">et al</spanx> advocated that it would be precise to
      base a definition of fairness on game theory, specifically the Nash
      bargaining solution. This resulted in proportional fairness, but still
      using the rate allocated to flows as the measure of fairness.</t>

      <t>In 1997, Kelly considered that Mazumdar's use of co-operative game
      theory was unlikely to be relevant to public networks where fairness
      would have to be enforced. Instead he introduced <spanx
      style="emph">weighted</spanx> proportional fairness&nbsp;<xref
      target="wPropFair"></xref>, which finally broke the link between
      fairness and flow rates. However, the break in tradition wasn't obvious
      because the new form of fairness could easily be expressed in terms of
      flow rates, essentially using the weight of a flow as a
      `fiddle-factor'.</t>

      <t>Kelly showed that all a network had to do to achieve fairness in its
      economic sense (cost fairness) was to share the cost of congestion among
      bits (not flows). Then, as long as the network made users experience the
      cost of their bits, users could choose any size flows they wished. But
      their choice would be regulated by their own trade off between how much
      they valued bit rate and the charge for congestion.</t>

      <t>Kelly's fairness with respect to bit rate per unit charge could also
      be (and was) framed in terms of fairness between flows by allowing the
      user an arbitrary choice of weight per flow. But Kelly pointed out that
      a flow could be divided into sub-flows without changing the overall rate
      allocation to all the sub-flows taken together; the user merely had to
      imagine that the weight she assigned to one flow could be subdivided
      proportionately into its sub-flows.</t>

      <t>Kelly's work built on MacKie-Mason &amp; Varian's seminal paper on
      the economics of networks from 1995, "Pricing Congestible Network
      Resources"&nbsp;<xref target="PrCong"></xref>. This work explained the
      dual role of congestion costs in controlling demand and regulating
      supply, in welfare maximising, competitive and monopoly markets.</t>

      <t>In his 1997 paper, Kelly framed cost fairness in terms of weighted
      proportional fairness of flow rates in order to relate to an ATM
      technology context. With ATM's flow-based user-network interface, users
      had to declare the weight they chose for their flows to the network. But
      by 1998 Kelly <spanx style="emph">et al</spanx> applied this
      work&nbsp;<xref target="wPropStab"></xref> to an Internet setting where
      flows were not part of the user's interface with the network, so flow
      weights could become a purely private device, internal to the user's
      rate control algorithm. Nonetheless, the <spanx
      style="emph">outcome</spanx> at the flow level was still weighted
      proportional fairness, and the underlying fairness that produced this
      outcome was still based solely on sharing the cost of congestion among
      bits.</t>

      <t>Back in 1995, Shenker had identified two main types of network
      traffic: elastic and inelastic, distinguished respectively by their
      concave and sigmoid utility functions&nbsp;<xref
      target="FundUtil"></xref>. Whatever the utility function, Kelly teaches
      us that covering congestion costs is sufficient to achieve fairness. But
      then the outcome (in terms of flow rates) depends on the type of utility
      function: <list style="symbols">
          <t>Weighted proportionally fair flow rates will be the outcome for
          elastic traffic streaming;</t>

          <t>Inelastic traffic flows hit a discontinuity once congestion rises
          beyond a certain level, at which point no-one derives any useful
          value unless some are given zero rate, leading to a need for some
          form of admission control, whether self-admission control or
          arbitrated by the network&nbsp;<xref target="DCAC"></xref>. This was
          the theoretical backing to the IETF working group recently chartered
          to standardise admission control using pre-congestion notification
          (PCN) <xref target="PCNcharter"></xref>.</t>

          <t>Key &amp; Massouli&eacute; identified a third major class of
          network traffic where utility is derived solely from the duration
          required to complete transfer of a fixed volume of data&nbsp;<xref
          target="UtilFile"></xref>. They proposed that, if cost fairness
          applied, self-interested congestion control would toggle between
          full line rate and zero (with occasional probes). Such behaviour
          alone can destabilise the network, but it can be stabilised by
          mixing with streaming traffic&nbsp;<xref target="FairIntgr"></xref>.
          Research on the second order incentives necessary to encourage
          stability continues. Policing rather than pricing congestion is one
          way to safeguard everyone's common interest in stability.</t>
        </list></t>

      <t>Since these seminal papers in the late 1990s, theoretical refinement
      has continued, but the main thrust of research has been to find more
      realistic and practical ways of applying the insights, a process which
      is now bearing fruit (see <xref
      target="fair_Policing_Edge"></xref>).</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Specific_Critiques"
             title="Critiques of Specific Schemes">
      <!-- ________________________________________________________________ -->

      <section anchor="fair_Max-min" title="Max-min flow rate fairness">
        <t>In 1997, Kelly demonstrated&nbsp;<xref target="wPropFair"></xref>
        that realistic users would not choose max-min flow rate fairness if
        they were accountable for the congestion they caused to others. Users
        would only choose max-min if they valued bit rate with an
        unrealistically extreme set of utility functions that were all
        identical and that all valued low bit rate infinitesimally less than
        high bit rate. To spell Kelly's result out even more bluntly, max-min
        fair rate allocation would only be considered fair if <spanx
        style="emph">everyone</spanx> valued bit rate in a really weird way:
        that is, they all valued very low bit rate hardly any less than very
        high bit rate and they all valued bit rate exactly the same as each
        other. (Note that max-min could be meaningful if allocating something
        like utility among users, but not rate among flows.)</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_TCP" title="TCP">
        <t>TCP's congestion avoidance&nbsp;<xref target="RFC2581"></xref>
        leads to a form of fairness similar to cost fairness, except it is
        myopic, only being concerned with each instant in time and with each
        flow, as explained in <xref target="fair_Agents_not_Flows"></xref>. To
        be cost fair each user would have to take account of costs across time
        and across flows, and weight each TCP flow according to its importance
        to them, as can be done with MulTCP&nbsp;<xref
        target="MulTCP"></xref>.</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_TFRC" title="TFRC">
        <t>An algorithm that converges on the same flow rate as TCP at
        equilibrium is called TCP-friendly. It can only claim to be
        TCP-compatible if it also exhibits the same dynamics as the TCP
        specification&nbsp;<xref target="RFC2581"></xref>. Certain streaming
        applications won't work unless they are allowed a more sluggish
        response to congestion than TCP's, so researchers invented
        TCP-friendly rate control (TFRC&nbsp;<xref target="RFC3448"></xref>)
        to define fair use of the network in competition with TCP-compatible
        flows.</t>

        <t>`TCP-friendly' congestion control currently has proposed standard
        status in the IETF&nbsp;<xref target="RFC3448"></xref>, and it is
        incorporated into one of the congestion control profiles of the new
        datagram congestion control protocol (DCCP&nbsp;<xref
        target="RFC4342"></xref>) that is also a proposed standard. An
        experimental small packet variant has also been proposed <xref
        target="RFC4828"></xref>.</t>

        <t>Given TFRC aims to emulate TCP, by far its most significant
        fairness problems are those it shares with TCP as just mentioned.
        However, even if we set aside this myopia in time and within flows,
        TFRC exhibits an extra fairness problem because its design was based
        wholly on the broken idea that it is fair for a TCP-friendly flow to
        get the same rate as a TCP-compatible flow.</t>

        <?rfc needLines="19" ?>

        <figure align="center"
                alt="`TCP-friendly' flows cause more congestion than TCP."
                anchor="fair_Fig_tcpfair" src="images/tcpfair.gif"
                title="Schematic showing `TCP-friendly' flows cause more congestion than TCP. A TCP-friendly flow is smoother than a TCP-compatible one but with the same mean rate if measured over long enough time. Therefore at times of high congestion (t_2) it uses more bandwidth than TCP while at times of low congestion (t_1) it uses less.">
          <artwork><![CDATA[
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |See draft-briscoe-tsvarea-fair-02.pdf version for figure here
    |
    |
    |
]]></artwork>
        </figure>

        <t>To explain, we need to remember that both congestion and flow rate
        vary over time. A more nimble congestion response like TCP's can
        mirror changing congestion fairly faithfully. It reduces its rate
        quickly during periods of higher congestion and increases again more
        quickly whenever congestion falls. In <xref
        target="fair_Fig_tcpfair"></xref> the resulting schematic plots of
        congestion and flow rate are shown as mirror images of each other. A
        more sluggish rate response is not as good at tracking the
        fast-changing congestion process. So the sluggish flow more often uses
        higher bandwidth when congestion is high, and more often uses lower
        bandwidth when congestion is low, causing more volume of congestion on
        average. Giving more during times of plenty doesn't compensate for
        taking it back during times of scarcity.</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_RTT" title="RTT and Fairness">
        <t>TCP, and congestion controls such as SCTP <xref
        target="RFC2960"></xref> that inherit from it, converge on a rate that
        is inversely proportional to round trip time (RTT). This is due to
        TCP's original design goal of avoiding adding more than one segment to
        the data in flight each RTT.</t>

        <t>Congestion controls certainly have to take RTT delay in the
        feedback loop into account to ensure stability. Nonetheless, It is
        perfectly possible to design a robust congestion control that responds
        more slowly to changes on longer paths, but still converges to the
        same rate as it would with a shorter RTT. FAST TCP&nbsp;<xref
        target="FAST"></xref> is an example of such a congestion control.
        Siris's weighted window-based congestion controller <xref
        target="WindowPropFair"></xref> also has dynamics that are sensitive
        to RTT, while converging on a bit-rate that is independent of RTT.</t>

        <t>RTT is not in itself a factor that affects fairness. In fact, once
        a sender is accountable for the congestion it causes, it will be in
        its own interests to be more cautious on longer RTT paths, as it has
        proportionately more data in flight so it risks causing more
        congestion before it can react.</t>

        <t>Broadly the extra risk of causing congestion with larger RTTs is
        usually sufficient to encourage behaviour that leads to stability.
        However, this gross generalisation needs to be couched in assumptions
        and constraints that are beyond the scope of this memo (and beyond my
        ability to keep up with the literature).</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_Packet_Size" title="Packet Size and Fairness">
        <t>The issue of how to take packet size into account is covered in
        <xref target="BytePktMark"></xref>. In summary, it advises that packet
        size should not be adjusted for in the network (i.e. not in the AQM
        algorithm), which merely drops (marks) every packet with the current
        drop (marking) probability. Instead, the transport (rate control
        algorithm) should take account of the size of lost or ECN marked
        packets. Essentially an ECN marked packet should be treated by the
        transport as if every byte is ECN marked, just as every byte is
        dropped when a packet it dropped.</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_XCP" title="XCP and router-based fairness schemes">
        <t>This document has focused on the fairness ideas we see in the
        production networks around us today. However, our most pressing
        concern is that these broken ideas also pervade the community working
        on replacing the Internet architecture. It is well-known that TCP
        congestion control is running out of dynamic range and many proposals
        for replacements that can take advantage of higher link capacities by
        accelerating faster have been put forward. XCP was the first of a
        family of router-based hi-speed congestion control mechanism, but it
        is particularly of interest because it claims to allow different
        fairness criteria to be configured.</t>

        <t>However, XCP fairness is based on the myopic flow-rate-based view
        that we have so roundly criticised in this document. For instance, XCP
        claims to be able to achieve a weighted proportional fair rate
        allocation (<xref target="XCP"></xref> &sect;6) by adding a weight
        field to each packet, but it glosses over how anyone could regulate
        each user's choice of the weight. If we compare weighted fair XCP with
        Kelly's original ATM-based weighted proportional fairness, the weight
        parameter advises network equipment on what allocation it should give
        each flow, but there is no direct congestion information in the XCP
        protocol that could be used at the ingress to make each source
        accountable for its choice of weight.</t>

        <t>Further, we believe it will be necessary to be able to apply
        different fairness criteria to different subsets of users of a network
        and subsets across an internetwork as outlined in <xref
        target="fair_Economics"></xref>. We cannot immediately see how this
        would be feasible with router-based approaches like XCP, where routers
        would seem to have to know what sort of fairness each IP address was
        keeping to, and each router would seem to have to share information on
        the history of each user with potentially every other router in the
        world (as explained in <xref target="fair_Myopia"></xref>).</t>

        <t>A combination of XCP's protocol fields could yield approximate
        congestion information to integrate each sender's congestion cost
        history at the access network close to the sender. This would allow
        the user's choice of weight to be regulated and enable different forms
        of fairness to be asserted locally. But one then has to question
        whether it would be simpler for the end system to do the rate control,
        given it has to give routers all the information they need to
        arbitrate fairness between flows anyway.</t>
      </section>

      <!-- ________________________________________________________________ -->

      <section anchor="fair_WFQ" title="WFQ">
        <t>Weighed fair queuing aims to isolate the capacity that a flow
        receives from excessive load applied by other flows, while at the same
        time ensuring the router's capacity is fully utilised. WFQ allocates
        capacity per-flow not per-user, so it is vulnerable to the flow ID
        splitting games described in <xref target="fair_Cheating"></xref> and
        it only controls fairness over flow lifetimes, not over user history.
        A comparison of cost fairness against WFQ (both as originally defined
        and as sold commercially) would be interesting given features of the
        two approaches overlap even though they don't have the same goals. But
        this subject would require a dedicated paper.</t>
      </section>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_RFC_Implications"
             title="Implications for the RFC Series">
      <t>This document points out that the question of cost-fairness between
      congestion controls sits above the transport layer as a policy concern.
      Applications would then exert policy control over congestion control in
      transport protocols (e.g.&nbsp; by setting a weight). This implies that
      the IETF should not be (and never has been) the arbiter of cost-fairness
      between its protocols, but it should still be responsible for their
      stability and perhaps their efficiency. This contrasts with the current
      position where the IETF takes responsibility for the fairness of its
      congestion control algorithms, because they are not under policy
      control. This would seem to have wide-ranging implications on the
      current approach to congestion control standardisation throughout the
      IETF's RFC series.</t>

      <t>RFCs on congestion control fall into the following categories with
      respect to who is mandated (or encouraged) to do what: <list
          style="symbols">
          <t>Those that specify a congestion control algorithm as a building
          block without specifying where it should be used (e.g. TFRC <xref
          target="RFC3448"></xref> and TFRC-SP <xref
          target="RFC4828"></xref>);</t>

          <t>Those that specify the implementation of congestion control for a
          specific transport which often draw on building block congestion
          controls such as TFRC above or TCP (e.g. TCP <xref
          target="RFC2581"></xref>, SCTP <xref target="RFC2960"></xref>, the
          DCCP CCIDs <xref target="RFC4341"></xref><xref
          target="RFC4342"></xref> and the RTP profiles such as that for
          RTP/AVP <xref target="RFC3551"></xref> and RTP/AVPF with earlier
          feedback <xref target="RFC4585"></xref> as well as a number of
          experimental unicast and multicast protocols);</t>

          <t>Those that specify that hosts must implement a particular
          transport (e.g. the `Requirements for Internet Hosts' <xref
          target="RFC1122"></xref>);</t>

          <t>Those that specify what hosts must do if they implement certain
          congestion control enhancements (e.g. the `Congestion Manager' <xref
          target="RFC3124"></xref>);</t>

          <t>Those that specify that applications must implement safe
          congestion control behaviour (e.g. HTTP/1.1 <xref
          target="RFC2616"></xref> and RTP <xref
          target="RFC3550"></xref>);</t>

          <t>Those that specify the meaning of congestion notifications and
          how buffer implementations should generate them (e.g.
          recommendations on AQM <xref target="RFC2309"></xref> and explicit
          congestion notification <xref target="RFC3168"></xref>);</t>

          <t>Those that specify best current practice, guidelines and
          principles for designers of congestion control (e.g. the `Gateway
          Congestion Control Survey' <xref target="RFC1254"></xref>,
          recommendations on AQM <xref target="RFC2309"></xref>, `Congestion
          Control Principles' <xref target="RFC2914"></xref>, `General
          Architectural and Policy Considerations' <xref
          target="RFC3426"></xref> and IAB Concerns Regarding Congestion
          Control for Voice Traffic <xref target="RFC3714"></xref>);</t>

          <t>Those that recommend how new transport protocols should interact
          with existing ones (e.g. recommendations on AQM <xref
          target="RFC2309"></xref>, Criteria for Evaluating Reliable Multicast
          Transports <xref target="RFC2357"></xref>, `Congestion Control
          Principles' <xref target="RFC2914"></xref> and guidelines for new
          RTP profiles <xref target="RFC3550"></xref>).</t>
        </list></t>

      <t>Generally, the RFC series standardises congestion control by
      specifying what implementations of a particular transport protocol
      should or must do in response to congestion events. RFCs generally avoid
      mandating what users should do, or what networks should allow, which are
      considered policy concerns. For instance, a TCP implementation must
      comply with the congestion control in RFC2581 to be able to claim it is
      standard TCP, but the RFCs haven't told applications that they must use
      TCP and they certainly haven't told users that they must only use
      applications that use TCP (or a TCP-fair alternative).</t>

      <t>Therefore, a move to an emphasis on policy control over congestion
      control will not require changes to the RFCs that specify the
      implementation of non-policy-based congestion control for specific
      transports, or congestion control building blocks. These will stand as
      implementations that can be used by applications that do not desire
      policy control. Similarly, mandating that a particular transport must be
      implemented on all hosts, only mandates that it must be available, not
      that applications must use it.</t>

      <t>The RFCs that specify that applications (HTTP/1.1 and RTP) must
      implement safe congestion control behaviour are sufficiently broadly
      stated that they are still meaningful after a shift of the congestion
      control goal-posts.</t>

      <t>The RFCs that define congestion notification (RED <xref
      target="RFC2309"></xref> and ECN <xref target="RFC3168"></xref>) are
      critical standards for cost-fairness and they are already in line with
      what is required (except for the uncertainty in RFC2309 over byte-mode
      packet marking, is addressed in <xref target="BytePktMark"></xref>).</t>

      <t>The RFCs that specify best current practice, guidelines and
      principles generally give excellent advice on congestion control.</t>

      <t>However, we will have to deal with the RFCs that recommended that
      applications should use congestion control that results in a flow rate
      similar to that TCP would achieve under the same conditions,
      specifically <xref target="RFC2309"></xref><xref
      target="RFC2357"></xref> and <xref target="RFC2914"></xref>. For
      instance RFC2357 says, "Note that congestion control mechanisms that
      operate on the network more aggressively than TCP will face a great
      burden of proof that they don't threaten network stability."</t>

      <t>These RFCs were written in good faith based on the idea that the IETF
      is responsible for fairness between flow rates, but this memo has now
      shown that there is nothing at all special about flow rates that happen
      to be equal (when the number of flows from one user and flow durations
      are considered). We can safely assume that the IETF certainly does not
      believe it should have any control over the duration of flows, or
      whether a user should open different flows across different parts of the
      Internet at different times.</t>

      <t>Therefore we will have to update this guidance on fairness to take
      account of the desires of users and of networks for a fairer outcome
      than we have at present. This guidance will also have to address the
      concerns of the users of transports that implement currently
      standardised variants of flow-rate fairness.</t>

      <t>Some of these `legacy' flows would use more resources and others less
      if they were under policy control: <list style="symbols">
          <t>A future network that protects careful users from aggressive
          users might well curtail some legacy flows sent by over-aggressive
          users (e.g. they might be using application that open many TCP
          connections that transfer for very long durations).</t>

          <t>Those legacy flows that use less than they would under policy
          control seem to be of concern, because they will receive a smaller
          share of capacity than they would if other flows were not
          policy-controlled. However, they can upgrade to use policy control
          if they choose, and they have an incentive to do so. The network
          will appear more congested than it used to for these flows, but they
          should still <spanx style="emph">function</spanx> OK, given they
          were designed to work over a best efforts service.</t>
        </list></t>

      <t>Nonetheless, we need to discuss this issue further and reach
      community agreement on how best to handle the transition towards the
      different goal of the more rigorous form of fairness introduced in this
      memo, and the transition away from IETF control and towards user policy
      control of fairness.</t>
    </section>

    <!-- ================================================================ -->

    <section title="IANA Considerations">
      <t>This document includes no request to IANA.</t>
    </section>

    <!-- ================================================================ -->

    <section title="Security Considerations">
      <t>The whole of <xref target="fair_Enforcement"></xref> discusses how
      there are no known ways of enforcing flow rate fairness securely in a
      non-cooperative environment like the current Internet, whereas
      practical, secure solutions have been proposed for enforcing
      cost-fairness.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Conclusions" title="Conclusions">
      <t>The outstanding barrier to realistic resource allocation for the
      Internet is purely religious. In much of the networking community you
      have to put fairness in terms of flow rates, otherwise your work is
      `obviously' irrelevant. At minimum, you are an outcast, if not a
      heretic. But actually basing fairness on flow rates is a false
      god&mdash;it has no grounding in philosophy, science, or for that matter
      `commercial reality'.</t>

      <t>It is a classic case of a hegemony where those living within the box
      have been unaware of the existence of the box, let alone the world
      outside the box. This memo was written from frustration that no-one
      inside the box believed that voices outside the box should be listened
      to. We expect complaints about the blunt style of this document, but it
      seemed the only way forward was to force the issue, by making the box
      look ridiculous in its own terms.</t>

      <t>Cost fairness was derived from economic concepts of fairness back in
      1997. Flow rate fairness had been used in good faith as a guiding
      principle, but when it is seen through the wider angle of this economic
      analysis it is clearly broken, even on its own terms. The criticism is
      far more damning than merely whether allocations are fair. Both the
      thing being allocated (rate) and what it is allocated among (flows) now
      appear completely daft&mdash;both unrealistic and impractical. However,
      most of the Internet community continued to judge fairness using flow
      rates, apparently unaware that this approach had been shown to have no
      intellectual basis. In fact, flow rate fairness algorithms are myopic in
      both space and time&mdash;they are completely unable to control fairness
      at all, because they don't adjust depending on how many flows users
      create nor on how long flows last.</t>

      <t>To be clear, this accusation applies to the so-called `fairness' that
      emerges from the TCP algorithm and the various fair queuing algorithms
      used in production networks. And, more worryingly, this broken idea of
      flow rate fairness has carried over into the community working on
      replacing the Internet architecture.</t>

      <t>In real life, fairness generally concerns costs or benefits. Flow
      rate doesn't come anywhere near being a good model of either. User
      benefit per bit rate might be ten orders of magnitude different for
      different types of flow. And cost depends on the product of bit rate
      with congestion, which is very variable and nothing like bit rate
      alone.</t>

      <t>Worse, there is no evidence whatsoever that fairness between flows
      relates in any way to fairness between any real-world entities that one
      would expect to treat fairly, such as people or organisations. If
      fairness is defined between flows, users can just create more flows to
      get a larger allocation. Worse still, fairness between flows is only
      defined instantaneously, which bears no relation to real-world fairness
      over time. Once the idea of fairness based on integrating costs over
      time is understood, we cannot see any reason to take any form of
      instantaneous per-flow rate fairness seriously, ever again&mdash;whether
      max-min or TCP.</t>

      <t>Even if a system is being designed somehow isolated from the economy,
      where costs will never have to relate to real economic costs, we cannot
      see why anyone would adopt these forms of fairness that so badly relate
      to real-life fairness. For instance, how can people still be designing
      schemes to achieve max-min flow rate fairness years after Kelly's proof
      that users would have to value bit rate in a really weird way in order
      for max-min fairness to be desirable?</t>

      <t>In contrast, cost fairness promises realistic solutions to all these
      issues. Further, it seems more tractable to enforce, unlike flow rate
      fairness, which seems inherently broken in this respect. We believe cost
      fairness is a coherent way forward with all the technical barriers
      overcome, or close to being overcome. This is where the research &amp;
      standards agenda should be focused.</t>

      <t>If anyone with aspirations to scientific credentials still wants to
      cling to flow rate fairness, they must justify their preposterous
      position with reference to some previously respected fairness notions in
      philosophy or social science. In this memo, we have shown how the whole
      ideology is unlikely to be up to such rigor.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Acknowledgements" title="Acknowledgements">
      <t>Thanks are due to Scott Shenker for persuading me to write this,
      Louise Burness for insight into why people think the way they do, Ben
      Strulo for giving a better way of expressing it and Marc Wennink and
      Damon Wischik for challenging the ideas. Also thanks to Arnaud Jacquet,
      Jon Crowcroft, Frank Kelly, Peter Key and Toby Moncaster for their
      useful reviews. Thanks to Michael Welzl and Wes Eddy for their excellent
      survey of Congestion Control in the RFC Series <xref
      target="I-D.irtf-iccrg-cc-rfcs"></xref>, on which <xref
      target="fair_RFC_Implications"></xref> is based. And thanks to the many
      people on the tsvwg mailing list who have raised questions or challenged
      assertions, in the process identifying where clarifying amendments were
      needed. However, the author alone shoulders the blame for any offence
      caused by the bluntness of style.</t>
    </section>

    <!-- ================================================================ -->

    <section anchor="fair_Comments_Solicited" title="Comments Solicited">
      <t>Comments and questions are encouraged and very welcome. They can be
      addressed to the IETF Transport Area mailing list
      &lt;tsv-area@ietf.org&gt;, and/or to the authors.</t>
    </section>
  </middle>

  <back>
    <!-- ================================================================ -->

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

      <?rfc include="reference.RFC.2119" ?>

      <?rfc include="reference.RFC.2309" ?>

      <?rfc include="reference.RFC.2914" ?>

      <?rfc include="reference.RFC.3168" ?>
    </references>

    <references title="Informative References">
      <?rfc include="localref.Briscoe05d.Re-fb_policing" ?>

      <?rfc include="localref.Braden00.NewArch_reqs" ?>

      <?rfc include="localref.Briscoe06.fairfaq" ?>

      <?rfc include="localref.Chhabra02.XCHOKe" ?>

      <?rfc include="localref.Clark02.Tussle.xml" ?>

      <?rfc include="localref.Crowcroft98.MulTCP" ?>

      <?rfc include="localref.Demers89.WFQ" ?>

      <?rfc include="localref.Eriksson05.Justice" ?>

      <?rfc include="localref.Feldman04.Free-riding_whitewashing_p2p" ?>

      <?rfc include="localref.Floyd99.Penalty_box.xml" ?>

      <?rfc include="localref.Friedman98.Cost_cheap_pseudonyms" ?>

      <?rfc include="localref.Ganjali06.Sizing_buffers" ?>

      <?rfc include="localref.Gibbens99.Evol_cc.xml" ?>

      <?rfc include="localref.Gibbens99.DCAC" ?>

      <?rfc include="localref.I-D.briscoe-tsvwg-re-ecn-tcp" ?>

      <?rfc include="localref.I-D.briscoe-tsvwg-byte-pkt-mark" ?>

      <?rfc include="localref.Jacobson88.Cong_avoid_ctrl" ?>

      <?rfc include='localref.Jain84.fairness_index'?>

      <?rfc include="localref.Jaffe80.Decentralised_max-min" ?>

      <?rfc include="localref.Kelly97.Weighted_prop_fair" ?>

      <?rfc include="localref.Kelly98.Shadow_prices_prop_fair" ?>

      <?rfc include="localref.Kelly99.Models_self_mng_Internet" ?>

      <?rfc include="localref.Key99.User_pol_cong_price" ?>

      <?rfc include="localref.Katabi02.XCP" ?>

      <?rfc include="localref.Key04.File_xfr_Stream" ?>

      <?rfc include="localref.LeBoudec05.CongCtrl_Fairness_Tutorial" ?>

      <?rfc include="localref.MacKieVar95.Pricing_congestible" ?>

      <?rfc include="localref.Mazumdar91.Utility_Fair" ?>

      <?rfc include="localref.Odlyzko97.PMP" ?>

      <?rfc include="localref.Shenker95.Fund_design_issues" ?>

      <?rfc include="localref.Strulo03.ArchP2pEcon" ?>

      <?rfc include="localref.Pan03.AFD" ?>

      <?rfc include="localref.Jin04.FAST_TCP" ?>

      <?rfc include="localref.Saul05.Collapse_Globalism" ?>

      <?rfc include="localref.Siderenko91.Social_Justice_USSR" ?>

      <?rfc include="localref.Siris02a.Window_ECN" ?>

      <?rfc include='localref.Siris02.RscCtrlCDMA'?>

      <?rfc include="localref.Swedberg90.Banana" ?>

      <?rfc include="reference.RFC.0970" ?>

      <?rfc include="reference.RFC.1122" ?>

      <?rfc include="reference.RFC.1254" ?>

      <?rfc include='reference.RFC.2475'?>

      <?rfc include="reference.RFC.2581" ?>

      <?rfc include="reference.RFC.2616" ?>

      <?rfc include="reference.RFC.2960" ?>

      <?rfc include="reference.RFC.3426" ?>

      <?rfc include="reference.RFC.3550" ?>

      <?rfc include="reference.RFC.3714" ?>

      <?rfc include="reference.RFC.3124" ?>

      <?rfc include="reference.RFC.3448" ?>

      <?rfc include="reference.RFC.3551" ?>

      <?rfc include="reference.RFC.4341" ?>

      <?rfc include="reference.RFC.4342" ?>

      <?rfc include="reference.RFC.4585" ?>

      <?rfc include='reference.RFC.4828'?>

      <?rfc include="reference.I-D.irtf-iccrg-cc-rfcs" ?>

      <?rfc include="localref.IESG.PCN_charter" ?>
    </references>
  </back>
</rfc>