<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<!-- $Id: draft-dreibholz-ipv4-flowlabel-12.xml 2433 2010-12-02 21:18:39Z dreibh $ -->

<?rfc toc="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc strict="no" ?>
<?rfc symrefs="yes" ?>

<rfc category="std" ipr="pre5378Trust200902" docName="draft-dreibholz-ipv4-flowlabel-16.txt">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>


<front>

<title>An IPv4 Flowlabel Option</title>

<!-- ************** THOMAS DREIBHOLZ *************** -->
<author initials="T." surname="Dreibholz" fullname="Thomas Dreibholz">
<organization abbrev="Simula Research Laboratory">Simula Research Laboratory, Network Systems Group</organization>
<address>
<postal>
   <street>Martin Linges vei 17</street>
   <city>1364 Fornebu</city>
   <region>Østlandet</region>
   <country>Norway</country>
</postal>
<phone>+47-6782-8200</phone>
<facsimile>+47-6782-8201</facsimile>
<email>dreibh@simula.no</email>
<uri>http://www.iem.uni-due.de/~dreibh/</uri>
</address>
</author>

<date day="2" month="July" year="2012" />
<keyword>Internet-Draft</keyword>

<abstract>
<t>This draft defines an IPv4 option containing a flowlabel that is compatible to IPv6.
It is required for simplified usage of IntServ and interoperability with IPv6.</t>
</abstract>

</front>


<middle>


<section title="Introduction">

<section title="Terminology">
<t>This document uses the following terms:
<list style="symbols">
   <t>IntServ (Integrated Services): Reservation of network resources (bandwidth) on a per-flow basis. See
   <xref target="RFC1633" />,
   <xref target="RFC2205" />,
   <xref target="RFC2208" />,
   <xref target="RFC2209" />,
   <xref target="RFC2210" />,
   <xref target="RFC2211" /> and
   <xref target="RFC2212" /> for details.
   </t>
   <t>
   Flow:
   An IntServ reservation between two endpoints.
   </t>
   <t>
   Flow Label: The Flow Label field of the IPv6 header and the IPv4 option header defined
   in this draft. It is used for marking a packet to use a specific IntServ
   reservation. See <xref target="RFC6437" />, <xref target="RFC6436" /> for detailed descriptions.
   </t>
</list></t>
</section>


<section title="Abbreviations">
<t>
<list style="symbols">
   <t>RSVP: ReSource Reservation Protocol</t>

   <t>SCTP: Stream Control Transmission Protocol</t>

   <t>TCP:  Transmission Control Protocol</t>

   <t>QoS:  Quality of Service</t>

   <t>UDP:  User Datagram Protocol</t>
</list>
</t>
</section>


<section title="Conventions">
<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"/>.</t>
</section>

</section>


<section title="A Flow Label Option for IPv4">

   <section title="Motivation">
   <t>
      This section describes the motivation to add a flow label option to the
      IPv4 protocol.
   </t>
      <section title="The Flow Label Field of IPv6">
         <t>
         The Flow Label field (see <xref target="RFC6436" /> and <xref target="RFC6437" />)
         of the IPv6 header (see <xref target="RFC2460" />) is a
         20-bit number. All packets from the same source address
         having the same flow label MUST contain the same destination address.
         Therefore, the flow label combined with the source address is a network-
         unique identification for a specific packet flow.
         The idea behind the flow label is marking specific flows for IntServ. That
         is, the routers on the path from source to destination keep e.g.
         reservation states for the flows. The flow label provides easy
         identification and utilizes efficient lookup, e.g. using a hash function on the
         3-tuple (source address, destination address, flow label).
         </t><t>
         Using the IPv6 flow label, packets can be mapped easily to specific flows,
         with the following features:
         <list style="symbols">
            <t>Transport Layer Protocol Independence:
            Since the mapping is directly specified in the IP
            header, all possible layer 4 protocols are supported, even protocols to be
            specified in a far future.
            </t>
            <t>Support for Network Layer Encryption: The mapping is
            independent of payload encryption (e.g. by IPsec).
            </t>
            <t>Support for Fragmentation: If fragmentation of a large IP packet is
            necessary, all fragments contain the same flow label. Therefore,
            fragmentation does not cause any flow-marking problem.
            </t>
            <t>Flow Sharing: By marking packets with a flow label, it is possible to
            share a single flow (IntServ reservation) with several communication
            associations from host A to host B. For example, a video stream via UDP and
            a HTTP download via TCP could share a single reservation.
            For the user, flow sharing has the advantage that if one of its
            communication associations temporarily requires lower bandwidth than
            expected, other associations sharing the same flow may use the remaining
            bandwidth. That is, his possibly expensive reservation is fully utilized.
            Flow sharing also helps keeping the total number of reservations a router
            has to handle small, reducing their CPU and memory requirements and
            therefore cost.
            </t>
            <t>Multi-Flow Connections: One communication association can divide up its
            packets to several flows, simply by marking packets with different flow
            labels. This technique can be used for layered transmission. That is, a
            stream (e.g. a video) is divided up into several parts (called layers). For
            example, the first layer (base layer) of a video contains a low-quality
            version, the second (1st enhancement layer) the data to generate a
            higher-quality version, etc.. Now, the first layer can be mapped to a high-quality
            reservation (guaranteed bandwidth, low loss rate) at higher cost, but the
            following layers can be mapped to lower-quality reservations (e.g. higher
            loss rate) or even best effort at lower cost. Research shows that the total
            transmission cost can be highly reduced using layered transmission (see
            <xref target="Dre2001" />, <xref target="IJMUE2009" /> for details).
            </t>
            </list>
         </t>
      </section>

      <section title="The Limitations of IntServ via IPv4">
         <t>
         Using IntServ with IPv4, there are several problems that can only be solved
         with high management effort:
         <list style="symbols">
            <t>No Transport Layer Protocol Independence:
            It is necessary to mark the packets within the
            layer 4 protocol header. For example, the TCP, UDP or SCTP port numbers can be
            used to mark flows (with limitations, see below). But for new protocols
            (e.g. experimental, new standards, proprietary), software updates for *all*
            IntServ routers are necessary to recognize the packet flow!
            </t>
            <t>No Support for Network Layer Encryption: Since it is necessary to
            read fields of the layer 4 protocol header, it may not be encrypted. Therefore,
            e.g. the usage of IPsec is impossible.
            </t>
            <t>Support for Fragmentation: Only the first fragment of a large packet contains
            the layer 4 header necessary to map the packet to a flow. Mapping other fragments
            would require the hops to remember packet identities and try to map fragments to
            packet identities. Due to the management effort and memory requirements, this is
            not realistic for high-bandwidth backbone routers; especially when packet
            reordering must be considered. Furthermore, load sharing or traffic distribution
            would be impossible.
            </t>
            <t>No Flow Sharing: It is usually impossible for two different communication
            associations to share the same flow, e.g. if TCP flows are recognized using
            port numbers. This makes it necessary to reserve an IntServ flow for each
            communication association. This implies an increased number of flow states
            for routers to keep and maintain. Furthermore, if one association
            temporarily uses a lower bandwidth, the free bandwidth of its flow cannot
            easily be borrowed to another association.
            </t>
            <t>
            No Multi-Flow Connections: To use layered transmission, e.g. a video via
            UDP, the transmission of every layer would require own port numbers. In the
            case of connection-oriented transmission protocols (e.g. TCP, SCTP), every
            layer would even require its own connection setup and management. Depending
            on the transport protocol, the number of communication associations and the
            number of flows, much more work is necessary compared to IPv6 using flow
            labels.
            </t>
         </list>
         All in all, using IntServ flows with IPv4 requires much more work compared
         to IPv6, where simply the flow label can be used. It is therefore useful to
         add such a field to IPv4, too. An appropriate place to add such a field is
         an IPv4 option header.
         </t>
      </section>

   </section>

   <section title="Definition of the Flow Label Option">
      <t>
      IPv4 (see <xref target="RFC0791" />) already defines an option header for a
      16-bit SATNET stream identifier. Since this identifier would be incompatible
      to the 20-bit IPv6 flow label, reuse of this existing option header is
      inappropriate. Therefore, a new one is defined as follows.
      </t>
      <figure><artwork>
