One document matched: draft-thubert-roll-flow-label-02.xml
<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2460.xml">
<!ENTITY RFC4944 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4944.xml">
<!ENTITY RFC5673 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5673.xml">
<!ENTITY RFC6282 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6282.xml">
<!ENTITY RFC6437 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6437.xml">
<!ENTITY RFC6550 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6550.xml">
<!ENTITY RFC6553 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6553.xml">
<!ENTITY I-D.ietf-roll-terminology SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-roll-terminology.xml">
<!ENTITY I-D.thubert-roll-forwarding-frags SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.thubert-roll-forwarding-frags.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
(Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
(using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" ipr="trust200902" docName="draft-thubert-roll-flow-label-02">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<front>
<title>Use of the IPv6 Flow Label within an LLN</title>
<author initials="P" surname="Thubert" fullname="Pascal Thubert" role="editor">
<organization abbrev="Cisco">
Cisco Systems
</organization>
<address>
<postal>
<street>Village d'Entreprises Green Side</street>
<street>400, Avenue de Roumanille</street>
<street>Batiment T3</street>
<city>Biot - Sophia Antipolis</city>
<code>06410</code>
<country>FRANCE</country>
</postal>
<phone>+33 4 97 23 26 34</phone>
<email>pthubert@cisco.com</email>
</address>
</author>
<!--author fullname="Michael Richardson" initials="M.C." surname="Richardson">
<organization abbrev="Sandelman">
Sandelman Software Works
</organization>
<address>
<postal>
<street> </street>
<city>Ottawa</city>
<region>Ontario</region>
<code> </code>
<country>Canada</country>
</postal>
<email>mcr+ietf@sandelman.ca</email>
</address>
</author-->
<date/>
<area>Routing</area>
<workgroup>ROLL</workgroup>
<abstract>
<t>
This document present how the Flow Label can be used inside a LLN as
a replacement to the RPL option and provides rules for the root to set
and reset the Flow Label when forwarding between the inside of RPL
domain and the larger Internet, in both direction. This new operation
aims at saving an IPv6 in IPv6 encapsulation within the RPL domain that
is required with the RPL option for all packets that reach outside of
the RPL domain.
</t>
</abstract>
</front>
<middle>
<!-- **************************************************************** -->
<!-- **************************************************************** -->
<!-- **************************************************************** -->
<!-- **************************************************************** -->
<section anchor='introduction' title="Introduction">
<t>
In some Low Power and Lossy Network (LLN) applications such as control systems
<xref target="RFC5673"/>, a packet loss is usually acceptable but jitter and latency
must be strictly controlled as they can play a critical role in the interpretation
of the measured information. Sensory systems are often distributed, and the control
information can in fact be originated from multiple sources and aggregated.
As a result, it can be a requirement for related measurements from multiple sources
to be treated as a single flow following a same path over the Internet in order to
experience similar jitter and latency. The traditional tuple of source,
destination and ports might then not be the proper indication to isolate
a meaningful flow.
</t>
<t>
In a typical LLN application, the bulk of the traffic consists of small chunks of data
(in the order few bytes to a few tens of bytes) at a time.
In the industrial case, a typical frequency is 4Hz but it can be a
lot slower than that for, say, environmental monitoring. The granularity
of traffic from a single source is too small to make a lot of sense in load balancing
application.
</t>
<t>
In such cases, related packets from multiple sources should not
be load-balanced along their path in the Internet; load-balancing can be discouraged by tagging
those packets with a same Flow Label in the <xref target="RFC2460"> IPv6
</xref> header. This can be achieved if the Flow Label in packets outgoing a RPL domain
are set by the root of the RPL structure as opposed to the actual source.
It derives that the Flow Label could be reused inside the RPL domain.
</t>
<t>In a LLN, each transmitted bit represents energy and every saving counts dearly.
Considering that the value for which the Flow Label is used in
<xref target="RFC6437"> the IPv6 Flow Label Specification </xref>
is to serve load balancing in the core, it is unlikely that
LLN devices will consume energy to generate and then transmit a Flow Label
to serve interests in some other place. On the other hand, it makes sense to recommend the
computation of a stateless Flow Label at the root of the LLN towards the Internet.
</t>
<t> Reciprocally, <xref target="RFC6437"/> requires that once set, a non-zero flow label value is left unchanged.
The value for that setting is consumed once the packet has traversed the core and reaches the LLN.
Then again, there is little value but a high cost for the LLN in spending 20 bits to transport a Flow Label from the Internet
over the constrained network to the destination node.
It results that the MUST in <xref target="RFC6437"/> should be alleviated for packets coming
from the outside on the LLN, and that it should be acceptable that the compression over the LLN
erases the original flow label. It should also be acceptable that the Flow Label field is reused
in the LLN as proposed in this draft.
</t>
<t> <xref target="RFC6550">
The Routing Protocol for Low Power and Lossy Networks (RPL) </xref> specification
defines a generic Distance Vector protocol that is adapted to a variety of LLNs.
RPL forms Destination Oriented Directed Acyclic Graphs (DODAGs) which root
often acts as the Border Router to connect the RPL domain to the Internet.
The root is responsible to select the RPL Instance that is used to forward
a packet coming from the Internet into the RPL domain.
</t>
<t>
A classical RPL implementation will use the <xref target="RFC6553"> RPL Option for Carrying
RPL Information in Data-Plane Datagrams </xref> to tag a packet with the Instance ID and
other information that RPL requires for its operation within the RPL domain. Sadly, the
Option must be placed in a Hop-by-Hop header that must be added to or removed from packets
that cross the border of the RPL domain. For reasons such as the capability to send ICMP errors,
back, this operation involves an extra 6in6 encapsulation within the RPL domain
that is detrimental to the LLN operation, in particular with regards to bandwidth and
battery constraints. The extra encapsulation may cause a containing frame to grow above
maximum frame size, leading to Layer 2 or 6LoWPAN <xref target="RFC4944"/> fragmentation,
which in turn cause even more energy spending and issues discussed in the
<xref target="I-D.thubert-roll-forwarding-frags">LLN Fragment Forwarding and Recovery</xref>.
<figure title="Figure 1: 6in6 Encapsulation within the LLN ">
<artwork><![CDATA[
------+---------
| Internet |
| | Native IPv6
+-----+ |
| | Border Router (RPL Root) |
| | || | ||
+-----+ || | || IPv6 +
| || | || HbH
o o o o || | || headers
o o o o o o o o o || | ||
o o o o o o o o o o || | ||
o o o o o o o o o || | ||
o o o o o o o o
o o o o o o
o o o o
LLN ]]></artwork>
</figure>
Additionally, <xref target="RFC6282"> Compression Format for IPv6 Datagrams
over IEEE 802.15.4-Based Networks </xref> and its variants for other types of LLNs do not
provide an efficient compression for the RPL option so the cost in current implementations can
not be alleviated in any fashion. So even for packets that are confined within the RPL domain
and do not need the 6in6 encapsulation, the use of the flow label instead of the RPL option
is a valuable saving.
</t>
<t>
All the packets that are leaving a DODAG of a RPL domain towards the Internet will transit via a
same root. The root is an ideal place to set the IPv6 Flow Label to a same value across multiple
sources of a same flow when that operation is needed, ensuring complience with the rules defined
by <xref target="RFC6437">the IPv6 Flow Label Specification </xref> within the Internet. At the
same time, the root segragates the Internet and the RPL domain, allowing to reuse the Flow Label
within the RPL domain. </t>
<t> It can be noted that <xref target="RFC6282"/> provides an efficient header compression for packets
that do have the Flow Label set in the IPv6 header. It results that the same information as transported
in the RPL option itself represents actually less bits in the air when the Flow Label is used instead.
This document specifies how the Flow Label can be reused within the RPL domain as a
replacement to the RPL option. The use of the Flow Label within a RPL domain is an instance of
the stateful scenarios as discussed in <xref target="RFC6437"/> where the states include the rank
of a node and the RPLInstanceID that identifies the routing topology.
</t>
<t></t>
</section>
<!-- **************************************************************** -->
<!-- **************************************************************** -->
<!-- **************************************************************** -->
<!-- **************************************************************** -->
<section title="Terminology">
<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>
<t>The Terminology used in this document is consistent with and
incorporates that described in `Terminology in Low power And Lossy
Networks' <xref target="I-D.ietf-roll-terminology"></xref>
and <xref target="RFC6550"/>.</t>
</section>
<section title="Flow Label Format Within the RPL Domain">
<t>
<xref target="RFC6550"/> section 11.2 specifies the fields that are
to be placed into the packets for the purpose of Instance Identification,
as well as Loop Avoidance and Detection. Those fields include an 'O', and 'R'
and an 'F' bits, the 8-bit RPLInstanceID, and the 16-bit SenderRank.
SenderRank is the result of the DAGRank operation on the rank of the sender,
where the DAGRank operation is defined in section 3.5.1 as:
<list><t>DAGRank(rank) = floor(rank/MinHopRankIncrease)</t></list>
</t>
<t>If MinHopRankIncrease is set to a multiple of 256, it appears that
the most significant 8 bits of the SenderRank will be all zeroes and
could be ommitted. In that case, the Flow Label MAY be used as a
replacement to the <xref target="RFC6553"/> RPL option. To achive this, the
SenderRank is expressed with 8 least significant bits, and the information
carried within the Flow Label in a packet is constructed follows: </t>
<figure anchor="flowlabel" title="The RPL Flow Label">
<artwork>
0 1 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |O|R|F| SenderRank | RPLInstanceID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
</figure>
<t>The first (leftmost) bit of the Flow Label is reserved and should be set to zero.
</t>
</section>
<section title="Root Operation">
<t> <xref target="RFC6437"/> section 3 intentionally does not consider flow label values in
which any of the bits have semantic significance. However, the present specification assigns
semantics to various bits in the flow label, destroying within the edge network that is the
RPL domaina property of belonging to a statistically uniform distribution that is desirable
in the rest of the Internet. This property MUST be restored by the root for outgoing packets.
</t>
<t> It can be noted that the rationale for the statistically uniform distribution does not
necessarily bring a lot of value within the RPL domain. In a specific use case where it would,
that value must be compared with that of the battery savings in order to decide which technique
the deployment will use to transport the RPL information.
</t>
<section title="Incoming Packets">
<t>
When routing a packet towards the RPL domain, the root applies a policy to determine whether
the Flow Label is to be used to carry the RPL information. If so, the root MUST reset the Flow Label and
then it MUST set all the fields in the Flow Label as prescribed by <xref target="RFC6553"/> using the
format specified in <xref target="flowlabel"/>. In particular, the root selects the Instance that will
be used to forward the packet within the RPL domain.
</t>
</section>
<section title="Outgoing Packets">
<t>
When routing a packet outside the RPL domain, the root applies a policy to determine whether
the Flow Label was used to carry the RPL information. If so, the root MUST reset the Flow Label.
The root SHOULD recompute a Flow Label following the rules prescribed by <xref target="RFC6553"/>.
In particular, the root MAY ignore the source address but it SHOULD use the RPLInstanceID for the computation.
</t>
</section>
</section>
<section title="RPL node Operation">
<t>Depending on the policy in place, the source of a packet will decide whether to use this specification
to transport the RPL information in the IPv6 packets. If it does, the source in the LLN SHOULD set the
Flow Label to zero and MUST NOT expect that the flow label will be conserved end-to-end".
</t>
</section>
<section title="Security Considerations">
<t> The process of using the Flow Label as opposed to the RPL option
does not appear to create any opening for new threat compared to
<xref target="RFC6553"/>.
</t>
</section>
<section title="IANA Considerations">
<t>No IANA action is required for this specification.
</t>
</section>
<section title="Acknowledgments">
<t>The author wishes to thank Brian Carpenter for his in-depth review and constructive approach to the problem and its resolution.</t>
</section>
</middle>
<back>
<references title='Normative References'>
&RFC2119;
&RFC2460;
&RFC6282;
&RFC6550;
&RFC6553;
</references>
<references title='Informative References'>
&RFC4944;
&RFC5673;
&RFC6437;
&I-D.ietf-roll-terminology;
&I-D.thubert-roll-forwarding-frags;
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-22 03:10:10 |