Keep requirement levels distinct
03The capitalization clarification preserves RFC 2119’s different levels. SHOULD is not a weaker spelling of MUST, and MAY is not a recommendation.
A fictional optional extension may be implemented or omitted. Either choice must still support the applicable interoperability obligations in RFC 2119 §5.
Source for this drawing: RFC 8174 · Read RFC section 2 ↗
New to this? Start hereA quick picture + helpful background
A message needs an address.
Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.
Start with this guide; no earlier guide is needed for the overview.
These pictures are analogies to help you learn. The linked RFC explains the actual rules.
Terms in this drawing
Related RFCs and changes
“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.
Carry the level and its conditions into an implementation decision.
- RFC 2119 §§1–2: MUST/REQUIRED/SHALL is an absolute requirement; MUST NOT/SHALL NOT is an absolute prohibition of the specification.
- RFC 2119 §§3–4: SHOULD/RECOMMENDED and SHOULD NOT/NOT RECOMMENDED allow justified particular exceptions, with the full implications understood and carefully weighed.
- RFC 2119 §5: MAY/OPTIONAL means truly optional. Implementations with and without the option MUST be prepared to interoperate, apart from functionality the option supplies.
The tag, cache policy and extension below are fictional profile examples, not requirements added to any actual protocol. RFC 2119 notes that the force of these terms is modified by the requirement level of the document using them. Its §§6–7 advise careful use and explanation of security implications; RFC 8174 does not redefine the levels.
Read the RFC section ↗