Сети

Каковы этапы установления связи TCP?

Каковы этапы установления связи TCP?

TCP или протокол управления передачей - это стандартный протокол транспортного уровня, который Интернет использует для передачи данных. Запрос на комментарии (RFC) 793 определяет TCP как надежный и ориентированный на соединение протокол. Поскольку он ориентирован на соединение, перед передачей каких-либо данных необходимо установить путь или соединение. TCP использует механизм трехстороннего подтверждения для установления соединения между двумя устройствами. В этом руководстве мы увидим, как работает механизм трехстороннего рукопожатия. Давайте сначала посмотрим на проблемы с моделью двустороннего рукопожатия.

Проблемы с моделью двустороннего рукопожатия

Модель двустороннего рукопожатия не удалась из-за старой проблемы с дублированием пакетов. Предположим, что на серверную машину приходит старый дублирующий пакет. Этот старый пакет прибыл из ранее закрытого соединения и содержит порядковый номер 'z'. В какой-то момент во время нового соединения сервер принимает пакет с порядковым номером 'z'. Когда он получает этот старый пакет с тем же порядковым номером 'z', он неосознанно принимает этот старый пакет и отбрасывает фактический пакет из нового соединения.

В приведенном выше случае, если соединение между клиентом и сервером не установлено, получение старого дублированного пакета запроса на соединение по-прежнему вызывает проблемы. Если сервер получит такой пакет, он ответит пакетом SYN + ACK. Этот пакет будет отброшен клиентом, потому что он не собирался подключаться. Но сервер войдет в состояние тупика, ожидая, пока клиент отправит данные.

Другая проблема заключается в том, что если хост C отправляет запрос на подключение к серверу, выдавая себя за клиента, сервер ответит клиенту ACK. Клиент отбросит этот пакет ACK и скажет серверу разорвать соединение. В течение этого интервала событий хост C может запустить атаку спуфинга, отправив большое количество пакетов.

Модель трехстороннего рукопожатия в TCP / IP

Модель трехстороннего рукопожатия очень важна. Если мы не используем его и начнем напрямую отправлять данные, принимающее приложение может начать получать дублирующиеся пакеты. Злоумышленник может получить шанс провести атаки (например, DDoS) между подключениями. Процедура трехстороннего рукопожатия запускается одной машиной, а другая сторона на нее отвечает. Для объяснения этой процедуры используется следующее соглашение:

«Если сайт получает пакет с порядковым номером« x », он ответит с номером ACK« x + 1 ».”

Давайте подытожим шаги, выполняемые при трехстороннем рукопожатии между клиентским компьютером и сервером:

Шаг 1. В первом рукопожатии клиент отправляет серверу пакет запроса SYN-соединения со случайным начальным порядковым номером ('x').

Шаг 2. Во втором квитировании сервер отвечает пакетом SYN со случайным порядковым номером ('y') и пакетом ACK с порядковым номером ('x + 1'), чтобы подтвердить отправленный начальный порядковый номер ('x'). клиентом.

Шаг 3. В третьем рукопожатии клиент отправит пакет ACK с порядковым номером ('y + 1') на сервер для подтверждения пакета SYN ('y'), отправленного сервером.

Шаг 4. Оба конца теперь синхронизированы и могут начать передачу данных независимо. [1]

Процедура трехэтапного установления связи TCP по-прежнему действует, если обе стороны одновременно запускают процесс инициализации. В такой ситуации каждая машина после отправки пакета «SYN» получит сегмент «SYN» без подтверждения. Если получателю приходит старый дублированный пакет «SYN», получателю может показаться, что в это же время идет процесс установления соединения. Мы можем использовать пакеты «сброса», чтобы устранить эту двусмысленность.

Завершение TCP-соединения

Любая из двух сторон может разорвать TCP-соединение. Для этого любая сторона может передать сегмент TCP с установленным битом FIN. Это будет означать, что у отправляющей стороны больше нет данных для отправки. Принимающая сторона подтвердит этот пакет FIN, отправив пакет подтверждения. Это закроет соединение с одной стороны (со стороны отправителя). Теперь получатель будет использовать те же шаги, чтобы разорвать соединение от своего имени. Это полностью закроет соединение.

Проблемы с моделью трехстороннего рукопожатия

В случае, если ACK от клиента к серверу потерян или заблокирован на третьем этапе установления связи, клиент не будет знать об этой ситуации. Клиент будет считать, что соединение установлено, и начнет отправлять данные. Сервер все еще ожидает ACK, который уже был потерян, поэтому он отбросит данные, полученные от клиента. [2]

Заключение

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

Рекомендации

  1. Сюй, Ф., Хван, Й., Цай, C., Цай, Вт., Ли, C., И Чанг, К. (2016). ЛОВУШКА: сервер трехстороннего квитирования для установления TCP-соединения. Прикладные науки, 6 (11), 358. https: // doi.org / 10.3390 / app6110358
  1. Цинь-Мин Ма, Шоу-Инь Лю, Сяо-цзюнь Вэнь. (2016). Протокол трехстороннего установления связи TCP на основе квантовой запутанности. Журнал компьютеров, 27 (3), 33-40, DOI: 10.3966/199115592016102703004
Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...
Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...
Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...