blob: f1cf967faba348d15acf89c093705490708b6ba7 [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
Klaus Schneider9e5122b2019-03-19 17:03: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
Klaus Schneider9e5122b2019-03-19 17:03:25 -070020* `realtime` : sends discovery Interests to fetch metadata of the solicited content from which
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080021 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
Klaus Schneider9e5122b2019-03-19 17:03:25 -070035* `aimd` : adjusts the window size via additive-increase/multiplicative-decrease (AIMD).
36 By default, it uses a Conservative Window Adaptation, that is, the congestion window
37 will be decreased at most once per round-trip-time.
Weiwei Liu245d7912016-07-28 00:04:25 -070038
Klaus Schneider9e5122b2019-03-19 17:03:25 -070039* `cubic`: adjusts the window size similar to the TCP CUBIC algorithm.
40 For details about both aimd and cubic please refer to:
41 [A Practical Congestion Control Scheme for Named Data
42 Networking](https://conferences2.sigcomm.org/acm-icn/2016/proceedings/p21-schneider.pdf)
43
44The default Interest pipeline type is `cubic`.
Andrea Tosatto672b9a72016-01-05 16:18:20 +010045
46## Usage examples
47
48### Publishing
49
50The following command will publish the text of the GPL-3 license under the `/localhost/demo/gpl3`
51prefix:
52
53 ndnputchunks ndn:/localhost/demo/gpl3 < /usr/share/common-licenses/GPL-3
54
55To find the published version you have to start ndnputchunks with the `-p` command line option,
56for example:
57
58 ndnputchunks -p ndn:/localhost/demo/gpl3 < /usr/share/common-licenses/GPL-3
59
60This command will print the published version to the standard output.
61
62To publish data with a specific version, you must append a version component to the end of the
63prefix. The version component must follow the aforementioned NDN naming conventions.
64For example, the following command will publish the version `%FD%00%00%01Qc%CF%17v` of the
65`/localhost/demo/gpl3` prefix:
66
67 ndnputchunks ndn:/localhost/demo/gpl3/%FD%00%00%01Qc%CF%17v < /usr/share/common-licenses/GPL-3
68
69If the version component is not valid, a new well-formed version will be generated and appended
70to the supplied NDN name.
71
72
73### Retrieval
74
75To retrieve the latest version of a published file, the following command can be used:
76
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080077 ndncatchunks ndn:/localhost/demo/gpl3
Andrea Tosatto672b9a72016-01-05 16:18:20 +010078
Chavoosh Ghasemi0c6fcb52019-03-04 10:29:25 -080079This command will use the realtime method to discover the version number of the file.
Andrea Tosatto672b9a72016-01-05 16:18:20 +010080
Weiwei Liu72c96d22016-09-27 23:06:21 -070081To fetch a specific version of a published file, you can use the `fixed` version discovery method.
82In this case the version needs to be supplied as part of the name. For example, if the version
83is known to be `%FD%00%00%01Qc%CF%17v`, the following command will fetch that exact version of the
84file:
Andrea Tosatto672b9a72016-01-05 16:18:20 +010085
Weiwei Liu13fda5b2016-09-28 03:29:07 +000086 ndncatchunks -d fixed ndn:/localhost/demo/gpl3/%FD%00%00%01Qc%CF%17v
Andrea Tosatto672b9a72016-01-05 16:18:20 +010087
88
89For more information, run the programs with `--help` as argument.