有关ICP(Internet Cache Protocol)协议的总结(一)之RFC 2186

来源:互联网 发布:chrome插件查看源码 编辑:程序博客网 时间:2024/06/07 20:04

本文章主要是基于ICP(Internet Cache Protocol)协议(rfc 2186&2187)的翻译和总结,如果有写的不好的地方,欢迎拍砖!转载请注明出处。谢谢!

RFC 2186:

         ICP is a lightweight message format used for communicating among Web caches.

         ICP是一个在网络中高速缓存服务器间进行通信的轻量级的消息格式。

         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.

         ICP用于缓存服务器之间交换关于URL地址是否存在的消息。缓存间通过交换ICP的产需和会发消息来收集信息,以便选择需要检索的对象的最合理的位置。

         This document describes only the format and fields of ICP messages. A companion document (RFC2187) describes the application of ICP to Web caches.

         RFC2186协议主要描述了ICP消息的格式和使用的域。相关的2187文档定义了ICP针对高速缓存服务器的应用方法。

         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.

         几个独立的高速缓存公司已经使用了ICP技术。我们认为编写一套现有的关于ICP技术进行实施、部署并按照自己的需求使用的手册是非常重要的。


1、介绍

         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是用于Web高速缓存之间通信的消息格式。虽然Web缓存使用HTTP [ 1 ]为对象的数据传输,但是需要一个更简单的,更轻便的通信协议。

         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."

         ICP主要用于缓存网格在邻近的缓存查找特定的Web对象。一个高速缓存发送ICP查询它的邻居。邻居发送ICP答复表示“命中”“未命中”。

         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.

         在目前的实现中,ICP是基于UDP协议实现的,但是并不一定限制非得在UDP协议上实现。我们认为,基于UDP的ICP技术可以为web缓存应用提供重要特性。ICP查询/应答交换需要迅速发生,通常在一两秒钟内。缓存不能在开始检索一个对象之前等待更长的时间。如果没有接收到回复消息,大部分可能是因为网络拥挤或者链路断开。这种情况下我们就不能选择这个临近的缓存。作为邻居缓存之间的及时网络的评价指标,ICP协议在轻量级网络协议(比如UDP)上的表现要比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是一种对象位置协议,ICP的消息可以用来为缓存的选择提供决策机制。如果没有收到来自目标缓存的答复,有可能表明网络或者系统故障。ICP的应答可能包含有关从哪个源中检索目标对象最合适的相关信息。


2、ICP的消息格式

         ICP的消息格式为:20字节的固定头加上可变字节长度的载荷。

注:所有模块必须使用网络字节序。

操作码(Opcode):

         1个字节的操作码。

版本信息(Version):

         ICP协议版本号,2个字节长度。在写这篇文章的时候,有两个版本(V2&V3)在使用。本文档介绍了只有版本2。版本号字段允许未来进行改变

消息长度(Message Length):

         两个字节的数据长度,ICP信息的总长度,并且不能超过16384。

请求消息号(Request Number):

         一个不透明的标识符。回复一个查询时该值必须复制到回复消息中

选项(Options):

         4字节的可选功能的标志位。让这个协议可以再其他版本进行有限方式的扩展。

选项数据(Options Data)

         4字节的可选功能的选项数据。

发送ICP消息的主机地址(Sender Host Address):

         用于标识发送ICP消息的主机的地址。如果此数据是由getpeername(), accept(), 和recvfrom()函数提供的,那么不可信。在这个数据域中有一些原始目的地址的歧义。所以,在实际应用中,该字段是没有使用的。

载荷(Payload):

         内容主要由操作码来决定,它经常包含一个null结尾的URL字符串。

                                                   


3、ICP的操作码

                                                                         
         ICP_OP_INVALID:占位符来检测零填充或畸形的消息。缓存不能主动发起ICP_OP_INVALID消息,可以用ICP_OP_ERR替代。

         ICP_OP_QUERY:是一个查询消息,表示这个操作码是一个不同于其他操作码的负载格式。首先,它是请求者的IPV4地址,后面跟着一个URL。请求的主机地址不是高速缓存生成ICP的消息,而是发起请求的缓存服务器的客户端的地址请求的主机地址通常是由0填充。一个主机地址为全0的ICP请求消息,它的地址应该被作为一个没有指定请求的地址,它不表示一个有效的IPv4地址

          ICP_OP_QUERY的载荷格式:

                                     

         回复ICP_OP_QUERY消息的时候,接收者必须返回一下消息之一:ICP_OP_HIT, ICP_OP_MISS, ICP_OP_ERR, ICP_OP_MISS_NOFETCH,ICP_OP_DENIED, 或者 ICP_OP_HIT_OBJ.

         ICP_OP_SECHO:跟ICP_OP_QUERY相似,但是ICP_OP_SECHO用于向原始服务器的查询。当采用ICP协议选择最近的邻居缓存时,源服务器通常通过从它的应答端口发送一个ICP_OP_SECHO消息被添加到选择算法里。负载也是以NULL为结尾的url。

