# Framework for Congestion Control in Delay Tolerant Opportunistic Networks DTNs mainly focus on increasing the probability of delivery to the destination and on minimising delays. - Using complex graph theory techniques - Where load is unfairly distributed towards the better connected nodes - May lead to network congestion ## CAFREP CAFREP or Congestion Aware Forwarding and Replication - Detects the congested nodes and parts of the network - Moves the traffic away from hot-spots and spreads it around while preserving the directionality of the traffic and not overwhelming non-interested nodes with unwanted content - Adaptively changes message replication rates When deciding on the best carrier and the optimal number of messages, CAFREP dynamically combines three heuristics 1. **Contact** analytics 2. Predictive **node congestion** (node storage and in-network delays) 3. Predictive **ego network congestion** ![img](img/g.png) As you move up each layer, more information is exchanged between the nodes. ### Metrics ###### Node Retentiveness - Aims to avoid or replicate proportionally less at the **nodes** that have lower buffer availability. $$ Ret(X) = B_c(X) - \sum^N_{i=1} \space M^i_{size}(X) $$ Node $X$ has a buffer of size $B_c(X)$. When a message of size $M^i_{size}$ is sent to node $X$, its available buffer size is the total buffer minus the memory taken by the sum of all messages in the buffer. ###### Node Receptiveness - Aims to avoid or decrease sending rates to the **nodes** that have higher in-network delays $$ Rec(X) = \sum^N_{i=1}(T_{now} - M^i_{received}(X)) $$ How long a node keeps a message before forwarding it on. If a high level of receptiveness is found on a node, it means the node isn't useful as messages aren't forwarded. This could mean the node has limited connections. ###### Node Congestion Rate - Aims to avoid or decrease sending rates to **nodes** that become congested at a higher rate $$ CR(X) = \frac{100\cdot T_{FullBuffer}(X)/T_{TotalTime}(X)}{\frac{1}{N}\cdot \sum^N_{i=1}(T_iend(X) - T_istart(X))} $$ Estimates the time between a node being full and becoming full again. Measures the time the node is unusable. #### Ego Network Congestion Metrics ###### Ego Network Retentiveness - Aims to replicate less at the **parts of the network** with lower buffer availability. $$ EN_{Ret}(X) = \frac{1}{N}\sum^N_{i=1}Ret(C_i(X)) $$ Gets the average retentiveness of node $X$ and its neighbours $c_i(X)$. ###### Ego Network Receptiveness - Aims to replicate less at **parts of the network** with higher delays. $$ EN_{Rec}(X) = \frac{1}{N}\sum^N_{i=1}Rec(c_i(X)) $$ ###### Ego Network Congestion Rate - Aims to send less to the **parts of the network** that have higher congestion rates. - This is useful if a node isn't congested but all connected nodes are. It stops the node from being used. $$ EN_{CR}(X) = \frac{1}{N}\sum^N_{i=1}CR_i(X) $$ #### Contents of CAFREP Node ![img](img/h.png) $$ Replication\space rate = M \times \frac{TotalUtil(Y)}{TotalUtil(X) + TotalUtil(Y)} $$ Total utility changes constantly. The replication limit grows to take advantage of all available resources and backs off when congestion increases. Social utility prevents replication at a high rate on free nodes that are not on the path to the destination.