rfc-2651

The Architecture of the Common Indexing Protocol (CIP)

J. Allen, M. Mealling
date1999-08 streamIETF areaapp wgfind statusPROPOSED STANDARD pages19 canonicalhttps://www.rfc-editor.org/rfc/rfc2651 doi10.17487/RFC2651
This document describes the CIP framework, including its architecture and the protocol specifics of exchanging indices. [STANDARDS-TRACK]

Extracted elements (24)

design-rationale §1.1

CIP evolved from Whois++ to extract and generalize the indexing subsystem, replacing ad-hoc data representations with MIME-based structures and abstracting index objects so they apply to multiple application domains beyond directory services.

email

design-rationale §3.1

CIP is a 'backend' protocol spoken only among servers; queries are answered via the server's native data access protocol (e.g., LDAP, HTTP), while index objects travel via separate CIP protocol exchanges. This separation is intentional and fundamental to the architecture.

design-rationale §3.2.3

In multi-protocol application domains, aggregation must ensure referral chains never pass through mesh nodes that don't support the client's native protocol, because clients cannot resolve referrals they can't speak. This is declared a failure of query routing.

design-rationale §3.2.1

Index object payloads are opaque to CIP itself and defined entirely by separate index object specifications. This abstraction is what makes CIP applicable across multiple application domains.

design-rationale §3.1.2

Query routing is a client responsibility: the client collates, filters, and chases referrals. This gives the end-user maximum control over query resolution at the cost of added client complexity. A proxy can optionally decouple referral chasing for simple clients.

design-rationale §3.2.2

The index pushing relationship is designed to lower the barrier to entry for dumb leaf nodes that want to make their index available to the global mesh without implementing the full CIP transaction protocol.

design-rationale §4.3

To avoid scaling issues, no single mandatory 'root' node exists in a CIP mesh. Clients should connect to a reasonably well-connected local server and expand their search upward through servers that poll the initial entry point if no match is found.

interoperability-note §3.2.2

A CIP server that receives an index of an unknown type may pass it forward untouched, or return an error. This behavior exists to allow heterogeneous mesh experiments, though such meshes are considered ill-defined and dangerous.

interoperability-note §1.1

CIP version 3 servers can interoperate with earlier Whois++-era servers (versions 1 and 2) via a short negotiation sequence, despite version 3 being a major protocol overhaul.

interoperability-note §4.3

The Whois++ mesh traversal algorithm from RFC 1914 works unchanged with CIP by substituting 'DSI' for the Whois++ 'handle' concept.

normative-requirement §3.2.2 SHOULD

All indices passed within a given mesh are assumed to be of the same type. Gateways between meshes carrying different index objects are undefined and outside the scope of this specification.

normative-requirement §4.3 MUST

Clients following all referrals must implement a mesh traversal algorithm (as documented for Whois++ in RFC 1914) to detect and avoid referral loops, which could otherwise waste server and client resources infinitely.

normative-requirement §4.1 SHOULD

If more than one index object indicates a referral must be generated to a given dataset, the server should generate only one referral to that dataset, as the client may not be able to detect duplicates.

normative-requirement §3.2.3 MAY

Index object aggregation is only permitted when: (a) all objects to be aggregated cover exactly the same set of protocols per their Base-URI schemes, (b) the aggregating server supports every protocol in those Base-URIs, and (c) the index type specification explicitly defines the aggregation operation.

normative-requirement §3.2.3 MUST

When a server aggregates index objects, the resulting object must have Base-URIs characteristic of the local server for each protocol it supports, and the outgoing objects should have the DSI of the local server.

protocol-element §3.2.1

A CIP index object consists of two parts: a header containing metadata (including 'type', 'DSI', and 'Base-URI' fields) and an opaque payload defined by the index object specification associated with the object's MIME type.

email

protocol-element §3.2.2

A CIP mesh is a set of servers passing indices of the same type, typically arranged hierarchically but explicitly allowed to have lateral links. Loops are discouraged but not prohibited; mesh administrators are encouraged to avoid them.

protocol-element §4.1

A referral must contain at minimum a DSI (to allow clients to detect and avoid referral loops) and a URI (derived from the Base-URI of the matching index object). An optional DSI-Description string should be included when available.

protocol-element §3.2.2

CIP defines two index-passing relationships: a 'polling relationship' where the polled server notifies the polling server of new indices and the polling server may retrieve them immediately or later; and an 'index pushing' relationship where a server sends its index unsolicited.

protocol-element §3.2.1

The Base-URI header in a CIP index object provides the URI(s) that form the basis of any referrals generated from the index block, and constrains aggregation due to multiprotocol concerns.

protocol-element §3.2.1

The DSI (Dataset Identifier) is an identifier chosen from the ISO/CCITT OID space that uniquely identifies a dataset among all datasets indexed by CIP. It is a required header in every index object.

security-consideration §5.1

CIP index objects can leak proprietary or sensitive data if not carefully designed. The risk of reverse-engineering a database from its exported index must be kept consistent with the value of the data; security must be a prime consideration when designing new index object types.

security

security-consideration §5

CIP requires external security services to operate safely; the protocol itself does not provide authentication or data integrity mechanisms for index objects exchanged between servers.

security

security-consideration §5.1

Insertion of false data into a CIP mesh can be used as an attack: adversarial indices can selectively prune parts of a mesh, and CIP provides no mechanism for trusting the authenticity or integrity of the index data it carries.

security