RFC 2258

Internet Nomenclator Project

๐Ÿ“… published January 1998, from ietf

Internet Nomenclator Project ๐ŸŽ€

RFC 2258 โœจ is an Informational doc (so it's giving "here's some info," not "you must do this") from J. Ordille at Bell Labs, Lucent Technologies, dated January 1998 ๐Ÿ“…. The original title block doesn't list anything it obsoletes or updates, so there's nothing to report there ๐Ÿ’….

Status of This Memo ๐Ÿ“

bestie, this memo is just giving info for the Internet community ๐Ÿซถ It does not specify an Internet standard of any kind, so nobody's on the hook for implementing it. Distribution is totally unlimited too, so share away ๐Ÿฆ‹

Copyright (C) The Internet Society (1998). All Rights Reserved. ๐Ÿ’œ

Abstract ๐ŸŒธ

okay so the whole goal of the Internet Nomenclator Project is to bring together the hundreds of publicly available CCSO servers from all over the world ๐ŸŒ Each CCSO server has its own database schema, which is basically its own custom setup for whatever organization runs it ๐Ÿ› ๏ธ The project is blending all those different schemas into one query service, so you can search everything at once ๐Ÿ”ฅ

Nomenclator is going to give you fast cross-server searches for finding people on the Internet ๐Ÿ•ต๏ธโ€โ™€๏ธ It's an add-on to the existing CCSO services, bringing schema integration, better indexing, and two kinds of caching ๐Ÿ’– And the best part? It scales as the number of CCSO servers grows, so it doesn't get messy as more servers join the party ๐Ÿ‘‘

One of the best things is that administrators can plug their CCSO servers into Nomenclator without changing the servers at all ๐Ÿ™ˆ Nomenclator only needs basic info about each server. Iconic, honestly ๐Ÿ’…

This document gives you an overview of the Nomenclator system, explains how to register a CCSO server in the Internet Nomenclator Project, and shows how to use the Nomenclator search engine to find people on the Internet ๐Ÿงš


1. Introduction ๐ŸŒˆ

Hundreds of organizations share directory info through the CCSO name service protocol [3] ๐Ÿ“‡ The info about people is amazing, but finding one specific person can be a whole ordeal ๐Ÿ˜ญ Why? Because every organization's server is its own independent little kingdom ๐Ÿ‘‘ The servers each have their own database schemas, meaning different attribute names and data formats, so nothing lines up neatly ๐Ÿ™ƒ

Here's the wild part: the 300+ CCSO servers have more than 900 different attributes to describe people ๐Ÿ’€ Very few attributes are shared across them. Only name and email show up in more than 90% of the servers [4] ๐Ÿ“ And since there's no special support for cross-server searches, searching can be slow and expensive ๐ŸŒ Not it.

So the goal of the Internet Nomenclator Project is to give you fast, integrated access to the info in the CCSO servers โšก This is the first large-scale use of the Nomenclator system, which is honestly a bigger deal than just a white pages directory ๐Ÿฆ‹ Nomenclator is a scalable, extensible information system for the whole Internet, periodt โœจ

Nomenclator answers descriptive (aka relational) queries ๐Ÿง  You can look up info about people, organizations, hosts, services, publications, and other objects just by describing their attributes ๐ŸŽฏ It gets this speed from two things: an active catalog and extensive meta-data and data caching ๐Ÿ’œ

The active catalog is the main character here ๐Ÿ‘‘ It narrows your search by handing back a list of the data repositories where your answer is most likely hiding ๐Ÿ” Meanwhile, meta-data and data caching keep the frequently used stuff close to you, which cuts down on communication and processing costs ๐Ÿซถ

With the Internet Nomenclator Project, you can query any CCSO server no matter what its attribute names or data formats look like ๐ŸŽ€ You just send your query to Nomenclator, which gives you a world view of the data across all the servers ๐ŸŒˆ You write your queries in that world view, and Nomenclator handles the rest ๐Ÿ’…

Here's how the flow goes ๐Ÿ‘‡ If a previous query already cached the answer, Nomenclator hands it back immediately โšก If not, it uses the active catalog to limit the query to just the relevant CCSO servers ๐ŸŽฏ Since only those servers get contacted, things speed up big time ๐Ÿš€ Nomenclator also translates the global query into local queries for each relevant server, then translates the responses back into the world view format ๐Ÿฆ‹

                     +-------------+             +-------------+
                     |             |             |             |
         World View  |             | Local View  |             |
         Query       |             | Query       |  Relevant   |
         ----------->|             |------------>|             |
                     | Nomenclator |             |  CCSO       |
                     |             |             |             |
         <-----------|             |<------------|  Server     |
          World View |             |  Local View |             |
          Response   |             |  Response   |             |
                     +-------------+             +-------------+



                      Figure 1:  A Nomenclator Query

                  Nomenclator translates queries to and from
                  the language of the relevant CCSO servers.

The Internet Nomenclator Project makes it way easier to find a particular CCSO server, but it doesn't send every query to that server ๐Ÿ™Œ When Nomenclator narrows down the search, it screens out the irrelevant queries before they ever reach the server ๐Ÿ›ก๏ธ When Nomenclator finds an answer in its cache, it screens out the redundant queries too ๐Ÿ’– So the server is easier to find and use, without getting slammed by the exhaustive and repeated searches that would otherwise spike its load ๐Ÿ˜Œ

This project also lays the foundation for a much broader heterogeneous directory service for the Internet ๐ŸŒ Right now, Nomenclator gives you integrated access to CCSO and relational database services ๐Ÿ—„๏ธ The Nomenclator System Architecture can handle fast, integrated searches across any collection of heterogeneous directories ๐Ÿงš The project can be extended to support additional name services or to provide integrated query services for other application domains ๐Ÿ”ฎ It's starting with CCSO services because they're widely available and successful, which makes them the obvious place to begin ๐Ÿซถ

Here's the roadmap ๐Ÿ—บ๏ธ Section 2 goes deeper into the Nomenclator system. Section 3 explains how to register a CCSO server as part of the project. Section 4 gives a quick rundown of how to use Nomenclator. Section 5 wraps everything up with a summary ๐Ÿ’œ


2. Nomenclator System ๐Ÿ’Ž

Nomenclator is a scalable, extensible information system for the Internet ๐ŸŒ It supports descriptive (aka relational) queries, so you find info about people, organizations, hosts, services, publications, and other objects by describing their attributes ๐ŸŽฏ Its speed comes from an active catalog plus extensive meta-data and data caching โšก

The active catalog limits the search space for a query by returning a list of data repositories where the answer is likely to be found ๐Ÿ” Its components are distributed indices that isolate queries to parts of the network, along with smart algorithms that shrink the search space using semantic, syntactic, or structural constraints ๐Ÿง  Meta-data caching boosts performance by keeping frequently used characterizations of the search space close to the user, which reduces active catalog communication and processing costs ๐Ÿ’… When Nomenclator looks for query responses, these techniques make things faster by contacting only the data repositories that are likely to actually have responses, so search times stay acceptable โฑ๏ธ

Administrators make their data available in Nomenclator by supplying info about the location, format, contents, and protocols of their data repositories ๐Ÿ“ฆ Experience with Nomenclator shows that gathering a small amount of information from data owners can have a huge positive impact on how well users can retrieve info ๐Ÿ“ˆ For example, each CCSO administrator provides a mapping from the local view of data (aka the local schema) at the CCSO server to Nomenclator's world view ๐Ÿ—บ๏ธ Administrators also supply possible values for any attributes with small domains at the data repository, like the "city" or "state_or_province" attributes ๐Ÿ™๏ธ With that info, Nomenclator can isolate queries to a small percentage of the CCSO data repositories and still give you an integrated view of their data ๐Ÿซถ

Nomenclator also provides tools that minimize the effort admins spend characterizing their data repositories, so it's not a chore ๐Ÿ› ๏ธ And here's the big win: Nomenclator does not require administrators to change the format of their data or the access protocol for their database ๐Ÿ™Œ Your servers stay exactly as they are, and the whole system just works around them, slay ๐Ÿ‘‘โœจ

2.1. Components of a Nomenclator System โœจ

okay so a Nomenclator system is basically two things working together ๐Ÿ’…: a distributed catalog service and a query resolver. The catalog is the one that gathers all the meta-data about data repositories and then makes it available to the resolver. And the meta-data is juicy ๐Ÿ“: constraints on attribute values at a data repository, known patterns of how data is spread across several repositories, search and navigation techniques, schema and protocol translation techniques, and the different schemas used at each repository. It's giving organized chaos, but make it make sense ๐Ÿงš


                 +-------------+             +-------------+
                 |             |             |             |
     World View  |             |  Meta Data  |             |
     Query       |             |  Request    | Distributed |
     ----------->|   Query     | ----------->|             |
                 |   Resolver  |             |  Catalog    |
                 |             |             |             |
     <-----------|   (caches)  | <-----------|  Service    |
      World View |             |  Meta Data  |             |
      Response   |             |  Response   |             |
                 +-------------+             +-------------+



               Figure 2: Components of a Nomenclator System

Query resolvers at the user sites are the ones who retrieve, use, cache, and reuse this meta-data while they answer user queries ๐Ÿฆ‹. The catalog is "active" in two ways, and I'm obsessed with this part ๐Ÿ˜ญ. First, some meta-data gets moved from the distributed catalog service over to each query resolver during query processing. Second, the resolver takes the initial meta-data (especially the search and navigation techniques) and uses it to generate more meta-data that guides the rest of the query processing. Typically, one resolver process serves a few hundred users in an organization, so those users can benefit from bigger resolver caches ๐ŸŒธ

Resolvers cache a few different things to speed up future queries ๐Ÿš€: techniques for constraining the search space, the results of searches that were already constrained (that's meta-data), and past query answers (that's data). Meta-data and data caching is how the resolver gets tailored to the specific needs of the users at its query site ๐Ÿ’œ. It also helps the whole system scale up, because it cuts down on the load from repeated searches or queries hitting the distributed catalog service, the data repositories, and the communications network. Not me being impressed by the efficiency ๐Ÿ™ˆ

The distributed catalog service is logically one network service, even though it can be split into pieces that are distributed and/or replicated ๐ŸŽ€. Query resolvers access this distributed, replicated service using the same techniques that work for multiple data repositories, which is so clean โœจ

A Nomenclator system naturally includes many query resolvers. Resolvers are independent (go them!) but also renewable query agents, and they can be as powerful as the resources available at the user site ๐Ÿ‘‘. Caching makes the resolver less dependent on the distributed catalog service for frequently used meta-data, and less dependent on data repositories for frequently used data. So caching improves how many users can be supported and how locally available the query service is. Main character energy, honestly ๐ŸŒˆ

2.2 Meta-Data Techniques โœจ

okay so the active catalog organizes the whole info space into a bunch of relations about people, hosts, orgs, services, and other objects ๐Ÿ—‚๏ธ ๐Ÿ’– For each relation it collects meta-data and sorts it into "access functions," which are basically the things that help you find and grab the data ๐Ÿ” Every access function is answering one question: "Where is the data that answers this query?" ๐Ÿค”

There are two kinds of answers, and I'm obsessed with how clean this is ๐Ÿ˜ญ The first is "Look over there." ๐Ÿ‘‰ That's what catalog functions say. They narrow the search by only pointing you at the data repositories that actually have relevant stuff. What they hand back is a referral to either data access functions that can answer the query, or more catalog functions to check for extra details. The second answer is "Here it is!" ๐ŸŽ‰ That's data access functions. They know how to get answers out of specific repositories, and they return the tuples that answer the query. Nomenclator comes with access functions for common name services like the CCSO service, and organizations can write and supply their own for the data in their repositories ๐Ÿซถ

Access functions can be remote or local services ๐Ÿฆ‹ Remote access functions are available through a standard remote procedure call interface. Local access functions are supplied with the query resolver itself. Local ones can be used for all sorts of indexing and retrieval jobs, as long as they get loaded with meta-data from the distributed catalog service ๐Ÿ’… Remote ones are preferred when the query resolver doesn't have enough resources to run the access function. Data owners might also pick remote access functions for privacy reasons, if their functions use proprietary information or algorithms ๐Ÿ”’ Local functions are preferred whenever possible, because they're highly replicated in resolver caches. That cuts down on system and network load by bringing the active catalog's resources right to the users ๐ŸŒธ

Adding remote access functions to Nomenclator is easy, and so is applying local ones to new data repositories, because the active catalog gives you "referrals" that spell out the conditions for using each access function โœจ This document keeps it simple and only describes referral techniques for exact matching of query strings. Nomenclator extends these techniques to handle query strings with wildcards, or word-based matching in the style of the CCSO services ๐ŸŽ€

Each referral has a template and a list of references to access functions ๐Ÿ“‹ The template is a conjunctive selection predicate that describes the scope of those access functions. Any conjunctive query that's within the template's scope can be answered with that referral. When a template has a wildcard value ("*") for an attribute, that attribute has to show up in any query processed by the referral ๐Ÿ™ˆ The system follows this rule:

Query Coverage Rule:

If the set of tuples satisfying the selection predicate in a query
is covered by (is a subset of) the set of tuples satisfying the
template, then the query can be answered by the access functions in
the reference list of the referral.

Let's look at an example, because this is where it clicks ๐Ÿงš The query below:

select * from People where country = "US" and surname = "Ordille";

is covered by templates (1) through (3) below, but NOT by templates (4) and (5):

(1) country = "US" and surname = "*"

(2) country = "US" and surname = "Ordille"

(3) country = "US"

(4) organization = "*"

(5) country = "US" and surname = "Elliott"

Referrals form a generalization/specialization graph for a relation, and that's called a "referral graph" ๐Ÿ’œ It's a conceptual tool that guides how the different catalog functions fit into the system, and it's the basis for building catalog functions and processing queries. More precisely, a "referral graph" is a partial ordering of the referrals for a relation. It's built with the subset/superset relationship, "S is a subset of G." A referral S is a subset of referral G if the set of queries covered by S's template is a subset of the set of queries covered by G's template. S counts as the more specific referral, and G is the more general one ๐Ÿฆ‹ Here's the subset relationship between these pairs of referrals:

(1) country = "US" and surname = "Ordille"
    is a subset of
    country = "US"

(2) country = "US" and surname = "Ordille"
    is a subset of
    country = "US" and surname = "*"

(3) country = "US" and surname = "*"
    is a subset of
    country ="US"

(4) country = "US"
    is a subset
    "empty template"

But the subset relationship does NOT exist between these pairs:

(5) country = "US"
    is not a subset of
    department = "CS"

(6) country = "US" and name = "Ordille"
    is not a subset of
    country = "US" and name = "Elliott"

In lines (1) and (2), the more general referral covers more queries, since it covers queries with different surname values. In line (3), the more general referral covers more queries too, because it covers queries that don't constrain surname to any value at all. In line (4), the specific referral only covers queries that constrain country to "US", while the empty template covers every query ๐Ÿ’…

During query processing, wildcards in a template get replaced with the matching attribute value from the query ๐Ÿซถ For any query covered by two referrals S and G where S is a subset of G, the set of tuples satisfying S's template is covered by the set of tuples satisfying G's template. S is the one used to process the query, because it's the more constrained (and faster) search space โšก S has a more constrained logical search space than G, since the set of tuples in S's scope is no larger than G's, and often smaller. S also has a more constrained physical search space. The repositories that have to be contacted for answers to S also have to be contacted for answers to G, but G might need extra repositories on top of those ๐ŸŒˆ

When a catalog function constrains a query, it always produces a referral that's more specific than the referral that contained the catalog function ๐Ÿ”ฅ Wildcards ("*") in a template show which attribute values the catalog function uses to generate that more specific referral. So catalog functions always follow this rule:

Catalog Function Constrained Search Rule:

Given a referral R with a template t and a catalog function cf,
and a query q covered by t, the result of using cf to process q,
cf(q), is a referral R' with template t' such that q  is covered
by t' and R' is more specific than R.

Catalog functions let you import a chunk of the indices for the info space into the query resolver ๐Ÿง Since they generate referrals, the resolver can cache the most useful referrals for a relation and call the catalog function whenever it needs fresh ones ๐Ÿ’–

The resolver's query processing algorithm starts with an initial set of referrals from the distributed catalog service ๐ŸŽ€ Then it navigates the referral graph, calling catalog functions as needed to get extra referrals that narrow the search space. Sometimes two referrals that cover the query are in a general-to-specific relationship with each other. In that case the resolver skips unnecessary access function processing by only using the most specific referral along each path of the referral graph โœจ

At the start, the search space for the query is all the data repositories in the relation ๐Ÿ—บ๏ธ As the resolver collects referrals to sets of relevant data repositories (and their associated data access functions), it intersects them to narrow the search space even more. The intersection only keeps the data repositories that show up in all of the referrals. Intersection also combines independent paths through the referral graph, so you get the benefit of indices on different attributes ๐Ÿซง

2.3 Meta-Data and Data Caching ๐Ÿ’œ

A Nomenclator query resolver caches the meta-data it gets back from calling catalog functions ๐Ÿ“ฆ It also caches the responses to queries. If a new query's predicate is covered by a previous query's predicate, Nomenclator works out the response for the new query from the cached response of the old one ๐Ÿง 

Nomenclator timestamps its cache entries so it can measure how current the query responses are and refresh selectively โฑ๏ธ Those timestamps are used to calculate a t-bound on query responses [5][1]. A t-bound is the time after which changes may have occurred to the data that aren't reflected in the query response. It's the time of the oldest cache entry used to calculate the response ๐Ÿ˜ญ Nomenclator returns a t-bound with each query response. If users want more current data, they can ask for responses that are more recent than the t-bound. Making that request flushes older items out of the cache when more recent items are available ๐ŸŒธ Query resolvers calculate a minimum t-bound that sits some refresh interval earlier than the current time. Resolvers keep themselves current by replacing any cache items that are earlier than the minimum t-bound ๐Ÿฆ‹

Bestie, the t-bound is the big idea here: it tells you the oldest data that might've been used to build your answer, so you always know how fresh it is ๐Ÿ‘‘

2.4 Scale and Performance ๐Ÿš€

There are three performance studies of active catalog and meta-data caching techniques [5] ๐Ÿ”ฅ The first study shows that the active catalog and meta-data caching can constrain the search effectively in a real environment, which was the X.500 name space ๐Ÿ’… The second study looked at the performance of an active catalog and meta-data caching for single users on a local area network. The experiments showed that the techniques for eliminating data repositories from the search space can dramatically improve response time. That happens because latency goes down, and cutting latency in communications and processing is critical for large-scale descriptive query optimization ๐ŸŽ€ The experiments also showed that an active catalog is the most significant contributor to better response time in a system with low load, and that meta-data caching helps reduce the load on the system ๐Ÿซถ

The third study used an analytical model to evaluate how these techniques perform and scale in a large Internet environment โœจ It showed that meta-data caching plays an essential role in scaling the distributed catalog service to millions of users ๐Ÿคฏ It also showed that constraining the search space with an active catalog contributes significantly to scaling data repositories to millions of users. Replication and data caching also help the system scale in a large Internet environment ๐ŸŒˆ

3. Registering a CCSO Server โœจ

okay so the Internet Nomenclator Project has a home page ๐Ÿ  at http://cm.bell-labs.com/cs/what/nomenclator, and it's giving a whole buffet of info and services ๐Ÿ“

admins can register their CCSO servers through services on that page. the registration service collects the CCSO server's location info, contact info for whoever runs the server, the implicit and explicit constraints on entries in the server's database, and a mapping from the server's local schema to the schema of the world view. literally everything you need to get your server into the club ๐Ÿ’…

those implicit and explicit constraints are the fuel for Nomenclator's catalog functions ๐Ÿ”ฅ right now the registration center collects constraints on organization name, department, city, state or province name, country, phone number, postal code, and email address. and these get automatically folded into Nomenclator's distributed catalog service ๐Ÿงš query resolvers use them so searches only go to the relevant CCSO servers.

for example, say a database only has info about the computer science and electrical engineering departments at a French university ๐Ÿ‡ซ๐Ÿ‡ท the department, organization and country attributes are constrained. so Nomenclator uses those constraints to stop queries about other departments, organizations or countries from ever getting sent to that server. no wasted trips, bestie ๐Ÿซถ

the mapping from the local schema of the CCSO server to the world view schema is what lets Nomenclator translate queries and responses for that server โœจ the registration center collects this by asking for an example of how to translate a typical entry in the CCSO server into the world view schema and, optionally, an example of how to translate a canonical entry in the world view schema into the local schema of the CCSO server [4]. those examples then get used to generate a mapping program, which is stored in the distributed catalog service ๐Ÿ’œ the CCSO data access function in the query resolver interprets these programs to translate queries and responses going to and from that server.

we plan to release the mapping language to CCSO server admins so they can write and maintain the mapping for their own servers ๐ŸŽ€ we've already experimented with more than 20 mapping programs ๐Ÿ™ˆ they're seldom more than 50 lines and often even shorter. it typically takes one or two lines to map an attribute. iconic, honestly ๐Ÿ‘‘


4. Using Nomenclator ๐Ÿฆ‹

the Internet Nomenclator Project currently provides a centralized query service on the Internet ๐ŸŒ the project runs a Nomenclator query resolver you can reach through its web page (see the URL in Section 3) and through the Simple Nomenclator Query Protocol (SNQP) [2].

the service answers queries that are a conjunction of string values for attributes. it supports a variety of matching techniques: exact string matching, matching with wildcards, and word-based matching in the style of the CCSO service ๐ŸŒธ the web interface uses the Simple Nomenclator Query Protocol (SNQP) [2]. programmers can build their own interfaces by using this protocol to talk to the Nomenclator query resolver. they'll need the host name and port number for the query resolver, which they can grab from the Nomenclator home page.

heads up though: SNQP, and so the web interface too, are defined for US-ASCII ๐Ÿ“ support for other character sets will need further work, so no cap, that's still on the to-do list โœจ

later phases of the project will bring enhanced services ๐Ÿ’… like advice about the cost of queries, ways to constrain queries further for faster response times, and letting users ask for more current data. we also plan to distribute query resolvers so users can benefit from running them locally ๐Ÿงš local query resolvers cut latency for the user and spread the query processing load around the network. it's giving efficiency, fr fr ๐Ÿ”ฅ


5. Summary ๐Ÿ’œ

the Internet Nomenclator Project augments existing CCSO services by supplying schema integration and fast cross-server searches ๐ŸŽ€ the key to speed in descriptive query processing is an active catalog, plus extensive meta-data and data caching. the Nomenclator system is the result of research in distributed systems [5][6][7][4]. it can be extended to incorporate other name servers besides CCSO servers, and to tackle distributed search and retrieval challenges in other application domains ๐ŸŒˆ

on top of the white pages service, the Internet Nomenclator Project will evaluate how an active catalog, meta-data caching and data caching perform in a very large global information system ๐Ÿ”ญ the ultimate goal is to refine these techniques until we get the best possible global information systems. main character energy, honestly โœจ


6. Security Considerations ๐Ÿ”’

โš ๏ธ read this part carefully, bestie, it's the serious bit ๐Ÿ’€

in the Internet Nomenclator Project, the participants' data is openly available and read-only ๐Ÿ“– since the risk of tampering with queries and responses is considered low, this version of Nomenclator does not define procedures for protecting the information in its queries and responses. so the info in those queries and responses is not protected by anything this version defines ๐Ÿ™ˆ


7. References ๐Ÿ“š

[1] H. Garcia-Molina, G. Wiederhold. "Read-Only Transactions in a Distributed Database," ACM Transactions on Database Systems 7(2), pp. 209-234. June 1982.

[2] Elliott, J., and J. Ordille, "The Simple Nomenclator Query Protocol (SNQP)," RFC 2259, January 1998.

[3] S. Dorner, P. Pomes. "The CCSO Nameserver: A Description," Computer and Communications Services Office Technical Report, University of Illinois, Urbana, USA. 1992. Avaialble in the current "qi" distribution from <URL:ftp://uiarchive.cso.uiuc.edu/local/packages/ph>

[4] A. Levy, J. Ordille. "An Experiment in Integrating Internet Information Sources," AAAI Fall Symposium on AI Applications in Knowledge Navigation and Retrieval, November 1995. <URL:http://cm.bell-labs.com/cm/cs/doc/95/11-01.ps.gz>

[5] J. Ordille. "Descriptive Name Services for Large Internets," Ph. D. Dissertation. University of Wisconsin. 1993. <URL:http://cm.bell-labs.com/cm/cs/doc/93/12-01.ps.gz>

[6] J. Ordille, B. Miller. "Distributed Active Catalogs and Meta-Data Caching in Descriptive Name Services," Thirteenth International IEEE Conference on Distributed Computing Systems, pp. 120-129. May 1993. <URL:http://cm.bell-labs.com/cm/cs/doc/93/5-01.ps.gz>

[7] J. Ordille, B. Miller. "Nomenclator Descriptive Query Optimization in Large X.500 Environments," ACM SIGCOMM Symposium on Communications Architectures and Protocols, pp. 185-196, September 1991. <URL:http://cm.bell-labs.com/cm/cs/doc/91/9-01.ps.gz>


8. Author's Address ๐Ÿ–Š๏ธ

Joann J. Ordille Bell Labs, Lucent Technologies Computing Sciences Research Center 700 Mountain Avenue, Rm 2C-301 Murray Hill, NJ 07974 USA

EMail: joann@bell-labs.com


Copyright (C) The Internet Society (1998). All Rights Reserved. ๐Ÿ’–

this document and translations of it may be copied and furnished to others ๐Ÿซถ derivative works that comment on or explain it, or help with its implementation, may be prepared, copied, published and distributed, in whole or in part, with no restrictions of any kind. the only catch is that the above copyright notice and this paragraph have to be included on all those copies and derivative works. however, this document itself may not be modified in any way, such as by removing the copyright notice or the references to the Internet Society or other Internet organizations. the exceptions are when it's needed for developing Internet standards, in which case the copyright procedures in the Internet Standards process must be followed, or when it's translated into languages other than English ๐ŸŒ

the permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns โ™พ๏ธ

this document and the information in it is provided on an "AS IS" basis, and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS, OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. no promises, bestie ๐Ÿ’€

๐Ÿ“ฆ where this page comes from