Flow Label Option

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     |0 0 0 0 0 0 0 0|0 0 0 0 0 0 0 0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 0 0 0 0 0 0|0 0 0 0|              Flow Label               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      </artwork></figure>
      <t><list style="symbols">
      <t>Type: 143</t>
      <t>Length: 8 octets</t>
      <t>Flow Label: The 20-bit flow label. All definitions of
      <xref target="RFC6437" /> and <xref target="RFC6436" /> for the
      IPv6 flow label are also valid for this field. A value of zero denotes that
      no flow label is used. In this case, the flow label option is in fact
      unnecessary.</t>
      </list></t>
      <t>
      The Flow Label option SHOULD be copied on fragmentation. It MUST be the first
      option of the IP header and therefore MUST NOT appear more than once per IPv4
      packet. The Router Alert option SHOULD NOT be used to mark the necessity for
      routers to examine the options. Placing the Flow Label option as first
      option allows for easy processing in hardware.
      </t>
   </section>

</section>


<section title="Translation between IPv6 and IPv4">
<t>
Since the new IPv4 flow label is fully compatible to the IPv6 flow label,
the field MAY be translated in the other protocol's one during protocol
translation. That is, a router can translate an IPv6 packet set from an
IPv6-only host to an IPv4-mapped address of an IPv4-only host and the flow
label may simply be copied. The same may also be applied in the backwards
direction.
</t><t>
Note, that copying the flow label during protocol translation is not
mandatory. There may be IntServ reservation reasons for not copying but
setting the flow label to zero. But a router MUST NOT set the flow label to
another value than the copy or 0, since the source is responsible to ensure
that the source address combined with the flow label is network-unique
</t>
</section>


<section title="Security Considerations">
<t>Security considerations are similar to the IPv6 flow label, see <xref target="RFC6437" />.</t>
</section>


<section title="IANA Considerations">
<t>This document introduces no additional considerations for IANA.</t>
</section>


<section title="Acknowledgments">
<t>
   The author would like to thank
   Brian E. Carpenter,
   Wes George,
   Perry Lorier,
   Christoph Reichert and
   Michael Tüxen
   for their comments.
</t>
</section>


</middle>


<back>

<references title='Normative References'>
 <?rfc include="reference.RFC.0791" ?>
 <?rfc include="reference.RFC.2119" ?>
 <?rfc include="reference.RFC.2205" ?>
 <?rfc include="reference.RFC.2210" ?>
 <?rfc include="reference.RFC.2211" ?>
 <?rfc include="reference.RFC.2212" ?>
 <?rfc include="reference.RFC.2460" ?>
 <?rfc include="reference.RFC.6437" ?>
</references>

<references title='Informative References'>
 <?rfc include="reference.RFC.1633" ?>
 <?rfc include="reference.RFC.2208" ?>
 <?rfc include="reference.RFC.2209" ?>
 <?rfc include="reference.RFC.6436" ?>
 <?rfc include="reference.Dre2001" ?>
 <?rfc include="reference.IJMUE2009" ?>
</references>

</back>

</rfc>
