RFC 3692

Assigning Experimental and Testing Numbers Considered Useful

πŸ“… published January 2004, from ietf

RFC 3692: Assigning Experimental and Testing Numbers Considered Useful ✨

Okay bestie, this is RFC 3692 πŸŽ€. It's written by T. Narten from IBM and dated January 2004. The category is Best Current Practice, and it's listed as BCP 82 in the Network Working Group series. It updates RFC 2434, and it doesn't list any documents it obsoletes. The whole vibe is "please stop making experiments impossible to run" πŸ’…


Status of this Memo

This document is an Internet Best Current Practice for the Internet Community 🌸 It also asks people to send in discussion and suggestions for improvements. You can distribute it as much as you want, since distribution is unlimited.

Copyright (C) The Internet Society (2004). All Rights Reserved. πŸ’œ

Abstract

okay so when you're experimenting with or extending a protocol πŸ§ͺ you usually need some kind of protocol number or constant to actually test the new stuff, even if you're only testing in a closed environment. For example, if you're testing a new DHCP option, you need an option number so the new function has an ID ✨

This doc recommends that authors writing IANA Considerations sections think about reserving a small range of numbers for experiments. Implementers can use those numbers when they test protocol extensions or other new features. The doc also reserves some ranges for experimentation in specific protocols where people have already said "yep, we need this" πŸ¦‹

Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
       1.1.  Recommendation for Protocols . . . . . . . . . . . . . .  4
   2.  IANA Considerations. . . . . . . . . . . . . . . . . . . . . .  5
       2.1.  IP Protocol Field. . . . . . . . . . . . . . . . . . . .  5
       2.2.  Existing Name Spaces . . . . . . . . . . . . . . . . . .  5
   3.  Security Considerations. . . . . . . . . . . . . . . . . . . .  5
   4.  Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . .  5
   5.  References . . . . . . . . . . . . . . . . . . . . . . . . . .  5
       5.1.  Normative References . . . . . . . . . . . . . . . . . .  5
       5.2.  Informative References . . . . . . . . . . . . . . . . .  6
   6.  Author's Address . . . . . . . . . . . . . . . . . . . . . . .  6
   7.  Full Copyright Statement . . . . . . . . . . . . . . . . . . .  7

1. Introduction ✨

Okay so when you're experimenting with or extending protocols, you often need a protocol number as part of the implementation [RFC2434]. For example, if you want to build a protocol that runs directly on top of IP, you need an IP Protocol Number to put in the Protocol field of the IP header [RFC791] 🧚

Getting a new number can be super easy πŸ“ For example, a well-known TCP or UDP port is simple to get. Sometimes you don't even need one, like when you're testing with TCP and UDP ports. Other times it's way harder to get a number. Say the number of available, unassigned values in a name space is small. Then people get nervous that all the numbers will vanish if they get handed out carelessly 😭 Even when numbers are plentiful, it might not be a good idea to assign them until the broader community has properly reviewed the proposed usage. So some number spaces say IANA should only assign values when there's strong community support for a proposed protocol. For example, values from some name spaces are only assigned through an "IETF Standards Action" [RFC2434], which requires that the proposed use be in an IETF Standards Track RFC.

Now, if you want to experiment with a new protocol, you might need an experimental value that won't collide with an existing or future usage πŸ”₯

One idea is to let IANA make temporary assignments for this. The value gets assigned so you can experiment, and once the experiment ends, the number goes back to IANA. But this approach has some problems, honestly πŸ’€ First, experience has shown that numbers can be really hard to reclaim once they're assigned. Contact info gets outdated, and it becomes hard to figure out what's going on with an experiment. Second, if the temporarily assigned number actually gets deployed (say it ends up included in a product), it becomes very difficult to tell whether reusing that number would cause adverse impact on deployed devices. Finally, it can be hard to tell when an experiment has ended and whether the number needs to be returned.

The approach this document recommends instead is to assign a range of numbers that's specifically set aside for testing and experimentation 🌈 Devices that have agreed to work together can use these numbers for whatever they want. But everyone understands the numbers are reserved for generic testing purposes, and other implementations may use the same numbers for different experimental uses.

