3 Protocol Details

The Retrieval Protocol consists of four types of exchanges: Negotiation request/response, BlockList request/response, Block request/response, and SegmentList request/response as follows (see section 2 for message formats and field definitions):

  • Protocol Version Negotiation: A client-role peer (referred to as client) initiates a protocol version negotiation with a server-role peer (referred to as server) by sending a Negotiation request message (MSG_NEGO_REQ (section 2.2.4.1)), declaring the minimum and maximum protocol versions it supports. The server responds with a Negotiation response message (MSG_NEGO_RESP (section 2.2.5.1)), declaring the minimum and maximum protocol versions it supports. Implementation of the client side of the protocol version negotiation is optional. The server side of the protocol version negotiation MUST be implemented.

  • BlockList request/response: A client initiates a GetBlockList request (MSG_GETBLKLIST (section 2.2.4.2)) to a server to query the list of content blocks available on the server for a given segment ID, and a list of block ranges within the segment, by sending a MSG_GETBLKLIST request. The server responds with a BlockList response (MSG_BLKLIST (section 2.2.5.2)) containing the list of block ranges for the specific segment ID that are within the ranges of the request. If the server does not support the client's protocol version, it treats the request as a Negotiation Request and responds accordingly (see section 3.2.5.1).

  • Blocks request/response: A client initiates a GetBlocks request (MSG_GETBLKS (section 2.2.4.3)) to a server to retrieve a specific block of a given segment, which is identified by the segment ID and the index of the block in the segment. It does this by sending a MSG_GETBLKS request. The server responds with the requested content blocks in a Block response (MSG_BLK (section 2.2.5.3)). If the server does not support the client's protocol version, it treats the request as a Negotiation request, and responds accordingly (see section 3.2.5.1).

  • SegmentList request/response: SegmentList exchanges are restricted to Hosted Cache client/server interaction only. A SegmentList request MUST be sent only by a Hosted Cache Client and it MUST always be directed to a Hosted Cache Server. A client initiates a SegmentList request (MSG_GETSEGLIST (section 2.2.4.4)) to a server to query the availability on the server of an array of segments, each of them identified by its segment ID. The server responds with a SegmentList response (MSG_SEGLIST (section 2.2.5.4)) containing the list of segment ranges for the specific segment IDs that are within the requested array. The indexes specified in the ranges are the indexes of segments in an array of Segment IDs in the originating MSG_GETSEGLIST request. If the server does not support the client's protocol version, it treats the request as a Negotiation request and responds accordingly (see section 3.2.5.1).

The Peer Content Caching and Retrieval Framework then uses the Retrieval Protocol to retrieve and assemble complete segments of content from a combination of sources, including either a set of server peers or a hosted cache, plus the original content server if the former does not have the complete content.