# Про IDEC
Difrex(mobile)(tavern,23) — All
2018-01-12 08:54:20


// Я попробую транслировать в сеть некоторые посты из своего бложика, если кто не против

IDEC - это протокол обмена сообщениями совместимый на базовом уровне с ii. Расшифровывается, как ii-like Data Exchange Convention.
Главная фишка его - это простота и возможность работать поверх чего угодно, например, ssh.
Но практически все реализации сейчас работают поверх http.

Цитата из документации(https://ii-net.tk/idec-doc/)

>Есть несколько серверов (грубо говоря, сайтов), за каждым из которых закреплены свои пользователи (поинты). Поинты пишут сообщения каждый на свой сервер.
>Через каждые 10-20 минут сервера скачивают друг у друга новые сообщения. В итоге на всю сеть одна общая база данных.
>Для установления цепочек синхронизации владельцы серверов сначала договариваются.

>Всё общение разделено на так называемые эхоконференции или эхи (см. терминология). Эха - это что-то вроде ленты твиттера или темы на форуме.
>Пользователи могут свободно подписываться на интересные им эхи и писать туда сообщения в пределах одной станции.
>Держатели серверов синхронизируют между собой (по общему согласию) самые популярные и нужные пользователям эхи, и сообщения оттуда расходятся по всей сети.

Так при отключении одного из серверов, сообщения останутся живы на других, что дает нам такие блага, как антицензурируемость и отказоустойчивость.

== Общение

В стандарте предусмотрена очень полезная фича, как /list.txt(это может быть на самом деле файл или путь в строке адреса в браузере).
На запрос list.txt сервер возвращает нам список эх(публичных) с описанием и количеством сообщений в них.
Так при первом попадании на сервер, клиент сможет сразу знать какие эхи он хочет читать.

Стандарт и все реализации серверов поддерживают создание эхи пользователем. Для этого нужно всего лишь написать в нее. Такая эха не
будет отображаться в list.txt и получить из нее сообщения можно, только зная название. Шифрования в стандарте нет, но это и не нужно,
ибо приносит только усложнение. Для приватного общения можно использовать скрытую эху и GPG.

Личных сообщений нет, но обсуждение стандарта идет. Можно начать с чтения [этого](https://dynamic.lessmore.pw/?j=FGOqT29oVwwBElTJNMjx) треда.

Каждое сообщение в сети уникально, т.е. ему присвается ID сгенерированный на основе суммы sha256 от контента. Это не спасает от спама,
но позволяет избежать коллизий в сети.

== Устройство сети

На протоколе IDEC чаще всего реализуют децентрализованную клиент-сервер сеть.
P2P не предусмотрено, но никто не мешает написать свое расширение, которое реализует P2P обмен.

Итак, рассмотрим топологию сети от простого к сложному.

Самая простейшая сеть выглядит так:

https://difrex.lessmore.pw/images/idec/idec1.png

У нас есть два клиента, которые обмениваются сообщениями через сервер. Оба клиента получают сообщения из одной и той же эхи.
Все централизовано и при смерти сервера клиенты больше не смогут общаться с друг дугом. Давайте добавим еще один сервер!

https://difrex.lessmore.pw/images/idec/idec2.png

Владельцы серверов договорились между собой обмениваться сообщениями эхи pipe.2032, теперь при выходе из строя одного из серверов
сообщения будут доступны на другом сервере.

Добавим еще сегмент сети

https://difrex.lessmore.pw/images/idec/idec3.png

У нас добавился еще один сегмент сети в котором происходит общение в эхах pipe.2032 и linux.14.
Так наш первый сегмент начинает обмениваться сообщениями со вторым. Добавим еще один сегмент.

https://difrex.lessmore.pw/images/idec/idec4.png


И еще

https://difrex.lessmore.pw/images/idec/idec5.png

Можно еще добавить связь между серверами внутри кольца и мы получим полностью децентрализованную сеть, которая реализует
распределенную базу данных.

IDEC позволяет строить любые топологии. Клиент может выступать так же и сервером и забирать сообщения сразу со всех серверов.
А простота протокола позволяет писать клиентов очень быстро.

В следующей статье напишем бота, который будет слать сообщения в указанную нами эху.