<?xml version="1.0" encoding="us-ascii"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
      <!ENTITY rfc2629 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml'>
 ]>
<?rfc toc="yes" ?>
<?rfc compact="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes" ?>
<?rfc linkmailto="yes"?>
<?rfc strict="yes"?>
<?rfc subcompact="no"?>
<rfc category="info" docName="draft-salsano-rditp-00" ipr="trust200902">

  <front>
    <title abbrev="Receiver driven trasport for CONET">Receiver driven trasport protocol for CONET ICN</title>


    <author initials="S." surname="Salsano" fullname="Stefano Salsano">
      <organization>Univ. of Rome "Tor Vergata"</organization>
      <address>
        <postal>
          <street>Via del Politecnico, 1</street>
          <code>00133</code> 
          <city>Rome</city> 
          <country>Italy</country>
        </postal>
        <email>stefano.salsano@uniroma2.it</email>
      </address>
    </author>

	<author initials="M." surname="Cancellieri" fullname="Matteo Cancellieri">
      <organization>Univ. of Rome "Tor Vergata"</organization>
      <address>
        <postal>
          <street>Via del Politecnico, 1</street>
          <code>00133</code> 
          <city>Rome</city> 
          <country>Italy</country>
        </postal>
        <email>matteo.cancellieri@gmail.com</email>
      </address>
    </author>

	<author initials="A." surname="Detti" fullname="Andrea Detti">
      <organization>Univ. of Rome "Tor Vergata"</organization>
      <address>
        <postal>
          <street>Via del Politecnico, 1</street>
          <code>00133</code> 
          <city>Rome</city> 
          <country>Italy</country>
        </postal>
        <email>andrea.detti@uniroma2.it</email>
      </address>
    </author>


    <date day="25" month="November" year="2011"/>
    <area>Transport</area>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>Information Centric Networking</keyword>
    <keyword>Transport Protocol</keyword>
    <keyword>Congestion Control</keyword>

    <abstract>
      <t>Let us consider an Information Centric Networking (ICN) solution, in which an End Node requests for a content sending "content requests" (or "interest packets"). The content is provided back to the requestor by the "origin" node or by an intermediate node that had cached the content. The content is usually divided into "chunks" that can be individually requested, sent back to the requester, cached into intermediate nodes. The sending rate of content requests can be adjusted in order to perform congestion control, implementing a receiver driven transport protocol. As it can be useful to have large chunks (significantly larger than the Maximum Tranfer Unit across the network), the trasport protocol should also be used to further segment the chunks rather than relying to IP fragmentation. In this memo we define a receiver driven trasport protocol for ICN, which relies on the CONET ICN solution described in a companion draft.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction" toc="default">
      <t>
	  <xref target='I-D.CONET'/> proposes an approach to Information Centric Networking <xref target='Koponen07'/><xref target='Jacobson09'/> based on extending the IP protocol by using a new IP Option called CONET IP option (defined both for IPv4 <xref target='RFC0791'/> and IPv6 <xref target='RFC2460'/>). The CONET IP option can be used by routers to support content aware networking, in addition to classical address based networking. Further information on the proposed solution can also be found in <xref target='CONET11'/>.
	  </t>
	  <t>
	  In this memo we define a receiver driven trasport protocol for CONET ICN, called RDITP - Receiver Driven ICN Transport Protocol. The trasport protocol is able to provide a reliable transfer of the content and to perform congestion control in TCP-friendly way. 
	  </t>
	  <t>
	  As shown in <xref target="architecture" />, the CONET architecture proposed in <xref target='I-D.CONET'/> foresees End-Nodes, Serving Nodes and CONET nodes. End-Nodes request for content. Serving Nodes provide content. CONET nodes: i) forward content requests from End-Nodes to Serving Nodes; ii) deliver content from Serving Nodes to End-Nodes; iii) may cache content and therefore provide it to End-Nodes without contacting the Serving Node.
	  </t>
