Project

General

Profile

Feature #1913

Updated by Junxiao Shi almost 10 years ago

Currently, BestRoute v2 v.2 strategy uses a fixed time interval to suppress any potential retransmissions retransmissions** from client side. 
 This is used to prevent in interest of preventing accidental/malicious clients from sending Interest end-to-end. 

 ** retransmission = similar interest received from the face it was received before.    On p2p links it is guaranteed to be retransmission, on multicast links it may be necessary to use lower-layer identities to determine the retransmission event. 

 However, fixing the interval removes ability for low-RTT communication to retrieve data when losses happen. 

 
 Enabling RTT estimation could be a potential option, but given that this estimation would never be reliable (even if granularity of the estimation was Data data packet), multi-path nature of Interest forwarding and caches would make such estimation close to useless). 
 Another point against using RTT is that the clients themselves be using RTT estimation to detect losses, which results in double-control loop and potentially unstable behavior. 

 Alternative and simpler approach is to use exponential back-off approach with some short (fixed or "estimated") value. 
 This way, we still give the end-clients control over the retransmission, but effectively prevent abuse of the mechanism. 

 Detailed steps for the proposal: 

 - Set `INITIAL_SUPPRESSION_INTERVAL` = 1ms    (or even lower) 

 - Define `SuppressionInfo` class derived from `StrategyInfo` to hold `time::Duration` and `time::steady_clock::TimePoint` values: 

         class SuppressionInfo 
         { 
         ... 
         public: 
             time::Duration suppessionInterval; 
             time::steady_clock::TimePoint suppressUntil; 
         }; 

 - On incoming interest: 

   * if new PIT entry 

      + install `SuppressionInfo` on PIT entry, initializing 

             suppessionInterval = `INITIAL_SUPPRESSION_INTERVAL` 

             suppressUntil = time::steady_clock::now() + suppessionInterval 

      + proceed with normal Interest processing 

   * if retransmission detected 

      + retrieve StrategyInfo from PIT entry 

      + if `suppressUntil` larger or equal to `time::steady_clock::now()` abort processing 

      + otherwise update `SuppressionInfo` values: 

             suppessionInterval = 2 * suppessionInterval 

             suppressUntil = time::steady_clock::now() + suppessionInterval 

      + proceed with normal Interest processing 

Back