<?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 RFC0792 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0792.xml">
<!ENTITY RFC0854 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0854.xml">
<!ENTITY RFC1191 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1191.xml">
<!ENTITY RFC1812 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1812.xml">
<!ENTITY RFC1918 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1918.xml">
<!ENTITY RFC1981 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1981.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3439 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3439.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC3627 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3627.xml">
<!ENTITY RFC3719 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3719.xml">
<!ENTITY RFC4253 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4253.xml">
<!ENTITY RFC4443 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4443.xml">
<!ENTITY RFC4821 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4821.xml">
<!ENTITY RFC5218 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5218.xml">
<!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
<!ENTITY RFC5424 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5424.xml">
<!ENTITY RFC6164 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6164.xml">
<!ENTITY RFC6177 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6177.xml">
<!ENTITY RFC6192 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6192.xml">
<!ENTITY RFC6241 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml">
<!ENTITY RFC6540 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6540.xml">
<!ENTITY RFC7217 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7217.xml">
<!ENTITY RFC7223 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7223.xml">
<!ENTITY RFC7224 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7224.xml">
<!ENTITY RFC7277 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7277.xml">
<!ENTITY RFC7317 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7317.xml">
<!ENTITY RFC7404 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7404.xml">
<!ENTITY RFC7527 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7527.xml">
<!ENTITY RFC7663 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7663.xml">
<!ENTITY RFC7922 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7922.xml">
<!ENTITY RFC7980 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7980.xml">
]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-ali-ipv6rtr-reqs-02" ipr="trust200902">

<!-- ***** FRONT MATTER ***** -->

<front>

<title>Requirements for IPv6 Routers</title>

<author initials='Z.' surname='Kahn' fullname='Zaid Ali Kahn, Editor'>
<organization>LinkedIn</organization>
<address>
<postal>
<street>xxx</street>
<city>xxx</city>
<region>CA</region>
<code>xxx</code>
<country>USA</country>
</postal>
<email>zaid@linkedin.com</email>
</address>
</author>

<author initials='J.' surname='Brzozowski' fullname='John Brzozowski, Editor'>
<organization>Comcast</organization>
<address>
<postal>
<street>xxx</street>
<city>xxx</city>
<region>xxx</region>
<code>xxx</code>
<country>USA</country>
</postal>
<email>John_Brzozowski@comcast.com</email>
</address>
</author>

<author initials='R.' surname='White' fullname='Russ White, Editor'>
<organization>LinkedIn</organization>
<address>
<postal>
<street></street>
<city>Oak Island</city>
<region>NC</region>
<code>28465</code>
<country>USA</country>
</postal>
<email>russ@riw.us</email>
</address>
</author>


<date/>

<abstract>
<t>The Internet is not one network, but rather a collection of networks. The interconnected nature of these networks, and the nature of the interconneted systems that make up these networks, is often more fragile than it appears. Perhaps "robust but fragile" is an overstatement, but the actions of each vendor, implementor, and operator in such an interconneted environment can have a major impact on the stability of the overall Internet (as a system). The widespread adoption of IPv6 could, particularly, disrupt network operations, in a way that impacts the entire system.</t>
<t>This time of transition is an opportune time to take stock of lessons learned through the operation of large scale networks on IPv4, and consider how to apply these lessons to IPv6. This document provides an overview of the design and architectural decisions that attend IPv6 deployment, and a set of IPv6 requirements for routers, switches, and middleboxes deployed in IPv6 networks. The hope of the editors and contributors is to provide the neccessary background to guide equipment manufacturers, protocol implemenetors, and network operators in effective IPv6 deployment.</t>
</abstract>

</front>

<middle>

<!-- 1 -->
<section title="Introduction" toc="default">

<t>This memo defines and discusses requirements for devices that perform forwarding for Internet Protocol version 6 (IPv6). This can include (but is not limited to) the devices described below.</t>

<t>
<list style="symbols">
<t>Devices which are primarily designed to forward traffic between multiple interfaces. These are normally referred to by the Internet community as routers or, in some cases, intermediate systems.</t>
<t>Devices which are designed to modify packets rather than "just" forwarding them. These are often referred to by the Internet community as middleboxes. See <xref target="RFC7663" /> for a fuller definition of middleboxes.</t>
</list>
</t>

<t>Readers should recognize that while this memo applies to IPv6, routers and middleboxes IPv6 packets will often also process IPv4 packets, forward based on MPLS labels, and potentially process many other protocols. This memo will only discuss IPv4, MPLS, and other protocols as they impact the behavior of an IPv6 forwarding device; no attempt is made to specify requirements for protocols other than IPv6. The reader should, therefore, not count on this document as a "sole source of truth," but rather use this document as a guide.</t>

<t>For IPv4 router requirements, readers are referred to <xref target="RFC1812" />. For simplicity, the term "devices" is used interchangeably with the phrase "routers and middleboxes" and the term "routers" throughout this document. These three terms represent stylistic differences, rather than substantive differences.</t>

<t>This document is broken into the following sections: a review of Internet architecture and principles, requirements relating to device management, requirements related to telemetry, requirements related to IPv6 forwarding and addressing, and future considerations. Following these sections, a short conclusion is provided for review.</t>

<!-- 2 -->
<section title="Contributors" toc="default">

<t>Shawn Zandi, Pete Lumbis, Fred Baker, and Lee Howard contributed significant text and ideas to this draft.</t>

</section> <!-- end of contributors section -->

<!-- 2 -->
<section title="Acknowledgements" toc="default">

<t>The editors and contributors would like to thank....</t>

</section> <!-- end of acknowledgements section -->

