# Two-Level Congestion Control Mechanism (2 LCCM) for Information-Centric Networking
## 4 Implementation
### Transport Layer Protocol  
The goal of ICN is to obtain a chunk with a specified ID from the network. For chunk-oriented characteristics in ICN, we designed the transport layer protocol (TLP) with the chunk as the basic transmission unit and adopt an ID-to-ID paradigm, where the two IDs denote the ID of chunk and the content requester, respectively. During the transmission, the ID of the chunk remains the same, and the IP address of the replica node can be changed so that a chunk can be well supported to be fetched from multiple replica nodes. The TLP is designed to avoid overflowing its buffer or causing network congestion, and it needs to slice the chunk into segments and reassemble them at the receiver side as mentioned above. It is also necessary to ensure that the entire chunk is received correctly and completely before it is passed to the application. In other words, the transport layer protocol needs to implement segmentation and reassemble, congestion control, flow control, reliability, and integrity detection of the chunk [23]. Therefore, as shown in Figure 5, TLP includes five modules: segmentation and reassemble, flow control, preference, reliable transmission, and congestion control. Figure 5: Module diagram of transport layer protocol (TLP). Next, we give a brief description of each of these five modules. The chunk needs to be further segmented at the transport layer to fit the MTU of the link. The transport layer header is added to every segment before it is handed over to the network layer, and these segments are reassembled at the receiver or cache nodes. To avoid receiver buffer overflow due to rate mismatch between the receiver and the sender, the flow control mechanism sets a sufficiently large (at least the size of the chunk) receiver buffer. Preferences are set to accommodate different application preferences for transmission, such as transmission Quality of Service (QoS) and caching collaboration. ICN routers can handle transport layer packets, so cooperative caching policies can be implemented with segments, such as cooperative control of whether the cached chunk is located in the center or at the edge of the network, and cooperative control of the number of cached copies. The reliable transport mechanism includes monotonically increasing packet numbers to avoid retransmission ambiguity and matching of request and response messages for RTT computation. Additionally, it uses checksum computation of the header and payload portions of transport layer packets to detect errors during transmission. To guarantee the reliable delivery of a chunk, the transport layer also needs to do integrity checks on whether the chunk is received in full and whether the chunk size is correct when the chunk is submitted upwards. Error recovery is achieved by timeout retransmission of segments. Congestion control uses the two-level congestion control mechanism proposed in this paper, i.e., rate adjustment and replica selection mechanism. To correctly assemble a chunk and support the reception of different segments in disordered order, the offset position of the payload in the chunk is designed as a field in the transport layer header. To reduce the control signaling overhead and to support multiple response packets corresponding to one request packet at the receiver, the length information of the requested data is added to the request packet. Therefore, the receiver represents the starting position and the length of the requested data by the combination of (offset, length) in the packet header. With this information, the intermediate ICN routers can reorganize the segments from different data sources into one entire chunk. Then they store the chunk and register it to NRS, which becomes a replica node of this chunk [32]. In addition, for the replica switching scenario, even if the replica node is replaced, the received data is still valid and subsequent transmissions are continued from the offset location of the remaining data.