Разрабатывая надежный многопользовательский протокол udp, как я могу определить, что ссылка не работает с помощью mininet?

Вот топология:

      -----s0---s1-----
 h1 --|               |--h2
      -----s2---s3-----

h1 надежно перекачивает файл в h2, используя UDP. Связь между s0 и s1 может быть недоступна. Затем следует продолжить отправку данных, используя только нижний путь. Есть ли способ обнаружить, что ссылка не работает?

До сих пор я создал два сокета python в h1 и два в h2 для каждого пути. Используя select.select, я могу получить готовый сокет для чтения ack. Если истекло время ожидания, я могу повторить передачу. Однако, когда ссылка не работает, я не могу знать, что она не работает.

1 ответ

Если вам пришлось сделать это с нуля для вашей реализации по какой-либо причине;

Попробуйте пропинговать иначе, дождитесь подтверждения; тайм-аут, если вы не получили подтверждение в течение определенного периода времени; попробуйте другой путь. По какой причине вы не используете TCP? Реализация надежности поверх UDP - это, в основном, TCP по IP.

См . Трехстороннее рукопожатие для иллюстрации и руководства о том, как устанавливаются TCP-рукопожатия.


Вы также можете рассмотреть возможность использования протокола SCTP, который является многосетевым, потоковым протоколом управления передачей. Его поддерживают несколько платформ, включая Linux, BSD, Windows и другие.

Существует также Python SCTP Lirbary

Это так просто, как:

import socket
import sctp

sk = sctpsocket_tcp(socket.AF_INET)
sk.connect("10.0.1.1")

И реализует большинство из тех же интерфейсов, что и сокет

Другие вопросы по тегам