</section> <!-- End of the introduction section -->

<!-- 1 -->
<section title="Review of the Internet Architecture" toc="default">

<t>The Internet relies on a number of basic concepts and considerations. These concepts are not explicitly called out in any specification, nor do they necessarily impact protocol design or packet forwarding directly. This section provides an overview of these concepts and considerations to help the reader understand the larger context of this document.</t> 

<!-- 2 -->
<section title="Robustness Principle" toc="default">

<t>Every point where multiple protocols interact, is an interaction surface that can threaten the robustness of the overall system. While it may seem the global Internet has achieved a level of stability that makes it immune to such considerations, the reality is every network is a complex system, and is therefore subject to massive non repeatable unanticipated failures. Postel's Robustness Principle countered this problem with a simple statement, explicated in <xref target="RFC7922" />: "Be conservative in what you do, and liberal in what you accept from others."</t>

<t>However, since this time, it has been noted that following this law allows errors in protocols to accumulate over time, with overall negative effects on the system as a whole. <xref target="RFC1918" /> describes several points in conjunction with this principle that bear updating based on further experience with large scale protocol and network deployments within the Internet community, including:</t>

<t>
<list style="symbols">
<t>Applications should deal with error states gracefully; an application should not degrade in a way that will cause the failure of adjacent systems when possible. For instance, when a routing protocol implementation fails, it should not do so in a way that will cause the spreading of or continued existence of false reachability information, nor should it fail in a way that overloads adjacent routers or interacting protocols and causing a cascading failure.</t>
<t>It is best to assume the network is filled with poor implementations and malevolent actors, both of which will find every possible failure mode over time.</t>
<t>It is best to assume every technology will be used to the limits of its technical capabilities, rather than assuming a particular protocol's scope of use will align (in any way) with the intent of the original designer(s). <xref target="RFC5218" /> defines a wildly sucessful protocol as one that "far exceeds its original goals, in terms of purpose (being used in scenarios far beyond the initial design), in terms of scale (being deployed on a scale much greater than originally envisaged), or both." Successful implementations attract more functionality, much like a few nodes in a scale free graph eventually become connectivity hubs.</t>
<t>Protocols and implementations change over time. A corollary of the assumption that protocols will be used until they reach their technical limits is that protocols will change over time as they gain new functionality. <xref target="RFC5218" /> points out several problems with "wild success" in a protocol: undesirable side effects, performance problems, and becoming a high value attack target. Protocol and implementation design should take into account use cases that have not yet been thought of by building flexibility into protocols. Protocols should also remained focused on a narrow range of use cases; it is often wise to invent a new protocol than to extend a single protocol into a broad set of use cases.</t>
<t>Protocols are sometimes replaced or updated to new versions in order to add new capabilities or features. Updating a protocol requires great care in providing for a transition mechanism between older and newer versions. <xref target="I-D.iab-protocol-transitions">draft-iab-protocol-transitions</xref> provides sound advice on protocol transition planning and mehanisms.</t>
<t>Obscure, but legal, protocol features are often ignored or left unimplemented. Protocols must handle receiving unexpected information gracefully so they do not fail because of incomplete or partial implementations. Protocols should avoid specifying contradictory states, or features that will cause interoperability issues if multiple implementations choose to implement different feature sets.</t>
<t>Monocultures are almost always bad. While multiple implementations can represent an interaction surface which increases complexity, particularly if a brad set of protocol capabilities and/or implementation features are used, using the same implementation at every point in a deployment results in a monoculture. In a monoculture, a single event can trigger a defect in every router, causing a network failure. Monocultures must be carefully balanced against interaction surfaces; often this is best accomplished by using multiple implementations and minimal, widely implemented, and well understood protocol features.</t>
</list>
</t>

<t>A summary of the points above might be this: It is important to work within the bounds of what is actually implemented in any given protocol, and to leave corner cases for another day. It is often easy to assume "virtual oceans" are easier to boil than physical ones, or for an ocean to appear much smaller because it is being implemented in software. This is often deceptive. It is never helpful to boil the ocean whether in a design, an implementation, or a protocol.</t>

</section> <!-- end of robustness principle section -->
<!-- 2 -->
<section title="Complexity" toc="default">

<t>Complexity, as articulated by Mike O'Dell (see <xref target="RFC3439" />), is "the primary mechanism which impede efficient scaling, and as a result is the primary driver of increases in both capital expenditures (CAPEX) and operational expenditures (OPEX)." At the same time, complexity cannot be "solved," but rather must be "managed." The simplest and most obvious solution to any problem is often easy to design, deploy, and manage. It's also often wrong and/or broken. As much as developers, designers, and operators might like to make things as simple as possible, hard problems require complex solutions. See <xref target="COMPLEXHARD">Alderson and Doyle</xref> for a discussion of the relationship between hard problems and complex solutions.</t>

<t>The following sections contain observations which apply to the management of complexity in both protocol and network design.</t>

<!-- 3 -->
<section title="Elegance" toc="default">

<t>Elegance should be the goal of protocol and network design. Rather than seeking out simple solutions because they are simple, seek out solutions that will solve the problem in the simplest way possible (and no simpler). Often this will require:</t>

<t>
<list style="symbols">
<t>Ensuring the goal is actually the goal. Many times the goal is taken from the operational realm into the protocol design realm before enough thought has been applied to ensure the correct problem is being addressed.</t>
<t>Seeing the problem from different angles, trying to break the problem up in multiple ways; and trying, abandoning, and rebuilding ideas and implementations until a better way is found.</t>
<t>Sometimes the complexity of the solution will overwhelm the use case; sometimes it is better to leave the apparent problem unsolved, or allow the community time and space to find a simpler solution.</t>
</list>
</t>

