Internet Cache Protocol (ICP), version 2
RFC 2186

Document Type RFC - Informational (September 1997; No errata)
Was draft-wessels-icp-v2 (individual)
Authors Kimberly Claffy  , Duane Wessels 
Last updated 2013-03-02
Stream Legacy
Formats plain text html pdf htmlized bibtex
Stream Legacy state (None)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state RFC 2186 (Informational)
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                         D. Wessels
Request for Comments: 2186                                     K. Claffy
Category: Informational                  National Laboratory for Applied
                                                   Network Research/UCSD
                                                          September 1997

                Internet Cache Protocol (ICP), version 2

Status of this Memo

   This memo provides information for the Internet community.  This memo
   does not specify an Internet standard of any kind.  Distribution of
   this memo is unlimited.


   This document describes version 2 of the Internet Cache Protocol
   (ICPv2) as currently implemented in two World-Wide Web proxy cache
   packages[3,5].  ICP is a lightweight message format used for
   communicating among Web caches.  ICP is used to exchange hints about
   the existence of URLs in neighbor caches.  Caches exchange ICP
   queries and replies to gather information to use in selecting the
   most appropriate location from which to retrieve an object.

   This document describes only the format and fields of ICP messages.
   A companion document (RFC2187) describes the application of ICP to
   Web caches.  Several independent caching implementations now use ICP,
   and we consider it important to codify the existing practical uses of
   ICP for those trying to implement, deploy, and extend its use for
   their own purposes.

1.  Introduction

   ICP is a message format used for communicating between Web caches.
   Although Web caches use HTTP[1] for the transfer of object data,
   caches benefit from a simpler, lighter communication protocol.  ICP
   is primarily used in a cache mesh to locate specific Web objects in
   neighboring caches.  One cache sends an ICP query to its neighbors.
   The neighbors send back ICP replies indicating a "HIT" or a "MISS."

Wessels & Claffy             Informational                      [Page 1]
RFC 2186                          ICP                     September 1997

   In current practice, ICP is implemented on top of UDP, but there is
   no requirement that it be limited to UDP.  We feel that ICP over UDP
   offers features important to Web caching applications.  An ICP
   query/reply exchange needs to occur quickly, typically within a
   second or two.  A cache cannot wait longer than that before beginning
   to retrieve an object.  Failure to receive a reply message most
   likely means the network path is either congested or broken.  In
   either case we would not want to select that neighbor.  As an
   indication of immediate network conditions between neighbor caches,
   ICP over a lightweight protocol such as UDP is better than one with
   the overhead of TCP.

   In addition to its use as an object location protocol, ICP messages
   can be used for cache selection.  Failure to receive a reply from a
   cache may indicate a network or system failure.  The ICP reply may
   include information that could assist selection of the most
   appropriate source from which to retrieve an object.

   ICP was initially developed by Peter Danzig, et. al.  at the
   University of Southern California as a central part of hierarchical
   caching in the Harvest research project[3].

ICP Message Format

   The ICP message format consists of a 20-octet fixed header plus a
   variable sized payload (see Figure 1).

   NOTE: All fields must be represented in network byte order.

      One of the opcodes defined below.

      The ICP protocol version number.  At the time of this writing,
      both versions two and three are in use.  This document describes
      only version two.  The version number field allows for future
      development of this protocol.

Wessels & Claffy             Informational                      [Page 2]
RFC 2186                          ICP                     September 1997

   Message Length

     0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   |     Opcode    |    Version    |         Message Length        |
   |                         Request Number                        |
   |                            Options                            |
   |                          Option Data                          |
   |                       Sender Host Address                     |
   |                                                               |
   |                            Payload                            |
Show full document text