RFC 4727

Experimental Values In IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers

πŸ“… published November 2006, from ietf

Experimental Values in IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers ✨

πŸ“œ RFC 4727 πŸŽ€ was written by B. Fenner of AT&T Labs - Research and dated November 2006. It's a Standards Track document, so it's meant to be a real protocol spec, not just an FYI. The title block doesn't list any RFCs it obsoletes or updates, so it doesn't replace or amend anything else. πŸ’…

Status of This Memo

This document specifies an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements 🫢. For where this protocol stands in standardization, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited.

Copyright (C) The IETF Trust (2006).

Abstract

okay so when you're experimenting with or extending protocols, you usually need some protocol number or constant to actually test your new stuff, even if you're only testing in a closed environment πŸ§ͺ. This document sets aside some ranges of numbers for experimentation in specific protocols where that need was identified, and it lists the numbers that other documents have already reserved. ✨

1. Introduction 🌸

[RFC3692] recommends assigning option numbers for experiments and testing. This document records several of those assignments for the number spaces whose IANA considerations are covered in [RFC2780], and it generally follows the form of [RFC2780].

When you use these values, carefully consider the advice in Sections 1 and 1.1 of [RFC3692]. It is not appropriate to simply select one of these values and hard code it into a system. πŸ™ˆ

Note: while [RFC3692] says that it may not be necessary to allocate values for UDP and TCP ports, Sections 6 and 7.1 explicitly reserve ports for this purpose to avoid any possible conflict. πŸ¦‹

2. Fields in the IPv4 Header 🩡

The IPv4 header [RFC0791] has a few fields that carry values assigned by IANA: Version, Type of Service, Protocol, Source Address, Destination Address, and Option Type. πŸ“¦

2.1. IP Version Field in the IPv4 Header

The Version field in IPv4 packets is always 4. Iconic and consistent πŸ’….

2.2. IPv4 Type of Service Field

[RFC2474] defines Pool 2 (all code points xxxx11, where 'x' refers to either '0' or '1') as Experimental/Local Use, so no additional code points should be needed. The Explicit Congestion Notification (ECN) field [RFC3168] has no free code points to assign. Lowkey no room here 😭.

2.3. IPv4 Protocol Field

[RFC3692] allocates two experimental code points (253 and 254) for the IPv4 Protocol field. 🧚

2.4. IPv4 Source and Destination Addresses

2.4.1. IPv4 Unicast

No experimental IPv4 addresses are defined. For certain experiments, the address ranges set aside for Private Internets in [RFC1918] may be useful. It is not appropriate to use other special-purpose IPv4 addresses [RFC3330] for experimentation. 🚫

At the time of this writing, some Internet Registries have policies allowing experimental assignments from number spaces that they control. Depending on the experiment, the registry, and their policy, this may be an appropriate path to pursue. 🌈

2.4.2. IPv4 Multicast

The globally routable group 224.0.1.20 is set aside for experimentation. For certain experiments, the administratively scoped multicast groups defined in [RFC2365] may be useful. This document assigns a single link-local scoped group, 224.0.0.254, and a single scope-relative group, 254. πŸ“

2.5. IPv4 Option Type Field

This document assigns a single option number, with all defined values of the "copy" and "class" fields, resulting in four distinct option type codes. See Section 8 for the assigned values. ✨

3. Fields in the IPv6 Header πŸ¦‹

The IPv6 header [RFC2460] has fields that carry values assigned from IANA-managed name spaces: Version, Traffic Class, Next Header, Source and Destination Address. The IPv6 Hop-by-Hop Options and Destination Options extension headers also include an Option Type field with values from an IANA-managed name space. The IPv6 Routing Header has a Type field, but there isn't currently an explicit IANA assignment policy for it. Complicated, bestie 🫠.

3.1. IP Version Field in the IPv6 Header

The Version field in IPv6 packets is always 6. πŸ‘‘

3.2. IPv6 Traffic Class Field

