[Ndn-interest] Request for NDN Primer

Junxiao Shi shijunxiao at email.arizona.edu
Thu Jan 9 10:12:05 PST 2020

Hi Rafee

I tried the whole thing again, and it worked this time. Thank you very
> much. It wasn't working today morning, and after checking
> http://ndndemo.arl.wustl.edu/ I realized, the SAVI Testbed is down, which
> I was trying to use as the default gateway. But after changing UIUC
> endpoint, everything worked fine. My setup is as follows:
> Machine 1 (Producer): VM on SAVI.
> Machine 2 (Consumer): VM on AWS.
> As I can see, my message is still available, even after the producer is
> shut down (As expected with ICN). I also tried ndnpeek, and that worked as
> well.

Congrats for having successfully transferred a text message through the NDN
testbed using NDNts <https://github.com/yoursunny/NDNts>.

> Now, at this point. I am looking for further assistance.
> 1. Can you explain to me what happened in simple terms?

Producer side

Download the attached file and save as ndncert-ucla.json in the current
> directory.
> savi.testbed.named-data.net:6363 ndntssec ndncert-client --ca
> ndncert-ucla.json --valid-days 120 --verbose

ndncert-ucla.json contains name prefix and certificate of an NDNCERT
certificate authority, hosted at UCLA.
ndntssec ndncert-client command requests a certificate from this
certificate authority, and stores it in $HOME/keychain directory along with
the private key.
The certificate request procedure uses Interest-Data exchange, hence a
testbed router address is specified on the command line.

echo "Rafee's first packet" | NDNTS_KEYCHAIN=$HOME/keychain NDNTS_NFDREG=1
> NDNTS_UPLINK=udp://savi.testbed.named-data.net:6363 NDNTS_PKTTRACE=1
> ndncat put /Rafee/my-first-packet --ver=none

ndncat put command reads content from standard input (created by echo), and
turns it into one or more Data packets under /Rafee/my-first-packet prefix.
In order for other nodes to reach this producer via the testbed, the
producer must announce this name prefix to the global routing system.
Testbed requires all announcements to be signed by a testbed certificate,
hence the previous step obtains a certificate for you. ndncat put command
loads your key pair from $HOME/keychain directory, as specified on the
command line.
The router you are connecting to will retrieve the certificate so that it
can verify the signature on the prefix announcement. During your first
attempt, the UCLA certificate authority did not publish your certificate,
so that the router couldn't retrieve the certificate, and had to reject the
prefix announcement.
Once the prefix announcement has been verified using your certificate, the
router announces your prefix globally. Your producer is now reachable from
anywhere on the NDN testbed, and the announcement shows up on
https://nlsr-status.netlify.com/ , which is a status page of the global
routing system.

Consumer side

NDNTS_UPLINK=udp://savi.testbed.named-data.net:6363 NDNTS_PKTTRACE=1 ndncat
> get /Rafee/my-first-packet --ver=none

ndncat get sends a few Interests to the specified testbed router. Since the
producer prefix has been announced globally, you could connect to any
testbed node and retrieve the content.

> ndnpeek -p /Rafee/my-first-packet/33=%00

This reveals the actual name of the first Data packet.
ndncat currently does not support serving a single packet. The text message
is treated like a stream. and chunked into segments. 33=%00 indicates
"segment number 0".

2. How can I go about hosting my content (Something more than a text, such
> as a video)? I am asking this because the current content seems to be just
> *cat* into the terminal.

If you just want to transfer a video file, you can still use ndncat
ndncat put reads from standard input, and ndncat get writes to standard
output. Thus, you can do something like:

savi.testbed.named-data.net:6363 NDNTS_PKTTRACE=1 ndncat put
/Rafee/my-video.mp4 --ver=none  < my-video.mp4
NDNTS_UPLINK=udp://savi.testbed.named-data.net:6363 NDNTS_PKTTRACE=1 ndncat
get /Rafee/my-video.mp4 --ver=none > my-video.mp4

However, currently the producer would buffer all Data packets in memory, so
that you can only transfer small files (500MB is fine on a 8GB
laptop, maybe more).

If you want a more substantial video service <https://ivoosh.netlify.com/>,
setting up the backend <https://github.com/chavoosh/ndn-mongo-fileserver>
is much more involved, and I haven't tried it myself. It's better to leave
it to the experts.

Yours, Junxiao
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndn-interest/attachments/20200109/edeaf879/attachment-0001.html>

More information about the Ndn-interest mailing list