Соединение TCP определяется IP-адресом источника, портом источника, IP-адресом назначения и портом назначения. Изменение IP-адреса клиента на вашем маршрутизаторе не приводит к немедленному прекращению соединения на вашем клиенте и сервере; однако, если вы оставите маршрутизатор в этом состоянии достаточно долго, соединение со временем перестанет существовать после определенного количества попыток и истечения времени ожидания. Точное количество определяется с помощью настраиваемых параметров ядра как на вашем клиенте, так и на вашем эхо-сервере. Вы можете проверить эти параметры с помощью sysctl -a | grep tcp
. После изменения IP-адреса клиента на маршрутизаторе клиент по-прежнему может отправлять пакеты на сервер, а сервер также может получать эти пакеты. , но попытка сервера ответить / подтвердить ответ клиенту не может быть перенаправлена обратно клиенту. Это приводит к попыткам до определенного предела на клиенте (поэтому вы не видели ошибок на стороне клиента). После того, как вы вернули IP-адрес клиента на своем маршрутизаторе, сервер снова сможет обмениваться данными с клиентом, поскольку теперь маршрутизатор может правильно направить пакет сервера клиенту.
Это не повторяется укажите c в стек Linux TCP. rf c 2988 определяет стандартный алгоритм, который отправители должны использовать для вычисления и управления таймером повторной передачи.