[RFC2474] defines Pool 2 (all code points xxxx11, where 'x' refers to either '0' or '1') as Experimental/Local Use, so no additional code points should be needed. The ECN field [RFC3168] has no free code points to assign. Same story as IPv4, no cap πŸ’€.

3.3. IPv6 Next Header Field

[RFC3692] allocates two experimental code points (253 and 254) for the IPv6 Next Header field. 🌸

3.4. IPv6 Source and Destination Addresses

3.4.1. IPv6 Unicast Addresses

[RFC2928] defines a set of IPv6 addresses for testing and experimental usage:

      The block of Sub-TLA IDs assigned to the IANA (i.e.,
      2001:0000::/29 - 2001:01F8::/29) is for assignment for testing and
      experimental usage to support activities such as the 6bone, and
      for new approaches like exchanges.

However, at this writing, there are no RFC3692-style experimental IPv6 addresses assigned. [HUSTON05] creates an IANA registry that may in the future contain such assignments. For certain experiments, Unique Local Addresses [RFC4193] may be useful. It is not appropriate to use addresses in the documentation prefix [RFC3849] for experimentation. πŸ™…β€β™€οΈ

At the time of this writing, some Internet Registries have policies allowing experimental assignments from number spaces that they control. Depending on the experiment, the registry, and their policy, this may be an appropriate path to pursue. 🧁

3.4.2. IPv6 Multicast Addresses

The group FF0X::114 is set aside for experimentation at all scope levels. Smaller scopes may be especially useful for experimentation, since they are defined not to leak out of a given boundary, which can be set to be the boundary of the experiment. For certain experiments, other multicast addresses with the T (non-permanently-assigned or "transient" address) bit [RFC4291] set may be useful. πŸ”₯

3.5. IPv6 Hop-by-Hop and Destination Option Fields

This document assigns a single option type, with all possible values of the "act" and "chg" fields, resulting in eight distinct option type codes. See Section 8 for the assigned values. 🫢

3.6. IPv6 Routing Header Routing Type

This document assigns two values for the Routing Type field in the IPv6 Routing Header, 253 and 254. 🧚

4. Fields in the IPv4 ICMP Header πŸŽ€

This document assigns two ICMPv4 type numbers, 253 and 254. ICMPv4 code values are allocated per type, so it's not feasible to assign experimental values in this document. πŸ™ˆ

5. Fields in the IPv6 ICMP Header 🌈

[RFC4443] includes experimental ICMPv6 type values for Informational (200, 201) and Error (100, 101) message types. ICMPv6 code values are allocated per type, so it's not feasible to assign experimental values in this document. ✨

5.1. IPv6 Neighbor Discovery Fields

The IPv6 Neighbor Discovery header [RFC2461] has fields that carry values assigned from IANA-managed name spaces: Type, Code, and Option Type. πŸ¦‹

5.1.1. IPv6 Neighbor Discovery Type

The Neighbor Discovery Type field is the same as the ICMPv6 Type field. See Section 5 for those code points. πŸ“

5.1.2. IPv6 Neighbor Discovery Code

The ICMPv6 Code field is not used in IPv6 Neighbor Discovery, so no experimental code points are necessary. Nothing to see here, bestie πŸ’….

5.1.3. IPv6 Neighbor Discovery Option Type

This document assigns two IPv6 Neighbor Discovery Option Types, 253 and 254. πŸ‘‘

6. Fields in the UDP Header πŸ’œ

Two system ports, 1021 and 1022, have been reserved for experimentation for UDP and TCP. 🌸

7. Fields in the TCP Header 🩷

7.1. TCP Source and Destination Port Fields

Two system ports, 1021 and 1022, have been reserved for experimentation for UDP and TCP. πŸ¦‹

7.2. Reserved Bits in TCP Header

There are not enough reserved bits to allocate any for experimentation. Sadly, no room to play 😭.

7.3. TCP Option Kind Field

Two TCP options, 253 and 254, have been reserved for experimentation with TCP Options. 🧚

8. IANA Considerations πŸ“‹

The new assignments are summarized below. ✨

