Возможно ли создать идеальную 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: Основы.
Метки: Распределенные системы, Сети.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.