| rfc9631.original | rfc9631.txt | |||
|---|---|---|---|---|
| 6man R. Bonica | Internet Engineering Task Force (IETF) R. Bonica | |||
| Internet-Draft Juniper Networks | Request for Comments: 9631 Juniper Networks | |||
| Intended status: Experimental Y. Kamite | Category: Experimental Y. Kamite | |||
| Expires: 1 December 2024 NTT Communications Corporation | ISSN: 2070-1721 NTT Communications Corporation | |||
| A. Alston | A. Alston | |||
| Alston Networks | ||||
| D. Henriques | D. Henriques | |||
| Liquid Telecom | Liquid Telecom | |||
| L. Jalil | L. Jalil | |||
| Verizon | Verizon | |||
| 30 May 2024 | August 2024 | |||
| The IPv6 Compact Routing Header (CRH) | The IPv6 Compact Routing Header (CRH) | |||
| draft-ietf-6man-comp-rtg-hdr-10 | ||||
| Abstract | Abstract | |||
| This document describes an experiment in which two new IPv6 Routing | This document describes an experiment in which two new IPv6 Routing | |||
| headers are implemented and deployed. Collectively, they are called | headers are implemented and deployed. Collectively, they are called | |||
| the Compact Routing Headers (CRH). Individually, they are called | the Compact Routing Header (CRH). Individually, they are called | |||
| CRH-16 and CRH-32. | CRH-16 and CRH-32. | |||
| One purpose of this experiment is to demonstrate that the CRH can be | One purpose of this experiment is to demonstrate that the CRH can be | |||
| implemented and deployed in a production network. Another purpose is | implemented and deployed in a production network. Another purpose is | |||
| to demonstrate that the security considerations, described in this | to demonstrate that the security considerations described in this | |||
| document, can be addressed with access control lists. Finally, this | document can be addressed with Access Control Lists (ACLs). Finally, | |||
| document encourages replication of the experiment. | this document encourages replication of the experiment. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
| evaluation. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
| and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Engineering | |||
| time. It is inappropriate to use Internet-Drafts as reference | Task Force (IETF). It represents the consensus of the IETF | |||
| material or to cite them other than as "work in progress." | community. It has received public review and has been approved for | |||
| publication by the Internet Engineering Steering Group (IESG). Not | ||||
| all documents approved by the IESG are candidates for any level of | ||||
| Internet Standard; see Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 1 December 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9631. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3 | 2. Requirements Language | |||
| 3. The Compact Routing Headers (CRH) . . . . . . . . . . . . . . 3 | 3. The Compact Routing Header (CRH) | |||
| 4. The CRH Forwarding Information Base (CRH-FIB) . . . . . . . . 5 | 4. The CRH Forwarding Information Base (CRH-FIB) | |||
| 5. Processing Rules . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Processing Rules | |||
| 5.1. Computing Minimum CRH Length . . . . . . . . . . . . . . 6 | 5.1. Computing Minimum CRH Length | |||
| 6. Mutability . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6. Mutability | |||
| 7. Applications And SIDs . . . . . . . . . . . . . . . . . . . . 7 | 7. Applications and CRH SIDs | |||
| 8. Operational Considerations . . . . . . . . . . . . . . . . . 8 | 8. Operational Considerations | |||
| 9. Textual Representation . . . . . . . . . . . . . . . . . . . 8 | 9. Textual Representations | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 10. Security Considerations | |||
| 11. Implementation and Deployment Status . . . . . . . . . . . . 10 | 11. Experimental Results | |||
| 12. Experimental Results . . . . . . . . . . . . . . . . . . . . 10 | 12. IANA Considerations | |||
| 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 13. References | |||
| 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | 13.1. Normative References | |||
| 15. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 11 | 13.2. Informative References | |||
| 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | Appendix A. CRH Processing Examples | |||
| 16.1. Normative References . . . . . . . . . . . . . . . . . . 12 | A.1. The CRH SID list contains one entry for each segment in the | |||
| 16.2. Informative References . . . . . . . . . . . . . . . . . 13 | path. | |||
| Appendix A. CRH Processing Examples . . . . . . . . . . . . . . 14 | A.2. The CRH SID list omits the first entry in the path. | |||
| A.1. The CRH SID List Contains One Entry For Each Segment In The | Acknowledgements | |||
| Path . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | Contributors | |||
| A.2. The CRH SID List Omits The First Entry In The Path . . . 15 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
| 1. Introduction | 1. Introduction | |||
| IPv6 [RFC8200] source nodes use Routing headers to specify the path | IPv6 [RFC8200] source nodes use Routing headers to specify the path | |||
| that a packet takes to its destination(s). The IETF has defined | that a packet takes to its destination(s). The IETF has defined | |||
| several Routing types [IANA-RH]. This document defines two new | several Routing Types; see [IANA-RT]. This document defines two new | |||
| Routing types. Collectively, they are called the Compact Routing | Routing Types. Collectively, they are called the Compact Routing | |||
| Headers (CRH). Individually, they are called CRH-16 and CRH-32. | Header (CRH). Individually, they are called CRH-16 and CRH-32. | |||
| The CRH allows IPv6 source nodes to specify the path that a packet | The CRH allows IPv6 source nodes to specify the path that a packet | |||
| takes to its destination. The CRH can be encoded in relatively few | takes to its destination. The CRH can be encoded in relatively few | |||
| bytes. The following are reasons for encoding the CRH in as few | bytes. The following are reasons for encoding the CRH in as few | |||
| bytes as possible: | bytes as possible: | |||
| * Many ASIC-based forwarders copy headers from buffer memory to on- | * Many forwarders based on Application-Specific Integrated Circuits | |||
| chip memory. As header sizes increase, so does the cost of this | (ASICs) copy headers from buffer memory to on-chip memory. As | |||
| copy. | header sizes increase, so does the cost of this copy. | |||
| * Because Path MTU Discovery (PMTUD) [RFC8201] is not entirely | * Because Path MTU Discovery (PMTUD) [RFC8201] is not entirely | |||
| reliable, many IPv6 hosts refrain from sending packets larger than | reliable, many IPv6 hosts refrain from sending packets larger than | |||
| the IPv6 minimum link MTU (i.e., 1280 bytes). When packets are | the IPv6 minimum link MTU (i.e., 1280 bytes). When packets are | |||
| small, the overhead imposed by large Routing Headers is excessive. | small, the overhead imposed by large Routing headers is excessive. | |||
| This document describes an experiment whose purposes are: | This document describes an experiment with the following purposes: | |||
| * To demonstrate that the CRH can be implemented and deployed. | * To demonstrate that the CRH can be implemented and deployed | |||
| * To demonstrate that the security considerations, described in this | * To demonstrate that the security considerations described in this | |||
| document, can be addressed with access control lists. | document can be addressed with ACLs | |||
| * To encourage replication of the experiment. | * To encourage replication of the experiment | |||
| 2. Requirements Language | 2. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. The Compact Routing Headers (CRH) | 3. The Compact Routing Header (CRH) | |||
| Both CRH versions (i.e., CRH-16 and CRH-32) contain the following | Both CRH versions (i.e., CRH-16 and CRH-32) contain the following | |||
| fields: | fields: | |||
| * Next Header - Defined in [RFC8200]. | * Next Header, as defined in [RFC8200] | |||
| * Hdr Ext Len - Defined in [RFC8200]. | * Hdr Ext Len, as defined in [RFC8200] | |||
| * Routing Type - Defined in [RFC8200]. (CRH-16 value is 5. CRH-32 | * Routing Type, as defined in [RFC8200] (CRH-16 value is 5, and | |||
| value is 6). | CRH-32 value is 6.) | |||
| * Segments Left - Defined in [RFC8200]. | * Segments Left, as defined in [RFC8200] | |||
| * Type-specific Data - Described in [RFC8200]. | * type-specific data, as described in [RFC8200] | |||
| In the CRH, the Type-specific data field contains a list of CRH | In the CRH, the type-specific data field contains a list of CRH | |||
| Segment Identifiers (CRH SIDs). Each CRH SID identifies an entry in | Segment Identifiers (CRH SIDs). Each CRH SID identifies an entry in | |||
| the CRH Forwarding Information Base (CRH-FIB) (Section 4). Each CRH- | the CRH Forwarding Information Base (CRH-FIB) (Section 4). Each CRH- | |||
| FIB entry identifies an interface on the path that the packet takes | FIB entry identifies an interface on the path that the packet takes | |||
| to its destination. | to its destination. | |||
| CRH SIDs are listed in reverse order. So, the first CRH SID in the | CRH SIDs are listed in reverse order. So, the first CRH SID in the | |||
| list represents the final interface in the path. Because CRH SIDs | list represents the final interface in the path. Because CRH SIDs | |||
| are listed in reverse order, the Segments Left field can be used as | are listed in reverse order, the Segments Left field can be used as | |||
| an index into the CRH SID list. In this document, the "current CRH | an index into the CRH SID list. In this document, the "current CRH | |||
| SID" is the CRH SID list entry referenced by the Segments Left field. | SID" is the CRH SID list entry referenced by the Segments Left field. | |||
| The first CRH SID in the path is omitted from the list unless there | The first CRH SID in the path is omitted from the list unless there | |||
| is some reason to preserve it. See Appendix A for an example. | is some reason to preserve it. See Appendix A for an example. | |||
| In the CRH-16 (Figure 1), each CRH SID is encoded in 16-bits. In the | In the CRH-16 (Figure 1), each CRH SID is encoded in 16 bits. In the | |||
| CRH-32 (Figure 2), each CRH SID is encoded in 32-bits. | CRH-32 (Figure 2), each CRH SID is encoded in 32 bits. | |||
| In all cases, the CRH MUST end on a 64-bit boundary. So, the Type- | In all cases, the CRH MUST end on a 64-bit boundary. So, the type- | |||
| specific data field MUST be padded with zeros if the CRH would | specific data field MUST be padded with zeros if the CRH would | |||
| otherwise not end on a 64-bit boundary. | otherwise not end on a 64-bit boundary. | |||
| 0 1 2 3 | 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 | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Next Header | Hdr Ext Len | Routing Type | Segments Left | | | Next Header | Hdr Ext Len | Routing Type | Segments Left | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | SID[0] | SID[1] | | | SID[0] | SID[1] | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| | |||
| skipping to change at page 5, line 11 ¶ | skipping to change at line 197 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | |||
| Figure 2: CRH-32 | Figure 2: CRH-32 | |||
| 4. The CRH Forwarding Information Base (CRH-FIB) | 4. The CRH Forwarding Information Base (CRH-FIB) | |||
| Each CRH SID identifies a CRH-FIB entry. | Each CRH SID identifies a CRH-FIB entry. | |||
| Each CRH-FIB entry contains: | Each CRH-FIB entry contains: | |||
| * An IPv6 address. | * An IPv6 address | |||
| * A topological function. | * A topological function | |||
| * Arguments for the topological function. (Optional). | * Arguments for the topological function (optional) | |||
| The IPv6 address can be a Global Unicast Address (GUA), a Link Local | The IPv6 address can be a Global Unicast Address (GUA), a Link-Local | |||
| Unicast address (LLU), or a Unique Local Address (ULA). When the | Unicast (LLU) address, or a Unique Local Address (ULA). When the | |||
| IPv6 address is the final address in a path, it can also be a | IPv6 address is the final address in a path, it can also be a | |||
| multicast address. | multicast address. | |||
| The topological function specifies how the processing node forwards | The topological function specifies how the processing node forwards | |||
| the packet to the interface identified by the IPv6 address. The | the packet to the interface identified by the IPv6 address. The | |||
| following are examples: | following are examples: | |||
| * Forward the packet through the least-cost path to the interface | * Forward the packet through the least-cost path to the interface | |||
| identified by the IPv6 address (i.e., loose source routing). | identified by the IPv6 address (i.e., loose source routing). | |||
| * Forward the packet through a specified interface to the interface | * Forward the packet through a specified interface to the interface | |||
| identified by the IPv6 address (i.e.,strict source routing) | identified by the IPv6 address (i.e., strict source routing). | |||
| Some topological functions require parameters. For example, a | Some topological functions require parameters. For example, a | |||
| topological function might require a parameter that identifies the | topological function might require a parameter that identifies the | |||
| interface through which the packet is forwarded. | interface through which the packet is forwarded. | |||
| The CRH-FIB can be populated: | The CRH-FIB can be populated by: | |||
| * By an operator, using a Command Line Interface (CLI). | * An operator, using a Command Line Interface (CLI) | |||
| * By a controller, using the Path Computation Element (PCE) | * A controller, using the Path Computation Element Communication | |||
| Communication Protocol (PCEP) [RFC5440] or the Network | Protocol (PCEP) [RFC5440] or the Network Configuration Protocol | |||
| Configuration Protocol (NETCONF) [RFC6241]. | (NETCONF) [RFC6241] | |||
| * By a distributed routing protocol [ISO10589-Second-Edition], | * A distributed routing protocol, such as those defined in | |||
| [RFC5340], [RFC4271]. | [ISO10589-Second-Edition], [RFC5340], and [RFC4271] | |||
| The above-mentioned mechanisms are not defined here and are beyond | The above-mentioned mechanisms are not defined here and are beyond | |||
| the scope of this document | the scope of this document. | |||
| 5. Processing Rules | 5. Processing Rules | |||
| The following rules describe CRH processing: | The following rules describe CRH processing: | |||
| * If Hdr Ext Len indicates that the CRH is larger than the | * If Hdr Ext Len indicates that the CRH is larger than the | |||
| implementation can process, discard the packet and send an ICMPv6 | implementation can process, discard the packet and send an ICMPv6 | |||
| [RFC4443] Parameter Problem, Code 0, message to the Source | [RFC4443] Parameter Problem, Code 0, message to the Source | |||
| Address, pointing to the Hdr Ext Len field. | Address, pointing to the Hdr Ext Len field. | |||
| * Compute L, the minimum CRH length ( Section 5.1). | * Compute L, the minimum CRH length (Section 5.1). | |||
| * If L is greater than Hdr Ext Len, discard the packet and send an | * If L is greater than Hdr Ext Len, discard the packet and send an | |||
| ICMPv6 Parameter Problem, Code 6, message to the Source Address, | ICMPv6 Parameter Problem, Code 6, message to the Source Address, | |||
| pointing to the Segments Left field. | pointing to the Segments Left field. | |||
| * Decrement Segments Left. | * Decrement Segments Left. | |||
| * Search for the current CRH SID in the CRH-FIB. In this document, | * Search for the current CRH SID in the CRH-FIB. In this document, | |||
| the "current CRH SID" is the CRH SID list entry referenced by the | the "current CRH SID" is the CRH SID list entry referenced by the | |||
| Segments Left field. | Segments Left field. | |||
| skipping to change at page 6, line 38 ¶ | skipping to change at line 269 ¶ | |||
| Source Address, pointing to the current SID. | Source Address, pointing to the current SID. | |||
| * If Segments Left is greater than 0 and the CRH-FIB entry contains | * If Segments Left is greater than 0 and the CRH-FIB entry contains | |||
| a multicast address, discard the packet and send an ICMPv6 | a multicast address, discard the packet and send an ICMPv6 | |||
| Parameter Problem, Code 0, message to the Source Address, pointing | Parameter Problem, Code 0, message to the Source Address, pointing | |||
| to the current SID. (This prevents packet storms.) | to the current SID. (This prevents packet storms.) | |||
| * Copy the IPv6 address from the CRH-FIB entry to the Destination | * Copy the IPv6 address from the CRH-FIB entry to the Destination | |||
| Address field in the IPv6 header. | Address field in the IPv6 header. | |||
| * Submit the packet, its topological function and its parameters to | * Submit the packet, its topological function, and its parameters to | |||
| the IPv6 module. See NOTE. | the IPv6 module. | |||
| NOTE: By default, the IPv6 module determines the next-hop and | | NOTE: By default, the IPv6 module determines the next hop and | |||
| forwards the packet. However, the topological function may elicit | | forwards the packet. However, the topological function may | |||
| another behavior. For example, the IPv6 module may forward the | | elicit another behavior. For example, the IPv6 module may | |||
| packet through a specified interface. | | forward the packet through a specified interface. | |||
| 5.1. Computing Minimum CRH Length | 5.1. Computing Minimum CRH Length | |||
| The algorithm described in this section accepts the following CRH | The algorithm described in this section accepts the following CRH | |||
| fields as its input parameters: | fields as its input parameters: | |||
| * Routing Type (i.e., CRH-16 or CRH-32). | * Routing Type (i.e., CRH-16 or CRH-32) | |||
| * Segments Left. | * Segments Left | |||
| It yields L, the minimum CRH length. The minimum CRH length is | It yields L, the minimum CRH length. The minimum CRH length is | |||
| measured in 8-octet units, not including the first 8 octets. | measured in 8-octet units, not including the first 8 octets. | |||
| <CODE BEGINS> | <CODE BEGINS> | |||
| switch(Routing Type) { | switch(Routing Type) { | |||
| case CRH-16: | case CRH-16: | |||
| if (Segments Left <= 2) | if (Segments Left <= 2) | |||
| return(0) | return(0) | |||
| sidsBeyondFirstWord = Segments Left - 2; | sidsBeyondFirstWord = Segments Left - 2; | |||
| skipping to change at page 7, line 38 ¶ | skipping to change at line 317 ¶ | |||
| words++; | words++; | |||
| return(words) | return(words) | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 6. Mutability | 6. Mutability | |||
| In the CRH, the Segments Left field is mutable. All remaining fields | In the CRH, the Segments Left field is mutable. All remaining fields | |||
| are immutable. | are immutable. | |||
| 7. Applications And SIDs | 7. Applications and CRH SIDs | |||
| A CRH contains one or more CRH SIDs. Each CRH SID is processed by | A CRH contains one or more CRH SIDs. Each CRH SID is processed by | |||
| exactly one CRH-configured router whose one address matches the | exactly one CRH-configured router whose one address matches the | |||
| packet destination address. | packet Destination Address. | |||
| Therefore, a CRH SID is not required to have domain-wide | Therefore, a CRH SID is not required to have domain-wide | |||
| significance. Applications can: | significance. Applications can allocate CRH SIDs so that they have | |||
| either domain-wide or node-local significance. | ||||
| * Allocate CRH SIDs so that they have domain-wide significance. | ||||
| * Allocate CRH SIDs so that they have node-local significance. | ||||
| 8. Operational Considerations | 8. Operational Considerations | |||
| PING and TRACEROUTE [RFC2151] both operate correctly in the presence | PING and Traceroute [RFC2151] both operate correctly in the presence | |||
| of the CRH. TCPDUMP and Wireshark have been extended to support the | of the CRH. TCPDUMP and Wireshark have been extended to support the | |||
| CRH. | CRH. | |||
| PING and TRACEROUTE report 16-bit CRH SIDs for CRH-16, and 32-bit CRH | PING and Traceroute report 16-bit CRH SIDs for CRH-16 and 32-bit CRH | |||
| SIDs for CRH-32. It is recommended that the experimental versions of | SIDs for CRH-32. It is recommended that the experimental versions of | |||
| PING use the text representations described in Section 9. | PING use the textual representations described in Section 9. | |||
| 9. Textual Representation | 9. Textual Representations | |||
| A 16-bit CRH SID can be represented by four lower-case hexadecimal | A 16-bit CRH SID can be represented by four lowercase hexadecimal | |||
| digits. Leading zeros SHOULD be omitted. However, the all-zeros CRH | digits. Leading zeros SHOULD be omitted. However, the all-zeros CRH | |||
| SID MUST be represented by a single 0. The following are examples: | SID MUST be represented by a single 0. The following are examples: | |||
| * beef | * beef | |||
| * eef | * eef | |||
| * 0 | * 0 | |||
| A 16-bit CRH SID also can be represented in dotted-decimal notation. | A 16-bit CRH SID also can be represented in dotted-decimal notation. | |||
| The following are examples: | The following are examples: | |||
| * 192.0 | * 192.0 | |||
| * 192.51 | * 192.51 | |||
| A 32-bit CRH SID can be represented by four lower-case hexadecimal | A 32-bit CRH SID can be represented by four lowercase hexadecimal | |||
| digits, a colon (:), and another four lower-case hexadecimal digits. | digits, a colon (:), and another four lowercase hexadecimal digits. | |||
| Leading zeros MUST be omitted. The following are examples: | Leading zeros MUST be omitted. The following are examples: | |||
| * dead:beef | * dead:beef | |||
| * ead:eef | * ead:eef | |||
| * :beef | * :beef | |||
| * beef: | * beef: | |||
| * : | * : | |||
| A 32-bit CRH SID can also be represent in dotted-decimal notation. | A 32-bit CRH SID can also be represented in dotted-decimal notation. | |||
| The following are examples: | The following are examples: | |||
| * 192.0.2.1 | * 192.0.2.1 | |||
| * 192.0.2.2 | * 192.0.2.2 | |||
| * 192.0.2.3 | * 192.0.2.3 | |||
| 10. Security Considerations | 10. Security Considerations | |||
| In this document, one node trusts another only if both nodes are | In this document, one node trusts another only if both nodes are | |||
| operated by the same party. A node determines whether it trusts | operated by the same party. A node determines whether it trusts | |||
| another node by examining its IP address. In many networks, | another node by examining its IP address. In many networks, | |||
| operators number their nodes from a small number of prefixes. This | operators number their nodes using a small number of prefixes. This | |||
| facilitates identification of trusted nodes. | facilitates identification of trusted nodes. | |||
| A node can encounter security vulnerabilities when it processes a | A node can encounter security vulnerabilities when it processes a | |||
| Routing Header that originated on an untrusted node [RFC5095]. | Routing header that originated on an untrusted node [RFC5095]. | |||
| Therefore, nodes MUST deploy ACLs that discard packets containing the | Therefore, nodes MUST deploy ACLs that discard packets containing the | |||
| CRH when both of the following conditions are true: | CRH when both of the following conditions are true: | |||
| * The Source Address does not identify an interface on a trusted | * The Source Address does not identify an interface on a trusted | |||
| node. | node. | |||
| * The Destination Address identifies an interface on the local node. | * The Destination Address identifies an interface on the local node. | |||
| The above-mentioned ACLs do not protect the node from attack packets | The above-mentioned ACLs do not protect the node from attack packets | |||
| that contain a forged (i.e., spoofed) Source Address. In order to | that contain a forged (i.e., spoofed) Source Address. In order to | |||
| mitigate this risk, nodes MAY also discard packets containing the CRH | mitigate this risk, nodes MAY also discard packets containing the CRH | |||
| when all of the following conditions are true: | when all of the following conditions are true: | |||
| * The Source Address identifies an interface on a trusted node. | * The Source Address identifies an interface on a trusted node. | |||
| * The Destination Address identifies an interface on the local node. | * The Destination Address identifies an interface on the local node. | |||
| * The packet does not pass an Enhanced Feasible-Path Unicast Reverse | * The packet does not pass an Enhanced Feasible-Path Unicast Reverse | |||
| Path Forwarding (RPF) [RFC8704], | Path Forwarding (EFP-uRPF) [RFC8704] check. | |||
| The RPF check eliminates some, but not all packets with forged source | The EFP-uRPF check eliminates some, but not all, packets with forged | |||
| addresses. Therefore, a network operator that deploys CRH MUST | Source Addresses. Therefore, a network operator that deploys CRH | |||
| implement Access Control Lists (ACL) on each of its edge nodes. The | MUST implement ACLs on each of its edge nodes. The ACL discards | |||
| ACL discards packets whose source address identifies an interface on | packets whose Source Address identifies an interface on a trusted | |||
| a trusted node. | node. | |||
| The CRH is compatible with end-to-end IPv6 Authentication Header (AH) | The CRH is compatible with end-to-end IPv6 Authentication Header (AH) | |||
| [RFC4302] processing. This is becasue the source node calculates the | [RFC4302] processing. This is because the source node calculates the | |||
| Integrity Check Value (ICV) over the packet as it arrives at the | Integrity Check Value (ICV) over the packet as it arrives at the | |||
| destination node. | destination node. | |||
| 11. Implementation and Deployment Status | 11. Experimental Results | |||
| Juniper Networks has produced experimental implementations of the CRH | ||||
| on the MX-series (ASIC-based) router | ||||
| Liquid Telecom has produced experimental implementations of the CRH | ||||
| on software based routers. | ||||
| The CRH has carried non-production traffic in CERNET and Liquid | ||||
| Telecom. | ||||
| Interoperability among these implementations has not yet been | ||||
| demonstrated. | ||||
| 12. Experimental Results | ||||
| Parties participating in this experiment should publish experimental | Parties participating in this experiment should publish experimental | |||
| results within one year of the publication of this document. | results within one year of the publication of this document. | |||
| Experimental results should address the following: | Experimental results should address the following: | |||
| * Effort required to deploy | * Effort required to deploy | |||
| - Was deployment incremental or network-wide? | - Was deployment incremental or network-wide? | |||
| - Was there a need to synchronize configurations at each node or | - Was there a need to synchronize configurations at each node, or | |||
| could nodes be configured independently | could nodes be configured independently? | |||
| - Did the deployment require hardware upgrade? | - Did the deployment require a hardware upgrade? | |||
| - Did the CRH SIDs have domain-wide or node-local significance? | - Did the CRH SIDs have domain-wide or node-local significance? | |||
| * Effort required to secure | * Effort required to secure | |||
| * Performance impact | * Performance impact | |||
| * Effectiveness of risk mitigation with ACLs | * Effectiveness of risk mitigation with ACLs | |||
| * Cost of risk mitigation with ACLs | * Cost of risk mitigation with ACLs | |||
| * Mechanism used to populate the FIB | * Mechanism used to populate the CRH-FIB | |||
| * Scale of deployment | * Scale of deployment | |||
| * Interoperability | * Interoperability | |||
| - Did you deploy two inter-operable implementations? | - Did you deploy two interoperable implementations? | |||
| - Did you experience interoperability problems? | - Did you experience interoperability problems? | |||
| - Did implementations generally implement the same topological | - Did implementations generally implement the same topological | |||
| functions with identical arguments? | functions with identical arguments? | |||
| - Were topological function semantics identical on each | - Were topological function semantics identical on each | |||
| implementation? | implementation? | |||
| * Effectiveness and sufficiency of OAM mechanism | * Effectiveness and sufficiency of Operations, Administration, and | |||
| Maintenance (OAM) mechanisms | ||||
| - Did PING work? | - Did PING work? | |||
| - Did TRACEROUTE work? | - Did Traceroute work? | |||
| - Did Wireshark work? | - Did Wireshark work? | |||
| - Did TCPDUMP work? | - Did TCPDUMP work? | |||
| 13. IANA Considerations | 12. IANA Considerations | |||
| This document makes the following registrations in the "Internet | ||||
| Protocol Version 6 (IPv6) Parameters" "Routing Types" subregistry | ||||
| maintained by IANA: | ||||
| +-------+------------------------------+---------------+ | ||||
| | Value | Description | Reference | | ||||
| +=======+==============================+===============+ | ||||
| | 5 | CRH-16 | This document | | ||||
| +-------+------------------------------+---------------+ | ||||
| | 6 | CRH-32 | This document | | ||||
| +-------+------------------------------+---------------+ | ||||
| 14. Acknowledgements | ||||
| Thanks to Dr. Vanessa Ameen, Dale Carder, Brian Carpenter, Adrian | ||||
| Farrel, Fernando Gont, Naveen Kottapalli, Joel Halpern, Mark Smith, | ||||
| Reji Thomas, Tony Li, Xing Li, Gerald Schmidt, Nancy Shaw, Ketan | ||||
| Talaulikar, and Chandra Venkatraman for their contributions to this | ||||
| document. | ||||
| 15. Contributors | ||||
| Gang Chen | ||||
| Baidu | ||||
| No.10 Xibeiwang East Road Haidian District | ||||
| Beijing 100193 P.R. China | ||||
| Email: phdgang@gmail.com | ||||
| Yifeng Zhou | ||||
| ByteDance | ||||
| Building 1, AVIC Plaza, 43 N 3rd Ring W Rd Haidian District | ||||
| Beijing 100000 P.R. China | ||||
| Email: yifeng.zhou@bytedance.com | ||||
| Gyan Mishra | ||||
| Verizon | IANA has registered the following in the "Routing Types" subregistry | |||
| within the "Internet Protocol Version 6 (IPv6) Parameters" registry: | ||||
| Silver Spring, Maryland, USA | +=======+=============+===========+ | |||
| | Value | Description | Reference | | ||||
| +=======+=============+===========+ | ||||
| | 5 | CRH-16 | RFC 9631 | | ||||
| +-------+-------------+-----------+ | ||||
| | 6 | CRH-32 | RFC 9631 | | ||||
| +-------+-------------+-----------+ | ||||
| Email: hayabusagsm@gmail.com | Table 1 | |||
| 16. References | 13. References | |||
| 16.1. Normative References | 13.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | |||
| DOI 10.17487/RFC4302, December 2005, | DOI 10.17487/RFC4302, December 2005, | |||
| <https://www.rfc-editor.org/info/rfc4302>. | <https://www.rfc-editor.org/info/rfc4302>. | |||
| skipping to change at page 13, line 14 ¶ | skipping to change at line 520 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", STD 86, RFC 8200, | (IPv6) Specification", STD 86, RFC 8200, | |||
| DOI 10.17487/RFC8200, July 2017, | DOI 10.17487/RFC8200, July 2017, | |||
| <https://www.rfc-editor.org/info/rfc8200>. | <https://www.rfc-editor.org/info/rfc8200>. | |||
| 16.2. Informative References | 13.2. Informative References | |||
| [IANA-RH] IANA, "Routing Headers", | [IANA-RT] IANA, "Routing Types", | |||
| <https://www.iana.org/assignments/ipv6-parameters/ | <https://www.iana.org/assignments/ipv6-parameters>. | |||
| ipv6-parameters.xhtml#ipv6-parameters-3>. | ||||
| [ISO10589-Second-Edition] | [ISO10589-Second-Edition] | |||
| International Organization for Standardization, | ISO/IEC, "Information technology - Telecommunications and | |||
| ""Intermediate system to Intermediate system intra-domain | information exchange between systems - Intermediate System | |||
| routeing information exchange protocol for use in | to Intermediate System intra-domain routeing information | |||
| conjunction with the protocol for providing the | exchange protocol for use in conjunction with the protocol | |||
| connectionless-mode Network Service (ISO 8473)", ISO/IEC | for providing the connectionless-mode network service (ISO | |||
| 10589:2002, Second Edition,", November 2001. | 8473)", Second Edition, ISO/IEC 10589:2002, November 2002, | |||
| <https://www.iso.org/standard/30932.html>. | ||||
| [RFC2151] Kessler, G. and S. Shepard, "A Primer On Internet and TCP/ | [RFC2151] Kessler, G. and S. Shepard, "A Primer On Internet and TCP/ | |||
| IP Tools and Utilities", FYI 30, RFC 2151, | IP Tools and Utilities", FYI 30, RFC 2151, | |||
| DOI 10.17487/RFC2151, June 1997, | DOI 10.17487/RFC2151, June 1997, | |||
| <https://www.rfc-editor.org/info/rfc2151>. | <https://www.rfc-editor.org/info/rfc2151>. | |||
| [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
| Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
| DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
| <https://www.rfc-editor.org/info/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
| skipping to change at page 14, line 24 ¶ | skipping to change at line 577 ¶ | |||
| Appendix A. CRH Processing Examples | Appendix A. CRH Processing Examples | |||
| This appendix demonstrates CRH processing in the following scenarios: | This appendix demonstrates CRH processing in the following scenarios: | |||
| * The CRH SID list contains one entry for each segment in the path | * The CRH SID list contains one entry for each segment in the path | |||
| (Appendix A.1). | (Appendix A.1). | |||
| * The CRH SID list omits the first entry in the path (Appendix A.2). | * The CRH SID list omits the first entry in the path (Appendix A.2). | |||
| Figure 3 provides a reference topology that is used in all examples, | ||||
| and Table 2 describes two entries that appear in each node's CRH-FIB. | ||||
| ----------- ----------- ----------- | ----------- ----------- ----------- | |||
| |Node: S | |Node: I1 | |Node: I2 | | |Node: S | |Node: I1 | |Node: I2 | | |||
| |Loopback: |---------------|Loopback: |---------------|Loopback: | | |Loopback: |---------------|Loopback: |---------------|Loopback: | | |||
| |2001:db8::a| |2001:db8::1| |2001:db8::2| | |2001:db8::a| |2001:db8::1| |2001:db8::2| | |||
| ----------- ----------- ----------- | ----------- ----------- ----------- | |||
| | | | | | | |||
| | ----------- | | | ----------- | | |||
| | |Node: D | | | | |Node: D | | | |||
| ---------------------|Loopback: |--------------------- | ---------------------|Loopback: |--------------------- | |||
| |2001:db8::b| | |2001:db8::b| | |||
| ----------- | ----------- | |||
| Figure 3: Reference Topology | Figure 3: Reference Topology | |||
| Figure 3 provides a reference topology that is used in all examples. | ||||
| +=====+==============+===================+ | +=====+==============+===================+ | |||
| | SID | IPv6 Address | Forwarding Method | | | SID | IPv6 Address | Forwarding Method | | |||
| +=====+==============+===================+ | +=====+==============+===================+ | |||
| | 2 | 2001:db8::2 | Least-cost path | | | 2 | 2001:db8::2 | Least-cost path | | |||
| +-----+--------------+-------------------+ | +-----+--------------+-------------------+ | |||
| | 11 | 2001:db8::b | Least-cost path | | | 11 | 2001:db8::b | Least-cost path | | |||
| +-----+--------------+-------------------+ | +-----+--------------+-------------------+ | |||
| Table 1: Node SIDs | Table 2: Node SIDs | |||
| Table 1 describes two entries that appear in each node's CRH-FIB. | A.1. The CRH SID list contains one entry for each segment in the path. | |||
| A.1. The CRH SID List Contains One Entry For Each Segment In The Path | In this example, Node S sends a packet to Node D via I2, and I2 | |||
| appears in the CRH segment list. | ||||
| In this example, Node S sends a packet to Node D, via I2. In this | +-----------------------------------+-------------------+ | |||
| example, I2 appears in the CRH segment list. | | Source Address = 2001:db8::a | Segments Left = 1 | | |||
| +-----------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::2 | SID[0] = 11 | | ||||
| +-----------------------------------+-------------------+ | ||||
| | | SID[1] = 2 | | ||||
| +-----------------------------------+-------------------+ | ||||
| +=====================================+===================+ | Table 3: Packet Travels from S to I2 | |||
| | As the packet travels from S to I2: | | | ||||
| +=====================================+===================+ | ||||
| | Source Address = 2001:db8::a | Segments Left = 1 | | ||||
| +-------------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::2 | SID[0] = 11 | | ||||
| +-------------------------------------+-------------------+ | ||||
| | | SID[1] = 2 | | ||||
| +-------------------------------------+-------------------+ | ||||
| Table 2 | +-----------------------------------+-------------------+ | |||
| | Source Address = 2001:db8::a | Segments Left = 0 | | ||||
| +-----------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::b | SID[0] = 11 | | ||||
| +-----------------------------------+-------------------+ | ||||
| | | SID[1] = 2 | | ||||
| +-----------------------------------+-------------------+ | ||||
| +=====================================+===================+ | Table 4: Packet Travels from I2 to D | |||
| | As the packet travels from I2 to D: | | | ||||
| +=====================================+===================+ | ||||
| | Source Address = 2001:db8::a | Segments Left = 0 | | ||||
| +-------------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::b | SID[0] = 11 | | ||||
| +-------------------------------------+-------------------+ | ||||
| | | SID[1] = 2 | | ||||
| +-------------------------------------+-------------------+ | ||||
| Table 3 | A.2. The CRH SID list omits the first entry in the path. | |||
| A.2. The CRH SID List Omits The First Entry In The Path | In this example, Node S sends a packet to Node D via I2, and I2 does | |||
| not appear in the CRH segment list. | ||||
| In this example, Node S sends a packet to Node D, via I2. In this | +-----------------------------------+-------------------+ | |||
| example, I2 does not appear in the CRH segment list. | | Source Address = 2001:db8::a | Segments Left = 1 | | |||
| +-----------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::2 | SID[0] = 11 | | ||||
| +-----------------------------------+-------------------+ | ||||
| +=====================================+===================+ | Table 5: Packet Travels from S to I2 | |||
| | As the packet travels from S to I2: | | | ||||
| +=====================================+===================+ | ||||
| | Source Address = 2001:db8::a | Segments Left = 1 | | ||||
| +-------------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::2 | SID[0] = 11 | | ||||
| +-------------------------------------+-------------------+ | ||||
| Table 4 | +-----------------------------------+-------------------+ | |||
| | Source Address = 2001:db8::a | Segments Left = 0 | | ||||
| +-----------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::b | SID[0] = 11 | | ||||
| +-----------------------------------+-------------------+ | ||||
| +=====================================+===================+ | Table 6: Packet Travels from I2 to D | |||
| | As the packet travels from I2 to D: | | | ||||
| +=====================================+===================+ | ||||
| | Source Address = 2001:db8::a | Segments Left = 0 | | ||||
| +-------------------------------------+-------------------+ | ||||
| | Destination Address = 2001:db8::b | SID[0] = 11 | | ||||
| +-------------------------------------+-------------------+ | ||||
| Table 5 | Acknowledgements | |||
| Thanks to Dr. Vanessa Ameen, Dale Carder, Brian Carpenter, Adrian | ||||
| Farrel, Fernando Gont, Joel Halpern, Naveen Kottapalli, Tony Li, Xing | ||||
| Li, Gerald Schmidt, Nancy Shaw, Mark Smith, Ketan Talaulikar, Reji | ||||
| Thomas, and Chandra Venkatraman for their contributions to this | ||||
| document. | ||||
| Contributors | ||||
| Gang Chen | ||||
| Baidu | ||||
| No.10 Xibeiwang East Road | ||||
| Haidian District | ||||
| Beijing | ||||
| 100193 | ||||
| China | ||||
| Email: phdgang@gmail.com | ||||
| Yifeng Zhou | ||||
| ByteDance | ||||
| Building 1, AVIC Plaza | ||||
| 43 N 3rd Ring W Rd | ||||
| Haidian District | ||||
| Beijing | ||||
| 100000 | ||||
| China | ||||
| Email: yifeng.zhou@bytedance.com | ||||
| Gyan Mishra | ||||
| Verizon | ||||
| Silver Spring, MD | ||||
| United States of America | ||||
| Email: hayabusagsm@gmail.com | ||||
| Authors' Addresses | Authors' Addresses | |||
| Ron Bonica | Ron Bonica | |||
| Juniper Networks | Juniper Networks | |||
| 2251 Corporate Park Drive | 2251 Corporate Park Drive | |||
| Herndon, Virginia 20171 | Herndon, VA 20171 | |||
| United States of America | United States of America | |||
| Email: rbonica@juniper.net | Email: rbonica@juniper.net | |||
| Yuji Kamite | Yuji Kamite | |||
| NTT Communications Corporation | NTT Communications Corporation | |||
| 3-4-1 Shibaura, Minato-ku, | 3-4-1 Shibaura, Minato-ku, Tokyo | |||
| 108-8118 | 108-8118 | |||
| Japan | Japan | |||
| Email: y.kamite@ntt.com | Email: y.kamite@ntt.com | |||
| Andrew Alston | Andrew Alston | |||
| Liquid Telecom | Alston Networks | |||
| Nairobi | Nairobi | |||
| Kenya | Kenya | |||
| Email: Andrew.Alston@liquidtelecom.com | Email: aa@alstonnetworks.net | |||
| Daniam Henriques | Daniam Henriques | |||
| Liquid Telecom | Liquid Telecom | |||
| Johannesburg | Johannesburg | |||
| South Africa | South Africa | |||
| Email: daniam.henriques@liquidtelecom.com | Email: daniam.henriques@liquidtelecom.com | |||
| Luay Jalil | Luay Jalil | |||
| Verizon | Verizon | |||
| Richardson, Texas | Richardson, TX | |||
| United States of America | United States of America | |||
| Email: luay.jalil@one.verizon.com | Email: luay.jalil@one.verizon.com | |||
| End of changes. 97 change blocks. | ||||
| 257 lines changed or deleted | 234 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||