RFC 1914
How to Interact with a Whois++ Mesh
RFC 1914: How to Interact with a Whois++ Mesh ๐
- Network Working Group ๐ท
- Request for Comments: 1914 ๐
- Title: How to Interact with a Whois++ Mesh
- Authors: P. Faltstrom (Bunyip Information Systems, Inc.), R. Schoultz (KTHNOC), C. Weider (Bunyip Information Systems, Inc.) ๐ฏโโ๏ธ
- Category: Standards Track ๐
- Date: February 1996 ๐
- Obsoletes / Updates: the header doesn't list any RFCs as obsoleted or updated ๐
Status of this Memo ๐
Okay so this doc specifies an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements ๐ซถ. For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1) โจ. Distribution of this memo is unlimited ๐.
1. Overview โจ
In the Whois++ architecture [Deutsch94],[Weider94], mesh traversal is done by the client ๐ , since each server "refers" the client on to the next appropriate server(s) ๐ง. The protocol is honestly simple: the client opens a connection to a server, sends a query, gets a reply, closes the connection, and after parsing the response, it decides which server to contact next (if needed) ๐ฆ.
So the client needs an algorithm to follow whenever it talks to the Whois++ mesh ๐ฅ. That way, referral loops can be detected, cost is minimised, and the right servers get contacted rapidly and effectively ๐.
2. Basic functionality ๐ธ
Each Whois++ client SHOULD be configured to automatically send queries to a specific Whois++ server ๐. The default server can vary depending on which template you want and where the client sits relative to the WHOIS++ index mesh, but as a rule, the server SHOULD be as local as possible ๐ก.
A
/ \
B C
/ \ \
Z -----> D E F
/ \
G H
Fig 1: The client Z is configured to first query server D ๐
After getting responses from a server, the client can act in several ways ๐ค. If the number of hits is greater than zero, the response is just presented to the user โจ. If the client gets one or many servers-to-ask answers, the client SHOULD be able to automatically resolve these pointers, i.e. query these servers in turn ๐.
A
/ \
B C
/ \ \
Z <----- D E F
\ / \
--> G H
Fig 2: The client Z gets a "servers-to-ask G" response from D and therefore MAY automatically query server G ๐ซง.
3. How to navigate in the mesh ๐บ๏ธ
A client can use several different strategies when traversing or navigating around the mesh ๐งญ. The automatic way is to just "expand the search" (described in 3.1) ๐, and a second method is to use the "Directory of Servers" (described in 3.2) ๐.
3.1. Expansion of searches ๐
If the number of hits is zero, or if the user in some way wants to expand the search, it is RECOMMENDED for the client to issue a 'polled-by' and 'polled-for' query to the server ๐. The client can then repeat the original query to the new servers indicated ๐ซ.
A
/ \
/-----> B C
/ / \ \
Z <----- D E F
/ \
G H
Fig 3: The client Z gets a "polled-by B" response from D and therefore queries server B ๐ฆ
The client MUST always keep track of which servers it has queried ๐, because it MUST itself detect loops in the mesh by not querying the same server more than once ๐. No double-dipping, bestie ๐ โโ๏ธ.
A
/ \
/- B C
/ / \ \
Z <---/ D E F
/ \
G H
Fig 4: The client Z gets a "servers-to-ask D" response from B, but Z does not query D because the server D has already been queried ๐.
So, the default expansion of a query by a client causes increasingly more comprehensive index servers to be queried ๐. The forward knowledge contained in the index server mesh allows rapid pruning of these larger trees ๐ณ, which is honestly so smart ๐ง โจ.
All loop detection and elimination is done in the client, rather than in the server mesh ๐โโ๏ธ. This decision was made because loop detection and elimination are quite difficult to build into the mesh, if we are to continue allowing each server to participate in multiple hierarchies within the mesh ๐ธ๏ธ.
3.1.1. Optimising the mesh ๐ง
If organization A tends to use organization B's WHOIS++ server frequently (say A is cooperating with B on a project), A MAY wish to make B's server locally available ๐ค. A can do this by creating a local index server which retrieves the centroid for both organizations ๐ฆ. When A's client then expands a query looking for someone at B, the client can resolve the query much more rapidly, since it doesn't have to find the top level servers for the tree that A and B both belong to ๐.
A
/ \
B C
/ \ \
Z D --> F
/ \
G H
Fig 5: The server B gets a centroid from server F ๐ซถ
A
/ \
B C
/ \ \
Z <----> D --- F
/ \
G H
Fig 6: The client queries server D, gets zero hits back, expands the search, and gets a "polled-by B" response back ๐ฅน.
A
/ \
/--> B C
/ / \ \
Z <-/ D --- F
/ \
G H
Fig 7: The client Z queries server B and gets a "servers-to-ask F" response back ๐.
A
/ \
B C
/ \ \
D --- F <-----> Z
/ \
G H
Fig 8: The client Z queries server F and gets the answer ๐.
The example in Fig 5-8 shows that the algorithm works even though the Whois++ mesh is not a tree ๐ฟ. There are many reasons why a given index server mesh might be 'short-circuited' ๐. For example, in a multinational company, the Swedish branch of Acme Inc. is polled both by the national server in Sweden and by the headquarters server in the USA ๐. Querying the Swedish server finds all persons working at the Swedish branch of Acme Inc. ๐ธ๐ช. But querying the Acme Inc. server in the USA finds all employees in the company, including those in Sweden ๐ผ.
Note that the location of a server does not implicitly narrow the search ๐. In other words, you have to specify all information when sending a query to a server ๐งพ. In the example above, if you just query a server for companies in the USA, you won't implicitly only get hits from records in the states, because the Acme Inc. server in the states has polled a server in Sweden ๐. So in this case, you have to explicitly include country=USA in the query if you are only interested in those records ๐บ๐ธโจ.
Blindly expanding the query can incur an exponentially growing cost in resources ๐ธ. Charging for responses is implemented in parts of the WHOIS++ index service mesh, so growing cost is a real thing, and automatic expansion is NOT RECOMMENDED ๐ซ. The WHOIS++ index service is designed to make searches at any location in the index mesh quite effective and efficient, but still ๐ฌ.
More sophisticated clients SHOULD also be configurable to "cut off" some servers from a search, meaning a blacklist of servers ๐. This might be needed when searching for records, and one server might have a very high cost (in dollars), so you might want to explicitly forbid the client from sending queries to that server ๐ ๐ฐ.
3.1.2. The algorithm used by the client ๐งฎ
By following this algorithm, a client finds all records in a mesh that the first Whois++ server queried belongs to ๐ฏ.
The algorithm for the client follows ๐:
Query := data to search for;
QueriedServers := {};
AnswerList := {};
OriginalServers := { known servers to this client };
while OriginalServers is not empty do:
ServerList = OriginalServers;
while ServerList is not empty do:
Server := ServerList[1];
if Server is not in QueriedServers then do:
send Query to Server;
Answer := answer from Server;
append ServersToAsk to ServerList;
remove Server from ServerList;
append Answers to AnswerList;
end;
done;
if query should be expanded then do:
ServerList := OriginalServers;
OriginalServers := {};
while ServerList is not empty do:
Server := ServerList[1];
send Polled-For-Query to Server;
Answer := answer from Server;
append Answer to OriginalServers;
remove Server from ServerList;
end;
done;
done;
display AnswerList to user;
3.2.3. Example ๐ธ
okay so here's a full example of how talking to the Directory of Servers actually goes ๐ the < and > tell you who's talking: < is the client (that's you, bestie ๐) and > is the responding server answering back.
> % 220-This is services.bunyip.com running Bunyip-Whois++: DIGGER 1.0.5
> % 220 Ready to go!
< template=serverhandle and bunyip
> % 200 Search is executing
> # FULL SERVERHANDLE BUNYIPCOM01 BUNYIPCOM01
> SERVER-HANDLE: BUNYIPCOM01
> HOST-NAME: services.bunyip.com
> HOST-PORT: 63
> ADMIN-NAME: Patrik Faltstrom
> ADMIN-EMAIL: paf@bunyip.com
> ORGANIZATION-NAME: Bunyip Information Systems Inc.
> DESCRIPTION: USER information
> DESCRIPTION: Directory of Servers
> DESCRIPTION: Toplevel Index server in the world
> MENU-ITEM: World (Bunyip Information Systems inc)
> CITY: Montreal
> COUNTRY: Canada
> # END
>
> # FULL SERVERHANDLE BUNYIPCOM01 BUNYIPCOM02
> SERVER-HANDLE: BUNYIPCOM02
> HOST-NAME: services.bunyip.com
> HOST-PORT: 7778
> ADMIN-NAME: Patrik Faltstrom
> ADMIN-EMAIL: paf@bunyip.com
> ORGANIZATION-NAME: Bunyip Information Systems Inc.
> DESCRIPTION: USER information
> MENU-ITEM: Bunyip Information Systems
> CITY: Montreal
> COUNTRY: Canada
> # END
>
> % 226 Transaction complete
> % 203 Bye, bye
4. Caching ๐พ
A client can cache all information it gets from a server for some time. For example records, IP-addresses of Whois++ servers, the Directory of Services server etc. โจ
A client can itself choose for how long it should cache the information. you're the boss of your own cache, bestie ๐
The IP-address of the Directory of Services server might not change for a day or two, and neither might any other information.
4.1. Caching a Whois++ servers hostname
An example of cached information that might change is the hostname, IP-address and portnumber which a client gets back in a servers-to-ask response. That information is cached in the server since the last poll, which might have occurred several weeks ago ๐ญ So when such a connection fails, the client should fall back to using the serverhandle instead. That means it contacts the Directory of Services server and queries for a server with that serverhandle. Doing this way, the client should always get the last known hostname. it's giving backup plan, and it's iconic ๐ฆ
An algorithm for this might be:
response := servers-to-ask response from server A
IP-address := find ip-address for response.hostname in DNS
connect to ip-address at port response.portnumber
if connection fails {
connect to Directory of Services server
query for host with serverhandle response.serverhandle
response := response from Directory of Services server
IP-address := find ip-address for response.hostname in DNS
connect to ip-address at port response.portnumber
if connection fails {
exit with error message
}
}
Query this new server
5. Security Considerations ๐
Security considerations when using the Whois++ protocol are described in [Deutsch94]. this part is serious, bestie, so read it twice ๐
A client should be able to have a "blacklist" of servers it should not query, because it might happen that fake Whois++ servers get put up on the net. When such a fake Whois++ server is found, a user should be able to configure its client to never query this server. no fake servers allowed in the main character's feed ๐ซ
Note that a client should be careful when expanding a query by either using normal expansion or using the directory of servers. A query might take a long time, so a user should be able to quit in the middle of such a transaction. This is though more a question of user interaction than a plain security issue. ngl that's still a vibe check for the UI team ๐
6. References ๐
- [Deutsch94] Deutsch P., Schoultz R., Faltstrom P., and C. Weider, "Architecture of the Whois++ service", RFC 1835, August 1995.
- [Weider94] Weider C., Fullton J., and S. Spero, "Architecture of the WHOIS++ Index Service", RFC 1913, February 1996.
7. Authors' Addresses ๐ฆ
Patrik Faltstrom
BUNYIP INFORMATION SYSTEMS, inc
310 St Catherine St West, Suite 300
Montreal, Quebec
CANADA H2X 2A1
EMail: paf@bunyip.com
Rickard Schoultz
KTHNOC, SUNET/NORDUnet/Ebone Operations Centre
S-100 44 STOCKHOLM
SWEDEN
EMail: schoultz@sunet.se
Chris Weider
BUNYIP INFORMATION SYSTEMS, inc
310 St Catherine St West, Suite 300
Montreal, Quebec
CANADA H2X 2A1
EMail: clw@bunyip.com
and that's the whole thing, bestie ๐๐ โจ
๐ฆ where this page comes from
- ietf: rfc1914 1996-02
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms