Date: May 4, 1979 IEN 103 An Experimental Network Information Center Name Server (NICNAME) J. R. Pickens, E. J. Feinler, and J. E. Mathis - SRI Introduction This IEN reports a preliminary design and implementation of an experimental NIC-based name server. A name server is essentially a transaction based inquiry-response process which returns information on entities which can be named or addressed--hosts in this particular case. The Arpanet Network Information Center (NIC) maintains and distributes the Official Host Table [1] for the Arpanet, as well as a variety of other related information. The motivation for this development comes both from current needs in the Arpanet community for such a service, and from the similar but wider needs of the burgeoning Internet community. Existing Arpanet needs are exemplified by the NIC charter to provide formatted Host Table information [1]. Existing Internet needs are exemplified by the need for terminal interface units (TIUs) on ANY network to have dynamic access to addresses of internet service hosts. A name server service, as described herein, will permit more efficient access to, and distribution of, host information within the Arpanet. It can also support a need for host information, especially pertaining to the Arpanet, from the Internet environment. The name server function is evolving. Before much of what is proposed can be provided, or even agreed upon, additional administrative and technical design decisions are required. The purpose of this note, therefore, is to catalyze an expanded discussion of the functions and facilities for the name server service. The discussion is structured as follows: Section 1 contains a description of the current service and how it is derived from the NIC database service. Section 2 describes possible extensions of the name server concept by allowing a richer syntax, and by allowing queries for services to be built on top of the queries for host addresses. Section 3 discusses architectural issues, and presents some preliminary thinking on how we can get from the current centralized, hierarchic name server service to a distributed service with one (or more) name servers per network. 1. The SRI Name Server Experiment An experimental name server has been installed on SRI-KA. It is accessed via a variant of the Internet Name Server protocol [2]. The 1 initial implementation uses the internet header of TCP 2.5 [3] and will be converted to Internet Version 4 [4] once it becomes available. The information which drives the name server service originates from the Arpanet Official Host Table. (A new host table format suitable for representing host information for multiple networks has been designed and will be described in a forthcoming RFC [5]) A massaged version of this database is presented to the name server, upon program initiation, as an input file. Work is in progress to investigate the feasibility of abstracting host related information from the NIC database management system via direct system calls. User access to the service takes two forms. In the first form, a simple user process is provided to format user input into name server requests. In response to a query of the form "HOST !ARPA!FOO-TENEX" is returned an address such as "10 2 0 9" (NET=10, HOST=2, LHOST=0, IMP=9); the details of the user interface will, of course, vary from system to system. This first primitive form of name server access has been implemented on several Arpanet and PRNET sites as PDP-10 TENEX and LSI-11 TIU programs. While initially the TENEX program is of little practical value since all sites have a complete name table, the LSI-11 program is intended to augment the TIU's host table. The scenario here is that when the packet radio TIU comes alive, it contains only a minimal host table, including the addresses of perhaps a few candidate name servers. The user can query the name server with a simple manual query process and then use the address obtained to open a TELNET connection to the desired host. In the second form of access, soon to be operational on packet radio TIUs, a process-level interface is provided that mediates between internal processes and the name server. The design issues for something other than a demonstration system are complex and involve tradeoffs. The most obvious tradeoff is in the area of network traffic versus "freshness" of information. The local host table handler can either send a message to the name server for every address request or it can perform some type of local caching to remember frequently requested names. SRI is currently implementing a process-level interface for the LSI-11 TIU's TELNET program in order to explore the problems of local host table management in small machines in a dynamic environment. 2. Name Server Issues The name server, as currently specified, provides a simple address binding service [2]. In response to a datagram query [4, 6], the name server returns either an address, a list of similar names, or an error. Several useful additional functions can be envisioned for the name server such as service queries and broader access to host related information. First, however, a few refinements to the current name 2 server specification are proposed. 2.1. Refinements The current specification needs clarification as to how to interpret the "similar names" error response. Should there be a fixed definition of what "similar names" means, or should it be left open to the whims of the implementor? This function seems to be most useful in providing helpful information to a human interfacing process. It may be useful to model the behavior of the name server on the behavior of other known processes which present host-name information on demand. An example of this is a common implementation of User Telnet [7], in which three kinds of functions occur: 1. On termination of name input (e.g. ), the user is only "beeped" if the name is not unique. If the name is unique, the name is filled out, and the requested operation is initiated. 2. In response to , the name will be filled out if unique, or the user will get "beeped" if the name is not unique. 3. Only in response to "?" will a list of similar names be printed. "Similar names", in this case, means all names which begin with the same character string. The list is alphabetized. In support of this style of user interface, it may be more appropriate to return the "similar names" response only when requested. Two ways to achieve this are 1) to set an option bit and 2) to use "?" to force the similar names response. A second point upon which the specification may be enhanced is in the interpretation given to null network and host fields in the query string. Currently, if the network field is left out, as in "!REST" (normal query is "!NET!REST"), a local network query is assumed. "!!REST" and "!NET!" are not discussed in the current specification, and are presumably syntax errors. Since host names tend to be unique anyway (at least at the present time) and since there is no way to make a network independent query under the current design, it may be useful to add to the notion of "null field", meaning "local", the notion of a special character like "*" which means "all". The semantic range of queries afforded by adopting this convention is enumerated below (note: ~ is used to mean "null". Both network and host fields null ("!!") is, therefore, represented as "~ ~". N means "network" and R means "rest"): 3 ~ ~ local net, local host (validity check?) ~ * local net, all hosts ~ R local net, named host * ~ all nets, local host (inverse search) * * all nets, all hosts (probably prohibited) * R all nets, named host (today's situation) N ~ named net, local host (inverse search) N * named net, all hosts N R named net, named host By combining the on-demand-similar-names function, "all" and "local", and by allowing "*" to be prepended or postpended to the query string, one can have queries such as the following: !!BBN*? All hosts named BBN* on local net !*!BBN*? All hosts named BBN* on all nets !*!*UNIX*? All hosts named *UNIX* on all nets 2.2. Service Queries It has been suggested that the name server can be generalized into that of a binding function [8]. In this context, a very useful extension is to allow service queries. One very real application of this service, which exists within the Packet Radio Project at SRI, is the need to find the addresses of Hosts which support the LoaderServer Service (the LoaderServer service allows packet radio TIUs to receive executable programs via down-line loading). A characteristic of service querying, contrasted to host names querying, is the need for multiple responses. The requester would, upon receiving multiple service descriptors, attempt to establish access to each service, one-at-a-time, until successful. Service descriptors are composed of at least the following (with more items probably required): 4 ITEM TYPE +------------------+----------------+ | Official Name | Text | | Alias Names | Text | +------------------+----------------+ | Host Address | Integer(32) | | Port | Integer(32) | InterNet Services | Protocol | Integer(8) | +------------------+----------------+ | Host Address | Integer(24) | Arpanet NCP Services | Socket | Integer(32) | +------------------+----------------+ Syntactically, service queries can be derived from host queries by the addition of a service name field, as below: "!NET!REST!SERVICE" A network independent service query, for example, can be represented as: "!*!*!SERVICE" 2.3. Name Server Options The need for options has already been suggested in the discussion of the "similar names" function. Another group of options may be used to specify the format of the reply. At one extreme is the compact, binary, style, such as is currently specified. At the other extreme is an expanded, textual, style, such as would be represented by a host table record, and with official/alias names included. Options can be envisaged which specify: - binary vs text format - inclusion of each field in the reply - inclusion of official name, per field, in the reply - inclusion of alias names, per field, in the reply - inclusion of other miscellaneous information, such as operating system, machine type, access restrictions, etc. Other options can be envisioned which specify the scope of the search, such as "ignore TIPS and USER hosts". Likewise, an alternate form for specifying formats may be to settle on several standard ones, and allow an option to select between them. Certainly, not all name servers will be able to support all such options, and not all options are equally useful. Thus, the proposed 5 list will be expanded or contracted to fit the actual needs of processes using the name server service. 2.4. "More" Data It is probably apparent to the discerning reader that several of the proposed name server extensions have the potential for generating more than a single datagram's worth of reply (576 octets max [9]). (Not of any consolation is the fact that the current practical PRNet Packet size is on the order of 256 octets.) Yet the size of such replies is not anticipated to require a full-blown streaming protocol. Several alternatives exist: 1. Disallow options which imply large replies, 2. Truncate the packet for large replies, 3. Ignore the recommended maximum datagram size, 4. Utilize an alternate base protocol for such requests, 5. Develop a "more data" pseudo-streaming protocol. Alternative 1 may be chosen, but even within the current specification the potential for overflow exists (however remote). Alternative 2 implies unpredictable behaviors to the user of the name server service. Alternative 3 reduces the availability of the service. Alternative 4 is certainly possible, but may be over-kill. Alternative 5 can be very simple. The concept is that the name server would return, as part of the reply, a code of the following form: +------+---------+ | MORE | ID_NEXT | +------+---------+ ID_NEXT is a name-server-chosen-quantity (1,2,4 octets?), syntax/semantics unspecified, which allows the name server to find the next block of reply, the next time it is queried. This quantity may be an internal pointer, a block number, or whatever the name server chooses. Follow-on queries may be implemented by recomputing the entire original query, discarding output until the ID_NEXT block is reached, or by efficiently storing the entire reply in a cache, fragmented into blocks (with appropriate decay algorithms). 2.5. Dynamic Updates In all of the previous discussions, the host name database was assumed to be a static (or slowly changing entity) with an administrative and manual update authority. This model was 6 implemented for expediency and will well serve most of the needs of the Arpanet and Internet communities. However, a need can be envisioned for dynamic automated updating of the host table; (imagine the impact on the current system of any host who changed its address more than once a week!) In a closed user group community (such as a local network of mutually trusting hosts), dynamic updating becomes simply a technical question concerning packet formats. In wider communities, a mechanism to authenticate the change request must be developed. Since the issues on authentication are outside the scope of this paper, we can only note that significant advances in practical deployment of dispersed processing and central services, such as automated host table management, can only be made when the problems of authentication become tractable. 3. Architecture The name server concept is invaluable in allowing hosts with incomplete knowledge of the network address space to obtain full access to network services. Whether for reasons of insufficient Kernel space or of a dynamically changing environment, the need for the service is little questioned. The more significant issues, however, revolve around the methods for providing the service and for administering and updating the database. In the current experiment, the service is centralized, and is supported by a database administered centrally by the NIC. In the long range, other architectures are possible which address ways to distribute host information within and between networks and administrative entities. These present opportunities for more dynamic, automated, approaches to the maintenance and sharing of data--particularly host name data. From an evolutionary point of view, the name server service will likely exist initially as a centralized service, possibly with one large name server that has multiple network knowledge. From this beginning, an expansion in two orthogonal directions is possible. - In the direction of internal distribution, the name server can be fragmented into multiple cooperating processes, on separate hosts. The data base can be replicated exactly or managed as a distributed database. - In the direction of administrative distribution, multiple autonomous name servers may exist which exchange data in an appropriately administered fashion, on a per network or other administrative basis. On the part of hosts with small host tables, a possibility for caching exists, where local, temporary copies are maintained of 7 subsets of the addressing database. Such copies may be obtained either by remembering previous queries made of name servers, or by receiving automatic distributions of data from name servers. For mobile hosts, in which even the home network is unknown, it is possible to maintain essentially an empty host table. The potential exists, with service queries, for every host to contain a very primitive name server function. In response to a query of the form "!*!*!RealNameServer" is returned the address of a real name server service. Finally, the possibility exists for multiple name servers to communicate dynamically, such as in attempting to resolve a query. If, for example, a name server on the Arpanet receives a query for a host on the Packet Radio Net, then the Arpanet name server can conceivably query the Packet radio net name server in order to resolve the reply. 4. Conclusion In this note, a collection of design ideas on the name server service has been presented. An experimental service, based on the NIC host table database has been reported. A continuing examination of the name server service is encouraged, scoping out the requirements and specifying its functional distribution. A level of service comparable to that outlined currently [2] will be provided initially, but a more expanded service merits consideration and discussion. Certainly many open questions have been raised in proposing an expansion of the service, but it is expected that such an expansion will result in more useful support of internet (and intranet) capability. 8 References 1. M. D. Kudlick and E. J. Feinler, Host Names On-line, RFC 608, SRI International, January 1974. 2. J. Postel, Internet Name Server, IEN 61, USC-Information Sciences Institute, October 1978. 3. V. Cerf, TCP Version 2 Specification, IEN 5, March 1977. 4. J. Postel, Internet Datagram Protocol, IEN 81, USC-Information Sciences Institute, February 1979. 5. E. J. Feinler, Proposed Official Host Table Format, SRI International (RFC in preparation). 6. D. Reed, J. Postel, User Datagram Protocol, IEN 71, USC-Information Sciences Institute, January 1979. 7. E. Leavitt et al, TENEX USER'S GUIDE, Bolt Beranek and Newman Inc. 8. Y. Dalal, Group discussion, January 24,25 1979 Internet Meeting. 9. J. Postel, Internet Meeting Notes - 25&26 January 1979, pp. 12, IEN 76, USC-Information Sciences Institute, February 1979.