Возможно ли создать идеальную p2p-сеть?

1 ноября 2010

Признаюсь, пиринговые сети и ботнеты интересуют меня уже давно. Когда-то долгие часы я проводил с ручкой и бумажкой, рисуя различные схемы p2p-сетей… Вы правы, я — больной человек.

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

Сразу оговорюсь, что к созданию ботнетов, ровно как и троянов/вирусов и другой нечисти я никакого отношения не имею, мною движет только академический интерес. И пусть что-то из описанного может быть использовано в такого рода ПО, но простите, скальпель тоже можно использовать в качестве оружия — откажемся от его использования?

Однако вернемся к нашим баранам ©. Что же следует понимать под загадочной фразой «идеальная p2p-сеть»? Тут, по всей видимости, все зависит от решаемой задачи. Если мы хотим быстро раздать ISO-образ FreeBSD — это одна задача, если анонимно общаться в сети — другая. Так что я буду осторожен в введении каких бы то ни было определений. Тем не менее я составил список некоторых признаков идеальной p2p-сети, таких, что чем больше признаков имеет заданная сеть, чем ближе она к «идеалу».

Итак, вероятно, что заданная пиринговая сеть является идеальной, если она обладает одним или нескольким из перечисленных свойств:

  • Отключение 10/50/90 процентов узлов не сказывается на работоспособности сети.
  • Весь трафик в сети шифруется, пытаться перехватить какие бы то ни было сообщения — пустая трата времени. Возможное исключение — что, если мы являемся узлом сети?
  • Никто не может сказать, сколько узлов в сети. Возможное исключение — администратор сети (или ботмастер — если Вам так больше нравится) может дать команду «определить размер сети (возможно, что только приблизительно)».
  • Предприняты меры, направленные на срытие IP-адресов узлов.
  • Предприняты меры, направленные на предотвращение появления в сети «нечестных» узлов. Такими узлами могут быть пиры, качающие, но не раздающие файлы. Или бот, модифицированный Лабораторией Касперского, принимающий, но не выполняющий команды ботмастера.
  • Сеть устойчива к DDoS-атакам.
  • Возможно как широковещательная передача информации, так и установление соединения между несколькими узлами.
  • Часть узлов может находиться за NAT или фаерволом, что не мешает им быть частью сети. Возможно, с какими-то ограничениями.

Думаю, список при желании можно дополнить, но в первом приближении он похож на правду. Какие же типы пиринговых сетей, в смысле их архитектуры, нам известны? Насколько я знаю, всего их три.

  • Сервер управляет поведением «пиров». Так, в частности, работает BitTorrent. Такие сети — своего рода «недо-p2p», поскольку отключение сервера останавливает работу всей сети. Но, как нам хорошо известно, такая архитектура неплохо работает в некоторых задачах.
  • «Чистый p2p» — никакого сервера нет, узлы как-то обходятся без него. Например, каждый узел имеет список IP всех остальных узлов. Или список нескольких «соседей», при этом данные передаются от узла узлу по цепочке из соседей. Такие сети — самые Ъ, но зачастую работают медленно, если вообще работают.
  • Промежуточный вариант — сервер играет незначительную роль, например раздает списки «соседей» или его роль играет (один из/несколько) узлов. На мой взгляд, поиски «идеальной» p2p сети нужно сосредоточить именно в этом классе сетей.

ровно досюда был написан пост, когда я отрыл его в черновиках. Дата последнего изменения — 6 апреля 2010. Более полугода назад! Решил запостить, ибо неизвестно, когда допишу продолжение.

Если у вас есть идеи относительно пиринговых сетей, которыми вы хотели бы поделиться, пишите в комментах, не стесняйтесь. Может, совместными усилиями «родим» продолжение?

Дополнение: Благодаря совместным усилиям продолжение статьи все-таки увидело свет!

Дополнение: Интересные статьи по теме на Хабрахабре: Netsukuku — свой собственный интернет, ANDNA — служба именования узлов сети Netsukuku, Kademlia DHT: Основы.

Метки: , .

Понравился пост? Узнайте, как можно поддержать развитие этого блога.

Также подпишитесь на RSS, Facebook, ВКонтакте, Twitter или Telegram.