What is a USENET domain?
------------------------
                            What is a Domain?

                              Mark R. Horton

                            Bell Laboratories
                           Columbus, Ohio 43213

                                 ABSTRACT



                 In the past, electronic mail has used
                 many different kinds of syntax, naming a
                 computer and a login name on that
                 computer.  A new system, called
                 ``domains'', is becoming widely used,
                 based on a heirarchical naming scheme.
                 This paper is intended as a quick
                 introduction to domains.  For more
                 details, you should read some of the
                 documents referenced at the end.

       1.  Introduction

       What exactly are domains?  Basically, they are a way of
       looking at the world as a heirarchy (tree structure).
       You're already used to using two tree world models that work
       pretty well: the telephone system and the post office.
       Domains form a similar heirarchy for the electronic mail
       community.

       The post office divides the world up geographically, first
       into countries, then each country divides itself up, those
       units subdivide, and so on.  One such country, the USA,
       divides into states, which divide into counties (except for
       certain states, like Louisiana, which divide into things
       like parishes), the counties subdivide into cities, towns,
       and townships, which typically divide into streets, the
       streets divide into lots with addresses, possibly containing
       room and apartment numbers, the then individual people at
       that address.  So you have an address like

               Mark Horton
               Room 2C-249
               6200 E. Broad St.
               Columbus, Ohio, USA

       (I'm ignoring the name ``AT&T Bell Laboratories'' and the
       zip code, which are redundant information.)  Other countries
       may subdivide differently, for example many small countries
       do not have states.

       The telephone system is similar.  Your full phone number
       might look like 1-614-860-1234 x234 This contains, from left
       to right, your country code (Surprise!  The USA has country











                                  - 2 -



       code ``1''!), area code 614 (Central Ohio), 860 (a prefix in
       the Reynoldsburg C.O.), 1234 (individual phone number), and
       extension 234.  Some phone numbers do not have extensions,
       but the phone system in the USA has standardized on a 3
       digit area code, 3 digit prefix, and 4 digit phone number.
       Other countries don't use this standard, for example, in the
       Netherlands a number might be +46 8 7821234 (country code
       46, city code 8, number 7821234), in Germany +49 231
       7551234, in Sweden +31 80 551234, in Britain +44 227 61234
       or +44 506 411234.  Note that the country and city codes and
       telephone numbers are not all the same length, and the
       punctuation is different from our North American notation.
       Within a country, the length of the telephone number might
       depend on the city code.  Even within the USA, the length of
       extensions is not standardized: some places use the last 4
       digits of the telephone number for the extension, some use 2
       or 3 or 4 digit extensions you must ask an operator for.
       Each country has established local conventions.  But the
       numbers are unambigous when dialed from left-to-right, so as
       long as there is a way to indicate when you are done
       dialing, there is no problem.

       A key difference in philosophy between the two systems is
       evident from the way addresses and telephone numbers are
       written.  With an address, the most specific information
       comes first, the least specific last.  (The ``root of the
       tree'' is at the right.)  With telephones, the least
       specific information (root) is at the left.  The telephone
       system was designed for machinery that looks at the first
       few digits, does something with it, and passes the remainder
       through to the next level.  Thus, in effect, you are routing
       your call through the telephone network.  Of course, the
       exact sequence you dial depends on where you are dialing
       from - sometimes you must dial 9 or 8 first, to get an
       international dialtone you must dial 011, if you are calling
       locally you can (and sometimes must) leave off the 1 and the
       area code.  (This makes life very interesting for people who
       must design a box to call their home office from any phone
       in the world.)  This type of address is called a ``relative
       address'', since the actual address used depends on the
       location of the sender.

       The postal system, on the other hand, allows you to write
       the same address no matter where the sender is.  The address
       above will get to me from anywhere in the world, even
       private company mail systems.  Yet, some optional
       abbreviations are possible - I can leave off the USA if I'm
       mailing within the USA; if I'm in the same city as the
       address, I can usually just say ``city'' in place of the
       last line.  This type of address is called an ``absolute
       address'', since the unabbreviated form does not depend on











                                  - 3 -



       the location of the sender.

       The ARPANET has evolved with a system of absolute addresses:
       ``user@host'' works from any machine.  The UUCP network has
       evolved with a system of relative addresses: ``host!user''
       works from any machine with a direct link to ``host'', and
       you have to route your mail through the network to find such
       a machine.  In fact, the ``user@host'' syntax has become so
       popular that many sites run mail software that accepts this
       syntax, looks up ``host'' in a table, and sends it to the
       appropriate network for ``host''.  This is a very nice user
       interface, but it only works well in a small network.  Once
       the set of allowed hosts grows past about 1000 hosts, you
       run into all sorts of administrative problems.

       One problem is that it becomes nearly impossible to keep a
       table of host names up to date.  New machines are being
       added somewhere in the world every day, and nobody tells you
       about them.  When you try to send mail to a host that isn't
       in your table (replying to mail you just got from a new
       host), your mailing software might try to route it to a
       smarter machine, but without knowing which network to send
       it to, it can't guess which smarter machine to forward to.
       Another problem is name space collision - there is nothing
       to prevent a host on one network from choosing the same name
       as a host on another network.  For example, DEC's ENET has a
       ``vortex'' machine, there is also one on UUCP.  Both had
       their names long before the two networks could talk to each
       other, and neither had to ask the other network for
       permission to use the name.  The problem is compounded when
       you consider how many computer centers name their machines
       ``A'', ``B'', ``C'', and so on.

       In recognition of this problem, ARPA has established a new
       way to name computers based on domains.  The ARPANET is
       pioneering the domain convention, and many other computer
       networks are falling in line, since it is the first naming
       convention that looks like it really stands a chance of
       working.  The MILNET portion of ARPANET has a domain, CSNET
       has one, and it appears that Digital, AT&T, and UUCP will be
       using domains as well.  Domains look a lot like postal
       addresses, with a simple syntax that fits on one line, is
       easy to type, and is easy for computers to handle.  To
       illustrate, an old routed UUCP address might read
       ``sdcsvax!ucbvax!allegra!cbosgd!mark''.  The domain version
       of this might read ``mark@d.osg.cb.att.uucp''.  The machine
       is named d.osg.cb.att.uucp (UUCP domain, AT&T company,
       Columbus site, Operating System Group project, fourth
       machine.)  Of course, this example is somewhat verbose and
       contrived; it illustrates the heirarchy well, but most
       people would rather type something like ``cbosgd.att.uucp''











                                  - 4 -



       or even ``cbosgd.uucp'', and actual domains are usually set
       up so that you don't have to type very much.

       You may wonder why the single @ sign is present, that is,
       why the above address does not read
       ``mark.d.osg.cb.att.uucp''.  In fact, it was originally
       proposed in this form, and some of the examples in RFC819 do
       not contain an @ sign.  The @ sign is present because some
       ARPANET sites felt the strong need for a divider between the
       domain, which names one or more computers, and the left hand
       side, which is subject to whatever interpretation the domain
       chooses.  For example, if the ATT domain chooses to address
       people by full name rather than by their login, an address
       like ``Mark.Horton@ATT.UUCP'' makes it clear that some
       machine in the ATT domain should interpret the string
       ``Mark.Horton'', but if the address were
       ``Mark.Horton.ATT.UUCP'', routing software might try to find
       a machine named ``Horton'' or ``Mark.Horton''.  (By the way,
       case is ignored in domains, so that ``ATT.UUCP'' is the same
       as ``att.uucp''.  To the left of the @ sign, however, a
       domain can interpret the text any way it wants; case can be
       ignored or it can be significant.)

       It is important to note that domains are not routes.  Some
       people look at the number of !'s in the first example and
       the number of .'s in the second, and assume the latter is
       being routed from a machine called ``uucp'' to another
       called ``att'' to another called ``cb'' and so on.  While it
       is possible to set up mail routing software to do this, and
       indeed in the worst case, even without a reasonable set of
       tables, this method will always work, the intent is that
       ``d.osg.cb.att.uucp'' is the name of a machine, not a path
       to get there.  In particular, domains are absolute
       addresses, while routes depend on the location of the
       sender.  Some subroutine is charged with figuring out, given
       a domain based machine name, what to do with it.  In a high
       quality environment like the ARPA Internet, it can query a
       table or a name server, come up with a 32 bit host number,
       and connect you directly to that machine.  In the UUCP
       environment, we don't have the concept of two processes on
       arbitrary machines talking directly, so we forward mail one
       hop at a time until it gets to the appropriate destination.
       In this case, the subroutine decides if the name represents
       the local machine, and if not, decides which of its
       neighbors to forward the message to.

















                                  - 5 -



       2.  What is a Domain?

       So, after all this background, we still haven't said what a
       domain is.  The answer (I hope it's been worth the wait) is
       that a domain is a subtree of the world tree.  For example,
       ``uucp'' is a top level domain (that is, a subtree of the
       ``root''.) and represents all names and machines beneath it
       in the tree.  ``att.uucp'' is a subdomain of ``uucp'',
       representing all names, machines, and subdomains beneath
       ``att'' in the tree.  Similarly for ``cb.att.uucp'',
       ``osg.cb.att.uucp'', and even ``d.osg.cb.att.uucp''
       (although ``d.osg.cb.att.uucp'' is a ``leaf'' domain,
       representing only the one machine).

       A domain has certain properties.  The key property is that
       it has a ``registry''.  That is, the domain has a list of
       the names of all immediate subdomains, plus information
       about how to get to each one.  There is also a contact
       person for the domain.  This person is responsible for the
       domain, keeping the registry up-to-date, serving as a point
       of contact for outside queries, and setting policy
       requirements for subdomains.  Each subdomain can decide who
       it will allow to have subdomains, and establish requirements
       that all subdomains must meet to be included in the
       registry.  For example, the ``cb'' domain might require all
       subdomains to be physically located in the AT&T building in
       Columbus.

       ARPA has established certain requirements for top level
       domains.  These requirements specify that there must be a
       list of all subdomains and contact persons for them, a
       responsible person who is an authority for the domain (so
       that if some site does something bad, it can be made to
       stop), a minimum size (to prevent small domains from being
       top level), and a pair of nameservers (for redundancy) to
       provide a directory-assistance facility.  Domains can be
       more lax about the requirements they place on their
       subdomains, making it harder to be a top level domain than
       somewhere lower in the tree.  Of course, if you are a
       subdomain, your parent is responsible for you.

       One requirement that is NOT present is for unique parents.
       That is, a machine (or an entire subdomain) need not appear
       in only one place in the tree.  Thus, ``cb'' might appear
       both in the ``att'' domain, and in the ``ohio'' domain.
       This allows domains to be structured more flexibly than just
       the simple geography used by the postal service and the
       telephone company; organizations or topography can be used
       in parallel.  (Actually, there are a few instances where
       this is done in the postal service [overseas military mail]
       and the telephone system [prefixes can appear in more than











                                  - 6 -



       one area code, e.g. near Washington D.C., and Silicon
       Valley].)  It also allows domains to split or join up, while
       remaining upward compatible with their old addresses.

       Do all domains represent specific machines?  Not
       necessarily.  It's pretty obvious that a full path like
       ``d.cbosg.att.uucp'' refers to exactly one machine.  The OSG
       domain might decide that ``cbosg.att.uucp'' represents a
       particular gateway machine.  Or it might decide that it
       represents a set of machines, several of which might be
       gateways.  The ``att.uucp'' domain might decide that several
       machines, ``ihnp4.uucp'', ``whgwj.uucp'', and ``hogtw.uucp''
       are all entry points into ``att.uucp''.  Or it might decide
       that it just represents a spot in the name space, not a
       machine.  For example, there is no machine corresponding to
       ``arpa'' or ``uucp'', or to the root.  Each domain decides
       for itself.  The naming space and the algorithm for getting
       mail from one machine to another are not closely linked -
       routing is up to the mail system to figure out, with or
       without help from the structure of the names.

       The domain syntax does allow explicit routes, in case you
       want to exercise a particular route or some gateway is
       balking.  The syntax is
       ``@dom1,@dom2,...,@domn:user@domain'', for example,
       @ihnp4.UUCP,@ucbvax.UUCP,:joe@NIC.ARPA, forcing it to be
       routed through dom1, dom2, ..., domn, and from domn sent to
       the final address.  This behaves exactly like the UUCP !
       routing syntax, although it is somewhat more verbose.

       By the way, you've no doubt noticed that some forms of
       electronic addresses read from left-to-right (cbosgd!mark),
       others read from right-to-left (mark@Berkeley).  Which is
       better?  The real answer here is that it's a religious
       issue, and it doesn't make much difference.  left-to-right
       is probably a bit easier for a computer to deal with because
       it can understand something on the left and ignore the
       remainder of the address.  (While it's almost as easy for
       the program to read from right-to-left, the ease of going
       from left-to-right was probably in the backs of the minds of
       the designers who invented host:user and host!user.)

       On the other hand, I claim that user@host is easier for
       humans to read, since people tend to start reading from the
       left and quit as soon as they recognize the login name of
       the person.  Also, a mail program that prints a table of
       headers may have to truncate the sender's address to make it
       fit in a fixed number of columns, and it's probably more
       useful to read ``mark@d.osg.a'' than ``ucbvax!sdcsv''.













                                  - 7 -



       These are pretty minor issues, after all, humans can adapt
       to skip to the end of an address, and programs can truncate
       on the left.  But the real problem is that if the world
       contains BOTH left-to-right and right-to-left syntax, you
       have ambiguous addresses like x!y@z to consider.  This
       single problem turns out to be a killer, and is the best
       single reason to try to stamp out one in favor of the other.


       3.  So why are we doing this, anyway?

       The current world is full of lots of interesting kinds of
       mail syntax.  The old ARPA ``user@host'' is still used on
       the ARPANET by many systems.  Explicit routing can sometimes
       by done with an address like ``user@host2@host1'' which
       sends the mail to host1 and lets host1 interpret
       ``user@host2''.  Addresses with more than one @ were made
       illegal a few years ago, but many ARPANET hosts depended on
       them, and the syntax is still being used.  UUCP uses
       ``h1!h2!h3!user'', requiring the user to route the mail.
       Berknets use ``host:user'' and do not allow explicit
       routing.

       To get mail from one host to another, it had to be routed
       through gateways.  Thus, the address ``csvax:mark@Berkeley''
       from the ARPANET would send the mail to Berkeley, which
       would forward it to the Berknet address csvax:mark.  To send
       mail to the ARPANET from UUCP, an address such as
       ``ihnp4!ucbvax!sam@foo-unix'' would route it through ihnp4
       to ucbvax, which would interpret ``sam@foo-unix'' as an
       ARPANET address and pass it along.  When the Berknet-UUCP
       gateway and Berknet-ARPANET gateway were on different
       machines, addresses such as
       ``csvax:ihnp4!ihnss!warren@Berkeley'' were common.

       As you can see, the combination of left-to-right UUCP syntax
       and right-to-left ARPANET syntax makes things pretty
       complex.  Berknets are gone now, but there are lots of
       gateways between UUCP and the ARPANET and ARPANET-like mail
       networks.  Sending mail to an address for which you only
       know a path from the ARPANET onto UUCP is even harder -
       suppose the address you have is ihnp4!ihnss!warren@Berkeley,
       and you are on host rlgvax which uses seismo as an ARPANET
       gateway.  You must send to
       seismo!ihnp4!ihnss!warren@Berkeley, which is not only pretty
       hard to read, but when the recipient tries to reply, it will
       have no idea where the break in the address between the two
       UUCP pieces occurs.  An ARPANET site routing across the UUCP
       world to somebody's Ethernet using domains locally will have
       to send an address something like ``xxx@Berkeley.ARPA'' to
       get it to UUCP, then ``ihnp4!decvax!island!yyy'' to get it











                                  - 8 -



       to the other ethernet, then ``sam@csvax.ISLAND'' to get it
       across their ethernet.  The single address would therefore
       be ihnp4!decvax!island!sam@csvax.ISLAND@Berkeley.ARPA, which
       is too much to ask any person or mailer to understand.  It's
       even worse: gateways have to deal with ambiguous names like
       ihnp4!mark@Berkeley, which can be parsed either
       ``(ihnp4!mark)@Berkeley'' in accordance with the ARPANET
       conventions, or ``ihnp4!(mark@Berkeley)'' as the old UUCP
       would.

       Another very important reason for using domains is that your
       mailing address becomes absolute instead of relative.  It
       becomes possible to put your electronic address on your
       business card or in your signature file without worrying
       about writing six different forms and fifteen hosts that
       know how to get to yours.  It drastically simplifies the job
       of the reply command in your mail program, and automatic
       reply code in the netnews software.


       4.  Further Information

       For further information, some of the basic ARPANET reference
       documents are in order.  These can often be found posted to
       Usenet, or available nearby.  They are all available on the
       ARPANET on host NIC via FTP with login ANONYMOUS, if you
       have an ARPANET login.  They can also be ordered from the
       Network Information Center, SRI International, Menlo Park,
       California, 94025.

       RFC819  The Domain Naming Convention for Internet User Applications
       RFC821  Simple Mail Transfer Protocol
       RFC822  Standard for the Format of ARPANET Text Messages
       RFC881  The Domain Names Plan and Schedule

       #
       # @(#)domain.mm 2.1 smail 12/14/86
       #






















