Keep message-local pointers out of new RDATA
02DNS name compression can replace a name with a pointer to its location within one DNS message. Blindly copying such a pointer into another message can change what it points at.
The owner name remains eligible for compression. Separately, receiving well-known RDATA MUST decompress; the listed historical types SHOULD decompress. Neither exception licenses a new type’s embedded name pointer.
Source for this drawing: RFC 3597 · Read RFC section 4 ↗
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.
Helpful first, if these ideas are unfamiliar
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.
Servers MUST NOT compress embedded RDATA names in class-specific or non-well-known types. Here well-known means only types defined in RFC1035.
- Servers MUST NOT compress embedded RDATA names in class-specific or non-well-known types. Here well-known means only types defined in RFC1035.
- Specifications for new RR types containing names MUST NOT allow name compression there and SHOULD explicitly say those embedded names MUST NOT be compressed. Owner names remain eligible for compression.
- Receiving servers MUST decompress well-known types and SHOULD also decompress RP, AFSDB, RT, SIG, PX, NXT, NAPTR and SRV for compatibility with historical senders. Receiving compatibility does not permit new compression.
- RFC3597 changes PX and the historical SIG/NXT compression rules. The later RFC4033/4034/4035 DNSSEC family replaces RFC2535; do not implement the old DNSSEC suite from this example.
Offline bounded examples, not a complete DNS server, master-file parser or DNSSEC validator. Hexadecimal pairs represent octets (eight-bit bytes). Layouts are schematic unless marked otherwise. Generic data transport neither understands an application nor authenticates it.
Read the RFC section ↗