home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_s_z / draft-wessels-icp-v2-00.txt < prev    next >
Text File  |  1996-11-08  |  13KB  |  394 lines

  1.  
  2. Network Working Group                                         D. Wessels
  3. Internet-Draft                                               k claffy
  4.                          National Laboratory for
  5.                                                 Applied Network Research
  6.                                    /UCSD
  7.                                                          5 November 1996
  8.                                                     Expire in six months
  9.  
  10.                 Internet Cache Protocol (ICP), version 2
  11.                    <draft-wessels-icp-v2-00.txt>
  12.  
  13. Status of this Memo
  14.  
  15.  
  16.    This document is an Internet-Draft. Internet-Drafts are working
  17.    documents of the Internet Engineering Task Force (IETF), its areas,
  18.    and its working groups. Note that other groups may also distribute
  19.    working documents as Internet-Drafts.
  20.  
  21.    Internet-Drafts are draft documents valid for a maximum of six months
  22.    and may be updated, replaced, or obsoleted by other documents at any
  23.    time. It is inappropriate to use Internet-Drafts as reference
  24.    material or to cite them other than as ``work in progress.''
  25.  
  26.    To learn the current status of any Internet-Draft, please check the
  27.    ``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow
  28.    Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
  29.    munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
  30.    ftp.isi.edu (US West Coast).
  31.  
  32.  
  33.  
  34. Abstract
  35.  
  36.  
  37.    This draft document describes the Internet Cache Protocol (ICP)
  38.    currently implemented in a few World-Wide Web proxy cache packages.
  39.    ICP was initially developed by Peter Danzig, et. al. at the
  40.    Univerisity of Southern California.  It evolved as an important part
  41.    of hierarchical caching on the Harvest research project.
  42.  
  43.  
  44. Introduction
  45.  
  46.  
  47.    ICP is a packet format used for communicating between WWW caches.
  48.    ICP is primarily used in a cache hierarchy to locate specific WWW
  49.    objects in neighbor caches.  One cache will send an ICP query to its
  50.    neighbors.  The neighbors will send back ICP replies indicating a
  51.    ``HIT'' or a ``MISS.''  ICP can also be used to multiplex
  52.  
  53.  
  54.  
  55. Wessels                                                         [Page 1]
  56.  
  57. Internet-Draft                                               August 1996
  58.  
  59.  
  60.    transmission of multiple object streams over a single TCP connection.
  61.  
  62.    In current practice, ICP is implemented on top of UDP, but there is
  63.    no requirement that it be limited to UDP.  There are some functions
  64.    which work best over UDP, and others which work best over TCP.
  65.  
  66.    In addition to it use as an object location protocol, the packets ICP
  67.    are often used for ``cache selection.''  Failure to receive a reply
  68.    from a cache may inidicate a network or system failure.  The order in
  69.    which the replies arrive may be used to select the ``closest''
  70.    neighbor.
  71.  
  72.  
  73. ICP Packet Format
  74.  
  75.     0                   1                   2                   3
  76.    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
  77.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  78.    |     Opcode    |    Version    |        Packet Length        |
  79.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  80.    |                         Request Number                      |
  81.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  82.    |                            Options                          |
  83.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  84.    |                            Padding                          |
  85.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  86.    |                       Sender Host Address                   |
  87.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  88.    |                                                             |
  89.    |                            Payload                          |
  90.    /                                                             /
  91.    /                                                             /
  92.    |                                                             |
  93.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  94.  
  95.    NOTE: All fields must be converted to network byte order before
  96.    transmission.
  97.  
  98.    Opcode
  99.       One of the opcodes defined below.
  100.  
  101.    Version
  102.       The ICP protocol version number.  At the time of this writing,
  103.       both versions two and three are in use.
  104.  
  105.    Packet Length
  106.       The total length of the ICP packet.
  107.  
  108.  
  109.  
  110.  
  111. Wessels                                                         [Page 2]
  112.  
  113. Internet-Draft                                               August 1996
  114.  
  115.  
  116.    Request Number
  117.       An opaque identifier.  When set in a query packet, the reply
  118.       packets must contain the same value.
  119.  
  120.    Options
  121.       A bitfield of options.  See ``ICP Options'' below.
  122.  
  123.    Padding
  124.       Four bytes of padding; a legacy from previous versions.
  125.  
  126.    Sender Host Address
  127.       The IPv4 address of the host sending the ICP packet.  This field
  128.       should probably not be trusted over what is  provided by
  129.       getpeername(), accept(), and recvfrom().
  130.  
  131.    Payload
  132.       The contents of the Payload field vary depending on the Opcode,
  133.       but most often it contains a null-terminated URL string.
  134.  
  135.  
  136.  
  137. ICP Opcodes
  138.  
  139.  
  140.    Value    Name
  141.    -----    -----------------
  142.        0    ICP_OP_INVALID
  143.        1    ICP_OP_QUERY
  144.        2    ICP_OP_HIT
  145.        3    ICP_OP_MISS
  146.        4    ICP_OP_ERR
  147.        5    ICP_OP_SEND
  148.        6    ICP_OP_SENDA
  149.        7    ICP_OP_DATABEG
  150.        8    ICP_OP_DATA
  151.        9    ICP_OP_DATAEND
  152.       10    ICP_OP_SECHO
  153.       11    ICP_OP_DECHO
  154.    12-20    UNUSED
  155.       21    ICP_OP_RELOADING
  156.       22    ICP_OP_DENIED
  157.       23    ICP_OP_HIT_OBJ
  158.  
  159.    ICP_OP_INVALID
  160.       Used to detect invalid packets.
  161.  
  162.    ICP_OP_QUERY
  163.       A query packet.  NOTE this opcode has a different payload format
  164.  
  165.  
  166.  
  167. Wessels                                                         [Page 3]
  168.  
  169. Internet-Draft                                               August 1996
  170.  
  171.  
  172.       than most of the others.  First is the requestor's IPv4 address,
  173.       followed by a URL.  The requestor address is often left null.
  174.  
  175.       Payload Format:
  176.  
  177.        0                   1                   2                   3
  178.       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
  179.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  180.       |                     Requestor Host Address                  |
  181.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  182.       |                                                             |
  183.       /                       Null-Terminated URL                   /
  184.       /                                                             /
  185.       |                                                             |
  186.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  187.  
  188.       In response to an ICP_OP_QUERY, the receipient must return one of:
  189.       ICP_OP_HIT, ICP_OP_MISS, ICP_OP_ERR, ICP_OP_RELOADING,
  190.       ICP_OP_DENIED, or ICP_OP_HIT_OBJ.
  191.  
  192.    ICP_OP_SECHO
  193.       Similar to ICP_OP_QUERY, but for use in simulating a query to an
  194.       origin server.  When ICP is used to choose the closest neighbor,
  195.       the origin server can be included in the algorithm by bouncing an
  196.       ICP_OP_SECHO packet off it's echo port.  The payload is simply the
  197.       null-terminated URL.
  198.  
  199.    ICP_OP_DECHO
  200.       Similar to ICP_OP_QUERY, but for use in simulating a query to an
  201.       cache which does not use ICP.  When ICP is used to choose the
  202.       closest neighbor, a non-ICP cache can be included in the algorithm
  203.       by bouncing an ICP_OP_DECHO packet off it's echo port.  The
  204.       payload is simply the null-terminated URL.
  205.  
  206.       NOTE: one problem with this approach is that while a system's echo
  207.       port may be functioning perfectly, the cache software may not be
  208.       running at all.
  209.  
  210.  
  211.    The following six ICP opcodes are sent in response to an ICP_OP_QUERY
  212.    packet.  For each one the payload must be the null-terminated URL
  213.    string.  Both the URL string and the Request Number field must be
  214.    exactly the same as from the ICP_OP_QUERY packet.
  215.  
  216.    ICP_OP_HIT
  217.       Sending an ICP_OP_HIT response indicates that the requested URL
  218.       exists in this cache.
  219.  
  220.  
  221.  
  222.  
  223. Wessels                                                         [Page 4]
  224.  
  225. Internet-Draft                                               August 1996
  226.  
  227.  
  228.    ICP_OP_MISS
  229.       Sending an ICP_OP_MISS response indicates that the requested URL
  230.       does not exist in this cache.
  231.  
  232.    ICP_OP_ERR
  233.       Sending an ICP_OP_ERR indicates some kind of error in parsing or
  234.       handling the query packet.
  235.  
  236.    ICP_OP_RELOADING
  237.       Sending an ICP_OP_RELOADING response indicates that this cache is
  238.       up, but is in a ``startup'' mode.  A cache in startup mode may
  239.       wish to return ICP_OP_HIT for cache hits, but not ICP_OP_MISS for
  240.       misses.  ICP_OP_RELOADING essentially means ``I am up and running,
  241.       but please don't fetch this URL from me now.''
  242.  
  243.    ICP_OP_DENIED
  244.       Sending an ICP_OP_DENIED response indicates that the querying site
  245.       is not allowed to retrieve the named object from this cache.
  246.       Caches and proxies may implement complex access controls.  This
  247.       reply can only be interpreted to mean ``you are not allowed to
  248.       request this particular URL from me at this particular time.''
  249.  
  250.    ICP_OP_HIT_OBJ
  251.       Just like an ICP_OP_HIT response, but the actual object data has
  252.       been included in this reply packet.   Many requested objects are
  253.       small enough that it makes sense to include them in the query
  254.       response and avoid the need to make a subsequent HTTP request for
  255.       the object.
  256.  
  257.       An ICP_OP_HIT_OBJ reply will be sent only if the ICP_FLAG_HIT_OBJ
  258.       flag is set in the query packet Options field.
  259.  
  260.       Payload Format:
  261.  
  262.        0                   1                   2                   3
  263.       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
  264.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  265.       |                                                             |
  266.       /                       Null-Terminated URL                   /
  267.       /                                                             /
  268.       |                                                             |
  269.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  270.       |         Object Size           |                             |
  271.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                             |
  272.       |                                                             |
  273.       /                          Object Data                        /
  274.       /                                                             /
  275.       |                                                             |
  276.  
  277.  
  278.  
  279. Wessels                                                         [Page 5]
  280.  
  281. Internet-Draft                                               August 1996
  282.  
  283.  
  284.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  285.  
  286.       The protocol does not impose any limits on the maximum size of the
  287.       Object Data.  Software that the author is familiar with will use
  288.       ICP_OP_HIT_OBJ over ICP_OP_HIT if the entire packet is less than
  289.       the system's maximum UDP transmission size.
  290.  
  291.       The receiving application should check to make sure it actually
  292.       receives Object Size bytes of data.  If it does not, then it
  293.       should treat the ICP_OP_HIT_OBJ reply as though it were a normal
  294.       ICP_OP_HIT.
  295.  
  296.       NOTE: the Object Size field does not necessarily begin on a 32-bit
  297.       boundary as shown in the diagram above.  It begins immediately
  298.       following the NULL byte of the URL string.
  299.  
  300.    The following six opcodes are used for multiplexing object
  301.    transmission over a TCP connection.  These are not in use at the time
  302.    of this writing.
  303.  
  304.    ICP_OP_SEND
  305.       Request for object data (non authoritative).
  306.  
  307.    ICP_OP_SENDA
  308.       Request for object data (authoritative).
  309.  
  310.    ICP_OP_DATABEG
  311.       Beginning of data transmission.
  312.  
  313.    ICP_OP_DATA
  314.       Middle of data transmission.
  315.  
  316.    ICP_OP_DATAEND
  317.       End of data transmission.
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324. ICP Options
  325.  
  326.  
  327.    0x80000000  ICP_FLAG_HIT_OBJ This flag is set in an ICP_OP_QUERY
  328.    packet indicating that it is okay to respond with an ICP_OP_HIT_OBJ
  329.    packet if the object data will fit.
  330.  
  331.  
  332.  
  333.  
  334.  
  335. Wessels                                                         [Page 6]
  336.  
  337. Internet-Draft                                               August 1996
  338.  
  339.  
  340. Missing Features
  341.  
  342.    Note the lack of an HTTP method in the ICP query.  The current
  343.    version can only be used for GET requests.
  344.  
  345.  
  346. Security Considerations
  347.  
  348.    Security is an issue with ICP over UDP because of its connectionless
  349.    nature.  A proxy/cache must only process ICP packets received from
  350.    its known neighbors.  Packets from unknown addresses must be
  351.    discarded.
  352.  
  353.    The ICP_OP_HIT_OBJ packet is especially senstive to security issues
  354.    since it contains actual object data in the response.  In combination
  355.    with IP spoofing it is most likely possible to pollute the cache with
  356.    invalid objects.
  357.  
  358. Author's  Address:
  359.  
  360.    Duane Wessels
  361.    National Laboratory for Applied Network Research/UCSD
  362.    wessels@nlanr.net
  363.  
  364.    K Claffy
  365.    National Laboratory for Applied Network Research/UCSD
  366.    kc@nlanr.net
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391. Wessels                                                         [Page 7]
  392.  
  393.  
  394.