diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc883.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc883.txt')
-rw-r--r-- | doc/rfc/rfc883.txt | 4349 |
1 files changed, 4349 insertions, 0 deletions
diff --git a/doc/rfc/rfc883.txt b/doc/rfc/rfc883.txt new file mode 100644 index 0000000..bdffb52 --- /dev/null +++ b/doc/rfc/rfc883.txt @@ -0,0 +1,4349 @@ + +Network Working Group P. Mockapetris +Request for Comments: 883 ISI + November 1983 + + DOMAIN NAMES - IMPLEMENTATION and SPECIFICATION + + +-----------------------------------------------------+ + | | + | This memo discusses the implementation of domain | + | name servers and resolvers, specifies the format of | + | transactions, and discusses the use of domain names | + | in the context of existing mail systems and other | + | network software. | + | | + | This memo assumes that the reader is familiar with | + | RFC 882, "Domain Names - Concepts and Facilities" | + | which discusses the basic principles of domain | + | names and their use. | + | | + | The algorithms and internal data structures used in | + | this memo are offered as suggestions rather than | + | requirements; implementers are free to design their | + | own structures so long as the same external | + | behavior is achieved. | + | | + +-----------------------------------------------------+ + + + + + +-----------------------------------------------+ + | | + | ***** WARNING ***** | + | | + | This RFC contains format specifications which | + | are preliminary and are included for purposes | + | of explanation only. Do not attempt to use | + | this information for actual implementations. | + | | + +-----------------------------------------------+ + + + + + + + + + + + + + + + +Mockapetris [Page i] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +TABLE OF CONTENTS + INTRODUCTION........................................................3 + Overview.........................................................3 + Implementation components........................................2 + Conventions......................................................6 + Design philosophy................................................8 + NAME SERVER TRANSACTIONS...........................................11 + Introduction....................................................11 + Query and response transport....................................11 + Overall message format..........................................13 + The contents of standard queries and responses..................15 + Standard query and response example.............................15 + The contents of inverse queries and responses...................17 + Inverse query and response example..............................18 + Completion queries and responses................................19 + Completion query and response example...........................22 + Recursive Name Service..........................................24 + Header section format...........................................26 + Question section format.........................................29 + Resource record format..........................................30 + Domain name representation and compression......................31 + Organization of the Shared database.............................33 + Query processing................................................36 + Inverse query processing........................................37 + Completion query processing.....................................38 + NAME SERVER MAINTENANCE............................................39 + Introduction....................................................39 + Conceptual model of maintenance operations......................39 + Name server data structures and top level logic.................41 + Name server file loading........................................43 + Name server file loading example................................45 + Name server remote zone transfer................................47 + RESOLVER ALGORITHMS................................................50 + Operations......................................................50 + DOMAIN SUPPORT FOR MAIL............................................52 + Introduction....................................................52 + Agent binding...................................................53 + Mailbox binding.................................................54 + Appendix 1 - Domain Name Syntax Specification......................56 + Appendix 2 - Field formats and encodings...........................57 + TYPE values.....................................................57 + QTYPE values....................................................57 + CLASS values....................................................58 + QCLASS values...................................................58 + Standard resource record formats................................59 + Appendix 3 - Internet specific field formats and operations........67 + REFERENCES and BIBLIOGRAPHY........................................72 + INDEX..............................................................73 + + + +Mockapetris [Page ii] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +INTRODUCTION + + Overview + + The goal of domain names is to provide a mechanism for naming + resources in such a way that the names are usable in different + hosts, networks, protocol families, internets, and administrative + organizations. + + From the user's point of view, domain names are useful as + arguments to a local agent, called a resolver, which retrieves + information associated with the domain name. Thus a user might + ask for the host address or mail information associated with a + particular domain name. To enable the user to request a + particular type of information, an appropriate query type is + passed to the resolver with the domain name. To the user, the + domain tree is a single information space. + + From the resolver's point of view, the database that makes up the + domain space is distributed among various name servers. Different + parts of the domain space are stored in different name servers, + although a particular data item will usually be stored redundantly + in two or more name servers. The resolver starts with knowledge + of at least one name server. When the resolver processes a user + query it asks a known name server for the information; in return, + the resolver either receives the desired information or a referral + to another name server. Using these referrals, resolvers learn + the identities and contents of other name servers. Resolvers are + responsible for dealing with the distribution of the domain space + and dealing with the effects of name server failure by consulting + redundant databases in other servers. + + Name servers manage two kinds of data. The first kind of data + held in sets called zones; each zone is the complete database for + a particular subtree of the domain space. This data is called + authoritative. A name server periodically checks to make sure + that its zones are up to date, and if not obtains a new copy of + updated zones from master files stored locally or in another name + server. The second kind of data is cached data which was acquired + by a local resolver. This data may be incomplete but improves the + performance of the retrieval process when non-local data is + repeatedly accessed. Cached data is eventually discarded by a + timeout mechanism. + + This functional structure isolates the problems of user interface, + failure recovery, and distribution in the resolvers and isolates + the database update and refresh problems in the name servers. + + + + +Mockapetris [Page 1] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Implementation components + + A host can participate in the domain name system in a number of + ways, depending on whether the host runs programs that retrieve + information from the domain system, name servers that answer + queries from other hosts, or various combinations of both + functions. The simplest, and perhaps most typical, configuration + is shown below: + + Local Host | Foreign + | + +---------+ +----------+ | +--------+ + | | user queries | |queries | | | + | User |-------------->| |---------|->|Foreign | + | Program | | Resolver | | | Name | + | |<--------------| |<--------|--| Server | + | | user responses| |responses| | | + +---------+ +----------+ | +--------+ + | A | + cache additions | | references | + V | | + +----------+ | + | database | | + +----------+ | + + User programs interact with the domain name space through + resolvers; the format of user queries and user responses is + specific to the host and its operating system. User queries will + typically be operating system calls, and the resolver and its + database will be part of the host operating system. Less capable + hosts may choose to implement the resolver as a subroutine to be + linked in with every program that needs its services. + + Resolvers answer user queries with information they acquire via + queries to foreign name servers, and may also cache or reference + domain information in the local database. + + Note that the resolver may have to make several queries to several + different foreign name servers to answer a particular user query, + and hence the resolution of a user query may involve several + network accesses and an arbitrary amount of time. The queries to + foreign name servers and the corresponding responses have a + standard format described in this memo, and may be datagrams. + + + + + + + + +Mockapetris [Page 2] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Depending on its capabilities, a name server could be a stand + alone program on a dedicated machine or a process or processes on + a large timeshared host. A simple configuration might be: + + Local Host | Foreign + | + +---------+ | + / /| | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + + Here the name server acquires information about one or more zones + by reading master files from its local file system, and answers + queries about those zones that arrive from foreign resolvers. + + A more sophisticated name server might acquire zones from foreign + name servers as well as local master files. This configuration is + shown below: + + Local Host | Foreign + | + +---------+ | + / /| | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + A |maintenance | +--------+ + | \------------|->| | + | queries | |Foreign | + | | | Name | + \------------------|--| Server | + maintenance responses | +--------+ + + In this configuration, the name server periodically establishes a + virtual circuit to a foreign name server to acquire a copy of a + zone or to check that an existing copy has not changed. The + messages sent for these maintenance activities follow the same + form as queries and responses, but the message sequences are + somewhat different. + + + +Mockapetris [Page 3] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + The information flow in a host that supports all aspects of the + domain name system is shown below: + + Local Host | Foreign + | + +---------+ +----------+ | +--------+ + | | user queries | |queries | | | + | User |-------------->| |---------|->|Foreign | + | Program | | Resolver | | | Name | + | |<--------------| |<--------|--| Server | + | | user responses| |responses| | | + +---------+ +----------+ | +--------+ + | A | + cache additions | | references | + V | | + +----------+ | + | Shared | | + | database | | + +----------+ | + A | | + +---------+ refreshes | | references | + / /| | V | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + A |maintenance | +--------+ + | \------------|->| | + | queries | |Foreign | + | | | Name | + \------------------|--| Server | + maintenance responses | +--------+ + + The shared database holds domain space data for the local name + server and resolver. The contents of the shared database will + typically be a mixture of authoritative data maintained by the + periodic refresh operations of the name server and cached data + from previous resolver requests. The structure of the domain data + and the necessity for synchronization between name servers and + resolvers imply the general characteristics of this database, but + the actual format is up to the local implementer. This memo + suggests a multiple tree format. + + + + + + +Mockapetris [Page 4] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + This memo divides the implementation discussion into sections: + + NAME SERVER TRANSACTIONS, which discusses the formats for name + servers queries and the corresponding responses. + + NAME SERVER MAINTENANCE, which discusses strategies, + algorithms, and formats for maintaining the data residing in + name servers. These services periodically refresh the local + copies of zones that originate in other hosts. + + RESOLVER ALGORITHMS, which discusses the internal structure of + resolvers. This section also discusses data base sharing + between a name server and a resolver on the same host. + + DOMAIN SUPPORT FOR MAIL, which discusses the use of the domain + system to support mail transfer. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 5] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Conventions + + The domain system has several conventions dealing with low-level, + but fundamental, issues. While the implementer is free to violate + these conventions WITHIN HIS OWN SYSTEM, he must observe these + conventions in ALL behavior observed from other hosts. + + ********** Data Transmission Order ********** + + The order of transmission of the header and data described in this + document is resolved to the octet level. Whenever a diagram shows + a group of octets, the order of transmission of those octets is + the normal order in which they are read in English. For example, + in the following diagram the octets are transmitted in the order + they are numbered. + + + 0 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 3 | 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 5 | 6 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Transmission Order of Bytes + + Whenever an octet represents a numeric quantity the left most bit + in the diagram is the high order or most significant bit. That + is, the bit labeled 0 is the most significant bit. For example, + the following diagram represents the value 170 (decimal). + + + 0 1 2 3 4 5 6 7 + +-+-+-+-+-+-+-+-+ + |1 0 1 0 1 0 1 0| + +-+-+-+-+-+-+-+-+ + + Significance of Bits + + Similarly, whenever a multi-octet field represents a numeric + quantity the left most bit of the whole field is the most + significant bit. When a multi-octet quantity is transmitted the + most significant octet is transmitted first. + + + + + +Mockapetris [Page 6] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + ********** Character Case ********** + + All comparisons between character strings (e.g. labels, domain + names, etc.) are done in a case-insensitive manner. + + When data enters the domain system, its original case should be + preserved whenever possible. In certain circumstances this cannot + be done. For example, if two domain names x.y and X.Y are entered + into the domain database, they are interpreted as the same name, + and hence may have a single representation. The basic rule is + that case can be discarded only when data is used to define + structure in a database, and two names are identical when compared + in a case insensitive manner. + + Loss of case sensitive data must be minimized. Thus while data + for x.y and X.Y may both be stored under x.y, data for a.x and B.X + can be stored as a.x and B.x, but not A.x, A.X, b.x, or b.X. In + general, this prevents the first component of a domain name from + loss of case information. + + Systems administrators who enter data into the domain database + should take care to represent the data they supply to the domain + system in a case-consistent manner if their system is + case-sensitive. The data distribution system in the domain system + will ensure that consistent representations are preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 7] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Design philosophy + + The design presented in this memo attempts to provide a base which + will be suitable for several existing networks. An equally + important goal is to provide these services within a framework + that is capable of adjustment to fit the evolution of services in + early clients as well as to accommodate new networks. + + Since it is impossible to predict the course of these + developments, the domain system attempts to provide for evolution + in the form of an extensible framework. This section describes + the areas in which we expect to see immediate evolution. + + DEFINING THE DATABASE + + This memo defines methods for partitioning the database and data + for host names, host addresses, gateway information, and mail + support. Experience with this system will provide guidance for + future additions. + + While the present system allows for many new RR types, classes, + etc., we feel that it is more important to get the basic services + in operation than to cover an exhaustive set of information. + Hence we have limited the data types to those we felt were + essential, and would caution designers to avoid implementations + which are based on the number of existing types and classes. + Extensibility in this area is very important. + + While the domain system provides techniques for partitioning the + database, policies for administrating the orderly connection of + separate domains and guidelines for constructing the data that + makes up a particular domain will be equally important to the + success of the system. Unfortunately, we feel that experience + with prototype systems will be necessary before this question can + be properly addressed. Thus while this memo has minimal + discussion of these issues, it is a critical area for development. + + TYING TOGETHER INTERNETS + + Although it is very difficult to characterize the types of + networks, protocols, and applications that will be clients of the + domain system, it is very obvious that some of these applications + will cross the boundaries of network and protocol. At the very + least, mail is such a service. + + Attempts to unify two such systems must deal with two major + problems: + + 1. Differing formats for environment sensitive data. For example, + + +Mockapetris [Page 8] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + network addresses vary in format, and it is unreasonable to + expect to enforce consistent conventions. + + 2. Connectivity may require intermediaries. For example, it is a + frequent occurence that mail is sent between hosts that share + no common protocol. + + The domain system acknowledges that these are very difficult + problems, and attempts to deal with both problems through its + CLASS mechanism: + + 1. The CLASS field in RRs allows data to be tagged so that all + programs in the domain system can identify the format in use. + + 2. The CLASS field allows the requestor to identify the format of + data which can be understood by the requestor. + + 3. The CLASS field guides the search for the requested data. + + The last point is central to our approach. When a query crosses + protocol boundaries, it must be guided though agents capable of + performing whatever translation is required. For example, when a + mailer wants to identify the location of a mailbox in a portion of + the domain system that doesn't have a compatible protocol, the + query must be guided to a name server that can cross the boundary + itself or form one link in a chain that can span the differences. + + If query and response transport were the only problem, then this + sort of problem could be dealt with in the name servers + themselves. However, the applications that will use domain + service have similar problems. For example, mail may need to be + directed through mail gateways, and the characteristics of one of + the environments may not permit frequent connectivity between name + servers in all environments. + + These problems suggest that connectivity will be achieved through + a variety of measures: + + Translation name servers that act as relays between different + protocols. + + Translation application servers that translate application + level transactions. + + Default database entries that route traffic through application + level forwarders in ways that depend on the class of the + requestor. + + While this approach seems best given our current understanding of + + +Mockapetris [Page 9] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + the problem, we realize that the approach of using resource data + that transcends class may be appropriate in future designs or + applications. By not defining class to be directly related to + protocol, network, etc., we feel that such services could be added + by defining a new "universal" class, while the present use of + class will provide immediate service. + + This problem requires more thought and experience before solutions + can be discovered. The concepts of CLASS, recursive servers and + other mechanisms are intended as tools for acquiring experience + and not as final solutions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 10] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +NAME SERVER TRANSACTIONS + + Introduction + + The primary purpose of name servers is to receive queries from + resolvers and return responses. The overall model of this service + is that a program (typically a resolver) asks the name server + questions (queries) and gets responses that either answer the + question or refer the questioner to another name server. Other + functions related to name server database maintenance use similar + procedures and formats and are discussed in a section later in + this memo. + + There are three kinds of queries presently defined: + + 1. Standard queries that ask for a specified resource attached + to a given domain name. + + 2. Inverse queries that specify a resource and ask for a domain + name that possesses that resource. + + 3. Completion queries that specify a partial domain name and a + target domain and ask that the partial domain name be + completed with a domain name close to the target domain. + + This memo uses an unqualified reference to queries to refer to + either all queries or standard queries when the context is clear. + + Query and response transport + + Name servers and resolvers use a single message format for all + communications. The message format consists of a variable-length + octet string which includes binary values. + + The messages used in the domain system are designed so that they + can be carried using either datagrams or virtual circuits. To + accommodate the datagram style, all responses carry the query as + part of the response. + + While the specification allows datagrams to be used in any + context, some activities are ill suited to datagram use. For + example, maintenance transactions and recursive queries typically + require the error control of virtual circuits. Thus datagram use + should be restricted to simple queries. + + The domain system assumes that a datagram service provides: + + 1. A non-reliable (i.e. best effort) method of transporting a + message of up to 512 octets. + + +Mockapetris [Page 11] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Hence datagram messages are limited to 512 octets. If a + datagram message would exceed 512 octets, it is truncated + and a truncation flag is set in its header. + + 2. A message size that gives the number of octets in the + datagram. + + The main implications for programs accessing name servers via + datagrams are: + + 1. Datagrams should not be used for maintenance transactions + and recursive queries. + + 2. Since datagrams may be lost, the originator of a query must + perform error recovery (such as retransmissions) as + appropriate. + + 3. Since network or host delay may cause retransmission when a + datagram has not been lost, the originator of a query must + be ready to deal with duplicate responses. + + The domain system assumes that a virtual circuit service provides: + + 1. A reliable method of transmitting a message of up to 65535 + octets. + + 2. A message size that gives the number of octets in the + message. + + If the virtual circuit service does not provide for message + boundary detection or limits transmission size to less than + 65535 octets, then messages are prefaced with an unsigned 16 + bit length field and broken up into separate transmissions + as required. The length field is only prefaced on the first + message. This technique is used for TCP virtual circuits. + + 3. Multiple messages may be sent over a virtual circuit. + + 4. A method for closing a virtual circuit. + + 5. A method for detecting that the other party has requested + that the virtual circuit be closed. + + The main implications for programs accessing name servers via + virtual circuits are: + + 1. Either end of a virtual circuit may initiate a close when + there is no activity in progress. The other end should + comply. + + +Mockapetris [Page 12] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + The decision to initiate a close is a matter of individual + site policy; some name servers may leave a virtual circuit + open for an indeterminate period following a query to allow + for subsequent queries; other name servers may choose to + initiate a close following the completion of the first query + on a virtual circuit. Of course, name servers should not + close the virtual circuit in the midst of a multiple message + stream used for zone transfer. + + 2. Since network delay may cause one end to erroneously believe + that no activity is in progress, a program which receives a + virtual circuit close while a query is in progress should + close the virtual circuit and resubmit the query on a new + virtual circuit. + + All messages may use a compression scheme to reduce the space + consumed by repetitive domain names. The use of the compression + scheme is optional for the sender of a message, but all receivers + must be capable of decoding compressed domain names. + + Overall message format + + All messages sent by the domain system are divided into 5 sections + (some of which are empty in certain cases) shown below: + + +---------------------+ + | Header | + +---------------------+ + | Question | the question for the name server + +---------------------+ + | Answer | answering resource records (RRs) + +---------------------+ + | Authority | RRs pointing toward an authority + +---------------------+ + | Additional | RRs holding pertinent information + +---------------------+ + + The header section is always present. The header includes fields + that specify which of the remaining sections are present, and also + specify whether the message is a query, inverse query, completion + query, or response. + + The question section contains fields that describe a question to a + name server. These fields are a query type (QTYPE), a query class + (QCLASS), and a query domain name (QNAME). + + The last three sections have the same format: a possibly empty + list of concatenated resource records (RRs). The answer section + contains RRs that answer the question; the authority section + + +Mockapetris [Page 13] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + contains RRs that point toward an authoritative name server; the + additional records section contains RRs which relate to the query, + but are not strictly answers for the question. + + The next two sections of this memo illustrate the use of these + message sections through examples; a detailed discussion of data + formats follows the examples. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 14] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + The contents of standard queries and responses + + When a name server processes a standard query, it first determines + whether it is an authority for the domain name specified in the + query. + + If the name server is an authority, it returns either: + + 1. the specified resource information + + 2. an indication that the specified name does not exist + + 3. an indication that the requested resource information does + not exist + + If the name server is not an authority for the specified name, it + returns whatever relevant resource information it has along with + resource records that the requesting resolver can use to locate an + authoritative name server. + + Standard query and response example + + The overall structure of a query for retrieving information for + Internet mail for domain F.ISI.ARPA is shown below: + + +-----------------------------------------+ + Header | OPCODE=QUERY, ID=2304 | + +-----------------------------------------+ + Question |QTYPE=MAILA, QCLASS=IN, QNAME=F.ISI.ARPA | + +-----------------------------------------+ + Answer | <empty> | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + + The header includes an opcode field that specifies that this + datagram is a query, and an ID field that will be used to + associate replies with the original query. (Some additional + header fields have been omitted for clarity.) The question + section specifies that the type of the query is for mail agent + information, that only ARPA Internet information is to be + considered, and that the domain name of interest is F.ISI.ARPA. + The remaining sections are empty, and would not use any octets in + a real query. + + + + + +Mockapetris [Page 15] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + One possible response to this query might be: + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=2304 | + +-----------------------------------------+ + Question |QTYPE=MAILA, QCLASS=IN, QNAME=F.ISI.ARPA | + +-----------------------------------------+ + Answer | <empty> | + +-----------------------------------------+ + Authority | ARPA NS IN A.ISI.ARPA | + | ------- | + | ARPA NS IN F.ISI.ARPA | + +-----------------------------------------+ + Additional | F.ISI.ARPA A IN 10.2.0.52 | + | ------- | + | A.ISI.ARPA A IN 10.1.0.22 | + +-----------------------------------------+ + + This type of response would be returned by a name server that was + not an authority for the domain name F.ISI.ARPA. The header field + specifies that the datagram is a response to a query with an ID of + 2304. The question section is copied from the question section in + the query datagram. + + The answer section is empty because the name server did not have + any information that would answer the query. (Name servers may + happen to have cached information even if they are not + authoritative for the query.) + + The best that this name server could do was to pass back + information for the domain ARPA. The authority section specifies + two name servers for the domain ARPA using the Internet family: + A.ISI.ARPA and F.ISI.ARPA. Note that it is merely a coincidence + that F.ISI.ARPA is a name server for ARPA as well as the subject + of the query. + + In this case, the name server included in the additional records + section the Internet addresses for the two hosts specified in the + authority section. Such additional data is almost always + available. + + Given this response, the process that originally sent the query + might resend the query to the name server on A.ISI.ARPA, with a + new ID of 2305. + + + + + + + +Mockapetris [Page 16] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + The name server on A.ISI.ARPA might return a response: + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=2305 | + +-----------------------------------------+ + Question |QTYPE=MAILA, QCLASS=IN, QNAME=F.ISI.ARPA | + +-----------------------------------------+ + Answer | F.ISI.ARPA MD IN F.ISI.ARPA | + | ------- | + | F.ISI.ARPA MF IN A.ISI.ARPA | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | F.ISI.ARPA A IN 10.2.0.52 | + | ------- | + | A.ISI.ARPA A IN 10.1.0.22 | + +-----------------------------------------+ + + This query was directed to an authoritative name server, and hence + the response includes an answer but no authority records. In this + case, the answer section specifies that mail for F.ISI.ARPA can + either be delivered to F.ISI.ARPA or forwarded to A.ISI.ARPA. The + additional records section specifies the Internet addresses of + these hosts. + + The contents of inverse queries and responses + + Inverse queries reverse the mappings performed by standard query + operations; while a standard query maps a domain name to a + resource, an inverse query maps a resource to a domain name. For + example, a standard query might bind a domain name to a host + address; the corresponding inverse query binds the host address to + a domain name. + + Inverse query mappings are not guaranteed to be unique or complete + because the domain system does not have any internal mechanism for + determining authority from resource records that parallels the + capability for determining authority as a function of domain name. + In general, resolvers will be configured to direct inverse queries + to a name server which is known to have the desired information. + + Name servers are not required to support any form of inverse + queries; it is anticipated that most name servers will support + address to domain name conversions, but no other inverse mappings. + If a name server receives an inverse query that it does not + support, it returns an error response with the "Not Implemented" + error set in the header. While inverse query support is optional, + all name servers must be at least able to return the error + response. + + +Mockapetris [Page 17] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + When a name server processes an inverse query, it either returns: + + 1. zero, one, or multiple domain names for the specified + resource + + 2. an error code indicating that the name server doesn't + support inverse mapping of the specified resource type. + + Inverse query and response example + + The overall structure of an inverse query for retrieving the + domain name that corresponds to Internet address 10.2.0.52 is + shown below: + + +-----------------------------------------+ + Header | OPCODE=IQUERY, ID=997 | + +-----------------------------------------+ + Question | <empty> | + +-----------------------------------------+ + Answer | <anyname> A IN 10.2.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + + This query asks for a question whose answer is the Internet style + address 10.2.0.52. Since the owner name is not known, any domain + name can be used as a placeholder (and is ignored). The response + to this query might be: + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=997 | + +-----------------------------------------+ + Question | QTYPE=A, QCLASS=IN, QNAME=F.ISI.ARPA | + +-----------------------------------------+ + Answer | F.ISI.ARPA A IN 10.2.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + + Note that the QTYPE in a response to an inverse query is the same + as the TYPE field in the answer section of the inverse query. + Responses to inverse queries may contain multiple questions when + the inverse is not unique. + + + + +Mockapetris [Page 18] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Completion queries and responses + + Completion queries ask a name server to complete a partial domain + name and return a set of RRs whose domain names meet a specified + set of criteria for "closeness" to the partial input. This type + of query can provide a local shorthand for domain names or command + completion similar to that in TOPS-20. + + Implementation of completion query processing is optional in a + name server. However, a name server must return a "Not + Implemented" (NI) error response if it does not support + completion. + + The arguments in a completion query specify: + + 1. A type in QTYPE that specifies the type of the desired name. + The type is used to restrict the type of RRs which will match + the partial input so that completion queries can be used for + mailbox names, host names, or any other type of RR in the + domain system without concern for matches to the wrong type of + resource. + + 2. A class in QCLASS which specifies the desired class of the RR. + + 3. A partial domain name that gives the input to be completed. + All returned RRs will begin with the partial string. The + search process first looks for names which qualify under the + assumption that the partial string ends with a full label + ("whole label match"); if this search fails, the search + continues under the assumption that the last label in the + partial sting may be an incomplete label ("partial label + match"). For example, if the partial string "Smith" was used + in a mailbox completion, it would match Smith@ISI.ARPA in + preference to Smithsonian@ISI.ARPA. + + The partial name is supplied by the user through the user + program that is using domain services. For example, if the + user program is a mail handler, the string might be "Mockap" + which the user intends as a shorthand for the mailbox + Mockapetris@ISI.ARPA; if the user program is TELNET, the user + might specify "F" for F.ISI.ARPA. + + In order to make parsing of messages consistent, the partial + name is supplied in domain name format (i.e. a sequence of + labels terminated with a zero length octet). However, the + trailing root label is ignored during matching. + + 4. A target domain name which specifies the domain which is to be + examined for matches. This name is specified in the additional + + +Mockapetris [Page 19] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + section using a NULL RR. All returned names will end with the + target name. + + The user program which constructs the query uses the target + name to restrict the search. For example, user programs + running at ISI might restrict completion to names that end in + ISI.ARPA; user programs running at MIT might restrict + completion to the domain MIT.ARPA. + + The target domain name is also used by the resolver to + determine the name server which should be used to process the + query. In general, queries should be directed to a name server + that is authoritative for the target domain name. User + programs which wish to provide completion for a more than one + target can issue multiple completion queries, each directed at + a different target. Selection of the target name and the + number of searches will depend on the goals of the user + program. + + 5. An opcode for the query. The two types of completion queries + are "Completion Query - Multiple", or CQUERYM, which asks for + all RRs which could complete the specified input, and + "Completion Query - Unique", or CQUERYU, which asks for the + "best" completion. + + CQUERYM is used by user programs which want to know if + ambiguities exist or wants to do its own determinations as to + the best choice of the available candidates. + + CQUERYU is used by user programs which either do not wish to + deal with multiple choices or are willing to use the closeness + criteria used by CQUERYU to select the best match. + + When a name server receives either completion query, it first + looks for RRs that begin (on the left) with the same labels as are + found in QNAME (with the root deleted), and which match the QTYPE + and QCLASS. This search is called "whole label" matching. If one + or more hits are found the name server either returns all of the + hits (CQUERYM) or uses the closeness criteria described below to + eliminate all but one of the matches (CQUERYU). + + If the whole label match fails to find any candidates, then the + name server assumes that the rightmost label of QNAME (after root + deletion) is not a complete label, and looks for candidates that + would match if characters were added (on the right) to the + rightmost label of QNAME. If one or more hits are found the name + server either returns all of the hits (CQUERYM) or uses the + closeness criteria described below to eliminate all but one of the + matches (CQUERYU). + + +Mockapetris [Page 20] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + If a CQUERYU query encounters multiple hits, it uses the following + sequence of rules to discard multiple hits: + + 1. Discard candidates that have more labels than others. Since + all candidates start with the partial name and end with the + target name, this means that we select those entries that + require the fewest number of added labels. For example, a host + search with a target of "ISI.ARPA" and a partial name of "A" + will select A.ISI.ARPA in preference to A.IBM-PCS.ISI.ARPA. + + 2. If partial label matching was used, discard those labels which + required more characters to be added. For example, a mailbox + search for partial "X" and target "ISI.ARPA" would prefer + XX@ISI.ARPA to XYZZY@ISI.ARPA. + + If multiple hits are still present, return all hits. + + Completion query mappings are not guaranteed to be unique or + complete because the domain system does not have any internal + mechanism for determining authority from a partial domain name + that parallels the capability for determining authority as a + function of a complete domain name. In general, resolvers will be + configured to direct completion queries to a name server which is + known to have the desired information. + + When a name server processes a completion query, it either + returns: + + 1. An answer giving zero, one, or more possible completions. + + 2. an error response with Not Implemented (NI) set. + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 21] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Completion query and response example + + Suppose that the completion service was used by a TELNET program + to allow a user to specify a partial domain name for the desired + host. Thus a user might ask to be connected to "B". Assuming + that the query originated from an ISI machine, the query might + look like: + + +-----------------------------------------+ + Header | OPCODE=CQUERYU, ID=409 | + +-----------------------------------------+ + Question | QTYPE=A, QCLASS=IN, QNAME=B | + +-----------------------------------------+ + Answer | <empty> | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | ISI.ARPA NULL IN | + +-----------------------------------------+ + + The partial name in the query is "B", the mappings of interest are + ARPA Internet address records, and the target domain is ISI.ARPA. + Note that NULL is a special type of NULL resource record that is + used as a placeholder and has no significance; NULL RRs obey the + standard format but have no other function. + + The response to this completion query might be: + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=409 | + +-----------------------------------------+ + Question | QTYPE=A, QCLASS=IN, QNAME=B | + +-----------------------------------------+ + Answer | B.ISI.ARPA A IN 10.3.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | ISI.ARPA NULL IN | + +-----------------------------------------+ + + This response has completed B to mean B.ISI.ARPA. + + + + + + + + + + +Mockapetris [Page 22] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Another query might be: + + +-----------------------------------------+ + Header | OPCODE=CQUERYM, ID=410 | + +-----------------------------------------+ + Question | QTYPE=A, QCLASS=IN, QNAME=B | + +-----------------------------------------+ + Answer | <empty> | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | ARPA NULL IN | + +-----------------------------------------+ + + This query is similar to the previous one, but specifies a target + of ARPA rather than ISI.ARPA. It also allows multiple matches. + In this case the same name server might return: + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=410 | + +-----------------------------------------+ + Question | QTYPE=A, QCLASS=IN, QNAME=B | + +-----------------------------------------+ + Answer | B.ISI.ARPA A IN 10.3.0.52 | + | - | + | B.BBN.ARPA A IN 10.0.0.49 | + | - | + | B.BBNCC.ARPA A IN 8.1.0.2 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | ARPA NULL IN | + +-----------------------------------------+ + + This response contains three answers, B.ISI.ARPA, B.BBN.ARPA, and + B.BBNCC.ARPA. + + + + + + + + + + + + + + + +Mockapetris [Page 23] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Recursive Name Service + + Recursive service is an optional feature of name servers. + + When a name server receives a query regarding a part of the name + space which is not in one of the name server's zones, the standard + response is a message that refers the requestor to another name + server. By iterating on these referrals, the requestor eventually + is directed to a name server that has the required information. + + Name servers may also implement recursive service. In this type + of service, a name server either answers immediately based on + local zone information, or pursues the query for the requestor and + returns the eventual result back to the original requestor. + + A name server that supports recursive service sets the Recursion + Available (RA) bit in all responses it generates. A requestor + asks for recursive service by setting the Recursion Desired (RD) + bit in queries. In some situations where recursive service is the + only path to the desired information (see below), the name server + may go recursive even if RD is zero. + + If a query requests recursion (RD set), but the name server does + not support recursion, and the query needs recursive service for + an answer, the name server returns a "Not Implemented" (NI) error + code. If the query can be answered without recursion since the + name server is authoritative for the query, it ignores the RD bit. + + Because of the difficulty in selecting appropriate timeouts and + error handling, recursive service is best suited to virtual + circuits, although it is allowed for datagrams. + + Recursive service is valuable in several special situations: + + In a system of small personal computers clustered around one or + more large hosts supporting name servers, the recursive + approach minimizes the amount of code in the resolvers in the + personal computers. Such a design moves complexity out of the + resolver into the name server, and may be appropriate for such + systems. + + Name servers on the boundaries of different networks may wish + to offer recursive service to create connectivity between + different networks. Such name servers may wish to provide + recursive service regardless of the setting of RD. + + Name servers that translate between domain name service and + some other name service may wish to adopt the recursive style. + Implicit recursion may be valuable here as well. + + +Mockapetris [Page 24] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + These concepts are still under development. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 25] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Header section format + + +-----------------------------------------------+ + | | + | ***** WARNING ***** | + | | + | The following format is preliminary and is | + | included for purposes of explanation only. In | + | particular, the size and position of the | + | OPCODE, RCODE fields and the number and | + | meaning of the single bit fields are subject | + | to change. | + | | + +-----------------------------------------------+ + + The header contains the following fields: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ID | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + |QR| Opcode |AA|TC|RD|RA| | RCODE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QDCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ANCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | NSCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ARCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + ID - A 16 bit identifier assigned by the program that + generates any kind of query. This identifier is copied + into all replies and can be used by the requestor to + relate replies to outstanding questions. + + QR - A one bit field that specifies whether this message is a + query (0), or a response (1). + + OPCODE - A four bit field that specifies kind of query in this + message. This value is set by the originator of a query + and copied into the response. The values are: + + 0 a standard query (QUERY) + + + +Mockapetris [Page 26] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + 1 an inverse query (IQUERY) + + 2 an completion query allowing multiple + answers (CQUERYM) + + 2 an completion query requesting a single + answer (CQUERYU) + + 4-15 reserved for future use + + AA - Authoritative Answer - this bit is valid in responses, + and specifies that the responding name server + is an authority for the domain name in the + corresponding query. + + TC - TrunCation - specifies that this message was truncated + due to length greater than 512 characters. + This bit is valid in datagram messages but not + in messages sent over virtual circuits. + + RD - Recursion Desired - this bit may be set in a query and + is copied into the response. If RD is set, it + directs the name server to pursue the query + recursively. Recursive query support is + optional. + + RA - Recursion Available - this be is set or cleared in a + response, and denotes whether recursive query + support is available in the name server. + + RCODE - Response code - this 4 bit field is set as part of + responses. The values have the following + interpretation: + + 0 No error condition + + 1 Format error - The name server was unable + to interpret the query. + + 2 Server failure - The name server was unable + to process this query due to a problem with + the name server. + + 3 Name Error - Meaningful only for responses + from an authoritative name server, this + code signifies that the domain name + referenced in the query does not exist. + + + + +Mockapetris [Page 27] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + 4 Not Implemented - The name server does not + support the requested kind of query. + + 5 Refused - The name server refuses to + perform the specified operation for policy + reasons. For example, a name server may + not wish to provide the information to the + particular requestor, or a name server may + not wish to perform a particular operation + (e.g. zone transfer) for particular data. + + 6-15 Reserved for future use. + + QDCOUNT - an unsigned 16 bit integer specifying the number of + entries in the question section. + + ANCOUNT - an unsigned 16 bit integer specifying the number of + resource records in the answer section. + + NSCOUNT - an unsigned 16 bit integer specifying the number of name + server resource records in the authority records + section. + + ARCOUNT - an unsigned 16 bit integer specifying the number of + resource records in the additional records section. + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 28] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Question section format + + The question section is used in all kinds of queries other than + inverse queries. In responses to inverse queries, this section + may contain multiple entries; for all other responses it contains + a single entry. Each entry has the following format: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / QNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QTYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QCLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + QNAME - a variable number of octets that specify a domain name. + This field uses the compressed domain name format + described in the next section of this memo. This field + can be used to derive a text string for the domain name. + Note that this field may be an odd number of octets; no + padding is used. + + QTYPE - a two octet code which specifies the type of the query. + The values for this field include all codes valid for a + TYPE field, together with some more general codes which + can match more than one type of RR. For example, QTYPE + might be A and only match type A RRs, or might be MAILA, + which matches MF and MD type RRs. The values for this + field are listed in Appendix 2. + + QCLASS - a two octet code that specifies the class of the query. + For example, the QCLASS field is IN for the ARPA + Internet, CS for the CSNET, etc. The numerical values + are defined in Appendix 2. + + + + + + + + + + + +Mockapetris [Page 29] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Resource record format + + The answer, authority, and additional sections all share the same + format: a variable number of resource records, where the number of + records is specified in the corresponding count field in the + header. Each resource record has the following format: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / / + / NAME / + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | CLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TTL | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RDLENGTH | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| + / RDATA / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + NAME - a compressed domain name to which this resource record + pertains. + + TYPE - two octets containing one of the RR type codes defined + in Appendix 2. This field specifies the meaning of the + data in the RDATA field. + + CLASS - two octets which specify the class of the data in the + RDATA field. + + TTL - a 16 bit unsigned integer that specifies the time + interval (in seconds) that the resource record may be + cached before it should be discarded. Zero values are + interpreted to mean that the RR can only be used for the + transaction in progress, and should not be cached. For + example, SOA records are always distributed with a zero + TTL to prohibit caching. Zero values can also be used + for extremely volatile data. + + + + +Mockapetris [Page 30] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + RDLENGTH- an unsigned 16 bit integer that specifies the length in + octets of the RDATA field. + + RDATA - a variable length string of octets that describes the + resource. The format of this information varies + according to the TYPE and CLASS of the resource record. + For example, the if the TYPE is A and the CLASS is IN, + the RDATA field is a 4 octet ARPA Internet address. + + Formats for particular resource records are shown in Appendicies 2 + and 3. + + Domain name representation and compression + + Domain names messages are expressed in terms of a sequence of + labels. Each label is represented as a one octet length field + followed by that number of octets. Since every domain name ends + with the null label of the root, a compressed domain name is + terminated by a length byte of zero. The high order two bits of + the length field must be zero, and the remaining six bits of the + length field limit the label to 63 octets or less. + + To simplify implementations, the total length of label octets and + label length octets that make up a domain name is restricted to + 255 octets or less. Since the trailing root label and its dot are + not printed, printed domain names are 254 octets or less. + + Although labels can contain any 8 bit values in octets that make + up a label, it is strongly recommended that labels follow the + syntax described in Appendix 1 of this memo, which is compatible + with existing host naming conventions. Name servers and resolvers + must compare labels in a case-insensitive manner, i.e. A=a, and + hence all character strings must be ASCII with zero parity. + Non-alphabetic codes must match exactly. + + Whenever possible, name servers and resolvers must preserve all 8 + bits of domain names they process. When a name server is given + data for the same name under two different case usages, this + preservation is not always possible. For example, if a name + server is given data for ISI.ARPA and isi.arpa, it should create a + single node, not two, and hence will preserve a single casing of + the label. Systems with case sensitivity should take special + precautions to insure that the domain data for the system is + created with consistent case. + + In order to reduce the amount of space used by repetitive domain + names, the sequence of octets that defines a domain name may be + terminated by a pointer to the length octet of a previously + specified label string. The label string that the pointer + + +Mockapetris [Page 31] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + specifies is appended to the already specified label string. + Exact duplication of a previous label string can be done with a + single pointer. Multiple levels are allowed. + + Pointers can only be used in positions in the message where the + format is not class specific. If this were not the case, a name + server that was handling a RR for another class could make + erroneous copies of RRs. As yet, there are no such cases, but + they may occur in future RDATA formats. + + If a domain name is contained in a part of the message subject to + a length field (such as the RDATA section of an RR), and + compression is used, the length of the compressed name is used in + the length calculation, rather than the length of the expanded + name. + + Pointers are represented as a two octet field in which the high + order 2 bits are ones, and the low order 14 bits specify an offset + from the start of the message. The 01 and 10 values of the high + order bits are reserved for future use and should not be used. + + Programs are free to avoid using pointers in datagrams they + generate, although this will reduce datagram capacity. However + all programs are required to understand arriving messages that + contain pointers. + + For example, a datagram might need to use the domain names + F.ISI.ARPA, FOO.F.ISI.ARPA, ARPA, and the root. Ignoring the + other fields of the message, these domain names might be + represented as: + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 32] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 20 | 1 | F | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 22 | 3 | I | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 24 | S | I | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 26 | 4 | A | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 28 | R | P | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 30 | A | 0 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 40 | 3 | F | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 42 | O | O | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 44 | 1 1| 20 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 64 | 1 1| 26 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 92 | 0 | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + The domain name for F.ISI.ARPA is shown at offset 20. The domain + name FOO.F.ISI.ARPA is shown at offset 40; this definition uses a + pointer to concatenate a label for FOO to the previously defined + F.ISI.ARPA. The domain name ARPA is defined at offset 64 using a + pointer to the ARPA component of the name F.ISI.ARPA at 20; note + that this reference relies on ARPA being the last label in the + string at 20. The root domain name is defined by a single octet + of zeros at 92; the root domain name has no labels. + + Organization of the Shared database + + While name server implementations are free to use any internal + data structures they choose, the suggested structure consists of + several separate trees. Each tree has structure corresponding to + the domain name space, with RRs attached to nodes and leaves. + Each zone of authoritative data has a separate tree, and one tree + holds all non-authoritative data. All of the trees corresponding + to zones are managed identically, but the non-authoritative or + cache tree has different management procedures. + + +Mockapetris [Page 33] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Data stored in the database can be kept in whatever form is + convenient for the name server, so long as it can be transformed + back into the format needed for messages. In particular, the + database will probably use structure in place of expanded domain + names, and will also convert many of the time intervals used in + the domain systems to absolute local times. + + Each tree corresponding to a zone has complete information for a + "pruned" subtree of the domain space. The top node of a zone has + a SOA record that marks the start of the zone. The bottom edge of + the zone is delimited by nodes containing NS records signifying + delegation of authority to other zones, or by leaves of the domain + tree. When a name server contains abutting zones, one tree will + have a bottom node containing a NS record, and the other tree will + begin with a tree location containing a SOA record. + + Note that there is one special case that requires consideration + when a name server is implemented. A node that contains a SOA RR + denoting a start of zone will also have NS records that identify + the name servers that are expected to have a copy of the zone. + Thus a name server will usually find itself (and possibly other + redundant name servers) referred to in NS records occupying the + same position in the tree as SOA records. The solution to this + problem is to never interpret a NS record as delimiting a zone + started by a SOA at the same point in the tree. (The sample + programs in this memo deal with this problem by processing SOA + records only after NS records have been processed.) + + Zones may also overlap a particular part of the name space when + they are of different classes. + + Other than the abutting and separate class cases, trees are always + expected to be disjoint. Overlapping zones are regarded as a + non-fatal error. The scheme described in this memo avoids the + overlap issue by maintaining separate trees; other designs must + take the appropriate measures to defend against possible overlap. + + Non-authoritative data is maintained in a separate tree. This + tree is unlike the zone trees in that it may have "holes". Each + RR in the cache tree has its own TTL that is separately managed. + The data in this tree is never used if authoritative data is + available from a zone tree; this avoids potential problems due to + cached data that conflicts with authoritative data. + + The shared database will also contain data structures to support + the processing of inverse queries and completion queries if the + local system supports these optional features. Although many + schemes are possible, this memo describes a scheme that is based + on tables of pointers that invert the database according to key. + + +Mockapetris [Page 34] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Each kind of retrieval has a separate set of tables, with one + table per zone. When a zone is updated, these tables must also be + updated. The contents of these tables are discussed in the + "Inverse query processing" and "Completion query processing" + sections of this memo. + + The database implementation described here includes two locks that + are used to control concurrent access and modification of the + database by name server query processing, name server maintenance + operations, and resolver access: + + The first lock ("main lock") controls access to all of the + trees. Multiple concurrent reads are allowed, but write access + can only be acquired by a single process. Read and write + access are mutually exclusive. Resolvers and name server + processes that answer queries acquire this lock in read mode, + and unlock upon completion of the current message. This lock + is acquired in write mode by a name server maintenance process + when it is about to change data in the shared database. The + actual update procedures are described under "NAME SERVER + MAINTENANCE" but are designed to be brief. + + The second lock ("cache queue lock") controls access to the + cache queue. This queue is used by a resolver that wishes to + add information to the cache tree. The resolver acquires this + lock, then places the RRs to be cached into the queue. The + name server maintenance procedure periodically acquires this + lock and adds the queue information to the cache. The + rationale for this procedure is that it allows the resolver to + operate with read-only access to the shared database, and + allows the update process to batch cache additions and the + associated costs for inversion calculations. The name server + maintenance procedure must take appropriate precautions to + avoid problems with data already in the cache, inversions, etc. + + This organization solves several difficulties: + + When searching the domain space for the answer to a query, a + name server can restrict its search for authoritative data to + that tree that matches the most labels on the right side of the + domain name of interest. + + Since updates to a zone must be atomic with respect to + searches, maintenance operations can simply acquire the main + lock, insert a new copy of a particular zone without disturbing + other zones, and then release the storage used by the old copy. + Assuming a central table pointing to valid zone trees, this + operation can be a simple pointer swap. + + + +Mockapetris [Page 35] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + TTL management of zones can be performed using the SOA record + for the zone. This avoids potential difficulties if individual + RRs in a zone could be timed out separately. This issue is + discussed further in the maintenance section. + + Query processing + + The following algorithm outlines processing that takes place at a + name server when a query arrives: + + 1. Search the list of zones to find zones which have the same + class as the QCLASS field in the query and have a top domain + name that matches the right end of the QNAME field. If there + are none, go to step 2. If there are more than one, pick the + zone that has the longest match and go to step 3. + + 2. Since the zone search failed, the only possible RRs are + contained in the non-authoritative tree. Search the cache tree + for the NS record that has the same class as the QCLASS field + and the largest right end match for domain name. Add the NS + record or records to the authority section of the response. If + the cache tree has RRs that are pertinent to the question + (domain names match, classes agree, not timed-out, and the type + field is relevant to the QTYPE), copy these RRs into the answer + section of the response. The name server may also search the + cache queue. Go to step 4. + + 3. Since this zone is the best match, the zone in which QNAME + resides is either this zone or a zone to which this zone will + directly or indirectly delegate authority. Search down the + tree looking for a NS RR or the node specified by QNAME. + + If the node exists and has no NS record, copy the relevant + RRs to the answer section of the response and go to step 4. + + If a NS RR is found, either matching a part or all of QNAME, + then QNAME is in a delegated zone outside of this zone. If + so, copy the NS record or records into the authority section + of the response, and search the remainder of the zone for an + A type record corresponding to the NS reference. If the A + record is found, add it to the additional section. Go to + step 2. + + If the node is not found and a NS is not found, there is no + such name; set the Name error bit in the response and exit. + + 4. When this step is reached, the answer and authority sections + are complete. What remains is to complete the additional + section. This procedure is only possible if the name server + + +Mockapetris [Page 36] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + knows the data formats implied by the class of records in the + answer and authority sections. Hence this procedure is class + dependent. Appendix 3 discusses this procedure for Internet + class data. + + While this algorithm deals with typical queries and databases, + several additions are required that will depend on the database + supported by the name server: + + QCLASS=* + + Special procedures are required when the QCLASS of the query is + "*". If the database contains several classes of data, the + query processing steps above are performed separately for each + CLASS, and the results are merged into a single response. The + name error condition is not meaningful for a QCLASS=* query. + If the requestor wants this information, it must test each + class independently. + + If the database is limited to data of a particular class, this + operation can be performed by simply reseting the authoritative + bit in the response, and performing the query as if QCLASS was + the class used in the database. + + * labels in database RRs + + Some zones will contain default RRs that use * to match in + cases where the search fails for a particular domain name. If + the database contains these records then a failure must be + retried using * in place of one or more labels of the search + key. The procedure is to replace labels from the left with + "*"s looking for a match until either all labels have been + replaced, or a match is found. Note that these records can + never be the result of caching, so a name server can omit this + processing for zones that don't contain RRs with * in labels, + or can omit this processing entirely if * never appears in + local authoritative data. + + Inverse query processing + + Name servers that support inverse queries can support these + operations through exhaustive searches of their databases, but + this becomes impractical as the size of the database increases. + An alternative approach is to invert the database according to the + search key. + + For name servers that support multiple zones and a large amount of + data, the recommended approach is separate inversions for each + + + +Mockapetris [Page 37] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + zone. When a particular zone is changed during a refresh, only + its inversions need to be redone. + + Support for transfer of this type of inversion may be included in + future versions of the domain system, but is not supported in this + version. + + Completion query processing + + Completion query processing shares many of the same problems in + data structure design as are found in inverse queries, but is + different due to the expected high rate of use of top level labels + (ie., ARPA, CSNET). A name server that wishes to be efficient in + its use of memory may well choose to invert only occurrences of + ARPA, etc. that are below the top level, and use a search for the + rare case that top level labels are used to constrain a + completion. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 38] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +NAME SERVER MAINTENANCE + + Introduction + + Name servers perform maintenance operations on their databases to + insure that the data they distribute is accurate and timely. The + amount and complexity of the maintenance operations that a name + server must perform are related to the size, change rate, and + complexity of the database that the name server manages. + + Maintenance operations are fundamentally different for + authoritative and non-authoritative data. A name server actively + attempts to insure the accuracy and timeliness of authoritative + data by refreshing the data from master copies. Non-authoritative + data is merely purged when its time-to-live expires; the name + server does not attempt to refresh it. + + Although the refreshing scheme is fairly simple to implement, it + is somewhat less powerful than schemes used in other distributed + database systems. In particular, an update to the master does not + immediately update copies, and should be viewed as gradually + percolating though the distributed database. This is adequate for + the vast majority of applications. In situations where timliness + is critical, the master name server can prohibit caching of copies + or assign short timeouts to copies. + + Conceptual model of maintenance operations + + The vast majority of information in the domain system is derived + from master files scattered among hosts that implement name + servers; some name servers will have no master files, other name + servers will have one or more master files. Each master file + contains the master data for a single zone of authority rather + than data for the whole domain name space. The administrator of a + particular zone controls that zone by updating its master file. + + Master files and zone copies from remote servers may include RRs + that are outside of the zone of authority when a NS record + delegates authority to a domain name that is a descendant of the + domain name at which authority is delegated. These forward + references are a problem because there is no reasonable method to + guarantee that the A type records for the delegatee are available + unless they can somehow be attached to the NS records. + + For example, suppose the ARPA zone delegates authority at + MIT.ARPA, and states that the name server is on AI.MIT.ARPA. If a + resolver gets the NS record but not the A type record for + AI.MIT.ARPA, it might try to ask the MIT name server for the + address of AI.MIT.ARPA. + + +Mockapetris [Page 39] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + The solution is to allow type A records that are outside of the + zone of authority to be copied with the zone. While these records + won't be found in a search for the A type record itself, they can + be protected by the zone refreshing system, and will be passed + back whenever the name server passes back a referral to the + corresponding NS record. If a query is received for the A record, + the name server will pass back a referral to the name server with + the A record in the additional section, rather than answer + section. + + The only exception to the use of master files is a small amount of + data stored in boot files. Boot file data is used by name servers + to provide enough resource records to allow zones to be imported + from foreign servers (e.g. the address of the server), and to + establish the name and address of root servers. Boot file records + establish the initial contents of the cache tree, and hence can be + overridden by later loads of authoritative data. + + The data in a master file first becomes available to users of the + domain name system when it is loaded by the corresponding name + server. By definition, data from a master file is authoritative. + + Other name servers which wish to be authoritative for a particular + zone do so by transferring a copy of the zone from the name server + which holds the master copy using a virtual circuit. These copies + include parameters which specify the conditions under which the + data in the copy is authoritative. In the most common case, the + conditions specify a refresh interval and policies to be followed + when the refresh operation cannot be performed. + + A name server may acquire multiple zones from different name + servers and master files, but the name server must maintain each + zone separately from others and from non-authoritative data. + + When the refresh interval for a particular zone copy expires, the + name server holding the copy must consult the name server that + holds the master copy. If the data in the zone has not changed, + the master name server instructs the copy name server to reset the + refresh interval. If the data has changed, the master passes a + new copy of the zone and its associated conditions to the copy + name server. Following either of these transactions, the copy + name server begins a new refresh interval. + + Copy name servers must also deal with error conditions under which + they are unable to communicate with the name server that holds the + master copy of a particular zone. The policies that a copy name + server uses are determined by other parameters in the conditions + distributed with every copy. The conditions include a retry + interval and a maximum holding time. When a copy name server is + + +Mockapetris [Page 40] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + unable to establish communications with a master or is unable to + complete the refresh transaction, it must retry the refresh + operation at the rate specified by the retry interval. This retry + interval will usually be substantially shorter than the refresh + interval. Retries continue until the maximum holding time is + reached. At that time the copy name server must assume that its + copy of the data for the zone in question is no longer + authoritative. + + Queries must be processed while maintenance operations are in + progress because a zone transfer can take a long time. However, + to avoid problems caused by access to partial databases, the + maintenance operations create new copies of data rather than + directly modifying the old copies. When the new copy is complete, + the maintenance process locks out queries for a short time using + the main lock, and switches pointers to replace the old data with + the new. After the pointers are swapped, the maintenance process + unlocks the main lock and reclaims the storage used by the old + copy. + + Name server data structures and top level logic + + The name server must multiplex its attention between multiple + activities. For example, a name server should be able to answer + queries while it is also performing refresh activities for a + particular zone. While it is possible to design a name server + that devotes a separate process to each query and refresh activity + in progress, the model described in this memo is based on the + assumption that there is a single process performing all + maintenance operations, and one or more processes devoted to + handling queries. The model also assumes the existence of shared + memory for several control structures, the domain database, locks, + etc. + + The model name server uses the following files and shared data + structures: + + 1. A configuration file that describes the master and boot + files which the name server should load and the zones that + the name server should attempt to load from foreign name + servers. This file establishes the initial contents of the + status table. + + 2. Domain data files that contain master and boot data to be + loaded. + + 3. A status table that is derived from the configuration file. + Each entry in this table describes a source of data. Each + entry has a zone number. The zone number is zero for + + +Mockapetris [Page 41] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + non-authoritative sources; authoritative sources are + assigned separate non-zero numbers. + + 4. The shared database that holds the domain data. This + database is assumed to be organized in some sort of tree + structure paralleling the domain name space, with a list of + resource records attached to each node and leaf in the tree. + The elements of the resource record list need not contain + the exact data present in the corresponding output format, + but must contain data sufficient to create the output + format; for example, these records need not contain the + domain name that is associated with the resource because + that name can be derived from the tree structure. Each + resource record also internal data that the name server uses + to organize its data. + + 5. Inversion data structures that allow the name server to + process inverse queries and completion queries. Although + many structures could be used, the implementation described + in this memo supposes that there is one array for every + inversion that the name server can handle. Each array + contains a list of pointers to resource records such that + the order of the inverted quantities is sorted. + + 6. The main and cache queue locks + + 7. The cache queue + + The maintenance process begins by loading the status table from + the configuration file. It then periodically checks each entry, + to see if its refresh interval has elapsed. If not, it goes on to + the next entry. If so, it performs different operations depending + on the entry: + + If the entry is for zone 0, or the cache tree, the maintenance + process checks to see if additions or deletions are required. + Additions are acquired from the cache queue using the cache + queue lock. Deletions are detected using TTL checks. If any + changes are required, the maintenance process recalculates + inversion data structures and then alters the cache tree under + the protection of the main lock. Whenever the maintenance + process modifies the cache tree, it resets the refresh interval + to the minimum of the contained TTLs and the desired time + interval for cache additions. + + If the entry is not zone 0, and the entry refers to a local + file, the maintenance process checks to see if the file has + been modified since its last load. If so the file is reloaded + using the procedures specified under "Name server file + + +Mockapetris [Page 42] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + loading". The refresh interval is reset to that specified in + the SOA record if the file is a master file. + + If the entry is for a remote master file, the maintenance + process checks for a new version using the procedure described + in "Names server remote zone transfer". + + Name server file loading + + Master files are kept in text form for ease of editing by system + maintainers. These files are not exchanged by name servers; name + servers use the standard message format when transferring zones. + + Organizations that want to have a domain, but do not want to run a + name server, can use these files to supply a domain definition to + another organization that will run a name server for them. For + example, if organization X wants a domain but not a name server, + it can find another organization, Y, that has a name server and is + willing to provide service for X. Organization X defines domain X + via the master file format and ships a copy of the master file to + organization Y via mail, FTP, or some other method. A system + administrator at Y configures Y's name server to read in X's file + and hence support the X domain. X can maintain the master file + using a text editor and send new versions to Y for installation. + + These files have a simple line-oriented format, with one RR per + line. Fields are separated by any combination of blanks and tab + characters. Tabs are treated the same as spaces; in the following + discussion the term "blank" means either a tab or a blank. A line + can be either blank (and ignored), a RR, or a $INCLUDE line. + + If a RR line starts with a domain name, that domain name is used + to specify the location in the domain space for the record, i.e. + the owner. If a RR line starts with a blank, it is loaded into + the location specified by the most recent location specifier. + + The location specifiers are assumed to be relative to some origin + that is provided by the user of a file unless the location + specifier contains the root label. This provides a convenient + shorthand notation, and can also be used to prevent errors in + master files from propagating into other zones. This feature is + particularly useful for master files imported from other sites. + + An include line begins with $INCLUDE, starting at the first line + position, and is followed by a local file name and an optional + offset modifier. The filename follows the appropriate local + conventions. The offset is one or more labels that are added to + the offset in use for the file that contained the $INCLUDE. If + the offset is omitted, the included file is loaded using the + + +Mockapetris [Page 43] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + offset of the file that contained the $INCLUDE command. For + example, a file being loaded at offset ARPA might contain the + following lines: + + $INCLUDE <subsys>isi.data ISI + $INCLUDE <subsys>addresses.data + + The first line would be interpreted to direct loading of the file + <subsys>isi.data at offset ISI.ARPA. The second line would be + interpreted as a request to load data at offset ARPA. + + Note that $INCLUDE commands do not cause data to be loaded into a + different zone or tree; they are simply ways to allow data for a + given zone to be organized in separate files. For example, + mailbox data might be kept separately from host data using this + mechanism. + + Resource records are entered as a sequence of fields corresponding + to the owner name, TTL, CLASS, TYPE and RDATA components. (Note + that this order is different from the order used in examples and + the order used in the actual RRs; the given order allows easier + parsing and defaulting.) + + The owner name is derived from the location specifier. + + The TTL field is optional, and is expressed as a decimal + number. If omitted TTL defaults to zero. + + The CLASS field is also optional; if omitted the CLASS defaults + to the most recent value of the CLASS field in a previous RR. + + The RDATA fields depend on the CLASS and TYPE of the RR. In + general, the fields that make up RDATA are expressed as decimal + numbers or as domain names. Some exceptions exist, and are + documented in the RDATA definitions in Appendicies 2 and 3 of + this memo. + + Because CLASS and TYPE fields don't contain any common + identifiers, and because CLASS and TYPE fields are never decimal + numbers, the parse is always unique. + + Because these files are text files several special encodings are + necessary to allow arbitrary data to be loaded. In particular: + + . A free standing dot is used to refer to the current domain + name. + + @ A free standing @ is used to denote the current origin. + + + +Mockapetris [Page 44] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + .. Two free standing dots represent the null domain name of + the root. + + \X where X is any character other than a digit (0-9), is used + to quote that character so that its special meaning does + not apply. For example, "\." can be used to place a dot + character in a label. + + \DDD where each D is a digit is the octet corresponding to the + decimal number described by DDD. The resulting octet is + assumed to be text and is not checked for special meaning. + + ( ) Parentheses are used to group data that crosses a line + boundary. In effect, line terminations are not recognized + within parentheses. + + ; Semicolon is used to start a comment; the remainder of the + line is ignored. + + Name server file loading example + + A name server for F.ISI.ARPA , serving as an authority for the + ARPA and ISI.ARPA domains, might use a boot file and two master + files. The boot file initializes some non-authoritative data, and + would be loaded without an origin: + + .. 9999999 IN NS B.ISI.ARPA + 9999999 CS NS UDEL.CSNET + B.ISI.ARPA 9999999 IN A 10.3.0.52 + UDEL.CSNET 9999999 CS A 302-555-0000 + + This file loads non-authoritative data which provides the + identities and addresses of root name servers. The first line + contains a NS RR which is loaded at the root; the second line + starts with a blank, and is loaded at the most recent location + specifier, in this case the root; the third and fourth lines load + RRs at B.ISI.ARPA and UDEL.CSNET, respectively. The timeouts are + set to high values (9999999) to prevent this data from being + discarded due to timeout. + + The first master file loads authoritative data for the ARPA + domain. This file is designed to be loaded with an origin of + ARPA, which allows the location specifiers to omit the trailing + .ARPA labels. + + + + + + + +Mockapetris [Page 45] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + @ IN SOA F.ISI.ARPA Action.E.ISI.ARPA ( + 20 ; SERIAL + 3600 ; REFRESH + 600 ; RETRY + 3600000; EXPIRE + 60) ; MINIMUM + NS F.ISI.ARPA ; F.ISI.ARPA is a name server for ARPA + NS A.ISI.ARPA ; A.ISI.ARPA is a name server for ARPA + MIT NS AI.MIT.ARPA; delegation to MIT name server + ISI NS F.ISI.ARPA ; delegation to ISI name server + + UDEL MD UDEL.ARPA + A 10.0.0.96 + NBS MD NBS.ARPA + A 10.0.0.19 + DTI MD DTI.ARPA + A 10.0.0.12 + + AI.MIT A 10.2.0.6 + F.ISI A 10.2.0.52 + + The first group of lines contains the SOA record and its + parameters, and identifies name servers for this zone and for + delegated zones. The Action.E.ISI.ARPA field is a mailbox + specification for the responsible person for the zone, and is the + domain name encoding of the mail destination Action@E.ISI.ARPA. + The second group specifies data for domain names within this zone. + The last group has forward references for name server address + resolution for AI.MIT.ARPA and F.ISI.ARPA. This data is not + technically within the zone, and will only be used for additional + record resolution for NS records used in referrals. However, this + data is protected by the zone timeouts in the SOA, so it will + persist as long as the NS references persist. + + The second master file defines the ISI.ARPA environment, and is + loaded with an origin of ISI.ARPA: + + @ IN SOA F.ISI.ARPA Action\.ISI.E.ISI.ARPA ( + 20 ; SERIAL + 7200 ; REFRESH + 600 ; RETRY + 3600000; EXPIRE + 60) ; MINIMUM + NS F.ISI.ARPA ; F.ISI.ARPA is a name server + A A 10.1.0.32 + MD A.ISI.ARPA + MF F.ISI.ARPA + B A 10.3.0.52 + MD B.ISI.ARPA + + +Mockapetris [Page 46] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + MF F.ISI.ARPA + F A 10.2.0.52 + MD F.ISI.ARPA + MF A.ISI.ARPA + $INCLUDE <SUBSYS>ISI-MAILBOXES.TXT + + Where the file <SUBSYS>ISI-MAILBOXES.TXT is: + + MOE MB F.ISI.ARPA + LARRY MB A.ISI.ARPA + CURLEY MB B.ISI.ARPA + STOOGES MB B.ISI.ARPA + MG MOE.ISI.ARPA + MG LARRY.ISI.ARPA + MG CURLEY.ISI.ARPA + + Note the use of the \ character in the SOA RR to specify the + responsible person mailbox "Action.ISI@E.ISI.ARPA". + + Name server remote zone transfer + + When a name server needs to make an initial copy of a zone or test + to see if a existing zone copy should be refreshed, it begins by + attempting to open a virtual circuit to the foreign name server. + + If this open attempt fails, and this was an initial load attempt, + it schedules a retry and exits. If this was a refresh operation, + the name server tests the status table to see if the maximum + holding time derived from the SOA EXPIRE field has elapsed. If + not, the name server schedules a retry. If the maximum holding + time has expired, the name server invalidates the zone in the + status table, and scans all resource records tagged with this zone + number. For each record it decrements TTL fields by the length of + time since the data was last refreshed. If the new TTL value is + negative, the record is deleted. If the TTL value is still + positive, it moves the RR to the cache tree and schedules a retry. + + If the open attempt succeeds, the name server sends a query to the + foreign name server in which QTYPE=SOA, QCLASS is set according to + the status table information from the configuration file, and + QNAME is set to the domain name of the zone of interest. + + The foreign name server will return either a SOA record indicating + that it has the zone or an error. If an error is detected, the + virtual circuit is closed, and the failure is treated in the same + way as if the open attempt failed. + + If the SOA record is returned and this was a refresh, rather than + an initial load of the zone, the name server compares the SERIAL + + +Mockapetris [Page 47] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + field in the new SOA record with the SERIAL field in the SOA + record of the existing zone copy. If these values match, the zone + has not been updated since the last copy and hence there is no + reason to recopy the zone. In this case the name server resets + the times in the existing SOA record and closes the virtual + circuit to complete the operation. + + If this is initial load, or the SERIAL fields were different, the + name server requests a copy of the zone by sending the foreign + name server an AXFR query which specifies the zone by its QCLASS + and QNAME fields. + + When the foreign name server receives the AXFR request, it sends + each node from the zone to the requestor in a separate message. + It begins with the node that contains the SOA record, walks the + tree in breadth-first order, and completes the transfer by + resending the node containing the SOA record. + + Several error conditions are possible: + + If the AXFR request cannot be matched to a SOA, the foreign + name server will return a single message in response that does + not contain the AXFR request. (The normal SOA query preceding + the AXFR is designed to avoid this condition, but it is still + possible.) + + The foreign name server can detect an internal error or detect + some other condition (e.g. system going down, out of resources, + etc.) that forces the transfer to be aborted. If so, it sends + a message with the "Server failure" condition set. If the AXFR + can be immediately retried with some chance of success, it + leaves the virtual open; otherwise it initiates a close. + + If the foreign name server doesn't wish to perform the + operation for policy reasons (i.e. the system administrator + wishes to forbid zone copies), the foreign server returns a + "Refused" condition. + + The requestor receives these records and builds a new tree. This + tree is not yet in the status table, so its data are not used to + process queries. The old copy of the zone, if any, may be used to + satisfy request while the transfer is in progress. + + When the requestor receives the second copy of the SOA node, it + compares the SERIAL field in the first copy of the SOA against the + SERIAL field in the last copy of the SOA record. If these don't + match, the foreign server updated its zone while the transfer was + in progress. In this case the requestor repeats the AXFR request + to acquire the newer version. + + +Mockapetris [Page 48] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + If the AXFR transfer eventually succeeds, the name server closes + the virtual circuit and and creates new versions of inversion data + structures for this zone. When this operation is complete, the + name server acquires the main lock in write mode and then replaces + any old copy of the zone and inversion data structures with new + ones. The name server then releases the main lock, and can + reclaim the storage used by the old copy. + + If an error occurs during the AXFR transfer, the name server can + copy any partial information into its cache tree if it wishes, + although it will not normally do so if the zone transfer was a + refresh rather than an initial load. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 49] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +RESOLVER ALGORITHMS + + Operations + + Resolvers have a great deal of latitude in the semantics they + allow in user calls. For example, a resolver might support + different user calls that specify whether the returned information + must be from and authoritative name server or not. Resolvers are + also responsible for enforcement of any local restrictions on + access, etc. + + In any case, the resolver will transform the user query into a + number of shared database accesses and queries to remote name + servers. When a user requests a resource associated with a + particular domain name, the resolver will execute the following + steps: + + 1. The resolver first checks the local shared database, if any, + for the desired information. If found, it checks the + applicable timeout. If the timeout check succeeds, the + information is used to satisfy the user request. If not, the + resolver goes to step 2. + + 2. In this step, the resolver consults the shared database for the + name server that most closely matches the domain name in the + user query. Multiple redundant name servers may be found. The + resolver goes to step 3. + + 3. In this step the resolver chooses one of the available name + servers and sends off a query. If the query fails, it tries + another name server. If all fail, an error indication is + returned to the user. If a reply is received the resolver adds + the returned RRs to its database and goes to step 4. + + 4. In this step, the resolver interprets the reply. If the reply + contains the desired information, the resolver returns the + information to the user. The the reply indicates that the + domain name in the user query doesn't exist, then the resolver + returns an error to the user. If the reply contains a + transient name server failure, the resolver can either wait and + retry the query or go back to step 3 and try a different name + server. If the reply doesn't contain the desired information, + but does contain a pointer to a closer name server, the + resolver returns to step 2, where the closer name servers will + be queried. + + Several modifications to this algorithm are possible. A resolver + may not support a local cache and instead only cache information + during the course of a single user request, discarding it upon + + +Mockapetris [Page 50] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + completion. The resolver may also find that a datagram reply was + truncated, and open a virtual circuit so that the complete reply + can be recovered. + + Inverse and completion queries must be treated in an + environment-sensitive manner, because the domain system doesn't + provide a method for guaranteeing that it can locate the correct + information. The typical choice will be to configure a resolver + to use a particular set of known name servers for inverse queries. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 51] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +DOMAIN SUPPORT FOR MAIL + + Introduction + + Mail service is a particularly sensitive issue for users of the + domain system because of the lack of a consistent system for + naming mailboxes and even hosts, and the need to support continued + operation of existing services. This section discusses an + evolutionary approach for adding consistent domain name support + for mail. + + The crucial issue is deciding on the types of binding to be + supported. Most mail systems specify a mail destination with a + two part construct such as X@Y. The left hand side, X, is an + string, often a user or account, and Y is a string, often a host. + This section refers to the part on the left, i.e. X, as the local + part, and refers to the part on the right, i.e. Y, as the global + part. + + Most existing mail systems route mail based on the global part; a + mailer with mail to deliver to X@Y will decide on the host to be + contacted using only Y. We refer to this type of binding as + "agent binding". + + For example, mail addressed to Mockapetris@ISIF is delivered to + host USC-ISIF (USC-ISIF is the official name for the host + specified by nickname ISIF). + + More sophisticated mail systems use both the local and global + parts, i.e. both X and Y to determine which host should receive + the mail. These more sophisticated systems usually separate the + binding of the destination to the host from the actual delivery. + This allows the global part to be a generic name rather than + constraining it to a single host. We refer to this type of + binding as "mailbox binding". + + For example, mail addressed to Mockapetris@ISI might be bound + to host F.ISI.ARPA, and subsequently delivered to that host, + while mail for Cohen@ISI might be bound to host B.ISI.ARPA. + + The domain support for mail consists of two levels of support, + corresponding to these two binding models. + + The first level, agent binding, is compatible with existing + ARPA Internet mail procedures and uses maps a global part onto + one or more hosts that will accept the mail. This type of + binding uses the MAILA QTYPE. + + The second level, mailbox binding, offers extended services + + +Mockapetris [Page 52] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + that map a local part and a global part onto one or more sets + of data via the MAILB QTYPE. The sets of data include hosts + that will accept the mail, mailing list members (mail groups), + and mailboxes for reporting errors or requests to change a mail + group. + + The domain system encodes the global part of a mail destination as + a domain name and uses dots in the global part to separate labels + in the encoded domain name. The domain system encodes the local + part of a mail destination as a single label, and any dots in this + part are simply copied into the label. The domain system forms a + complete mail destination as the local label concatenated to the + domain string for the global part. We call this a mailbox. + + For example, the mailbox Mockapetris@F.ISI.ARPA has a global + domain name of three labels, F.ISI.ARPA. The domain name + encoding for the whole mailbox is Mockapetris.F.ISI.ARPA. The + mailbox Mockapetris.cad@F.ISI.ARPA has the same domain name for + the global part and a 4 label domain name for the mailbox of + Mockapetris\.cad.F.ISI.ARPA (the \ is not stored in the label, + its merely used to denote the "quoted" dot). + + It is anticipated that the Internet system will adopt agent + binding as part of the initial implementation of the domain + system, and that mailbox binding will eventually become the + preferred style as organizations convert their mail systems to the + new style. To facilitate this approach, the domain information + for these two binding styles is organized to allow a requestor to + determine which types of support are available, and the + information is kept in two disjoint classes. + + Agent binding + + In agent binding, a mail system uses the global part of the mail + destination as a domain name, with dots denoting structure. The + domain name is resolved using a MAILA query which return MF and MD + RRs to specify the domain name of the appropriate host to receive + the mail. MD (Mail delivery) RRs specify hosts that are expected + to have the mailbox in question; MF (Mail forwarding) RRs specify + hosts that are expected to be intermediaries willing to accept the + mail for eventual forwarding. The hosts are hints, rather than + definite answers, since the query is made without the full mail + destination specification. + + For example, mail for MOCKAPETRIS@F.ISI.ARPA would result in a + query with QTYPE=MAILA and QNAME=F.ISI.ARPA, which might return + two RRs: + + + + +Mockapetris [Page 53] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + F.ISI.ARPA MD IN F.ISI.ARPA + F.ISI.ARPA MF IN A.ISI.ARPA + + The mailer would interpret these to mean that the mail agent on + F.ISI.ARPA should be able to deliver the mail directly, but that + A.ISI.ARPA is willing to accept the mail for probable forwarding. + + Using this system, an organization could implement a system that + uses organization names for global parts, rather than the usual + host names, but all mail for the organization would be routed the + same, regardless of its local part. Hence and organization with + many hosts would expect to see many forwarding operations. + + Mailbox binding + + In mailbox binding, the mailer uses the entire mail destination + specification to construct a domain name. The encoded domain name + for the mailbox is used as the QNAME field in a QTYPE=MAILB query. + + Several outcomes are possible for this query: + + 1. The query can return a name error indicating that the mailbox + does not exist as a domain name. + + In the long term this would indicate that the specified mailbox + doesn't exist. However, until the use of mailbox binding is + universal, this error condition should be interpreted to mean + that the organization identified by the global part does not + support mailbox binding. The appropriate procedure is to + revert to agent binding at this point. + + 2. The query can return a Mail Rename (MR) RR. + + The MR RR carries new mailbox specification in its RDATA field. + The mailer should replace the old mailbox with the new one and + retry the operation. + + 3. The query can return a MB RR. + + The MB RR carries a domain name for a host in its RDATA field. + The mailer should deliver the message to that host via whatever + protocol is applicable, e.g. SMTP. + + 4. The query can return one or more Mail Group (MG) RRs. + + This condition means that the mailbox was actually a mailing + list or mail group, rather than a single mailbox. Each MG RR + has a RDATA field that identifies a mailbox that is a member of + + + +Mockapetris [Page 54] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + the group. The mailer should deliver a copy of the message to + each member. + + 5. The query can return a MB RR as well as one or more MG RRs. + + This condition means the the mailbox was actually a mailing + list. The mailer can either deliver the message to the host + specified by the MB RR, which will in turn do the delivery to + all members, or the mailer can use the MG RRs to do the + expansion itself. + + In any of these cases, the response may include a Mail Information + (MINFO) RR. This RR is usually associated with a mail group, but + is legal with a MB. The MINFO RR identifies two mailboxes. One + of these identifies a responsible person for the original mailbox + name. This mailbox should be used for requests to be added to a + mail group, etc. The second mailbox name in the MINFO RR + identifies a mailbox that should receive error messages for mail + failures. This is particularly appropriate for mailing lists when + errors in member names should be reported to a person other than + the one who sends a message to the list. New fields may be added + to this RR in the future. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 55] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +Appendix 1 - Domain Name Syntax Specification + + The preferred syntax of domain names is given by the following BNF + rules. Adherence to this syntax will result in fewer problems with + many applications that use domain names (e.g., mail, TELNET). Note + that some applications use domain names containing binary information + and hence do not follow this syntax. + + <domain> ::= <subdomain> | " " + + <subdomain> ::= <label> | <subdomain> "." <label> + + <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ] + + <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str> + + <let-dig-hyp> ::= <let-dig> | "-" + + <let-dig> ::= <letter> | <digit> + + <letter> ::= any one of the 52 alphabetic characters A through Z + in upper case and a through z in lower case + + <digit> ::= any one of the ten digits 0 through 9 + + Note that while upper and lower case letters are allowed in domain + names no significance is attached to the case. That is, two names + with the same spelling but different case are to be treated as if + identical. + + The labels must follow the rules for ARPANET host names. They must + start with a letter, end with a letter or digit, and have as interior + characters only letters, digits, and hyphen. There are also some + restrictions on the length. Labels must be 63 characters or less. + + For example, the following strings identify hosts in the ARPA + Internet: + + F.ISI.ARPA LINKABIT-DCN5.ARPA UCL-TAC.ARPA + + + + + + + + + + + + +Mockapetris [Page 56] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +Appendix 2 - Field formats and encodings + + +-----------------------------------------------+ + | | + | ***** WARNING ***** | + | | + | The following formats are preliminary and | + | are included for purposes of explanation only.| + | In particular, new RR types will be added, | + | and the size, position, and encoding of | + | fields are subject to change. | + | | + +-----------------------------------------------+ + + TYPE values + + TYPE fields are used in resource records. Note that these types + are not the same as the QTYPE fields used in queries, although the + functions are often similar. + + TYPE value meaning + + A 1 a host address + + NS 2 an authoritative name server + + MD 3 a mail destination + + MF 4 a mail forwarder + + CNAME 5 the canonical name for an alias + + SOA 6 marks the start of a zone of authority + + MB 7 a mailbox domain name + + MG 8 a mail group member + + MR 9 a mail rename domain name + + NULL 10 a null RR + + WKS 11 a well known service description + + PTR 12 a domain name pointer + + HINFO 13 host information + + MINFO 14 mailbox or mail list information + + +Mockapetris [Page 57] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + QTYPE values + + QTYPE fields appear in the question part of a query. They include + the values of TYPE with the following additions: + + AXFR 252 A request for a transfer of an entire zone of authority + + MAILB 253 A request for mailbox-related records (MB, MG or MR) + + MAILA 254 A request for mail agent RRs (MD and MF) + + * 255 A request for all records + + CLASS values + + CLASS fields appear in resource records + + CLASS value meaning + + IN 1 the ARPA Internet + + CS 2 the computer science network (CSNET) + + QCLASS values + + QCLASS fields appear in the question section of a query. They + include the values of CLASS with the following additions: + + * 255 any class + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 58] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + Standard resource record formats + + All RRs have the same top level format shown below: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / / + / NAME / + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | CLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TTL | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RDLENGTH | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| + / RDATA / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + NAME - a compressed domain name to which this resource + record pertains. + + TYPE - two octets containing one of the RR type codes + defined in Appendix 2. This field specifies the + meaning of the data in the RDATA field. + + CLASS - two octets which specifies the class of the data in + the RDATA field. + + TTL - a 16 bit signed integer that specifies the time + interval that the resource record may be cached + before the source of the information should again be + consulted. Zero values are interpreted to mean that + the RR can only be used for the transaction in + progress, and should not be cached. For example, SOA + records are always distributed with a zero TTL to + prohibit caching. Zero values can also be used for + extremely volatile data. + + RDLENGTH- an unsigned 16 bit integer that specifies the length + in octets of the RDATA field. + + + +Mockapetris [Page 59] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + RDATA - a variable length string of octets that describes the + resource. The format of this information varies + according to the TYPE and CLASS of the resource + record. + + The format of the RDATA field is standard for all classes for the + RR types NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR, HINFO, MINFO and + NULL. These formats are shown below together with the appropriate + additional section RR processing. + + CNAME RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / CNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + CNAME - A compressed domain name which specifies that the + domain name of the RR is an alias for a canonical + name specified by CNAME. + + CNAME records cause no additional section processing. The + RDATA section of a CNAME line in a master file is a standard + printed domain name. + + HINFO RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / CPU / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / OS / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + CPU - A character string which specifies the CPU type. The + character string is represented as a single octet + length followed by that number of characters. The + following standard strings are defined:. + + PDP-11/70 C/30 C/70 VAX-11/780 + H-316 H-516 DEC-2060 DEC-1090T + ALTO IBM-PC IBM-PC/XT PERQ + IBM-360/67 IBM-370/145 + + OS - A character string which specifies the operating system + type. The character string is represented as a single octet + + +Mockapetris [Page 60] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + length followed by that number of characters. The following + standard types are defined:. + + ASP AUGUST BKY CCP + DOS/360 ELF EPOS EXEC-8 + GCOS GPOS ITS INTERCOM + KRONOS MCP MOS MPX-RT + MULTICS MVT NOS NOS/BE + OS/MVS OS/MVT RIG RSX11 + RSX11M RT11 SCOPE SIGNAL + SINTRAN TENEX TOPS10 TOPS20 + TSS UNIX VM/370 VM/CMS + VMS WAITS + + HINFO records cause no additional section processing. + + HINFO records are used to acquire general information about a + host. The main use is for protocols such as FTP that can use + special procedures when talking between machines or operating + systems of the same type. + + MB RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + MADNAME - A compressed domain name which specifies a host which + has the specified mailbox. + + MB records cause additional section processing which looks up + an A type record corresponding to MADNAME. The RDATA section + of a MB line in a master file is a standard printed domain + name. + + MD RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + MADNAME - A compressed domain name which specifies a host which + + + +Mockapetris [Page 61] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + has a mail agent for the domain which should be able + to deliver mail for the domain. + + MD records cause additional section processing which looks up + an A type record corresponding to MADNAME. The RDATA section + of a MD line in a master file is a standard printed domain + name. + + MF RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + MADNAME - A compressed domain name which specifies a host which + has a mail agent for the domain which will accept + mail for forwarding to the domain. + + MF records cause additional section processing which looks up + an A type record corresponding to MADNAME. The RDATA section + of a MF line in a master file is a standard printed domain + name. + + MG RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MGMNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + MGMNAME - A compressed domain name which specifies a mailbox + which is a member of the mail group specified by the + domain name. + + MF records cause no additional section processing. The RDATA + section of a MF line in a master file is a standard printed + domain name. + + + + + + + + + +Mockapetris [Page 62] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + MINFO RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / RMAILBX / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / EMAILBX / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + RMAILBX - A compressed domain name which specifies a mailbox + which is responsible for the mailing list or mailbox. + If this domain name names the root, the owner of the + MINFO RR is responsible for itself. Note that many + existing mailing lists use a mailbox X-request for + the RMAILBX field of mailing list X, e.g. + Msgroup-request for Msgroup. This field provides a + more general mechanism. + + EMAILBX - A compressed domain name which specifies a mailbox + which is to receive error messages related to the + mailing list or mailbox specified by the owner of the + MINFO RR (similar to the ERRORS-TO: field which has + been proposed). If this domain name names the root, + errors should be returned to the sender of the + message. + + MINFO records cause no additional section processing. Although + these records can be associated with a simple mailbox, they are + usually used with a mailing list. The MINFO section of a MF + line in a master file is a standard printed domain name. + + MR RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / NEWNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + NEWNAME - A compressed domain name which specifies a mailbox + which is the proper rename of the specified mailbox. + + MR records cause no additional section processing. The RDATA + section of a MR line in a master file is a standard printed + domain name. + + + + +Mockapetris [Page 63] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + NULL RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / <anything> / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + Anything at all may be in the RDATA field so long as it is + 65535 octets or less. + + NULL records cause no additional section processing. NULL RRs + are not allowed in master files. + + NS RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / NSDNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + NSDNAME - A compressed domain name which specifies a host which + has a name server for the domain. + + NS records cause both the usual additional section processing + to locate a type A record, and a special search of the zone in + which they reside. The RDATA section of a NS line in a master + file is a standard printed domain name. + + PTR RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / PTRDNAME / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + PTRDNAME - A compressed domain name which points to some + location in the domain name space. + + PTR records cause no additional section processing. These RRs + are used in special domains to point to some other location in + the domain space. These records are simple data, and don't + imply any special processing similar to that performed by + CNAME, which identifies aliases. Appendix 3 discusses the use + of these records in the ARPA Internet address domain. + + + + +Mockapetris [Page 64] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + SOA RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / RNAME / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | SERIAL | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | REFRESH | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RETRY | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | EXPIRE | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | MINIMUM | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + MNAME - The domain name of the name server that was the + original source of data for this zone. + + RNAME - A domain name which specifies the mailbox of the + person responsible for this zone. + + SERIAL - The unsigned 16 bit version number of the of the + original copy of the zone. This value wraps and + should be compared using sequence space arithmetic. + + REFRESH - The unsigned 32 bit time interval before the zone + should be refreshed. + + RETRY - The unsigned 32 bit time interval that should elapse + before a failed refresh should be retried. + + EXPIRE - A 32 bit time value that specifies the upper limit on + the time interval that can elapse before the zone is + no longer authoritative. + + MINIMUM - The unsigned 16 bit minimum TTL field that should be + exported with any RR from this zone (other than the + SOA itself). + + SOA records cause no additional section processing. The RDATA + + +Mockapetris [Page 65] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + section of a SOA line in a master file is a standard printed + domain name for MNAME, a standard X@Y mailbox specification for + RNAME, and decimal numbers for the remaining parameters. + + All times are in units of seconds. + + Most of these fields are pertinent only for name server + maintenance operations. However, MINIMUM is used in all query + operations that retrieve RRs from a zone. Whenever a RR is + sent in a response to a query, the TTL field is set to the + maximum of the TTL field from the RR and the MINIMUM field in + the appropriate SOA. Thus MINIMUM is a lower bound on the TTL + field for all RRs in a zone. RRs in a zone are never discarded + due to timeout unless the whole zone is deleted. This prevents + partial copies of zones. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 66] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +Appendix 3 - Internet specific field formats and operations + + Message transport + + The Internet supports name server access using TCP [10] on server + port 53 (decimal) as well as datagram access using UDP [11] on UDP + port 53 (decimal). Messages sent over TCP virtual circuits are + preceded by an unsigned 16 bit length field which describes the + length of the message, excluding the length field itself. + + +-----------------------------------------------+ + | | + | ***** WARNING ***** | + | | + | The following formats are preliminary and | + | are included for purposes of explanation only.| + | In particular, new RR types will be added, | + | and the size, position, and encoding of | + | fields are subject to change. | + | | + +-----------------------------------------------+ + + A RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ADDRESS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + ADDRESS - A 32 bit ARPA internet address + + Hosts that have multiple ARPA Internet addresses will have + multiple A records. + + A records cause no additional section processing. The RDATA + section of an A line in a master file is an Internet address + expressed as four decimal numbers separated by dots without any + imbedded spaces (e.g., "10.2.0.52" or "192.0.5.6"). + + + + + + + + + + + + +Mockapetris [Page 67] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + WKS RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ADDRESS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | PROTOCOL | | + +--+--+--+--+--+--+--+--+ | + | | + / <BIT MAP> / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + where: + + ADDRESS - An 32 bit ARPA Internet address + + PROTOCOL - An 8 bit IP protocol number + + <BIT MAP> - A variable length bit map. The bit map must be a + multiple of 8 bits long. + + The WKS record is used to describe the well known services + supported by a particular protocol on a particular internet + address. The PROTOCOL field specifies an IP protocol number, and + the bit map has one bit per port of the specified protocol. The + first bit corresponds to port 0, the second to port 1, etc. If + less than 256 bits are present, the remainder are assumed to be + zero. The appropriate values for ports and protocols are + specified in [13]. + + For example, if PROTOCOL=TCP (6), the 26th bit corresponds to TCP + port 25 (SMTP). If this bit is set, a SMTP server should be + listening on TCP port 25; if zero, SMTP service is not supported + on the specified address. + + The anticipated use of WKS RRs is to provide availability + information for servers for TCP and UDP. If a server supports + both TCP and UDP, or has multiple Internet addresses, then + multiple WKS RRs are used. + + WKS RRs cause no additional section processing. The RDATA section + of a WKS record consists of a decimal protocol number followed by + mnemonic identifiers which specify bits to be set to 1. + + IN-ADDR special domain + + The ARPA internet uses a special domain to support gateway + location and ARPA Internet address to host mapping. The intent of + this domain is to allow queries to locate all gateways on a + + +Mockapetris [Page 68] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + particular network in the ARPA Internet, and also to provide a + guaranteed method to perform host address to host name mapping. + + Note that both of these services are similar to functions that + could be performed by inverse queries; the difference is that this + part of the domain name space is structured according to address, + and hence can guarantee that the appropriate data can be located + without an exhaustive search of the domain space. It is + anticipated that the special tree will be used by ARPA Internet + resolvers for all gateway location services, but that address to + name resolution will be performed by first trying the inverse + query on the local name server database followed by a query in the + special space if the inverse query fails. + + The domain is a top level domain called IN-ADDR whose substructure + follows the ARPA Internet addressing structure. + + Domain names in the IN-ADDR domain are defined to have up to four + labels in addition to the IN-ADDR label. Each label is a + character string which expresses a decimal value in the range + 0-255 (with leading zeros omitted except in the case of a zero + octet which is represented by a single zero). These labels + correspond to the 4 octets of an ARPA Internet address. + + Host addresses are represented by domain names that have all four + labels specified. Thus data for ARPA Internet address 10.2.0.52 + is located at domain name 52.0.2.10.IN-ADDR. The reversal, though + awkward to read, allows zones to follow the natural grouping of + hosts within networks. For example, 10.IN-ADDR can be a zone + containing data for the ARPANET, while 26.IN-ADDR can be a + separate zone for MILNET. Address nodes are used to hold pointers + to primary host names in the normal domain space. + + Network addresses correspond to some of the non-terminal nodes in + the IN-ADDR tree, since ARPA Internet network numbers are either + 1, 2, or 3 octets. Network nodes are used to hold pointers to + primary host names (which happen to be gateways) in the normal + domain space. Since a gateway is, by definition, on more than one + network, it will typically have two or more network nodes that + point at the gateway. Gateways will also have host level pointers + at their fully qualified addresses. + + Both the gateway pointers at network nodes and the normal host + pointers at full address nodes use the PTR RR to point back to the + primary domain names of the corresponding hosts. + + For example, part of the IN-ADDR domain will contain information + about the ISI to MILNET and MIT gateways, and hosts F.ISI.ARPA and + MULTICS.MIT.ARPA. Assuming that ISI gateway has addresses + + +Mockapetris [Page 69] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + 10.2.0.22 and 26.0.0.103, and a name MILNET-GW.ISI.ARPA, and the + MIT gateway has addresses 10.0.0.77 and 18.10.0.4 and a name + GW.MIT.ARPA, the domain database would contain: + + 10.IN-ADDR PTR IN MILNET-GW.ISI.ARPA + 10.IN-ADDR PTR IN GW.MIT.ARPA + 18.IN-ADDR PTR IN GW.MIT.ARPA + 26.IN-ADDR PTR IN MILNET-GW.ISI.ARPA + 22.0.2.10.IN-ADDR PTR IN MILNET-GW.ISI.ARPA + 103.0.0.26.IN-ADDR PTR IN MILNET-GW.ISI.ARPA + 77.0.0.10.IN-ADDR PTR IN GW.MIT.ARPA + 4.0.10.18.IN-ADDR PTR IN GW.MIT.ARPA + 52.0.2.10.IN-ADDR PTR IN F.ISI.ARPA + 6.0.0.10.IN-ADDR PTR IN MULTICS.MIT.ARPA + + Thus a program which wanted to locate gateways on net 10 would + originate a query of the form QTYPE=PTR, QCLASS=IN, + QNAME=10.IN-ADDR. It would receive two RRs in response: + + 10.IN-ADDR PTR IN MILNET-GW.ISI.ARPA + 10.IN-ADDR PTR IN GW.MIT.ARPA + + The program could then originate QTYPE=A, QCLASS=IN queries for + MILNET-GW.ISI.ARPA and GW.MIT.ARPA to discover the ARPA Internet + addresses of these gateways. + + A resolver which wanted to find the host name corresponding to + ARPA Internet host address 10.0.0.6 might first try an inverse + query on the local name server, but find that this information + wasn't available. It could then try a query of the form + QTYPE=PTR, QCLASS=IN, QNAME=6.0.0.10.IN-ADDR, and would receive: + + 6.0.0.10.IN-ADDR PTR IN MULTICS.MIT.ARPA + + Several cautions apply to the use of these services: + + Since the IN-ADDR special domain and the normal domain for a + particular host or gateway will be in different zones, the + possibility exists that that the data may be inconsistent. + + Gateways will often have two names in separate domains, only + one of which can be primary. + + Systems that use the domain database to initialize their + routing tables must start with enough gateway information to + guarantee that they can access the appropriate name server. + + The gateway data only reflects the existence of a gateway in a + + + +Mockapetris [Page 70] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + + manner equivalent to the current HOSTS.TXT file. It doesn't + replace the dynamic availability information from GGP or EGP. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 71] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +REFERENCES and BIBLIOGRAPHY + + [1] E. Feinler, K. Harrenstien, Z. Su, and V. White, "DOD Internet + Host Table Specification", RFC 810, Network Information Center, + SRI International, March 1982. + + [2] J. Postel, "Computer Mail Meeting Notes", RFC 805, + USC/Information Sciences Institute, February 1982. + + [3] Z. Su, and J. Postel, "The Domain Naming Convention for Internet + User Applications", RFC 819, Network Information Center, SRI + International, August 1982. + + [4] Z. Su, "A Distributed System for Internet Name Service", + RFC 830, Network Information Center, SRI International, + October 1982. + + [5] K. Harrenstien, and V. White, "NICNAME/WHOIS", RFC 812, Network + Information Center, SRI International, March 1982. + + [6] M. Solomon, L. Landweber, and D. Neuhengen, "The CSNET Name + Server", Computer Networks, vol 6, nr 3, July 1982. + + [7] K. Harrenstien, "NAME/FINGER", RFC 742, Network Information + Center, SRI International, December 1977. + + [8] J. Postel, "Internet Name Server", IEN 116, USC/Information + Sciences Institute, August 1979. + + [9] K. Harrenstien, V. White, and E. Feinler, "Hostnames Server", + RFC 811, Network Information Center, SRI International, + March 1982. + + [10] J. Postel, "Transmission Control Protocol", RFC 793, + USC/Information Sciences Institute, September 1981. + + [11] J. Postel, "User Datagram Protocol", RFC 768, USC/Information + Sciences Institute, August 1980. + + [12] J. Postel, "Simple Mail Transfer Protocol", RFC 821, + USC/Information Sciences Institute, August 1980. + + [13] J. Reynolds, and J. Postel, "Assigned Numbers", RFC 870, + USC/Information Sciences Institute, October 1983. + + [14] P. Mockapetris, "Domain names - Concepts and Facilities," + RFC 882, USC/Information Sciences Institute, November 1983. + + + + +Mockapetris [Page 72] + + +RFC 883 November 1983 + Domain Names - Implementation and Specification + + +INDEX + + * usage........................................................37, 57 + + A RDATA format.....................................................67 + + byte order..........................................................6 + + cache queue....................................................35, 42 + character case..................................................7, 31 + CLASS...........................................................9, 58 + completion.........................................................19 + compression........................................................31 + CNAME RR...........................................................60 + + header format......................................................26 + HINFO RR...........................................................60 + + include files......................................................43 + inverse queries....................................................17 + + mailbox names......................................................53 + master files.......................................................43 + MB RR..............................................................61 + MD RR..............................................................61 + message format.....................................................13 + MF RR..............................................................62 + MG RR..............................................................62 + MINFO RR...........................................................63 + MR RR..............................................................63 + + NULL RR............................................................64 + NS RR..............................................................64 + + PTR RR.........................................................64, 69 + + QCLASS.............................................................58 + QTYPE..............................................................57 + queries (standard).................................................15 + + recursive service..................................................24 + RR format..........................................................59 + + SOA RR.............................................................65 + Special domains....................................................68 + + TYPE...............................................................57 + + WKS type RR........................................................68 + + +Mockapetris [Page 73] |