Если Вы используете распределенную систему управления версиями (например git), то одна задача считается решенной.
Выделить библиотеку для построения прототипов распределенных систем. Примеры сущностей: компьютер, сетевой интерфейс, комьютерная сеть. "Сеть" должна обеспечивать адресацию "компьютеров" и передачу данных.
- Реализовать нерекурсивный запрос (см. пример на Википедии). (Done)
- Реализорвать рекурсивный запрос. (Done)
- Написать небольшой текст о проблеме рекурсивных запросов. Можно продемонстрировать тестами или демо-кодом. (Done)
Рекурсивные DNS запросы считаются небезопасными, так как после отправки пакета на указанный в настройках сетевой карты сервер мы не знаем куда он пойдет дальше и сколько прыжков ему придется совершить, чтобы сделать resolve доменного имени. Это число может быть большим, что говорит о большом количестве участников в этой цепочке. Вероятность подмены искомого IP в таком случае увеличивается.
Однако это не единственная проблема рекурсиных DNS запросов. Злоумышленник может отправить большое количество несуществующих имен на DNS сервер для resolve, что заставит сервер их закэшировать до resolve'а корневыми серверами, что заставит потратить дополнительные ресурсы DNS сервера.
Примеры:
- https://www.securitylab.ru/news/508472.php
- https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%90%D1%82%D0%B0%D0%BA%D0%B8_%D0%BD%D0%B0_DNS-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0#.D0.90.D1.82.D0.B0.D0.BA.D0.B0_.D1.81_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D1.80.D0.B5.D0.BA.D1.83.D1.80.D1.81.D0.B8.D0.B2.D0.BD.D1.8B.D1.85_DNS-.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.BE.D0.B2
Разработать прототип системы с репликацией. Использовать базовую библиотеку (несколько компьютеров в сети). Показать в тестах штатный режим работы системы (запись и использование данных), поломки (например, вышел из строя основной компьютер).
Ссылки:
Разработать прототип системы с шардированием. Показать в тестах штатный режим работы (запись и использование данных), и поломки.
Ссылки:
Разработать прототип пиринговой системы для обмена файлами в соотвествии с основными принципами работы протокола BitTorrent. Реализовать работу с трекером. Использовать базовую библиотеку.
Ссылки:
Разработать код, объясняющий, что такое распределенная хеш-таблица. Показать добавление, поиск и перераспределение данных.
- Распределённая хеш-таблица
- Distributed Hash Tables, Part I
- Простое базовое объяснение распределенной таблицы Hash (DHT)
- Протокол DHT
Разработать прототип блокчейн-системы. Материалы How to Build a Blockchain in Python и Блокчейн на Python дают хорошее представление о принципах работы блокчейна.
При разворачивании системы на "компьютерах" базовой библиотеки (задача 1) полезно разобрать материал Создаем Blockchain с нуля на Python. Если такое разворачивание покажется трудным или бессмысленным, то можно повторить реализацию с Flask. Это будет очень полезно с точки зрения освоения технологий.