<?rfc needLines="20" ?> 
         <figure anchor="architecture" title="CONET architecture">
           <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

              requests for content
              ------------------->
              content is provided
              <-------------------
  +----+                              +----+      +----+
  |    |                            --|    |------|    | 
  +----+\                         /   +----+      +----+
         \    +----+      +----+ /                       
          ----|    |------|    |/                        
              +----+      +----+                        
End-Node      legacy    Intermediate   Border     Serving
              IP router     Node        Node        Node
    |                                   |
    +---------CONET next hop----------->+

		   ]]></artwork> </figure>


     </section>

    <section anchor="anchor-section-1" title="CONET Basics">

        <t>In this section we recall the basic aspects of the CONET ICN solution, as needed to introduce the proposed Receiver Driven ICN Transport Protocol.</t>

<t>
   The figure below shows the CONET protocol stack. CONET protocol is divided in two sub-layers, whose data unit are respectively denoted as "Carrier Packets" and "CONET Information Units". Two types of CONET Information Units are currently defined ("Interests CIU" and "Named Data CIU"). The CONET Information Unit Type field in the CONET IP option differentiates among the two types. A CONET Information Unit (CIU) can be split into different Carrier Packets. Each Carrier Packet is transported by an IP packet. 
</t>

<?rfc needLines="15" ?> 
<figure anchor="CONET-layers" title="CONET protocol layers"> <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

    +--------+--------+--------+ \
    | CONET Information Units  |  |
    +--------+--------+--------+  |
                                  | 
    +--------+--------+--------+  |- CONET protocol
	|     Carrier Packets      |  |
    +--------+--------+--------+  |
                                  | 
    +--------+--------+--------+ /
    | IP (with CONET IP option)|
    +--------+--------+--------+
           ]]></artwork> </figure>
<t>
   The generic structure of a Carrier Packet (CP) is reported hereafter:
</t>
<?rfc needLines="10" ?> 
<figure> <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

    +-------------------------+
    |    CP Payload header    |
    +-------------------------+
    |       CP Payload        |
    +-------------------------+
    |      CP Path state      |
    +-------------------------+
   ]]></artwork> </figure>

    <t>"Interest CIU" are used by End-Nodes to request for content. The Interest CIUs contain the identifier of the content called ICN-ID and transported within the IP CONET Option. Optionally, the IP CONET option can explicitly carry a "Chunk Sequence Number" to identify one of the chunk in which a content has been split. Another possibility is that the chunk number is carried within the ICN-ID itself. A Serving Node or a CONET node that had previously cached the information can reply to the content request by sending a "Named-data CIU". These Named-data CIU will also contain the ICN-ID in the IP CONET Option.</t>

<t>
   The CP payload header contains the length of the CP Payload and allows to identify the start of the CP Path state field. The use of CP Path state field was explained in <xref target='I-D.CONET'/> and is out of scope here.
</t>
<t>
   The information contained in the CP Payload header is specific for each CIU type. The information transported in the CP Payload header can be used to implement the functionalities of a transport protocol, providing a reliable transmission of content and performing congestion control. In this document we define the CP Payload header for Interest and Data CIUc using the RDITP protocol.
</t>

   <t>
   An end-node that wants to retrieve a content (or better a Chunk of a content) issues an Interest CIU, the ICN-ID and (optionally) the Chunk Sequence Number of the required Content are respectively transported in the ICN Identifier (ICN-ID) field and in the CSN field of the CONET IP option. Assuming for simplicity that the Interest CIU will fit into a single Carrier Packet, the Interest CIU will be included in the Carrier Packet that in turn is inserted into an IP packet. The RDITP comes into play because a Chunk of content may need to be fragmented in more than one Carrier Packet, as the chunk size can be much larger than the layer 2 MTU. For example with a chunk size of 64 KB or 256 KB and an MTU of 1500 bytes, the chunks need to be split in tens or hundreds of packets. In this case the RDTP allows to specify in the request the specific segment of the chunk that is required. 
   </t>

</section>

<section anchor="anchor-section-2" title="RDITP Data Structures">
      <section anchor="anchor-interest-ciu-structure" title="Interest CIU Payload Header">

