[Ndn-interest] NFD Interest Aggregation at Intermediate Router
Stefano Lupo
lupos at tcd.ie
Wed Mar 13 17:24:12 PDT 2019
HI Junxiao.
I had not set a strategy for the prefix on any of the nodes, so I would
imagine it is just the default for each of them? Best route probably? I
am happy to try other strategies!
In this case, it was ~16 seconds (according to the logs
<https://github.com/stefano-lupo/NFD-Interest-Aggregation-Logs/blob/master/nodeE_snipped.log#L28-L44>).
In the actual use case, it would likely be somewhere between 0-500 ms,
but there would be no guarantees. There would also be some short-lived
caching involved which would cover the case where the data has already
been retrieved from G by the time B is expressing an interest for it.
I'm not quite sure I follow the reasoning behind the time window. From
E's point of view, does it think the second interest is a re-expression
from the same node since the time between the Interests was larger than
a few ms? That is, it thinks node A is re-expressing the interest for
some reason, even though the initial interest has not yet exceeded it's
lifetime?
Thanks for the quick reply!
Stefano.
On 13/03/2019 23:53, Junxiao Shi wrote:
> Hi Stefano
>
> What forwarding strategy are you using on this prefix?
> How much time elapses between A's Interest and B's Interest arrive at
> E? If this time is too long, many strategies may think that the
> consumer believes the Interest has been lost, and would thus resend
> the Interest. The threshold is usually a few milliseconds.
>
> Yours, Junxiao
>
>
> On Wed, Mar 13, 2019, 19:46 Stefano Lupo <lupos at tcd.ie
> <mailto:lupos at tcd.ie>> wrote:
>
> Hello everyone.
>
>
> Sorry in advance if this has been discussed elsewhere, or if I am
> overlooking something! I am currently working on a project using
> NDN and have encountered a problem with interests not being
> aggregated as I thought they would be. To highlight the issue
> consider the following case:
>
> ---- B
>
> /
>
> G --- E
>
> \
>
> ---- A
>
> In this example, G is the producer of some data under //test/g/, A
> and B are consumers interested in the data G produces and E is an
> intermediate router connecting G to A/B. Each of these nodes are
> running in a docker container on the same machine and I set up the
> faces and routes before hand using /nfdc/ in the following manner:
>
> - On *nodeA*: /nfdc face create udp://nodee.com
> <http://nodee.com>; nfdc route add /test/g <face_id_of_e>/
>
> /- //On *node**B*: //nfdc face create udp://nodee.com
> <http://nodee.com>; nfdc route add /test/g <face_id_of_e>/
>
> /- //On *nodeE*: ///nfdc face create udp://nodeg.com
> <http://nodeg.com>; nfdc route add /test/g <face_id_of_g>//
>
> Note I don't make faces / routes in the direction of the dataflow
> (i.e. there is no premade face/route from E --> A) as I don't
> think they are needed. Also these host names resolve correctly
> through the use of an overlay network in docker.
>
> //
> //
>
> Node G also runs NFD and a jNDN app which registers the prefix
> //test/g /and I can control when to call /face.processEvents()
> /using a key stroke, so that I can control when things happen.
>
>
> I then ran this test with NFD's /Forwarder/ and /ContentStore/
> modules set to a log level of DEBUG so I could see what was going on:
>
>
> - On *node A*: /ndnpeek /test/g/0 -l 1000000
> /
>
> / - /This expresses an interest for //test/g/0/ with a long
> timeout for those who might not be familiar
>
> / - /This reaches node E who creates a PIT entry and forwards
> it to node G as expected
>
> - This then reaches node G who's NFD forwards it on to the
> jNDN app for handling
>
> - However the app does *not* respond with the Data or even
> see the Interest yet, as I will manually call
> /face.processEvents()/ with a key stroke/later
> /
>
> /
> /
>
> /- /On *node B*: /ndnpeek /test/g/0 -l 1000000/
>
> - This again reaches node E
>
> - Node E does *not* create a *new *PIT entry (or at least the
> /nPitEntries/ from the output of /nfdc status/ doesn't change),
> but presumably adds node B's face to the existing entry.
>
> - *However, node E then forwards a _second_ Interest to G with
> the same name of //test/g/0/*
>
> **- This second interest reaches node G's NFD who proceeds to
> forward the second interest to the jNDN app.
>
> - This is the behavior I wasn't expecting!
>
>
> - On *node G*: I finally call /face.processEvents()/
>
> - Node G then sees the *two* Interests (which have the *exact
> same name*) and responds to them with the appropriate Data
>
> - Whichever Data packet reaches node G's NFD first is then
> forwarded to node E and onto nodes A and B
>
> - The Data packet that reaches node G's NFD second is then
> marked as unsolicited and dropped by the NFD
>
>
> Is this intended behavior or have I set something up wrong? The
> packet produced by G is multicasted back to both A and B through E
> indicating that the PIT entries are correct, but it seems odd that
> the application level producer at node G must see both of these
> interests? For context I am currently prototyping a small P2P
> multiplayer game that runs over NDN, meaning Interest aggregation
> could save producers a lot of cycles and network traffic.
>
> The logs produced by the NFDs at each of the nodes are available
> at this repo
> <https://github.com/stefano-lupo/NFD-Interest-Aggregation-Logs> if
> anyone would like to take a look - I included copies which have
> only (what I think is) the relevant information and some comments
> on what happens.
>
>
> Thanks in advance for any information.
>
> Stefano
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndn-interest/attachments/20190314/da5004ac/attachment-0001.html>
More information about the Ndn-interest
mailing list