</section> <!-- end of elegance section -->
<!-- 3 -->
<section title="Tradeoffs" toc="default">

<t>There are always tradeoffs. For any protocol, network, or operational design decision, there will always be a tradeoff between at least two competing goals. If some problem appears to have a single solution without tradeoffs, this doesn't mean the tradeoffs don't exist. Rather, it means the tradeoffs haven't been discovered yet. In the area of protocol and network design, these tradeoffs often take the form of common "choose two or three" situations, such as "quick, cheap, high quality." In network and protocol design, the tradeoffs are often:</t>

<t>
<list style="symbols">
<t>The amount of state carried in the system and the speed at which it changes, or simply the state. The amount of state required to operate a system as it scales tends to be nonlinear. Some instances of this are described in <xref target="RFC3439" /> section 2.2.1, the Amplification Principle.</t>
<t>The number of interaction surfaces between the components that make up the complete system, and the depth of those interaction surfaces. Some examples of surfaces are described in <xref target="RFC3439" />section 2.2.2, the Coupling Principle. Layering is essentially a form of abstraction; all abstractions are subject to the <xref target="LEAKYABS">law of leaky abstractions,</xref> which states: "all nontrivial absractions leak."</t>
<t>The desired optimization, including efficient use of network resources, optimal support for business objectives, and optimal support for a specific set of applications.</t>
</list>
</t>

<t>These three make up a "triangle problem." For instance, to increase the optimization of traffic flow through a network generally requires adding more state to the control plane, leading to problems in complexity due to amplification. To reduce amplification, the control plane (or perhaps the various functions the control plane serves) can be broken up into subsystems, or modules. Breaking the control plane up into subsystems, however, introduces interaction surfaces between the components, which is another form of complexity. <xref target="RFC7980" /> provides a good overview of network complexity; in particular, section 3 of that document provides some examples of complexity tradeoffs.</t>

</section> <!-- end of tradeoff section -->

</section> <!-- end of complexity principle section -->
<!-- 2 -->
<section title="Layered Structure" toc="default">

<t>The Internet data plane is organized around broad top and bottom layers, and much thinner middle layer. This is illustrated in the figure below.</t>

<figure align="center" anchor="layering-model">
<artwork align="left"><![CDATA[
\                         /
 \ HTTP, FTP, SNMP, ETC. /
  \                     /
    \     TCP, UDP    /
     \               /
       \    IPv6   /
       /   (IPv4)  \
     /               \
    /      (MPLS)      \
  /  Ethernet, Wireless \
 /    Physical Media     \
/                         \
]]></artwork>
</figure>