<t>
   The structure of the interest CP payload header is reported hereafter:
</t>
<?rfc needLines="10" ?> 
<figure> <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

    +-------------------------+
    |TTrrrrrPI| ..Left Edge...|
    +-------------------------+
    |    ...Right Edge...     |
    +-------------------------+

   ]]></artwork> </figure>
<t>
	Flags:
</t>
<t>
		TT : Trasport protocol type. It allows to define different transport protocols. 0 indicates RDITP which is defined in this draft. 1-3 are reserved and can be used to indicate different trasport protocols. The rest of the bits in this field and in the following bytes may have a different semantic depending on the transport protocol, we are providing here only the defintion for TT=0 i.e. the RDITP protocol. Therefore the number of transport protocols is NOT limited to 4. 
</t>
<t>
		P : Prefetch flag - This flag indicates that this packet comes from a receiver that asks to perform prefetch on the content chunks.
</t>
<t>
		I : Ask Chunk Info flag - If this flag is set, the serving node is requested to add chunk-related information to the data CIU payload, particularly the chunk size.
</t>
<t>
	Left edge/Right edge : These fields contain respectively the value of first and the last byte of the requested chunk segment. The fields are encoded with the EVLE (Efficient Variable Lenght Encoding) mechanim described below		
</t>

</section>

      <section anchor="anchor-data-ciu-structure" title="DATA CIU Payload Header">

<t>
   The structure of the data CP payload header is reported hereafter:
</t>
<?rfc needLines="10" ?> 
<figure> <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

    +-------------------------+
    |TTrFSSSS| ...Left Edge...|
    +-------------------------+
    |    ...Right Edge...     |
    +-------------------------+
    | (Optional) Chunk size   |
    +-------------------------+

   ]]></artwork> </figure>

<t>
	Flags: 
</t>
<t>
		TT : Trasport protocol type. It allows to define different transport protocols. 0 indicates RDITP which is defined in this draft. 1-3 are reserved and can be used to indicate different trasport protocols. The same considerations apply that have been reported above for the TT subfield in the interest CIU payload header.  
</t>
<t>
		F : Final segment flag - If this bit is set to 1 this carrier packet carries the last segment of a chunk.
</t>
<t>
		SSSS : Chunk size flag - This flag describes the size of a chunk as follows:
</t>
<?rfc needLines="12" ?> 
<figure> <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

   0 : unspecified (it may have been already indicated
       in a previous data)
   1 : the chunk size is trasnported in the optional
       Chunk size field, encoded with the EVLE variable length
       encoding described below
   2-16 : let n be the value from 2 to 16, it can represent
          14 different chunk sizes from 2KBytes to 8Mbyte
          with the following relation:
          chunk size = 2 ^ (9+n)
           ]]></artwork> </figure>

<t>
	Left edge/Right edge : These fields contains respectively the value of first and the last byte of the trasported chunk segment. The fields are encoded with EVLE variable length encoding described below. These fields carry the actual value of the segment transported that may differ from the request.	
</t>
 </section>

      <section anchor="anchor-EVLE" title="EVLE Efficient Variable Length Encoding">

<t>
   Some of the fields described above are encoded using a variable lenght encoding that we denote as "Efficient Variable Lenght Encoding". The same encoding is used for the Chunk Sequence Number (CSN) field in the CONET IP Option, as described in <xref target='I-D.CONET'/>. To help the reader, we report the definition of the encoding hereafter. An EVLE field is represented with a variable number of bytes. An initial bit pattern determines the length of the EVLE field.
</t>

<?rfc needLines="35" ?> 
<figure><artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[

1 byte EVLE (7 bits range)
    +--------+
    |0       | 
    +--------+

2 bytes EVLE (15 bit range)
    +--------+--------+
    |10               | 
    +--------+--------+

3 bytes EVLE (21 bit range)
    +--------+--------+--------+
    |110     |        |        |
    +--------+--------+--------+

4 bytes EVLE (28 bit range)
    +--------+--------+--------+--------+
    |1110    |        |        |        |
    +--------+--------+--------+--------+

5 bytes EVLE (32 bit range)
    +--------+--------+--------+--------+
    |11110000|        |        |        |
    +--------+--------+--------+--------+
    |        |
    +--------+

6 bytes EVLE (40 bit range)
    +--------+--------+--------+--------+
    |11110001|        |        |        |
    +--------+--------+--------+--------+
    |        |        |
    +--------+--------+

           ]]></artwork></figure>

