|
|
1.1 ! root 1: ! 2: ! 3: Network Working Group Paul Mockapetris ! 4: Request for Comments: 973 ISI ! 5: January 1986 ! 6: ! 7: Domain System Changes and Observations ! 8: ! 9: ! 10: STATUS OF THIS MEMO ! 11: ! 12: This RFC documents updates to Domain Name System specifications ! 13: RFC-882 [1] and RFC-883 [2], suggests some operational guidelines, ! 14: and discusses some experiences and problem areas in the present ! 15: system. Distribution of this memo is unlimited. ! 16: ! 17: This document includes all changes to the Domain System through ! 18: January, 1986. Change notices and additional discussion are ! 19: available online in file [USC-ISIB.ARPA]<DOMAIN>DOMAIN.CHANGES. ! 20: ! 21: OVERVIEW ! 22: ! 23: This memo is divided into four major sections: ! 24: ! 25: "UPDATES" which discusses changes to the domain specification ! 26: which are in widespread use and should be regarded as being part ! 27: of the specification. ! 28: ! 29: "OPERATION GUIDELINES" which suggests rules-of-thumb for using the ! 30: domain system and configuring your database which are appropriate ! 31: in most cases, but which may have rare exceptions. ! 32: ! 33: "EXPERIENCES" which discusses some unusual situations and common ! 34: bugs which are encountered in the present system, and should be ! 35: helpful in problem determination and tuning. ! 36: ! 37: "PROBLEM AREAS" which discusses some shortcomings in the present ! 38: system which may be addressed in future versions. ! 39: ! 40: UPDATES ! 41: ! 42: This section discusses changes to the specification which are final, ! 43: and should be incorporated in all domain system software. ! 44: ! 45: TTL timeouts too small ! 46: ! 47: The 16 bit TTL field in RRs could not represent a large enough ! 48: time interval. The 16 bit field, using seconds for units, has a ! 49: maximum period of approximately 18 hours. ! 50: ! 51: All time values, including all TTLs and the MINIMUM field of the ! 52: SOA RR, are expanded to 32 bits. ! 53: ! 54: ! 55: ! 56: Mockapetris [Page 1] ! 57: ! 58: ! 59: ! 60: RFC 973 January 1986 ! 61: Domain System Changes and Observations ! 62: ! 63: ! 64: CLASS changes ! 65: ! 66: Class 2, originally reserved for CSNET, is obsolete. Class 3 has ! 67: been assigned for use by CHAOS. ! 68: ! 69: CNAME usage ! 70: ! 71: The specification allows CNAME RRs to exist with other RRs at the ! 72: same node. This creates difficulties since the other RRs stored ! 73: with the CNAME at the alias might not agree with the RRs stored at ! 74: the primary name. ! 75: ! 76: If a node has a CNAME RR, it should have no other RRs. ! 77: ! 78: * semantics ! 79: ! 80: The use of * to represent a single label wildcard, along with the ! 81: possibility of multiple * labels, led to difficult server ! 82: implementations and complicated search algorithms. There were ! 83: also questions regarding whether a * based specification could ! 84: refer to names that were not contained in the zone which had the * ! 85: specification. ! 86: ! 87: While we might want the "inheritability" for some cases, it leads ! 88: to implementation difficulties. The first of these is that ! 89: whenever we can't find a RR in a particular zone, we have to ! 90: search all parent zones to look for a suitable * result. ! 91: (Alternatively we could develop some automatic method for insuring ! 92: consistency or insist on careful duplication of inherited data.) ! 93: We also must deal with conflicts, i.e. what if a subdomain doesn't ! 94: want to inherit defaults. ! 95: ! 96: Given these difficulties, the solution is to insist that ! 97: delegation of authority cancels the * defaults. This is quite ! 98: simple to implement; all you need to do is to check for delegation ! 99: before looking for * RRs. ! 100: ! 101: A second difficulty is the restriction that * match a single ! 102: label. Thus if a name server is looking for RRs for the name ! 103: A.B.C.D.E.F, it must check for *.B.C.D.E.F, *.*.C.D.E.F, ! 104: *.*.*.D.E.F, etc. This check must also be careful of zone ! 105: boundaries and multiplies the effort to handle a query. ! 106: ! 107: The solution adopted is to allow a single * label in the leftmost ! 108: part of a name stored in a zone, and to allow this label to match ! 109: ! 110: ! 111: ! 112: ! 113: Mockapetris [Page 2] ! 114: ! 115: ! 116: ! 117: RFC 973 January 1986 ! 118: Domain System Changes and Observations ! 119: ! 120: ! 121: any number of unknown labels or a single known label in the query ! 122: name. However, the * match is only taken for parts of the tree ! 123: which are neither delegated or explicitly represented. ! 124: ! 125: The algorithm for performing the search in a tree structured ! 126: database has the following steps: ! 127: ! 128: 1) Descend in the tree matching labels from right to left. If a ! 129: delegation is found return that; if the specified node is found ! 130: go to step 2, if the tree ends go to step 3. ! 131: ! 132: 2) Look for RRs that answer the query. If any are found, return ! 133: them as the answer. If none are found, look for answers in a * ! 134: node which has the same name as the query name except for the ! 135: rightmost label. (e.g. if you can't find an answer at F.ISI.ARPA, ! 136: look for a RR at *.ISI.ARPA) ! 137: ! 138: 3) The search for a desired name has failed; look for a node whose ! 139: name is * plus however much matched. Look for answers there. ! 140: (e.g. If you are looking for X.Y.ISI.ARPA and the tree ends at ! 141: ISI.ARPA, look at *.ISI.ARPA. The same thing holds for ! 142: Y.ISI.ARPA, or any name of the form <anything>.Z.ISI.ARPA, where Z ! 143: is a label that doesn't exist under ISI.ARPA) ! 144: ! 145: Note that this interpretation means that * matches names that are ! 146: not in the tree, no matter how much of the tree is missing, and ! 147: also matches one level's worth of known tree. ! 148: ! 149: AA semantics ! 150: ! 151: When a name server is responding to a query for a particular name ! 152: and finds a CNAME, it may optionally restart the search at the ! 153: canonical name. If the server uses the restart feature, the ! 154: answer section of the returned query contains one (or more) ! 155: CNAMEs, possibly followed by answers for the primary name. The ! 156: canonical name will usually be in the same zone as the alias, but ! 157: this need not be the case. If the server is authoritative for one ! 158: of the names but not both, it is not clear whether the AA bit ! 159: should be set. ! 160: ! 161: The solution adopted is to make the AA refer to the original query ! 162: name. ! 163: ! 164: ! 165: ! 166: ! 167: ! 168: ! 169: ! 170: Mockapetris [Page 3] ! 171: ! 172: ! 173: ! 174: RFC 973 January 1986 ! 175: Domain System Changes and Observations ! 176: ! 177: ! 178: Master file format ! 179: ! 180: The present specification uses a somewhat awkward method for ! 181: representing domain names in master files. ! 182: ! 183: The change adopted is that all domain names in this file will be ! 184: represented as either absolute or relative. An absolute domain ! 185: name ends with a ".". A free standing "." is assumed to refer to ! 186: the root. A relative domain name doesn't end with a dot, and is ! 187: assumed to be relative to the current origin. ! 188: ! 189: SERIAL number size ! 190: ! 191: If the master file changes rapidly, an infrequently updated copy ! 192: may miss the wrapping of the sequence number in the SERIAL field ! 193: of the SOA, or misinterpret the number of updates that have taken ! 194: place. ! 195: ! 196: The SERIAL field is increased to 32 bits. ! 197: ! 198: MD and MF replaced by MX ! 199: ! 200: The original specification uses MD and MF RRs for mail agent ! 201: binding. The problem is that a mailer making a MAILA query, which ! 202: asks for both types, can't use the cache since the cache might ! 203: have the results for a MD or MF query. That is, the presence of ! 204: one of these types of information in the cache doesn't imply ! 205: anything about the other type. The result was that either mailers ! 206: would have to always consult authoritative servers or try to use ! 207: partial information; neither of these is really acceptable. ! 208: ! 209: The change is to replace MD and MF with a new type of RR called MX ! 210: which conveys similar information in a single RR type. MX has ! 211: been assigned a type code of 15 decimal. The format of the MX RR ! 212: is a 16 bit preference value followed by a domain name. A node ! 213: may have multiple MX RRs, and multiple MX RRs with the same ! 214: preference value are allowed at a given node. ! 215: ! 216: ! 217: ! 218: ! 219: ! 220: ! 221: ! 222: ! 223: ! 224: ! 225: ! 226: ! 227: Mockapetris [Page 4] ! 228: ! 229: ! 230: ! 231: RFC 973 January 1986 ! 232: Domain System Changes and Observations ! 233: ! 234: ! 235: The preference values denote the relative preference that the mail ! 236: destination places on the mail agents, with lower values being ! 237: "better". A mailer is expected to at least try the mail agent(s) ! 238: with the lowest preference value. The significance of particular ! 239: preference values, the units of preference, and the linearity of ! 240: preference values are not defined but left open; preference values ! 241: should only be used to establish relative rankings. ! 242: ! 243: For example, the current RRs: ! 244: ! 245: MAIL-ORG MD HOST1 ! 246: MD HOST2 ! 247: MF HOST3 ! 248: ! 249: might be replaced by: ! 250: ! 251: MAIL-ORG MX 10 HOST1 ! 252: MX 10 HOST2 ! 253: MX 20 HOST3 ! 254: ! 255: The values 10 and 20 have no significance other than 10<20. A ! 256: detailed discussion of the use of MX is the subject of [3]. ! 257: ! 258: Zone transfer ! 259: ! 260: The original specification states that zone transfers take place ! 261: in breadth first order. The intent was to make the transfer ! 262: easier for the accepting name server to handle. This now doesn't ! 263: work out to be very helpful, and is a severe pain for implementers ! 264: using various hashing algorithms. The new rule is that you can ! 265: transmit the records in any order you choose, so long as the SOA ! 266: node of the zone is transmitted first and last, and no other ! 267: duplication occurs. ! 268: ! 269: IN-ADDR domain renamed ! 270: ! 271: The name of the IN-ADDR domain is now IN-ADDR.ARPA. This change ! 272: was made because many felt that the use of a top-level name was ! 273: inappropriate to network-specific information. ! 274: ! 275: ! 276: ! 277: ! 278: ! 279: ! 280: ! 281: ! 282: ! 283: ! 284: Mockapetris [Page 5] ! 285: ! 286: ! 287: ! 288: RFC 973 January 1986 ! 289: Domain System Changes and Observations ! 290: ! 291: ! 292: OPERATIONAL GUIDELINES ! 293: ! 294: This section suggests rules-of-thumb for using the domain system and ! 295: configuring your database which are appropriate in most cases, but ! 296: which may have rare exceptions. ! 297: ! 298: Zone delegation ! 299: ! 300: When a domain wishes to become independent from its parent, the ! 301: RRs which mark the delegation in the parent and child zones should ! 302: be carefully synchronized to minimize the possibility that ! 303: resolvers become confused. ! 304: ! 305: For example, suppose that we wish to create a new zone called ! 306: ISI.EDU under an existing EDU zone, and that the servers for the ! 307: child zone are X.ISI.EDU and Y.GOV. ! 308: ! 309: We might add the following to the parent zone: ! 310: ! 311: ISI.EDU. 10000 NS X.ISI.EDU. ! 312: 10000 NS Y.GOV. ! 313: X.ISI.EDU. 10000 A <address of X.ISI.EDU.> ! 314: Y.GOV. 10000 A <address of Y.GOV.> ! 315: ! 316: and the following to the child zone: ! 317: ! 318: ISI.EDU. 10000 NS X.ISI.EDU. ! 319: 10000 NS Y.GOV. ! 320: 50000 SOA <SOA information> ! 321: X.ISI.EDU. 10000 A <address of X.ISI.EDU.> ! 322: Y.GOV. 10000 A <address of Y.GOV.> ! 323: ! 324: Note the following: ! 325: ! 326: In both cases, the A RR for Y.GOV is included, even though ! 327: Y.GOV isn't in the EDU or ISI.EDU domains. This RR isn't ! 328: authoritative, but is included to guarantee that the address of ! 329: Y.GOV is passed with delegations to it. Strictly speaking this ! 330: RR need not be in either zone, but its presence is recommended. ! 331: The X.ISI.EDU A RR is absolutely essential. The only time that ! 332: a server should use the glue RRs is when it is returning the NS ! 333: RRs and doesn't otherwise have the address of the server. For ! 334: example, if the parent server also was authoritative for GOV, ! 335: the glue RR would typically not be consulted. However, it is ! 336: still a good idea for it to be present, so that the zone is ! 337: self-sufficient. ! 338: ! 339: ! 340: ! 341: Mockapetris [Page 6] ! 342: ! 343: ! 344: ! 345: RFC 973 January 1986 ! 346: Domain System Changes and Observations ! 347: ! 348: ! 349: The child zone and the parent zone have identical NS RRs for ! 350: the ISI.EDU domain. This guarantees that no matter which ! 351: server is asked about the ISI.EDU domain, the same set of name ! 352: servers is returned. ! 353: ! 354: The child zone and the parent zone have A RRs for the name ! 355: servers in the NS RRs that delegate the ISI.EDU domain. This ! 356: guarantees that in addition to knowing the name servers for the ! 357: ISI.EDU domain, the addresses of the servers are known as well. ! 358: ! 359: The TTLs for the NS RRs that delegate the ISI.EDU domain and ! 360: the A RRs that represent the addresses of the name servers are ! 361: all the same. This guarantees that all of these RRs will ! 362: timeout simultaneously. In this example, the value 10000 has ! 363: no special significance, but the coincidence of the TTLs is ! 364: significant. ! 365: ! 366: These guidelines haven't changed any of the flexibility of the ! 367: system; the name of a name server and the domains it serves are ! 368: still independent. ! 369: ! 370: It might also be the case that the organization called ISI wanted ! 371: to take over management of the IN-ADDR domain for an internal ! 372: network, say 128.99.0.0. In this case, we would have additions to ! 373: the parent zone, say IN-ADDR.ARPA. ! 374: ! 375: We might add the following to the parent zone: ! 376: ! 377: 99.128.IN-ADDR.ARPA. 2000 NS Q.ISI.EDU. ! 378: 2000 NS XX.MIT.EDU. ! 379: Q.ISI.EDU. 2000 A <address of Q.ISI.EDU.> ! 380: XX.MIT.EDU. 2000 A <address of XX.MIT.EDU.> ! 381: ! 382: and the following to the child zone: ! 383: ! 384: 99.128.IN-ADDR.ARPA. 2000 NS Q.ISI.EDU. ! 385: 2000 NS XX.MIT.EDU. ! 386: 5000 SOA <SOA information> ! 387: Q.ISI.EDU. 2000 A <address of Q.ISI.EDU.> ! 388: XX.MIT.EDU. 2000 A <address of XX.MIT.EDU.> ! 389: ! 390: SOA serials ! 391: ! 392: The serial field of the SOA RR for a domain is supposed to be a ! 393: continuously increasing (mod 2**32) value which denotes the ! 394: ! 395: ! 396: ! 397: ! 398: Mockapetris [Page 7] ! 399: ! 400: ! 401: ! 402: RFC 973 January 1986 ! 403: Domain System Changes and Observations ! 404: ! 405: ! 406: version of the database. The idea is that you can tell that a ! 407: zone has changed by comparing serial numbers. When you change a ! 408: zone, you should increment the serial field of the SOA. ! 409: ! 410: All RRs with the same name, class, and type should have the same TTL. ! 411: ! 412: The logic here is that all of them will timeout simultaneously if ! 413: cached and hence the cache can be reliably used. ! 414: ! 415: Case consistency ! 416: ! 417: The domain system is supposed to preserve case, but be case ! 418: insensitive. However, it does nobody any good to put both RRs for ! 419: domain name xxx and XXX in the data base - It merely makes caching ! 420: ambiguous and decreases the efficiency of compression. This ! 421: consistency should also exist in the duplicate RRs that mark ! 422: delegation in the delegator and delegatee. For example, if you ! 423: ask the NIC to delegate UZOO.EDU to you, your database shouldn't ! 424: say uzoo.edu. ! 425: ! 426: Inappropriate use of aliases ! 427: ! 428: Canonical names are preferred to aliases in all RRs. One reason ! 429: is that the canonical names are closer to the information ! 430: associated with a name. A second is that canonical names are ! 431: unique, and aliases are not, and hence comparisons will work. ! 432: ! 433: In particular, the use of aliases in PTR RRs of the IN-ADDR domain ! 434: or in NS RRs that mark delegation is discouraged. ! 435: ! 436: EXPERIENCES ! 437: ! 438: This section discusses some unusual situations and common bugs which ! 439: are encountered in the present system, and should be helpful in ! 440: problem determination and tuning. Put differently, you should try to ! 441: make your code defend against these attacks, and you should expect to ! 442: be the object of complaint if you make these attacks. ! 443: ! 444: UDP addresses ! 445: ! 446: When you send a query to a host with multiple addresses, you might ! 447: expect the response to be from the address to which you sent the ! 448: query. This isn't the case with almost all UNIX implementations. ! 449: ! 450: ! 451: ! 452: ! 453: ! 454: ! 455: Mockapetris [Page 8] ! 456: ! 457: ! 458: ! 459: RFC 973 January 1986 ! 460: Domain System Changes and Observations ! 461: ! 462: ! 463: UDP checksums ! 464: ! 465: Many versions of UNIX generate incorrect UDP checksums, and most ! 466: ignore the checksum of incoming UDP datagrams. The typical ! 467: symptom is that your UNIX domain code works fine with other ! 468: UNIXes, but won't communicate with TOPS-20 or other systems. ! 469: (JEEVES, the TOPS-20 server used for 3 of the 4 root servers, ! 470: ignores datagrams with bad UDP checksums.) ! 471: ! 472: Making up data ! 473: ! 474: There are lots of name servers which return RRs for the root ! 475: servers with 99999999 or similar large values in the TTL. For ! 476: example, some return RRs that suggest that ISIF is a root server. ! 477: (It was months ago, but is no longer.) ! 478: ! 479: One of the main ideas of the domain system is that everybody can ! 480: get a chunk of the name space to manage as they choose. However, ! 481: you aren't supposed to lie about other parts of the name space. ! 482: Its OK to remember about other parts of the name space for caching ! 483: or other purposes, but you are supposed to follow the TTL rules. ! 484: ! 485: Now it may be that you put such records in your server or whatever ! 486: to ensure a server of last resort. That's fine. But if you ! 487: export these in answers to queries, you should be shot. These ! 488: entries get put in caches and never die. ! 489: ! 490: Suggested domain meta-rule: ! 491: ! 492: If you must lie, lie only to yourself. ! 493: ! 494: PROBLEM AREAS ! 495: ! 496: This section discusses some shortcomings in the present system which ! 497: may be addressed in future versions. ! 498: ! 499: Compression and types ! 500: ! 501: The present specification attempts to allow name servers and ! 502: resolvers to cache RRs for classes they don't "understand" as well ! 503: as to allow compression of domain names to minimize the size of ! 504: UDP datagrams. These two goals conflict in the present scheme ! 505: since the only way to expand a compressed name is to know that a ! 506: name is expected in that position. ! 507: ! 508: One technique for addressing this problem would be to preface ! 509: binary data (i.e. anything but a domain name) with a length octet. ! 510: ! 511: ! 512: Mockapetris [Page 9] ! 513: ! 514: ! 515: ! 516: RFC 973 January 1986 ! 517: Domain System Changes and Observations ! 518: ! 519: ! 520: The high order two bits of the length octet could contain either ! 521: 01 or 10, which are illegal for domain names. To compensate for ! 522: the additional bytes of data, we could omit the RDATA length field ! 523: and terminate each RR with a binary length field of zero. ! 524: ! 525: Caching non-existent names ! 526: ! 527: In the present system, a resolver has no standard method for ! 528: caching the result that a name does not exist, which seems to make ! 529: up a larger than expected percentage of queries. Some resolvers ! 530: create "does not exist" RRs with TTLs to guarantee against ! 531: repetitive queries for a non-existent name. ! 532: ! 533: A standard technique might be to return the SOA RR for the zone ! 534: (note that only authoritative servers can say name does not exist) ! 535: in the reply, and define the semantics to be that the requester is ! 536: free to assume that the name does not exist for a period equal to ! 537: the MINIMUM field of the SOA. ! 538: ! 539: Cache conflicts ! 540: ! 541: When a resolver is processing a reply, it may well decide to cache ! 542: all RRs found in sections of the reply. The problem is that the ! 543: resolver's cache may already contain a subset of these RRs, ! 544: probably with different TTLs. ! 545: ! 546: If the RRs are from authoritative data in the answer section, then ! 547: the cache RRs should be replaced. In other cases, the correct ! 548: strategy isn't completely clear. Note that if the authoritative ! 549: data's TTL has changed, then the resolver doesn't have enough ! 550: information to make the correct decision in all cases. ! 551: ! 552: This issue is tricky, and deserves thought. ! 553: ! 554: REFERENCES ! 555: ! 556: [1] Mockapetris, P., "Domain Names - Concepts and Facilities", ! 557: RFC-882, USC Information Sciences Institute, November 1983. ! 558: ! 559: [2] Mockapetris, P., "Domain Names - Implementation and ! 560: Specification", RFC-883, USC Information Sciences Institute, ! 561: November 1983. ! 562: ! 563: [3] Partridge, C., "Mail Routing and the Domain System", RFC-974, ! 564: CSNET-CIC, BBN Laboratories, January 1986. ! 565: ! 566: ! 567: ! 568: ! 569: Mockapetris [Page 10] ! 570:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.