39

Для TCP-соединения, когда я отсоединяю кабель и повторно подключаюсь через 30-40 секунд, проблем с потерей пакетов не возникает. Но когда время переподключения превышает несколько минут, все пакеты теряются. Я знаю, что он работает с таймером повторной передачи, но я хочу знать, что именно происходит, когда сетевой кабель отключен.

1 ответ1

57

По определению для многоуровневой модели как OSI или TCP/IP каждый уровень работает независимо и не знает о нижних уровнях.

Когда вы отсоединяете кабель, это физическое нарушение (уровень 1), поэтому почти моментально Ethernet (уровень 2) обнаруживает потерю сигнала (если вы работаете в Windows, вы увидите очень страшное всплывающее окно с информацией об отключении сети)

IP (уровень 3) и TCP (уровень 4) не заметят этого, поэтому они попытаются продолжать работать.

TCP не будет разрывать установленное TCP-соединение в течение определенного периода времени, потому что когда TCP отправляет данные, он ожидает ACK в ответ и, если он не приходит в течение определенного периода времени, он повторно передает данные.

TCP повторно передает данные, передавая их по IP, который передает их в Ethernet, который не может их отправить и просто отбрасывает.

TCP будет ждать снова и повторять этот процесс, пока не истечет тайм-аут, позволяющий ему объявить, что соединение установлено. TCP сбрасывает порядковый номер сегмента, отбрасывает информацию, которую пытался отправить, и освобождает ресурсы буфера и памяти, выделенные для этого соединения.

Подключите кабель до того, как это произойдет, и все будет продолжаться. Это то, что делает TCP надежным и в то же время уязвимым для атак DDos.

Если ОС имеет более одного интерфейса (например, ethernet и wi-fi), возможно, что, когда ethernet выйдет из строя, он попытается через Wi-Fi. Это зависит от того, как настроена маршрутизация, но в общих чертах « TCP не будет об этом знать ».

Базовая структура DDoS-атак: тысячи клиентов открывают каждое TCP-соединение каждые несколько секунд к серверу, а затем прекращают соединение. Каждое TCP-соединение остается открытым на сервере в течение длительного времени (тратит впустую ценные активы, такие как TCP-порты, выделенная память, пропускная способность и т.д.), Что приводит к засорению ресурсов сервера для посещения законных пользователей.

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