<t>
   As explained in in <xref target='I-D.CONET'/>, binary patterns from 11110010 to 11111111 are reserved and could be used to extend the EVLE range if needed. With the above definion the maximum value is 2^40, roughly 1 Tera.
</t>

 </section>
 </section>

<section anchor="anchor-section-3" title="RDITP mechanisms">

<t>
The transport protocol described in this draft mimics the TPC mechanisms described in <xref target='RFC2581'/>, with the required adaptations for a receiver driven approach. In fact, while in TCP the sender sends data segment and implements retransmissions and congestion control based on the reception of ACKs, in ICN based content download the receiver asks for content sending the Interests and implements re-sending of Interests and congestion control based on the reception of Data. </t>
<section anchor="anchor-section-3-congestion" title="Congestion control mechanisms">

<section anchor="anchor-fast-rec-ret" title="Fast recovery and fast retransmit">
<t>
The receiver bases its flow control on the received data CP. The out of sequence recognition is based on the expected chunk number and segment bytes. When three out-of-sequence data CP are received the slow start threshold (ssthresh, see <xref target='RFC2581'/>) is set to half the window plus the 3 data carrier packet already received and the interest for the missing segment is retransmitted.
</t>
</section>
<section anchor="anchor-slow-start-ca" title="Slow start and congestion avoidance">
<t>
To manage the increase of congestion window slow start and congestion avoidance mechanism are performed. During slow start, (e.g. the beginning of the connection), the congestion window increases of an amount equal to the received data CP. This corresponds to an "exponential" growth of the window. During congestion avoidance, the growth of the window is aproximately "linear" with time. 
Let us define a "segment" as the portion of content transported in a data CP. We define the congestion window cwnd in segments. During slow start cwnd = cwnd + 1 for each received data CP. During congestion avoidance cwnd = cwnd + 1/cwnd for each received data CP. 
</t>
</section>
</section>
<section anchor="anchor-section-3-rditp" title="RDITP specific mechanisms">
 <section anchor="anchor-prefetch-option" title="Prefetch option">
<t>
In a ICN based network, we can have applications separately requesting the download of each chunk of content. In our RDITP approach this means that we can only request the segments of a given chunk after that we have received the request for the chunk coming from the application. The application may implement retransmission and congestion control, therefore the RDITP could receive requests for more than a chunk of the same content in parallel. Anyway the interaction between the congestion control performed at application level and the congestion control performed at RDITP level could prove inefficient. Therefore we believe that the API offered to the application should allow the application to request for a whole content (or for the content starting from a given chunk number). Then the RDITP protocol can handle the retrieval of all the (rest of) the content. Therefore the RDITP protocol offers also a "prefetch option". Whit the prefetch option active, if the congestion window has space left, the mechanism allow to issue requests for segments of next expected chunks, without waiting for an explicit request from application level.
</t>
</section>
 <section anchor="anchor-chunk-info" title="Request chunk information">
<t>
When the transmission start, the receiver must issue a request for at least the chunk size. Receiver should set the flags in carrier packet accordingly to <xref target='anchor-interest-ciu-structure'/>. The data ciu requested will carry at least the chunk size, receiver should use this information to create data structure best suited for the chunk size.
</t>
</section>
</section>

</section>

    <section title="Acknowledgments">
      <t>We acknowledge the financial support by the EU in the context of the CONVERGENCE research project.</t>
	</section>

    <section title="Performance Considerations" anchor="perf-consider">

      <t> </t>
    </section>

    <section title="IANA Considerations" anchor="iana">
      <t>This document requires the allocation of one IP option by the IANA.</t>
      <t>This document requires the allocation of one IP protocol number by the IANA.</t>

      <t>This document requires that IANA will maintain the registry of CONET namespaces.</t>


    </section>

    <section title="Security Considerations" anchor="security">
      <t>Security considerations to be provided</t>
    </section>

  </middle>

  <back>

    <references title="Normative References">

