|
|
1.1 root 1:
2: Network Working Group P. Mockapetris
3: Request for Comments: 883 ISI
4: November 1983
5:
6: DOMAIN NAMES - IMPLEMENTATION and SPECIFICATION
7:
8: +-----------------------------------------------------+
9: | |
10: | This memo discusses the implementation of domain |
11: | name servers and resolvers, specifies the format of |
12: | transactions, and discusses the use of domain names |
13: | in the context of existing mail systems and other |
14: | network software. |
15: | |
16: | This memo assumes that the reader is familiar with |
17: | RFC 882, "Domain Names - Concepts and Facilities" |
18: | which discusses the basic principles of domain |
19: | names and their use. |
20: | |
21: | The algorithms and internal data structures used in |
22: | this memo are offered as suggestions rather than |
23: | requirements; implementers are free to design their |
24: | own structures so long as the same external |
25: | behavior is achieved. |
26: | |
27: +-----------------------------------------------------+
28:
29:
30:
31:
32: +-----------------------------------------------+
33: | |
34: | ***** WARNING ***** |
35: | |
36: | This RFC contains format specifications which |
37: | are preliminary and are included for purposes |
38: | of explanation only. Do not attempt to use |
39: | this information for actual implementations. |
40: | |
41: +-----------------------------------------------+
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57: Mockapetris [Page i]
58:
59:
60: RFC 883 November 1983
61: Domain Names - Implementation and Specification
62:
63:
64: TABLE OF CONTENTS
65: INTRODUCTION........................................................3
66: Overview.........................................................3
67: Implementation components........................................2
68: Conventions......................................................6
69: Design philosophy................................................8
70: NAME SERVER TRANSACTIONS...........................................11
71: Introduction....................................................11
72: Query and response transport....................................11
73: Overall message format..........................................13
74: The contents of standard queries and responses..................15
75: Standard query and response example.............................15
76: The contents of inverse queries and responses...................17
77: Inverse query and response example..............................18
78: Completion queries and responses................................19
79: Completion query and response example...........................22
80: Recursive Name Service..........................................24
81: Header section format...........................................26
82: Question section format.........................................29
83: Resource record format..........................................30
84: Domain name representation and compression......................31
85: Organization of the Shared database.............................33
86: Query processing................................................36
87: Inverse query processing........................................37
88: Completion query processing.....................................38
89: NAME SERVER MAINTENANCE............................................39
90: Introduction....................................................39
91: Conceptual model of maintenance operations......................39
92: Name server data structures and top level logic.................41
93: Name server file loading........................................43
94: Name server file loading example................................45
95: Name server remote zone transfer................................47
96: RESOLVER ALGORITHMS................................................50
97: Operations......................................................50
98: DOMAIN SUPPORT FOR MAIL............................................52
99: Introduction....................................................52
100: Agent binding...................................................53
101: Mailbox binding.................................................54
102: Appendix 1 - Domain Name Syntax Specification......................56
103: Appendix 2 - Field formats and encodings...........................57
104: TYPE values.....................................................57
105: QTYPE values....................................................57
106: CLASS values....................................................58
107: QCLASS values...................................................58
108: Standard resource record formats................................59
109: Appendix 3 - Internet specific field formats and operations........67
110: REFERENCES and BIBLIOGRAPHY........................................72
111: INDEX..............................................................73
112:
113:
114:
115: Mockapetris [Page ii]
116:
117:
118: RFC 883 November 1983
119: Domain Names - Implementation and Specification
120:
121:
122: INTRODUCTION
123:
124: Overview
125:
126: The goal of domain names is to provide a mechanism for naming
127: resources in such a way that the names are usable in different
128: hosts, networks, protocol families, internets, and administrative
129: organizations.
130:
131: From the user's point of view, domain names are useful as
132: arguments to a local agent, called a resolver, which retrieves
133: information associated with the domain name. Thus a user might
134: ask for the host address or mail information associated with a
135: particular domain name. To enable the user to request a
136: particular type of information, an appropriate query type is
137: passed to the resolver with the domain name. To the user, the
138: domain tree is a single information space.
139:
140: From the resolver's point of view, the database that makes up the
141: domain space is distributed among various name servers. Different
142: parts of the domain space are stored in different name servers,
143: although a particular data item will usually be stored redundantly
144: in two or more name servers. The resolver starts with knowledge
145: of at least one name server. When the resolver processes a user
146: query it asks a known name server for the information; in return,
147: the resolver either receives the desired information or a referral
148: to another name server. Using these referrals, resolvers learn
149: the identities and contents of other name servers. Resolvers are
150: responsible for dealing with the distribution of the domain space
151: and dealing with the effects of name server failure by consulting
152: redundant databases in other servers.
153:
154: Name servers manage two kinds of data. The first kind of data
155: held in sets called zones; each zone is the complete database for
156: a particular subtree of the domain space. This data is called
157: authoritative. A name server periodically checks to make sure
158: that its zones are up to date, and if not obtains a new copy of
159: updated zones from master files stored locally or in another name
160: server. The second kind of data is cached data which was acquired
161: by a local resolver. This data may be incomplete but improves the
162: performance of the retrieval process when non-local data is
163: repeatedly accessed. Cached data is eventually discarded by a
164: timeout mechanism.
165:
166: This functional structure isolates the problems of user interface,
167: failure recovery, and distribution in the resolvers and isolates
168: the database update and refresh problems in the name servers.
169:
170:
171:
172:
173: Mockapetris [Page 1]
174:
175:
176: RFC 883 November 1983
177: Domain Names - Implementation and Specification
178:
179:
180: Implementation components
181:
182: A host can participate in the domain name system in a number of
183: ways, depending on whether the host runs programs that retrieve
184: information from the domain system, name servers that answer
185: queries from other hosts, or various combinations of both
186: functions. The simplest, and perhaps most typical, configuration
187: is shown below:
188:
189: Local Host | Foreign
190: |
191: +---------+ +----------+ | +--------+
192: | | user queries | |queries | | |
193: | User |-------------->| |---------|->|Foreign |
194: | Program | | Resolver | | | Name |
195: | |<--------------| |<--------|--| Server |
196: | | user responses| |responses| | |
197: +---------+ +----------+ | +--------+
198: | A |
199: cache additions | | references |
200: V | |
201: +----------+ |
202: | database | |
203: +----------+ |
204:
205: User programs interact with the domain name space through
206: resolvers; the format of user queries and user responses is
207: specific to the host and its operating system. User queries will
208: typically be operating system calls, and the resolver and its
209: database will be part of the host operating system. Less capable
210: hosts may choose to implement the resolver as a subroutine to be
211: linked in with every program that needs its services.
212:
213: Resolvers answer user queries with information they acquire via
214: queries to foreign name servers, and may also cache or reference
215: domain information in the local database.
216:
217: Note that the resolver may have to make several queries to several
218: different foreign name servers to answer a particular user query,
219: and hence the resolution of a user query may involve several
220: network accesses and an arbitrary amount of time. The queries to
221: foreign name servers and the corresponding responses have a
222: standard format described in this memo, and may be datagrams.
223:
224:
225:
226:
227:
228:
229:
230:
231: Mockapetris [Page 2]
232:
233:
234: RFC 883 November 1983
235: Domain Names - Implementation and Specification
236:
237:
238: Depending on its capabilities, a name server could be a stand
239: alone program on a dedicated machine or a process or processes on
240: a large timeshared host. A simple configuration might be:
241:
242: Local Host | Foreign
243: |
244: +---------+ |
245: / /| |
246: +---------+ | +----------+ | +--------+
247: | | | | |responses| | |
248: | | | | Name |---------|->|Foreign |
249: | Master |-------------->| Server | | |Resolver|
250: | files | | | |<--------|--| |
251: | |/ | | queries | +--------+
252: +---------+ +----------+ |
253:
254: Here the name server acquires information about one or more zones
255: by reading master files from its local file system, and answers
256: queries about those zones that arrive from foreign resolvers.
257:
258: A more sophisticated name server might acquire zones from foreign
259: name servers as well as local master files. This configuration is
260: shown below:
261:
262: Local Host | Foreign
263: |
264: +---------+ |
265: / /| |
266: +---------+ | +----------+ | +--------+
267: | | | | |responses| | |
268: | | | | Name |---------|->|Foreign |
269: | Master |-------------->| Server | | |Resolver|
270: | files | | | |<--------|--| |
271: | |/ | | queries | +--------+
272: +---------+ +----------+ |
273: A |maintenance | +--------+
274: | \------------|->| |
275: | queries | |Foreign |
276: | | | Name |
277: \------------------|--| Server |
278: maintenance responses | +--------+
279:
280: In this configuration, the name server periodically establishes a
281: virtual circuit to a foreign name server to acquire a copy of a
282: zone or to check that an existing copy has not changed. The
283: messages sent for these maintenance activities follow the same
284: form as queries and responses, but the message sequences are
285: somewhat different.
286:
287:
288:
289: Mockapetris [Page 3]
290:
291:
292: RFC 883 November 1983
293: Domain Names - Implementation and Specification
294:
295:
296: The information flow in a host that supports all aspects of the
297: domain name system is shown below:
298:
299: Local Host | Foreign
300: |
301: +---------+ +----------+ | +--------+
302: | | user queries | |queries | | |
303: | User |-------------->| |---------|->|Foreign |
304: | Program | | Resolver | | | Name |
305: | |<--------------| |<--------|--| Server |
306: | | user responses| |responses| | |
307: +---------+ +----------+ | +--------+
308: | A |
309: cache additions | | references |
310: V | |
311: +----------+ |
312: | Shared | |
313: | database | |
314: +----------+ |
315: A | |
316: +---------+ refreshes | | references |
317: / /| | V |
318: +---------+ | +----------+ | +--------+
319: | | | | |responses| | |
320: | | | | Name |---------|->|Foreign |
321: | Master |-------------->| Server | | |Resolver|
322: | files | | | |<--------|--| |
323: | |/ | | queries | +--------+
324: +---------+ +----------+ |
325: A |maintenance | +--------+
326: | \------------|->| |
327: | queries | |Foreign |
328: | | | Name |
329: \------------------|--| Server |
330: maintenance responses | +--------+
331:
332: The shared database holds domain space data for the local name
333: server and resolver. The contents of the shared database will
334: typically be a mixture of authoritative data maintained by the
335: periodic refresh operations of the name server and cached data
336: from previous resolver requests. The structure of the domain data
337: and the necessity for synchronization between name servers and
338: resolvers imply the general characteristics of this database, but
339: the actual format is up to the local implementer. This memo
340: suggests a multiple tree format.
341:
342:
343:
344:
345:
346:
347: Mockapetris [Page 4]
348:
349:
350: RFC 883 November 1983
351: Domain Names - Implementation and Specification
352:
353:
354: This memo divides the implementation discussion into sections:
355:
356: NAME SERVER TRANSACTIONS, which discusses the formats for name
357: servers queries and the corresponding responses.
358:
359: NAME SERVER MAINTENANCE, which discusses strategies,
360: algorithms, and formats for maintaining the data residing in
361: name servers. These services periodically refresh the local
362: copies of zones that originate in other hosts.
363:
364: RESOLVER ALGORITHMS, which discusses the internal structure of
365: resolvers. This section also discusses data base sharing
366: between a name server and a resolver on the same host.
367:
368: DOMAIN SUPPORT FOR MAIL, which discusses the use of the domain
369: system to support mail transfer.
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405: Mockapetris [Page 5]
406:
407:
408: RFC 883 November 1983
409: Domain Names - Implementation and Specification
410:
411:
412: Conventions
413:
414: The domain system has several conventions dealing with low-level,
415: but fundamental, issues. While the implementer is free to violate
416: these conventions WITHIN HIS OWN SYSTEM, he must observe these
417: conventions in ALL behavior observed from other hosts.
418:
419: ********** Data Transmission Order **********
420:
421: The order of transmission of the header and data described in this
422: document is resolved to the octet level. Whenever a diagram shows
423: a group of octets, the order of transmission of those octets is
424: the normal order in which they are read in English. For example,
425: in the following diagram the octets are transmitted in the order
426: they are numbered.
427:
428:
429: 0 1
430: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
431: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
432: | 1 | 2 |
433: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
434: | 3 | 4 |
435: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
436: | 5 | 6 |
437: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
438:
439: Transmission Order of Bytes
440:
441: Whenever an octet represents a numeric quantity the left most bit
442: in the diagram is the high order or most significant bit. That
443: is, the bit labeled 0 is the most significant bit. For example,
444: the following diagram represents the value 170 (decimal).
445:
446:
447: 0 1 2 3 4 5 6 7
448: +-+-+-+-+-+-+-+-+
449: |1 0 1 0 1 0 1 0|
450: +-+-+-+-+-+-+-+-+
451:
452: Significance of Bits
453:
454: Similarly, whenever a multi-octet field represents a numeric
455: quantity the left most bit of the whole field is the most
456: significant bit. When a multi-octet quantity is transmitted the
457: most significant octet is transmitted first.
458:
459:
460:
461:
462:
463: Mockapetris [Page 6]
464:
465:
466: RFC 883 November 1983
467: Domain Names - Implementation and Specification
468:
469:
470: ********** Character Case **********
471:
472: All comparisons between character strings (e.g. labels, domain
473: names, etc.) are done in a case-insensitive manner.
474:
475: When data enters the domain system, its original case should be
476: preserved whenever possible. In certain circumstances this cannot
477: be done. For example, if two domain names x.y and X.Y are entered
478: into the domain database, they are interpreted as the same name,
479: and hence may have a single representation. The basic rule is
480: that case can be discarded only when data is used to define
481: structure in a database, and two names are identical when compared
482: in a case insensitive manner.
483:
484: Loss of case sensitive data must be minimized. Thus while data
485: for x.y and X.Y may both be stored under x.y, data for a.x and B.X
486: can be stored as a.x and B.x, but not A.x, A.X, b.x, or b.X. In
487: general, this prevents the first component of a domain name from
488: loss of case information.
489:
490: Systems administrators who enter data into the domain database
491: should take care to represent the data they supply to the domain
492: system in a case-consistent manner if their system is
493: case-sensitive. The data distribution system in the domain system
494: will ensure that consistent representations are preserved.
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521: Mockapetris [Page 7]
522:
523:
524: RFC 883 November 1983
525: Domain Names - Implementation and Specification
526:
527:
528: Design philosophy
529:
530: The design presented in this memo attempts to provide a base which
531: will be suitable for several existing networks. An equally
532: important goal is to provide these services within a framework
533: that is capable of adjustment to fit the evolution of services in
534: early clients as well as to accommodate new networks.
535:
536: Since it is impossible to predict the course of these
537: developments, the domain system attempts to provide for evolution
538: in the form of an extensible framework. This section describes
539: the areas in which we expect to see immediate evolution.
540:
541: DEFINING THE DATABASE
542:
543: This memo defines methods for partitioning the database and data
544: for host names, host addresses, gateway information, and mail
545: support. Experience with this system will provide guidance for
546: future additions.
547:
548: While the present system allows for many new RR types, classes,
549: etc., we feel that it is more important to get the basic services
550: in operation than to cover an exhaustive set of information.
551: Hence we have limited the data types to those we felt were
552: essential, and would caution designers to avoid implementations
553: which are based on the number of existing types and classes.
554: Extensibility in this area is very important.
555:
556: While the domain system provides techniques for partitioning the
557: database, policies for administrating the orderly connection of
558: separate domains and guidelines for constructing the data that
559: makes up a particular domain will be equally important to the
560: success of the system. Unfortunately, we feel that experience
561: with prototype systems will be necessary before this question can
562: be properly addressed. Thus while this memo has minimal
563: discussion of these issues, it is a critical area for development.
564:
565: TYING TOGETHER INTERNETS
566:
567: Although it is very difficult to characterize the types of
568: networks, protocols, and applications that will be clients of the
569: domain system, it is very obvious that some of these applications
570: will cross the boundaries of network and protocol. At the very
571: least, mail is such a service.
572:
573: Attempts to unify two such systems must deal with two major
574: problems:
575:
576: 1. Differing formats for environment sensitive data. For example,
577:
578:
579: Mockapetris [Page 8]
580:
581:
582: RFC 883 November 1983
583: Domain Names - Implementation and Specification
584:
585:
586: network addresses vary in format, and it is unreasonable to
587: expect to enforce consistent conventions.
588:
589: 2. Connectivity may require intermediaries. For example, it is a
590: frequent occurence that mail is sent between hosts that share
591: no common protocol.
592:
593: The domain system acknowledges that these are very difficult
594: problems, and attempts to deal with both problems through its
595: CLASS mechanism:
596:
597: 1. The CLASS field in RRs allows data to be tagged so that all
598: programs in the domain system can identify the format in use.
599:
600: 2. The CLASS field allows the requestor to identify the format of
601: data which can be understood by the requestor.
602:
603: 3. The CLASS field guides the search for the requested data.
604:
605: The last point is central to our approach. When a query crosses
606: protocol boundaries, it must be guided though agents capable of
607: performing whatever translation is required. For example, when a
608: mailer wants to identify the location of a mailbox in a portion of
609: the domain system that doesn't have a compatible protocol, the
610: query must be guided to a name server that can cross the boundary
611: itself or form one link in a chain that can span the differences.
612:
613: If query and response transport were the only problem, then this
614: sort of problem could be dealt with in the name servers
615: themselves. However, the applications that will use domain
616: service have similar problems. For example, mail may need to be
617: directed through mail gateways, and the characteristics of one of
618: the environments may not permit frequent connectivity between name
619: servers in all environments.
620:
621: These problems suggest that connectivity will be achieved through
622: a variety of measures:
623:
624: Translation name servers that act as relays between different
625: protocols.
626:
627: Translation application servers that translate application
628: level transactions.
629:
630: Default database entries that route traffic through application
631: level forwarders in ways that depend on the class of the
632: requestor.
633:
634: While this approach seems best given our current understanding of
635:
636:
637: Mockapetris [Page 9]
638:
639:
640: RFC 883 November 1983
641: Domain Names - Implementation and Specification
642:
643:
644: the problem, we realize that the approach of using resource data
645: that transcends class may be appropriate in future designs or
646: applications. By not defining class to be directly related to
647: protocol, network, etc., we feel that such services could be added
648: by defining a new "universal" class, while the present use of
649: class will provide immediate service.
650:
651: This problem requires more thought and experience before solutions
652: can be discovered. The concepts of CLASS, recursive servers and
653: other mechanisms are intended as tools for acquiring experience
654: and not as final solutions.
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695: Mockapetris [Page 10]
696:
697:
698: RFC 883 November 1983
699: Domain Names - Implementation and Specification
700:
701:
702: NAME SERVER TRANSACTIONS
703:
704: Introduction
705:
706: The primary purpose of name servers is to receive queries from
707: resolvers and return responses. The overall model of this service
708: is that a program (typically a resolver) asks the name server
709: questions (queries) and gets responses that either answer the
710: question or refer the questioner to another name server. Other
711: functions related to name server database maintenance use similar
712: procedures and formats and are discussed in a section later in
713: this memo.
714:
715: There are three kinds of queries presently defined:
716:
717: 1. Standard queries that ask for a specified resource attached
718: to a given domain name.
719:
720: 2. Inverse queries that specify a resource and ask for a domain
721: name that possesses that resource.
722:
723: 3. Completion queries that specify a partial domain name and a
724: target domain and ask that the partial domain name be
725: completed with a domain name close to the target domain.
726:
727: This memo uses an unqualified reference to queries to refer to
728: either all queries or standard queries when the context is clear.
729:
730: Query and response transport
731:
732: Name servers and resolvers use a single message format for all
733: communications. The message format consists of a variable-length
734: octet string which includes binary values.
735:
736: The messages used in the domain system are designed so that they
737: can be carried using either datagrams or virtual circuits. To
738: accommodate the datagram style, all responses carry the query as
739: part of the response.
740:
741: While the specification allows datagrams to be used in any
742: context, some activities are ill suited to datagram use. For
743: example, maintenance transactions and recursive queries typically
744: require the error control of virtual circuits. Thus datagram use
745: should be restricted to simple queries.
746:
747: The domain system assumes that a datagram service provides:
748:
749: 1. A non-reliable (i.e. best effort) method of transporting a
750: message of up to 512 octets.
751:
752:
753: Mockapetris [Page 11]
754:
755:
756: RFC 883 November 1983
757: Domain Names - Implementation and Specification
758:
759:
760: Hence datagram messages are limited to 512 octets. If a
761: datagram message would exceed 512 octets, it is truncated
762: and a truncation flag is set in its header.
763:
764: 2. A message size that gives the number of octets in the
765: datagram.
766:
767: The main implications for programs accessing name servers via
768: datagrams are:
769:
770: 1. Datagrams should not be used for maintenance transactions
771: and recursive queries.
772:
773: 2. Since datagrams may be lost, the originator of a query must
774: perform error recovery (such as retransmissions) as
775: appropriate.
776:
777: 3. Since network or host delay may cause retransmission when a
778: datagram has not been lost, the originator of a query must
779: be ready to deal with duplicate responses.
780:
781: The domain system assumes that a virtual circuit service provides:
782:
783: 1. A reliable method of transmitting a message of up to 65535
784: octets.
785:
786: 2. A message size that gives the number of octets in the
787: message.
788:
789: If the virtual circuit service does not provide for message
790: boundary detection or limits transmission size to less than
791: 65535 octets, then messages are prefaced with an unsigned 16
792: bit length field and broken up into separate transmissions
793: as required. The length field is only prefaced on the first
794: message. This technique is used for TCP virtual circuits.
795:
796: 3. Multiple messages may be sent over a virtual circuit.
797:
798: 4. A method for closing a virtual circuit.
799:
800: 5. A method for detecting that the other party has requested
801: that the virtual circuit be closed.
802:
803: The main implications for programs accessing name servers via
804: virtual circuits are:
805:
806: 1. Either end of a virtual circuit may initiate a close when
807: there is no activity in progress. The other end should
808: comply.
809:
810:
811: Mockapetris [Page 12]
812:
813:
814: RFC 883 November 1983
815: Domain Names - Implementation and Specification
816:
817:
818: The decision to initiate a close is a matter of individual
819: site policy; some name servers may leave a virtual circuit
820: open for an indeterminate period following a query to allow
821: for subsequent queries; other name servers may choose to
822: initiate a close following the completion of the first query
823: on a virtual circuit. Of course, name servers should not
824: close the virtual circuit in the midst of a multiple message
825: stream used for zone transfer.
826:
827: 2. Since network delay may cause one end to erroneously believe
828: that no activity is in progress, a program which receives a
829: virtual circuit close while a query is in progress should
830: close the virtual circuit and resubmit the query on a new
831: virtual circuit.
832:
833: All messages may use a compression scheme to reduce the space
834: consumed by repetitive domain names. The use of the compression
835: scheme is optional for the sender of a message, but all receivers
836: must be capable of decoding compressed domain names.
837:
838: Overall message format
839:
840: All messages sent by the domain system are divided into 5 sections
841: (some of which are empty in certain cases) shown below:
842:
843: +---------------------+
844: | Header |
845: +---------------------+
846: | Question | the question for the name server
847: +---------------------+
848: | Answer | answering resource records (RRs)
849: +---------------------+
850: | Authority | RRs pointing toward an authority
851: +---------------------+
852: | Additional | RRs holding pertinent information
853: +---------------------+
854:
855: The header section is always present. The header includes fields
856: that specify which of the remaining sections are present, and also
857: specify whether the message is a query, inverse query, completion
858: query, or response.
859:
860: The question section contains fields that describe a question to a
861: name server. These fields are a query type (QTYPE), a query class
862: (QCLASS), and a query domain name (QNAME).
863:
864: The last three sections have the same format: a possibly empty
865: list of concatenated resource records (RRs). The answer section
866: contains RRs that answer the question; the authority section
867:
868:
869: Mockapetris [Page 13]
870:
871:
872: RFC 883 November 1983
873: Domain Names - Implementation and Specification
874:
875:
876: contains RRs that point toward an authoritative name server; the
877: additional records section contains RRs which relate to the query,
878: but are not strictly answers for the question.
879:
880: The next two sections of this memo illustrate the use of these
881: message sections through examples; a detailed discussion of data
882: formats follows the examples.
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927: Mockapetris [Page 14]
928:
929:
930: RFC 883 November 1983
931: Domain Names - Implementation and Specification
932:
933:
934: The contents of standard queries and responses
935:
936: When a name server processes a standard query, it first determines
937: whether it is an authority for the domain name specified in the
938: query.
939:
940: If the name server is an authority, it returns either:
941:
942: 1. the specified resource information
943:
944: 2. an indication that the specified name does not exist
945:
946: 3. an indication that the requested resource information does
947: not exist
948:
949: If the name server is not an authority for the specified name, it
950: returns whatever relevant resource information it has along with
951: resource records that the requesting resolver can use to locate an
952: authoritative name server.
953:
954: Standard query and response example
955:
956: The overall structure of a query for retrieving information for
957: Internet mail for domain F.ISI.ARPA is shown below:
958:
959: +-----------------------------------------+
960: Header | OPCODE=QUERY, ID=2304 |
961: +-----------------------------------------+
962: Question |QTYPE=MAILA, QCLASS=IN, QNAME=F.ISI.ARPA |
963: +-----------------------------------------+
964: Answer | <empty> |
965: +-----------------------------------------+
966: Authority | <empty> |
967: +-----------------------------------------+
968: Additional | <empty> |
969: +-----------------------------------------+
970:
971: The header includes an opcode field that specifies that this
972: datagram is a query, and an ID field that will be used to
973: associate replies with the original query. (Some additional
974: header fields have been omitted for clarity.) The question
975: section specifies that the type of the query is for mail agent
976: information, that only ARPA Internet information is to be
977: considered, and that the domain name of interest is F.ISI.ARPA.
978: The remaining sections are empty, and would not use any octets in
979: a real query.
980:
981:
982:
983:
984:
985: Mockapetris [Page 15]
986:
987:
988: RFC 883 November 1983
989: Domain Names - Implementation and Specification
990:
991:
992: One possible response to this query might be:
993:
994: +-----------------------------------------+
995: Header | OPCODE=RESPONSE, ID=2304 |
996: +-----------------------------------------+
997: Question |QTYPE=MAILA, QCLASS=IN, QNAME=F.ISI.ARPA |
998: +-----------------------------------------+
999: Answer | <empty> |
1000: +-----------------------------------------+
1001: Authority | ARPA NS IN A.ISI.ARPA |
1002: | ------- |
1003: | ARPA NS IN F.ISI.ARPA |
1004: +-----------------------------------------+
1005: Additional | F.ISI.ARPA A IN 10.2.0.52 |
1006: | ------- |
1007: | A.ISI.ARPA A IN 10.1.0.22 |
1008: +-----------------------------------------+
1009:
1010: This type of response would be returned by a name server that was
1011: not an authority for the domain name F.ISI.ARPA. The header field
1012: specifies that the datagram is a response to a query with an ID of
1013: 2304. The question section is copied from the question section in
1014: the query datagram.
1015:
1016: The answer section is empty because the name server did not have
1017: any information that would answer the query. (Name servers may
1018: happen to have cached information even if they are not
1019: authoritative for the query.)
1020:
1021: The best that this name server could do was to pass back
1022: information for the domain ARPA. The authority section specifies
1023: two name servers for the domain ARPA using the Internet family:
1024: A.ISI.ARPA and F.ISI.ARPA. Note that it is merely a coincidence
1025: that F.ISI.ARPA is a name server for ARPA as well as the subject
1026: of the query.
1027:
1028: In this case, the name server included in the additional records
1029: section the Internet addresses for the two hosts specified in the
1030: authority section. Such additional data is almost always
1031: available.
1032:
1033: Given this response, the process that originally sent the query
1034: might resend the query to the name server on A.ISI.ARPA, with a
1035: new ID of 2305.
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043: Mockapetris [Page 16]
1044:
1045:
1046: RFC 883 November 1983
1047: Domain Names - Implementation and Specification
1048:
1049:
1050: The name server on A.ISI.ARPA might return a response:
1051:
1052: +-----------------------------------------+
1053: Header | OPCODE=RESPONSE, ID=2305 |
1054: +-----------------------------------------+
1055: Question |QTYPE=MAILA, QCLASS=IN, QNAME=F.ISI.ARPA |
1056: +-----------------------------------------+
1057: Answer | F.ISI.ARPA MD IN F.ISI.ARPA |
1058: | ------- |
1059: | F.ISI.ARPA MF IN A.ISI.ARPA |
1060: +-----------------------------------------+
1061: Authority | <empty> |
1062: +-----------------------------------------+
1063: Additional | F.ISI.ARPA A IN 10.2.0.52 |
1064: | ------- |
1065: | A.ISI.ARPA A IN 10.1.0.22 |
1066: +-----------------------------------------+
1067:
1068: This query was directed to an authoritative name server, and hence
1069: the response includes an answer but no authority records. In this
1070: case, the answer section specifies that mail for F.ISI.ARPA can
1071: either be delivered to F.ISI.ARPA or forwarded to A.ISI.ARPA. The
1072: additional records section specifies the Internet addresses of
1073: these hosts.
1074:
1075: The contents of inverse queries and responses
1076:
1077: Inverse queries reverse the mappings performed by standard query
1078: operations; while a standard query maps a domain name to a
1079: resource, an inverse query maps a resource to a domain name. For
1080: example, a standard query might bind a domain name to a host
1081: address; the corresponding inverse query binds the host address to
1082: a domain name.
1083:
1084: Inverse query mappings are not guaranteed to be unique or complete
1085: because the domain system does not have any internal mechanism for
1086: determining authority from resource records that parallels the
1087: capability for determining authority as a function of domain name.
1088: In general, resolvers will be configured to direct inverse queries
1089: to a name server which is known to have the desired information.
1090:
1091: Name servers are not required to support any form of inverse
1092: queries; it is anticipated that most name servers will support
1093: address to domain name conversions, but no other inverse mappings.
1094: If a name server receives an inverse query that it does not
1095: support, it returns an error response with the "Not Implemented"
1096: error set in the header. While inverse query support is optional,
1097: all name servers must be at least able to return the error
1098: response.
1099:
1100:
1101: Mockapetris [Page 17]
1102:
1103:
1104: RFC 883 November 1983
1105: Domain Names - Implementation and Specification
1106:
1107:
1108: When a name server processes an inverse query, it either returns:
1109:
1110: 1. zero, one, or multiple domain names for the specified
1111: resource
1112:
1113: 2. an error code indicating that the name server doesn't
1114: support inverse mapping of the specified resource type.
1115:
1116: Inverse query and response example
1117:
1118: The overall structure of an inverse query for retrieving the
1119: domain name that corresponds to Internet address 10.2.0.52 is
1120: shown below:
1121:
1122: +-----------------------------------------+
1123: Header | OPCODE=IQUERY, ID=997 |
1124: +-----------------------------------------+
1125: Question | <empty> |
1126: +-----------------------------------------+
1127: Answer | <anyname> A IN 10.2.0.52 |
1128: +-----------------------------------------+
1129: Authority | <empty> |
1130: +-----------------------------------------+
1131: Additional | <empty> |
1132: +-----------------------------------------+
1133:
1134: This query asks for a question whose answer is the Internet style
1135: address 10.2.0.52. Since the owner name is not known, any domain
1136: name can be used as a placeholder (and is ignored). The response
1137: to this query might be:
1138:
1139: +-----------------------------------------+
1140: Header | OPCODE=RESPONSE, ID=997 |
1141: +-----------------------------------------+
1142: Question | QTYPE=A, QCLASS=IN, QNAME=F.ISI.ARPA |
1143: +-----------------------------------------+
1144: Answer | F.ISI.ARPA A IN 10.2.0.52 |
1145: +-----------------------------------------+
1146: Authority | <empty> |
1147: +-----------------------------------------+
1148: Additional | <empty> |
1149: +-----------------------------------------+
1150:
1151: Note that the QTYPE in a response to an inverse query is the same
1152: as the TYPE field in the answer section of the inverse query.
1153: Responses to inverse queries may contain multiple questions when
1154: the inverse is not unique.
1155:
1156:
1157:
1158:
1159: Mockapetris [Page 18]
1160:
1161:
1162: RFC 883 November 1983
1163: Domain Names - Implementation and Specification
1164:
1165:
1166: Completion queries and responses
1167:
1168: Completion queries ask a name server to complete a partial domain
1169: name and return a set of RRs whose domain names meet a specified
1170: set of criteria for "closeness" to the partial input. This type
1171: of query can provide a local shorthand for domain names or command
1172: completion similar to that in TOPS-20.
1173:
1174: Implementation of completion query processing is optional in a
1175: name server. However, a name server must return a "Not
1176: Implemented" (NI) error response if it does not support
1177: completion.
1178:
1179: The arguments in a completion query specify:
1180:
1181: 1. A type in QTYPE that specifies the type of the desired name.
1182: The type is used to restrict the type of RRs which will match
1183: the partial input so that completion queries can be used for
1184: mailbox names, host names, or any other type of RR in the
1185: domain system without concern for matches to the wrong type of
1186: resource.
1187:
1188: 2. A class in QCLASS which specifies the desired class of the RR.
1189:
1190: 3. A partial domain name that gives the input to be completed.
1191: All returned RRs will begin with the partial string. The
1192: search process first looks for names which qualify under the
1193: assumption that the partial string ends with a full label
1194: ("whole label match"); if this search fails, the search
1195: continues under the assumption that the last label in the
1196: partial sting may be an incomplete label ("partial label
1197: match"). For example, if the partial string "Smith" was used
1198: in a mailbox completion, it would match [email protected] in
1199: preference to [email protected].
1200:
1201: The partial name is supplied by the user through the user
1202: program that is using domain services. For example, if the
1203: user program is a mail handler, the string might be "Mockap"
1204: which the user intends as a shorthand for the mailbox
1205: [email protected]; if the user program is TELNET, the user
1206: might specify "F" for F.ISI.ARPA.
1207:
1208: In order to make parsing of messages consistent, the partial
1209: name is supplied in domain name format (i.e. a sequence of
1210: labels terminated with a zero length octet). However, the
1211: trailing root label is ignored during matching.
1212:
1213: 4. A target domain name which specifies the domain which is to be
1214: examined for matches. This name is specified in the additional
1215:
1216:
1217: Mockapetris [Page 19]
1218:
1219:
1220: RFC 883 November 1983
1221: Domain Names - Implementation and Specification
1222:
1223:
1224: section using a NULL RR. All returned names will end with the
1225: target name.
1226:
1227: The user program which constructs the query uses the target
1228: name to restrict the search. For example, user programs
1229: running at ISI might restrict completion to names that end in
1230: ISI.ARPA; user programs running at MIT might restrict
1231: completion to the domain MIT.ARPA.
1232:
1233: The target domain name is also used by the resolver to
1234: determine the name server which should be used to process the
1235: query. In general, queries should be directed to a name server
1236: that is authoritative for the target domain name. User
1237: programs which wish to provide completion for a more than one
1238: target can issue multiple completion queries, each directed at
1239: a different target. Selection of the target name and the
1240: number of searches will depend on the goals of the user
1241: program.
1242:
1243: 5. An opcode for the query. The two types of completion queries
1244: are "Completion Query - Multiple", or CQUERYM, which asks for
1245: all RRs which could complete the specified input, and
1246: "Completion Query - Unique", or CQUERYU, which asks for the
1247: "best" completion.
1248:
1249: CQUERYM is used by user programs which want to know if
1250: ambiguities exist or wants to do its own determinations as to
1251: the best choice of the available candidates.
1252:
1253: CQUERYU is used by user programs which either do not wish to
1254: deal with multiple choices or are willing to use the closeness
1255: criteria used by CQUERYU to select the best match.
1256:
1257: When a name server receives either completion query, it first
1258: looks for RRs that begin (on the left) with the same labels as are
1259: found in QNAME (with the root deleted), and which match the QTYPE
1260: and QCLASS. This search is called "whole label" matching. If one
1261: or more hits are found the name server either returns all of the
1262: hits (CQUERYM) or uses the closeness criteria described below to
1263: eliminate all but one of the matches (CQUERYU).
1264:
1265: If the whole label match fails to find any candidates, then the
1266: name server assumes that the rightmost label of QNAME (after root
1267: deletion) is not a complete label, and looks for candidates that
1268: would match if characters were added (on the right) to the
1269: rightmost label of QNAME. If one or more hits are found the name
1270: server either returns all of the hits (CQUERYM) or uses the
1271: closeness criteria described below to eliminate all but one of the
1272: matches (CQUERYU).
1273:
1274:
1275: Mockapetris [Page 20]
1276:
1277:
1278: RFC 883 November 1983
1279: Domain Names - Implementation and Specification
1280:
1281:
1282: If a CQUERYU query encounters multiple hits, it uses the following
1283: sequence of rules to discard multiple hits:
1284:
1285: 1. Discard candidates that have more labels than others. Since
1286: all candidates start with the partial name and end with the
1287: target name, this means that we select those entries that
1288: require the fewest number of added labels. For example, a host
1289: search with a target of "ISI.ARPA" and a partial name of "A"
1290: will select A.ISI.ARPA in preference to A.IBM-PCS.ISI.ARPA.
1291:
1292: 2. If partial label matching was used, discard those labels which
1293: required more characters to be added. For example, a mailbox
1294: search for partial "X" and target "ISI.ARPA" would prefer
1295: [email protected] to [email protected].
1296:
1297: If multiple hits are still present, return all hits.
1298:
1299: Completion query mappings are not guaranteed to be unique or
1300: complete because the domain system does not have any internal
1301: mechanism for determining authority from a partial domain name
1302: that parallels the capability for determining authority as a
1303: function of a complete domain name. In general, resolvers will be
1304: configured to direct completion queries to a name server which is
1305: known to have the desired information.
1306:
1307: When a name server processes a completion query, it either
1308: returns:
1309:
1310: 1. An answer giving zero, one, or more possible completions.
1311:
1312: 2. an error response with Not Implemented (NI) set.
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333: Mockapetris [Page 21]
1334:
1335:
1336: RFC 883 November 1983
1337: Domain Names - Implementation and Specification
1338:
1339:
1340: Completion query and response example
1341:
1342: Suppose that the completion service was used by a TELNET program
1343: to allow a user to specify a partial domain name for the desired
1344: host. Thus a user might ask to be connected to "B". Assuming
1345: that the query originated from an ISI machine, the query might
1346: look like:
1347:
1348: +-----------------------------------------+
1349: Header | OPCODE=CQUERYU, ID=409 |
1350: +-----------------------------------------+
1351: Question | QTYPE=A, QCLASS=IN, QNAME=B |
1352: +-----------------------------------------+
1353: Answer | <empty> |
1354: +-----------------------------------------+
1355: Authority | <empty> |
1356: +-----------------------------------------+
1357: Additional | ISI.ARPA NULL IN |
1358: +-----------------------------------------+
1359:
1360: The partial name in the query is "B", the mappings of interest are
1361: ARPA Internet address records, and the target domain is ISI.ARPA.
1362: Note that NULL is a special type of NULL resource record that is
1363: used as a placeholder and has no significance; NULL RRs obey the
1364: standard format but have no other function.
1365:
1366: The response to this completion query might be:
1367:
1368: +-----------------------------------------+
1369: Header | OPCODE=RESPONSE, ID=409 |
1370: +-----------------------------------------+
1371: Question | QTYPE=A, QCLASS=IN, QNAME=B |
1372: +-----------------------------------------+
1373: Answer | B.ISI.ARPA A IN 10.3.0.52 |
1374: +-----------------------------------------+
1375: Authority | <empty> |
1376: +-----------------------------------------+
1377: Additional | ISI.ARPA NULL IN |
1378: +-----------------------------------------+
1379:
1380: This response has completed B to mean B.ISI.ARPA.
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391: Mockapetris [Page 22]
1392:
1393:
1394: RFC 883 November 1983
1395: Domain Names - Implementation and Specification
1396:
1397:
1398: Another query might be:
1399:
1400: +-----------------------------------------+
1401: Header | OPCODE=CQUERYM, ID=410 |
1402: +-----------------------------------------+
1403: Question | QTYPE=A, QCLASS=IN, QNAME=B |
1404: +-----------------------------------------+
1405: Answer | <empty> |
1406: +-----------------------------------------+
1407: Authority | <empty> |
1408: +-----------------------------------------+
1409: Additional | ARPA NULL IN |
1410: +-----------------------------------------+
1411:
1412: This query is similar to the previous one, but specifies a target
1413: of ARPA rather than ISI.ARPA. It also allows multiple matches.
1414: In this case the same name server might return:
1415:
1416: +-----------------------------------------+
1417: Header | OPCODE=RESPONSE, ID=410 |
1418: +-----------------------------------------+
1419: Question | QTYPE=A, QCLASS=IN, QNAME=B |
1420: +-----------------------------------------+
1421: Answer | B.ISI.ARPA A IN 10.3.0.52 |
1422: | - |
1423: | B.BBN.ARPA A IN 10.0.0.49 |
1424: | - |
1425: | B.BBNCC.ARPA A IN 8.1.0.2 |
1426: +-----------------------------------------+
1427: Authority | <empty> |
1428: +-----------------------------------------+
1429: Additional | ARPA NULL IN |
1430: +-----------------------------------------+
1431:
1432: This response contains three answers, B.ISI.ARPA, B.BBN.ARPA, and
1433: B.BBNCC.ARPA.
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449: Mockapetris [Page 23]
1450:
1451:
1452: RFC 883 November 1983
1453: Domain Names - Implementation and Specification
1454:
1455:
1456: Recursive Name Service
1457:
1458: Recursive service is an optional feature of name servers.
1459:
1460: When a name server receives a query regarding a part of the name
1461: space which is not in one of the name server's zones, the standard
1462: response is a message that refers the requestor to another name
1463: server. By iterating on these referrals, the requestor eventually
1464: is directed to a name server that has the required information.
1465:
1466: Name servers may also implement recursive service. In this type
1467: of service, a name server either answers immediately based on
1468: local zone information, or pursues the query for the requestor and
1469: returns the eventual result back to the original requestor.
1470:
1471: A name server that supports recursive service sets the Recursion
1472: Available (RA) bit in all responses it generates. A requestor
1473: asks for recursive service by setting the Recursion Desired (RD)
1474: bit in queries. In some situations where recursive service is the
1475: only path to the desired information (see below), the name server
1476: may go recursive even if RD is zero.
1477:
1478: If a query requests recursion (RD set), but the name server does
1479: not support recursion, and the query needs recursive service for
1480: an answer, the name server returns a "Not Implemented" (NI) error
1481: code. If the query can be answered without recursion since the
1482: name server is authoritative for the query, it ignores the RD bit.
1483:
1484: Because of the difficulty in selecting appropriate timeouts and
1485: error handling, recursive service is best suited to virtual
1486: circuits, although it is allowed for datagrams.
1487:
1488: Recursive service is valuable in several special situations:
1489:
1490: In a system of small personal computers clustered around one or
1491: more large hosts supporting name servers, the recursive
1492: approach minimizes the amount of code in the resolvers in the
1493: personal computers. Such a design moves complexity out of the
1494: resolver into the name server, and may be appropriate for such
1495: systems.
1496:
1497: Name servers on the boundaries of different networks may wish
1498: to offer recursive service to create connectivity between
1499: different networks. Such name servers may wish to provide
1500: recursive service regardless of the setting of RD.
1501:
1502: Name servers that translate between domain name service and
1503: some other name service may wish to adopt the recursive style.
1504: Implicit recursion may be valuable here as well.
1505:
1506:
1507: Mockapetris [Page 24]
1508:
1509:
1510: RFC 883 November 1983
1511: Domain Names - Implementation and Specification
1512:
1513:
1514: These concepts are still under development.
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565: Mockapetris [Page 25]
1566:
1567:
1568: RFC 883 November 1983
1569: Domain Names - Implementation and Specification
1570:
1571:
1572: Header section format
1573:
1574: +-----------------------------------------------+
1575: | |
1576: | ***** WARNING ***** |
1577: | |
1578: | The following format is preliminary and is |
1579: | included for purposes of explanation only. In |
1580: | particular, the size and position of the |
1581: | OPCODE, RCODE fields and the number and |
1582: | meaning of the single bit fields are subject |
1583: | to change. |
1584: | |
1585: +-----------------------------------------------+
1586:
1587: The header contains the following fields:
1588:
1589: 1 1 1 1 1 1
1590: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1591: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1592: | ID |
1593: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1594: |QR| Opcode |AA|TC|RD|RA| | RCODE |
1595: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1596: | QDCOUNT |
1597: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1598: | ANCOUNT |
1599: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1600: | NSCOUNT |
1601: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1602: | ARCOUNT |
1603: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1604:
1605: where:
1606:
1607: ID - A 16 bit identifier assigned by the program that
1608: generates any kind of query. This identifier is copied
1609: into all replies and can be used by the requestor to
1610: relate replies to outstanding questions.
1611:
1612: QR - A one bit field that specifies whether this message is a
1613: query (0), or a response (1).
1614:
1615: OPCODE - A four bit field that specifies kind of query in this
1616: message. This value is set by the originator of a query
1617: and copied into the response. The values are:
1618:
1619: 0 a standard query (QUERY)
1620:
1621:
1622:
1623: Mockapetris [Page 26]
1624:
1625:
1626: RFC 883 November 1983
1627: Domain Names - Implementation and Specification
1628:
1629:
1630: 1 an inverse query (IQUERY)
1631:
1632: 2 an completion query allowing multiple
1633: answers (CQUERYM)
1634:
1635: 2 an completion query requesting a single
1636: answer (CQUERYU)
1637:
1638: 4-15 reserved for future use
1639:
1640: AA - Authoritative Answer - this bit is valid in responses,
1641: and specifies that the responding name server
1642: is an authority for the domain name in the
1643: corresponding query.
1644:
1645: TC - TrunCation - specifies that this message was truncated
1646: due to length greater than 512 characters.
1647: This bit is valid in datagram messages but not
1648: in messages sent over virtual circuits.
1649:
1650: RD - Recursion Desired - this bit may be set in a query and
1651: is copied into the response. If RD is set, it
1652: directs the name server to pursue the query
1653: recursively. Recursive query support is
1654: optional.
1655:
1656: RA - Recursion Available - this be is set or cleared in a
1657: response, and denotes whether recursive query
1658: support is available in the name server.
1659:
1660: RCODE - Response code - this 4 bit field is set as part of
1661: responses. The values have the following
1662: interpretation:
1663:
1664: 0 No error condition
1665:
1666: 1 Format error - The name server was unable
1667: to interpret the query.
1668:
1669: 2 Server failure - The name server was unable
1670: to process this query due to a problem with
1671: the name server.
1672:
1673: 3 Name Error - Meaningful only for responses
1674: from an authoritative name server, this
1675: code signifies that the domain name
1676: referenced in the query does not exist.
1677:
1678:
1679:
1680:
1681: Mockapetris [Page 27]
1682:
1683:
1684: RFC 883 November 1983
1685: Domain Names - Implementation and Specification
1686:
1687:
1688: 4 Not Implemented - The name server does not
1689: support the requested kind of query.
1690:
1691: 5 Refused - The name server refuses to
1692: perform the specified operation for policy
1693: reasons. For example, a name server may
1694: not wish to provide the information to the
1695: particular requestor, or a name server may
1696: not wish to perform a particular operation
1697: (e.g. zone transfer) for particular data.
1698:
1699: 6-15 Reserved for future use.
1700:
1701: QDCOUNT - an unsigned 16 bit integer specifying the number of
1702: entries in the question section.
1703:
1704: ANCOUNT - an unsigned 16 bit integer specifying the number of
1705: resource records in the answer section.
1706:
1707: NSCOUNT - an unsigned 16 bit integer specifying the number of name
1708: server resource records in the authority records
1709: section.
1710:
1711: ARCOUNT - an unsigned 16 bit integer specifying the number of
1712: resource records in the additional records section.
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739: Mockapetris [Page 28]
1740:
1741:
1742: RFC 883 November 1983
1743: Domain Names - Implementation and Specification
1744:
1745:
1746: Question section format
1747:
1748: The question section is used in all kinds of queries other than
1749: inverse queries. In responses to inverse queries, this section
1750: may contain multiple entries; for all other responses it contains
1751: a single entry. Each entry has the following format:
1752:
1753: 1 1 1 1 1 1
1754: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1755: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1756: | |
1757: / QNAME /
1758: / /
1759: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1760: | QTYPE |
1761: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1762: | QCLASS |
1763: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1764:
1765: where:
1766:
1767: QNAME - a variable number of octets that specify a domain name.
1768: This field uses the compressed domain name format
1769: described in the next section of this memo. This field
1770: can be used to derive a text string for the domain name.
1771: Note that this field may be an odd number of octets; no
1772: padding is used.
1773:
1774: QTYPE - a two octet code which specifies the type of the query.
1775: The values for this field include all codes valid for a
1776: TYPE field, together with some more general codes which
1777: can match more than one type of RR. For example, QTYPE
1778: might be A and only match type A RRs, or might be MAILA,
1779: which matches MF and MD type RRs. The values for this
1780: field are listed in Appendix 2.
1781:
1782: QCLASS - a two octet code that specifies the class of the query.
1783: For example, the QCLASS field is IN for the ARPA
1784: Internet, CS for the CSNET, etc. The numerical values
1785: are defined in Appendix 2.
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797: Mockapetris [Page 29]
1798:
1799:
1800: RFC 883 November 1983
1801: Domain Names - Implementation and Specification
1802:
1803:
1804: Resource record format
1805:
1806: The answer, authority, and additional sections all share the same
1807: format: a variable number of resource records, where the number of
1808: records is specified in the corresponding count field in the
1809: header. Each resource record has the following format:
1810:
1811: 1 1 1 1 1 1
1812: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1813: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1814: | |
1815: / /
1816: / NAME /
1817: | |
1818: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1819: | TYPE |
1820: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1821: | CLASS |
1822: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1823: | TTL |
1824: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1825: | RDLENGTH |
1826: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
1827: / RDATA /
1828: / /
1829: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1830:
1831: where:
1832:
1833: NAME - a compressed domain name to which this resource record
1834: pertains.
1835:
1836: TYPE - two octets containing one of the RR type codes defined
1837: in Appendix 2. This field specifies the meaning of the
1838: data in the RDATA field.
1839:
1840: CLASS - two octets which specify the class of the data in the
1841: RDATA field.
1842:
1843: TTL - a 16 bit unsigned integer that specifies the time
1844: interval (in seconds) that the resource record may be
1845: cached before it should be discarded. Zero values are
1846: interpreted to mean that the RR can only be used for the
1847: transaction in progress, and should not be cached. For
1848: example, SOA records are always distributed with a zero
1849: TTL to prohibit caching. Zero values can also be used
1850: for extremely volatile data.
1851:
1852:
1853:
1854:
1855: Mockapetris [Page 30]
1856:
1857:
1858: RFC 883 November 1983
1859: Domain Names - Implementation and Specification
1860:
1861:
1862: RDLENGTH- an unsigned 16 bit integer that specifies the length in
1863: octets of the RDATA field.
1864:
1865: RDATA - a variable length string of octets that describes the
1866: resource. The format of this information varies
1867: according to the TYPE and CLASS of the resource record.
1868: For example, the if the TYPE is A and the CLASS is IN,
1869: the RDATA field is a 4 octet ARPA Internet address.
1870:
1871: Formats for particular resource records are shown in Appendicies 2
1872: and 3.
1873:
1874: Domain name representation and compression
1875:
1876: Domain names messages are expressed in terms of a sequence of
1877: labels. Each label is represented as a one octet length field
1878: followed by that number of octets. Since every domain name ends
1879: with the null label of the root, a compressed domain name is
1880: terminated by a length byte of zero. The high order two bits of
1881: the length field must be zero, and the remaining six bits of the
1882: length field limit the label to 63 octets or less.
1883:
1884: To simplify implementations, the total length of label octets and
1885: label length octets that make up a domain name is restricted to
1886: 255 octets or less. Since the trailing root label and its dot are
1887: not printed, printed domain names are 254 octets or less.
1888:
1889: Although labels can contain any 8 bit values in octets that make
1890: up a label, it is strongly recommended that labels follow the
1891: syntax described in Appendix 1 of this memo, which is compatible
1892: with existing host naming conventions. Name servers and resolvers
1893: must compare labels in a case-insensitive manner, i.e. A=a, and
1894: hence all character strings must be ASCII with zero parity.
1895: Non-alphabetic codes must match exactly.
1896:
1897: Whenever possible, name servers and resolvers must preserve all 8
1898: bits of domain names they process. When a name server is given
1899: data for the same name under two different case usages, this
1900: preservation is not always possible. For example, if a name
1901: server is given data for ISI.ARPA and isi.arpa, it should create a
1902: single node, not two, and hence will preserve a single casing of
1903: the label. Systems with case sensitivity should take special
1904: precautions to insure that the domain data for the system is
1905: created with consistent case.
1906:
1907: In order to reduce the amount of space used by repetitive domain
1908: names, the sequence of octets that defines a domain name may be
1909: terminated by a pointer to the length octet of a previously
1910: specified label string. The label string that the pointer
1911:
1912:
1913: Mockapetris [Page 31]
1914:
1915:
1916: RFC 883 November 1983
1917: Domain Names - Implementation and Specification
1918:
1919:
1920: specifies is appended to the already specified label string.
1921: Exact duplication of a previous label string can be done with a
1922: single pointer. Multiple levels are allowed.
1923:
1924: Pointers can only be used in positions in the message where the
1925: format is not class specific. If this were not the case, a name
1926: server that was handling a RR for another class could make
1927: erroneous copies of RRs. As yet, there are no such cases, but
1928: they may occur in future RDATA formats.
1929:
1930: If a domain name is contained in a part of the message subject to
1931: a length field (such as the RDATA section of an RR), and
1932: compression is used, the length of the compressed name is used in
1933: the length calculation, rather than the length of the expanded
1934: name.
1935:
1936: Pointers are represented as a two octet field in which the high
1937: order 2 bits are ones, and the low order 14 bits specify an offset
1938: from the start of the message. The 01 and 10 values of the high
1939: order bits are reserved for future use and should not be used.
1940:
1941: Programs are free to avoid using pointers in datagrams they
1942: generate, although this will reduce datagram capacity. However
1943: all programs are required to understand arriving messages that
1944: contain pointers.
1945:
1946: For example, a datagram might need to use the domain names
1947: F.ISI.ARPA, FOO.F.ISI.ARPA, ARPA, and the root. Ignoring the
1948: other fields of the message, these domain names might be
1949: represented as:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971: Mockapetris [Page 32]
1972:
1973:
1974: RFC 883 November 1983
1975: Domain Names - Implementation and Specification
1976:
1977:
1978: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1979: 20 | 1 | F |
1980: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1981: 22 | 3 | I |
1982: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1983: 24 | S | I |
1984: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1985: 26 | 4 | A |
1986: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1987: 28 | R | P |
1988: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1989: 30 | A | 0 |
1990: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1991:
1992: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1993: 40 | 3 | F |
1994: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1995: 42 | O | O |
1996: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1997: 44 | 1 1| 20 |
1998: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
1999:
2000: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
2001: 64 | 1 1| 26 |
2002: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
2003:
2004: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
2005: 92 | 0 | |
2006: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
2007:
2008: The domain name for F.ISI.ARPA is shown at offset 20. The domain
2009: name FOO.F.ISI.ARPA is shown at offset 40; this definition uses a
2010: pointer to concatenate a label for FOO to the previously defined
2011: F.ISI.ARPA. The domain name ARPA is defined at offset 64 using a
2012: pointer to the ARPA component of the name F.ISI.ARPA at 20; note
2013: that this reference relies on ARPA being the last label in the
2014: string at 20. The root domain name is defined by a single octet
2015: of zeros at 92; the root domain name has no labels.
2016:
2017: Organization of the Shared database
2018:
2019: While name server implementations are free to use any internal
2020: data structures they choose, the suggested structure consists of
2021: several separate trees. Each tree has structure corresponding to
2022: the domain name space, with RRs attached to nodes and leaves.
2023: Each zone of authoritative data has a separate tree, and one tree
2024: holds all non-authoritative data. All of the trees corresponding
2025: to zones are managed identically, but the non-authoritative or
2026: cache tree has different management procedures.
2027:
2028:
2029: Mockapetris [Page 33]
2030:
2031:
2032: RFC 883 November 1983
2033: Domain Names - Implementation and Specification
2034:
2035:
2036: Data stored in the database can be kept in whatever form is
2037: convenient for the name server, so long as it can be transformed
2038: back into the format needed for messages. In particular, the
2039: database will probably use structure in place of expanded domain
2040: names, and will also convert many of the time intervals used in
2041: the domain systems to absolute local times.
2042:
2043: Each tree corresponding to a zone has complete information for a
2044: "pruned" subtree of the domain space. The top node of a zone has
2045: a SOA record that marks the start of the zone. The bottom edge of
2046: the zone is delimited by nodes containing NS records signifying
2047: delegation of authority to other zones, or by leaves of the domain
2048: tree. When a name server contains abutting zones, one tree will
2049: have a bottom node containing a NS record, and the other tree will
2050: begin with a tree location containing a SOA record.
2051:
2052: Note that there is one special case that requires consideration
2053: when a name server is implemented. A node that contains a SOA RR
2054: denoting a start of zone will also have NS records that identify
2055: the name servers that are expected to have a copy of the zone.
2056: Thus a name server will usually find itself (and possibly other
2057: redundant name servers) referred to in NS records occupying the
2058: same position in the tree as SOA records. The solution to this
2059: problem is to never interpret a NS record as delimiting a zone
2060: started by a SOA at the same point in the tree. (The sample
2061: programs in this memo deal with this problem by processing SOA
2062: records only after NS records have been processed.)
2063:
2064: Zones may also overlap a particular part of the name space when
2065: they are of different classes.
2066:
2067: Other than the abutting and separate class cases, trees are always
2068: expected to be disjoint. Overlapping zones are regarded as a
2069: non-fatal error. The scheme described in this memo avoids the
2070: overlap issue by maintaining separate trees; other designs must
2071: take the appropriate measures to defend against possible overlap.
2072:
2073: Non-authoritative data is maintained in a separate tree. This
2074: tree is unlike the zone trees in that it may have "holes". Each
2075: RR in the cache tree has its own TTL that is separately managed.
2076: The data in this tree is never used if authoritative data is
2077: available from a zone tree; this avoids potential problems due to
2078: cached data that conflicts with authoritative data.
2079:
2080: The shared database will also contain data structures to support
2081: the processing of inverse queries and completion queries if the
2082: local system supports these optional features. Although many
2083: schemes are possible, this memo describes a scheme that is based
2084: on tables of pointers that invert the database according to key.
2085:
2086:
2087: Mockapetris [Page 34]
2088:
2089:
2090: RFC 883 November 1983
2091: Domain Names - Implementation and Specification
2092:
2093:
2094: Each kind of retrieval has a separate set of tables, with one
2095: table per zone. When a zone is updated, these tables must also be
2096: updated. The contents of these tables are discussed in the
2097: "Inverse query processing" and "Completion query processing"
2098: sections of this memo.
2099:
2100: The database implementation described here includes two locks that
2101: are used to control concurrent access and modification of the
2102: database by name server query processing, name server maintenance
2103: operations, and resolver access:
2104:
2105: The first lock ("main lock") controls access to all of the
2106: trees. Multiple concurrent reads are allowed, but write access
2107: can only be acquired by a single process. Read and write
2108: access are mutually exclusive. Resolvers and name server
2109: processes that answer queries acquire this lock in read mode,
2110: and unlock upon completion of the current message. This lock
2111: is acquired in write mode by a name server maintenance process
2112: when it is about to change data in the shared database. The
2113: actual update procedures are described under "NAME SERVER
2114: MAINTENANCE" but are designed to be brief.
2115:
2116: The second lock ("cache queue lock") controls access to the
2117: cache queue. This queue is used by a resolver that wishes to
2118: add information to the cache tree. The resolver acquires this
2119: lock, then places the RRs to be cached into the queue. The
2120: name server maintenance procedure periodically acquires this
2121: lock and adds the queue information to the cache. The
2122: rationale for this procedure is that it allows the resolver to
2123: operate with read-only access to the shared database, and
2124: allows the update process to batch cache additions and the
2125: associated costs for inversion calculations. The name server
2126: maintenance procedure must take appropriate precautions to
2127: avoid problems with data already in the cache, inversions, etc.
2128:
2129: This organization solves several difficulties:
2130:
2131: When searching the domain space for the answer to a query, a
2132: name server can restrict its search for authoritative data to
2133: that tree that matches the most labels on the right side of the
2134: domain name of interest.
2135:
2136: Since updates to a zone must be atomic with respect to
2137: searches, maintenance operations can simply acquire the main
2138: lock, insert a new copy of a particular zone without disturbing
2139: other zones, and then release the storage used by the old copy.
2140: Assuming a central table pointing to valid zone trees, this
2141: operation can be a simple pointer swap.
2142:
2143:
2144:
2145: Mockapetris [Page 35]
2146:
2147:
2148: RFC 883 November 1983
2149: Domain Names - Implementation and Specification
2150:
2151:
2152: TTL management of zones can be performed using the SOA record
2153: for the zone. This avoids potential difficulties if individual
2154: RRs in a zone could be timed out separately. This issue is
2155: discussed further in the maintenance section.
2156:
2157: Query processing
2158:
2159: The following algorithm outlines processing that takes place at a
2160: name server when a query arrives:
2161:
2162: 1. Search the list of zones to find zones which have the same
2163: class as the QCLASS field in the query and have a top domain
2164: name that matches the right end of the QNAME field. If there
2165: are none, go to step 2. If there are more than one, pick the
2166: zone that has the longest match and go to step 3.
2167:
2168: 2. Since the zone search failed, the only possible RRs are
2169: contained in the non-authoritative tree. Search the cache tree
2170: for the NS record that has the same class as the QCLASS field
2171: and the largest right end match for domain name. Add the NS
2172: record or records to the authority section of the response. If
2173: the cache tree has RRs that are pertinent to the question
2174: (domain names match, classes agree, not timed-out, and the type
2175: field is relevant to the QTYPE), copy these RRs into the answer
2176: section of the response. The name server may also search the
2177: cache queue. Go to step 4.
2178:
2179: 3. Since this zone is the best match, the zone in which QNAME
2180: resides is either this zone or a zone to which this zone will
2181: directly or indirectly delegate authority. Search down the
2182: tree looking for a NS RR or the node specified by QNAME.
2183:
2184: If the node exists and has no NS record, copy the relevant
2185: RRs to the answer section of the response and go to step 4.
2186:
2187: If a NS RR is found, either matching a part or all of QNAME,
2188: then QNAME is in a delegated zone outside of this zone. If
2189: so, copy the NS record or records into the authority section
2190: of the response, and search the remainder of the zone for an
2191: A type record corresponding to the NS reference. If the A
2192: record is found, add it to the additional section. Go to
2193: step 2.
2194:
2195: If the node is not found and a NS is not found, there is no
2196: such name; set the Name error bit in the response and exit.
2197:
2198: 4. When this step is reached, the answer and authority sections
2199: are complete. What remains is to complete the additional
2200: section. This procedure is only possible if the name server
2201:
2202:
2203: Mockapetris [Page 36]
2204:
2205:
2206: RFC 883 November 1983
2207: Domain Names - Implementation and Specification
2208:
2209:
2210: knows the data formats implied by the class of records in the
2211: answer and authority sections. Hence this procedure is class
2212: dependent. Appendix 3 discusses this procedure for Internet
2213: class data.
2214:
2215: While this algorithm deals with typical queries and databases,
2216: several additions are required that will depend on the database
2217: supported by the name server:
2218:
2219: QCLASS=*
2220:
2221: Special procedures are required when the QCLASS of the query is
2222: "*". If the database contains several classes of data, the
2223: query processing steps above are performed separately for each
2224: CLASS, and the results are merged into a single response. The
2225: name error condition is not meaningful for a QCLASS=* query.
2226: If the requestor wants this information, it must test each
2227: class independently.
2228:
2229: If the database is limited to data of a particular class, this
2230: operation can be performed by simply reseting the authoritative
2231: bit in the response, and performing the query as if QCLASS was
2232: the class used in the database.
2233:
2234: * labels in database RRs
2235:
2236: Some zones will contain default RRs that use * to match in
2237: cases where the search fails for a particular domain name. If
2238: the database contains these records then a failure must be
2239: retried using * in place of one or more labels of the search
2240: key. The procedure is to replace labels from the left with
2241: "*"s looking for a match until either all labels have been
2242: replaced, or a match is found. Note that these records can
2243: never be the result of caching, so a name server can omit this
2244: processing for zones that don't contain RRs with * in labels,
2245: or can omit this processing entirely if * never appears in
2246: local authoritative data.
2247:
2248: Inverse query processing
2249:
2250: Name servers that support inverse queries can support these
2251: operations through exhaustive searches of their databases, but
2252: this becomes impractical as the size of the database increases.
2253: An alternative approach is to invert the database according to the
2254: search key.
2255:
2256: For name servers that support multiple zones and a large amount of
2257: data, the recommended approach is separate inversions for each
2258:
2259:
2260:
2261: Mockapetris [Page 37]
2262:
2263:
2264: RFC 883 November 1983
2265: Domain Names - Implementation and Specification
2266:
2267:
2268: zone. When a particular zone is changed during a refresh, only
2269: its inversions need to be redone.
2270:
2271: Support for transfer of this type of inversion may be included in
2272: future versions of the domain system, but is not supported in this
2273: version.
2274:
2275: Completion query processing
2276:
2277: Completion query processing shares many of the same problems in
2278: data structure design as are found in inverse queries, but is
2279: different due to the expected high rate of use of top level labels
2280: (ie., ARPA, CSNET). A name server that wishes to be efficient in
2281: its use of memory may well choose to invert only occurrences of
2282: ARPA, etc. that are below the top level, and use a search for the
2283: rare case that top level labels are used to constrain a
2284: completion.
2285:
2286:
2287:
2288:
2289:
2290:
2291:
2292:
2293:
2294:
2295:
2296:
2297:
2298:
2299:
2300:
2301:
2302:
2303:
2304:
2305:
2306:
2307:
2308:
2309:
2310:
2311:
2312:
2313:
2314:
2315:
2316:
2317:
2318:
2319: Mockapetris [Page 38]
2320:
2321:
2322: RFC 883 November 1983
2323: Domain Names - Implementation and Specification
2324:
2325:
2326: NAME SERVER MAINTENANCE
2327:
2328: Introduction
2329:
2330: Name servers perform maintenance operations on their databases to
2331: insure that the data they distribute is accurate and timely. The
2332: amount and complexity of the maintenance operations that a name
2333: server must perform are related to the size, change rate, and
2334: complexity of the database that the name server manages.
2335:
2336: Maintenance operations are fundamentally different for
2337: authoritative and non-authoritative data. A name server actively
2338: attempts to insure the accuracy and timeliness of authoritative
2339: data by refreshing the data from master copies. Non-authoritative
2340: data is merely purged when its time-to-live expires; the name
2341: server does not attempt to refresh it.
2342:
2343: Although the refreshing scheme is fairly simple to implement, it
2344: is somewhat less powerful than schemes used in other distributed
2345: database systems. In particular, an update to the master does not
2346: immediately update copies, and should be viewed as gradually
2347: percolating though the distributed database. This is adequate for
2348: the vast majority of applications. In situations where timliness
2349: is critical, the master name server can prohibit caching of copies
2350: or assign short timeouts to copies.
2351:
2352: Conceptual model of maintenance operations
2353:
2354: The vast majority of information in the domain system is derived
2355: from master files scattered among hosts that implement name
2356: servers; some name servers will have no master files, other name
2357: servers will have one or more master files. Each master file
2358: contains the master data for a single zone of authority rather
2359: than data for the whole domain name space. The administrator of a
2360: particular zone controls that zone by updating its master file.
2361:
2362: Master files and zone copies from remote servers may include RRs
2363: that are outside of the zone of authority when a NS record
2364: delegates authority to a domain name that is a descendant of the
2365: domain name at which authority is delegated. These forward
2366: references are a problem because there is no reasonable method to
2367: guarantee that the A type records for the delegatee are available
2368: unless they can somehow be attached to the NS records.
2369:
2370: For example, suppose the ARPA zone delegates authority at
2371: MIT.ARPA, and states that the name server is on AI.MIT.ARPA. If a
2372: resolver gets the NS record but not the A type record for
2373: AI.MIT.ARPA, it might try to ask the MIT name server for the
2374: address of AI.MIT.ARPA.
2375:
2376:
2377: Mockapetris [Page 39]
2378:
2379:
2380: RFC 883 November 1983
2381: Domain Names - Implementation and Specification
2382:
2383:
2384: The solution is to allow type A records that are outside of the
2385: zone of authority to be copied with the zone. While these records
2386: won't be found in a search for the A type record itself, they can
2387: be protected by the zone refreshing system, and will be passed
2388: back whenever the name server passes back a referral to the
2389: corresponding NS record. If a query is received for the A record,
2390: the name server will pass back a referral to the name server with
2391: the A record in the additional section, rather than answer
2392: section.
2393:
2394: The only exception to the use of master files is a small amount of
2395: data stored in boot files. Boot file data is used by name servers
2396: to provide enough resource records to allow zones to be imported
2397: from foreign servers (e.g. the address of the server), and to
2398: establish the name and address of root servers. Boot file records
2399: establish the initial contents of the cache tree, and hence can be
2400: overridden by later loads of authoritative data.
2401:
2402: The data in a master file first becomes available to users of the
2403: domain name system when it is loaded by the corresponding name
2404: server. By definition, data from a master file is authoritative.
2405:
2406: Other name servers which wish to be authoritative for a particular
2407: zone do so by transferring a copy of the zone from the name server
2408: which holds the master copy using a virtual circuit. These copies
2409: include parameters which specify the conditions under which the
2410: data in the copy is authoritative. In the most common case, the
2411: conditions specify a refresh interval and policies to be followed
2412: when the refresh operation cannot be performed.
2413:
2414: A name server may acquire multiple zones from different name
2415: servers and master files, but the name server must maintain each
2416: zone separately from others and from non-authoritative data.
2417:
2418: When the refresh interval for a particular zone copy expires, the
2419: name server holding the copy must consult the name server that
2420: holds the master copy. If the data in the zone has not changed,
2421: the master name server instructs the copy name server to reset the
2422: refresh interval. If the data has changed, the master passes a
2423: new copy of the zone and its associated conditions to the copy
2424: name server. Following either of these transactions, the copy
2425: name server begins a new refresh interval.
2426:
2427: Copy name servers must also deal with error conditions under which
2428: they are unable to communicate with the name server that holds the
2429: master copy of a particular zone. The policies that a copy name
2430: server uses are determined by other parameters in the conditions
2431: distributed with every copy. The conditions include a retry
2432: interval and a maximum holding time. When a copy name server is
2433:
2434:
2435: Mockapetris [Page 40]
2436:
2437:
2438: RFC 883 November 1983
2439: Domain Names - Implementation and Specification
2440:
2441:
2442: unable to establish communications with a master or is unable to
2443: complete the refresh transaction, it must retry the refresh
2444: operation at the rate specified by the retry interval. This retry
2445: interval will usually be substantially shorter than the refresh
2446: interval. Retries continue until the maximum holding time is
2447: reached. At that time the copy name server must assume that its
2448: copy of the data for the zone in question is no longer
2449: authoritative.
2450:
2451: Queries must be processed while maintenance operations are in
2452: progress because a zone transfer can take a long time. However,
2453: to avoid problems caused by access to partial databases, the
2454: maintenance operations create new copies of data rather than
2455: directly modifying the old copies. When the new copy is complete,
2456: the maintenance process locks out queries for a short time using
2457: the main lock, and switches pointers to replace the old data with
2458: the new. After the pointers are swapped, the maintenance process
2459: unlocks the main lock and reclaims the storage used by the old
2460: copy.
2461:
2462: Name server data structures and top level logic
2463:
2464: The name server must multiplex its attention between multiple
2465: activities. For example, a name server should be able to answer
2466: queries while it is also performing refresh activities for a
2467: particular zone. While it is possible to design a name server
2468: that devotes a separate process to each query and refresh activity
2469: in progress, the model described in this memo is based on the
2470: assumption that there is a single process performing all
2471: maintenance operations, and one or more processes devoted to
2472: handling queries. The model also assumes the existence of shared
2473: memory for several control structures, the domain database, locks,
2474: etc.
2475:
2476: The model name server uses the following files and shared data
2477: structures:
2478:
2479: 1. A configuration file that describes the master and boot
2480: files which the name server should load and the zones that
2481: the name server should attempt to load from foreign name
2482: servers. This file establishes the initial contents of the
2483: status table.
2484:
2485: 2. Domain data files that contain master and boot data to be
2486: loaded.
2487:
2488: 3. A status table that is derived from the configuration file.
2489: Each entry in this table describes a source of data. Each
2490: entry has a zone number. The zone number is zero for
2491:
2492:
2493: Mockapetris [Page 41]
2494:
2495:
2496: RFC 883 November 1983
2497: Domain Names - Implementation and Specification
2498:
2499:
2500: non-authoritative sources; authoritative sources are
2501: assigned separate non-zero numbers.
2502:
2503: 4. The shared database that holds the domain data. This
2504: database is assumed to be organized in some sort of tree
2505: structure paralleling the domain name space, with a list of
2506: resource records attached to each node and leaf in the tree.
2507: The elements of the resource record list need not contain
2508: the exact data present in the corresponding output format,
2509: but must contain data sufficient to create the output
2510: format; for example, these records need not contain the
2511: domain name that is associated with the resource because
2512: that name can be derived from the tree structure. Each
2513: resource record also internal data that the name server uses
2514: to organize its data.
2515:
2516: 5. Inversion data structures that allow the name server to
2517: process inverse queries and completion queries. Although
2518: many structures could be used, the implementation described
2519: in this memo supposes that there is one array for every
2520: inversion that the name server can handle. Each array
2521: contains a list of pointers to resource records such that
2522: the order of the inverted quantities is sorted.
2523:
2524: 6. The main and cache queue locks
2525:
2526: 7. The cache queue
2527:
2528: The maintenance process begins by loading the status table from
2529: the configuration file. It then periodically checks each entry,
2530: to see if its refresh interval has elapsed. If not, it goes on to
2531: the next entry. If so, it performs different operations depending
2532: on the entry:
2533:
2534: If the entry is for zone 0, or the cache tree, the maintenance
2535: process checks to see if additions or deletions are required.
2536: Additions are acquired from the cache queue using the cache
2537: queue lock. Deletions are detected using TTL checks. If any
2538: changes are required, the maintenance process recalculates
2539: inversion data structures and then alters the cache tree under
2540: the protection of the main lock. Whenever the maintenance
2541: process modifies the cache tree, it resets the refresh interval
2542: to the minimum of the contained TTLs and the desired time
2543: interval for cache additions.
2544:
2545: If the entry is not zone 0, and the entry refers to a local
2546: file, the maintenance process checks to see if the file has
2547: been modified since its last load. If so the file is reloaded
2548: using the procedures specified under "Name server file
2549:
2550:
2551: Mockapetris [Page 42]
2552:
2553:
2554: RFC 883 November 1983
2555: Domain Names - Implementation and Specification
2556:
2557:
2558: loading". The refresh interval is reset to that specified in
2559: the SOA record if the file is a master file.
2560:
2561: If the entry is for a remote master file, the maintenance
2562: process checks for a new version using the procedure described
2563: in "Names server remote zone transfer".
2564:
2565: Name server file loading
2566:
2567: Master files are kept in text form for ease of editing by system
2568: maintainers. These files are not exchanged by name servers; name
2569: servers use the standard message format when transferring zones.
2570:
2571: Organizations that want to have a domain, but do not want to run a
2572: name server, can use these files to supply a domain definition to
2573: another organization that will run a name server for them. For
2574: example, if organization X wants a domain but not a name server,
2575: it can find another organization, Y, that has a name server and is
2576: willing to provide service for X. Organization X defines domain X
2577: via the master file format and ships a copy of the master file to
2578: organization Y via mail, FTP, or some other method. A system
2579: administrator at Y configures Y's name server to read in X's file
2580: and hence support the X domain. X can maintain the master file
2581: using a text editor and send new versions to Y for installation.
2582:
2583: These files have a simple line-oriented format, with one RR per
2584: line. Fields are separated by any combination of blanks and tab
2585: characters. Tabs are treated the same as spaces; in the following
2586: discussion the term "blank" means either a tab or a blank. A line
2587: can be either blank (and ignored), a RR, or a $INCLUDE line.
2588:
2589: If a RR line starts with a domain name, that domain name is used
2590: to specify the location in the domain space for the record, i.e.
2591: the owner. If a RR line starts with a blank, it is loaded into
2592: the location specified by the most recent location specifier.
2593:
2594: The location specifiers are assumed to be relative to some origin
2595: that is provided by the user of a file unless the location
2596: specifier contains the root label. This provides a convenient
2597: shorthand notation, and can also be used to prevent errors in
2598: master files from propagating into other zones. This feature is
2599: particularly useful for master files imported from other sites.
2600:
2601: An include line begins with $INCLUDE, starting at the first line
2602: position, and is followed by a local file name and an optional
2603: offset modifier. The filename follows the appropriate local
2604: conventions. The offset is one or more labels that are added to
2605: the offset in use for the file that contained the $INCLUDE. If
2606: the offset is omitted, the included file is loaded using the
2607:
2608:
2609: Mockapetris [Page 43]
2610:
2611:
2612: RFC 883 November 1983
2613: Domain Names - Implementation and Specification
2614:
2615:
2616: offset of the file that contained the $INCLUDE command. For
2617: example, a file being loaded at offset ARPA might contain the
2618: following lines:
2619:
2620: $INCLUDE <subsys>isi.data ISI
2621: $INCLUDE <subsys>addresses.data
2622:
2623: The first line would be interpreted to direct loading of the file
2624: <subsys>isi.data at offset ISI.ARPA. The second line would be
2625: interpreted as a request to load data at offset ARPA.
2626:
2627: Note that $INCLUDE commands do not cause data to be loaded into a
2628: different zone or tree; they are simply ways to allow data for a
2629: given zone to be organized in separate files. For example,
2630: mailbox data might be kept separately from host data using this
2631: mechanism.
2632:
2633: Resource records are entered as a sequence of fields corresponding
2634: to the owner name, TTL, CLASS, TYPE and RDATA components. (Note
2635: that this order is different from the order used in examples and
2636: the order used in the actual RRs; the given order allows easier
2637: parsing and defaulting.)
2638:
2639: The owner name is derived from the location specifier.
2640:
2641: The TTL field is optional, and is expressed as a decimal
2642: number. If omitted TTL defaults to zero.
2643:
2644: The CLASS field is also optional; if omitted the CLASS defaults
2645: to the most recent value of the CLASS field in a previous RR.
2646:
2647: The RDATA fields depend on the CLASS and TYPE of the RR. In
2648: general, the fields that make up RDATA are expressed as decimal
2649: numbers or as domain names. Some exceptions exist, and are
2650: documented in the RDATA definitions in Appendicies 2 and 3 of
2651: this memo.
2652:
2653: Because CLASS and TYPE fields don't contain any common
2654: identifiers, and because CLASS and TYPE fields are never decimal
2655: numbers, the parse is always unique.
2656:
2657: Because these files are text files several special encodings are
2658: necessary to allow arbitrary data to be loaded. In particular:
2659:
2660: . A free standing dot is used to refer to the current domain
2661: name.
2662:
2663: @ A free standing @ is used to denote the current origin.
2664:
2665:
2666:
2667: Mockapetris [Page 44]
2668:
2669:
2670: RFC 883 November 1983
2671: Domain Names - Implementation and Specification
2672:
2673:
2674: .. Two free standing dots represent the null domain name of
2675: the root.
2676:
2677: \X where X is any character other than a digit (0-9), is used
2678: to quote that character so that its special meaning does
2679: not apply. For example, "\." can be used to place a dot
2680: character in a label.
2681:
2682: \DDD where each D is a digit is the octet corresponding to the
2683: decimal number described by DDD. The resulting octet is
2684: assumed to be text and is not checked for special meaning.
2685:
2686: ( ) Parentheses are used to group data that crosses a line
2687: boundary. In effect, line terminations are not recognized
2688: within parentheses.
2689:
2690: ; Semicolon is used to start a comment; the remainder of the
2691: line is ignored.
2692:
2693: Name server file loading example
2694:
2695: A name server for F.ISI.ARPA , serving as an authority for the
2696: ARPA and ISI.ARPA domains, might use a boot file and two master
2697: files. The boot file initializes some non-authoritative data, and
2698: would be loaded without an origin:
2699:
2700: .. 9999999 IN NS B.ISI.ARPA
2701: 9999999 CS NS UDEL.CSNET
2702: B.ISI.ARPA 9999999 IN A 10.3.0.52
2703: UDEL.CSNET 9999999 CS A 302-555-0000
2704:
2705: This file loads non-authoritative data which provides the
2706: identities and addresses of root name servers. The first line
2707: contains a NS RR which is loaded at the root; the second line
2708: starts with a blank, and is loaded at the most recent location
2709: specifier, in this case the root; the third and fourth lines load
2710: RRs at B.ISI.ARPA and UDEL.CSNET, respectively. The timeouts are
2711: set to high values (9999999) to prevent this data from being
2712: discarded due to timeout.
2713:
2714: The first master file loads authoritative data for the ARPA
2715: domain. This file is designed to be loaded with an origin of
2716: ARPA, which allows the location specifiers to omit the trailing
2717: .ARPA labels.
2718:
2719:
2720:
2721:
2722:
2723:
2724:
2725: Mockapetris [Page 45]
2726:
2727:
2728: RFC 883 November 1983
2729: Domain Names - Implementation and Specification
2730:
2731:
2732: @ IN SOA F.ISI.ARPA Action.E.ISI.ARPA (
2733: 20 ; SERIAL
2734: 3600 ; REFRESH
2735: 600 ; RETRY
2736: 3600000; EXPIRE
2737: 60) ; MINIMUM
2738: NS F.ISI.ARPA ; F.ISI.ARPA is a name server for ARPA
2739: NS A.ISI.ARPA ; A.ISI.ARPA is a name server for ARPA
2740: MIT NS AI.MIT.ARPA; delegation to MIT name server
2741: ISI NS F.ISI.ARPA ; delegation to ISI name server
2742:
2743: UDEL MD UDEL.ARPA
2744: A 10.0.0.96
2745: NBS MD NBS.ARPA
2746: A 10.0.0.19
2747: DTI MD DTI.ARPA
2748: A 10.0.0.12
2749:
2750: AI.MIT A 10.2.0.6
2751: F.ISI A 10.2.0.52
2752:
2753: The first group of lines contains the SOA record and its
2754: parameters, and identifies name servers for this zone and for
2755: delegated zones. The Action.E.ISI.ARPA field is a mailbox
2756: specification for the responsible person for the zone, and is the
2757: domain name encoding of the mail destination [email protected].
2758: The second group specifies data for domain names within this zone.
2759: The last group has forward references for name server address
2760: resolution for AI.MIT.ARPA and F.ISI.ARPA. This data is not
2761: technically within the zone, and will only be used for additional
2762: record resolution for NS records used in referrals. However, this
2763: data is protected by the zone timeouts in the SOA, so it will
2764: persist as long as the NS references persist.
2765:
2766: The second master file defines the ISI.ARPA environment, and is
2767: loaded with an origin of ISI.ARPA:
2768:
2769: @ IN SOA F.ISI.ARPA Action\.ISI.E.ISI.ARPA (
2770: 20 ; SERIAL
2771: 7200 ; REFRESH
2772: 600 ; RETRY
2773: 3600000; EXPIRE
2774: 60) ; MINIMUM
2775: NS F.ISI.ARPA ; F.ISI.ARPA is a name server
2776: A A 10.1.0.32
2777: MD A.ISI.ARPA
2778: MF F.ISI.ARPA
2779: B A 10.3.0.52
2780: MD B.ISI.ARPA
2781:
2782:
2783: Mockapetris [Page 46]
2784:
2785:
2786: RFC 883 November 1983
2787: Domain Names - Implementation and Specification
2788:
2789:
2790: MF F.ISI.ARPA
2791: F A 10.2.0.52
2792: MD F.ISI.ARPA
2793: MF A.ISI.ARPA
2794: $INCLUDE <SUBSYS>ISI-MAILBOXES.TXT
2795:
2796: Where the file <SUBSYS>ISI-MAILBOXES.TXT is:
2797:
2798: MOE MB F.ISI.ARPA
2799: LARRY MB A.ISI.ARPA
2800: CURLEY MB B.ISI.ARPA
2801: STOOGES MB B.ISI.ARPA
2802: MG MOE.ISI.ARPA
2803: MG LARRY.ISI.ARPA
2804: MG CURLEY.ISI.ARPA
2805:
2806: Note the use of the \ character in the SOA RR to specify the
2807: responsible person mailbox "[email protected]".
2808:
2809: Name server remote zone transfer
2810:
2811: When a name server needs to make an initial copy of a zone or test
2812: to see if a existing zone copy should be refreshed, it begins by
2813: attempting to open a virtual circuit to the foreign name server.
2814:
2815: If this open attempt fails, and this was an initial load attempt,
2816: it schedules a retry and exits. If this was a refresh operation,
2817: the name server tests the status table to see if the maximum
2818: holding time derived from the SOA EXPIRE field has elapsed. If
2819: not, the name server schedules a retry. If the maximum holding
2820: time has expired, the name server invalidates the zone in the
2821: status table, and scans all resource records tagged with this zone
2822: number. For each record it decrements TTL fields by the length of
2823: time since the data was last refreshed. If the new TTL value is
2824: negative, the record is deleted. If the TTL value is still
2825: positive, it moves the RR to the cache tree and schedules a retry.
2826:
2827: If the open attempt succeeds, the name server sends a query to the
2828: foreign name server in which QTYPE=SOA, QCLASS is set according to
2829: the status table information from the configuration file, and
2830: QNAME is set to the domain name of the zone of interest.
2831:
2832: The foreign name server will return either a SOA record indicating
2833: that it has the zone or an error. If an error is detected, the
2834: virtual circuit is closed, and the failure is treated in the same
2835: way as if the open attempt failed.
2836:
2837: If the SOA record is returned and this was a refresh, rather than
2838: an initial load of the zone, the name server compares the SERIAL
2839:
2840:
2841: Mockapetris [Page 47]
2842:
2843:
2844: RFC 883 November 1983
2845: Domain Names - Implementation and Specification
2846:
2847:
2848: field in the new SOA record with the SERIAL field in the SOA
2849: record of the existing zone copy. If these values match, the zone
2850: has not been updated since the last copy and hence there is no
2851: reason to recopy the zone. In this case the name server resets
2852: the times in the existing SOA record and closes the virtual
2853: circuit to complete the operation.
2854:
2855: If this is initial load, or the SERIAL fields were different, the
2856: name server requests a copy of the zone by sending the foreign
2857: name server an AXFR query which specifies the zone by its QCLASS
2858: and QNAME fields.
2859:
2860: When the foreign name server receives the AXFR request, it sends
2861: each node from the zone to the requestor in a separate message.
2862: It begins with the node that contains the SOA record, walks the
2863: tree in breadth-first order, and completes the transfer by
2864: resending the node containing the SOA record.
2865:
2866: Several error conditions are possible:
2867:
2868: If the AXFR request cannot be matched to a SOA, the foreign
2869: name server will return a single message in response that does
2870: not contain the AXFR request. (The normal SOA query preceding
2871: the AXFR is designed to avoid this condition, but it is still
2872: possible.)
2873:
2874: The foreign name server can detect an internal error or detect
2875: some other condition (e.g. system going down, out of resources,
2876: etc.) that forces the transfer to be aborted. If so, it sends
2877: a message with the "Server failure" condition set. If the AXFR
2878: can be immediately retried with some chance of success, it
2879: leaves the virtual open; otherwise it initiates a close.
2880:
2881: If the foreign name server doesn't wish to perform the
2882: operation for policy reasons (i.e. the system administrator
2883: wishes to forbid zone copies), the foreign server returns a
2884: "Refused" condition.
2885:
2886: The requestor receives these records and builds a new tree. This
2887: tree is not yet in the status table, so its data are not used to
2888: process queries. The old copy of the zone, if any, may be used to
2889: satisfy request while the transfer is in progress.
2890:
2891: When the requestor receives the second copy of the SOA node, it
2892: compares the SERIAL field in the first copy of the SOA against the
2893: SERIAL field in the last copy of the SOA record. If these don't
2894: match, the foreign server updated its zone while the transfer was
2895: in progress. In this case the requestor repeats the AXFR request
2896: to acquire the newer version.
2897:
2898:
2899: Mockapetris [Page 48]
2900:
2901:
2902: RFC 883 November 1983
2903: Domain Names - Implementation and Specification
2904:
2905:
2906: If the AXFR transfer eventually succeeds, the name server closes
2907: the virtual circuit and and creates new versions of inversion data
2908: structures for this zone. When this operation is complete, the
2909: name server acquires the main lock in write mode and then replaces
2910: any old copy of the zone and inversion data structures with new
2911: ones. The name server then releases the main lock, and can
2912: reclaim the storage used by the old copy.
2913:
2914: If an error occurs during the AXFR transfer, the name server can
2915: copy any partial information into its cache tree if it wishes,
2916: although it will not normally do so if the zone transfer was a
2917: refresh rather than an initial load.
2918:
2919:
2920:
2921:
2922:
2923:
2924:
2925:
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: Mockapetris [Page 49]
2958:
2959:
2960: RFC 883 November 1983
2961: Domain Names - Implementation and Specification
2962:
2963:
2964: RESOLVER ALGORITHMS
2965:
2966: Operations
2967:
2968: Resolvers have a great deal of latitude in the semantics they
2969: allow in user calls. For example, a resolver might support
2970: different user calls that specify whether the returned information
2971: must be from and authoritative name server or not. Resolvers are
2972: also responsible for enforcement of any local restrictions on
2973: access, etc.
2974:
2975: In any case, the resolver will transform the user query into a
2976: number of shared database accesses and queries to remote name
2977: servers. When a user requests a resource associated with a
2978: particular domain name, the resolver will execute the following
2979: steps:
2980:
2981: 1. The resolver first checks the local shared database, if any,
2982: for the desired information. If found, it checks the
2983: applicable timeout. If the timeout check succeeds, the
2984: information is used to satisfy the user request. If not, the
2985: resolver goes to step 2.
2986:
2987: 2. In this step, the resolver consults the shared database for the
2988: name server that most closely matches the domain name in the
2989: user query. Multiple redundant name servers may be found. The
2990: resolver goes to step 3.
2991:
2992: 3. In this step the resolver chooses one of the available name
2993: servers and sends off a query. If the query fails, it tries
2994: another name server. If all fail, an error indication is
2995: returned to the user. If a reply is received the resolver adds
2996: the returned RRs to its database and goes to step 4.
2997:
2998: 4. In this step, the resolver interprets the reply. If the reply
2999: contains the desired information, the resolver returns the
3000: information to the user. The the reply indicates that the
3001: domain name in the user query doesn't exist, then the resolver
3002: returns an error to the user. If the reply contains a
3003: transient name server failure, the resolver can either wait and
3004: retry the query or go back to step 3 and try a different name
3005: server. If the reply doesn't contain the desired information,
3006: but does contain a pointer to a closer name server, the
3007: resolver returns to step 2, where the closer name servers will
3008: be queried.
3009:
3010: Several modifications to this algorithm are possible. A resolver
3011: may not support a local cache and instead only cache information
3012: during the course of a single user request, discarding it upon
3013:
3014:
3015: Mockapetris [Page 50]
3016:
3017:
3018: RFC 883 November 1983
3019: Domain Names - Implementation and Specification
3020:
3021:
3022: completion. The resolver may also find that a datagram reply was
3023: truncated, and open a virtual circuit so that the complete reply
3024: can be recovered.
3025:
3026: Inverse and completion queries must be treated in an
3027: environment-sensitive manner, because the domain system doesn't
3028: provide a method for guaranteeing that it can locate the correct
3029: information. The typical choice will be to configure a resolver
3030: to use a particular set of known name servers for inverse queries.
3031:
3032:
3033:
3034:
3035:
3036:
3037:
3038:
3039:
3040:
3041:
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: Mockapetris [Page 51]
3074:
3075:
3076: RFC 883 November 1983
3077: Domain Names - Implementation and Specification
3078:
3079:
3080: DOMAIN SUPPORT FOR MAIL
3081:
3082: Introduction
3083:
3084: Mail service is a particularly sensitive issue for users of the
3085: domain system because of the lack of a consistent system for
3086: naming mailboxes and even hosts, and the need to support continued
3087: operation of existing services. This section discusses an
3088: evolutionary approach for adding consistent domain name support
3089: for mail.
3090:
3091: The crucial issue is deciding on the types of binding to be
3092: supported. Most mail systems specify a mail destination with a
3093: two part construct such as X@Y. The left hand side, X, is an
3094: string, often a user or account, and Y is a string, often a host.
3095: This section refers to the part on the left, i.e. X, as the local
3096: part, and refers to the part on the right, i.e. Y, as the global
3097: part.
3098:
3099: Most existing mail systems route mail based on the global part; a
3100: mailer with mail to deliver to X@Y will decide on the host to be
3101: contacted using only Y. We refer to this type of binding as
3102: "agent binding".
3103:
3104: For example, mail addressed to Mockapetris@ISIF is delivered to
3105: host USC-ISIF (USC-ISIF is the official name for the host
3106: specified by nickname ISIF).
3107:
3108: More sophisticated mail systems use both the local and global
3109: parts, i.e. both X and Y to determine which host should receive
3110: the mail. These more sophisticated systems usually separate the
3111: binding of the destination to the host from the actual delivery.
3112: This allows the global part to be a generic name rather than
3113: constraining it to a single host. We refer to this type of
3114: binding as "mailbox binding".
3115:
3116: For example, mail addressed to Mockapetris@ISI might be bound
3117: to host F.ISI.ARPA, and subsequently delivered to that host,
3118: while mail for Cohen@ISI might be bound to host B.ISI.ARPA.
3119:
3120: The domain support for mail consists of two levels of support,
3121: corresponding to these two binding models.
3122:
3123: The first level, agent binding, is compatible with existing
3124: ARPA Internet mail procedures and uses maps a global part onto
3125: one or more hosts that will accept the mail. This type of
3126: binding uses the MAILA QTYPE.
3127:
3128: The second level, mailbox binding, offers extended services
3129:
3130:
3131: Mockapetris [Page 52]
3132:
3133:
3134: RFC 883 November 1983
3135: Domain Names - Implementation and Specification
3136:
3137:
3138: that map a local part and a global part onto one or more sets
3139: of data via the MAILB QTYPE. The sets of data include hosts
3140: that will accept the mail, mailing list members (mail groups),
3141: and mailboxes for reporting errors or requests to change a mail
3142: group.
3143:
3144: The domain system encodes the global part of a mail destination as
3145: a domain name and uses dots in the global part to separate labels
3146: in the encoded domain name. The domain system encodes the local
3147: part of a mail destination as a single label, and any dots in this
3148: part are simply copied into the label. The domain system forms a
3149: complete mail destination as the local label concatenated to the
3150: domain string for the global part. We call this a mailbox.
3151:
3152: For example, the mailbox [email protected] has a global
3153: domain name of three labels, F.ISI.ARPA. The domain name
3154: encoding for the whole mailbox is Mockapetris.F.ISI.ARPA. The
3155: mailbox [email protected] has the same domain name for
3156: the global part and a 4 label domain name for the mailbox of
3157: Mockapetris\.cad.F.ISI.ARPA (the \ is not stored in the label,
3158: its merely used to denote the "quoted" dot).
3159:
3160: It is anticipated that the Internet system will adopt agent
3161: binding as part of the initial implementation of the domain
3162: system, and that mailbox binding will eventually become the
3163: preferred style as organizations convert their mail systems to the
3164: new style. To facilitate this approach, the domain information
3165: for these two binding styles is organized to allow a requestor to
3166: determine which types of support are available, and the
3167: information is kept in two disjoint classes.
3168:
3169: Agent binding
3170:
3171: In agent binding, a mail system uses the global part of the mail
3172: destination as a domain name, with dots denoting structure. The
3173: domain name is resolved using a MAILA query which return MF and MD
3174: RRs to specify the domain name of the appropriate host to receive
3175: the mail. MD (Mail delivery) RRs specify hosts that are expected
3176: to have the mailbox in question; MF (Mail forwarding) RRs specify
3177: hosts that are expected to be intermediaries willing to accept the
3178: mail for eventual forwarding. The hosts are hints, rather than
3179: definite answers, since the query is made without the full mail
3180: destination specification.
3181:
3182: For example, mail for [email protected] would result in a
3183: query with QTYPE=MAILA and QNAME=F.ISI.ARPA, which might return
3184: two RRs:
3185:
3186:
3187:
3188:
3189: Mockapetris [Page 53]
3190:
3191:
3192: RFC 883 November 1983
3193: Domain Names - Implementation and Specification
3194:
3195:
3196: F.ISI.ARPA MD IN F.ISI.ARPA
3197: F.ISI.ARPA MF IN A.ISI.ARPA
3198:
3199: The mailer would interpret these to mean that the mail agent on
3200: F.ISI.ARPA should be able to deliver the mail directly, but that
3201: A.ISI.ARPA is willing to accept the mail for probable forwarding.
3202:
3203: Using this system, an organization could implement a system that
3204: uses organization names for global parts, rather than the usual
3205: host names, but all mail for the organization would be routed the
3206: same, regardless of its local part. Hence and organization with
3207: many hosts would expect to see many forwarding operations.
3208:
3209: Mailbox binding
3210:
3211: In mailbox binding, the mailer uses the entire mail destination
3212: specification to construct a domain name. The encoded domain name
3213: for the mailbox is used as the QNAME field in a QTYPE=MAILB query.
3214:
3215: Several outcomes are possible for this query:
3216:
3217: 1. The query can return a name error indicating that the mailbox
3218: does not exist as a domain name.
3219:
3220: In the long term this would indicate that the specified mailbox
3221: doesn't exist. However, until the use of mailbox binding is
3222: universal, this error condition should be interpreted to mean
3223: that the organization identified by the global part does not
3224: support mailbox binding. The appropriate procedure is to
3225: revert to agent binding at this point.
3226:
3227: 2. The query can return a Mail Rename (MR) RR.
3228:
3229: The MR RR carries new mailbox specification in its RDATA field.
3230: The mailer should replace the old mailbox with the new one and
3231: retry the operation.
3232:
3233: 3. The query can return a MB RR.
3234:
3235: The MB RR carries a domain name for a host in its RDATA field.
3236: The mailer should deliver the message to that host via whatever
3237: protocol is applicable, e.g. SMTP.
3238:
3239: 4. The query can return one or more Mail Group (MG) RRs.
3240:
3241: This condition means that the mailbox was actually a mailing
3242: list or mail group, rather than a single mailbox. Each MG RR
3243: has a RDATA field that identifies a mailbox that is a member of
3244:
3245:
3246:
3247: Mockapetris [Page 54]
3248:
3249:
3250: RFC 883 November 1983
3251: Domain Names - Implementation and Specification
3252:
3253:
3254: the group. The mailer should deliver a copy of the message to
3255: each member.
3256:
3257: 5. The query can return a MB RR as well as one or more MG RRs.
3258:
3259: This condition means the the mailbox was actually a mailing
3260: list. The mailer can either deliver the message to the host
3261: specified by the MB RR, which will in turn do the delivery to
3262: all members, or the mailer can use the MG RRs to do the
3263: expansion itself.
3264:
3265: In any of these cases, the response may include a Mail Information
3266: (MINFO) RR. This RR is usually associated with a mail group, but
3267: is legal with a MB. The MINFO RR identifies two mailboxes. One
3268: of these identifies a responsible person for the original mailbox
3269: name. This mailbox should be used for requests to be added to a
3270: mail group, etc. The second mailbox name in the MINFO RR
3271: identifies a mailbox that should receive error messages for mail
3272: failures. This is particularly appropriate for mailing lists when
3273: errors in member names should be reported to a person other than
3274: the one who sends a message to the list. New fields may be added
3275: to this RR in the future.
3276:
3277:
3278:
3279:
3280:
3281:
3282:
3283:
3284:
3285:
3286:
3287:
3288:
3289:
3290:
3291:
3292:
3293:
3294:
3295:
3296:
3297:
3298:
3299:
3300:
3301:
3302:
3303:
3304:
3305: Mockapetris [Page 55]
3306:
3307:
3308: RFC 883 November 1983
3309: Domain Names - Implementation and Specification
3310:
3311:
3312: Appendix 1 - Domain Name Syntax Specification
3313:
3314: The preferred syntax of domain names is given by the following BNF
3315: rules. Adherence to this syntax will result in fewer problems with
3316: many applications that use domain names (e.g., mail, TELNET). Note
3317: that some applications use domain names containing binary information
3318: and hence do not follow this syntax.
3319:
3320: <domain> ::= <subdomain> | " "
3321:
3322: <subdomain> ::= <label> | <subdomain> "." <label>
3323:
3324: <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
3325:
3326: <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
3327:
3328: <let-dig-hyp> ::= <let-dig> | "-"
3329:
3330: <let-dig> ::= <letter> | <digit>
3331:
3332: <letter> ::= any one of the 52 alphabetic characters A through Z
3333: in upper case and a through z in lower case
3334:
3335: <digit> ::= any one of the ten digits 0 through 9
3336:
3337: Note that while upper and lower case letters are allowed in domain
3338: names no significance is attached to the case. That is, two names
3339: with the same spelling but different case are to be treated as if
3340: identical.
3341:
3342: The labels must follow the rules for ARPANET host names. They must
3343: start with a letter, end with a letter or digit, and have as interior
3344: characters only letters, digits, and hyphen. There are also some
3345: restrictions on the length. Labels must be 63 characters or less.
3346:
3347: For example, the following strings identify hosts in the ARPA
3348: Internet:
3349:
3350: F.ISI.ARPA LINKABIT-DCN5.ARPA UCL-TAC.ARPA
3351:
3352:
3353:
3354:
3355:
3356:
3357:
3358:
3359:
3360:
3361:
3362:
3363: Mockapetris [Page 56]
3364:
3365:
3366: RFC 883 November 1983
3367: Domain Names - Implementation and Specification
3368:
3369:
3370: Appendix 2 - Field formats and encodings
3371:
3372: +-----------------------------------------------+
3373: | |
3374: | ***** WARNING ***** |
3375: | |
3376: | The following formats are preliminary and |
3377: | are included for purposes of explanation only.|
3378: | In particular, new RR types will be added, |
3379: | and the size, position, and encoding of |
3380: | fields are subject to change. |
3381: | |
3382: +-----------------------------------------------+
3383:
3384: TYPE values
3385:
3386: TYPE fields are used in resource records. Note that these types
3387: are not the same as the QTYPE fields used in queries, although the
3388: functions are often similar.
3389:
3390: TYPE value meaning
3391:
3392: A 1 a host address
3393:
3394: NS 2 an authoritative name server
3395:
3396: MD 3 a mail destination
3397:
3398: MF 4 a mail forwarder
3399:
3400: CNAME 5 the canonical name for an alias
3401:
3402: SOA 6 marks the start of a zone of authority
3403:
3404: MB 7 a mailbox domain name
3405:
3406: MG 8 a mail group member
3407:
3408: MR 9 a mail rename domain name
3409:
3410: NULL 10 a null RR
3411:
3412: WKS 11 a well known service description
3413:
3414: PTR 12 a domain name pointer
3415:
3416: HINFO 13 host information
3417:
3418: MINFO 14 mailbox or mail list information
3419:
3420:
3421: Mockapetris [Page 57]
3422:
3423:
3424: RFC 883 November 1983
3425: Domain Names - Implementation and Specification
3426:
3427:
3428: QTYPE values
3429:
3430: QTYPE fields appear in the question part of a query. They include
3431: the values of TYPE with the following additions:
3432:
3433: AXFR 252 A request for a transfer of an entire zone of authority
3434:
3435: MAILB 253 A request for mailbox-related records (MB, MG or MR)
3436:
3437: MAILA 254 A request for mail agent RRs (MD and MF)
3438:
3439: * 255 A request for all records
3440:
3441: CLASS values
3442:
3443: CLASS fields appear in resource records
3444:
3445: CLASS value meaning
3446:
3447: IN 1 the ARPA Internet
3448:
3449: CS 2 the computer science network (CSNET)
3450:
3451: QCLASS values
3452:
3453: QCLASS fields appear in the question section of a query. They
3454: include the values of CLASS with the following additions:
3455:
3456: * 255 any class
3457:
3458:
3459:
3460:
3461:
3462:
3463:
3464:
3465:
3466:
3467:
3468:
3469:
3470:
3471:
3472:
3473:
3474:
3475:
3476:
3477:
3478:
3479: Mockapetris [Page 58]
3480:
3481:
3482: RFC 883 November 1983
3483: Domain Names - Implementation and Specification
3484:
3485:
3486: Standard resource record formats
3487:
3488: All RRs have the same top level format shown below:
3489:
3490: 1 1 1 1 1 1
3491: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
3492: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3493: | |
3494: / /
3495: / NAME /
3496: | |
3497: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3498: | TYPE |
3499: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3500: | CLASS |
3501: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3502: | TTL |
3503: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3504: | RDLENGTH |
3505: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
3506: / RDATA /
3507: / /
3508: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3509:
3510: where:
3511:
3512: NAME - a compressed domain name to which this resource
3513: record pertains.
3514:
3515: TYPE - two octets containing one of the RR type codes
3516: defined in Appendix 2. This field specifies the
3517: meaning of the data in the RDATA field.
3518:
3519: CLASS - two octets which specifies the class of the data in
3520: the RDATA field.
3521:
3522: TTL - a 16 bit signed integer that specifies the time
3523: interval that the resource record may be cached
3524: before the source of the information should again be
3525: consulted. Zero values are interpreted to mean that
3526: the RR can only be used for the transaction in
3527: progress, and should not be cached. For example, SOA
3528: records are always distributed with a zero TTL to
3529: prohibit caching. Zero values can also be used for
3530: extremely volatile data.
3531:
3532: RDLENGTH- an unsigned 16 bit integer that specifies the length
3533: in octets of the RDATA field.
3534:
3535:
3536:
3537: Mockapetris [Page 59]
3538:
3539:
3540: RFC 883 November 1983
3541: Domain Names - Implementation and Specification
3542:
3543:
3544: RDATA - a variable length string of octets that describes the
3545: resource. The format of this information varies
3546: according to the TYPE and CLASS of the resource
3547: record.
3548:
3549: The format of the RDATA field is standard for all classes for the
3550: RR types NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR, HINFO, MINFO and
3551: NULL. These formats are shown below together with the appropriate
3552: additional section RR processing.
3553:
3554: CNAME RDATA format
3555:
3556: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3557: / CNAME /
3558: / /
3559: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3560:
3561: where:
3562:
3563: CNAME - A compressed domain name which specifies that the
3564: domain name of the RR is an alias for a canonical
3565: name specified by CNAME.
3566:
3567: CNAME records cause no additional section processing. The
3568: RDATA section of a CNAME line in a master file is a standard
3569: printed domain name.
3570:
3571: HINFO RDATA format
3572:
3573: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3574: / CPU /
3575: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3576: / OS /
3577: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3578:
3579: where:
3580:
3581: CPU - A character string which specifies the CPU type. The
3582: character string is represented as a single octet
3583: length followed by that number of characters. The
3584: following standard strings are defined:.
3585:
3586: PDP-11/70 C/30 C/70 VAX-11/780
3587: H-316 H-516 DEC-2060 DEC-1090T
3588: ALTO IBM-PC IBM-PC/XT PERQ
3589: IBM-360/67 IBM-370/145
3590:
3591: OS - A character string which specifies the operating system
3592: type. The character string is represented as a single octet
3593:
3594:
3595: Mockapetris [Page 60]
3596:
3597:
3598: RFC 883 November 1983
3599: Domain Names - Implementation and Specification
3600:
3601:
3602: length followed by that number of characters. The following
3603: standard types are defined:.
3604:
3605: ASP AUGUST BKY CCP
3606: DOS/360 ELF EPOS EXEC-8
3607: GCOS GPOS ITS INTERCOM
3608: KRONOS MCP MOS MPX-RT
3609: MULTICS MVT NOS NOS/BE
3610: OS/MVS OS/MVT RIG RSX11
3611: RSX11M RT11 SCOPE SIGNAL
3612: SINTRAN TENEX TOPS10 TOPS20
3613: TSS UNIX VM/370 VM/CMS
3614: VMS WAITS
3615:
3616: HINFO records cause no additional section processing.
3617:
3618: HINFO records are used to acquire general information about a
3619: host. The main use is for protocols such as FTP that can use
3620: special procedures when talking between machines or operating
3621: systems of the same type.
3622:
3623: MB RDATA format
3624:
3625: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3626: / MADNAME /
3627: / /
3628: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3629:
3630: where:
3631:
3632: MADNAME - A compressed domain name which specifies a host which
3633: has the specified mailbox.
3634:
3635: MB records cause additional section processing which looks up
3636: an A type record corresponding to MADNAME. The RDATA section
3637: of a MB line in a master file is a standard printed domain
3638: name.
3639:
3640: MD RDATA format
3641:
3642: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3643: / MADNAME /
3644: / /
3645: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3646:
3647: where:
3648:
3649: MADNAME - A compressed domain name which specifies a host which
3650:
3651:
3652:
3653: Mockapetris [Page 61]
3654:
3655:
3656: RFC 883 November 1983
3657: Domain Names - Implementation and Specification
3658:
3659:
3660: has a mail agent for the domain which should be able
3661: to deliver mail for the domain.
3662:
3663: MD records cause additional section processing which looks up
3664: an A type record corresponding to MADNAME. The RDATA section
3665: of a MD line in a master file is a standard printed domain
3666: name.
3667:
3668: MF RDATA format
3669:
3670: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3671: / MADNAME /
3672: / /
3673: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3674:
3675: where:
3676:
3677: MADNAME - A compressed domain name which specifies a host which
3678: has a mail agent for the domain which will accept
3679: mail for forwarding to the domain.
3680:
3681: MF records cause additional section processing which looks up
3682: an A type record corresponding to MADNAME. The RDATA section
3683: of a MF line in a master file is a standard printed domain
3684: name.
3685:
3686: MG RDATA format
3687:
3688: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3689: / MGMNAME /
3690: / /
3691: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3692:
3693: where:
3694:
3695: MGMNAME - A compressed domain name which specifies a mailbox
3696: which is a member of the mail group specified by the
3697: domain name.
3698:
3699: MF records cause no additional section processing. The RDATA
3700: section of a MF line in a master file is a standard printed
3701: domain name.
3702:
3703:
3704:
3705:
3706:
3707:
3708:
3709:
3710:
3711: Mockapetris [Page 62]
3712:
3713:
3714: RFC 883 November 1983
3715: Domain Names - Implementation and Specification
3716:
3717:
3718: MINFO RDATA format
3719:
3720: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3721: / RMAILBX /
3722: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3723: / EMAILBX /
3724: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3725:
3726: where:
3727:
3728: RMAILBX - A compressed domain name which specifies a mailbox
3729: which is responsible for the mailing list or mailbox.
3730: If this domain name names the root, the owner of the
3731: MINFO RR is responsible for itself. Note that many
3732: existing mailing lists use a mailbox X-request for
3733: the RMAILBX field of mailing list X, e.g.
3734: Msgroup-request for Msgroup. This field provides a
3735: more general mechanism.
3736:
3737: EMAILBX - A compressed domain name which specifies a mailbox
3738: which is to receive error messages related to the
3739: mailing list or mailbox specified by the owner of the
3740: MINFO RR (similar to the ERRORS-TO: field which has
3741: been proposed). If this domain name names the root,
3742: errors should be returned to the sender of the
3743: message.
3744:
3745: MINFO records cause no additional section processing. Although
3746: these records can be associated with a simple mailbox, they are
3747: usually used with a mailing list. The MINFO section of a MF
3748: line in a master file is a standard printed domain name.
3749:
3750: MR RDATA format
3751:
3752: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3753: / NEWNAME /
3754: / /
3755: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3756:
3757: where:
3758:
3759: NEWNAME - A compressed domain name which specifies a mailbox
3760: which is the proper rename of the specified mailbox.
3761:
3762: MR records cause no additional section processing. The RDATA
3763: section of a MR line in a master file is a standard printed
3764: domain name.
3765:
3766:
3767:
3768:
3769: Mockapetris [Page 63]
3770:
3771:
3772: RFC 883 November 1983
3773: Domain Names - Implementation and Specification
3774:
3775:
3776: NULL RDATA format
3777:
3778: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3779: / <anything> /
3780: / /
3781: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3782:
3783: Anything at all may be in the RDATA field so long as it is
3784: 65535 octets or less.
3785:
3786: NULL records cause no additional section processing. NULL RRs
3787: are not allowed in master files.
3788:
3789: NS RDATA format
3790:
3791: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3792: / NSDNAME /
3793: / /
3794: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3795:
3796: where:
3797:
3798: NSDNAME - A compressed domain name which specifies a host which
3799: has a name server for the domain.
3800:
3801: NS records cause both the usual additional section processing
3802: to locate a type A record, and a special search of the zone in
3803: which they reside. The RDATA section of a NS line in a master
3804: file is a standard printed domain name.
3805:
3806: PTR RDATA format
3807:
3808: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3809: / PTRDNAME /
3810: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3811:
3812: where:
3813:
3814: PTRDNAME - A compressed domain name which points to some
3815: location in the domain name space.
3816:
3817: PTR records cause no additional section processing. These RRs
3818: are used in special domains to point to some other location in
3819: the domain space. These records are simple data, and don't
3820: imply any special processing similar to that performed by
3821: CNAME, which identifies aliases. Appendix 3 discusses the use
3822: of these records in the ARPA Internet address domain.
3823:
3824:
3825:
3826:
3827: Mockapetris [Page 64]
3828:
3829:
3830: RFC 883 November 1983
3831: Domain Names - Implementation and Specification
3832:
3833:
3834: SOA RDATA format
3835:
3836: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3837: / MNAME /
3838: / /
3839: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3840: / RNAME /
3841: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3842: | SERIAL |
3843: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3844: | REFRESH |
3845: | |
3846: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3847: | RETRY |
3848: | |
3849: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3850: | EXPIRE |
3851: | |
3852: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3853: | MINIMUM |
3854: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3855:
3856: where:
3857:
3858: MNAME - The domain name of the name server that was the
3859: original source of data for this zone.
3860:
3861: RNAME - A domain name which specifies the mailbox of the
3862: person responsible for this zone.
3863:
3864: SERIAL - The unsigned 16 bit version number of the of the
3865: original copy of the zone. This value wraps and
3866: should be compared using sequence space arithmetic.
3867:
3868: REFRESH - The unsigned 32 bit time interval before the zone
3869: should be refreshed.
3870:
3871: RETRY - The unsigned 32 bit time interval that should elapse
3872: before a failed refresh should be retried.
3873:
3874: EXPIRE - A 32 bit time value that specifies the upper limit on
3875: the time interval that can elapse before the zone is
3876: no longer authoritative.
3877:
3878: MINIMUM - The unsigned 16 bit minimum TTL field that should be
3879: exported with any RR from this zone (other than the
3880: SOA itself).
3881:
3882: SOA records cause no additional section processing. The RDATA
3883:
3884:
3885: Mockapetris [Page 65]
3886:
3887:
3888: RFC 883 November 1983
3889: Domain Names - Implementation and Specification
3890:
3891:
3892: section of a SOA line in a master file is a standard printed
3893: domain name for MNAME, a standard X@Y mailbox specification for
3894: RNAME, and decimal numbers for the remaining parameters.
3895:
3896: All times are in units of seconds.
3897:
3898: Most of these fields are pertinent only for name server
3899: maintenance operations. However, MINIMUM is used in all query
3900: operations that retrieve RRs from a zone. Whenever a RR is
3901: sent in a response to a query, the TTL field is set to the
3902: maximum of the TTL field from the RR and the MINIMUM field in
3903: the appropriate SOA. Thus MINIMUM is a lower bound on the TTL
3904: field for all RRs in a zone. RRs in a zone are never discarded
3905: due to timeout unless the whole zone is deleted. This prevents
3906: partial copies of zones.
3907:
3908:
3909:
3910:
3911:
3912:
3913:
3914:
3915:
3916:
3917:
3918:
3919:
3920:
3921:
3922:
3923:
3924:
3925:
3926:
3927:
3928:
3929:
3930:
3931:
3932:
3933:
3934:
3935:
3936:
3937:
3938:
3939:
3940:
3941:
3942:
3943: Mockapetris [Page 66]
3944:
3945:
3946: RFC 883 November 1983
3947: Domain Names - Implementation and Specification
3948:
3949:
3950: Appendix 3 - Internet specific field formats and operations
3951:
3952: Message transport
3953:
3954: The Internet supports name server access using TCP [10] on server
3955: port 53 (decimal) as well as datagram access using UDP [11] on UDP
3956: port 53 (decimal). Messages sent over TCP virtual circuits are
3957: preceded by an unsigned 16 bit length field which describes the
3958: length of the message, excluding the length field itself.
3959:
3960: +-----------------------------------------------+
3961: | |
3962: | ***** WARNING ***** |
3963: | |
3964: | The following formats are preliminary and |
3965: | are included for purposes of explanation only.|
3966: | In particular, new RR types will be added, |
3967: | and the size, position, and encoding of |
3968: | fields are subject to change. |
3969: | |
3970: +-----------------------------------------------+
3971:
3972: A RDATA format
3973:
3974: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3975: | ADDRESS |
3976: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3977:
3978: where:
3979:
3980: ADDRESS - A 32 bit ARPA internet address
3981:
3982: Hosts that have multiple ARPA Internet addresses will have
3983: multiple A records.
3984:
3985: A records cause no additional section processing. The RDATA
3986: section of an A line in a master file is an Internet address
3987: expressed as four decimal numbers separated by dots without any
3988: imbedded spaces (e.g., "10.2.0.52" or "192.0.5.6").
3989:
3990:
3991:
3992:
3993:
3994:
3995:
3996:
3997:
3998:
3999:
4000:
4001: Mockapetris [Page 67]
4002:
4003:
4004: RFC 883 November 1983
4005: Domain Names - Implementation and Specification
4006:
4007:
4008: WKS RDATA format
4009:
4010: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
4011: | ADDRESS |
4012: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
4013: | PROTOCOL | |
4014: +--+--+--+--+--+--+--+--+ |
4015: | |
4016: / <BIT MAP> /
4017: / /
4018: +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
4019:
4020: where:
4021:
4022: ADDRESS - An 32 bit ARPA Internet address
4023:
4024: PROTOCOL - An 8 bit IP protocol number
4025:
4026: <BIT MAP> - A variable length bit map. The bit map must be a
4027: multiple of 8 bits long.
4028:
4029: The WKS record is used to describe the well known services
4030: supported by a particular protocol on a particular internet
4031: address. The PROTOCOL field specifies an IP protocol number, and
4032: the bit map has one bit per port of the specified protocol. The
4033: first bit corresponds to port 0, the second to port 1, etc. If
4034: less than 256 bits are present, the remainder are assumed to be
4035: zero. The appropriate values for ports and protocols are
4036: specified in [13].
4037:
4038: For example, if PROTOCOL=TCP (6), the 26th bit corresponds to TCP
4039: port 25 (SMTP). If this bit is set, a SMTP server should be
4040: listening on TCP port 25; if zero, SMTP service is not supported
4041: on the specified address.
4042:
4043: The anticipated use of WKS RRs is to provide availability
4044: information for servers for TCP and UDP. If a server supports
4045: both TCP and UDP, or has multiple Internet addresses, then
4046: multiple WKS RRs are used.
4047:
4048: WKS RRs cause no additional section processing. The RDATA section
4049: of a WKS record consists of a decimal protocol number followed by
4050: mnemonic identifiers which specify bits to be set to 1.
4051:
4052: IN-ADDR special domain
4053:
4054: The ARPA internet uses a special domain to support gateway
4055: location and ARPA Internet address to host mapping. The intent of
4056: this domain is to allow queries to locate all gateways on a
4057:
4058:
4059: Mockapetris [Page 68]
4060:
4061:
4062: RFC 883 November 1983
4063: Domain Names - Implementation and Specification
4064:
4065:
4066: particular network in the ARPA Internet, and also to provide a
4067: guaranteed method to perform host address to host name mapping.
4068:
4069: Note that both of these services are similar to functions that
4070: could be performed by inverse queries; the difference is that this
4071: part of the domain name space is structured according to address,
4072: and hence can guarantee that the appropriate data can be located
4073: without an exhaustive search of the domain space. It is
4074: anticipated that the special tree will be used by ARPA Internet
4075: resolvers for all gateway location services, but that address to
4076: name resolution will be performed by first trying the inverse
4077: query on the local name server database followed by a query in the
4078: special space if the inverse query fails.
4079:
4080: The domain is a top level domain called IN-ADDR whose substructure
4081: follows the ARPA Internet addressing structure.
4082:
4083: Domain names in the IN-ADDR domain are defined to have up to four
4084: labels in addition to the IN-ADDR label. Each label is a
4085: character string which expresses a decimal value in the range
4086: 0-255 (with leading zeros omitted except in the case of a zero
4087: octet which is represented by a single zero). These labels
4088: correspond to the 4 octets of an ARPA Internet address.
4089:
4090: Host addresses are represented by domain names that have all four
4091: labels specified. Thus data for ARPA Internet address 10.2.0.52
4092: is located at domain name 52.0.2.10.IN-ADDR. The reversal, though
4093: awkward to read, allows zones to follow the natural grouping of
4094: hosts within networks. For example, 10.IN-ADDR can be a zone
4095: containing data for the ARPANET, while 26.IN-ADDR can be a
4096: separate zone for MILNET. Address nodes are used to hold pointers
4097: to primary host names in the normal domain space.
4098:
4099: Network addresses correspond to some of the non-terminal nodes in
4100: the IN-ADDR tree, since ARPA Internet network numbers are either
4101: 1, 2, or 3 octets. Network nodes are used to hold pointers to
4102: primary host names (which happen to be gateways) in the normal
4103: domain space. Since a gateway is, by definition, on more than one
4104: network, it will typically have two or more network nodes that
4105: point at the gateway. Gateways will also have host level pointers
4106: at their fully qualified addresses.
4107:
4108: Both the gateway pointers at network nodes and the normal host
4109: pointers at full address nodes use the PTR RR to point back to the
4110: primary domain names of the corresponding hosts.
4111:
4112: For example, part of the IN-ADDR domain will contain information
4113: about the ISI to MILNET and MIT gateways, and hosts F.ISI.ARPA and
4114: MULTICS.MIT.ARPA. Assuming that ISI gateway has addresses
4115:
4116:
4117: Mockapetris [Page 69]
4118:
4119:
4120: RFC 883 November 1983
4121: Domain Names - Implementation and Specification
4122:
4123:
4124: 10.2.0.22 and 26.0.0.103, and a name MILNET-GW.ISI.ARPA, and the
4125: MIT gateway has addresses 10.0.0.77 and 18.10.0.4 and a name
4126: GW.MIT.ARPA, the domain database would contain:
4127:
4128: 10.IN-ADDR PTR IN MILNET-GW.ISI.ARPA
4129: 10.IN-ADDR PTR IN GW.MIT.ARPA
4130: 18.IN-ADDR PTR IN GW.MIT.ARPA
4131: 26.IN-ADDR PTR IN MILNET-GW.ISI.ARPA
4132: 22.0.2.10.IN-ADDR PTR IN MILNET-GW.ISI.ARPA
4133: 103.0.0.26.IN-ADDR PTR IN MILNET-GW.ISI.ARPA
4134: 77.0.0.10.IN-ADDR PTR IN GW.MIT.ARPA
4135: 4.0.10.18.IN-ADDR PTR IN GW.MIT.ARPA
4136: 52.0.2.10.IN-ADDR PTR IN F.ISI.ARPA
4137: 6.0.0.10.IN-ADDR PTR IN MULTICS.MIT.ARPA
4138:
4139: Thus a program which wanted to locate gateways on net 10 would
4140: originate a query of the form QTYPE=PTR, QCLASS=IN,
4141: QNAME=10.IN-ADDR. It would receive two RRs in response:
4142:
4143: 10.IN-ADDR PTR IN MILNET-GW.ISI.ARPA
4144: 10.IN-ADDR PTR IN GW.MIT.ARPA
4145:
4146: The program could then originate QTYPE=A, QCLASS=IN queries for
4147: MILNET-GW.ISI.ARPA and GW.MIT.ARPA to discover the ARPA Internet
4148: addresses of these gateways.
4149:
4150: A resolver which wanted to find the host name corresponding to
4151: ARPA Internet host address 10.0.0.6 might first try an inverse
4152: query on the local name server, but find that this information
4153: wasn't available. It could then try a query of the form
4154: QTYPE=PTR, QCLASS=IN, QNAME=6.0.0.10.IN-ADDR, and would receive:
4155:
4156: 6.0.0.10.IN-ADDR PTR IN MULTICS.MIT.ARPA
4157:
4158: Several cautions apply to the use of these services:
4159:
4160: Since the IN-ADDR special domain and the normal domain for a
4161: particular host or gateway will be in different zones, the
4162: possibility exists that that the data may be inconsistent.
4163:
4164: Gateways will often have two names in separate domains, only
4165: one of which can be primary.
4166:
4167: Systems that use the domain database to initialize their
4168: routing tables must start with enough gateway information to
4169: guarantee that they can access the appropriate name server.
4170:
4171: The gateway data only reflects the existence of a gateway in a
4172:
4173:
4174:
4175: Mockapetris [Page 70]
4176:
4177:
4178: RFC 883 November 1983
4179: Domain Names - Implementation and Specification
4180:
4181:
4182: manner equivalent to the current HOSTS.TXT file. It doesn't
4183: replace the dynamic availability information from GGP or EGP.
4184:
4185:
4186:
4187:
4188:
4189:
4190:
4191:
4192:
4193:
4194:
4195:
4196:
4197:
4198:
4199:
4200:
4201:
4202:
4203:
4204:
4205:
4206:
4207:
4208:
4209:
4210:
4211:
4212:
4213:
4214:
4215:
4216:
4217:
4218:
4219:
4220:
4221:
4222:
4223:
4224:
4225:
4226:
4227:
4228:
4229:
4230:
4231:
4232:
4233: Mockapetris [Page 71]
4234:
4235:
4236: RFC 883 November 1983
4237: Domain Names - Implementation and Specification
4238:
4239:
4240: REFERENCES and BIBLIOGRAPHY
4241:
4242: [1] E. Feinler, K. Harrenstien, Z. Su, and V. White, "DOD Internet
4243: Host Table Specification", RFC 810, Network Information Center,
4244: SRI International, March 1982.
4245:
4246: [2] J. Postel, "Computer Mail Meeting Notes", RFC 805,
4247: USC/Information Sciences Institute, February 1982.
4248:
4249: [3] Z. Su, and J. Postel, "The Domain Naming Convention for Internet
4250: User Applications", RFC 819, Network Information Center, SRI
4251: International, August 1982.
4252:
4253: [4] Z. Su, "A Distributed System for Internet Name Service",
4254: RFC 830, Network Information Center, SRI International,
4255: October 1982.
4256:
4257: [5] K. Harrenstien, and V. White, "NICNAME/WHOIS", RFC 812, Network
4258: Information Center, SRI International, March 1982.
4259:
4260: [6] M. Solomon, L. Landweber, and D. Neuhengen, "The CSNET Name
4261: Server", Computer Networks, vol 6, nr 3, July 1982.
4262:
4263: [7] K. Harrenstien, "NAME/FINGER", RFC 742, Network Information
4264: Center, SRI International, December 1977.
4265:
4266: [8] J. Postel, "Internet Name Server", IEN 116, USC/Information
4267: Sciences Institute, August 1979.
4268:
4269: [9] K. Harrenstien, V. White, and E. Feinler, "Hostnames Server",
4270: RFC 811, Network Information Center, SRI International,
4271: March 1982.
4272:
4273: [10] J. Postel, "Transmission Control Protocol", RFC 793,
4274: USC/Information Sciences Institute, September 1981.
4275:
4276: [11] J. Postel, "User Datagram Protocol", RFC 768, USC/Information
4277: Sciences Institute, August 1980.
4278:
4279: [12] J. Postel, "Simple Mail Transfer Protocol", RFC 821,
4280: USC/Information Sciences Institute, August 1980.
4281:
4282: [13] J. Reynolds, and J. Postel, "Assigned Numbers", RFC 870,
4283: USC/Information Sciences Institute, October 1983.
4284:
4285: [14] P. Mockapetris, "Domain names - Concepts and Facilities,"
4286: RFC 882, USC/Information Sciences Institute, November 1983.
4287:
4288:
4289:
4290:
4291: Mockapetris [Page 72]
4292:
4293:
4294: RFC 883 November 1983
4295: Domain Names - Implementation and Specification
4296:
4297:
4298: INDEX
4299:
4300: * usage........................................................37, 57
4301:
4302: A RDATA format.....................................................67
4303:
4304: byte order..........................................................6
4305:
4306: cache queue....................................................35, 42
4307: character case..................................................7, 31
4308: CLASS...........................................................9, 58
4309: completion.........................................................19
4310: compression........................................................31
4311: CNAME RR...........................................................60
4312:
4313: header format......................................................26
4314: HINFO RR...........................................................60
4315:
4316: include files......................................................43
4317: inverse queries....................................................17
4318:
4319: mailbox names......................................................53
4320: master files.......................................................43
4321: MB RR..............................................................61
4322: MD RR..............................................................61
4323: message format.....................................................13
4324: MF RR..............................................................62
4325: MG RR..............................................................62
4326: MINFO RR...........................................................63
4327: MR RR..............................................................63
4328:
4329: NULL RR............................................................64
4330: NS RR..............................................................64
4331:
4332: PTR RR.........................................................64, 69
4333:
4334: QCLASS.............................................................58
4335: QTYPE..............................................................57
4336: queries (standard).................................................15
4337:
4338: recursive service..................................................24
4339: RR format..........................................................59
4340:
4341: SOA RR.............................................................65
4342: Special domains....................................................68
4343:
4344: TYPE...............................................................57
4345:
4346: WKS type RR........................................................68
4347:
4348:
4349: Mockapetris [Page 73]
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.