2

У меня проблемы с отправкой больших файлов на компьютер OpenStack.

Наше интернет-соединение через LTE, поэтому следует ожидать плохие пакеты. Однако даже отправка данных по TCP приводит к повреждению данных при отправке нескольких МБ.

Я хотел бы проверить, действительно ли проверяются контрольные суммы TCP, поэтому мне нужен инструмент для отправки TCP-пакетов с неверными контрольными суммами.

Существуют программы, которые позволяют мне отправлять произвольные IP-пакеты, но я бы предпочел инструмент, который также запускает соединение (выполняет трехстороннее рукопожатие и т.д.) Для меня.

Затем я могу использовать tcpdump чтобы проверить, поддерживает ли сервер ACK пакеты или запрашивает повторную отправку. (Если инструмент может сделать это, даже лучше.)

Некоторые мысли и заметки:

  • Я пробовал разные версии Linux как на клиенте, так и на сервере.
  • У нас больше нет поврежденных пакетов при переключении на (более медленную) линию DSL.
  • У нас нет поврежденных пакетов при отправке на другой сервер с другого хоста.
  • У меня есть tcpdumps для передачи TCP как от клиента, так и от сервера, но хост OpenStack не хочет на них смотреть, поэтому я хотел бы выяснить, являются ли контрольные суммы проблемой, а также иметь тестовую программу для хоста. ,
  • Сервер является экземпляром в среде OpenStack.
  • Недавняя ошибка в veth контрольной суммы TCP в ядре Linux могла бы объяснить эту ошибку.

Любые другие идеи, как отладить это также приветствуются.

2 ответа2

1

https://github.com/kubernetes/kubernetes/issues/18898

объясняет, как это сделать.

Вот (сокращенная) версия:

На принимающей машине запустите nc -l -p 12345

На отправляющей машине запустите (i=0; while true; do echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa $i; i=$((i+1)); sleep 1; done) | netcat IP_OF_RECEIVING_MACHINE 12345

Чтобы повредить пакеты, выполните следующую команду на компьютере отправителя:

sudo tc qdisc add dev eth0 root netem corrupt 100%; sleep 10; sudo tc qdisc del dev eth0 root netem

Обратите внимание, что в течение 10 секунд все пакеты на eth0 будут повреждены!

Если контрольная сумма работает правильно, вы не получите текст в течение 10 секунд, а затем получите его сразу. Однако, если контрольная сумма не работает, вы получите поврежденный текст.

0
  • Вы можете использовать инструмент создания пакетов, такой как hping, hping3. Проверьте ссылку внизу, это очень полезно;

    примеры hping3

    По ссылке выше, я думаю, это то, что вы ищете;

    -b --badcksum (попытаться) отправлять пакеты с неверной контрольной суммой IP. Многие системы исправят контрольную сумму IP, отправив пакет, вместо этого вы получите неверную контрольную сумму UDP/TCP.

  • Если у вас есть навыки программирования (сокет-программирование, BSD-сокеты в Linux, вы можете использовать их в Google), вы можете отправлять фиктивные tcp-пакеты, используя необработанные сокеты, создавая свой собственный пакет транспортного уровня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .