Назад | Перейти на главную страницу

tcp ретрансляция через curl и netcat

Я пытаюсь настроить iptables, чтобы вызвать реалистичные сбои сети между контейнерами докеров. На сервере запускаю оба netcat -lk 1234 и ковбойский сервер Erlang. На клиенте запускаю клиентов:

Первоначально они работают нормально, есть свидетельства взаимодействия клиент-сервер. Затем я представляю правило iptables DROP для ВЫХОДА клиента.

Коммуникации netcat и curl не проходят, до того как Я удаляю правило DROP, после чего они восстанавливаются без проблем!

Наконец, я повторяю вышеизложенное, но перед удалением правила DROP я нажимаю Ctrl-C для исполняемых файлов клиента. После удаления правила DROP я не заметил никаких признаков получения сервером клиентских запросов.

Я пришел к выводу, что клиент netat / curl должен пытаться повторно передавать данные бесконечно? Разве я не должен в конечном итоге ожидать неудачи? Кстати, то же самое происходит и с другими клиентами, например. Эрланг http / websocket_client.

Да, TCP пытается установить надежное соединение в ненадежной сети, поэтому допускает некоторую потерю пакетов. Отправитель будет продолжать повторять попытки отправки своих данных, пока он не получит ACK от получателя или пока не истечет время ожидания и не решит, что соединение потеряно.

В соответствии с эта почта, в Linux тайм-аут по умолчанию при отправке данных составляет чуть более 2 минут.

(Если ни одна из конечных точек не отправляет данные, они могут не обнаружить, что соединение вообще разорвано, если только они не настроены на отправку сообщений поддержки активности TCP. Однако по умолчанию сообщения поддержки активности TCP отправляются через 2 часа бездействия.)