Вы можете попробовать использовать DHT в качестве базовой системы. Он должен иметь возможность обрабатывать все коммуникации между узлами сети, а также распределенное хранение данных.
Новый узел может присоединиться, если ему известен хотя бы один узел, который уже находится в сети. И узел может отправить сообщение другому узлу, если он знает свое имя ip или dns.
P.S .: Если вам интересна идея, вы можете взглянуть на Open Chord . Единственный его недостаток - отсутствие постоянства, т. Е. Данные не хранятся нигде, кроме оперативной памяти, поэтому вам необходимо добавить свое постоянство.
P.P.S .: вы можете создать новый скайп, но без центрального сервера