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