Трассировка осуществляется посредством сообщений протокола ICMP. Эхо-запрос (ICMP-сообщение с типом «8») отправляется одному и тому же хосту назначения с увеличением с каждым шагом значения поля TTL (времени жизни) на единицу. Маршрутизаторы на пути следования пакета возвращают обратно запрашивающему хосту ICMP-сообщение об истечении времени (ICMP-сообщение с типом «11»), когда поле TTL становится равным нулю. При достижении хоста назначения тот в ответ отправляет ICMP-сообщение с типом «0» (эхо-ответ). Из полученных ответов можно извлечь IP-адреса всех маршрутизаторов на пути следования пакета, а также время оборота (RTT) до каждого из узлов на маршруте.
Не используйте готовые библиотеки для работы с ICMP, предложите свое решение на сокетах.
Основная задача – разработать свое собственное (клиентское) приложение трассировки, которое будет использовать протокол ICMP. Должен быть выведен на консоль список IP-адресов всех маршрутизаторов на пути от источника к хосту назначения. Количество сообщений, которые будут отправляться каждому маршрутизатору, должно настраиваться параметром и по каждому из пакетов должно выводиться время RTT (по умолчанию утилита tracert использует три пакета).
todo
В настоящее время приложение выводит только список IP-адресов всех маршрутизаторов на пути от источника к хосту назначения. Попробуйте использовать метод (например, gethostbyname) для получения имени каждого промежуточного узла маршрута и выводить также на консоль это имя. Предоставьте скриншот результатов трассировки какого-либо хоста.
todo
Реализуйте распределенный алгоритм дистанционно-векторной маршрутизации для сети, изображенной на рисунке
Каждый узел знает лишь о своих соседях, однако не имеет полной информации обо всей сети.
Все каналы являются двунаправленными, стоимости каналов идентичны в обоих направлениях. При изменении стоимости каналов (расстояний до соседних узлов) узел должен разослать новый вектор стоимостей (пакет) всем своим соседям.
Если в результате обновления изменяется стоимость маршрута, например, от узла 0 до какого-либо узла сети, узел 0 информирует об этом всех своих непосредственных соседей, посылая им пакет.
В дистанционно-векторном алгоритме пакетами с информацией о маршрутах обмениваются только соседние узлы. Таким образом, узлы 1 и 2 будут обмениваться пакетами, а узлы 1 и 3 – нет.
Реализуйте алгоритм дистанционно-векторной маршрутизации для сети на рисунке.
Покажите работоспособность алгоритма: искусственно измените стоимость одного или нескольких каналов и покажите, что стоимости таблиц маршрутизации на соответствующих узлах пересчитались. Можно использовать юнит-тесты.
todo
Представьте каждый узел в виде отдельного потока. Настройка таблиц на каждом узле происходит независимо, обмен информацией между узлами происходит асинхронно. Например, у каждого узла может быть своя очередь, в которую другие узлы будут записывать свои измененные пакеты со стоимостями, а текущий узел будет забирать элементы из очереди и обрабатывать их. Используйте примитивы синхронизации потоков.
Реализуйте простое клиент-серверное приложение, реализующее эхо-запросы: клиент посылает серверу текстовое сообщение, а в ответ сервер отправляет то же сообщение, но в верхнем регистре. Приложение должно работать на сокетах, которые настроены на работу по протоколу TCP с обязательным использованием протокола IPv6 на сетевом уровне.
todo
Программа удаленного рисования. На первом компьютере (клиент) пользователь может рисовать кривые мышкой на «холсте». На втором на таком же холсте (сервер) рисунок повторяется в реальном времени. Вы можете использовать любой протокол для реализации данного приложения. Предоставьте скриншот работы приложения.
todo