Table of Contents

RFC 2119 - Key words for use in RFCs to Indicate Requirement Levels

Return to Security-Related RFCs, Network Security, Container Security - Kubernetes Security, Cloud Security, Web Security, DevSecOps

See: 2119 on datatracker.ietf.org

RFC 2119, titled “Key words for use in RFCs to Indicate Requirement Levels”, is a key document that provides guidance on the interpretation of requirement levels in technical standards and documentation. Published by the Internet Engineering Task Force (IETF) in 1997, RFC 2119 establishes a standardized terminology for defining the strength and priority of different requirements in software, network protocols, and system specifications. This RFC is widely used in the creation of technical documents to ensure that the intended meaning of each requirement is clearly understood by all stakeholders involved in the development process.

The primary purpose of RFC 2119 is to clarify the importance and necessity of different operations, behaviors, and features. By establishing clear and unambiguous terms for defining requirement levels, RFC 2119 reduces the likelihood of misinterpretation, ensuring that developers, testers, and implementers understand the criticality of each specified action. This standard is particularly useful in scenarios where compliance with technical requirements is crucial, such as in protocol design, interoperability between systems, or regulatory compliance.

The core contribution of RFC 2119 lies in its definition of specific terms: “MUST,” “MUST NOT,” “SHOULD,” “SHOULD NOT,” and “MAY.” Each of these terms carries a distinct meaning, which indicates the level of obligation or necessity associated with a requirement. For example, “MUST” refers to an absolute requirement, while “SHOULD” implies a recommended best practice that allows some discretion. By using these terms consistently, authors of technical standards can ensure that the intended importance of each requirement is clearly communicated.

The term “MUST” is used to indicate an absolute requirement that must be implemented without exception. This term is reserved for critical operations that are necessary for the proper functioning of a system or protocol. If a requirement is labeled as “MUST” in a specification, it means that any compliant implementation is obligated to include this feature or behavior. Failure to implement a “MUST” requirement would result in non-compliance with the specification, potentially leading to interoperability issues or incorrect system behavior.

Conversely, “MUST NOT” refers to an absolute prohibition. Any action or feature labeled as “MUST NOT” must be avoided, as its implementation could lead to negative consequences, such as system failures or security vulnerabilities. The use of “MUST NOT” in technical standards ensures that certain behaviors are explicitly forbidden, helping to prevent the introduction of problematic or harmful features into the system.

The term “SHOULD” is used to express a strong recommendation, but it allows some flexibility. Requirements marked as “SHOULD” are considered best practices, and implementers are encouraged to follow them whenever possible. However, there may be valid reasons to deviate from “SHOULD” requirements, such as specific operational constraints or alternative design considerations. In such cases, the deviation must be justified, and the overall impact on system functionality should be carefully assessed.

“SHOULD NOT” is the opposite of “SHOULD” and indicates that a particular action is generally not recommended. However, under certain conditions, it may be acceptable to perform this action if there is a compelling reason to do so. Like “SHOULD,” the term “SHOULD NOT” allows for some discretion, but it warns implementers that the action in question could introduce risks or issues if not handled correctly.

The term “MAY” is used to indicate that a feature or action is optional. Requirements labeled as “MAY” provide implementers with the freedom to choose whether or not to include the feature, without any obligation. This flexibility is important in situations where different use cases or environments may benefit from customized implementations. By using “MAY,” RFC 2119 ensures that optional features can be implemented when needed, but are not mandated for compliance.

RFC 2119 has become a widely adopted standard across many technical fields, particularly in the development of Internet protocols, where clarity and precision in requirements are critical for ensuring interoperability. For example, RFC 2616 (the HTTP/1.1 specification) relies heavily on the terminology of RFC 2119 to define the behaviors and operations that must be implemented by compliant HTTP servers and clients. The clear delineation of “MUST,” “SHOULD,” and “MAY” requirements in HTTP specifications ensures that developers understand the essential elements of the protocol while allowing flexibility where appropriate.

The impact of RFC 2119 extends beyond network protocols. It is also commonly used in software engineering, security standards, and hardware design. By applying the terminology of RFC 2119, technical writers can create specifications that are clear, concise, and unambiguous. This is particularly important in large-scale projects involving multiple teams or organizations, where misunderstandings about the importance of certain requirements can lead to costly errors or delays.

RFC 2119 also plays a critical role in testing and validation. When testing a system for compliance with a specification, testers rely on the requirement levels defined by RFC 2119 to prioritize their efforts. For example, testing “MUST” requirements takes precedence over testing “MAY” requirements, as the former are mandatory for compliance. This structured approach to testing ensures that the most critical aspects of the system are validated first, reducing the risk of non-compliance or system failures.

In addition to its use in new specifications, RFC 2119 is frequently referenced in updates to existing standards. As technologies evolve and new versions of protocols or systems are developed, RFC 2119 provides a consistent framework for defining requirement levels in both the original and updated versions of the specification. This ensures continuity and compatibility between different versions, allowing systems to evolve while maintaining compliance with established standards.

The clarity provided by RFC 2119 also helps prevent feature creep and scope changes during the development process. By clearly defining which requirements are mandatory and which are optional, development teams can prioritize their work and avoid unnecessary deviations from the original specification. This leads to more efficient development cycles, as teams can focus on implementing the most important features without getting sidetracked by less critical elements.

As with any technical standard, RFC 2119 is not immune to misinterpretation. In some cases, stakeholders may misinterpret the difference between “SHOULD” and “MUST,” leading to incorrect assumptions about the necessity of certain features. To mitigate this risk, RFC 2119 encourages clear explanations of each requirement level within the specification itself. By providing context and examples, authors can help ensure that readers understand the intended meaning of each term.

While RFC 2119 provides a strong foundation for defining requirement levels, it is often supplemented by other RFCs and standards that offer additional guidance on specific domains or technologies. For example, RFC 8174 clarifies the use of the terms defined in RFC 2119, emphasizing that these terms should be used consistently across all technical specifications to avoid confusion.

Conclusion

RFC 2119 is a foundational document that provides essential guidance for defining requirement levels in technical standards and documentation. By introducing terms such as “MUST,” “MUST NOT,” “SHOULD,” “SHOULD NOT,” and “MAY,” RFC 2119 ensures that the criticality of each requirement is clearly communicated and understood by all stakeholders. Its widespread adoption across network protocols, software engineering, and hardware design demonstrates its importance in ensuring clarity, compliance, and interoperability. RFC 2119 continues to serve as a key reference for creating precise and unambiguous technical specifications, helping teams build systems that meet both mandatory and optional requirements.

GitHub: https://github.com

Network Security: Important Security-Related RFCs, Awesome Network Security (navbar_network_security - see also navbar_security, navbar_networking, navbar_rfc)

Request for Comments (RFC): List of RFCs, GitHub RFCs, Awesome RFCs, (navbar_rfc - see also navbar_network_security, navbar_security, navbar_networking)


Cloud Monk is Retired ( for now). Buddha with you. © 2025 and Beginningless Time - Present Moment - Three Times: The Buddhas or Fair Use. Disclaimers

SYI LU SENG E MU CHYWE YE. NAN. WEI LA YE. WEI LA YE. SA WA HE.