IPv4 Multicast Addresses (multicast-addresses (224.0.0/24) Local
Network Control Block section) (Section 2.4.2)

Group Address Name
------------- ----------------------------
224.0.0.254   RFC3692-style Experiment (*)


IPv4 Multicast Addresses (multicast-addresses relative addresses
section) (Section 2.4.2)

Relative Description
-------- ----------------------------
254      RFC3692-style Experiment (*)


IPv4 Option Numbers (ip-parameters initial section) (Section 2.5)

Copy Class Number Value
---- ----- ------ -----
   0     0     30    30
   0     2     30    94
   1     0     30   158
   1     2     30   222

IPv6 Option Types (ipv6-parameters Section 5.b.)  (Section 3.5)

HEX         act  chg  rest
----        ---  ---  -----
0x1e         00   0   11110
0x3e         00   1   11110
0x5e         01   0   11110
0x7e         01   1   11110
0x9e         10   0   11110
0xbe         10   1   11110
0xde         11   0   11110
0xfe         11   1   11110


IPv6 Neighbor Discovery Option Formats (icmpv6-parameters)
(Section 5.1.3)

Type Description
---- ------------------------------
253  RFC3692-style Experiment 1 (*)
254  RFC3692-style Experiment 2 (*)


IPv6 Routing Header Routing Types (ipv6-parameters Section 5.c.)
                          (Section 3.6)

Type Description
---- ------------------------------
253  RFC3692-style Experiment 1 (*)
254  RFC3692-style Experiment 2 (*)


ICMPv4 Type Numbers (icmp-parameters) (Section 4)

Type Name
---- ------------------------------
253  RFC3692-style Experiment 1 (*)
254  RFC3692-style Experiment 2 (*)


System Port Numbers (port-numbers) (Sections 6 and 7.1)

Keyword Decimal  Description
------- -------- ------------------------------
exp1    1021/udp RFC3692-style Experiment 1 (*)
exp1    1021/tcp RFC3692-style Experiment 1 (*)
exp2    1022/udp RFC3692-style Experiment 2 (*)
exp2    1022/tcp RFC3692-style Experiment 2 (*)
TCP Option Numbers (tcp-parameters) (Section 7.3)

Kind Length Meaning
---- ------ ------------------------------
253  N      RFC3692-style Experiment 1 (*)
254  N      RFC3692-style Experiment 2 (*)

Each of these registrations comes with the following footnote:

(*) It is only appropriate to use these values in explicitly-
    configured experiments; they MUST NOT be shipped as defaults in
    implementations.  See RFC 3692 for details.
🚨 Heads up: these values are only for explicitly configured experiments. They MUST NOT be shipped as defaults in implementations, so please don't let your code sneak them in πŸ™…β€β™€οΈπŸ’–.

9. Security Considerations ✨

okay bestie, this part is SERIOUS 😭 production networks don't always support experimental code points in IP headers πŸ’€ so before you deploy an experiment across big networks like the public Internet, you need to check what the network scope actually supports 🧐 using unsupported experimental values can literally mess up the stable operation of the network hosting your experiment, and that is a huge deal when you're planning this stuff 🚨

security analyzers like firewalls and network intrusion detection monitors kinda rely on fields being read in one clear way πŸ” as new values get assigned, analyzers that don't know the new values might fail. that can mean losing connectivity if the analyzer drops the unrecognized traffic, or losing security if it forwards the traffic and the new values are used in an attack πŸ™ˆ assigning known values for experiments can help, since analyzers can then take a known action on explicitly experimental traffic πŸŽ€

the experimental IPv4 options from Section 2.5 are not included in the IPsec AH [RFC4302] calculations πŸ₯Ί so you can't authenticate their use. experimenters ought to keep that in mind when designing their experiments πŸ’… the experimental IPv6 options from Section 3.5 are different: users can choose whether the option is included in the AH calculations by picking the value of the "chg" field ✨