注意:应答服务器不会解释该数据(即我们可以发送任何内容)。只是用来告诉一个合法的查询和响应与随机的垃圾、端口响应之间的差异

         ICP_OP_DECHO:跟ICP_OP_QUERY相似,但是ICP_OP_DECHO用于不适用ICP协议的缓存服务器。

         以下的6个ICP消息类型是用来对ICP_OP_QUERY信息进行回复的。除非有另外注明,所有的负载都是以NULL结尾的URL字符串。URL字符串和请求号都要和       ICP_OP_QUERY消息中的保持一致

         ICP_OP_HIT:命中消息。表明请求的URL存在于这个缓存中,并且请求者可以检索它。

         ICP_OP_MISS:未命中消息。表明请求的URL不存在于这个缓存中。发起查询的缓存服务器仍然可以选择从当前应答缓存服务器获取URL。

         ICP_OP_ERR:解析错误。表明在解析请求的消息是出现了某些错误。

         ICP_OP_MISS_NOFETCH:ICP_OP_MISS_NOFETCH消息表明,当前缓存已经启动但是处于不想处理未命中的状态。这种状态的一个例子是在启动阶段,高速缓存可以重建对象存储。在这样一种方式缓存可能希望返回缓存命中icp_op_hit,但不icp_op_miss失误。icp_op_miss_nofetch意味着“我现在已经跑起来了但是暂时请不要从获取URL

注意,icp_op_miss_nofetch与icp_op_miss意义不同。icp_op_miss回复消息是邀请到消息中指定的缓存获取URL如果他们的关系允许)icp_op_miss_nofetch是请求该缓存读取URL回复

         ICP_OP_DENIED:ICP_OP_DENIED消息响应表明从这个缓存对象查询的指定目标是不允许检索的。高速缓存和代理可以实施复杂的访问控制。这个答复必须解释为不允许你在这个特定的时间这请求这个特定的URL

         如果告诉缓存收到高频率的ICP_OP_DENIED回复,可能是因为配置错误。告诉缓存应该跟踪所有ICP_OP_DENIED回复,并且如果一个邻居的ICP_OP_DENIED回复超过一定阈值(比如95%或更多),禁用它。

         同样的,缓存应该跟踪每个发送到指定地址的ICP_OP_DENIED消息.如果否认的消息比率超过了阈值(比如95%),那么缓寸可以选择忽略来自该地址的后续所有的icp_op_query消息。直到某种干预的发生。

         ICP_OP_HIT_OBJ:就像一个ICP_OP_HIT一样,但是ICP_OP_HIT_OBJ消息请求的实际对象的数据包含在回复消息里面。

警告:icp_op_hit_obj也有一些负面影响,使其使用不良。它没有采用基于http的数据传输,因此绕过标准的HTTP处理,包括授权和鉴权验证。另一个副作用是icp_op_hit_obj消息往往会比路径MTU大得多,从而导致碎片的UDP数据包发生。由于这些原因,不推荐使用icp_op_hit_obj。

         回复消息时,如果请求中的可选参数没有ICP_FLAG_HIT_OBJ标志,缓存服务器是不能回复ICP_OP_HIT_OBJ消息的。

         ICP_OP_HIT_OBJ的负载格式:

                                               

         接收回复消息的程序必须检查收到的对象的大小是不是跟消息中的一致,如果不一致,ICP_OP_HIT_OBJ消息就应该被当做是普通的ICP_OP_HIT消息对待。

注意:对象的字段大小不一定如之前图一样以32位bit的开头。它开始后立即跟上以NULL结尾的URL字符串

         UNRECOGNIZED OPCODES(未识别的操作码):采用无法识别或者没有使用的操作码的ICP消息应该被屏蔽掉。


4、ICP消息的可选标志位(ICP Option Flags)

         0x80000000 ICP_FLAG_HIT_OBJ这个标志被设置在一个icp_op_query消息中,表明如果对象数据满足需求,那么可以回复一个icp_op_hit_obj消息

         0x40000000 ICP_FLAG_SRC_RTT:这个标志被设置在一个icp_op_query消息中,表明请求者希望回复者的消息中包括向源服务器的rtt测量结果。在收到的带有ICP_FLAG_SRC_RTT标志位设置了的ICP_OP_QUERY消息中,缓存服务器应该查询有关RTT测量的内部数据库。如果可用,RTT值必须被表示为一个16位的整数,单位是毫秒。如果不可用,应答者可以将RTT值为零,或清除icp_flag_src_rtt位在ICP的答复。ICP消息在进行RTT测量时不能被延迟。

         这个标志被设置在ICP应答消息(icp_op_hit,icp_op_miss,icp_op_miss_nofetch,或icp_op_hit_obj)表明,选择数据字段的低16位包含对请求url中给出的主机地址的RTT测量数据。如果在请求消息中没有icp_flag_src_rtt,那么在回复消息中也不可以存在它。如果在请求消息中有icp_flag_src_rtt,那么在回复消息中他是可有可无的。

0 0
原创粉丝点击