]> Cypherpunks.ru repositories - nncp.git/blobdiff - doc/usecases.texi
Merge branch 'develop'
[nncp.git] / doc / usecases.texi
index 0a42c8a4948ecd04eb01056cce02edf22620fd58..f676e890fbfe4b33240266aec5ecf4e01c4c28f6 100644 (file)
@@ -4,18 +4,19 @@
 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
@@ -244,6 +245,9 @@ 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
 
@@ -371,21 +375,103 @@ neigh: {
         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