Что происходит с TCP-соединениями, когда я отсоединяю кабель Ethernet?


42

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


9
«что именно происходит» будет очень трудно ответить. В эти дни ОС может делать «умные» вещи, например обнаруживать, что кабель удален. Отбрасывание маршрутов к этой сети из таблицы маршрутизации. Активация новых маршрутов по беспроводной сети .... Все это мешает простому универсальному объяснению.
Хеннес

5
Вы искали в битовой корзине пропавшие пакеты?
Даниэль Р Хикс

4
Одна вещь , которая может случиться наверняка, что текущие коммуникации прерваны в середине , как
ereOn

Это зависит от ОС и ее конфигурации. Для MS Windows попробуйте Google windows mediasense.
Забой Кампула

Ответы:


60

По определению для многоуровневой модели, как 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 выйдет из строя, он попытается через wifi. Это зависит от того, как настроена маршрутизация, но в общих чертах « TCP не будет об этом знать ».

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


7
Это то, что говорит модель, но я полагаю, что реальные ОС обнаруживают некоторые сбои и немедленно уничтожают соединения. Это просто полезная вещь.
USR

8
@usr Почему было бы полезно разорвать каждое соединение только потому, что кто-то включил и выключил Ethernet-коммутатор, к которому подключен мой компьютер?
CVn

9
@usr Отключение сетевой карты через административные интерфейсы ОС - совершенно другая операция по сравнению с физическим отключением кабеля или иным способом разрыва связи физического уровня. Пожалуйста, не путайте их.
CVn

7
Кроме того, если вы на самом деле не отправляете данные TCP, когда кабель отключен, он никогда не заметит. Вот почему вы должны продолжать отправлять сообщения поддержки активности - приложения, которые только когда-либо слушают, никогда не узнают, если соединение «умирает». С другой стороны, это также означает, что если ни одна из сторон не попыталась отправить что-либо, когда кабель был отключен, соединение будет работать нормально после того, как кабель снова подключен. TCP используется совсем не так, как было задумано :) эксперимент TCP-over-Pigeon-mail :))
Luaan

11
@usr Это очень плохой вариант реализации - не следовать стандартам. TCP-соединения могут пережить временные перебои в сети. Он предназначен для этого. На самом деле раньше вы могли даже перезагрузить компьютер и по-прежнему иметь TCP-соединение, но это не всегда практично. Ваше предположение о том, что каждый хочет быть отключенным, когда кабель натянут, ложно, и это не то, как системы были спроектированы.
Брэд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.