when experimental code points are deployed inside an administratively self-contained network domain, the network administrators should make sure each code point is used consistently so experiments don't interfere with each other 🫢 when they're used in traffic that crosses multiple administrative domains, experimenters should assume the same code points might be used at the same time by other experiments, which means the experiments could interfere 😬 pay special attention to any security threats that this kind of interference could create 🚨


10. References 🧚

10.1. Normative References πŸ’œ

[RFC0791]  Postel, J., "Internet Protocol", STD 5, RFC 791, September
           1981.

[RFC1918]  Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G.,
           and E. Lear, "Address Allocation for Private Internets",
           BCP 5, RFC 1918, February 1996.

[RFC2365]  Meyer, D., "Administratively Scoped IP Multicast", BCP 23,
           RFC 2365, July 1998.

[RFC2460]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
           (IPv6) Specification", RFC 2460, December 1998.

[RFC2461]  Narten, T., Nordmark, E., and W. Simpson, "Neighbor
           Discovery for IP Version 6 (IPv6)", RFC 2461, December
           1998.

[RFC2474]  Nichols, K., Blake, S., Baker, F., and D. Black,
           "Definition of the Differentiated Services Field (DS
           Field) in the IPv4 and IPv6 Headers", RFC 2474, December
           1998.

[RFC2780]  Bradner, S. and V. Paxson, "IANA Allocation Guidelines For
           Values In the Internet Protocol and Related Headers", BCP
           37, RFC 2780, March 2000.

[RFC2928]  Hinden, R., Deering, S., Fink, R., and T. Hain, "Initial
           IPv6 Sub-TLA ID Assignments", RFC 2928, September 2000.

[RFC3168]  Ramakrishnan, K., Floyd, S., and D. Black, "The Addition
           of Explicit Congestion Notification (ECN) to IP", RFC
           3168, September 2001.

[RFC3330]  IANA, "Special-Use IPv4 Addresses", RFC 3330, September
           2002.

[RFC3692]  Narten, T., "Assigning Experimental and Testing Numbers
           Considered Useful", BCP 82, RFC 3692, January 2004.

[RFC3849]  Huston, G., Lord, A., and P. Smith, "IPv6 Address Prefix
           Reserved for Documentation", RFC 3849, July 2004.

[RFC4193]  Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
           Addresses", RFC 4193, October 2005.

[RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing
           Architecture", RFC 4291, February 2006.

[RFC4302]  Kent, S., "IP Authentication Header", RFC 4302, December
           2005.

[RFC4443]  Conta, A., Deering, S., and M. Gupta, "Internet Control
           Message Protocol (ICMPv6) for the Internet Protocol
           Version 6 (IPv6) Specification", RFC 4443, March 2006.

10.2. Informative References 🌸

[HUSTON05] Huston, G., "Administration of the IANA Special Purpose
           Address Block", Work in Progress, December 2005.

Author's Address πŸŽ€

Bill Fenner
AT&T Labs - Research
75 Willow Rd
Menlo Park, CA  94025
USA

Phone: +1 650 330-7893
EMail: fenner@research.att.com
Copyright (C) The IETF Trust (2006).

This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors
retain all their rights.

This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST,
AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT
THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY
IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
PURPOSE.

Intellectual Property πŸ¦‹

the IETF takes no position on whether any Intellectual Property Rights (or other rights) that someone might claim about the technology in this document are valid or in scope, or whether any license for them is available πŸ€·β€β™€οΈ it also doesn't say it has independently checked for such rights. info on how RFC documents handle rights is in BCP 78 and BCP 79 πŸ“š

IPR disclosures made to the IETF Secretariat, any assurances of licenses, and the results of any attempt to get a general license or permission for implementers or users are available from the IETF's online IPR repository at http://www.ietf.org/ipr πŸ”—

the IETF also invites anyone to bring to its attention any copyrights, patents, patent applications, or other proprietary rights that might cover technology required to implement this standard. send that info to ietf-ipr@ietf.org πŸ“¬

Acknowledgement 🫢

funding for the RFC Editor function is currently provided by the Internet Society πŸ’œ

πŸ“¦ where this page comes from