RFC 799

Internet name domains

πŸ“… published September 1981, from ietf

Internet Name Domains 🌸

Network Working Group, RFC 799, by D. L. Mills at COMSAT Laboratories, September 1981. The category and any obsoletes or updates aren't listed in this part of the title block, so there's nothing to add for those yet πŸ¦‹


1. Introduction ✨

Okay so, in the long run it's not gonna be practical for every internet host to keep every other internet host in its name-address tables πŸ’€ Even now, with over four hundred names and nicknames in the combined ARPANET-DCNET tables, it's already getting awkward 😭 Some sort of hierarchical name-space partitioning could totally fix this, but it has been wickedly difficult to find one that's compatible with the known mail systems across the community πŸ™ˆ The one proposed here came out of several discussions and meetings, and it's believed to be both compatible with existing systems and extensible for future systems with thousands of hosts πŸ‘‘

2. General Topology 🌈

First up, every internet host is uniquely identified by one or more 32-bit internet addresses, and the whole system is fully connected. For the moment, we're ignoring protocol compatibility, so all hosts can be assumed MTP-competent πŸ’… Next, we lay a topological covering over the space of all internet addresses using a set of so-called name domains. In the natural model, name domains would match institutions like ARPA, UCL and COMSAT, and they wouldn't necessarily be disjoint or complete. In principle name domains could be hierarchically structured, but for now we'll just assume a single-level structure ✨

Every name domain is tied to one or more internet processes called mail forwarders, and the name of the domain is the name for any of these processes πŸŽ€ Each forwarder process for a domain is expected to keep duplicate name-address tables with the names of all hosts in its domain, plus the name of at least one forwarder process for every other domain. Forwarder processes can be replicated for robustness, but the complexities that come with that in addressing and routing won't be covered here 🫢 A single host can run a bunch of forwarder processes, and their collective names act as nicknames for that host, on top of any other names it has. From here on, an internet host supporting one or more forwarder processes will just be called a forwarder πŸ¦‹

Every host is expected to keep name-address tables that include the names of at least one forwarder for every domain, plus extra hosts as convenient. A host can belong to several domains, but it doesn't have to include every host in any domain in its tables 🌸 Following current practice, several nicknames can be attached to the principal name of a host in any domain, and those nicknames don't need to be unique relative to any other domain. Hosts can also be multi-homed, meaning they respond to more than one address. For mail forwarding and delivery, we'll assume any of those addresses can be used without prejudice. Using multi-homing to facilitate source routing is a topic for future study πŸ”₯

3. Naming Conventions πŸ’–

In its most general form, a standard internet mailbox name has this syntax:

<user>.<host>@<domain> ,

where <user> is the name of a user known at the host <host> in the name domain <domain>. The point of this syntax is to suggest a three-level hierarchically structured name (read from the right) that's unique across the whole internet system 🧚 That said, hosts inside a single domain can agree to use a different structure, as long as it doesn't conflict with the syntax above and the forwarders for that domain are ready to do the required transformations 😭

Here's an example. Say the name of a domain including DCNET is COMSAT, and one of its hosts is COMSAT-DLM with Mills as a user known to that host. From inside the COMSAT domain, the name Mills@COMSAT-DLM uniquely identifies that mailbox, and so could Mills.COMSAT-DLM@COMSAT from anywhere in the internet system ✨ But Mills@COMSAT-DLM isn't necessarily meaningful anywhere outside the COMSAT domain (though it could be) 🌈

A typical set of name domains covering the current internet system might include ARPA (ARPANET), COMSAT (DCNET), DCA (EDNET, WBNET), UCL (UCLNET, RSRENET, SRCNET), MIT (CHAOSNET), INTELPOST (INTELPOSTNET) and the various public data networks πŸŽ€ The ARPA forwarder would use a name-address table built from the latest version of the HOSTS.TXT table in the NIC data base. The other forwarders would build their own, and they're expected to drop a copy into the NIC data base too πŸ‘‘

4. Mail Transport Principles πŸ¦‹

For economy and simplicity, the bulk of all mail transport in the internet system is expected to go directly from originator host to recipient host, with no intermediate relay πŸ’… Caching will probably be necessary for many hosts, so they don't have to keep going to forwarders just to learn the internet address of a correspondent host. This naturally pushes people toward naming strategies that minimize duplicate names across the various domains, but duplicates aren't forbidden 🫢

Some messages will still have to be staged at an intermediate relay, and there are several reasons for that, including the following:

  1. It may not be possible or convenient for the originator and recipient hosts to be up on the internet system at the same time for the duration of the transfer.
  2. The originator host may not have the resources to perform all the name-address translations required.
  3. A direct-connection path may not be feasible due to regulatory, economic or security constraints.
  4. The originator and recipient hosts may not recognize the same lower-level transport protocol (e.g. TCP and NCP).

A mail relay is an internet process equipped to store an MTP message for later transmission. A mail forwarder is a mail relay, but not every relay is a forwarder, since relays might not include the full name-address capability forwarders need 🌸 Relays may also not be competent in every domain. For instance, an MTP/TCP relay may not understand NCP. In other words, the forwarders must be fully connected, but the relays don't have to be πŸ”₯

The particular sequence of relays a message goes through is decided by the sender, using the source route specification in the MRCP command. This has a few implications:

  1. Advisory messages sent back to the originator by a relay or recipient host are expected to traverse the route in reverse order.
  2. Relay host names follow the same naming convention as all host names relative to their domain. Since it may not be possible (see below) to use internet addresses to dis-ambiguate the domain, the complete standard internet name .<host>@<domain> is required everywhere 😭
  3. There's no current provision for strict/loose route specifications. If the "ordinary" host specification @<host> were used instead, each relay or forwarder would apply the rules outlined in the next section for routing. That could result in additional relay hops πŸ™ˆ

