Project

General

Profile

Actions

Task #3033

closed

Forwarding design: Nack

Added by Junxiao Shi almost 9 years ago. Updated almost 5 years ago.

Status:
Closed
Priority:
High
Assignee:
Category:
Forwarding
Target version:
Start date:
Due date:
% Done:

100%

Estimated time:
3.00 h

Description

Design forwarding pipelines and strategy API to support Nack.


Files

forwarding-nack_20150719.pptx (52.1 KB) forwarding-nack_20150719.pptx Junxiao Shi, 07/19/2015 05:23 PM
forwarding-nack_20150729.pptx (50.9 KB) forwarding-nack_20150729.pptx Junxiao Shi, 07/29/2015 08:47 AM
forwarding-nack_20150913.pptx (51.9 KB) forwarding-nack_20150913.pptx Junxiao Shi, 09/13/2015 08:51 PM
forwarding-nack_20150924.pptx (52.6 KB) forwarding-nack_20150924.pptx Junxiao Shi, 09/24/2015 05:01 PM

Related issues 2 (0 open2 closed)

Related to NFD - Task #3032: Determine rules to combine NackReasonsClosedJunxiao Shi

Actions
Related to NFD - Feature #3156: NACK in forwarding and best-routeClosedJunxiao Shi

Actions
Actions #1

Updated by Junxiao Shi almost 9 years ago

  • Status changed from New to In Progress
Actions #2

Updated by Junxiao Shi almost 9 years ago

Initial design contains changes in forwarding pipelines, strategy API, and best-route strategy.

Some forwarding pipelines design is copied from nack_20140731.pptx.

A major problem in forwarding pipelines is: it's unclear how NACK works on a multi-access link.


Another problem is in the current design for best-route strategy:

  1. FIB entry has upstreams P,Q
  2. consumer sends Interest, which is forwarded to P
  3. P returns Congestion, which is returned to consumer
  4. consumer retransmits Interest, which is forwarded to Q
  5. Q returns NoRoute

At this moment, "least severe" (per #3032 note-2 rule) among all NackReasons is Congestion, but we've already returned that.
Should we clear recorded NackReasons when the previous NACK is returned, and return NoRoute this time?

Actions #3

Updated by Junxiao Shi over 8 years ago

20150720 conference call discussed the second problem in note-2.

We conclude that "least severe" is still correct in this case, because when downstream is told "Congestion" and retransmits, the Interest can still go to P.

Actions #4

Updated by Junxiao Shi over 8 years ago

  • Related to Task #3032: Determine rules to combine NackReasons added
Actions #5

Updated by Junxiao Shi over 8 years ago

20150903 conference call approves the design in note-3.

This issue will remain open until NACK behavior of all strategies are designed.

Actions #6

Updated by Junxiao Shi over 8 years ago

  • Related to Feature #3156: NACK in forwarding and best-route added
Actions #7

Updated by Junxiao Shi over 8 years ago

best-route design in note-3 has a limitation:

  P
  |
  R
 / \
B---C
|   |
A   D

In this topology, P announces /P prefix, every link has a delay of 10ms, retransmission suppression is configured at 2ms.

  1. 0ms: A and D express Interest /P/1 at the same time. A's Interest is forwarded along A-B-R; B's Interest is forwarded along D-C-R.
  2. 5ms: A and D retransmits the Interest at the same time. A's Interest is forwarded along A-B-C; B's Interest is forwarded along D-C-B.
  3. 20ms: R receives the two Interests from step1, but notices R-P link has failed, and thus returns a Nack to B and C.
  4. 25ms: B and C receive the two Interests from step2, and forward them again to R.
  5. 30ms: B and C receive the Nack from R. B is still waiting for the response from C, so it will not return the Nack to A and C at this moment. C is still waiting for the response from B, so it will not return the Nack to D and B at this moment.
  6. 35ms: R receives the two Interests from step4, and returns Nack again because R-P link is still down.
  7. 45ms: B and C receive the Nack again from R. But B is still waiting for C, and C is still waiting for B.

Both B and C are waiting for each other, until InterestLifetime expires. No Nack can be sent in this situation.

Actions #8

Updated by Anonymous over 8 years ago

I think the time of 2. should be "15ms" so that the other times match up.

Isn't the retransmission timeout of the scenario (5ms? 15ms?) shorter than expected from real applications?

Does the problem still exist when the retx timeout is higher than the RTT to the producer? (my guess would be that it would not)

Actions #9

Updated by Junxiao Shi over 8 years ago

Reply to note-8:

The timestamp is note-7 step2 is intended to be 5ms. The Interest expressed by A in this step arrives at B at +15ms, and arrives at C at +25ms in step4, where C forwards it to R.

Consumers can set any retransmission timer as they want. The "exponential suppression" procedure (#1913) permits the first retx after 1ms, so a retransmission after 5ms will be forwarded.

Even if we could blame the consumer in this scenario, a slightly different case would be: there are two consumers A1 and A2 connected to B; A1 expresses an Interest in step1, and A2 expresses an Interest in step2. This leads to the same situation.

Actions #10

Updated by Junxiao Shi over 8 years ago

20150910 conference call discussed note-7 "live deadlock" problem.

The solution is:
At step5, B should return NACK to C, because at this moment B is unable to satisfy C's Interest without using C as an upstream.
But B shouldn't return NACK to A yet, because C could return Data to satisfy A.
C does the same and returns NACK to B.
After B receives the NACK from C, B would be able to return NACK to A because both R and C have returned NACK.

I'll update the design to fix this problem.

Actions #11

Updated by Junxiao Shi over 8 years ago

Documentation is updated for #3033 note-10 and #3156 note-10.

Actions #12

Updated by Junxiao Shi over 8 years ago

Design is updated to disable Nack on multi-access faces. See #3156 note-15 note-16.

Actions #13

Updated by Junxiao Shi over 8 years ago

  • Status changed from In Progress to Closed
  • % Done changed from 70 to 100

In contrary to note-5, I decide to close this issue. Nack logic design for MulticastStrategy is moved to #3176.

Designs in this issue will be updated into devguide as part of #3156.

Actions #14

Updated by Teng Liang almost 5 years ago

Note-7 only describes a 2-node scenario, which can be easily extend to an "n-node live deadlock" case. Therefore, a more general condition to handle nack is that - if all upstreams that are not downstream have returned NACK, a NACK is sent back to all downstream.

Actions #15

Updated by Junxiao Shi almost 5 years ago

"n-node live deadlock" case.

Draw a topology and write a packet timing sequence to explain what this is.

Actions

Also available in: Atom PDF