Feature #5029
Updated by Teng Liang about 5 years ago
The current version of self-learning forwarding strategy Self-learning mainly handles no-next-hop the no-nexthop case, and uses multicast strategy while best-route handles better with one or more than one multiple next hop(s). This is far away from being useful or robust in real usage, so hops and Interest retransmission. To provide a better strategy, we plan to improve merge self-learning in four aspects: * **Interest Retransmission Suppression** * Add into best-route. The ideal case is to make self-learning a retransmission suppression decision algorithm module that suppresses retransmissions using exponential backoff into Interest processing. can be easily added to strategies. However, how to modularize self-learning is not the task of this issue. * **Better next hop choice** * If After the code merging, the main issue left is how to handle NACK. The current NACK handler picks the NACK with the least severe reason (if there are multiple next hops exist, NACKs), and send it back to downstreams. Currently, Best-route strategy uses this handler. In our tests, where there are two paths to different producers. Best-route picks one path and gets NACK (because we killed the producer), then it forwards the NACK back to consumer instead of trying an eligible alternative path. If the consumer app gives up on receiving no-route NACK (e.g., ndncatchunks), it is over. To improve the NACK handling, we give a different design, i.e., when receiving a no-route NACK from one next hop with hop, the lowest cost forwarding plane should be picked. For a retransmitted Interest that can be forwarded, forward it able to an unused try other next hop with the lowest cost; hops if all next hops have been tried, pick the first chosen next hop to forward. there are any. More specifically, * **NACK handling** 1. Send Interest to an eligible alternative unused next hop on receiving a no-route NACK 2. in best-route strategy * Once all next hops return no-route NACK * if this node is consumer, reinitiate discovery Interest flooding in the self-learning module * if this node is not consumer, send the NACK back to downstreams * **Timeout handling** * If It is better to implement the same retransmitted Interest has been forwarded 5 times (RETX_TRIGGER_BROADCAST_COUNT), reinitiate Interest flooding. Read [self-learning packet processing](https://github.com/philoL/NDN-Self-Learning/blob/master/self-learning-v2.pdf) flows for more details. new NACK handler as a module, so other strategies can use it.