5. Forwarder Operations πŸ‘‘

This section walks through a likely scenario with hosts, relays, forwarders and typical internet routes ✨ When a forwarder receives a message for <user>.<host>@<domain>, it transforms <host> if necessary and forwards the message to the address it finds in the name-address table for <domain> πŸ’– A single host can be a forwarder for several independent domains in this model, and those domains can overlap. So the names Mills@USC-ISIE, Mills.USC-ISIE@ARPA and Mills.USC-ISIE@COMSAT can all point to the same mailbox, and the names USC-ISIE, ARPA and COMSAT could, in theory, all be known in the same domain. That only works if the name USC-ISIE doesn't conflict with other names in this domain 🧚

For this scheme to work efficiently, it's desirable that messages going through forwarders always contain standard internet mailbox names. When that isn't feasible, like in the current ARPANET mail system, the forwarder has to work out which domain the message came from and edit the names to match. That's needed anyway in order to compose a reply to the message πŸŽ€

In the RFC-780 model, a message arriving at a forwarder is processed by the MTP server there. The server pulls out the first entry in the recipient-route field of an MRCP command. There are two cases, depending on whether that entry names a domain or a host. If it's a domain name, as determined by searching a universal table, it refers to one of the domains the server represents. If not, it must be a name or nickname of the server's host, relative to one of the domains the sender belongs to 🌈 This lets us tell apart the domains COMSAT and INTELPOST on one hand and the COMSAT host COMSAT-PLA on the other. All of them might be represented by the same internet address, and it implies that domain names must be unique in all domains πŸ”₯

The server then pulls out the second entry in the recipient-route field of the MRCP command and resolves its address relative to the domain set by the first entry. If the second entry names an explicit domain, that overrides the first entry. If it doesn't, and the first entry names a domain, then that domain is effective. But if the first entry names the server's host, it might not be obvious which domain is meant. For instance, consider these two MRCP commands:

MRCP to:<@COMSAT,Mills@HOST>
MRCP to:<@INTELPOST,Mills@HOST>

Here, Mills.HOST@COMSAT and Mills.HOST@INTELPOST are distinct mailboxes on different hosts. A receiving host that supports forwarders for both COMSAT and INTELPOST can keep that distinction and forward correctly using the rules above πŸ’…

Now let the forwarder host be named FORWARDER in both the COMSAT and INTELPOST domains, and think about its options when it receives this command:

MRCP to:<@FORWARDER,Mills@HOST>

The forwarder is simply being asked to relay within the sender's domain, but it belongs to more than one domain! πŸ’€ The obvious way to sort this out would be to forbid implicit domains, like the one in Mills@HOST, and require the full internet mailbox names Mills.HOST@COMSAT or Mills.HOST@INTELPOST instead. It's also possible to dis-ambiguate the domain by inspecting the first entry of the sender-route field of the MAIL command (see below) πŸ™ˆ

6. Source and Return Routing 🫢

In the RFC-780 model, routes can be specified in the recipient-route field of the MRCP command and in the sender-route field of the MAIL command. Honestly, neither the recipient-route nor the sender-route is needed if the originator uses standard internet mailbox names 🌸 As long as the routes, when used, only consist of domain names, there's no conflict with the current RFC-780 specification. If forwarding has to go through other hosts for some reason, then a complete and unambiguous syntax like .<host>@<domain> is required to avoid problems like the ones described above πŸ”₯

The current RFC-780 specification requires the receiver to construct a name for the sender and insert it at the beginning of the sender-route. The only info it presumably has to build that name is the internet address of the sender 😭 Now consider the case from the example above, where a single server on a particular host supports multiple domains. If hosts receiving a message relayed through that server were to map its address into a name, RFC πŸ‘€

okay so there would be no way to figure out which domain was intended πŸ™ˆ and that is just not it. So we conclude that the sending host must update the sender-route as well as the recipient-route ✨. It does this simply by copying the first entry in the recipient-route as received as the new first entry in the sender-route πŸ’–.

7. Editing the RFC-733 Header πŸŽ€

Every effort should be made to avoid editing the RFC-733 header, bestie, because it's an invasive procedure that needs extensive analysis 😭. It is expected that newly developed mail systems will be aware of the standard internet mailbox syntax and ensure its use everywhere in the RFC-733 and RFC-780 fields 🫢. On the occasions where this is not possible, such as in many current ARPANET hosts, the necessary editing should be performed upon first entry to the internet mail system from the local mail system. This avoids the problems mentioned above and simplifies reply functions πŸ¦‹.

In the case of ARPANET hosts, the editing operations assume that all names in the form <anything>@<domain>, where <domain> is the name of a domain, are unchanged πŸ’…. Names in the form <anything>@<host>, where <host> is the name of a host in the ARPA domain, are transformed to the form <anything>.<host>@ARPA ✨. Anything else is an error πŸ’€. Before handing off to an ARPANET NCP mailer, an ARPA MTP forwarder might optionally transform <anything>.<host>@ARPA to <anything>@<host> in order to reduce the forwarder traffic when local mail systems are available 🧚. Similar situations might exist elsewhere 🌈.

Editing is a last resort, so keep the header alone whenever you possibly can, no cap πŸ™…β€β™€οΈ

8. Concluding Remarks πŸ‘‘

This memorandum is intended to stimulate discussion, not simulate it πŸ’œ iykyk.

πŸ“¦ where this page comes from