<t>This layering emulates or mirrors many naturally occurring systems; it is a common strategy for managing complexity (see <xref target="COMPLEXLAYER" pageno="false" format="default">Meyer's presentation on complexity).</xref> The single protocol in the center, IPv6, serves to separate the complexity of the lower layers from the complexity of the upper layers. This center layer of the Internet ecosystem has traditionally been called the Network Layer, in reference to the <xref target="DoD" pageno="false" format="default">Department of Defense (DoD)</xref> and <xref target="OSI" pageno="false" format="default">OSI models.</xref> The Internet ecosystem includes two different protocols in this central location.</t>

<t>
<list style="symbols">
<t>IPv4, an older network protocol that, it is anticipated, will be replaced over time as the Internet ecosystem standardizes on IPv6</t>
<t>IPv6, a newer network protocol that is being adopted</t>
</list>
</t>

<t>MPLS is often used as a "middle" subtransport layer, and at other times as "middle" sub data link layer; hence MPLS is difficult to classify within the strictly hierarchical model depicted here. These protocols are often treated as if they exist in strict hierarchical layers with a well defined and followed Application Programming Interface (API), data models, Remote Procedure Calls (RPCs), sockets, etc. The reality, however, is there are often solid reasons for violating these layers, creating interaction surfaces that are often deeper than intended or understood without some experience. Beyond this, such layering mechanisms act as information abstractions. It is well known that all such abstractions leak (see above on the law of leaky abstractions). Because of these intentional and unintentional leakages of information, the interactions between protocols is often subtle.</t>

</section> <!-- end of layered structure section -->
<!-- 2 -->
<section title="Routers" toc="default">

<t>A router connects to two or more logical interfaces and at least one physical interface. A router processes packets by:</t>

<t>
<list style="symbols">
<t>Receiving a packet through an interface</t>
<t>Stripping the data link, physical header, or tunnel encapsulation off the packet</t>
<t>Examining the packet for errors, and determining if this packet needs to be punted to another process on the router</t>
<t>Looking up the destination in a local forwarding table</t>
<t>Rewriting the data link and/or physical layer header</t>
<t>Transmitting the packet out an interface</t>
</list>
</t>

<t>When consulting the forwarding table, the router searches for a match based on:</t>

<t>
<list style="symbols">
<t>The longest prefix containing the destination address (this is the most common matching element)</t>
<t>A label, such as a flow label or MPLS label</t>
<t>The source address or other header fields (not common)</t>
</list>
</t>

<t>The router then examines the information in the matching entry to determine the next hop, or rather the next logically connected device to forward the packet to. The next hop will either be another router, which will presumably carry the packet closer to the final destination, or it will be the destination host itself. The following figure provides a conceptual model of a router; not all routers actually have this set of tables and interactions, and some have many more moving parts. This model is simply used as a common reference to promote understanding.</t>

<figure align="center" anchor="router-model">
<artwork align="left"><![CDATA[
+-------------+            +-------------+
| Candidate   |            | Startup     |
| Config      |<--+    +-->| Config      |
+--+----------+   |    |   +-------+-----+
   |              |    |           |
   v              |    |           v
+-----------------+----+-----------------+
| Running Configuration                  +------>----------+
+---+----------+----------+----------+---+                 |
    |          |          |          |                     |
    v          |          |          |                     |
+-------+      |          |          |                     |
| IS-IS |<-----------------------------------> Adjacent    |
+---+---+      v          |          |         Routers     |
    |      +-------+      |          |                     |
    |      |  BGP  |<------------------------> Peers       |
    |      +---+---+      v          |                     |
    |          |      +-------+      |                     |
    |          |      | OSPF  |<-------------> Adjacent    |
    |          |      +---+---+      v         Routers     |
    |          |          |      +-------+                 |
    |          |          |      | Other |                 |
    |          |          |      +---+---+                 |
    |          |          |          |                     |
+---+----------+----------+----------+---+                 |
| RIB Manager                            |                 |
+---+------------------------------------+                 |
    |                                                      |
+---+------------------------------------+                 |
| Routing Information Base (RIB)         |                 |
+---+------------------------------------+                 |
    |                                                      |
+---+------------------------------------+                 |
| Forwarding Information Base (FIB)      |                 |
+---+----------+---------------------+---+                 |
    |          |                     |                     |
+---+---+  +---+---+             +---+---+                 |
| Int 1 |  | Int 2 |     ...     | Int X | <---------------+
+-------+  +-------+             +-------+
    ^                                |
    |                                v
Packets In                       Packets Out
]]></artwork>
</figure>

</section> <!-- end of router section -->
</section> <!-- end of internet architecture review section -->

<!-- 1 -->
<section title="Requirements Related to Device Management and Security" toc="default">

<t>Network engineering began in the era of Command Line Interfaces (CLIs), and has generally stayed with these CLIs even as the Graphical User Interface (GUI) has become the standard way of interacting with almost every other computing device. Direct human interaction with routers and middleboxes in large scale and complex environments, however, tends to result in an unacceptably low Mean Time Between Mistakes (MTBM), directly impacting the overall availability of the network. In reaction to this, operators have increased their reliance on automation, specifically targetting machine to machine intefaces, such as Remote Procesdure Calls (RPCs) and Application Programming Interface (API) solutions, to manage and configure routers and middleboxes. This section considers the various components of device management.</t>

<!-- 2 -->
<section title="Programmable Device Access" toc="default">

<t>Configuration primarily relates to the startup, candidate, and running configurations in the router model shown above. In order to deploy networks at scale, operators rely on automated management of router configuration. This effort has traditionally focused on Simple Network Management Protocol (SNMP) Management Information Base (MIBs). In the future, operators expect to move towards open source/open standards YANG models.</t>

<t>Vendors and implementors should implement machine readable interfaces with overlays to support human interaction, rather than human readable interfaces with overlays to support machine to machine interaction. Emphasis should be placed on machine to machine interaction for day to day operations, rather than on human readable interfaces, which are largely used in the process of troubleshooting. Within the realm of machine to machine interfaces, emphasis should be placed on marshaling information in YANG models.</t>

<t>To support automated router configuration, IPv6 routers and routers SHOULD support YANG and SNMP configuration, including (but not limited to):</t>

<t>
<list style="symbols">
<t><xref target="OPENCONF" pageno="false" format="default">Openconfig models</xref> related to the protocols configured on the device, interface state, and device state</t>
<t><xref target="RFC7223" />: A YANG Data Model for Interface Management</t>
<t><xref target="RFC7224" />: IANA Interface Type YANG Module</t>
<t><xref target="RFC7277" />: A YANG Data Model for IP Management</t>
<t><xref target="RFC7317" />: A YANG Data Model for System Management</t>
<t>Simple Network Management Protocol (SNMP) MIBs as appropriate</t>
</list>
</t>

</section> <!-- end of configuration section -->
<!-- 2 -->
<section title="Human Readable Device Access" toc="default">

<t>To operate a network at scale, operators rely on the ability to access routers and middleboxes to troubleshoot and gather state manually through a number of different interfaces. These interfaces should provide current device configuration, current device state (such as interface state, packets drops, etc.), and current control plane contents (such as the RIB in the figure above). In other words, manual interfaces should provide information about the router (the whole device stack).</t>

<t>To support manual state gathering and troubleshooting, IPv6 routers and middleboxes SHOULD support:</t>

<t>
<list style="symbols">
<t>TELNET (<xref target="RFC0854" />): TELNET SHOULD be disabled by default, but should be available for operational purposes as required or as configured by the operator</t>
<t>SSH (<xref target="RFC4253" />): SSH SHOULD be the default access for IPv6 capable routers</t>
</list>
</t>

</section> <!-- end of manual device access section -->
<!-- 2 -->
<section title="Zero Touch Provisioning" toc="default">

<t>To operate a network at scale, operators rely on protocols and mechanisms that reduce provisioning time to a minimum. The preferred state is zero touch provisioning; plug a new router in and it just works without any manual configuration. The closer an operator can come to this ideal, the more MTBM and Operational Expenses (OPEX) can be reduced -- an important goals in the real world. IPv6 routers should support several standards, including, but not limited to:</t>

<t>
<list style="symbols">
<t><xref target="I-D.ietf-dhc-rfc3315bis" />: Dynamic Configuration Protocol for IPv6</t>
<t>SLAAC (<xref target="RFC7217" /> and <xref target="RFC7527" />): SLAAC SHOULD be enabled by default on all router interfaces</t>
</list>
</t>

<t>SLAAC SHOULD be able to be disabled by operators who prefer to use some other mechanism for address management and assignment.</t>

</section> <!-- end of ztp section -->

<!-- 2 -->
<section title="Authentication, Authorization, and Accounting " toc="default">

<t>(Need some text here)</t>

</section> <!-- end of AAA section -->
<!-- 2 -->
<section title="Device Protection against Denial of Service Attacks" toc="default">

<t>Denial of Service (DoS) and Distributed Denial of Service (DDoS) attacks are unfortunately common in the Internet globally; these types of attacks cost network operators a great deal in opportunity and operational costs in prevention and responses. To provide for effective counters to DoS and DDoS attacks directly on routers:</t>

<t>
<list style="symbols">
<t>Manufacturers and system integrators should test and clearly report the packet/traffic load handling capabilities of devices with and without various encryption methods enabled</t>
<t>Routers should be able to police traffic destined to the control plane based on the rate of traffic received, including the ability ot police individual flows, targeted services, etc., at individual rates as described in <xref target="RFC6192" /></t>
<t>Ideally, devices should be able to statefully filter traffic destined to the control plane</t>
</list>
</t>

<t>There are other useful techniques for dealing with DDoS attacks at the network level, including: transferring sessions to a new address and abandoning the address under attack, using BGP communities to spread the attack over multiple ingress ports and "consume" it, and requiring mutual authentication before allocating larger resource pools to a connection. These techniques are not "device level," and hence are not considered further here.</t>

</section> <!-- end of device level protection against DoS attacks section -->
</section> <!-- end of device management section -->

<!-- 1 -->
<section title="Requirements Related to Telemetry" toc="default">

<t>Telemetry relates to information devices push to systems used to monitor and track the state of the network. This applies to individual devices as well as the network as a system. Two major challenges face operators in the area of telemetry:</t>

<t>
<list style="symbols">
<t>Information that is laid out primarily for human, rather than machine, consumption. While human consumption of telemetry is important in some situations, this information should be supplied in a form that focuses on machine readability with an overlay or interpretor that allows human consumption.</t>
<t>Software systems that require information to be queried (or polled or even pushed) on a per-item basis. This form of organization can produce a lot of information, and a lot of individual packets, very quickly, overwhelming monitoring systems and consuming a large amount of available network resources. Instead, telemetry should be focused on bulk collection.</t>
</list>
</t>

<t>There are three broad categories of telemetry: device state and traceability, topology state and traceability, and flow traceability. These three roughly correspond to the management plane, the control plane, and the forwarding plane of the network. Each of the sections below considers one of these three telemetry types.</t>

<section title="Device State and Traceablity" toc="default">

<t>Ideally, the entire network could be monitored using a single modeling language to ease implementation of telemetry systems and increase the pace at which new software can be deployed in production environments. In real deployments, it is often impossible to reach this ideal; however, reducing the languages and methods used, while focusing on machine readibility, can greatly ease the deployment and management of a large scale network. Specifically, IPv6 routers SHOULD support:</t>

<t>
<list style="symbols">
<t><xref target="RFC6241" />: NETCONF/RESTCONF transporting telemetry formatted according to YANG (see above)</t>
<t><xref target="RFC5424" />: Syslog</t>
<t><xref target="GRPC">gRPC based telemetry interfaces</xref></t>
<t>SNMP as appropriate</t>
</list>
</t>

<t>Syslog and SNMP access for telemetry should be considered "legacy," and should not be the focus of new telemetry access development efforts.</t>

</section> <!-- end of device status section -->

<section title="Topology State and Traceability" toc="default">

<t>IPv6 routers are part of a system of devices that, combined, make up the entire network. Viewing the network as a system is often crucial for operational purposes. For instance, being able to understand changes in the topology and utlization of a network can lead to insights about traffic flow and network growth that lead to a greater understanding of how the network is operating, where problems are developing, and how to improve the network's performance. To support systemic monitoring of the network topology, IPv6 devices SHOULD support at least:</t>

<t>
<list style="symbols">
<t><xref target="RFC5424" />: North-Bound Distribution of Link-State and Traffic Engineering (TE) Information using BGP</t>
<t><xref target="I-D.ietf-i2rs-yang-l2-network-topology" />: An I2RS model for layer 2 topologies</t>
<t><xref target="I-D.ietf-i2rs-yang-l3-topology" />: An I2RS model for layer 3 topologies</t>
<t><xref target="I-D.ietf-i2rs-yang-network-topo" />: A Data Model for Network Topologies</t>
</list>
</t>

</section> <!-- end of topology section -->
<section title="Flow Traceability" toc="default">



<t>(To be added)</t>

</section> <!-- end of traffic flow section -->
</section> <!-- end of telemetry section -->

<!-- 1 -->
<section title="Requirements Related to IPv6 Forwarding and Addressing" toc="default">

<t>There are a number of capabilities that a device SHOULD have to be deployed into an IPv6 network, and several forwarding plane considerations operators and vendors need to bear in mind. The sections below explain these considerations.</t>

<!-- 2 -->
<section title="The IPv6 Address is not a Host Identifier" toc="default">

<t>The IPv6 address is commonly treated as a host identifier; it is not. Rather, it is an interface identifier that describes the topological point where a particular host connects to the Internet. Specifically:</t>

<t>
<list style="symbols">
<t>The IPv6 address will change when a device changes where it connects to the network.</t>
<t>A single host can have multiple addresses. For instance, a host may have one address per interface, or multiple addresses assigned through different mechanisms, or through multiple connection points.</t>
<t>A single IPv6 address may represent many hosts, as in the case of a group of hosts reachable through multicast address, or a set of services reachable through an anycast address.</t>
</list>
</t>

<t>Because the host address may change at any time, it is generally harmful to embed IPv6 addresses inside upper layer headers to identify a particular host.</t>

</section> <!-- end of IPv6 address is not a host identifier -->
<!-- 2 -->
<section title="Router Handling of IPv6 Addresses" toc="default">

<t>Internet Routing Registries may allocate a network operator a wide range of prefix lengths (see <xref target="RFC6177" /> for further information). Within this allocation, network operators will often suballocate address space along nibble boundaries (/48, /52, /56, /60, and /64) for ease of configuration and management. Several common practices are:</t>

<t>
<list style="symbols">
<t>Each multiaccess interface is allocated a /64</t>
<t>Point-to-point links are allocated a /64, but SHOULD be addressed with a longer prefix length to prevent certain kinds of denial of service attacks (<xref target="RFC3627" /> originally mandated 64 bit prefix lengths on point-to-point links; <xref target="RFC6164" /> explains possible security issues with assigning a 64 bit prefix length to a point-to-point, and recommends a /127 instead)</t>
<t>Although aggregation may only performed to the nibble boundaries noted above, variances are possible</t>
<t>Loopback addresses are assigned a /128</t>
</list>
</t>

<t>Given these common practices, routers designed to run IPv6 SHOULD support the following addressing conventions:</t>

<t>
<list style="symbols">
<t>The default prefix length on any interface other than a loopback SHOULD be a /64</t>
<t>Configuring a prefix length longer than a /64 on any multi-access interface should require additional configuration steps to prevent manual configuration errors</t>
<t>Routers SHOULD NOT assume IPv6 prefix lengths only on nibble boundaries</t>
<t>Routers SHOULD support any prefix length shorter or greater than /64</t>
<t>Loopback interfaces SHOULD default to a /128 prefix length unless some additional configuration is undertaken to override this default setting</t>
</list>
</t>

</section> <!-- end of router handling of IPv6 addresses -->
<!-- 2 -->
<section title="Maximum Transmission Unit and Jumbo Frames" toc="default">

<t>The long history of the Maximum Transmission Unit (MTU) in networks is not a happy one. Specific problems with MTU sizing include:</t>

<t>
<list style="symbols">
<t>Many different default sizes on different media types, from very small (576 bytes on X.25) to very large (17914 bytes on 16Mbps Token Ring)</t>
<t>Many different ways to calcualte the MTU on any given link; for instance a 9000 byte MTU can be calculated as 8184 bytes on one operating system, 8972 on another, and 9000 on a third</t>
<t>The increasing use of tunnel encapsulations in the network; for instance MPLS over GRE over IP over...</t>
<t>The wide variety of default MTUs across many different end hosts and operating systems</t>
<t>The general ineffectiveness of path MTU discovery to operate correctly in the face of packet filters and rate limiters (see the section on ICMP filtering below)</t>
<t>Lower speed links at the network edge which require a lot of time to serialize a packet with a large MTU</t>
<t>Increased jitter caused by the disparity between large and small packet size across a lower bandwidth links</t>
</list> 
</t>

<t>The final point requires some further elucidation. The time required to serialize various packets at various speeds are:</t>

<t>
<list style="symbols">
<t>64 byte packet onto a 10Mb/s link: .5ms</t>
<t>1500 byte packet onto a 10Mb/s link: 1.2ms</t>
<t>9000 byte packet onto a 10Mb/s link: 7.2ms</t>
<t>64 byte packet onto a 100Mb/s link: .05ms</t>
<t>1500 byte packet onto a 100Mb/s link: .12ms</t>
<t>9000 byte packet onto a 100Mb/s link: .72ms</t>
</list>
</t>

<t>A 64 byte packet trapped behind a single 1500 byte packet on a 10Mb/s link suffers 1.2ms of serialization delay. Each additional 1500 byte packet added to the queue in front of the 64 byte packet adds and addtional 1.2ms of delay. In contrast, a 64 byte packet trapped behind a single 9000 byte packet on a 10Mb/s link suffers 7.7ms of serialization delay. Each additional 9000 byte packet added to the queue adds an additional 7.2ms of serialization delay. The practical result is that larger MTU sizes on lower speed links can add a significant amount of delay and jitter into a flow. On the other hand, increasing the MTU on higher speed links appears to add megligable additional delay and jitter.</t>

<t>The result is that it costs less in terms of overall systemic performance to use higher MTUs on higher speed links than on lower speed links. Based on this, increasing the MTU across any particular link may not increase overall end-to-end performance, but can greatly enhance the performance of local applications (such as a local BGP peering session, or a large/long standing elephant flow used to transfer data across a local fabric), while also providing room for tunnel encapsulations to be added with less impact on lower MTU end systems.</t>

<t>The general rule of thumb is to assume the largest size MTU should be used on higher speed transit only links in order to support a wide array of available link sizes, default MTUs, and tunnel encapsulations. Routers designed for a network or data center core SHOULD support at least 9000 byte MTUs on all interfaces. MTU detection mechanisms, such as IS-IS hello padding, described in <xref target="RFC7922" />, SHOULD be enabled to ensure correct point-to-point MTU configuration. Devices SHOULD also support:</t>

<t>
<list style="symbols">
<t><xref target="RFC1191" />: Path MTU Discovery</t>
<t><xref target="RFC1981" />: Path MTU Discovery for IP version 6</t>
<t><xref target="RFC4821" />: Packetization Layer Path MTU Discovery</t>
</list>
</t>

</section> <!-- end of MTU section -->
<!-- 2 -->
<section title="ICMP Considerations" toc="default">

<t>Internet Control Message Protocool (ICMP) is described in <xref target="RFC0792" /> and <xref target="RFC4443" />. ICMP is often used to perform a traceroute through a network (normally by using a TTL expired ICMP message), for Path MTU discovery, and, in IPv6, for autoconfiguration and neighbor discovery. ICMP is often blocked by middleboxes of various kinds and/or ICMP filters configured on the ingress edge of a provider network, most often to prevent the discovery of reachable hosts and network topology. Routers implementing IPv6:</t>

<t>
<list style="symbols">
<t>SHOULD NOT filter ICMP unreachables by default, as this has negative impacts on many aspects of IPv6 operation, particularly path MTU</t>
<t>SHOULD filter ICMP echo and echo response by default, to prevent the discovery of reachable hosts and topology.</t>
<t>SHOULD rate limit the generation of ICMP messages relative to the ability of the device to generate packets and to block the use of ICMP packets being used as part of a distributed denial of service attack</t>
<t>SHOULD implement the filtering suggestions in <xref target="I-D.gont-opsec-icmp-ingress-filtering" /></t>
</list>
</t>

<t>There are implications for path MTU discovery and other useful mechanisms in filtering and rate limiting ICMP. The tradeoff here is between allowing unlimited ICMP, which would allow path MTU detection to work, or limiting ICMP in a way that prevents negative side effects for individual devices, and hence the operational capabilities of the network as a whole. Operators rightly limit ICMP to reduce the attack surface against their network, as well as the opportinity for "perfect storm" events that inadvertently reduce the capability of routers and middleboxes. Hence ICMP can be treated as "quasi-reliable" in many situations; existence of an ICMP message can prove, for instance, that a particular host is unreachable. The non-existence of an ICMP message, however, does not prove a particular host exists or does not.</t>

</section> <!-- end of icmp considerations section -->
<!-- 2 -->
<section title="Machine Access to the Forwarding Table" toc="default">

<t>In order to support treating the "network as a whole" as a single programmable system, it is important for each router have the ability to directly program forwarding information. This programmatic interface allows controllers, which are programmed to support specific business logic and applications, to modify and filter traffic flows without interfering with the distributed control plane. While there are several programmatic interfaces available, this document suggests that the I2RS interface to the RIB be supported in all IPv6 routers. Specifically, these drafts should be supported to enable network programmability:</t>

<t>
<list style="symbols">
<t><xref target="I-D.ietf-i2rs-fb-rib-data-model" />: Filter-Based RIB Data Model</t>
<t><xref target="I-D.ietf-i2rs-fb-rib-info-model" />: Filter-Based RIB Information Model</t>
<t><xref target="I-D.ietf-i2rs-rib-data-model" />: A YANG Data Model for Routing Information Base (RIB)</t>
<t><xref target="RFC7922" />: I2RS Traceability</t>
</list>
</t>

</section> <!-- end of machine rib access section -->
<!-- 2 -->
<section title="Processing IPv6 Extension Headers" toc="default">

<t>(To be added)</t>

</section> <!-- end of extension headers section -->
<!-- 2 -->
<section title="IPv6 Only Operation" toc="default">

<t>While the transition to IPv6 only networks may take years (or perhaps decades), a number of operators are moving to deploy IPv6 on internal networks supporting transport and data center fabric applications more quickly. Routers and middleboxes that support IPv6 SHOULD support IPv6 only operation, including:</t>

<t>
<list style="symbols">
<t>Link Local addressing SHOULD be configurable and useable as the primary address on all interfaces on a device.</t>
<t>IPv4 and/or MPLS SHOULD NOT be required for proper device operation. For instance, an IPv4 address should not be required to determine the router ID for any protocol. See <xref target="RFC6540" /> section 2.</t>
<t>Any control plane protocol implementations SHOULD support the recommendations in <xref target="RFC7404" /> for operation using link local addresses only.</t>
</list>
</t>

</section> <!-- end of ipv6 only operation section -->
</section> <!-- end of IPv6 forwarding section -->

<!-- 1 -->
<section title="Future Considerations" toc="default">

<t>(To be added)</t>

<!-- 2 -->
<section title="Segment Routing" toc="default">

<t>(To be added)</t>

</section> <!-- end of segment routing section -->

</section> <!-- end future considerations -->

<!-- 1 -->
<section title="Security Considerations" toc="default">

<t>This document addresses several ways in which devices designed to support IPv6 forwarding. Some of the recommendations here are designed to increase device security; for instance, see the section on device access. Others may intersect with security, but are not specifically targeted at security, such as running IPv6 link local only on links. These are not discussed further here, as they improve the security stance of the network. Other areas discussed in this draft are more nuanced. This section gathers the intersection between operational concerns and security concerns into one place.</t>

<t>ICMP security is already considered in the section on ICMP; it will not be considered further here. Link local only addressing wil increase security by removing transit only links within the network as a reachable destination.</t>

<!-- 2 -->
<section title="Robustness and Security" toc="default">

<t>Robustness, particularly in the area of error handling, largely improves security if designed and implemented correctly. Many attacks take advantage of mistakes in implementations and variations in protocols. In particular, any feature that is unevenly implemented among a number of implementations often offers an attack surface. Hence, reducing protocol complexity helps reduce the breadth of attack surfaces.</t>

<t>Another point to consider at the intersection of robustness and security is the issue of monocultures. Monocultures are in and of themselves a potential attack surface, in that finding a single failure mode can be exploited to take an entire network (or operator) down. On the other hand, reducing the number of implementations for any particular protocol will decrease the set of "random" features deployed in the network. These two goals will often be opposed to one another. Network designers and operators need to consider these two sides of this tradeoff, and make an intelligent decision about how much diversity to implement versus how to control the attack surface represented by deploying a wide array of implementations.</t>

</section> <!-- end of robustness and security -->

<!-- 2 -->
<section title="Programmable Device Access and Security" toc="default">

<t>Programmable interfaces, including programmable configuration, telemetry, and machine interface to the routing table, introduce a large attack surface; operators should be careful to ensure this attack surface is properly secured. Specifically:</t>

<t>
<list style="symbols">
<t>Prevent external access to any administrative access points used for device programmability</t>
<t>Use AAA systems to ensure only valid devices and/or users access devices</t>
<t>Rate limit the change rate and protect management interfaces from DoS and DDoS attacks</t>
</list>
</t>

<t>Such interfaces should be treated no differently than SSH, SFTP, and other interfaces available to manage routers and middleboxes.</t>

</section> <!-- end of programmable deveice access and security -->

<!-- 2 -->
<section title="Zero Touch Provisioning and Security" toc="default">

<t>Zero touch provisioning opens a new attack surface; insider attackers can simply install a new device, and assume it will be autoconfigured into the network. A "simple" solution would be to install door locks, but this will likely not be enough; defenses need to be layered to be effective. It is recommended that devices installed in the network need to contain a hardware or software identification system that allows the operator to identify devices that are installed in the network.</t>

</section> <!-- end of ztp and security -->
</section> <!-- end of security considerations -->

<!-- 1 -->
<section title="Conclusion" toc="default">

<t>The deployment of IPv6 throughout the Internet marks a point in time where it is good to review the overall Internet architecture, and assess the impact on operations of these changes. This document provides an overview of a lot of these changes and lessons learned, as well as providing pointers to many of the relevant documents to understand each topic more deeply.</t>

</section> <!-- end of conclusion -->

</middle>

<back>

<references title="Normative References">
<!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
&RFC2119;

</references> <!-- end of normative references -->

<references title="Informative References">

<reference anchor="OPENCONF" target='https://github.com/openconfig/public/tree/master/release'>
<front>
<title>Openconfig release YANG models</title>
<author>
<organization>OpenConfig</organization>
</author>
<date year="2016" />
</front>
</reference>

<reference anchor="DoD" target='https://en.wikipedia.org/wiki/Internet_protocol_suite'>
<front>
<title>The Internet Protocol Suite</title>
<author>
<organization>Wikipedia</organization>
</author>
<date year="2016" />
</front>
</reference>

<reference anchor="OSI" target='https://en.wikipedia.org/wiki/OSI_model'>
<front>
<title>OSI Model</title>
<author>
<organization>Wikipedia</organization>
</author>
<date year="2016" />
</front>
</reference>

<reference anchor="GRPC" target='http://www.grpc.io'>
<front>
<title>gRPC</title>
<author>
<organization>gRPC</organization>
</author>
<date year="2016" />
</front>
</reference>

<reference anchor="LEAKYABS" target='https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/'>
<front>
<title>The Law of Leaky Abstractions</title>
<author initials="J." surname="Spolsky" fullname='Joel Spolsky' />
<date year="2002" />
</front>
</reference>

<reference anchor="COMPLEXHARD" target='http://ieeexplore.ieee.org/abstract/document/5477188/?reload=true'>
<front>
<title>Contrasting Views of Complexity and Their Implications For Network-Centric Infrastructures</title>
<author initials="D." surname="Alderson" fullname='David L. Alderson' />
<author initials="J." surname="Doyle" fullname='John C. Doyle' />
<date year="2010" />
</front>
</reference>

<reference anchor="COMPLEXLAYER" target='http://www.slideshare.net/dmm613/macro-trends-complexityandsdn-32951199'>
<front>
<title>Macro Trends, Architecture, and the Hidden Nature of Complexity</title>
<author initials="D." surname="Meyer" fullname='David Meyer' />
<date year="2010" />
</front>
</reference>

&RFC0792;
&RFC0854;
&RFC1191;
&RFC1812;
&RFC1918;
&RFC1981;
&RFC2629;
&RFC3439;
&RFC3552;
&RFC3627;
&RFC4253;
&RFC4443;
&RFC4821;
&RFC5218;
&RFC5424;
&RFC6164;
&RFC6177;
&RFC6192;
&RFC6241;
&RFC6540;
&RFC7217;
&RFC7223;
&RFC7224;
&RFC7277;
&RFC7317;
&RFC7404;
&RFC7527;
&RFC7663;
&RFC7922;
&RFC7980;

<?rfc include="reference.I-D.ietf-netconf-restconf.xml"?>
<?rfc include="reference.I-D.ietf-i2rs-fb-rib-data-model.xml"?>
<?rfc include="reference.I-D.ietf-i2rs-fb-rib-info-model.xml"?>
<?rfc include="reference.I-D.ietf-i2rs-rib-data-model.xml"?>
<?rfc include="reference.I-D.ietf-dhc-rfc3315bis.xml"?>
<?rfc include="reference.I-D.ietf-i2rs-yang-l2-network-topology.xml"?>
<?rfc include="reference.I-D.ietf-i2rs-yang-l3-topology.xml"?>
<?rfc include="reference.I-D.ietf-i2rs-yang-network-topo.xml"?>
<?rfc include="reference.I-D.iab-protocol-transitions.xml"?>
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.draft-gont-opsec-icmp-ingress-filtering-02.xml"?>

</references> <!-- end of informative references -->

</back>
</rfc>
