home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / rfc / 1900s / rfc1913.txt < prev    next >
Text File  |  1996-02-15  |  34KB  |  900 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                          C. Weider
  8. Request for Comments: 1913                                        Bunyip
  9. Category: Standards Track                                     J. Fullton
  10.                                                                    CNIDR
  11.                                                                 S. Spero
  12.                                                                      EIT
  13.                                                            February 1996
  14.  
  15.  
  16.                Architecture of the Whois++ Index Service
  17.  
  18. Status of this Memo
  19.  
  20.    This document specifies an Internet standards track protocol for the
  21.    Internet community, and requests discussion and suggestions for
  22.    improvements.  Please refer to the current edition of the "Internet
  23.    Official Protocol Standards" (STD 1) for the standardization state
  24.    and status of this protocol.  Distribution of this memo is unlimited.
  25.  
  26. Abstract
  27.  
  28.    The authors describe an architecture for indexing in distributed
  29.    databases, and apply this to the WHOIS++ protocol.
  30.  
  31. 1. Purpose:
  32.  
  33.    The WHOIS++ directory service [Deutsch, et al, 1995] is intended to
  34.    provide a simple, extensible directory service predicated on a
  35.    template-based information model and a flexible query language. This
  36.    document describes a general architecture designed for indexing
  37.    distributed databases, and then applys that architecture to link
  38.    together many of these WHOIS++ servers into a distributed, searchable
  39.    wide area directory service.
  40.  
  41. 2. Scope:
  42.  
  43.    This document details a distributed, easily maintained architecture
  44.    for providing a unified index to a large number of distributed
  45.    WHOIS++ servers. This architecture can be used with systems other
  46.    than WHOIS++ to provide a distributed directory service which is also
  47.    searchable.
  48.  
  49. 3. Motivation and Introduction:
  50.  
  51.    It seems clear that with the vast amount of directory information
  52.    potentially available on the Internet, it is simply not feasible to
  53.    build a centralized directory to serve all this information. If we
  54.    are to distribute the directory service, the easiest (although not
  55.  
  56.  
  57.  
  58. Weider, et al               Standards Track                     [Page 1]
  59.  
  60. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  61.  
  62.  
  63.    necessarily the best) way of building the directory service is to
  64.    build a hierarchy of directory information collection agents. In this
  65.    architecture, a directory query is delivered to a certain agent in
  66.    the tree, and then handed up or down, as appropriate, so that the
  67.    query is delivered to the agent which holds the information which
  68.    fills the query.  This approach has been tried before, most notably
  69.    in some implementations of the X.500 standard. However, there are
  70.    number of major flaws with the approach as it has been taken. This
  71.    new Index Service is designed to fix these flaws.
  72.  
  73. 3.1. The search problem
  74.  
  75.    One of the primary assumptions made by recent implementations of
  76.    distributed directory services is that every entry resides in some
  77.    location in a hierarchical name space. While this arrangement is
  78.    ideal for reading the entry once one knows its location, it is not as
  79.    good when one is searching for the location in the namespace of those
  80.    entries which meet some set of criteria. If the only criteria we know
  81.    about a desired entry are items which do not appear in the namespace,
  82.    we are forced to do a global query. Whenever we issue a global query
  83.    (at the root of the namespace), or a query at the top of a given
  84.    subtree in the namespace, that query is replicated to "all" subtrees
  85.    of the starting point. The replication of the query to all subtrees
  86.    is not necessarily a problem; queries are cheap. However, every
  87.    server to which the query has been replicated must process that
  88.    query, even if it has no entries which match the specified criteria.
  89.    This part of the global query processing is quite expensive. A poorly
  90.    designed namespace or a thin namespace can cause the vast majority of
  91.    queries to be replicated globally, but a very broad namespace can
  92.    cause its own navigation problems. Because of these problems, search
  93.    has been turned off at high levels of the X.500 namespace.
  94.  
  95. 3.2. The location problem
  96.  
  97.    With global search turned off, one must know in advance how the name
  98.    space is laid out so that one can guide a query to a proper location.
  99.    Also, the layout of the namespace then becomes critical to a user's
  100.    ability to find the desired information. Thus there are endless
  101.    battles about how to lay out the name space to best serve a given set
  102.    of users, and enormous headaches whenever it becomes apparent that
  103.    the current namespace is unsuited to the current usages and must be
  104.    changed (as recently happened in X.500). Also, assuming one does
  105.    impose multiple hierarchies on the entries through use of the
  106.    namespace, the mechanisms to maintain these multiple hierarchies in
  107.    X.500 do not exist yet, and it is possible to move entries out from
  108.    under their pointers.  Also, there is as yet no agreement on how the
  109.    X.500 namespace should look even for the White Pages types of
  110.    information that is currently installed in the X.500 pilot project.
  111.  
  112.  
  113.  
  114. Weider, et al               Standards Track                     [Page 2]
  115.  
  116. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  117.  
  118.  
  119. 3.3. The Yellow Pages problem
  120.  
  121.    Current implementations of this hierarchical architecture have also
  122.    been unsuited to solving the Yellow Pages problem; that is, the
  123.    problem of easily and flexibly building special-purpose directories
  124.    (say of molecular biologists) and of automatically maintaining these
  125.    directories once they have been built. In particular, the attributes
  126.    appropriate to the new directory must be built into the namespace
  127.    because that is the only way to segregate related entries into a
  128.    place where they can be found without a global search. Also, there is
  129.    a classification problem; how does one adequately specify the proper
  130.    categories so that people other than the creator of the directory can
  131.    find the correct subtree? Additionally, there is the problem of
  132.    actually finding the data to put into the subtree; if one must
  133.    traverse the hierarchy to find the data, we have to look globally for
  134.    the proper entries.
  135.  
  136. 3.4. Solutions
  137.  
  138.    The problems examined in this section can be addressed by a
  139.    combination of two new techniques: directory meshes and forward
  140.    knowledge.
  141.  
  142. 4. Directory meshes and forward knowledge
  143.  
  144.    We'll hold off for a moment on describing the actual architecture
  145.    used in our solution to these problems and concentrate on a high
  146.    level description of what solutions are provided by our conceptual
  147.    approach. To begin with, although every entry in WHOIS++ does indeed
  148.    have a unique identifier (resides in a specific location in the
  149.    namespace) the navigational algorithms to reach a specific entry do
  150.    not necessarily depend on the identifier the entry has been assigned.
  151.    The Index Service gets around the namespace and hierarchy problems by
  152.    creating a directory mesh on top of the entries.  Each layer of the
  153.    mesh has a set of 'forward knowledge' which indicates the contents of
  154.    the various servers at the next lower layer of the mesh. Thus when a
  155.    query is received by a server in a given layer of the mesh, it can
  156.    prune the search tree and hand the query off to only those lower
  157.    level servers which have indicated that they might be able to answer
  158.    it. Thus search becomes feasible at all levels of the mesh. In the
  159.    current version of this architecture, we have chosen a certain set of
  160.    information to hand up the mesh as forward knowledge. This may or may
  161.    not be exactly the set of information required to construct a truly
  162.    searchable directory, but the protocol itself doesn't restrict the
  163.    types of information which can be handed around.
  164.  
  165.    In addition, the protocols designed to maintain the forward knowledge
  166.    will also work perfectly well to provide replication of servers for
  167.  
  168.  
  169.  
  170. Weider, et al               Standards Track                     [Page 3]
  171.  
  172. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  173.  
  174.  
  175.    redundancy and robustness. In this case, the forward knowledge handed
  176.    around by the protocols is the entire database of entries held by the
  177.    replicated server.
  178.  
  179.    Another benefit provided by the mesh of index servers is that since
  180.    the entry identification scheme has been decoupled from the
  181.    navigation service, multiple hierarchies can be built and easily
  182.    maintained on top of the existing data. Also, the user does not need
  183.    to know in advance where in the mesh the entry is contained.
  184.  
  185.    Also, the Yellow Pages problem now becomes tractable, as the index
  186.    servers can pick and choose between information proffered by a given
  187.    server; because we have an architecture that allows for automatic
  188.    polling of data, special purpose directories become easy to construct
  189.    and to maintain.
  190.  
  191. 5. Components of the Index Service:
  192.  
  193. 5.1. WHOIS++ servers
  194.  
  195.    The whois++ service is described in [Deutsch, et al, 1995]. As that
  196.    service specifies only the query language, the information model, and
  197.    the server responses, whois++ services can be provided by a wide
  198.    variety of databases and directory services. However, to participate
  199.    in the Index Service, that underlying database must also be able to
  200.    generate a 'centroid', or some other type of forward knowledge, for
  201.    the data it serves.
  202.  
  203. 5.2. Centroids as forward knowledge
  204.  
  205.    The centroid of a server is comprised of a list of the templates and
  206.    attributes used by that server, and a word list for each attribute.
  207.    The word list for a given attribute contains one occurrence of every
  208.    word which appears at least once in that attribute in some record in
  209.    that server's data, and nothing else.
  210.  
  211.    A word is any token delimited by blank spaces, newlines, or the '@'
  212.    character, in the value of an attribute.
  213.  
  214.    For example, if a whois++ server contains exactly three records, as
  215.    follows:
  216.  
  217.    Record 1                        Record 2
  218.    Template: User                  Template: User
  219.    First Name: John                First Name: Joe
  220.    Last Name: Smith                Last Name: Smith
  221.    Favourite Drink: Labatt Beer    Favourite Drink: Molson Beer
  222.  
  223.  
  224.  
  225.  
  226. Weider, et al               Standards Track                     [Page 4]
  227.  
  228. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  229.  
  230.  
  231.    Record 3
  232.    Template: Domain
  233.    Domain Name: foo.edu
  234.    Contact Name: Mike Foobar
  235.  
  236.    the centroid for this server would be
  237.  
  238.    Template:         User
  239.    First Name:       Joe
  240.                      John
  241.    Last Name:        Smith
  242.    Favourite Drink:  Beer
  243.                      Labatt
  244.                      Molson
  245.  
  246.    Template:         Domain
  247.    Domain Name:      foo.edu
  248.    Contact Name:     Mike
  249.                      Foobar
  250.  
  251.    It is this information which is handed up the tree to provide forward
  252.    knowledge.  As we mention above, this may not turn out to be the
  253.    ideal solution for forward knowledge, and we suspect that there may
  254.    be a number of different sets of forward knowledge used in the Index
  255.    Service. However, the directory architecture is in a very real sense
  256.    independent of what types of forward knowledge are handed around, and
  257.    it is entirely possible to build a unified directory which uses many
  258.    types of forward knowledge.
  259.  
  260. 5.3. Index servers and Index server Architecture
  261.  
  262.    A whois++ index server collects and collates the centroids (or other
  263.    forward knowledge) of either a number of whois++ servers or of a
  264.    number of other index servers. An index server must be able to
  265.    generate a centroid for the information it contains. In addition, an
  266.    index server can index any other server it wishes, which allows one
  267.    base level server (or index server) to participate in many
  268.    hierarchies in the directory mesh.
  269.  
  270. 5.3.1. Queries to index servers
  271.  
  272.    An index server will take a query in standard whois++ format, search
  273.    its collections of centroids and other forward information, determine
  274.    which servers hold records which may fill that query, and then
  275.    notifies the user's client of the next servers to contact to submit
  276.    the query (referral in the X.500 model). An index server can also
  277.    contain primary data of its own; and thus act a both an index server
  278.    and a base level server. In this case, the index server's response to
  279.  
  280.  
  281.  
  282. Weider, et al               Standards Track                     [Page 5]
  283.  
  284. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  285.  
  286.  
  287.    a query may be a mix of records and referral pointers.
  288.  
  289. 5.3.2. Index server distribution model and centroid propogation
  290.  
  291.    The diagram on the next page illustrates how a mesh of index servers
  292.    might be created for a set of whois++ servers. Although it looks like
  293.    a hierarchy, the protocols allow (for example) server A to be indexed
  294.    by both server D and by server H.
  295.  
  296.      whois++               index                   index
  297.      servers               servers                 servers
  298.                            for                     for
  299.                            whois++                 lower-level
  300.                            servers                 index servers
  301.      _______
  302.     |       |
  303.     |   A   |__
  304.     |_______|  \            _______
  305.                 \----------|       |
  306.      _______               |   D   |__             ______
  307.     |       |   /----------|_______|  \           |      |
  308.     |   B   |__/                       \----------|      |
  309.     |_______|                                     |  F   |
  310.                                        /----------|______|
  311.                                       /
  312.      _______                _______  /
  313.     |       |              |       |-
  314.     |   C   |--------------|   E   |
  315.     |_______|              |_______|-
  316.                                      \
  317.                                       \
  318.      _______                           \            ______
  319.     |       |                           \----------|      |
  320.     |   G   |--------------------------------------|  H   |
  321.     |_______|                                      |______|
  322.  
  323.              Figure 1: Sample layout of the Index Service mesh
  324.  
  325.    In the portion of the index tree shown above, whois++ servers A and B
  326.    hand their centroids up to index server D, whois++ server C hands its
  327.    centroid up to index server E, and index servers D and E hand their
  328.    centroids up to index server F. Servers E and G also hand their
  329.    centroids up to H.
  330.  
  331.    The number of levels of index servers, and the number of index
  332.    servers at each level, will depend on the number of whois++ servers
  333.    deployed, and the response time of individual layers of the server
  334.    tree. These numbers will have to be determined in the field.
  335.  
  336.  
  337.  
  338. Weider, et al               Standards Track                     [Page 6]
  339.  
  340. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  341.  
  342.  
  343. 5.3.3. Centroid propogation and changes to centroids
  344.  
  345.    Centroid propogation is initiated by an authenticated POLL command
  346.    (sec. 5.2).  The format of the POLL command allows the poller to
  347.    request the centroid of any or all templates and attributes held by
  348.    the polled server. After the polled server has authenticated the
  349.    poller, it determines which of the requested centroids the poller is
  350.    allowed to request, and then issues a CENTROID-CHANGES report (sec.
  351.    5.3) to transmit the data. When the poller receives the CENTROID-
  352.    CHANGES report, it can authenticate the pollee to determine whether
  353.    to add the centroid changes to its data. Additionally, if a given
  354.    pollee knows what pollers hold centroids from the pollee, it can
  355.    signal to those pollers the fact that its centroid has changed by
  356.    issuing a DATA-CHANGED command. The poller can then determine if and
  357.    when to issue a new POLL request to get the updated information. The
  358.    DATA-CHANGED command is included in this protocol to allow
  359.    'interactive' updating of critical information.
  360.  
  361. 5.3.4. Centroid propogation and mesh traversal
  362.  
  363.    When an index server issues a POLL request, it may indicate to the
  364.    polled server what relationship it has to the polled. This
  365.    information can be used to help traverse the directory mesh. Two
  366.    fields are specified in the current proposal to transmit the
  367.    relationship information, although it is expected that richer
  368.    relationship information will be shared in future revisions of this
  369.    protocol.
  370.  
  371.    One field used for this information is the Hierarchy field, and can
  372.    take on three values. The first is 'topology', which indicates that
  373.    the indexing server is at a higher level in the network topology
  374.    (e.g. indexes the whole regional ISP). The second is 'geographical',
  375.    which indicates that the polling server covers a geographical area
  376.    subsuming the pollee. The third is 'administrative', which indicates
  377.    that the indexing server covers an administrative domain subsuming
  378.    the pollee.
  379.  
  380.    The second field used for this information is the Description field,
  381.    which contains the DESCRIBE record of the polling server. This allows
  382.    users to obtain richer metainformation for the directory mesh,
  383.    enabling them to expand queries more effectively.
  384.  
  385. 5.3.5. Query handling and passing algorithms
  386.  
  387.    When an index server receives a query, it searches its collection of
  388.    centroids and determines which servers hold records which may fill
  389.    that query. As whois++ becomes widely deployed, it is expected that
  390.    some index servers may specialize in indexing certain whois++
  391.  
  392.  
  393.  
  394. Weider, et al               Standards Track                     [Page 7]
  395.  
  396. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  397.  
  398.  
  399.    templates or perhaps even certain fields within those templates. If
  400.    an index server obtains a match with the query "for those template
  401.    fields and attributes the server indexes", it is to be considered a
  402.    match for the purpose of forwarding the query.
  403.  
  404. 5.3.5.1. Query referral
  405.  
  406.    Query referral is the process of informing a client which servers to
  407.    contact next to resolve a query.  The syntax for notifying a client
  408.    is outlined in section 5.5.
  409.  
  410. 5.3.6 Loop control
  411.  
  412.    Since there are no a priori restrictions on which servers may poll
  413.    which other servers, and since a given server may participate in many
  414.    sub-meshes, mechanisms must be installed to allow the detection of
  415.    cycles in the polling relationships. This is accomplished in the
  416.    current protocol by including a hop-count on polling relationships.
  417.    Each time a polled server generates forward information, it informs
  418.    the polling server about its current hopcount, which is the maximum
  419.    of the hopcounts of all the servers it polls, plus 1.  A base level
  420.    server (one which polls no other servers) will have a hopcount of 0.
  421.    When a server decides to poll a new server, if its hopcount goes up,
  422.    then it must information all the other servers which poll it about
  423.    its new hopcount.  A maximum hopcount (8 in the current version) will
  424.    help the servers detect polling loops.
  425.  
  426.    A second approach to loop detection is to do all the work in the
  427.    client; which would determine which new referrals have already
  428.    appeared in the referral list, and then simply iterate the referral
  429.    process until there are no new servers to ask.  An algorithm to
  430.    accomplish this in WHOIS++ is detailed in [Faltstrom 95].
  431.  
  432. 6. Syntax for operations of the Index Service:
  433.  
  434.    The syntax for each protocol componenet is listed below. In addition,
  435.    each section contains a listing of which of these attributes is
  436.    required and optional for each of the componenet. All timestamps must
  437.    be in the format YYYYMMDDHHMM and in GMT.
  438.  
  439. 6.1. Data changed syntax
  440.  
  441.    The data changed template look like this:
  442.  
  443. # DATA-CHANGED
  444.  Version-number: // version number of index service software, used to
  445.                  // insure compatibility. Current value is 1.0
  446.  Time-of-latest-centroid-change: // time stamp of latest centroid
  447.  
  448.  
  449.  
  450. Weider, et al               Standards Track                     [Page 8]
  451.  
  452. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  453.  
  454.  
  455.                                  // change, GMT
  456.  Time-of-message-generation: // time when this message was generated,
  457.                              // GMT
  458.  Server-handle: // IANA unique identifier for this server
  459.  Host-Name: // Host name of this server (current name)
  460.  Host-Port: // Port number of this server (current port)
  461.  Best-time-to-poll: // For heavily used servers, this will identify
  462.                     // when the server is likely to be lightly
  463.                     // loaded so that response to the poll will be
  464.                     //speedy, GMT
  465.  Authentication-type: // Type of authentication used by server, or NONE
  466.  Authentication-data: // data for authentication
  467. # END // This line must be used to terminate the data changed
  468.                  // message
  469.  
  470. Required/optional table
  471.  
  472. Version-Number  REQUIRED
  473. Time-of-latest-centroid-change  REQUIRED
  474. Time-of-message-generation      REQUIRED
  475. Server-handle   REQUIRED
  476. Host-Name       REQUIRED
  477. Host-Port       REQUIRED
  478. Best-time-to-poll       OPTIONAL
  479. Authentication-type     OPTIONAL
  480. Authentication-data     OPTIONAL
  481.  
  482. 6.2. Polling syntax
  483.  
  484. # POLL:
  485.  Version-number: // version number of poller's index software, used to
  486.                  // insure compatibility
  487.  Type-of-poll: // type of forward data requested. CENTROID or QUERY
  488.                // are the only one currently defined
  489.  Poll-scope: // Selects bounds within which data will be returned.
  490.              // See note.
  491.  Start-time: // give me all the centroid changes starting at this
  492.              // time, GMT
  493.  End-time: // ending at this time, GMT
  494.  Template: // a standard whois++ template name, or the keyword ALL,
  495.            // for a full update.
  496.  Field:    // used to limit centroid update information to specific
  497.            // fields, is either a specific field name, a list of field
  498.            // names, or the keyword ALL
  499.  Server-handle: // IANA unique identifier for the polling server.
  500.                 // this handle may optionally be cached by the polled
  501.                 // server to announce future changes
  502.  Host-Name: // Host name of the polling server.
  503.  
  504.  
  505.  
  506. Weider, et al               Standards Track                     [Page 9]
  507.  
  508. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  509.  
  510.  
  511.  Host-Port: // Port number of the polling server.
  512.  Hierarchy: // This field indicates the relationship which the poller
  513.               // bears to the pollee. Typical values might include
  514.               // 'Topology', 'Geographical", or "Administrative"
  515.  Description: // This field contains the DESCRIBE record of the
  516.                 // polling server
  517.  Authentication-type: // Type of authentication used by poller, or NONE
  518.  Authentication-data: // Data for authentication
  519. # END  // This line must by used to terminate the poll message
  520.  
  521.    Note: For poll type CENTROID, the allowable values for Poll Scope are
  522.    FULL and RELATIVE. Support of the FULL value is required, this
  523.    provides a complete listing of the centroid or other forward
  524.    information. RELATIVE indicates that these are the relative changes
  525.    in the centroid since the last report to the polling server.
  526.  
  527.    For poll type QUERY, the allowable values for Poll Scope are a blank
  528.    line, which indicates that all records are to be returned, or a valid
  529.    WHOIS++ query, which indicates that just those records which satisfy
  530.    the query are to be returned. N.B. Security considerations may
  531.    require additional authentication for successful response to the
  532.    Blank Line Poll Scope. This value has been included for server
  533.    replication.
  534.  
  535.    A polling server may wish to index different types of information
  536.    than the polled server has collected. The POLLED-FOR command will
  537.    indicate which servers the polled server has contacted.
  538.  
  539. Required/Optional Table
  540.  
  541. Version-Number  REQUIRED, value is 1.0
  542. Type-Of-Poll    REQUIRED, values CENTROID and QUERY are required
  543. Poll-scope      REQUIRED  If Type-of-poll is CENTROID, FULL is required,
  544.                           RELATIVE is optional
  545.                           If Type-of-poll is QUERY, Blank line is
  546.                           required, and WHOIS++-type queries are
  547.                           required
  548. Start-time      OPTIONAL
  549. End-Time        OPTIONAL
  550. Template        REQUIRED
  551. Field           REQUIRED
  552. Server-handle   REQUIRED
  553. Host-Name       REQUIRED
  554. Host-Port       REQUIRED
  555. Hierarchy       OPTIONAL
  556. Description     OPTIONAL
  557. Authentication-Type:    OPTIONAL
  558. Authentication-data:    OPTIONAL
  559.  
  560.  
  561.  
  562. Weider, et al               Standards Track                    [Page 10]
  563.  
  564. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  565.  
  566.  
  567. Example of a POLL command:
  568. # POLL:
  569.  Version-number: 1.0
  570.  Type-of-poll: CENTROID
  571.  Poll-scope: FULL
  572.  Start-time: 199501281030+0100
  573.  Template: ALL
  574.  Field: ALL
  575.  Server-handle: BUNYIP01
  576.  Host-Name: services.bunyip.com
  577.  Host-Port: 7070
  578.  Hierarchy: Geographical
  579.  # END
  580.  
  581. 6.3. Centroid change report
  582.  
  583.    As the centroid change report contains nested multiply-occuring
  584.    blocks, each multiply occurring block is surrounded *in this paper*
  585.    by curly braces '{', '}'. These curly braces are NOT part of the
  586.    syntax, they are for identification purposes only.
  587.  
  588.    The syntax of a Data: item is either a list of words, one word per
  589.    line, or the keyword:
  590.  
  591.      ANY
  592.  
  593.    The keyword ANY as the only item of a Data: list means that any value
  594.    for this field should be treated as a hit by the indexing server.
  595.  
  596.    The field Any-field: needs more explanation than can be given in the
  597.    body of the syntax description below. It can take two values, True or
  598.    False. If the value is True, the pollee is indicating that there are
  599.    fields in this template which are not being exported to the polling
  600.    server, but wishes to treat as a hit. Thus, when the polling server
  601.    gets a query which has a term requesting a field not in this list for
  602.    this template, the polling server will treat that term as a 'hit'.
  603.    If the value is False, the pollee is indicating that there are no
  604.    other fields for this template which should be treated as a hit. This
  605.    field is required because the basic model for the WHOIS++ query
  606.    syntax requires that the results of each search term be 'and'ed
  607.    together. This field allows polled servers to export data only for
  608.    non-sensitive fields, yet still get referrals of queries which
  609.    contain sensitive terms.
  610.  
  611.    IMPORTANT: The data listed in the centroid must be in the ISO-8859-1
  612.    character set in this version of the indexing protocol. Use of any
  613.    other character set is a violation of the protocol. Note that the
  614.    base-level server is also specified to use ISO-8859-1 [Deutsch, et
  615.  
  616.  
  617.  
  618. Weider, et al               Standards Track                    [Page 11]
  619.  
  620. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  621.  
  622.  
  623.    al, 1995].
  624.  
  625. # CENTROID-CHANGES
  626.  Version-number: // version number of pollee's index software, used to
  627.                  // insure compatibility
  628.  Start-time: // change list starting time, GMT
  629.  End-time: // change list ending time, GMT
  630.  Server-handle: // IANA unique identifier of the responding server
  631.  Case-sensitive: // states whether data is case sensitive or case
  632.                  // insensitive. values are TRUE or FALSE
  633.  Authentication-type: // Type of authentication used by pollee, or NONE
  634.  Authentication-data: // Data for authentication
  635.  Compression-type: // Type of compression used on the data, or NONE
  636.  Size-of-compressed-data: // size of compressed data if compression
  637.                           // is used
  638.  Operation: // One of 3 keywords: ADD, DELETE, FULL
  639.             // ADD - add these entries to the centroid for this server
  640.             // DELETE - delete these entries from the centroid of this
  641.             // server
  642.             // FULL - the full centroid as of end-time follows
  643. { // The multiply occurring template block starts here
  644. # BEGIN TEMPLATE
  645.  Template: // a standard whois++ template name
  646.  Any-field: // TRUE or FALSE. See beginning of 6.3 for explanation.
  647.  { // the template contains multiple field blocks
  648. # BEGIN FIELD
  649.  Field: // a field name within that template
  650.  Data: // Either the keyword *ANY*, or
  651.        // the word list itself, one per line, cr/lf terminated,
  652.        // each line starting with a dash character ('-').
  653. # END FIELD
  654.   } // the field ends with END FIELD
  655. # END TEMPLATE
  656. } // the template block ends with END TEMPLATE
  657. # END CENTROID-CHANGES // This line must be used to terminate the
  658.                          // centroid change report
  659.  
  660.    For each template, all fields must be listed, or queries will not be
  661.    referred correctly.
  662.  
  663. Required/Optional table
  664.  
  665. Version-number  REQUIRED, value is 1.0
  666. Start-time      REQUIRED (even if the centroid type is FULL)
  667. End-time        REQUIRED (even if the centroid type is FULL)
  668. Server-handle   REQUIRED
  669. Case-Sensitive  OPTIONAL
  670. Authentication-Type     OPTIONAL
  671.  
  672.  
  673.  
  674. Weider, et al               Standards Track                    [Page 12]
  675.  
  676. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  677.  
  678.  
  679. Authentication-Data     OPTIONAL
  680. Compression-type        OPTIONAL
  681. Size-of-compressed-data OPTIONAL (even if compression is used)
  682. Operation     OPTIONAL, if used, upport for all three values is required
  683. Tokenization-type       OPTIONAL
  684. #BEGIN TEMPLATE REQUIRED
  685. Template        REQUIRED
  686. Any-field       REQUIRED
  687. #BEGIN FIELD    REQUIRED
  688. Field           REQUIRED
  689. Data            REQUIRED
  690. #END FIELD      REQUIRED
  691. #END TEMPLATE   REQUIRED
  692. #END CENTROID-CHANGES REQUIRED
  693.  
  694. Example:
  695.  
  696. # CENTROID-CHANGES
  697.  Version-number: 1.0
  698.  Start-time: 197001010000
  699.  End-time: 199503012336
  700.  Server-handle: BUNYIP01
  701. # BEGIN TEMPLATE
  702.  Template: USER
  703.  Any-field: TRUE
  704. # BEGIN FIELD
  705.  Field: Name
  706.  Data: Patrik
  707. -Faltstrom
  708. -Malin
  709. -Linnerborg
  710. #END FIELD
  711. #BEGIN FIELD
  712.  Field: Email
  713.  Data: paf@bunyip.com
  714. -malin.linnerborg@paf.se
  715. # END FIELD
  716. # END TEMPLATE
  717. # END CENTROID-CHANGES
  718.  
  719. 6.4 QUERY and POLLEES responses
  720.  
  721.    The response to a QUERY command is done in WHOIS++ format.
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Weider, et al               Standards Track                    [Page 13]
  731.  
  732. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  733.  
  734.  
  735. 6.5. Query referral
  736.  
  737.    When referrals are included in the body of a response to a query,
  738.    each referral is listed in a separate SERVER-TO-ASK block as shown
  739.    below.
  740.  
  741. # SERVER-TO-ASK
  742.  Version-number: // version number of index software, used to insure
  743.                  // compatibility
  744.  Body-of-Query: // the original query goes here
  745.  Server-Handle: // WHOIS++ handle of the referred server
  746.  Host-Name: // DNS name or IP address of the referred server
  747.  Port-Number: // Port number to which to connect, if different from the
  748.                 // WHOIS++ port number
  749.  
  750. # END
  751.  
  752. Required/Optional table
  753.  
  754. Version-number REQUIRED, value should be 1.0
  755. Body-of-query OPTIONAL
  756. Server-Handle REQUIRED
  757. Host-Name REQUIRED
  758. Port-Number OPTIONAL, must be used if different from port 63
  759.  
  760. Example:
  761.  
  762. # SERVER-TO-ASK
  763.  Version-Number: 1.0
  764.  Server-Handle: SUNETSE01
  765.  Host-Name: sunic.sunet.se
  766.  Port-Number: 63
  767. # END
  768.  
  769. 7: Reply Codes
  770.  
  771.    In addition to the reply codes listed in [Deutsch 95] for the basic
  772.    WHOIS++ client/server interaction, the following reply codes are used
  773.    in version 1.0 of this protocol.
  774.  
  775. 113 Requested method not available      Unable to provide a requested
  776.                                         compression method. Contacted
  777.                                         server will send requested
  778.                                         data in different format.
  779.  
  780. 227 Update request acknowledged         A DATA-CHANGED transmission
  781.                                         has been accepted and logged
  782.                                         for further action.
  783.  
  784.  
  785.  
  786. Weider, et al               Standards Track                    [Page 14]
  787.  
  788. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  789.  
  790.  
  791. 503 Required attribute missing          A REQUIRED attribute is
  792.                                         missing in an interaction.
  793.  
  794. 504 Desired server unreachable          The desired server is
  795.                                         unreachable.
  796.  
  797. 505 Desired server unavailable          The desired server fails to
  798.                                         respond to requests, but host
  799.                                         is still reachable.
  800.  
  801. 8. References
  802.  
  803. [Deutsch 95] Deutsch, et al., "Architecture of the WHOIS++ service",
  804.              RFC 1835, August 1995.
  805.  
  806.  
  807. [Faltstrom 95] Faltstrom, P., et al., "How to Interact with a WHOIS++
  808.                Mesh, RFC 1914, February 1996.
  809.  
  810. 9. Security Considerations
  811.  
  812.    Security issues are not discussed in this memo.
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842. Weider, et al               Standards Track                    [Page 15]
  843.  
  844. RFC 1913       Architecture of the Whois++ Index Service   February 1996
  845.  
  846.  
  847. 10. Authors' Addresses
  848.  
  849.    Chris Weider
  850.    Bunyip Information Systems, Inc.
  851.    310 St. Catherine St. West
  852.    Montreal, PQ H2X 2A1
  853.    CANADA
  854.  
  855.    Phone: +1-514-875-8611
  856.    Fax:   +1-514-875-6134
  857.    EMail: clw@bunyip.com
  858.  
  859.  
  860.    Jim Fullton
  861.    MCNC Center for Communications
  862.    Post Office Box 12889
  863.    3021 Cornwallis Road
  864.    Research Triangle Park
  865.    North Carolina 27709-2889
  866.  
  867.    Phone: 410-795-5422
  868.    Fax:   410-795-5422
  869.    EMail: fullton@cnidr.org
  870.  
  871.  
  872.    Simon Spero
  873.    EMail: ses@eit.com
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898. Weider, et al               Standards Track                    [Page 16]
  899.  
  900.