Numbers in the experimentation range are similar to the ones called "Private Use" in RFC 2434 [IANA-CONSIDERATIONS]. They're not meant for general deployments, and they shouldn't be enabled by default in products or other general releases πŸ™…β€β™€οΈ If a product or release does use an experimental number, the end user must be required to explicitly enable the experimental feature. The end user must also have the ability to choose and assign which number from the experimental range gets used for a specific purpose. That way, the end user can make sure that using a particular number doesn't conflict with other ongoing uses. Shipping a product with a specific value already turned on would be inappropriate, and it can cause interoperability problems when that value collides with a different usage, as it someday surely will 😀

So, following from the above, it would be inappropriate for a group of vendors, a consortia, or another Standards Development Organization to agree among themselves to use a particular value for a specific purpose and then agree to deploy devices using those values. By definition, experimental numbers aren't guaranteed to be unique in any environment, except one where the local system administrator has chosen to use a particular number for a particular purpose and can make sure that value isn't already in use for something else 🫢

Once an extension has been tested and shown to be useful, a permanent number can be obtained through the normal assignment procedures ✨

Most implementations won't do anything special with numbers assigned for testing. In particular, unless a packet or other Protocol Data Unit (PDU) is specifically directed at a device, that device won't even look at the field while processing the PDU πŸ‘€ For example, IP routers don't need to examine or understand the Protocol Type field of IP datagrams to know how to forward them correctly. When a packet or PDU is directed at a device that hasn't been configured to recognize the extension, the device will either ignore the PDU, discard it, or signal an error. Which one depends on the protocol-specific rules that say how to process unknown options or features. Some protocols handle unrecognized extensions in different ways (for example, silently discard vs. signal an error). Those protocols need to reserve values for testing purposes from all the appropriate ranges. Only the implementations that are specifically enabled or configured to use an extension or feature being experimented with will process the data further πŸŽ€

1.1. Recommendation for Protocols

So, to make it possible to experiment with protocol extensions safely, protocol documents should consider reserving a small set of protocol numbers for experimentation 🧁 These reservations can be made through an explicit reservation in an IANA Considerations section.

How many values to reserve depends on the specific protocol and on factors specific to that protocol. For example, if a field's values are split into ranges that get treated differently (like "silently ignore" vs. "return an error" when a value isn't understood), one or more values from each sub-range may need to be reserved.

For protocols that return error codes, it may also make sense to reserve a small number of experimental error values. These can be used with possible experimental uses. For instance, an experimental message might result (even under normal conditions) in an error, with a special error code (or sub-code) that indicates the type of error condition πŸ™ˆ

In many, if not most, cases reserving a single value for experimental use will be enough. It can be tempting to reserve more so you can test lots of things at once. But reserving lots of values can also make it more tempting for someone using a particular value to assume that a specific experimental value can be used exclusively for a given purpose. Values reserved for experimental use are never to be made permanent. Permanent assignments should be obtained through standard processes. As described above, experimental numbers are meant for experimentation and testing, and they're not meant for wide or general deployments πŸ’…

When protocols that use experimental numbers are included in products, the shipping versions of those products must disable recognition of protocol experimental numbers by default. In other words, the end user of the product must explicitly "turn on" the experimental protocol functionality ⭐ In most cases, a product implementation must require the end user to configure the value explicitly before enabling its usage. If a product doesn't have a user interface for this kind of end user configuration, the product must require explicit re-programming (for example, a special firmware download, or installing a feature card) to configure the experimental number(s) of the protocol(s) implicitly πŸ”’

5.1. Normative References

okay bestie, these are the docs you need to read first πŸ“šβœ¨ no cap

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

[RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.

5.2. Informative References

these one's just for extra reading if you're curious πŸ§šπŸ’œ

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

6. Author's Address

the person who wrote this, Thomas Narten, from IBM πŸŽ€

Thomas Narten
IBM Corporation
P.O. Box 12195
Research Triangle Park, NC 27709-2195
USA

Phone: +1 919 254 7798
EMail: narten@us.ibm.com

okay this part is legal stuff, so I've kept the wording exactly as it is 🫢

Copyright (C) The Internet Society (2004). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assignees.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS 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.

Acknowledgement

funding for the RFC Editor function is currently coming from the Internet Society, so thank you to them πŸ’–

πŸ“¦ where this page comes from