# Internet Cache Protocol

ICP (Internet Cache Protocol) est un protocole Internet utilisé pour coordonner les caches (antémémoires) web. Son objectif est de trouver l'endroit le plus approprié où récupérer un objet demandé par un client dans un contexte où de multiples caches sont utilisés comme un seul site. Le but est d'utiliser les caches aussi efficacement que possible et de minimiser le nombre de requêtes vers le serveur hébergeant l'objet désiré.
Hiérarchiquement, un cache interrogé peut être un de niveau supérieur (parent) ou de niveau égal (frère ou sibling).
Les serveurs parents sont d'ordinaire plus proches du serveur hébergeant l'objet recherché que les serveurs fils. Si un serveur fils ne peut trouver l'objet, la requête est en général relayée vers un serveur de cache parent qui va rapporter, mémoriser (mettre en cache) et finalement transmettre la requête au demandeur. Les serveurs frères (siblings) sont des serveurs de cache d'un niveau hiérarchique égal, dont le but est de répartir la charge.
Quand une requête arrive en cache dans un cluster de serveurs frères, le protocole ICP est utilisé pour interroger les serveurs frères sur les objets qui ont été demandés. Si un serveur frère détient un objet en cache, il sera le plus souvent issus de ce cache et non d'une requête directe sur le serveur original. Ce processus est souvent appelé near miss quand l'objet n'est pas dans le cache du serveur de cache interrogé (raté ou miss) mais qu'il est finalement récupéré depuis celui d'un serveur proche (near) au lieu du serveur original.
Le protocole ICP a été conçu léger pour minimiser le nombre d'aller-retours entre les caches. Il est prévu pour les connexions peu fiables mais rapides.
Le protocole ICP est décrit dans la RFC 2186, son application aux serveurs de cache web hiérarchiques dans la RFC 2187.
Les serveurs mandataires (proxies) qui supportent ICP :
* Harvest
* Squid
* NetCache
* Novell BorderManager FastCache
* Netscape Proxy Server
* DeleGate
* MOWS
* Inktomi Traffic Server
* Cisco CacheEngine
* SkyCache
* Mirror Image
* Microsoft Proxy
* Cisco Content Engine
* CACHEbox (en)
* ProxySG
HTCP, conçu comme successeur d'ICP, tente de résoudre divers problèmes rencontrés dans un déploiement ICP.

## Structure des messages ICP

Un message ICP comprend deux sections :
* l'en-tête (header),
* les données (data).
En-tête La longueur de l'en-tête est fixée à 20 octets (cinq mots de 32 bits).
Données Les données ont une longueur variable limitée par la taille maximale d'un message ICP qui est de 16 384 octets (en-tête comprise).
L'en-tête ICP contient huit champs, dont deux optionnels (champs 5 et 6 en rose dans le tableau).
En-tête ICP :
| Bit offset | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 |
| 0 | Opcode | Opcode | Opcode | Opcode | Opcode | Opcode | Opcode | Opcode | Version | Version | Version | Version | Version | Version | Version | Version | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message | Longueur du message |
| 32 | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête | Numéro de requête |
| 64 | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options | Options |
| 96 | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles | Données Optionnelles |
| 128 | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur | Adresse du demandeur |
| 160+ | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données | Données |