&rfc2629;

<reference anchor='RFC0791'>

<front>
<title abbrev='Internet Protocol'>Internet Protocol</title>
<author initials='J.' surname='Postel' fullname='Jon Postel'>
<organization>University of Southern California (USC)/Information Sciences Institute</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>

<code>90291</code>
<country>US</country></postal></address></author>
<date year='1981' day='1' month='September' />
</front>

<seriesInfo name='STD' value='5' />
<seriesInfo name='RFC' value='791' />
<format type='TXT' octets='97779' target='http://www.rfc-editor.org/rfc/rfc791.txt' />

</reference>

<?rfc include="reference.RFC.2460.xml"?>


    </references>

    <references title="Informative References">

      <reference anchor="Koponen07">
<!--T. Koponen, M. Chawla, B.G. Chun, A. Ermolinskiy, Kye Hyun Kim, S. Shenker, I. Stoica: "A data-oriented (and beyond) network architecture", Proc. of ACM SIGCOMM 2007
 -->
         <front>
               <title>A data-oriented (and beyond) network architecture</title>
               <author initials="" surname="T. Koponen et al." fullname="">
               <organization abbrev=""></organization>
			   </author>
               <date year='2007' />
            </front>
            <seriesInfo name="Proc. of ACM SIGCOMM 2007" value=""/>
         </reference>


      <reference anchor="Jacobson09">
<!--V. Jacobson, et al., "Networking named content", in Proc. of ACM CoNEXT 2009
 -->
         <front>
               <title>Networking named content</title>
               <author initials="" surname="V. Jacobson, et al." fullname="">
               <organization abbrev=""></organization>

			   </author>
               <date year='2009' />
            </front>
            <seriesInfo name="Proc. of ACM CoNEXT 2009" value=""/>
         </reference>



      <reference anchor="CONET11">
<!--A. Detti, N. Blefari-Melazzi, S. Salsano, M. Pomposini,
"CONET: A Content Centric Inter-Networking Architecture", ACM SIGCOMM Workshop on Information-Centric Networking (ICN-2011), Toronto, Canada, August 2011.
 -->
         <front>
               <title>CONET: A Content Centric Inter-Networking Architecture</title>
               <author initials="" surname="A. Detti, et al." fullname="">
               <organization abbrev=""></organization>

			   </author>
               <date month='August' year='2011' />
            </front>
            <seriesInfo name="ACM SIGCOMM Workshop on Information-Centric Networking (ICN-2011), Toronto, Canada" value=""/>
         </reference>


<reference anchor="I-D.CONET">
 <front>
  <title>An IPv4 Option to support Content Networking</title> 
 <author initials="A" surname="Detti" fullname="Andrea Detti">
  <organization /> 
  </author>
 <author initials="S" surname="Salsano" fullname="Stefano Salsano">
  <organization /> 
  </author>
 <author initials="N" surname="Blefari-Melazzi" fullname="Nicola Blefari-Melazzi">
  <organization /> 
  </author>
  <date month="September" day="30" year="2011" /> 
 <abstract>
  <t>The Content Centric Networking paradigm, also known as Named Data Networking, shifts the focus of networking from providing connections between hosts to efficiently providing content to the users. The work on CCN has traditionally been performed looking at "clean-slate" solutions which aims to replace IP with a new paradigm. On the other hand, in this memo we propose an "integration" approach to Content Centric Networking, i.e. we extend the IP protocol using a new IP Option. The new IP option is used by routers to support networking based on content rather than (or better in addition to) end-point addresses.</t> 
  </abstract>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-detti-conet-ip-option-01" /> 
  <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-detti-conet-ip-option-01.txt" /> 
  </reference>

	<?rfc include="reference.RFC.2581.xml"?>

	</references>
  </back>
</rfc>


