<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
	  <!ENTITY rfc6126 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6126.xml'>
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes"?>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="6"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc category="info" docName="draft-mrc-banana-considerations-01">
  <front>
    <title>Considerations for Bandwidth Aggregation</title>
    <author initials="M." surname="Cullen" fullname="Margaret Cullen">
      <organization>Painless Security</organization>
      <address>
        <postal>
          <street>14 Summer Street, Suite 202</street>
          <city>Malden</city> <region>MA</region>
          <code>02148</code>
          <country>USA</country>
        </postal>
        <phone>+1 781 405-7464</phone>
        <email>margaret@painless-security.com</email>
        <uri>http://www.painless-security.com</uri>
      </address>
    </author>
    <author initials="M." surname="Zhang" fullname="Mingui Zhang">
      <organization>Huawei Technologies</organization>
      <address>
        <email>zhangmingui@huawei.com</email>
      </address>
    </author>
    <date day="8" month="July" year="2016"/>
    <area>Internet</area>
    <workgroup>Homenet Working Group</workgroup>
    <abstract>
      <t>
	This document lists a number of architectural and technical topics
	that should be considered in the design and implementation of
	Bandwidth Agregation mechanisms.
      </t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction">
      <t>
	There are currently several bandwidth aggregation solutions
	being discussed within the IETF or other parts of the Internet
	industry.  This document discusses a number of technical and
	architectural facts that should be considered in the design
	and implementation of those solutions.  This document is
	intended to provide useful information to the community, not
	to state requirements or advocate for a particular solution.
      </t>
      <t>
	There is one simple thought underlying many of the
	considerations in this document: the goals of bandwidth
	aggregation are to increase the effective bandwidth available
	to customers and improve the reliability of customers'
	Internet access by using all of the available links, not just
	one of them.  Intuitively, two links should have more
	bandwidth and reliability than one link, but experience shows
	that it is actually quite hard to design a bandwidth
	aggregation solution that will achieve the desired goals in
	all cases, and quite easy to design a solution that will
	reduce the effective bandwidth or decrease the reliability of
	Internet access in an unacceptably high number of cases. Many
	of the considerations in this document are intended to point
	out why that happens, so that solutions and implementations can
	avoid known pitfalls in this area.
      </t>
      <t>
	[Note:  This document is a work in progress.  Feedback
	on the existing content is welcome, as well as feeback
	on other considerations that should be included.  Please
	send any feedback to the Bandwidth Aggregation mailing
	list:  banana@ietf.org]
      </t>
    </section>
    <section title="What is Bandwidth Aggregation?">
      <t>
	[TBD]
      </t>
    </section>
    <section title="Taxonomy of Solutions">
      <t>
	This section attempts to catergorize bandwidth aggregation
	solutions along several axes, providing a taxonomy tbat we
	can use to describe and reason about individual solutions.
	[Note: This section is largely TBD.]
      </t>
      <section title="Tunnel-Based Solutions">
	<t>
	  Many of the Bandwidth Aggregations currently under
	  discussion are tunnel-based solutions.  They tunnel traffic
	  over the links that are being aggregated, and recombine the
	  traffic on the remote end.
	</t>
	<t>
	  [Insert ASCII image of tunnel-based approach.]
	</t>
	<t>
	  There is at least one proposal for Bandwith Aggregation (the
	  MP-TCP-based approach) that does not use tunnels.  The
	  considerations for tunnel-based solutions listed below may
	  not apply to non-tunnel-based solutions.
	</t>
      </section>
      <section title="Per-Packet vs. Per-Flow Multiplexing">
        <t>
	  The solutions currently under discussion use several
	  different methods to determine which traffic will be sent
	  over which interface.  These methods can be grouped into
	  two categories: per-packet multiplexing and per-flow
	  multiplexing.
	</t>
	<t>
	  Per-packet multiplexing aggregates the bandwidth by
	  sending the desired proportion of packets over each
	  interface.  In these solutions, packets from single flow
	  (such as a TCP connection) may be split across multiple
	  interfaces and will need to be recombined at the remote
	  end.  However, the ability to multiplex on a per-packet
	  basis makes it possible to most precisely apportion
	  traffic across the available bandwidth.
	</t>
	<t>
	  Per-flow multiplexing involves choosing a single interface
	  for each flow (i.e. TCP connection or application session)
	  and sending all of the packets for a single flow across
	  that interface.  In these solutions, the flow do not need
	  to be combined on the remote end.  However, the ability to
	  balance traffic between multiple links may be limited if
	  there are only a small number of traffice flows active.
	</t>
      </section>
    </section>
    <section title="Considerations for All Solutions">
      <t>
	This section desribes potential issues that should be
	considered in the design and implementation of all bandwidth
	aggregation solutions.
      </t>
      <section title="Link Characteristics and Performance">
      </section>
      <section title="Bypass Traffic">
      </section>
      <section title="Capped or Tariffed Interfaces">
	<t>
	  In some cases, bandwith aggregation may be performed between
	  dedicated links and links that have traffic caps or tarifs
	  associated with additional use.  In these cases, customer
	  may want to use bandwidth aggregation to increase the
	  performance of some applications, while other applications
	  (e.g. firmware upgrades or content downloads) may be limited
	  to using the dedicated link.  Solutions that wish to support
	  this capability will need to support having a set of traffic
	  that will be distributed using the bandwidth aggregation
	  algorithms, and a set of traffic that will not.
	</t>
      </section>
      <section title="Learning from History (Multilink PPP)">
	<t>
	  The IETF has a venerable, standard, implemented solution to
	  this sort of problem: Multilink PPP.  Unfortunately, it is
	  commonly said that experience with Multilink PPP did not
	  find that it increased the effective bandwidth when it was
	  used to share two indentical ISDN lines, compared to the
	  bandwidth that was achieved from using only one line...
	</t>
	<t>
	  [Note:  We should attempt to determine if this is true and,
	  if so, find any research papers or other documentation
	  that might help us understand why this was true, so that
	  we might learn from history.]
	  </t>
      </section>
    </section>
    <section title="Considerations for Tunnel-Based Solutions">
      <section title="Tunnel Overhead">
	<t>
	  Tunneling involves more overhead than sending non-tunnelled
	  traffic for two reasons: the extra IP and tunnel headers
	  that must be included in each packet, and any tunnel
	  management traffic that must be exchanged.  This means that,
	  in order to achieve increased effective bandwidth by
	  aggregating traffic across more than one link, the raw
	  bandwidth across multiple links must be higher than the
	  bandwidth on a single link by a large enough margin to
	  compensate for the tunnel overhead, so that increased
	  effective bandwidth will result.
	</t>
      </section>
      <section title="MTU Issues">
	<t>
	  There are a number of MTU Issues associated with all
	  tunneling mechanisms, and there is a different set of MTU
	  issues associated with any mechanism that changes the MTU of
	  packets within a given flow.
	</t>
	<t>
	  [Note: This section is TBD.]
	</t>
	<section title="Fragmentation Issues">
	</section>
	<section title="Issues with MTU Changes">
	</section>
      </section>
    </section>
    <section title="Considerations for Per-Packet Solutions">
      <section title="Packet Ordering">
      </section>
      <section title="Transport Layer Algorithms">
	<t>
	  There are transport layer congestion control algorithms
	  implemented in every TCP/IP stack.  It is the purpose of
	  these algorithms to ramp up the speed of a TCP connection
	  slowly, and to back off at the first sign of congestion
	  (i.e. packet loss).  There are also algorithms which are
	  designed to detect packet loss as quickly as possible by
	  analyzing the protocol round-trip times, and deciding that a
	  packet has been lost whenever there is a longer delay than
	  expected before an acknowledgement is received.  Per-packet
	  solutions run the risk of interacting pathologically with
	  these algorithms.
	</t>
	<t>
	  For example, if traffic from a single flow is being
	  demultiplexed across two links with significantly different
	  round-trip times (i.e. differnt latencies), the TCP
	  retransmission algorithms may be triggered for packets that
	  traverse the higher latency link.  This may cause the TCP
	  congestion control algorithms to inaccurately detect
	  congestion (even when neither link is congested) and slow
	  down the speed of the TCP connetion.  In these cases, the
	  throughput of each TCP connection may be reduced, thus
	  reducing the performance of a customer's applications to the
	  point where their applicaitons would have run faster over a
	  single link.
	</t>
	<t>
	  This problem can potentially be avoided by avoiding
	  aggregation of links with significantly different latencies.
	  However, it may be desirable to perform bandwidth
	  aggregation across those links in some cases.
	</t>
      </section>
    </section>
    <section title="Considerations for Per-Flow Solutions">
      <t>
	This section describes some potential issues that should be
	considered in the design of per-flow bandwidth aggregation
	solutions.
      </t>
      <section title="Granularity Issues">
	<t>
	  Per-Flow demultiplexing is in widespread use for traffic
	  engineering and load balancing in carrier and corporate
	  networks.  Within those networks, there are a very large
	  number of flows, so being able to direct traffic on a per-flow
	  basis will generally be sufficient to achieve acceptable
	  load-balancing or link aggregation.
	</t>
	<t>
	  However, the number of flows generated by a single home or
	  small office might not provide sufficient granularity to
	  achieve the desire level of bandwidth aggregation.  Also some
	  flows, such as streaming video flows, might use far more
	  bandwidth than other, such as downloading a single image on a
	  web page.  It is not always possible to predict which flows
	  will be high-bandwidth flows, and which will require less
	  bandwidth.
	</t>
      </section>
      <section title="Aggregated Flows">
	<t>
	  Some Internet flows are aggregated into single, larger flows
	  at the end-nodes.  This would include VPN traffic that is
	  tunnelled to a corporate intranet, or other tunnelled traffic
	  such as Teredo traffic for IPv6.  Use of these mechanisms can
	  prevent proper classification of traffic into separate flows,
	  thus exacerbating the granularity issues described above.
	</t>
      </section>
      <section title="Encrypted Traffic">
	<t>
	  In some cases such as secure VPN traffic, the contents of
	  packets may be encrypted in a way that does not allow a
	  middlebox to see the transport-layer flow inforamtion (such
	  as TCP or UDP ports).  In these cases, it might not be
	  possible to properly separate multiple flows between a
	  single set of endpoints.  This can exacerbate the
	  granularity issues described above.
	</t>
      </section>
    </section>
    <section title="Practical Considerations">
      <section title="Use Available Information">
	<t>
	  In many of the environments in which these mechanisms will
	  be deployed, there is already considerable informaiton
	  available about link quality, lost packets, traffic loads
	  and effective bandwidth.  It is possible to use that
	  information to actively tune a bandwidth aggregation
	  solution to achieve optimal effective bandwidth.  This
	  information can also be used to detect situations in which
	  the link quality of a secondary link is not sufficient to
	  provide enough additional bandwidth to compensate for the
	  bandwidth aggregation overhead.
	</t>
      </section>
      <section title="Theory is No Substitute for Experience">
	<t>
	  Because of the complexity of the algorithms implemented at
	  multiple layers of the TCP/IP Stack, many things that would
	  appear to work in theory or in limited simulation do not
	  have the expected results when deployed in a real-world
	  environment.  Therefore, it would be highly desirable to
	  have real-world experience running a bandwidth aggregation
	  mechanism in an operational network before standardizing it
	  within the IETF.
	</t>
      </section>
    </section>
    <section title="Security Considerations">
      <section title="Binding Tunnel Endpoints">
      </section>
    </section>
    <section title="Appendix A: List of Solutions">
      <t>
	This is a (possibly incomplete) list of current or proposed
	solutions for Bandwidth Aggregation.  The descriptions in this
	section (when present) were provided by the proponents of each
	solution.  This list is provided only as a source of
	information about possible solutions, not as a recommendation
	for or against any of these solutions.
      </t>
      <t>
	[Note: Insert information from Google Doc in this section.]
      </t>
      <section title="Multilink PPP">
      </section>
      <section title="GRE Tunnel Binding">
      </section>
      <section title="LISP-Based Solution">
      </section>
      <section title="MIP-Based Solution">
      </section>
      <section title="MP-TCP-Based Solution">
      </section>
    </section>
  </middle>
  <back>
    <references title="Informative References">
      &rfc6126;
    </references>
  </back>
</rfc>
