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