|
|
1.1 root 1: Network Working Group P. Mockapetris
2: Request for Comments: 1035 ISI
3: November 1987
4: Obsoletes: RFCs 882, 883, 973
5:
6: DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
7:
8:
9: 1. STATUS OF THIS MEMO
10:
11: This RFC describes the details of the domain system and protocol, and
12: assumes that the reader is familiar with the concepts discussed in a
13: companion RFC, "Domain Names - Concepts and Facilities" [RFC-1034].
14:
15: The domain system is a mixture of functions and data types which are an
16: official protocol and functions and data types which are still
17: experimental. Since the domain system is intentionally extensible, new
18: data types and experimental behavior should always be expected in parts
19: of the system beyond the official protocol. The official protocol parts
20: include standard queries, responses and the Internet class RR data
21: formats (e.g., host addresses). Since the previous RFC set, several
22: definitions have changed, so some previous definitions are obsolete.
23:
24: Experimental or obsolete features are clearly marked in these RFCs, and
25: such information should be used with caution.
26:
27: The reader is especially cautioned not to depend on the values which
28: appear in examples to be current or complete, since their purpose is
29: primarily pedagogical. Distribution of this memo is unlimited.
30:
31: Table of Contents
32:
33: 1. STATUS OF THIS MEMO 1
34: 2. INTRODUCTION 3
35: 2.1. Overview 3
36: 2.2. Common configurations 4
37: 2.3. Conventions 7
38: 2.3.1. Preferred name syntax 7
39: 2.3.2. Data Transmission Order 8
40: 2.3.3. Character Case 9
41: 2.3.4. Size limits 10
42: 3. DOMAIN NAME SPACE AND RR DEFINITIONS 10
43: 3.1. Name space definitions 10
44: 3.2. RR definitions 11
45: 3.2.1. Format 11
46: 3.2.2. TYPE values 12
47: 3.2.3. QTYPE values 12
48: 3.2.4. CLASS values 13
49:
50:
51:
52: Mockapetris [Page 1]
53:
54: RFC 1035 Domain Implementation and Specification November 1987
55:
56:
57: 3.2.5. QCLASS values 13
58: 3.3. Standard RRs 13
59: 3.3.1. CNAME RDATA format 14
60: 3.3.2. HINFO RDATA format 14
61: 3.3.3. MB RDATA format (EXPERIMENTAL) 14
62: 3.3.4. MD RDATA format (Obsolete) 15
63: 3.3.5. MF RDATA format (Obsolete) 15
64: 3.3.6. MG RDATA format (EXPERIMENTAL) 16
65: 3.3.7. MINFO RDATA format (EXPERIMENTAL) 16
66: 3.3.8. MR RDATA format (EXPERIMENTAL) 17
67: 3.3.9. MX RDATA format 17
68: 3.3.10. NULL RDATA format (EXPERIMENTAL) 17
69: 3.3.11. NS RDATA format 18
70: 3.3.12. PTR RDATA format 18
71: 3.3.13. SOA RDATA format 19
72: 3.3.14. TXT RDATA format 20
73: 3.4. ARPA Internet specific RRs 20
74: 3.4.1. A RDATA format 20
75: 3.4.2. WKS RDATA format 21
76: 3.5. IN-ADDR.ARPA domain 22
77: 3.6. Defining new types, classes, and special namespaces 24
78: 4. MESSAGES 25
79: 4.1. Format 25
80: 4.1.1. Header section format 26
81: 4.1.2. Question section format 28
82: 4.1.3. Resource record format 29
83: 4.1.4. Message compression 30
84: 4.2. Transport 32
85: 4.2.1. UDP usage 32
86: 4.2.2. TCP usage 32
87: 5. MASTER FILES 33
88: 5.1. Format 33
89: 5.2. Use of master files to define zones 35
90: 5.3. Master file example 36
91: 6. NAME SERVER IMPLEMENTATION 37
92: 6.1. Architecture 37
93: 6.1.1. Control 37
94: 6.1.2. Database 37
95: 6.1.3. Time 39
96: 6.2. Standard query processing 39
97: 6.3. Zone refresh and reload processing 39
98: 6.4. Inverse queries (Optional) 40
99: 6.4.1. The contents of inverse queries and responses 40
100: 6.4.2. Inverse query and response example 41
101: 6.4.3. Inverse query processing 42
102:
103:
104:
105:
106:
107:
108: Mockapetris [Page 2]
109:
110: RFC 1035 Domain Implementation and Specification November 1987
111:
112:
113: 6.5. Completion queries and responses 42
114: 7. RESOLVER IMPLEMENTATION 43
115: 7.1. Transforming a user request into a query 43
116: 7.2. Sending the queries 44
117: 7.3. Processing responses 46
118: 7.4. Using the cache 47
119: 8. MAIL SUPPORT 47
120: 8.1. Mail exchange binding 48
121: 8.2. Mailbox binding (Experimental) 48
122: 9. REFERENCES and BIBLIOGRAPHY 50
123: Index 54
124:
125: 2. INTRODUCTION
126:
127: 2.1. Overview
128:
129: The goal of domain names is to provide a mechanism for naming resources
130: in such a way that the names are usable in different hosts, networks,
131: protocol families, internets, and administrative organizations.
132:
133: From the user's point of view, domain names are useful as arguments to a
134: local agent, called a resolver, which retrieves information associated
135: with the domain name. Thus a user might ask for the host address or
136: mail information associated with a particular domain name. To enable
137: the user to request a particular type of information, an appropriate
138: query type is passed to the resolver with the domain name. To the user,
139: the domain tree is a single information space; the resolver is
140: responsible for hiding the distribution of data among name servers from
141: the user.
142:
143: From the resolver's point of view, the database that makes up the domain
144: space is distributed among various name servers. Different parts of the
145: domain space are stored in different name servers, although a particular
146: data item will be stored redundantly in two or more name servers. The
147: resolver starts with knowledge of at least one name server. When the
148: resolver processes a user query it asks a known name server for the
149: information; in return, the resolver either receives the desired
150: information or a referral to another name server. Using these
151: referrals, resolvers learn the identities and contents of other name
152: servers. Resolvers are responsible for dealing with the distribution of
153: the domain space and dealing with the effects of name server failure by
154: consulting redundant databases in other servers.
155:
156: Name servers manage two kinds of data. The first kind of data held in
157: sets called zones; each zone is the complete database for a particular
158: "pruned" subtree of the domain space. This data is called
159: authoritative. A name server periodically checks to make sure that its
160: zones are up to date, and if not, obtains a new copy of updated zones
161:
162:
163:
164: Mockapetris [Page 3]
165:
166: RFC 1035 Domain Implementation and Specification November 1987
167:
168:
169: from master files stored locally or in another name server. The second
170: kind of data is cached data which was acquired by a local resolver.
171: This data may be incomplete, but improves the performance of the
172: retrieval process when non-local data is repeatedly accessed. Cached
173: data is eventually discarded by a timeout mechanism.
174:
175: This functional structure isolates the problems of user interface,
176: failure recovery, and distribution in the resolvers and isolates the
177: database update and refresh problems in the name servers.
178:
179: 2.2. Common configurations
180:
181: A host can participate in the domain name system in a number of ways,
182: depending on whether the host runs programs that retrieve information
183: from the domain system, name servers that answer queries from other
184: hosts, or various combinations of both functions. The simplest, and
185: perhaps most typical, configuration is shown below:
186:
187: Local Host | Foreign
188: |
189: +---------+ +----------+ | +--------+
190: | | user queries | |queries | | |
191: | User |-------------->| |---------|->|Foreign |
192: | Program | | Resolver | | | Name |
193: | |<--------------| |<--------|--| Server |
194: | | user responses| |responses| | |
195: +---------+ +----------+ | +--------+
196: | A |
197: cache additions | | references |
198: V | |
199: +----------+ |
200: | cache | |
201: +----------+ |
202:
203: User programs interact with the domain name space through resolvers; the
204: format of user queries and user responses is specific to the host and
205: its operating system. User queries will typically be operating system
206: calls, and the resolver and its cache will be part of the host operating
207: system. Less capable hosts may choose to implement the resolver as a
208: subroutine to be linked in with every program that needs its services.
209: Resolvers answer user queries with information they acquire via queries
210: to foreign name servers and the local cache.
211:
212: Note that the resolver may have to make several queries to several
213: different foreign name servers to answer a particular user query, and
214: hence the resolution of a user query may involve several network
215: accesses and an arbitrary amount of time. The queries to foreign name
216: servers and the corresponding responses have a standard format described
217:
218:
219:
220: Mockapetris [Page 4]
221:
222: RFC 1035 Domain Implementation and Specification November 1987
223:
224:
225: in this memo, and may be datagrams.
226:
227: Depending on its capabilities, a name server could be a stand alone
228: program on a dedicated machine or a process or processes on a large
229: timeshared host. A simple configuration might be:
230:
231: Local Host | Foreign
232: |
233: +---------+ |
234: / /| |
235: +---------+ | +----------+ | +--------+
236: | | | | |responses| | |
237: | | | | Name |---------|->|Foreign |
238: | Master |-------------->| Server | | |Resolver|
239: | files | | | |<--------|--| |
240: | |/ | | queries | +--------+
241: +---------+ +----------+ |
242:
243: Here a primary name server acquires information about one or more zones
244: by reading master files from its local file system, and answers queries
245: about those zones that arrive from foreign resolvers.
246:
247: The DNS requires that all zones be redundantly supported by more than
248: one name server. Designated secondary servers can acquire zones and
249: check for updates from the primary server using the zone transfer
250: protocol of the DNS. This configuration is shown below:
251:
252: Local Host | Foreign
253: |
254: +---------+ |
255: / /| |
256: +---------+ | +----------+ | +--------+
257: | | | | |responses| | |
258: | | | | Name |---------|->|Foreign |
259: | Master |-------------->| Server | | |Resolver|
260: | files | | | |<--------|--| |
261: | |/ | | queries | +--------+
262: +---------+ +----------+ |
263: A |maintenance | +--------+
264: | +------------|->| |
265: | queries | |Foreign |
266: | | | Name |
267: +------------------|--| Server |
268: maintenance responses | +--------+
269:
270: In this configuration, the name server periodically establishes a
271: virtual circuit to a foreign name server to acquire a copy of a zone or
272: to check that an existing copy has not changed. The messages sent for
273:
274:
275:
276: Mockapetris [Page 5]
277:
278: RFC 1035 Domain Implementation and Specification November 1987
279:
280:
281: these maintenance activities follow the same form as queries and
282: responses, but the message sequences are somewhat different.
283:
284: The information flow in a host that supports all aspects of the domain
285: name system is shown below:
286:
287: Local Host | Foreign
288: |
289: +---------+ +----------+ | +--------+
290: | | user queries | |queries | | |
291: | User |-------------->| |---------|->|Foreign |
292: | Program | | Resolver | | | Name |
293: | |<--------------| |<--------|--| Server |
294: | | user responses| |responses| | |
295: +---------+ +----------+ | +--------+
296: | A |
297: cache additions | | references |
298: V | |
299: +----------+ |
300: | Shared | |
301: | database | |
302: +----------+ |
303: A | |
304: +---------+ refreshes | | references |
305: / /| | V |
306: +---------+ | +----------+ | +--------+
307: | | | | |responses| | |
308: | | | | Name |---------|->|Foreign |
309: | Master |-------------->| Server | | |Resolver|
310: | files | | | |<--------|--| |
311: | |/ | | queries | +--------+
312: +---------+ +----------+ |
313: A |maintenance | +--------+
314: | +------------|->| |
315: | queries | |Foreign |
316: | | | Name |
317: +------------------|--| Server |
318: maintenance responses | +--------+
319:
320: The shared database holds domain space data for the local name server
321: and resolver. The contents of the shared database will typically be a
322: mixture of authoritative data maintained by the periodic refresh
323: operations of the name server and cached data from previous resolver
324: requests. The structure of the domain data and the necessity for
325: synchronization between name servers and resolvers imply the general
326: characteristics of this database, but the actual format is up to the
327: local implementor.
328:
329:
330:
331:
332: Mockapetris [Page 6]
333:
334: RFC 1035 Domain Implementation and Specification November 1987
335:
336:
337: Information flow can also be tailored so that a group of hosts act
338: together to optimize activities. Sometimes this is done to offload less
339: capable hosts so that they do not have to implement a full resolver.
340: This can be appropriate for PCs or hosts which want to minimize the
341: amount of new network code which is required. This scheme can also
342: allow a group of hosts can share a small number of caches rather than
343: maintaining a large number of separate caches, on the premise that the
344: centralized caches will have a higher hit ratio. In either case,
345: resolvers are replaced with stub resolvers which act as front ends to
346: resolvers located in a recursive server in one or more name servers
347: known to perform that service:
348:
349: Local Hosts | Foreign
350: |
351: +---------+ |
352: | | responses |
353: | Stub |<--------------------+ |
354: | Resolver| | |
355: | |----------------+ | |
356: +---------+ recursive | | |
357: queries | | |
358: V | |
359: +---------+ recursive +----------+ | +--------+
360: | | queries | |queries | | |
361: | Stub |-------------->| Recursive|---------|->|Foreign |
362: | Resolver| | Server | | | Name |
363: | |<--------------| |<--------|--| Server |
364: +---------+ responses | |responses| | |
365: +----------+ | +--------+
366: | Central | |
367: | cache | |
368: +----------+ |
369:
370: In any case, note that domain components are always replicated for
371: reliability whenever possible.
372:
373: 2.3. Conventions
374:
375: The domain system has several conventions dealing with low-level, but
376: fundamental, issues. While the implementor is free to violate these
377: conventions WITHIN HIS OWN SYSTEM, he must observe these conventions in
378: ALL behavior observed from other hosts.
379:
380: 2.3.1. Preferred name syntax
381:
382: The DNS specifications attempt to be as general as possible in the rules
383: for constructing domain names. The idea is that the name of any
384: existing object can be expressed as a domain name with minimal changes.
385:
386:
387:
388: Mockapetris [Page 7]
389:
390: RFC 1035 Domain Implementation and Specification November 1987
391:
392:
393: However, when assigning a domain name for an object, the prudent user
394: will select a name which satisfies both the rules of the domain system
395: and any existing rules for the object, whether these rules are published
396: or implied by existing programs.
397:
398: For example, when naming a mail domain, the user should satisfy both the
399: rules of this memo and those in RFC-822. When creating a new host name,
400: the old rules for HOSTS.TXT should be followed. This avoids problems
401: when old software is converted to use domain names.
402:
403: The following syntax will result in fewer problems with many
404:
405: applications that use domain names (e.g., mail, TELNET).
406:
407: <domain> ::= <subdomain> | " "
408:
409: <subdomain> ::= <label> | <subdomain> "." <label>
410:
411: <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
412:
413: <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
414:
415: <let-dig-hyp> ::= <let-dig> | "-"
416:
417: <let-dig> ::= <letter> | <digit>
418:
419: <letter> ::= any one of the 52 alphabetic characters A through Z in
420: upper case and a through z in lower case
421:
422: <digit> ::= any one of the ten digits 0 through 9
423:
424: Note that while upper and lower case letters are allowed in domain
425: names, no significance is attached to the case. That is, two names with
426: the same spelling but different case are to be treated as if identical.
427:
428: The labels must follow the rules for ARPANET host names. They must
429: start with a letter, end with a letter or digit, and have as interior
430: characters only letters, digits, and hyphen. There are also some
431: restrictions on the length. Labels must be 63 characters or less.
432:
433: For example, the following strings identify hosts in the Internet:
434:
435: A.ISI.EDU XX.LCS.MIT.EDU SRI-NIC.ARPA
436:
437: 2.3.2. Data Transmission Order
438:
439: The order of transmission of the header and data described in this
440: document is resolved to the octet level. Whenever a diagram shows a
441:
442:
443:
444: Mockapetris [Page 8]
445:
446: RFC 1035 Domain Implementation and Specification November 1987
447:
448:
449: group of octets, the order of transmission of those octets is the normal
450: order in which they are read in English. For example, in the following
451: diagram, the octets are transmitted in the order they are numbered.
452:
453: 0 1
454: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
455: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
456: | 1 | 2 |
457: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
458: | 3 | 4 |
459: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
460: | 5 | 6 |
461: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
462:
463: Whenever an octet represents a numeric quantity, the left most bit in
464: the diagram is the high order or most significant bit. That is, the bit
465: labeled 0 is the most significant bit. For example, the following
466: diagram represents the value 170 (decimal).
467:
468: 0 1 2 3 4 5 6 7
469: +-+-+-+-+-+-+-+-+
470: |1 0 1 0 1 0 1 0|
471: +-+-+-+-+-+-+-+-+
472:
473: Similarly, whenever a multi-octet field represents a numeric quantity
474: the left most bit of the whole field is the most significant bit. When
475: a multi-octet quantity is transmitted the most significant octet is
476: transmitted first.
477:
478: 2.3.3. Character Case
479:
480: For all parts of the DNS that are part of the official protocol, all
481: comparisons between character strings (e.g., labels, domain names, etc.)
482: are done in a case-insensitive manner. At present, this rule is in
483: force throughout the domain system without exception. However, future
484: additions beyond current usage may need to use the full binary octet
485: capabilities in names, so attempts to store domain names in 7-bit ASCII
486: or use of special bytes to terminate labels, etc., should be avoided.
487:
488: When data enters the domain system, its original case should be
489: preserved whenever possible. In certain circumstances this cannot be
490: done. For example, if two RRs are stored in a database, one at x.y and
491: one at X.Y, they are actually stored at the same place in the database,
492: and hence only one casing would be preserved. The basic rule is that
493: case can be discarded only when data is used to define structure in a
494: database, and two names are identical when compared in a case
495: insensitive manner.
496:
497:
498:
499:
500: Mockapetris [Page 9]
501:
502: RFC 1035 Domain Implementation and Specification November 1987
503:
504:
505: Loss of case sensitive data must be minimized. Thus while data for x.y
506: and X.Y may both be stored under a single location x.y or X.Y, data for
507: a.x and B.X would never be stored under A.x, A.X, b.x, or b.X. In
508: general, this preserves the case of the first label of a domain name,
509: but forces standardization of interior node labels.
510:
511: Systems administrators who enter data into the domain database should
512: take care to represent the data they supply to the domain system in a
513: case-consistent manner if their system is case-sensitive. The data
514: distribution system in the domain system will ensure that consistent
515: representations are preserved.
516:
517: 2.3.4. Size limits
518:
519: Various objects and parameters in the DNS have size limits. They are
520: listed below. Some could be easily changed, others are more
521: fundamental.
522:
523: labels 63 octets or less
524:
525: names 255 octets or less
526:
527: TTL positive values of a signed 32 bit number.
528:
529: UDP messages 512 octets or less
530:
531: 3. DOMAIN NAME SPACE AND RR DEFINITIONS
532:
533: 3.1. Name space definitions
534:
535: Domain names in messages are expressed in terms of a sequence of labels.
536: Each label is represented as a one octet length field followed by that
537: number of octets. Since every domain name ends with the null label of
538: the root, a domain name is terminated by a length byte of zero. The
539: high order two bits of every length octet must be zero, and the
540: remaining six bits of the length field limit the label to 63 octets or
541: less.
542:
543: To simplify implementations, the total length of a domain name (i.e.,
544: label octets and label length octets) is restricted to 255 octets or
545: less.
546:
547: Although labels can contain any 8 bit values in octets that make up a
548: label, it is strongly recommended that labels follow the preferred
549: syntax described elsewhere in this memo, which is compatible with
550: existing host naming conventions. Name servers and resolvers must
551: compare labels in a case-insensitive manner (i.e., A=a), assuming ASCII
552: with zero parity. Non-alphabetic codes must match exactly.
553:
554:
555:
556: Mockapetris [Page 10]
557:
558: RFC 1035 Domain Implementation and Specification November 1987
559:
560:
561: 3.2. RR definitions
562:
563: 3.2.1. Format
564:
565: All RRs have the same top level format shown below:
566:
567: 1 1 1 1 1 1
568: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
569: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
570: | |
571: / /
572: / NAME /
573: | |
574: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
575: | TYPE |
576: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
577: | CLASS |
578: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
579: | TTL |
580: | |
581: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
582: | RDLENGTH |
583: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
584: / RDATA /
585: / /
586: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
587:
588:
589: where:
590:
591: NAME an owner name, i.e., the name of the node to which this
592: resource record pertains.
593:
594: TYPE two octets containing one of the RR TYPE codes.
595:
596: CLASS two octets containing one of the RR CLASS codes.
597:
598: TTL a 32 bit signed integer that specifies the time interval
599: that the resource record may be cached before the source
600: of the information should again be consulted. Zero
601: values are interpreted to mean that the RR can only be
602: used for the transaction in progress, and should not be
603: cached. For example, SOA records are always distributed
604: with a zero TTL to prohibit caching. Zero values can
605: also be used for extremely volatile data.
606:
607: RDLENGTH an unsigned 16 bit integer that specifies the length in
608: octets of the RDATA field.
609:
610:
611:
612: Mockapetris [Page 11]
613:
614: RFC 1035 Domain Implementation and Specification November 1987
615:
616:
617: RDATA a variable length string of octets that describes the
618: resource. The format of this information varies
619: according to the TYPE and CLASS of the resource record.
620:
621: 3.2.2. TYPE values
622:
623: TYPE fields are used in resource records. Note that these types are a
624: subset of QTYPEs.
625:
626: TYPE value and meaning
627:
628: A 1 a host address
629:
630: NS 2 an authoritative name server
631:
632: MD 3 a mail destination (Obsolete - use MX)
633:
634: MF 4 a mail forwarder (Obsolete - use MX)
635:
636: CNAME 5 the canonical name for an alias
637:
638: SOA 6 marks the start of a zone of authority
639:
640: MB 7 a mailbox domain name (EXPERIMENTAL)
641:
642: MG 8 a mail group member (EXPERIMENTAL)
643:
644: MR 9 a mail rename domain name (EXPERIMENTAL)
645:
646: NULL 10 a null RR (EXPERIMENTAL)
647:
648: WKS 11 a well known service description
649:
650: PTR 12 a domain name pointer
651:
652: HINFO 13 host information
653:
654: MINFO 14 mailbox or mail list information
655:
656: MX 15 mail exchange
657:
658: TXT 16 text strings
659:
660: 3.2.3. QTYPE values
661:
662: QTYPE fields appear in the question part of a query. QTYPES are a
663: superset of TYPEs, hence all TYPEs are valid QTYPEs. In addition, the
664: following QTYPEs are defined:
665:
666:
667:
668: Mockapetris [Page 12]
669:
670: RFC 1035 Domain Implementation and Specification November 1987
671:
672:
673: AXFR 252 A request for a transfer of an entire zone
674:
675: MAILB 253 A request for mailbox-related records (MB, MG or MR)
676:
677: MAILA 254 A request for mail agent RRs (Obsolete - see MX)
678:
679: * 255 A request for all records
680:
681: 3.2.4. CLASS values
682:
683: CLASS fields appear in resource records. The following CLASS mnemonics
684: and values are defined:
685:
686: IN 1 the Internet
687:
688: CS 2 the CSNET class (Obsolete - used only for examples in
689: some obsolete RFCs)
690:
691: CH 3 the CHAOS class
692:
693: HS 4 Hesiod [Dyer 87]
694:
695: 3.2.5. QCLASS values
696:
697: QCLASS fields appear in the question section of a query. QCLASS values
698: are a superset of CLASS values; every CLASS is a valid QCLASS. In
699: addition to CLASS values, the following QCLASSes are defined:
700:
701: * 255 any class
702:
703: 3.3. Standard RRs
704:
705: The following RR definitions are expected to occur, at least
706: potentially, in all classes. In particular, NS, SOA, CNAME, and PTR
707: will be used in all classes, and have the same format in all classes.
708: Because their RDATA format is known, all domain names in the RDATA
709: section of these RRs may be compressed.
710:
711: <domain-name> is a domain name represented as a series of labels, and
712: terminated by a label with zero length. <character-string> is a single
713: length octet followed by that number of characters. <character-string>
714: is treated as binary information, and can be up to 256 characters in
715: length (including the length octet).
716:
717:
718:
719:
720:
721:
722:
723:
724: Mockapetris [Page 13]
725:
726: RFC 1035 Domain Implementation and Specification November 1987
727:
728:
729: 3.3.1. CNAME RDATA format
730:
731: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
732: / CNAME /
733: / /
734: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
735:
736: where:
737:
738: CNAME A <domain-name> which specifies the canonical or primary
739: name for the owner. The owner name is an alias.
740:
741: CNAME RRs cause no additional section processing, but name servers may
742: choose to restart the query at the canonical name in certain cases. See
743: the description of name server logic in [RFC-1034] for details.
744:
745: 3.3.2. HINFO RDATA format
746:
747: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
748: / CPU /
749: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
750: / OS /
751: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
752:
753: where:
754:
755: CPU A <character-string> which specifies the CPU type.
756:
757: OS A <character-string> which specifies the operating
758: system type.
759:
760: Standard values for CPU and OS can be found in [RFC-1010].
761:
762: HINFO records are used to acquire general information about a host. The
763: main use is for protocols such as FTP that can use special procedures
764: when talking between machines or operating systems of the same type.
765:
766: 3.3.3. MB RDATA format (EXPERIMENTAL)
767:
768: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
769: / MADNAME /
770: / /
771: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
772:
773: where:
774:
775: MADNAME A <domain-name> which specifies a host which has the
776: specified mailbox.
777:
778:
779:
780: Mockapetris [Page 14]
781:
782: RFC 1035 Domain Implementation and Specification November 1987
783:
784:
785: MB records cause additional section processing which looks up an A type
786: RRs corresponding to MADNAME.
787:
788: 3.3.4. MD RDATA format (Obsolete)
789:
790: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
791: / MADNAME /
792: / /
793: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
794:
795: where:
796:
797: MADNAME A <domain-name> which specifies a host which has a mail
798: agent for the domain which should be able to deliver
799: mail for the domain.
800:
801: MD records cause additional section processing which looks up an A type
802: record corresponding to MADNAME.
803:
804: MD is obsolete. See the definition of MX and [RFC-974] for details of
805: the new scheme. The recommended policy for dealing with MD RRs found in
806: a master file is to reject them, or to convert them to MX RRs with a
807: preference of 0.
808:
809: 3.3.5. MF RDATA format (Obsolete)
810:
811: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
812: / MADNAME /
813: / /
814: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
815:
816: where:
817:
818: MADNAME A <domain-name> which specifies a host which has a mail
819: agent for the domain which will accept mail for
820: forwarding to the domain.
821:
822: MF records cause additional section processing which looks up an A type
823: record corresponding to MADNAME.
824:
825: MF is obsolete. See the definition of MX and [RFC-974] for details ofw
826: the new scheme. The recommended policy for dealing with MD RRs found in
827: a master file is to reject them, or to convert them to MX RRs with a
828: preference of 10.
829:
830:
831:
832:
833:
834:
835:
836: Mockapetris [Page 15]
837:
838: RFC 1035 Domain Implementation and Specification November 1987
839:
840:
841: 3.3.6. MG RDATA format (EXPERIMENTAL)
842:
843: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
844: / MGMNAME /
845: / /
846: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
847:
848: where:
849:
850: MGMNAME A <domain-name> which specifies a mailbox which is a
851: member of the mail group specified by the domain name.
852:
853: MG records cause no additional section processing.
854:
855: 3.3.7. MINFO RDATA format (EXPERIMENTAL)
856:
857: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
858: / RMAILBX /
859: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
860: / EMAILBX /
861: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
862:
863: where:
864:
865: RMAILBX A <domain-name> which specifies a mailbox which is
866: responsible for the mailing list or mailbox. If this
867: domain name names the root, the owner of the MINFO RR is
868: responsible for itself. Note that many existing mailing
869: lists use a mailbox X-request for the RMAILBX field of
870: mailing list X, e.g., Msgroup-request for Msgroup. This
871: field provides a more general mechanism.
872:
873:
874: EMAILBX A <domain-name> which specifies a mailbox which is to
875: receive error messages related to the mailing list or
876: mailbox specified by the owner of the MINFO RR (similar
877: to the ERRORS-TO: field which has been proposed). If
878: this domain name names the root, errors should be
879: returned to the sender of the message.
880:
881: MINFO records cause no additional section processing. Although these
882: records can be associated with a simple mailbox, they are usually used
883: with a mailing list.
884:
885:
886:
887:
888:
889:
890:
891:
892: Mockapetris [Page 16]
893:
894: RFC 1035 Domain Implementation and Specification November 1987
895:
896:
897: 3.3.8. MR RDATA format (EXPERIMENTAL)
898:
899: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
900: / NEWNAME /
901: / /
902: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
903:
904: where:
905:
906: NEWNAME A <domain-name> which specifies a mailbox which is the
907: proper rename of the specified mailbox.
908:
909: MR records cause no additional section processing. The main use for MR
910: is as a forwarding entry for a user who has moved to a different
911: mailbox.
912:
913: 3.3.9. MX RDATA format
914:
915: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
916: | PREFERENCE |
917: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
918: / EXCHANGE /
919: / /
920: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
921:
922: where:
923:
924: PREFERENCE A 16 bit integer which specifies the preference given to
925: this RR among others at the same owner. Lower values
926: are preferred.
927:
928: EXCHANGE A <domain-name> which specifies a host willing to act as
929: a mail exchange for the owner name.
930:
931: MX records cause type A additional section processing for the host
932: specified by EXCHANGE. The use of MX RRs is explained in detail in
933: [RFC-974].
934:
935: 3.3.10. NULL RDATA format (EXPERIMENTAL)
936:
937: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
938: / <anything> /
939: / /
940: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
941:
942: Anything at all may be in the RDATA field so long as it is 65535 octets
943: or less.
944:
945:
946:
947:
948: Mockapetris [Page 17]
949:
950: RFC 1035 Domain Implementation and Specification November 1987
951:
952:
953: NULL records cause no additional section processing. NULL RRs are not
954: allowed in master files. NULLs are used as placeholders in some
955: experimental extensions of the DNS.
956:
957: 3.3.11. NS RDATA format
958:
959: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
960: / NSDNAME /
961: / /
962: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
963:
964: where:
965:
966: NSDNAME A <domain-name> which specifies a host which should be
967: authoritative for the specified class and domain.
968:
969: NS records cause both the usual additional section processing to locate
970: a type A record, and, when used in a referral, a special search of the
971: zone in which they reside for glue information.
972:
973: The NS RR states that the named host should be expected to have a zone
974: starting at owner name of the specified class. Note that the class may
975: not indicate the protocol family which should be used to communicate
976: with the host, although it is typically a strong hint. For example,
977: hosts which are name servers for either Internet (IN) or Hesiod (HS)
978: class information are normally queried using IN class protocols.
979:
980: 3.3.12. PTR RDATA format
981:
982: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
983: / PTRDNAME /
984: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
985:
986: where:
987:
988: PTRDNAME A <domain-name> which points to some location in the
989: domain name space.
990:
991: PTR records cause no additional section processing. These RRs are used
992: in special domains to point to some other location in the domain space.
993: These records are simple data, and don't imply any special processing
994: similar to that performed by CNAME, which identifies aliases. See the
995: description of the IN-ADDR.ARPA domain for an example.
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004: Mockapetris [Page 18]
1005:
1006: RFC 1035 Domain Implementation and Specification November 1987
1007:
1008:
1009: 3.3.13. SOA RDATA format
1010:
1011: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1012: / MNAME /
1013: / /
1014: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1015: / RNAME /
1016: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1017: | SERIAL |
1018: | |
1019: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1020: | REFRESH |
1021: | |
1022: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1023: | RETRY |
1024: | |
1025: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1026: | EXPIRE |
1027: | |
1028: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1029: | MINIMUM |
1030: | |
1031: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1032:
1033: where:
1034:
1035: MNAME The <domain-name> of the name server that was the
1036: original or primary source of data for this zone.
1037:
1038: RNAME A <domain-name> which specifies the mailbox of the
1039: person responsible for this zone.
1040:
1041: SERIAL The unsigned 32 bit version number of the original copy
1042: of the zone. Zone transfers preserve this value. This
1043: value wraps and should be compared using sequence space
1044: arithmetic.
1045:
1046: REFRESH A 32 bit time interval before the zone should be
1047: refreshed.
1048:
1049: RETRY A 32 bit time interval that should elapse before a
1050: failed refresh should be retried.
1051:
1052: EXPIRE A 32 bit time value that specifies the upper limit on
1053: the time interval that can elapse before the zone is no
1054: longer authoritative.
1055:
1056:
1057:
1058:
1059:
1060: Mockapetris [Page 19]
1061:
1062: RFC 1035 Domain Implementation and Specification November 1987
1063:
1064:
1065: MINIMUM The unsigned 32 bit minimum TTL field that should be
1066: exported with any RR from this zone.
1067:
1068: SOA records cause no additional section processing.
1069:
1070: All times are in units of seconds.
1071:
1072: Most of these fields are pertinent only for name server maintenance
1073: operations. However, MINIMUM is used in all query operations that
1074: retrieve RRs from a zone. Whenever a RR is sent in a response to a
1075: query, the TTL field is set to the maximum of the TTL field from the RR
1076: and the MINIMUM field in the appropriate SOA. Thus MINIMUM is a lower
1077: bound on the TTL field for all RRs in a zone. Note that this use of
1078: MINIMUM should occur when the RRs are copied into the response and not
1079: when the zone is loaded from a master file or via a zone transfer. The
1080: reason for this provison is to allow future dynamic update facilities to
1081: change the SOA RR with known semantics.
1082:
1083:
1084: 3.3.14. TXT RDATA format
1085:
1086: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1087: / TXT-DATA /
1088: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1089:
1090: where:
1091:
1092: TXT-DATA One or more <character-string>s.
1093:
1094: TXT RRs are used to hold descriptive text. The semantics of the text
1095: depends on the domain where it is found.
1096:
1097: 3.4. Internet specific RRs
1098:
1099: 3.4.1. A RDATA format
1100:
1101: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1102: | ADDRESS |
1103: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1104:
1105: where:
1106:
1107: ADDRESS A 32 bit Internet address.
1108:
1109: Hosts that have multiple Internet addresses will have multiple A
1110: records.
1111:
1112:
1113:
1114:
1115:
1116: Mockapetris [Page 20]
1117:
1118: RFC 1035 Domain Implementation and Specification November 1987
1119:
1120:
1121: A records cause no additional section processing. The RDATA section of
1122: an A line in a master file is an Internet address expressed as four
1123: decimal numbers separated by dots without any imbedded spaces (e.g.,
1124: "10.2.0.52" or "192.0.5.6").
1125:
1126: 3.4.2. WKS RDATA format
1127:
1128: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1129: | ADDRESS |
1130: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1131: | PROTOCOL | |
1132: +--+--+--+--+--+--+--+--+ |
1133: | |
1134: / <BIT MAP> /
1135: / /
1136: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1137:
1138: where:
1139:
1140: ADDRESS An 32 bit Internet address
1141:
1142: PROTOCOL An 8 bit IP protocol number
1143:
1144: <BIT MAP> A variable length bit map. The bit map must be a
1145: multiple of 8 bits long.
1146:
1147: The WKS record is used to describe the well known services supported by
1148: a particular protocol on a particular internet address. The PROTOCOL
1149: field specifies an IP protocol number, and the bit map has one bit per
1150: port of the specified protocol. The first bit corresponds to port 0,
1151: the second to port 1, etc. If the bit map does not include a bit for a
1152: protocol of interest, that bit is assumed zero. The appropriate values
1153: and mnemonics for ports and protocols are specified in [RFC-1010].
1154:
1155: For example, if PROTOCOL=TCP (6), the 26th bit corresponds to TCP port
1156: 25 (SMTP). If this bit is set, a SMTP server should be listening on TCP
1157: port 25; if zero, SMTP service is not supported on the specified
1158: address.
1159:
1160: The purpose of WKS RRs is to provide availability information for
1161: servers for TCP and UDP. If a server supports both TCP and UDP, or has
1162: multiple Internet addresses, then multiple WKS RRs are used.
1163:
1164: WKS RRs cause no additional section processing.
1165:
1166: In master files, both ports and protocols are expressed using mnemonics
1167: or decimal numbers.
1168:
1169:
1170:
1171:
1172: Mockapetris [Page 21]
1173:
1174: RFC 1035 Domain Implementation and Specification November 1987
1175:
1176:
1177: 3.5. IN-ADDR.ARPA domain
1178:
1179: The Internet uses a special domain to support gateway location and
1180: Internet address to host mapping. Other classes may employ a similar
1181: strategy in other domains. The intent of this domain is to provide a
1182: guaranteed method to perform host address to host name mapping, and to
1183: facilitate queries to locate all gateways on a particular network in the
1184: Internet.
1185:
1186: Note that both of these services are similar to functions that could be
1187: performed by inverse queries; the difference is that this part of the
1188: domain name space is structured according to address, and hence can
1189: guarantee that the appropriate data can be located without an exhaustive
1190: search of the domain space.
1191:
1192: The domain begins at IN-ADDR.ARPA and has a substructure which follows
1193: the Internet addressing structure.
1194:
1195: Domain names in the IN-ADDR.ARPA domain are defined to have up to four
1196: labels in addition to the IN-ADDR.ARPA suffix. Each label represents
1197: one octet of an Internet address, and is expressed as a character string
1198: for a decimal value in the range 0-255 (with leading zeros omitted
1199: except in the case of a zero octet which is represented by a single
1200: zero).
1201:
1202: Host addresses are represented by domain names that have all four labels
1203: specified. Thus data for Internet address 10.2.0.52 is located at
1204: domain name 52.0.2.10.IN-ADDR.ARPA. The reversal, though awkward to
1205: read, allows zones to be delegated which are exactly one network of
1206: address space. For example, 10.IN-ADDR.ARPA can be a zone containing
1207: data for the ARPANET, while 26.IN-ADDR.ARPA can be a separate zone for
1208: MILNET. Address nodes are used to hold pointers to primary host names
1209: in the normal domain space.
1210:
1211: Network numbers correspond to some non-terminal nodes at various depths
1212: in the IN-ADDR.ARPA domain, since Internet network numbers are either 1,
1213: 2, or 3 octets. Network nodes are used to hold pointers to the primary
1214: host names of gateways attached to that network. Since a gateway is, by
1215: definition, on more than one network, it will typically have two or more
1216: network nodes which point at it. Gateways will also have host level
1217: pointers at their fully qualified addresses.
1218:
1219: Both the gateway pointers at network nodes and the normal host pointers
1220: at full address nodes use the PTR RR to point back to the primary domain
1221: names of the corresponding hosts.
1222:
1223: For example, the IN-ADDR.ARPA domain will contain information about the
1224: ISI gateway between net 10 and 26, an MIT gateway from net 10 to MIT's
1225:
1226:
1227:
1228: Mockapetris [Page 22]
1229:
1230: RFC 1035 Domain Implementation and Specification November 1987
1231:
1232:
1233: net 18, and hosts A.ISI.EDU and MULTICS.MIT.EDU. Assuming that ISI
1234: gateway has addresses 10.2.0.22 and 26.0.0.103, and a name MILNET-
1235: GW.ISI.EDU, and the MIT gateway has addresses 10.0.0.77 and 18.10.0.4
1236: and a name GW.LCS.MIT.EDU, the domain database would contain:
1237:
1238: 10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU.
1239: 10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU.
1240: 18.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU.
1241: 26.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU.
1242: 22.0.2.10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU.
1243: 103.0.0.26.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU.
1244: 77.0.0.10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU.
1245: 4.0.10.18.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU.
1246: 103.0.3.26.IN-ADDR.ARPA. PTR A.ISI.EDU.
1247: 6.0.0.10.IN-ADDR.ARPA. PTR MULTICS.MIT.EDU.
1248:
1249: Thus a program which wanted to locate gateways on net 10 would originate
1250: a query of the form QTYPE=PTR, QCLASS=IN, QNAME=10.IN-ADDR.ARPA. It
1251: would receive two RRs in response:
1252:
1253: 10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU.
1254: 10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU.
1255:
1256: The program could then originate QTYPE=A, QCLASS=IN queries for MILNET-
1257: GW.ISI.EDU. and GW.LCS.MIT.EDU. to discover the Internet addresses of
1258: these gateways.
1259:
1260: A resolver which wanted to find the host name corresponding to Internet
1261: host address 10.0.0.6 would pursue a query of the form QTYPE=PTR,
1262: QCLASS=IN, QNAME=6.0.0.10.IN-ADDR.ARPA, and would receive:
1263:
1264: 6.0.0.10.IN-ADDR.ARPA. PTR MULTICS.MIT.EDU.
1265:
1266: Several cautions apply to the use of these services:
1267: - Since the IN-ADDR.ARPA special domain and the normal domain
1268: for a particular host or gateway will be in different zones,
1269: the possibility exists that that the data may be inconsistent.
1270:
1271: - Gateways will often have two names in separate domains, only
1272: one of which can be primary.
1273:
1274: - Systems that use the domain database to initialize their
1275: routing tables must start with enough gateway information to
1276: guarantee that they can access the appropriate name server.
1277:
1278: - The gateway data only reflects the existence of a gateway in a
1279: manner equivalent to the current HOSTS.TXT file. It doesn't
1280: replace the dynamic availability information from GGP or EGP.
1281:
1282:
1283:
1284: Mockapetris [Page 23]
1285:
1286: RFC 1035 Domain Implementation and Specification November 1987
1287:
1288:
1289: 3.6. Defining new types, classes, and special namespaces
1290:
1291: The previously defined types and classes are the ones in use as of the
1292: date of this memo. New definitions should be expected. This section
1293: makes some recommendations to designers considering additions to the
1294: existing facilities. The mailing list [email protected] is the
1295: forum where general discussion of design issues takes place.
1296:
1297: In general, a new type is appropriate when new information is to be
1298: added to the database about an existing object, or we need new data
1299: formats for some totally new object. Designers should attempt to define
1300: types and their RDATA formats that are generally applicable to all
1301: classes, and which avoid duplication of information. New classes are
1302: appropriate when the DNS is to be used for a new protocol, etc which
1303: requires new class-specific data formats, or when a copy of the existing
1304: name space is desired, but a separate management domain is necessary.
1305:
1306: New types and classes need mnemonics for master files; the format of the
1307: master files requires that the mnemonics for type and class be disjoint.
1308:
1309: TYPE and CLASS values must be a proper subset of QTYPEs and QCLASSes
1310: respectively.
1311:
1312: The present system uses multiple RRs to represent multiple values of a
1313: type rather than storing multiple values in the RDATA section of a
1314: single RR. This is less efficient for most applications, but does keep
1315: RRs shorter. The multiple RRs assumption is incorporated in some
1316: experimental work on dynamic update methods.
1317:
1318: The present system attempts to minimize the duplication of data in the
1319: database in order to insure consistency. Thus, in order to find the
1320: address of the host for a mail exchange, you map the mail domain name to
1321: a host name, then the host name to addresses, rather than a direct
1322: mapping to host address. This approach is preferred because it avoids
1323: the opportunity for inconsistency.
1324:
1325: In defining a new type of data, multiple RR types should not be used to
1326: create an ordering between entries or express different formats for
1327: equivalent bindings, instead this information should be carried in the
1328: body of the RR and a single type used. This policy avoids problems with
1329: caching multiple types and defining QTYPEs to match multiple types.
1330:
1331: For example, the original form of mail exchange binding used two RR
1332: types one to represent a "closer" exchange (MD) and one to represent a
1333: "less close" exchange (MF). The difficulty is that the presence of one
1334: RR type in a cache doesn't convey any information about the other
1335: because the query which acquired the cached information might have used
1336: a QTYPE of MF, MD, or MAILA (which matched both). The redesigned
1337:
1338:
1339:
1340: Mockapetris [Page 24]
1341:
1342: RFC 1035 Domain Implementation and Specification November 1987
1343:
1344:
1345: service used a single type (MX) with a "preference" value in the RDATA
1346: section which can order different RRs. However, if any MX RRs are found
1347: in the cache, then all should be there.
1348:
1349: 4. MESSAGES
1350:
1351: 4.1. Format
1352:
1353: All communications inside of the domain protocol are carried in a single
1354: format called a message. The top level format of message is divided
1355: into 5 sections (some of which are empty in certain cases) shown below:
1356:
1357: +---------------------+
1358: | Header |
1359: +---------------------+
1360: | Question | the question for the name server
1361: +---------------------+
1362: | Answer | RRs answering the question
1363: +---------------------+
1364: | Authority | RRs pointing toward an authority
1365: +---------------------+
1366: | Additional | RRs holding additional information
1367: +---------------------+
1368:
1369: The header section is always present. The header includes fields that
1370: specify which of the remaining sections are present, and also specify
1371: whether the message is a query or a response, a standard query or some
1372: other opcode, etc.
1373:
1374: The names of the sections after the header are derived from their use in
1375: standard queries. The question section contains fields that describe a
1376: question to a name server. These fields are a query type (QTYPE), a
1377: query class (QCLASS), and a query domain name (QNAME). The last three
1378: sections have the same format: a possibly empty list of concatenated
1379: resource records (RRs). The answer section contains RRs that answer the
1380: question; the authority section contains RRs that point toward an
1381: authoritative name server; the additional records section contains RRs
1382: which relate to the query, but are not strictly answers for the
1383: question.
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396: Mockapetris [Page 25]
1397:
1398: RFC 1035 Domain Implementation and Specification November 1987
1399:
1400:
1401: 4.1.1. Header section format
1402:
1403: The header contains the following fields:
1404:
1405: 1 1 1 1 1 1
1406: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1407: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1408: | ID |
1409: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1410: |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
1411: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1412: | QDCOUNT |
1413: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1414: | ANCOUNT |
1415: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1416: | NSCOUNT |
1417: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1418: | ARCOUNT |
1419: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1420:
1421: where:
1422:
1423: ID A 16 bit identifier assigned by the program that
1424: generates any kind of query. This identifier is copied
1425: the corresponding reply and can be used by the requester
1426: to match up replies to outstanding queries.
1427:
1428: QR A one bit field that specifies whether this message is a
1429: query (0), or a response (1).
1430:
1431: OPCODE A four bit field that specifies kind of query in this
1432: message. This value is set by the originator of a query
1433: and copied into the response. The values are:
1434:
1435: 0 a standard query (QUERY)
1436:
1437: 1 an inverse query (IQUERY)
1438:
1439: 2 a server status request (STATUS)
1440:
1441: 3-15 reserved for future use
1442:
1443: AA Authoritative Answer - this bit is valid in responses,
1444: and specifies that the responding name server is an
1445: authority for the domain name in question section.
1446:
1447: Note that the contents of the answer section may have
1448: multiple owner names because of aliases. The AA bit
1449:
1450:
1451:
1452: Mockapetris [Page 26]
1453:
1454: RFC 1035 Domain Implementation and Specification November 1987
1455:
1456:
1457: corresponds to the name which matches the query name, or
1458: the first owner name in the answer section.
1459:
1460: TC TrunCation - specifies that this message was truncated
1461: due to length greater than that permitted on the
1462: transmission channel.
1463:
1464: RD Recursion Desired - this bit may be set in a query and
1465: is copied into the response. If RD is set, it directs
1466: the name server to pursue the query recursively.
1467: Recursive query support is optional.
1468:
1469: RA Recursion Available - this be is set or cleared in a
1470: response, and denotes whether recursive query support is
1471: available in the name server.
1472:
1473: Z Reserved for future use. Must be zero in all queries
1474: and responses.
1475:
1476: RCODE Response code - this 4 bit field is set as part of
1477: responses. The values have the following
1478: interpretation:
1479:
1480: 0 No error condition
1481:
1482: 1 Format error - The name server was
1483: unable to interpret the query.
1484:
1485: 2 Server failure - The name server was
1486: unable to process this query due to a
1487: problem with the name server.
1488:
1489: 3 Name Error - Meaningful only for
1490: responses from an authoritative name
1491: server, this code signifies that the
1492: domain name referenced in the query does
1493: not exist.
1494:
1495: 4 Not Implemented - The name server does
1496: not support the requested kind of query.
1497:
1498: 5 Refused - The name server refuses to
1499: perform the specified operation for
1500: policy reasons. For example, a name
1501: server may not wish to provide the
1502: information to the particular requester,
1503: or a name server may not wish to perform
1504: a particular operation (e.g., zone
1505:
1506:
1507:
1508: Mockapetris [Page 27]
1509:
1510: RFC 1035 Domain Implementation and Specification November 1987
1511:
1512:
1513: transfer) for particular data.
1514:
1515: 6-15 Reserved for future use.
1516:
1517: QDCOUNT an unsigned 16 bit integer specifying the number of
1518: entries in the question section.
1519:
1520: ANCOUNT an unsigned 16 bit integer specifying the number of
1521: resource records in the answer section.
1522:
1523: NSCOUNT an unsigned 16 bit integer specifying the number of name
1524: server resource records in the authority records
1525: section.
1526:
1527: ARCOUNT an unsigned 16 bit integer specifying the number of
1528: resource records in the additional records section.
1529:
1530: 4.1.2. Question section format
1531:
1532: The question section is used to carry the "question" in most queries,
1533: i.e., the parameters that define what is being asked. The section
1534: contains QDCOUNT (usually 1) entries, each of the following format:
1535:
1536: 1 1 1 1 1 1
1537: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1538: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1539: | |
1540: / QNAME /
1541: / /
1542: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1543: | QTYPE |
1544: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1545: | QCLASS |
1546: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1547:
1548: where:
1549:
1550: QNAME a domain name represented as a sequence of labels, where
1551: each label consists of a length octet followed by that
1552: number of octets. The domain name terminates with the
1553: zero length octet for the null label of the root. Note
1554: that this field may be an odd number of octets; no
1555: padding is used.
1556:
1557: QTYPE a two octet code which specifies the type of the query.
1558: The values for this field include all codes valid for a
1559: TYPE field, together with some more general codes which
1560: can match more than one type of RR.
1561:
1562:
1563:
1564: Mockapetris [Page 28]
1565:
1566: RFC 1035 Domain Implementation and Specification November 1987
1567:
1568:
1569: QCLASS a two octet code that specifies the class of the query.
1570: For example, the QCLASS field is IN for the Internet.
1571:
1572: 4.1.3. Resource record format
1573:
1574: The answer, authority, and additional sections all share the same
1575: format: a variable number of resource records, where the number of
1576: records is specified in the corresponding count field in the header.
1577: Each resource record has the following format:
1578: 1 1 1 1 1 1
1579: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1580: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1581: | |
1582: / /
1583: / NAME /
1584: | |
1585: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1586: | TYPE |
1587: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1588: | CLASS |
1589: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1590: | TTL |
1591: | |
1592: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1593: | RDLENGTH |
1594: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
1595: / RDATA /
1596: / /
1597: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1598:
1599: where:
1600:
1601: NAME a domain name to which this resource record pertains.
1602:
1603: TYPE two octets containing one of the RR type codes. This
1604: field specifies the meaning of the data in the RDATA
1605: field.
1606:
1607: CLASS two octets which specify the class of the data in the
1608: RDATA field.
1609:
1610: TTL a 32 bit unsigned integer that specifies the time
1611: interval (in seconds) that the resource record may be
1612: cached before it should be discarded. Zero values are
1613: interpreted to mean that the RR can only be used for the
1614: transaction in progress, and should not be cached.
1615:
1616:
1617:
1618:
1619:
1620: Mockapetris [Page 29]
1621:
1622: RFC 1035 Domain Implementation and Specification November 1987
1623:
1624:
1625: RDLENGTH an unsigned 16 bit integer that specifies the length in
1626: octets of the RDATA field.
1627:
1628: RDATA a variable length string of octets that describes the
1629: resource. The format of this information varies
1630: according to the TYPE and CLASS of the resource record.
1631: For example, the if the TYPE is A and the CLASS is IN,
1632: the RDATA field is a 4 octet ARPA Internet address.
1633:
1634: 4.1.4. Message compression
1635:
1636: In order to reduce the size of messages, the domain system utilizes a
1637: compression scheme which eliminates the repetition of domain names in a
1638: message. In this scheme, an entire domain name or a list of labels at
1639: the end of a domain name is replaced with a pointer to a prior occurance
1640: of the same name.
1641:
1642: The pointer takes the form of a two octet sequence:
1643:
1644: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1645: | 1 1| OFFSET |
1646: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1647:
1648: The first two bits are ones. This allows a pointer to be distinguished
1649: from a label, since the label must begin with two zero bits because
1650: labels are restricted to 63 octets or less. (The 10 and 01 combinations
1651: are reserved for future use.) The OFFSET field specifies an offset from
1652: the start of the message (i.e., the first octet of the ID field in the
1653: domain header). A zero offset specifies the first byte of the ID field,
1654: etc.
1655:
1656: The compression scheme allows a domain name in a message to be
1657: represented as either:
1658:
1659: - a sequence of labels ending in a zero octet
1660:
1661: - a pointer
1662:
1663: - a sequence of labels ending with a pointer
1664:
1665: Pointers can only be used for occurances of a domain name where the
1666: format is not class specific. If this were not the case, a name server
1667: or resolver would be required to know the format of all RRs it handled.
1668: As yet, there are no such cases, but they may occur in future RDATA
1669: formats.
1670:
1671: If a domain name is contained in a part of the message subject to a
1672: length field (such as the RDATA section of an RR), and compression is
1673:
1674:
1675:
1676: Mockapetris [Page 30]
1677:
1678: RFC 1035 Domain Implementation and Specification November 1987
1679:
1680:
1681: used, the length of the compressed name is used in the length
1682: calculation, rather than the length of the expanded name.
1683:
1684: Programs are free to avoid using pointers in messages they generate,
1685: although this will reduce datagram capacity, and may cause truncation.
1686: However all programs are required to understand arriving messages that
1687: contain pointers.
1688:
1689: For example, a datagram might need to use the domain names F.ISI.ARPA,
1690: FOO.F.ISI.ARPA, ARPA, and the root. Ignoring the other fields of the
1691: message, these domain names might be represented as:
1692:
1693: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1694: 20 | 1 | F |
1695: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1696: 22 | 3 | I |
1697: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1698: 24 | S | I |
1699: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1700: 26 | 4 | A |
1701: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1702: 28 | R | P |
1703: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1704: 30 | A | 0 |
1705: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1706:
1707: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1708: 40 | 3 | F |
1709: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1710: 42 | O | O |
1711: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1712: 44 | 1 1| 20 |
1713: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1714:
1715: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1716: 64 | 1 1| 26 |
1717: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1718:
1719: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1720: 92 | 0 | |
1721: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1722:
1723: The domain name for F.ISI.ARPA is shown at offset 20. The domain name
1724: FOO.F.ISI.ARPA is shown at offset 40; this definition uses a pointer to
1725: concatenate a label for FOO to the previously defined F.ISI.ARPA. The
1726: domain name ARPA is defined at offset 64 using a pointer to the ARPA
1727: component of the name F.ISI.ARPA at 20; note that this pointer relies on
1728: ARPA being the last label in the string at 20. The root domain name is
1729:
1730:
1731:
1732: Mockapetris [Page 31]
1733:
1734: RFC 1035 Domain Implementation and Specification November 1987
1735:
1736:
1737: defined by a single octet of zeros at 92; the root domain name has no
1738: labels.
1739:
1740: 4.2. Transport
1741:
1742: The DNS assumes that messages will be transmitted as datagrams or in a
1743: byte stream carried by a virtual circuit. While virtual circuits can be
1744: used for any DNS activity, datagrams are preferred for queries due to
1745: their lower overhead and better performance. Zone refresh activities
1746: must use virtual circuits because of the need for reliable transfer.
1747:
1748: The Internet supports name server access using TCP [RFC-793] on server
1749: port 53 (decimal) as well as datagram access using UDP [RFC-768] on UDP
1750: port 53 (decimal).
1751:
1752: 4.2.1. UDP usage
1753:
1754: Messages sent using UDP user server port 53 (decimal).
1755:
1756: Messages carried by UDP are restricted to 512 bytes (not counting the IP
1757: or UDP headers). Longer messages are truncated and the TC bit is set in
1758: the header.
1759:
1760: UDP is not acceptable for zone transfers, but is the recommended method
1761: for standard queries in the Internet. Queries sent using UDP may be
1762: lost, and hence a retransmission strategy is required. Queries or their
1763: responses may be reordered by the network, or by processing in name
1764: servers, so resolvers should not depend on them being returned in order.
1765:
1766: The optimal UDP retransmission policy will vary with performance of the
1767: Internet and the needs of the client, but the following are recommended:
1768:
1769: - The client should try other servers and server addresses
1770: before repeating a query to a specific address of a server.
1771:
1772: - The retransmission interval should be based on prior
1773: statistics if possible. Too aggressive retransmission can
1774: easily slow responses for the community at large. Depending
1775: on how well connected the client is to its expected servers,
1776: the minimum retransmission interval should be 2-5 seconds.
1777:
1778: More suggestions on server selection and retransmission policy can be
1779: found in the resolver section of this memo.
1780:
1781: 4.2.2. TCP usage
1782:
1783: Messages sent over TCP connections use server port 53 (decimal). The
1784: message is prefixed with a two byte length field which gives the message
1785:
1786:
1787:
1788: Mockapetris [Page 32]
1789:
1790: RFC 1035 Domain Implementation and Specification November 1987
1791:
1792:
1793: length, excluding the two byte length field. This length field allows
1794: the low-level processing to assemble a complete message before beginning
1795: to parse it.
1796:
1797: Several connection management policies are recommended:
1798:
1799: - The server should not block other activities waiting for TCP
1800: data.
1801:
1802: - The server should support multiple connections.
1803:
1804: - The server should assume that the client will initiate
1805: connection closing, and should delay closing its end of the
1806: connection until all outstanding client requests have been
1807: satisfied.
1808:
1809: - If the server needs to close a dormant connection to reclaim
1810: resources, it should wait until the connection has been idle
1811: for a period on the order of two minutes. In particular, the
1812: server should allow the SOA and AXFR request sequence (which
1813: begins a refresh operation) to be made on a single connection.
1814: Since the server would be unable to answer queries anyway, a
1815: unilateral close or reset may be used instead of a graceful
1816: close.
1817:
1818: 5. MASTER FILES
1819:
1820: Master files are text files that contain RRs in text form. Since the
1821: contents of a zone can be expressed in the form of a list of RRs a
1822: master file is most often used to define a zone, though it can be used
1823: to list a cache's contents. Hence, this section first discusses the
1824: format of RRs in a master file, and then the special considerations when
1825: a master file is used to create a zone in some name server.
1826:
1827: 5.1. Format
1828:
1829: The format of these files is a sequence of entries. Entries are
1830: predominantly line-oriented, though parentheses can be used to continue
1831: a list of items across a line boundary, and text literals can contain
1832: CRLF within the text. Any combination of tabs and spaces act as a
1833: delimiter between the separate items that make up an entry. The end of
1834: any line in the master file can end with a comment. The comment starts
1835: with a ";" (semicolon).
1836:
1837: The following entries are defined:
1838:
1839: <blank>[<comment>]
1840:
1841:
1842:
1843:
1844: Mockapetris [Page 33]
1845:
1846: RFC 1035 Domain Implementation and Specification November 1987
1847:
1848:
1849: $ORIGIN <domain-name> [<comment>]
1850:
1851: $INCLUDE <file-name> [<domain-name>] [<comment>]
1852:
1853: <domain-name><rr> [<comment>]
1854:
1855: <blank><rr> [<comment>]
1856:
1857: Blank lines, with or without comments, are allowed anywhere in the file.
1858:
1859: Two control entries are defined: $ORIGIN and $INCLUDE. $ORIGIN is
1860: followed by a domain name, and resets the current origin for relative
1861: domain names to the stated name. $INCLUDE inserts the named file into
1862: the current file, and may optionally specify a domain name that sets the
1863: relative domain name origin for the included file. $INCLUDE may also
1864: have a comment. Note that a $INCLUDE entry never changes the relative
1865: origin of the parent file, regardless of changes to the relative origin
1866: made within the included file.
1867:
1868: The last two forms represent RRs. If an entry for an RR begins with a
1869: blank, then the RR is assumed to be owned by the last stated owner. If
1870: an RR entry begins with a <domain-name>, then the owner name is reset.
1871:
1872: <rr> contents take one of the following forms:
1873:
1874: [<TTL>] [<class>] <type> <RDATA>
1875:
1876: [<class>] [<TTL>] <type> <RDATA>
1877:
1878: The RR begins with optional TTL and class fields, followed by a type and
1879: RDATA field appropriate to the type and class. Class and type use the
1880: standard mnemonics, TTL is a decimal integer. Omitted class and TTL
1881: values are default to the last explicitly stated values. Since type and
1882: class mnemonics are disjoint, the parse is unique. (Note that this
1883: order is different from the order used in examples and the order used in
1884: the actual RRs; the given order allows easier parsing and defaulting.)
1885:
1886: <domain-name>s make up a large share of the data in the master file.
1887: The labels in the domain name are expressed as character strings and
1888: separated by dots. Quoting conventions allow arbitrary characters to be
1889: stored in domain names. Domain names that end in a dot are called
1890: absolute, and are taken as complete. Domain names which do not end in a
1891: dot are called relative; the actual domain name is the concatenation of
1892: the relative part with an origin specified in a $ORIGIN, $INCLUDE, or as
1893: an argument to the master file loading routine. A relative name is an
1894: error when no origin is available.
1895:
1896:
1897:
1898:
1899:
1900: Mockapetris [Page 34]
1901:
1902: RFC 1035 Domain Implementation and Specification November 1987
1903:
1904:
1905: <character-string> is expressed in one or two ways: as a contiguous set
1906: of characters without interior spaces, or as a string beginning with a "
1907: and ending with a ". Inside a " delimited string any character can
1908: occur, except for a " itself, which must be quoted using \ (back slash).
1909:
1910: Because these files are text files several special encodings are
1911: necessary to allow arbitrary data to be loaded. In particular:
1912:
1913: of the root.
1914:
1915: @ A free standing @ is used to denote the current origin.
1916:
1917: \X where X is any character other than a digit (0-9), is
1918: used to quote that character so that its special meaning
1919: does not apply. For example, "\." can be used to place
1920: a dot character in a label.
1921:
1922: \DDD where each D is a digit is the octet corresponding to
1923: the decimal number described by DDD. The resulting
1924: octet is assumed to be text and is not checked for
1925: special meaning.
1926:
1927: ( ) Parentheses are used to group data that crosses a line
1928: boundary. In effect, line terminations are not
1929: recognized within parentheses.
1930:
1931: ; Semicolon is used to start a comment; the remainder of
1932: the line is ignored.
1933:
1934: 5.2. Use of master files to define zones
1935:
1936: When a master file is used to load a zone, the operation should be
1937: suppressed if any errors are encountered in the master file. The
1938: rationale for this is that a single error can have widespread
1939: consequences. For example, suppose that the RRs defining a delegation
1940: have syntax errors; then the server will return authoritative name
1941: errors for all names in the subzone (except in the case where the
1942: subzone is also present on the server).
1943:
1944: Several other validity checks that should be performed in addition to
1945: insuring that the file is syntactically correct:
1946:
1947: 1. All RRs in the file should have the same class.
1948:
1949: 2. Exactly one SOA RR should be present at the top of the zone.
1950:
1951: 3. If delegations are present and glue information is required,
1952: it should be present.
1953:
1954:
1955:
1956: Mockapetris [Page 35]
1957:
1958: RFC 1035 Domain Implementation and Specification November 1987
1959:
1960:
1961: 4. Information present outside of the authoritative nodes in the
1962: zone should be glue information, rather than the result of an
1963: origin or similar error.
1964:
1965: 5.3. Master file example
1966:
1967: The following is an example file which might be used to define the
1968: ISI.EDU zone.and is loaded with an origin of ISI.EDU:
1969:
1970: @ IN SOA VENERA Action\.domains (
1971: 20 ; SERIAL
1972: 7200 ; REFRESH
1973: 600 ; RETRY
1974: 3600000; EXPIRE
1975: 60) ; MINIMUM
1976:
1977: NS A.ISI.EDU.
1978: NS VENERA
1979: NS VAXA
1980: MX 10 VENERA
1981: MX 20 VAXA
1982:
1983: A A 26.3.0.103
1984:
1985: VENERA A 10.1.0.52
1986: A 128.9.0.32
1987:
1988: VAXA A 10.2.0.27
1989: A 128.9.0.33
1990:
1991:
1992: $INCLUDE <SUBSYS>ISI-MAILBOXES.TXT
1993:
1994: Where the file <SUBSYS>ISI-MAILBOXES.TXT is:
1995:
1996: MOE MB A.ISI.EDU.
1997: LARRY MB A.ISI.EDU.
1998: CURLEY MB A.ISI.EDU.
1999: STOOGES MG MOE
2000: MG LARRY
2001: MG CURLEY
2002:
2003: Note the use of the \ character in the SOA RR to specify the responsible
2004: person mailbox "[email protected]".
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012: Mockapetris [Page 36]
2013:
2014: RFC 1035 Domain Implementation and Specification November 1987
2015:
2016:
2017: 6. NAME SERVER IMPLEMENTATION
2018:
2019: 6.1. Architecture
2020:
2021: The optimal structure for the name server will depend on the host
2022: operating system and whether the name server is integrated with resolver
2023: operations, either by supporting recursive service, or by sharing its
2024: database with a resolver. This section discusses implementation
2025: considerations for a name server which shares a database with a
2026: resolver, but most of these concerns are present in any name server.
2027:
2028: 6.1.1. Control
2029:
2030: A name server must employ multiple concurrent activities, whether they
2031: are implemented as separate tasks in the host's OS or multiplexing
2032: inside a single name server program. It is simply not acceptable for a
2033: name server to block the service of UDP requests while it waits for TCP
2034: data for refreshing or query activities. Similarly, a name server
2035: should not attempt to provide recursive service without processing such
2036: requests in parallel, though it may choose to serialize requests from a
2037: single client, or to regard identical requests from the same client as
2038: duplicates. A name server should not substantially delay requests while
2039: it reloads a zone from master files or while it incorporates a newly
2040: refreshed zone into its database.
2041:
2042: 6.1.2. Database
2043:
2044: While name server implementations are free to use any internal data
2045: structures they choose, the suggested structure consists of three major
2046: parts:
2047:
2048: - A "catalog" data structure which lists the zones available to
2049: this server, and a "pointer" to the zone data structure. The
2050: main purpose of this structure is to find the nearest ancestor
2051: zone, if any, for arriving standard queries.
2052:
2053: - Separate data structures for each of the zones held by the
2054: name server.
2055:
2056: - A data structure for cached data. (or perhaps separate caches
2057: for different classes)
2058:
2059: All of these data structures can be implemented an identical tree
2060: structure format, with different data chained off the nodes in different
2061: parts: in the catalog the data is pointers to zones, while in the zone
2062: and cache data structures, the data will be RRs. In designing the tree
2063: framework the designer should recognize that query processing will need
2064: to traverse the tree using case-insensitive label comparisons; and that
2065:
2066:
2067:
2068: Mockapetris [Page 37]
2069:
2070: RFC 1035 Domain Implementation and Specification November 1987
2071:
2072:
2073: in real data, a few nodes have a very high branching factor (100-1000 or
2074: more), but the vast majority have a very low branching factor (0-1).
2075:
2076: One way to solve the case problem is to store the labels for each node
2077: in two pieces: a standardized-case representation of the label where all
2078: ASCII characters are in a single case, together with a bit mask that
2079: denotes which characters are actually of a different case. The
2080: branching factor diversity can be handled using a simple linked list for
2081: a node until the branching factor exceeds some threshold, and
2082: transitioning to a hash structure after the threshold is exceeded. In
2083: any case, hash structures used to store tree sections must insure that
2084: hash functions and procedures preserve the casing conventions of the
2085: DNS.
2086:
2087: The use of separate structures for the different parts of the database
2088: is motivated by several factors:
2089:
2090: - The catalog structure can be an almost static structure that
2091: need change only when the system administrator changes the
2092: zones supported by the server. This structure can also be
2093: used to store parameters used to control refreshing
2094: activities.
2095:
2096: - The individual data structures for zones allow a zone to be
2097: replaced simply by changing a pointer in the catalog. Zone
2098: refresh operations can build a new structure and, when
2099: complete, splice it into the database via a simple pointer
2100: replacement. It is very important that when a zone is
2101: refreshed, queries should not use old and new data
2102: simultaneously.
2103:
2104: - With the proper search procedures, authoritative data in zones
2105: will always "hide", and hence take precedence over, cached
2106: data.
2107:
2108: - Errors in zone definitions that cause overlapping zones, etc.,
2109: may cause erroneous responses to queries, but problem
2110: determination is simplified, and the contents of one "bad"
2111: zone can't corrupt another.
2112:
2113: - Since the cache is most frequently updated, it is most
2114: vulnerable to corruption during system restarts. It can also
2115: become full of expired RR data. In either case, it can easily
2116: be discarded without disturbing zone data.
2117:
2118: A major aspect of database design is selecting a structure which allows
2119: the name server to deal with crashes of the name server's host. State
2120: information which a name server should save across system crashes
2121:
2122:
2123:
2124: Mockapetris [Page 38]
2125:
2126: RFC 1035 Domain Implementation and Specification November 1987
2127:
2128:
2129: includes the catalog structure (including the state of refreshing for
2130: each zone) and the zone data itself.
2131:
2132: 6.1.3. Time
2133:
2134: Both the TTL data for RRs and the timing data for refreshing activities
2135: depends on 32 bit timers in units of seconds. Inside the database,
2136: refresh timers and TTLs for cached data conceptually "count down", while
2137: data in the zone stays with constant TTLs.
2138:
2139: A recommended implementation strategy is to store time in two ways: as
2140: a relative increment and as an absolute time. One way to do this is to
2141: use positive 32 bit numbers for one type and negative numbers for the
2142: other. The RRs in zones use relative times; the refresh timers and
2143: cache data use absolute times. Absolute numbers are taken with respect
2144: to some known origin and converted to relative values when placed in the
2145: response to a query. When an absolute TTL is negative after conversion
2146: to relative, then the data is expired and should be ignored.
2147:
2148: 6.2. Standard query processing
2149:
2150: The major algorithm for standard query processing is presented in
2151: [RFC-1034].
2152:
2153: When processing queries with QCLASS=*, or some other QCLASS which
2154: matches multiple classes, the response should never be authoritative
2155: unless the server can guarantee that the response covers all classes.
2156:
2157: When composing a response, RRs which are to be inserted in the
2158: additional section, but duplicate RRs in the answer or authority
2159: sections, may be omitted from the additional section.
2160:
2161: When a response is so long that truncation is required, the truncation
2162: should start at the end of the response and work forward in the
2163: datagram. Thus if there is any data for the authority section, the
2164: answer section is guaranteed to be unique.
2165:
2166: The MINIMUM value in the SOA should be used to set a floor on the TTL of
2167: data distributed from a zone. This floor function should be done when
2168: the data is copied into a response. This will allow future dynamic
2169: update protocols to change the SOA MINIMUM field without ambiguous
2170: semantics.
2171:
2172: 6.3. Zone refresh and reload processing
2173:
2174: In spite of a server's best efforts, it may be unable to load zone data
2175: from a master file due to syntax errors, etc., or be unable to refresh a
2176: zone within the its expiration parameter. In this case, the name server
2177:
2178:
2179:
2180: Mockapetris [Page 39]
2181:
2182: RFC 1035 Domain Implementation and Specification November 1987
2183:
2184:
2185: should answer queries as if it were not supposed to possess the zone.
2186:
2187: If a master is sending a zone out via AXFR, and a new version is created
2188: during the transfer, the master should continue to send the old version
2189: if possible. In any case, it should never send part of one version and
2190: part of another. If completion is not possible, the master should reset
2191: the connection on which the zone transfer is taking place.
2192:
2193: 6.4. Inverse queries (Optional)
2194:
2195: Inverse queries are an optional part of the DNS. Name servers are not
2196: required to support any form of inverse queries. If a name server
2197: receives an inverse query that it does not support, it returns an error
2198: response with the "Not Implemented" error set in the header. While
2199: inverse query support is optional, all name servers must be at least
2200: able to return the error response.
2201:
2202: 6.4.1. The contents of inverse queries and responses Inverse
2203: queries reverse the mappings performed by standard query operations;
2204: while a standard query maps a domain name to a resource, an inverse
2205: query maps a resource to a domain name. For example, a standard query
2206: might bind a domain name to a host address; the corresponding inverse
2207: query binds the host address to a domain name.
2208:
2209: Inverse queries take the form of a single RR in the answer section of
2210: the message, with an empty question section. The owner name of the
2211: query RR and its TTL are not significant. The response carries
2212: questions in the question section which identify all names possessing
2213: the query RR WHICH THE NAME SERVER KNOWS. Since no name server knows
2214: about all of the domain name space, the response can never be assumed to
2215: be complete. Thus inverse queries are primarily useful for database
2216: management and debugging activities. Inverse queries are NOT an
2217: acceptable method of mapping host addresses to host names; use the IN-
2218: ADDR.ARPA domain instead.
2219:
2220: Where possible, name servers should provide case-insensitive comparisons
2221: for inverse queries. Thus an inverse query asking for an MX RR of
2222: "Venera.isi.edu" should get the same response as a query for
2223: "VENERA.ISI.EDU"; an inverse query for HINFO RR "IBM-PC UNIX" should
2224: produce the same result as an inverse query for "IBM-pc unix". However,
2225: this cannot be guaranteed because name servers may possess RRs that
2226: contain character strings but the name server does not know that the
2227: data is character.
2228:
2229: When a name server processes an inverse query, it either returns:
2230:
2231: 1. zero, one, or multiple domain names for the specified
2232: resource as QNAMEs in the question section
2233:
2234:
2235:
2236: Mockapetris [Page 40]
2237:
2238: RFC 1035 Domain Implementation and Specification November 1987
2239:
2240:
2241: 2. an error code indicating that the name server doesn't support
2242: inverse mapping of the specified resource type.
2243:
2244: When the response to an inverse query contains one or more QNAMEs, the
2245: owner name and TTL of the RR in the answer section which defines the
2246: inverse query is modified to exactly match an RR found at the first
2247: QNAME.
2248:
2249: RRs returned in the inverse queries cannot be cached using the same
2250: mechanism as is used for the replies to standard queries. One reason
2251: for this is that a name might have multiple RRs of the same type, and
2252: only one would appear. For example, an inverse query for a single
2253: address of a multiply homed host might create the impression that only
2254: one address existed.
2255:
2256: 6.4.2. Inverse query and response example The overall structure
2257: of an inverse query for retrieving the domain name that corresponds to
2258: Internet address 10.1.0.52 is shown below:
2259:
2260: +-----------------------------------------+
2261: Header | OPCODE=IQUERY, ID=997 |
2262: +-----------------------------------------+
2263: Question | <empty> |
2264: +-----------------------------------------+
2265: Answer | <anyname> A IN 10.1.0.52 |
2266: +-----------------------------------------+
2267: Authority | <empty> |
2268: +-----------------------------------------+
2269: Additional | <empty> |
2270: +-----------------------------------------+
2271:
2272: This query asks for a question whose answer is the Internet style
2273: address 10.1.0.52. Since the owner name is not known, any domain name
2274: can be used as a placeholder (and is ignored). A single octet of zero,
2275: signifying the root, is usually used because it minimizes the length of
2276: the message. The TTL of the RR is not significant. The response to
2277: this query might be:
2278:
2279:
2280:
2281:
2282:
2283:
2284:
2285:
2286:
2287:
2288:
2289:
2290:
2291:
2292: Mockapetris [Page 41]
2293:
2294: RFC 1035 Domain Implementation and Specification November 1987
2295:
2296:
2297: +-----------------------------------------+
2298: Header | OPCODE=RESPONSE, ID=997 |
2299: +-----------------------------------------+
2300: Question |QTYPE=A, QCLASS=IN, QNAME=VENERA.ISI.EDU |
2301: +-----------------------------------------+
2302: Answer | VENERA.ISI.EDU A IN 10.1.0.52 |
2303: +-----------------------------------------+
2304: Authority | <empty> |
2305: +-----------------------------------------+
2306: Additional | <empty> |
2307: +-----------------------------------------+
2308:
2309: Note that the QTYPE in a response to an inverse query is the same as the
2310: TYPE field in the answer section of the inverse query. Responses to
2311: inverse queries may contain multiple questions when the inverse is not
2312: unique. If the question section in the response is not empty, then the
2313: RR in the answer section is modified to correspond to be an exact copy
2314: of an RR at the first QNAME.
2315:
2316: 6.4.3. Inverse query processing
2317:
2318: Name servers that support inverse queries can support these operations
2319: through exhaustive searches of their databases, but this becomes
2320: impractical as the size of the database increases. An alternative
2321: approach is to invert the database according to the search key.
2322:
2323: For name servers that support multiple zones and a large amount of data,
2324: the recommended approach is separate inversions for each zone. When a
2325: particular zone is changed during a refresh, only its inversions need to
2326: be redone.
2327:
2328: Support for transfer of this type of inversion may be included in future
2329: versions of the domain system, but is not supported in this version.
2330:
2331: 6.5. Completion queries and responses
2332:
2333: The optional completion services described in RFC-882 and RFC-883 have
2334: been deleted. Redesigned services may become available in the future.
2335:
2336:
2337:
2338:
2339:
2340:
2341:
2342:
2343:
2344:
2345:
2346:
2347:
2348: Mockapetris [Page 42]
2349:
2350: RFC 1035 Domain Implementation and Specification November 1987
2351:
2352:
2353: 7. RESOLVER IMPLEMENTATION
2354:
2355: The top levels of the recommended resolver algorithm are discussed in
2356: [RFC-1034]. This section discusses implementation details assuming the
2357: database structure suggested in the name server implementation section
2358: of this memo.
2359:
2360: 7.1. Transforming a user request into a query
2361:
2362: The first step a resolver takes is to transform the client's request,
2363: stated in a format suitable to the local OS, into a search specification
2364: for RRs at a specific name which match a specific QTYPE and QCLASS.
2365: Where possible, the QTYPE and QCLASS should correspond to a single type
2366: and a single class, because this makes the use of cached data much
2367: simpler. The reason for this is that the presence of data of one type
2368: in a cache doesn't confirm the existence or non-existence of data of
2369: other types, hence the only way to be sure is to consult an
2370: authoritative source. If QCLASS=* is used, then authoritative answers
2371: won't be available.
2372:
2373: Since a resolver must be able to multiplex multiple requests if it is to
2374: perform its function efficiently, each pending request is usually
2375: represented in some block of state information. This state block will
2376: typically contain:
2377:
2378: - A timestamp indicating the time the request began.
2379: The timestamp is used to decide whether RRs in the database
2380: can be used or are out of date. This timestamp uses the
2381: absolute time format previously discussed for RR storage in
2382: zones and caches. Note that when an RRs TTL indicates a
2383: relative time, the RR must be timely, since it is part of a
2384: zone. When the RR has an absolute time, it is part of a
2385: cache, and the TTL of the RR is compared against the timestamp
2386: for the start of the request.
2387:
2388: Note that using the timestamp is superior to using a current
2389: time, since it allows RRs with TTLs of zero to be entered in
2390: the cache in the usual manner, but still used by the current
2391: request, even after intervals of many seconds due to system
2392: load, query retransmission timeouts, etc.
2393:
2394: - Some sort of parameters to limit the amount of work which will
2395: be performed for this request.
2396:
2397: The amount of work which a resolver will do in response to a
2398: client request must be limited to guard against errors in the
2399: database, such as circular CNAME references, and operational
2400: problems, such as network partition which prevents the
2401:
2402:
2403:
2404: Mockapetris [Page 43]
2405:
2406: RFC 1035 Domain Implementation and Specification November 1987
2407:
2408:
2409: resolver from accessing the name servers it needs. While
2410: local limits on the number of times a resolver will retransmit
2411: a particular query to a particular name server address are
2412: essential, the resolver should have a global per-request
2413: counter to limit work on a single request. The counter should
2414: be set to some initial value and decremented whenever the
2415: resolver performs any action (retransmission timeout,
2416: retransmission, etc.) If the counter passes zero, the request
2417: is terminated with a temporary error.
2418:
2419: Note that if the resolver structure allows one request to
2420: start others in parallel, such as when the need to access a
2421: name server for one request causes a parallel resolve for the
2422: name server's addresses, the spawned request should be started
2423: with a lower counter. This prevents circular references in
2424: the database from starting a chain reaction of resolver
2425: activity.
2426:
2427: - The SLIST data structure discussed in [RFC-1034].
2428:
2429: This structure keeps track of the state of a request if it
2430: must wait for answers from foreign name servers.
2431:
2432: 7.2. Sending the queries
2433:
2434: As described in [RFC-1034], the basic task of the resolver is to
2435: formulate a query which will answer the client's request and direct that
2436: query to name servers which can provide the information. The resolver
2437: will usually only have very strong hints about which servers to ask, in
2438: the form of NS RRs, and may have to revise the query, in response to
2439: CNAMEs, or revise the set of name servers the resolver is asking, in
2440: response to delegation responses which point the resolver to name
2441: servers closer to the desired information. In addition to the
2442: information requested by the client, the resolver may have to call upon
2443: its own services to determine the address of name servers it wishes to
2444: contact.
2445:
2446: In any case, the model used in this memo assumes that the resolver is
2447: multiplexing attention between multiple requests, some from the client,
2448: and some internally generated. Each request is represented by some
2449: state information, and the desired behavior is that the resolver
2450: transmit queries to name servers in a way that maximizes the probability
2451: that the request is answered, minimizes the time that the request takes,
2452: and avoids excessive transmissions. The key algorithm uses the state
2453: information of the request to select the next name server address to
2454: query, and also computes a timeout which will cause the next action
2455: should a response not arrive. The next action will usually be a
2456: transmission to some other server, but may be a temporary error to the
2457:
2458:
2459:
2460: Mockapetris [Page 44]
2461:
2462: RFC 1035 Domain Implementation and Specification November 1987
2463:
2464:
2465: client.
2466:
2467: The resolver always starts with a list of server names to query (SLIST).
2468: This list will be all NS RRs which correspond to the nearest ancestor
2469: zone that the resolver knows about. To avoid startup problems, the
2470: resolver should have a set of default servers which it will ask should
2471: it have no current NS RRs which are appropriate. The resolver then adds
2472: to SLIST all of the known addresses for the name servers, and may start
2473: parallel requests to acquire the addresses of the servers when the
2474: resolver has the name, but no addresses, for the name servers.
2475:
2476: To complete initialization of SLIST, the resolver attaches whatever
2477: history information it has to the each address in SLIST. This will
2478: usually consist of some sort of weighted averages for the response time
2479: of the address, and the batting average of the address (i.e., how often
2480: the address responded at all to the request). Note that this
2481: information should be kept on a per address basis, rather than on a per
2482: name server basis, because the response time and batting average of a
2483: particular server may vary considerably from address to address. Note
2484: also that this information is actually specific to a resolver address /
2485: server address pair, so a resolver with multiple addresses may wish to
2486: keep separate histories for each of its addresses. Part of this step
2487: must deal with addresses which have no such history; in this case an
2488: expected round trip time of 5-10 seconds should be the worst case, with
2489: lower estimates for the same local network, etc.
2490:
2491: Note that whenever a delegation is followed, the resolver algorithm
2492: reinitializes SLIST.
2493:
2494: The information establishes a partial ranking of the available name
2495: server addresses. Each time an address is chosen and the state should
2496: be altered to prevent its selection again until all other addresses have
2497: been tried. The timeout for each transmission should be 50-100% greater
2498: than the average predicted value to allow for variance in response.
2499:
2500: Some fine points:
2501:
2502: - The resolver may encounter a situation where no addresses are
2503: available for any of the name servers named in SLIST, and
2504: where the servers in the list are precisely those which would
2505: normally be used to look up their own addresses. This
2506: situation typically occurs when the glue address RRs have a
2507: smaller TTL than the NS RRs marking delegation, or when the
2508: resolver caches the result of a NS search. The resolver
2509: should detect this condition and restart the search at the
2510: next ancestor zone, or alternatively at the root.
2511:
2512:
2513:
2514:
2515:
2516: Mockapetris [Page 45]
2517:
2518: RFC 1035 Domain Implementation and Specification November 1987
2519:
2520:
2521: - If a resolver gets a server error or other bizarre response
2522: from a name server, it should remove it from SLIST, and may
2523: wish to schedule an immediate transmission to the next
2524: candidate server address.
2525:
2526: 7.3. Processing responses
2527:
2528: The first step in processing arriving response datagrams is to parse the
2529: response. This procedure should include:
2530:
2531: - Check the header for reasonableness. Discard datagrams which
2532: are queries when responses are expected.
2533:
2534: - Parse the sections of the message, and insure that all RRs are
2535: correctly formatted.
2536:
2537: - As an optional step, check the TTLs of arriving data looking
2538: for RRs with excessively long TTLs. If a RR has an
2539: excessively long TTL, say greater than 1 week, either discard
2540: the whole response, or limit all TTLs in the response to 1
2541: week.
2542:
2543: The next step is to match the response to a current resolver request.
2544: The recommended strategy is to do a preliminary matching using the ID
2545: field in the domain header, and then to verify that the question section
2546: corresponds to the information currently desired. This requires that
2547: the transmission algorithm devote several bits of the domain ID field to
2548: a request identifier of some sort. This step has several fine points:
2549:
2550: - Some name servers send their responses from different
2551: addresses than the one used to receive the query. That is, a
2552: resolver cannot rely that a response will come from the same
2553: address which it sent the corresponding query to. This name
2554: server bug is typically encountered in UNIX systems.
2555:
2556: - If the resolver retransmits a particular request to a name
2557: server it should be able to use a response from any of the
2558: transmissions. However, if it is using the response to sample
2559: the round trip time to access the name server, it must be able
2560: to determine which transmission matches the response (and keep
2561: transmission times for each outgoing message), or only
2562: calculate round trip times based on initial transmissions.
2563:
2564: - A name server will occasionally not have a current copy of a
2565: zone which it should have according to some NS RRs. The
2566: resolver should simply remove the name server from the current
2567: SLIST, and continue.
2568:
2569:
2570:
2571:
2572: Mockapetris [Page 46]
2573:
2574: RFC 1035 Domain Implementation and Specification November 1987
2575:
2576:
2577: 7.4. Using the cache
2578:
2579: In general, we expect a resolver to cache all data which it receives in
2580: responses since it may be useful in answering future client requests.
2581: However, there are several types of data which should not be cached:
2582:
2583: - When several RRs of the same type are available for a
2584: particular owner name, the resolver should either cache them
2585: all or none at all. When a response is truncated, and a
2586: resolver doesn't know whether it has a complete set, it should
2587: not cache a possibly partial set of RRs.
2588:
2589: - Cached data should never be used in preference to
2590: authoritative data, so if caching would cause this to happen
2591: the data should not be cached.
2592:
2593: - The results of an inverse query should not be cached.
2594:
2595: - The results of standard queries where the QNAME contains "*"
2596: labels if the data might be used to construct wildcards. The
2597: reason is that the cache does not necessarily contain existing
2598: RRs or zone boundary information which is necessary to
2599: restrict the application of the wildcard RRs.
2600:
2601: - RR data in responses of dubious reliability. When a resolver
2602: receives unsolicited responses or RR data other than that
2603: requested, it should discard it without caching it. The basic
2604: implication is that all sanity checks on a packet should be
2605: performed before any of it is cached.
2606:
2607: In a similar vein, when a resolver has a set of RRs for some name in a
2608: response, and wants to cache the RRs, it should check its cache for
2609: already existing RRs. Depending on the circumstances, either the data
2610: in the response or the cache is preferred, but the two should never be
2611: combined. If the data in the response is from authoritative data in the
2612: answer section, it is always preferred.
2613:
2614: 8. MAIL SUPPORT
2615:
2616: The domain system defines a standard for mapping mailboxes into domain
2617: names, and two methods for using the mailbox information to derive mail
2618: routing information. The first method is called mail exchange binding
2619: and the other method is mailbox binding. The mailbox encoding standard
2620: and mail exchange binding are part of the DNS official protocol, and are
2621: the recommended method for mail routing in the Internet. Mailbox
2622: binding is an experimental feature which is still under development and
2623: subject to change.
2624:
2625:
2626:
2627:
2628: Mockapetris [Page 47]
2629:
2630: RFC 1035 Domain Implementation and Specification November 1987
2631:
2632:
2633: The mailbox encoding standard assumes a mailbox name of the form
2634: "<local-part>@<mail-domain>". While the syntax allowed in each of these
2635: sections varies substantially between the various mail internets, the
2636: preferred syntax for the ARPA Internet is given in [RFC-822].
2637:
2638: The DNS encodes the <local-part> as a single label, and encodes the
2639: <mail-domain> as a domain name. The single label from the <local-part>
2640: is prefaced to the domain name from <mail-domain> to form the domain
2641: name corresponding to the mailbox. Thus the mailbox HOSTMASTER@SRI-
2642: NIC.ARPA is mapped into the domain name HOSTMASTER.SRI-NIC.ARPA. If the
2643: <local-part> contains dots or other special characters, its
2644: representation in a master file will require the use of backslash
2645: quoting to ensure that the domain name is properly encoded. For
2646: example, the mailbox [email protected] would be represented as
2647: Action\.domains.ISI.EDU.
2648:
2649: 8.1. Mail exchange binding
2650:
2651: Mail exchange binding uses the <mail-domain> part of a mailbox
2652: specification to determine where mail should be sent. The <local-part>
2653: is not even consulted. [RFC-974] specifies this method in detail, and
2654: should be consulted before attempting to use mail exchange support.
2655:
2656: One of the advantages of this method is that it decouples mail
2657: destination naming from the hosts used to support mail service, at the
2658: cost of another layer of indirection in the lookup function. However,
2659: the addition layer should eliminate the need for complicated "%", "!",
2660: etc encodings in <local-part>.
2661:
2662: The essence of the method is that the <mail-domain> is used as a domain
2663: name to locate type MX RRs which list hosts willing to accept mail for
2664: <mail-domain>, together with preference values which rank the hosts
2665: according to an order specified by the administrators for <mail-domain>.
2666:
2667: In this memo, the <mail-domain> ISI.EDU is used in examples, together
2668: with the hosts VENERA.ISI.EDU and VAXA.ISI.EDU as mail exchanges for
2669: ISI.EDU. If a mailer had a message for [email protected], it would
2670: route it by looking up MX RRs for ISI.EDU. The MX RRs at ISI.EDU name
2671: VENERA.ISI.EDU and VAXA.ISI.EDU, and type A queries can find the host
2672: addresses.
2673:
2674: 8.2. Mailbox binding (Experimental)
2675:
2676: In mailbox binding, the mailer uses the entire mail destination
2677: specification to construct a domain name. The encoded domain name for
2678: the mailbox is used as the QNAME field in a QTYPE=MAILB query.
2679:
2680: Several outcomes are possible for this query:
2681:
2682:
2683:
2684: Mockapetris [Page 48]
2685:
2686: RFC 1035 Domain Implementation and Specification November 1987
2687:
2688:
2689: 1. The query can return a name error indicating that the mailbox
2690: does not exist as a domain name.
2691:
2692: In the long term, this would indicate that the specified
2693: mailbox doesn't exist. However, until the use of mailbox
2694: binding is universal, this error condition should be
2695: interpreted to mean that the organization identified by the
2696: global part does not support mailbox binding. The
2697: appropriate procedure is to revert to exchange binding at
2698: this point.
2699:
2700: 2. The query can return a Mail Rename (MR) RR.
2701:
2702: The MR RR carries new mailbox specification in its RDATA
2703: field. The mailer should replace the old mailbox with the
2704: new one and retry the operation.
2705:
2706: 3. The query can return a MB RR.
2707:
2708: The MB RR carries a domain name for a host in its RDATA
2709: field. The mailer should deliver the message to that host
2710: via whatever protocol is applicable, e.g., b,SMTP.
2711:
2712: 4. The query can return one or more Mail Group (MG) RRs.
2713:
2714: This condition means that the mailbox was actually a mailing
2715: list or mail group, rather than a single mailbox. Each MG RR
2716: has a RDATA field that identifies a mailbox that is a member
2717: of the group. The mailer should deliver a copy of the
2718: message to each member.
2719:
2720: 5. The query can return a MB RR as well as one or more MG RRs.
2721:
2722: This condition means the the mailbox was actually a mailing
2723: list. The mailer can either deliver the message to the host
2724: specified by the MB RR, which will in turn do the delivery to
2725: all members, or the mailer can use the MG RRs to do the
2726: expansion itself.
2727:
2728: In any of these cases, the response may include a Mail Information
2729: (MINFO) RR. This RR is usually associated with a mail group, but is
2730: legal with a MB. The MINFO RR identifies two mailboxes. One of these
2731: identifies a responsible person for the original mailbox name. This
2732: mailbox should be used for requests to be added to a mail group, etc.
2733: The second mailbox name in the MINFO RR identifies a mailbox that should
2734: receive error messages for mail failures. This is particularly
2735: appropriate for mailing lists when errors in member names should be
2736: reported to a person other than the one who sends a message to the list.
2737:
2738:
2739:
2740: Mockapetris [Page 49]
2741:
2742: RFC 1035 Domain Implementation and Specification November 1987
2743:
2744:
2745: New fields may be added to this RR in the future.
2746:
2747:
2748: 9. REFERENCES and BIBLIOGRAPHY
2749:
2750: [Dyer 87] S. Dyer, F. Hsu, "Hesiod", Project Athena
2751: Technical Plan - Name Service, April 1987, version 1.9.
2752:
2753: Describes the fundamentals of the Hesiod name service.
2754:
2755: [IEN-116] J. Postel, "Internet Name Server", IEN-116,
2756: USC/Information Sciences Institute, August 1979.
2757:
2758: A name service obsoleted by the Domain Name System, but
2759: still in use.
2760:
2761: [Quarterman 86] J. Quarterman, and J. Hoskins, "Notable Computer Networks",
2762: Communications of the ACM, October 1986, volume 29, number
2763: 10.
2764:
2765: [RFC-742] K. Harrenstien, "NAME/FINGER", RFC-742, Network
2766: Information Center, SRI International, December 1977.
2767:
2768: [RFC-768] J. Postel, "User Datagram Protocol", RFC-768,
2769: USC/Information Sciences Institute, August 1980.
2770:
2771: [RFC-793] J. Postel, "Transmission Control Protocol", RFC-793,
2772: USC/Information Sciences Institute, September 1981.
2773:
2774: [RFC-799] D. Mills, "Internet Name Domains", RFC-799, COMSAT,
2775: September 1981.
2776:
2777: Suggests introduction of a hierarchy in place of a flat
2778: name space for the Internet.
2779:
2780: [RFC-805] J. Postel, "Computer Mail Meeting Notes", RFC-805,
2781: USC/Information Sciences Institute, February 1982.
2782:
2783: [RFC-810] E. Feinler, K. Harrenstien, Z. Su, and V. White, "DOD
2784: Internet Host Table Specification", RFC-810, Network
2785: Information Center, SRI International, March 1982.
2786:
2787: Obsolete. See RFC-952.
2788:
2789: [RFC-811] K. Harrenstien, V. White, and E. Feinler, "Hostnames
2790: Server", RFC-811, Network Information Center, SRI
2791: International, March 1982.
2792:
2793:
2794:
2795:
2796: Mockapetris [Page 50]
2797:
2798: RFC 1035 Domain Implementation and Specification November 1987
2799:
2800:
2801: Obsolete. See RFC-953.
2802:
2803: [RFC-812] K. Harrenstien, and V. White, "NICNAME/WHOIS", RFC-812,
2804: Network Information Center, SRI International, March
2805: 1982.
2806:
2807: [RFC-819] Z. Su, and J. Postel, "The Domain Naming Convention for
2808: Internet User Applications", RFC-819, Network
2809: Information Center, SRI International, August 1982.
2810:
2811: Early thoughts on the design of the domain system.
2812: Current implementation is completely different.
2813:
2814: [RFC-821] J. Postel, "Simple Mail Transfer Protocol", RFC-821,
2815: USC/Information Sciences Institute, August 1980.
2816:
2817: [RFC-830] Z. Su, "A Distributed System for Internet Name Service",
2818: RFC-830, Network Information Center, SRI International,
2819: October 1982.
2820:
2821: Early thoughts on the design of the domain system.
2822: Current implementation is completely different.
2823:
2824: [RFC-882] P. Mockapetris, "Domain names - Concepts and
2825: Facilities," RFC-882, USC/Information Sciences
2826: Institute, November 1983.
2827:
2828: Superceeded by this memo.
2829:
2830: [RFC-883] P. Mockapetris, "Domain names - Implementation and
2831: Specification," RFC-883, USC/Information Sciences
2832: Institute, November 1983.
2833:
2834: Superceeded by this memo.
2835:
2836: [RFC-920] J. Postel and J. Reynolds, "Domain Requirements",
2837: RFC-920, USC/Information Sciences Institute,
2838: October 1984.
2839:
2840: Explains the naming scheme for top level domains.
2841:
2842: [RFC-952] K. Harrenstien, M. Stahl, E. Feinler, "DoD Internet Host
2843: Table Specification", RFC-952, SRI, October 1985.
2844:
2845: Specifies the format of HOSTS.TXT, the host/address
2846: table replaced by the DNS.
2847:
2848:
2849:
2850:
2851:
2852: Mockapetris [Page 51]
2853:
2854: RFC 1035 Domain Implementation and Specification November 1987
2855:
2856:
2857: [RFC-953] K. Harrenstien, M. Stahl, E. Feinler, "HOSTNAME Server",
2858: RFC-953, SRI, October 1985.
2859:
2860: This RFC contains the official specification of the
2861: hostname server protocol, which is obsoleted by the DNS.
2862: This TCP based protocol accesses information stored in
2863: the RFC-952 format, and is used to obtain copies of the
2864: host table.
2865:
2866: [RFC-973] P. Mockapetris, "Domain System Changes and
2867: Observations", RFC-973, USC/Information Sciences
2868: Institute, January 1986.
2869:
2870: Describes changes to RFC-882 and RFC-883 and reasons for
2871: them.
2872:
2873: [RFC-974] C. Partridge, "Mail routing and the domain system",
2874: RFC-974, CSNET CIC BBN Labs, January 1986.
2875:
2876: Describes the transition from HOSTS.TXT based mail
2877: addressing to the more powerful MX system used with the
2878: domain system.
2879:
2880: [RFC-1001] NetBIOS Working Group, "Protocol standard for a NetBIOS
2881: service on a TCP/UDP transport: Concepts and Methods",
2882: RFC-1001, March 1987.
2883:
2884: This RFC and RFC-1002 are a preliminary design for
2885: NETBIOS on top of TCP/IP which proposes to base NetBIOS
2886: name service on top of the DNS.
2887:
2888: [RFC-1002] NetBIOS Working Group, "Protocol standard for a NetBIOS
2889: service on a TCP/UDP transport: Detailed
2890: Specifications", RFC-1002, March 1987.
2891:
2892: [RFC-1010] J. Reynolds, and J. Postel, "Assigned Numbers", RFC-1010,
2893: USC/Information Sciences Institute, May 1987.
2894:
2895: Contains socket numbers and mnemonics for host names,
2896: operating systems, etc.
2897:
2898: [RFC-1031] W. Lazear, "MILNET Name Domain Transition", RFC-1031,
2899: November 1987.
2900:
2901: Describes a plan for converting the MILNET to the DNS.
2902:
2903: [RFC-1032] M. Stahl, "Establishing a Domain - Guidelines for
2904: Administrators", RFC-1032, November 1987.
2905:
2906:
2907:
2908: Mockapetris [Page 52]
2909:
2910: RFC 1035 Domain Implementation and Specification November 1987
2911:
2912:
2913: Describes the registration policies used by the NIC to
2914: administer the top level domains and delegate subzones.
2915:
2916: [RFC-1033] M. Lottor, "Domain Administrators Operations Guide",
2917: RFC-1033, November 1987.
2918:
2919: A cookbook for domain administrators.
2920:
2921: [Solomon 82] M. Solomon, L. Landweber, and D. Neuhengen, "The CSNET
2922: Name Server", Computer Networks, vol 6, nr 3, July 1982.
2923:
2924: Describes a name service for CSNET which is independent
2925: from the DNS and DNS use in the CSNET.
2926:
2927:
2928:
2929:
2930:
2931:
2932:
2933:
2934:
2935:
2936:
2937:
2938:
2939:
2940:
2941:
2942:
2943:
2944:
2945:
2946:
2947:
2948:
2949:
2950:
2951:
2952:
2953:
2954:
2955:
2956:
2957:
2958:
2959:
2960:
2961:
2962:
2963:
2964: Mockapetris [Page 53]
2965:
2966: RFC 1035 Domain Implementation and Specification November 1987
2967:
2968:
2969: Index
2970:
2971: * 13
2972:
2973: ; 33, 35
2974:
2975: <character-string> 35
2976: <domain-name> 34
2977:
2978: @ 35
2979:
2980: \ 35
2981:
2982: A 12
2983:
2984: Byte order 8
2985:
2986: CH 13
2987: Character case 9
2988: CLASS 11
2989: CNAME 12
2990: Completion 42
2991: CS 13
2992:
2993: Hesiod 13
2994: HINFO 12
2995: HS 13
2996:
2997: IN 13
2998: IN-ADDR.ARPA domain 22
2999: Inverse queries 40
3000:
3001: Mailbox names 47
3002: MB 12
3003: MD 12
3004: MF 12
3005: MG 12
3006: MINFO 12
3007: MINIMUM 20
3008: MR 12
3009: MX 12
3010:
3011: NS 12
3012: NULL 12
3013:
3014: Port numbers 32
3015: Primary server 5
3016: PTR 12, 18
3017:
3018:
3019:
3020: Mockapetris [Page 54]
3021:
3022: RFC 1035 Domain Implementation and Specification November 1987
3023:
3024:
3025: QCLASS 13
3026: QTYPE 12
3027:
3028: RDATA 12
3029: RDLENGTH 11
3030:
3031: Secondary server 5
3032: SOA 12
3033: Stub resolvers 7
3034:
3035: TCP 32
3036: TXT 12
3037: TYPE 11
3038:
3039: UDP 32
3040:
3041: WKS 12
3042:
3043:
3044:
3045:
3046:
3047:
3048:
3049:
3050:
3051:
3052:
3053:
3054:
3055:
3056:
3057:
3058:
3059:
3060:
3061:
3062:
3063:
3064:
3065:
3066:
3067:
3068:
3069:
3070:
3071:
3072:
3073:
3074:
3075:
3076: Mockapetris [Page 55]
3077:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.