Что такое TCP Half Open Connection и TCP half closed connection

Я пытаюсь понять, в чем разница между TCP Half Open Connection и TCP Half closed connection, может ли кто-нибудь сказать, что именно они?

  • Использовать инструмент командной строки для использования другого интерфейса?
  • Отображается ли ваш MAC-адрес при попадании на сайт?
  • Есть ли какая-либо польза от использования IPv6 в моей домашней сети?
  • Рабочая станция VMware изолирует гостевой доступ к отдельному интернету
  • Как найти MAC-адрес удаленного компьютера?
  • Не удалось выполнить пинг удаленного сервера
  • Добавление локального принтера через создание стандартного порта TCP / IP и добавление сетевого принтера
  • Легко переключаться между DNS-адресами
  • 4 Solutions collect form web for “Что такое TCP Half Open Connection и TCP half closed connection”

    Это сообщение расширяется по полузамкнутым соединениям. Для полуоткрытых соединений см. Правильное описание KContreau.

    Что такое полузакрытые соединения? Или: это не ошибка – это особенность!

    Каждое TCP-соединение состоит из двух полусоединений, которые закрываются независимо друг от друга. Поэтому, если один конец посылает FIN, тогда на другом конце можно просто ACK, чтобы FIN (вместо FIN + ACK-ing), который сигнализирует конечной точке FIN, что у нее все еще есть данные для отправки. Таким образом, оба конца заканчиваются стабильным состоянием передачи данных, отличным от ESTABLISHED, а именно FIN_WAIT_2 (для принимающей стороны) и CLOSE_WAIT (для отправляющего конца). Такое соединение считается наполовину закрытым, а TCP фактически предназначен для поддержки этих сценариев, поэтому половина закрытых соединений является функцией TCP.

    История закрытого соединения

    В то время как RFC 793 описывает только исходный механизм без упоминания термина «полузакрытый», RFC 1122 подробно остановился на этом вопросе в разделе 4.2.2.13. Вы можете задаться вопросом, кому это нужно. Разработчики TCP также реализовали TCP / IP для Unix-системы и, как и каждый пользователь Unix, любили перенаправление ввода-вывода. Согласно W. Stevens (проиллюстрированный TCP / IP, раздел 18.5), стремление к потокам TCP / IP-перенаправления было мотивом для введения этой функции. Это позволяет использовать FIN или выполнять перевод EOF. Таким образом, это, в основном, функция, которая позволяет вам небрежно создавать impomptu взаимодействие с запросом / ответом на уровне приложения, где FIN сигнализирует «конец запроса».

    Другие ребята выполнили довольно приличную работу по описанию того, что на самом деле являются полуоткрытыми и полузакрытыми связями, но идея полуоткрытых соединений также часто просматривается в контексте того, что они являются ПРОБЛЕМАМИ.

    В Интернете есть аргументы в отношении того, что должна представлять терминология «полуоткрытая» или «полузакрытая», но, насколько мне известно, терминология является просто смысловой. Некоторые говорят, что «полуоткрытые» соединения являются «проблемой», а «полузакрытые» – это функция дизайна, которая позволяет закрыть отправляемый поток, закрыв отправляющий поток до того, как загрузка файла закончится в полузакрытом состоянии ( Как описано другими пользователями).

    Однако, в отношении другой … «проблемы»: требуется трехстороннее рукопожатие, чтобы открыть TCP-соединение и 4-стороннее рукопожатие, чтобы закрыть его.

    У TCP есть уязвимость в том, что последний пакет FIN, отправленный клиенту, может быть потенциально удален маршрутизаторами / сетями, что приводит к полуоткрытию соединения, когда фактическое намерение состояло в том, чтобы полностью закрыть соединение. Этот и подобные подходы были популярными типами атак типа «отказ в обслуживании», поскольку они не требуют большой пропускной способности, но потенциально могут использовать ценные дескрипторы, сокеты и потоки в зависимости от реализации сервера, но они также могут произойти в реальном мире С увеличением частоты благодаря нашим неряшливым беспроводным носителям.

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

    Это условие дополнительно усугубляется необязательным характером хранителей TCP, которые, если они полностью реализованы, были предназначены как решение уровня протокола (в отличие от прикладного уровня) для обнаружения мертвых / зомби-соединений. Но, когда был разработан TCP, пропускная способность была значительно более ценной, чем сейчас, и были опасения, что таймеры keep-alive для TCP будут слишком «болтливыми». Поэтому keep-alives являются необязательными, обычно не используются и не гарантируются для передачи маршрутизаторами согласно RFC1122. Поэтому … даже если вы включите keep-alives на уровне TCP в попытке обнаружить / обработать сценарий, вы можете обнаружить, что по мере того, как ваш трафик перемещается по всему миру, некоторые маршрутизаторы отбрасывают пакеты keep-alive … создание Потенциально ДРУГОЙ редкий сценарий для тестирования.

    Полуоткрытые соединения представляют собой сложную задачу для программистов, которые пишут серверы на базе TCP, в частности, потому что они могут непреднамеренно появляться случайно, во время высокой нагрузки … и, как правило, на производственных серверах … и могут быть Трудно заметить на этапах тестирования Alpha / Beta. По моему опыту, я обнаружил, что они встречаются, возможно, в 1 40000 подключений на серверах, обрабатывающих 2.5 миллиона соединений в день, но эти числа будут различаться в зависимости от условий трафика и условий трафика в каждом сегменте интернета между вашим сервером и клиентом ,

    Как инженер, может быть трудно выявить проблемы, которые возникают нечасто, и только на живых, развернутых серверах, поэтому важно попытаться имитировать это редкое состояние соединения при написании кода TCP-сервера, чтобы проанализировать, как ваш сервер будет реагировать, когда Столкнулись с такой ситуацией. Если ваш TCP-сервер использует статическое число рабочих потоков, например, вы можете найти все из них, потребляемые соединениями зомби, например, при развертывании на производство. Если соединения требуют большого количества рабочей памяти, конечный результат может быть похож на утечку памяти. И т.д.

    Без 100% -ного жизнеспособного решения keep-alive TCP оставляет его на уровне пользователя, чтобы определить, как обрабатываются полуоткрытые / закрытые соединения, поэтому ваш код должен иметь план / механизм для обнаружения, тайм-аута и очистки, Когда это условие происходит … то есть … если предположить, что это протокол, который вы изобрели, а не один из многих (плохих) открытых стандартов, которые обычно используют программисты. Конечно, я имею в виду протоколы, такие как HTTP, которые работают исключительно над TCP. Эти протоколы чрезвычайно завышены, по мнению этого программиста.

    Признавая слабые стороны TCP и его неудачную популярность для передачи HTTP / Web-трафика, интеллектуальные компании стремились найти замену. Например, Google экспериментировал с протоколом QUIC, который передает HTTP через UDP. Существует также открытый протокол TSCP. Однако ни один из этих протоколов не получил широкого распространения.

    Как правило, я строю все свои собственные серверы, чтобы говорить исключительно на моем собственном протоколе на основе UDP. UDP сложнее, чем вы могли бы подумать, но я чувствую, что я всегда настраиваю его на более быструю, умную, более низкую задержку, более низкую загруженность … но по крайней мере мне больше не приходится иметь дело с полуоткрытыми соединениями; )

    Когда TCP устанавливает соединение, он считается гарантированным, так как есть рукопожатие, которое имеет место:

    1. Инициирующий компьютер отправляет запрос на соединение, отправляя SYN
    2. Ответный компьютер предоставляет запрос, отвечая SYN-ACK
    3. Инициирующий компьютер отправляет подтверждение, отвечая ACK

    В этот момент соединение устанавливается, и данные начинают течь. Напротив, пакет UDP не гарантируется и просто отправляется в надежде, что он туда попадет.

    http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment

    Введите описание изображения здесь

    Официально, согласно RFC, полуоткрытое TCP-соединение – это когда одна сторона установленного соединения потерпела крах и не отправила уведомление о завершении соединения. Сегодня это не обычное использование.

    Неофициально, если можно сослаться на эмбриональную связь, которая является связующим звеном в процессе установления.

    http://en.wikipedia.org/wiki/Embryonic_connection

    Полузамкнуто противоположное этому неофициальному определению. Это состояние где-то посередине, где компьютеры срывают установленное соединение.

    Половинное закрытое соединение – это процесс, который устанавливается, когда один конец сервера и Клиент намерены прекратить соединение. TCP – это процесс, ориентированный на соединение, поэтому каждый сокет открывается для конкретного приложения. В TCP нет давления для завершения приложения. Таким образом, процесс, ориентированный на соединение, продлевает завершение с помощью сигналов ожидания. Это называется наполовину закрытым в TCP (соединение)

    Interesting Posts

    Как отформатировать мой 8-гигабайтный USB-накопитель в FAT / FAT16 в Windows 7?

    Максимальное сжатие файлов (для веб-передачи)?

    Как скрыть или свернуть окно X11 с консоли?

    Как получить значение даты в командной строке

    VBA Excel 2007 помогает ускорить код, чтобы скрыть строки

    Выключение монитора DisplayPort отключает монитор полностью

    Microsoft Word восстанавливает все открытые документы при нажатии на .DOC-файл

    Как конвертировать Webex WRF в любой другой формат видео?

    Ивритские письма, отображаемые в квадратах в еврейском шрифте в Chrome на Mac OS X 10.10.5 (Yosemite)

    Использование неподписанных драйверов в Windows 8

    Что не позволяет Windows перейти в режим ожидания?

    SSH запрашивает пароль, даже если установлен открытый ключ

    Как вертикально выравнивать изображение внутри div?

    Кабель VGA-HDMI аналогичен кабелю HDMI-VGA?

    Как я могу отменить «отметить раздел как активный» с помощью live CD на GParted / Linux?

    Давайте будем гением компьютера.