Previous: , Up: Сценарии использования  


Мультивещательная flooding рассылка

Необходимо разослать одно и то же почтовое сообщение или файл многим участникам? Например обновления какой либо программы, списка участников сети или доступных файлов? Но при этом вы не соединены лично с каждым из них:

   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<-

В NNCP есть особые мультивещательные форматы пакетов позволяющие организовывать эффективную передачу одно единственного пакета сразу нескольким получателям (flooding алгоритм). A отправляет пакет трём получателям. C в свою очередь отсылает ещё двум, а E трём. Некоторые участники сети получат несколько копий одного и того же пакета, как например D, J, G, F, но копии будут просто проигнорированы. Если B отошлёт пакет единственному ему известному A, то этот пакет распространится по всей сети подписантов широковещательной зоны и дальше.

Более того, мультивещательные пакеты зашифрованы и для прочтения требуют знание ключей. Но это не мешает их обрабатывать для дальнейшей пересылки! Кроме того, совершенно не обязательно знать ключи отправителя. Таким образом можно создать эхоконференцию для передачи файлов или команд (например доставки почтовых сообщений).

Создаём ключи для мультивещательной зоны:

$ nncp-cfgnew -area filelists -nocomments
areas: {
  filelists: {
    id: TOU5TKOW4JBIZJBX63D4776C72FMWDAUAUSZNJX4DFOITVYQ5ZQA
    pub: DSHL5O6BK2R3QKJAIJ7BC4UIGE73EC2LJPOV3VTS44KYOTUQYZLA
    prv: AYD5FAA4GDDSAD5N65NJLLFS6TG2NSPQ46KAQO5U722JLVG34SOQ
  }
}

и отправляем ключевую пару всем кто может и хочет читать данную зону. Посредникам, готовым участвовать в переотправке пакетов подписантам, но которым не стоит "читать" пакеты, достаточно отправить только идентификатор зоны. Например A добавляет себе в конфигурацию:

areas: {
  filelists: {
    id: TOU...
    pub: DSH...
    prv: AYD...
    subs: ["B", "C", "E"]
    incoming: /home/A/areas/filelists
  }

а E, являющимся (как было решено) просто посредником:

areas: {
  filelists: {
    id: TOU...
    subs: ["D", "F", "G"]
  }

После распространения знания о filelists мультивещательной зоне можно обмениваться списками файлов:

$ nncp-file tree-of-A-20210715.txt.zst area:filelists:
$ nncp-toss -node self

Previous: Дешёвая ночная связь, Up: Сценарии использования