blob: 0c76fe87d72460dd960deeff482cc2a84ad97b29 [file] [log] [blame] [view]
Andrea Tosatto672b9a72016-01-05 16:18:20 +01001# ndncatchunks and ndnputchunks
2
3**ndncatchunks** and **ndnputchunks** are a pair of programs to transfer a file as Data segments.
4
5* **ndnputchunks** is a producer program that reads a file from the standard input, and makes
6 it available as NDN Data segments. It appends version and segment number components
7 to the specified name, according to the
8 [NDN naming conventions](http://named-data.net/publications/techreports/ndn-tr-22-ndn-memo-naming-conventions/).
9
10* **ndncatchunks** is a consumer program that fetches Data segments of a file, optionally
11 discovering the latest version of the file, and writes the content of the retrieved file to
12 the standard output.
13
Weiwei Liu245d7912016-07-28 00:04:25 -070014## Version discovery methods in ndncatchunks
Andrea Tosatto672b9a72016-01-05 16:18:20 +010015
Weiwei Liu245d7912016-07-28 00:04:25 -070016* `fixed` : sends an interest attempting to find a data packet with the
Andrea Tosatto672b9a72016-01-05 16:18:20 +010017 specified prefix and version number. A version component must be present at the
18 end of the user-specified NDN name.
19
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080020* `realtime` : sends discovery interests to fetch metadata of the solicited content from which
21 the data version will be resolved.
22 The version number of the solicited content is included in the name of returned
23 metadata data packet.
24 For more information about the packet format and naming convention of interest and
25 data packets for realtime version discovery, please refer to:
26[Realtime Data Retrieval (RDR) protocol wiki page](https://redmine.named-data.net/projects/ndn-tlv/wiki/RDR)
Andrea Tosatto672b9a72016-01-05 16:18:20 +010027
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080028The default discovery method is `realtime`.
Andrea Tosatto672b9a72016-01-05 16:18:20 +010029
Weiwei Liu245d7912016-07-28 00:04:25 -070030## Interest pipeline types in ndncatchunks
31
32* `fixed`: maintains a fixed-size window of Interests in flight; the window size is configurable
33 via a command line option and defaults to 1.
34
35* `aimd` : sends Interests using an additive-increase/multiplicative-decrease (AIMD) algorithm to
36 control the window size. By default, a Conservative Loss Adaptation algorithm is adopted
37 combining with the AIMD algorithm, that is, at most one window decrease will be
38 performed per round-trip-time. For details please refer to:
39 [A Practical Congestion Control Scheme for Named Data
40 Networking](https://www.researchgate.net/publication/306259672_A_Practical_Congestion_Control_Scheme_for_Named_Data_Networking)
41
Klaus Schneider2c3083d2017-12-18 14:19:04 -070042The default Interest pipeline type is `aimd`.
Andrea Tosatto672b9a72016-01-05 16:18:20 +010043
44## Usage examples
45
46### Publishing
47
48The following command will publish the text of the GPL-3 license under the `/localhost/demo/gpl3`
49prefix:
50
51 ndnputchunks ndn:/localhost/demo/gpl3 < /usr/share/common-licenses/GPL-3
52
53To find the published version you have to start ndnputchunks with the `-p` command line option,
54for example:
55
56 ndnputchunks -p ndn:/localhost/demo/gpl3 < /usr/share/common-licenses/GPL-3
57
58This command will print the published version to the standard output.
59
60To publish data with a specific version, you must append a version component to the end of the
61prefix. The version component must follow the aforementioned NDN naming conventions.
62For example, the following command will publish the version `%FD%00%00%01Qc%CF%17v` of the
63`/localhost/demo/gpl3` prefix:
64
65 ndnputchunks ndn:/localhost/demo/gpl3/%FD%00%00%01Qc%CF%17v < /usr/share/common-licenses/GPL-3
66
67If the version component is not valid, a new well-formed version will be generated and appended
68to the supplied NDN name.
69
70
71### Retrieval
72
73To retrieve the latest version of a published file, the following command can be used:
74
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080075 ndncatchunks ndn:/localhost/demo/gpl3
Andrea Tosatto672b9a72016-01-05 16:18:20 +010076
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080077This command will use the realtime method to discover the version number of the file.
Andrea Tosatto672b9a72016-01-05 16:18:20 +010078
Weiwei Liu72c96d22016-09-27 23:06:21 -070079To fetch a specific version of a published file, you can use the `fixed` version discovery method.
80In this case the version needs to be supplied as part of the name. For example, if the version
81is known to be `%FD%00%00%01Qc%CF%17v`, the following command will fetch that exact version of the
82file:
Andrea Tosatto672b9a72016-01-05 16:18:20 +010083
Weiwei Liu13fda5b2016-09-28 03:29:07 +000084 ndncatchunks -d fixed ndn:/localhost/demo/gpl3/%FD%00%00%01Qc%CF%17v
Andrea Tosatto672b9a72016-01-05 16:18:20 +010085
86
87For more information, run the programs with `--help` as argument.