See also this page @ref{Сценарии, on russian}.
@menu
-* Occasional connection to mail server: UsecaseMail.
-* Lightweight fast POP3/IMAP4 replacement: UsecasePOP.
-* Unreliable/expensive communication link: UsecaseUnreliable.
-* Slow/expensive link for high-volume data, bad QoS: UsecaseQoS.
-* Extreme terrestrial environments, no link: UsecaseNoLink.
-* One-way broadcasting communications: UsecaseBroadcast.
-* Satellite links: UsecaseSatelliteLinks.
-* Private, isolated MitM/Sybil-resistant networks: UsecaseF2F.
-* Highly secure isolated air-gap computers: UsecaseAirgap.
-* Network censorship bypassing, health: UsecaseCensor.
-* Reconnaissance, spying, intelligence, covert agents: UsecaseSpy.
-* Cheap night transfers: UsecaseCaller.
+* Occasional connection to mail server: UsecaseMail
+* Lightweight fast POP3/IMAP4 replacement: UsecasePOP
+* Unreliable/expensive communication link: UsecaseUnreliable
+* Slow/expensive link for high-volume data, bad QoS: UsecaseQoS
+* Extreme terrestrial environments, no link: UsecaseNoLink
+* One-way broadcasting communications: UsecaseBroadcast
+* Satellite links: UsecaseSatelliteLinks
+* Private, isolated MitM/Sybil-resistant networks: UsecaseF2F
+* Highly secure isolated air-gap computers: UsecaseAirgap
+* Network censorship bypassing, health: UsecaseCensor
+* Reconnaissance, spying, intelligence, covert agents: UsecaseSpy
+* Cheap night transfers: UsecaseCaller
+* Multicast flooding transmission: UsecaseMulticast
@end menu
@node UsecaseMail
@section Occasional connection to mail server
-Assume that you have got your own @url{http://www.postfix.org/, Postfix}
-SMTP server connected to the Internet. But you read and write emails on
-your notebook, that is connected to it just from time to time. How can
-you flush buffered mail queues when your notebook is connected?
+Assume that you have got your own @url{http://www.postfix.org/,
+Postfix}/@url{http://www.exim.org/, Exim} SMTP server connected to the
+Internet. But you read and write emails on your notebook, that is
+connected to it just from time to time. How can you flush buffered mail
+queues when your notebook is connected?
One possibility is to log in and run something like @command{postqueue
-f}, but by default you have got only several days so and sender will
overcomplicated and bloated for the simple task. Not an option.
@url{https://en.wikipedia.org/wiki/KISS_principle, KISS}!
-Just tell both of your Postfixes (on the server and notebook) to drop
-email as a mail via NNCP (@ref{nncp-exec}) to specified node. This is
-done similarly as with UUCP and as written in
-@url{http://www.postfix.org/UUCP_README.html, Postfix documentation}.
+Just tell both of your Postfix/Exim (on the server and notebook) to drop
+email as a mail via NNCP (@ref{nncp-exec}) to specified node.
-Look @ref{Postfix, here} for further information. All mail will be
-stored in NNCP @ref{Spool, spool}, that after exchanging and tossing
-will call local @command{sendmail} command to deliver them just like
-that happened on the same machine.
+More information for Postfix is @ref{Postfix, here} and for Exim is
+@ref{Exim, here}. All mail will be stored in NNCP @ref{Spool, spool},
+that after exchanging and tossing will call local @command{sendmail}
+command to deliver them just like that happened on the same machine.
@node UsecasePOP
@section Lightweight fast POP3/IMAP4 replacement
The command:
-@verbatim
+@example
$ nncp-file file_i_want_to_send bob:
$ nncp-file another_file bob:movie.avi
-@end verbatim
+@end example
will queue two files for sending to @emph{bob} node. Fire and forget!
Now this is daemon's job (or offline transfer) to send this files part
niceness level, that will guarantee that it will be processed earlier or
later than the other ones. Nearly all commands has corresponding option:
-@verbatim
+@example
$ nncp-file -nice FLASH myfile node:dst
$ nncp-xfer -nice PRIORITY /mnt/shared
$ nncp-call -nice NORMAL bob
[...]
-@end verbatim
+@end example
Huge files could be split on smaller @ref{Chunked, chunks}, giving
possibility to transfer virtually any volumes using small capacity
You can also use CD-ROM and tape drives:
-@verbatim
+@example
$ nncp-bundle -tx bob | cdrecord -tao -
$ nncp-bundle -tx bob | dd of=/dev/sa0 bs=10240
-@end verbatim
+@end example
@node UsecaseNoLink
@section Extreme terrestrial environments, no link
Assume that you send two files to @emph{bob} node. Insert USB storage
device (SD is preferable!), mount it and run @ref{nncp-xfer}:
-@verbatim
+@example
$ nncp-xfer -node bob /media/usbstick
-@end verbatim
+@end example
to copy all outbound packets related to @emph{bob}. Use @option{-mkdir}
option to create related directory on USB/SD storage if they are missing
@emph{alice}, then just omit @option{-node} option to copy all available
outgoing packets.
-@verbatim
+@example
$ nncp-xfer /media/usbstick
-@end verbatim
+@end example
Unmount it and transfer storage to Bob and Alice. When they will insert
it in their computers, they will use exactly the same command:
-@verbatim
+@example
$ nncp-xfer /media/usbstick
-@end verbatim
+@end example
to find all packets related to their node and copy them locally for
further processing. @command{nncp-xfer} is the only command used with
You can use @ref{Bundles, bundles} and stream them above. They are just
a sequence of @ref{Encrypted, encrypted packets} you can catch on.
-@verbatim
+@example
$ nncp-bundle -tx alice bob eve ... | command to send broadcast
$ command to receive broadcast | nncp-bundle -rx
-@end verbatim
+@end example
With built-in packet duplicates detection ability, you can retransmit
your broadcasts from time to time, to increase chances the recipient
in the very first packet) secure transport with forward secrecy
property.
-@verbatim
-$ nncp-daemon -bind [::]:5400
-@end verbatim
+@example
+$ nncp-daemon -bind "[::]":5400
+@end example
+
will start TCP daemon listening on all interfaces for incoming
connections.
-@verbatim
+@example
$ nncp-call bob
-@end verbatim
+@end example
+
will try to connect to @emph{bob}'s node known TCP addresses (taken from
configuration file) and send all related outbound packets and retrieve
those the Bob has. All interrupted transfers will be automatically
resumed.
+Ability to do @ref{MCD, multicast nodes discovery} of participant in
+IPv6 networks allows complete ignorance of network addresses specifying.
+
@node UsecaseAirgap
@section Highly secure isolated air-gap computers
NNCP supports packets relying (transitioning) out-of-box.
@verbatim
-neigh:
- bob:
+neigh: {
+ bob: {
[...]
- addrs:
- lan: [fe80::5400%igb0]:5400
+ addrs: {
+ lan: "[fe80::5400%igb0]:5400"
+ }
+ }
bob-airgap:
[...]
- via: [bob]
+ via: ["bob"]
+ }
+}
@end verbatim
That @ref{Configuration, configuration file} tells that we have got two
communications.
@verbatim
-neigh:
+neigh: {
[...]
- some-node:
+ some-node: {
[...]
- addrs:
+ addrs: {
lan: "[fe80::be5f:f4ff:fedd:2752%igb0]:5400"
wan: "some-node.com:5400"
- calls:
- -
+ }
+ calls: [
+ {
cron: "*/1 * * * *"
addr: lan
nice: MAX
onlinedeadline: 3600
- -
+ }
+ {
cron: "*/10 * * * *"
addr: wan
nice: PRIORITY
xx: rx
- -
+ }
+ {
cron: "*/1 0-7 * * *"
addr: wan
nice: BULK
onlinedeadline: 3600
maxonlinetime: 3600
+ }
+ ]
+ }
+}
@end verbatim
+
+@node UsecaseMulticast
+@section Multicast flooding transmission
+
+Do you need to send single mail message or file to many recipients at
+once? For example an update of some program, network participants list
+or available files for freqing? But you are not connected directly to
+each of them?
+
+@verbatim
+ A-------->E---->F A -> B C E
+ / \ |\ ^ C -> H J
+ / \ | \ | E -> D F G
+v v v \v D -> G
+B C D---->G J -> K
+ / \ ^ / K -> D G
+ / \ | /
+ v v v /
+ H J<->K<-
+@end verbatim
+
+NNCP has @ref{Multicast, multicast} packets format, allowing you to
+flood transmission of the single packet to multiple recipients.
+@strong{A} sends packet to three destinations. @strong{C} sends it to
+the two nodes next. @strong{E} sends it to three. Some participants may
+receive multiple copies of the same packet, like @strong{D}, @strong{J},
+@strong{G}, @strong{F}, but that copies will be just ignored. If
+@strong{B} sends packet to single known to him @strong{A}, then that
+packet will be distributed among all other multicast area subscribers.
+
+Moreover those multicast packets are encrypted and require key knowledge
+for reading. But that does not prevent their relaying! Also you are not
+required to know sender's public keys. That way you can easily create
+echo-conferences for files or commands (like mail message delivering)
+transmission.
+
+Let's create keys for the new multicast area:
+
+@example
+$ nncp-cfgnew -area filelists -nocomments
+areas: @{
+ filelists: @{
+ id: TOU5TKOW4JBIZJBX63D4776C72FMWDAUAUSZNJX4DFOITVYQ5ZQA
+ pub: DSHL5O6BK2R3QKJAIJ7BC4UIGE73EC2LJPOV3VTS44KYOTUQYZLA
+ prv: AYD5FAA4GDDSAD5N65NJLLFS6TG2NSPQ46KAQO5U722JLVG34SOQ
+ @}
+@}
+@end example
+
+and send that keypair everybody who wants to read that area.
+For intermediaries willing to relay packets on, but that should not read
+them, you just need to send area's identity. For example @strong{A} adds
+to his configuration:
+
+@example
+areas: @{
+ filelists: @{
+ id: TOU...
+ pub: DSH...
+ prv: AYD...
+ subs: ["B", "C", "E"]
+ incoming: /home/A/areas/filelists
+ @}
+@end example
+
+and @strong{E}, that will be relaying intermediary (as we decided):
+
+@example
+areas: @{
+ filelists: @{
+ id: TOU...
+ subs: ["D", "F", "G"]
+ @}
+@end example
+
+After you distributed the knowledge about @code{nodelist} multicast
+area, you can share @ref{FreqIndex, file lists}:
+
+@example
+$ nncp-file tree-of-A-20210715.txt.zst area:filelists:
+$ nncp-toss -node self
+@end example