• Blog
  • Что такое TCP и как работает TCP?

Что такое TCP и как работает TCP?

Oct 19, 2023   |   5 мин.
Что такое TCP и как работает TCP?

Содержание

Что такое протокол TCP?

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

Управление соединением TCP включает в себя три рукопожатия и четыре волны.

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

  • SYN: Синхронизировать номера последовательности
  • ACK: Поле подтверждения значимо
  • Последовательность: Номер последовательности
  • Акк: Номер подтверждения

Процесс трехстороннего рукопожатия

Пожатие руки

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

Первое рукопожатие

Клиент отправляет сегмент 1 на сервер, где флаг SYN указывает, что это сегмент для запроса соединения. Кроме того, поле номера последовательности (сокращенно seq на рисунке) установлено на начальный номер последовательности x (Initial Sequence Number, ISN), и обе стороны в TCP-соединении могут случайным образом выбирать начальный номер последовательности.

После отправки сегмента 1 клиент переходит в состояние SYN-SENT и ожидает подтверждения от сервера.

Второе рукопожатие

После получения запроса на подключение от клиента сервер отправляет сегмент 2 клиенту в качестве ответа.

Флаг ACK установлен в 1, что указывает на то, что он отвечает клиенту, и его поле номера подтверждения (Acknowledgment Number, сокращенно ack) будет действительным.

Значение этого поля равно x + 1, что является порядковым номером сегмента, полученного от клиента, увеличенным на единицу, что представляет собой порядковый номер данных, которые сервер ожидает получить от клиента в следующий раз.

Кроме того, флаг SYN сегмента 2 также установлен в 1, что означает, что это также сегмент, используемый для инициации соединения, и номер последовательности seq установлен в начальный номер последовательности сервера y.

После отправки сегмента 2 сервер переходит в состояние SYN-RECEIVED.

Третий рукопожатие

После получения сегмента 2 клиент отправляет сегмент 3 на сервер, и его флаг ACK равен 1, что означает, что он отвечает серверу, подтверждая, что поле номера последовательности ack равно y + 1, а поле номера последовательности seq равно x + 1. После отправки этого сегмента обе стороны переходят в состояние УСТАНОВЛЕНО, что указывает на установление соединения.

Определение статуса соединения по статусу отображения клиента и сервера.

  • Клиент и сервер находятся в закрытом состоянии, указывающем на отсутствие соединительной связи.
  • Клиент отправляет запрос, клиент открывает состояние отправки (SYN-отправлено), а сервер открывает состояние прослушивания (Слушать).
  • Когда сервер получает запрос клиента, сервер переходит в состояние ответа (SYN-recvd);
  • Когда клиент получает ответ от сервера, клиент переходит в состояние стабильного соединения (Установлено) и одновременно отправляет второй пакет данных.
  • Когда сервер получает вторые данные от клиента, сервер переходит в состояние стабильного соединения (Установлено).
  • После того, как две стороны установят стабильное соединение, пришло время начать регулярное обмен данных.

Как работают три рукопожатия?

Трехстороннее рукопожатие позволяет обеим сторонам подтвердить возможности отправки и приема самих себя и другой стороны в качестве процесса:

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

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

Третье рукопожатие: сервер может подтвердить, что его возможности отправки и приема стандартны, а также возможности отправки и приема другой стороны являются стандартными.

Трехстороннее рукопожатие может позволить обеим сторонам подтвердить, что возможности отправки и приема сигналов у них и у другой стороны соответствуют стандартам, чтобы они могли общаться.

Как работают четыре волны?

Установка соединения требует трех рукопожатий, а завершение соединения требует четырех волн.

Подробный процесс махания четыре раза

1. Клиент отправляет сегмент закрытия соединения, запрашивая закрытие соединения и прекращение отправки данных. Затем поле номера последовательности seq = x (равное номеру последовательности последнего байта всех ранее отправленных данных плюс один), после чего клиент перейдет в состояние FIN-WAIT-1, ожидая сообщение подтверждения от сервера.

2. Сервер получает сегмент FIN, отправляет обратное подтверждение, ACK = 1, ack = x + 1, и устанавливает свой номер последовательности seq = y, затем сервер переходит в состояние CLOSE-WAIT.

3. Клиент переходит в состояние FIN-WAIT-2 сразу после получения сегмента ACK от сервера и все еще может получать данные seq=z от сервера до получения сегмента FIN.

4. Затем сервер отправит все данные, он отправит сегмент FIN клиенту, а затем сервер перейдет в состояние LAST-ACK, ожидая сегмент подтверждения от клиента.

5. После того, как клиент получает сегмент FIN от сервера, он отправляет сообщение ACK серверу и затем переходит в состояние TIME-WAIT.

6. Сервер перейдет в состояние ЗАКРЫТО сразу после получения сообщения ACK от клиента и завершит соединение в это время. В общем случае, сервер переходит в состояние ЗАКРЫТО раньше, чем клиент, потому что нет времени ожидания.

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

Почему TCP закрывает соединение четыре раза вместо трех?

После получения сегмента пакета FIN от клиента сервер может все еще иметь некоторые данные для передачи. Поэтому сервер не может немедленно закрыть соединение. Вместо этого он ответит сегментом пакета ACK и может продолжать отправлять данные.

Клиент не отвечает, пока сервер не отправит клиенту сегмент пакета FIN, указывающий, что все данные отправлены. Сервер запрашивает закрытие соединения. Поэтому требуется четыре волны.

Какие проблемы безопасности возникают во время TCP-соединения?

В процессе трехстороннего рукопожатия, после того, как сервер отправляет SYN-ACK, TCP-соединение до получения ACK от клиента называется полуоткрытым соединением. В это время сервер находится в состоянии SYN_RCVD. При получении ACK сервер может перейти в состояние ESTABLISHED.

SYN-атака означает, что атакующий клиент подделывает большое количество несуществующих IP-адресов в короткий период времени, непрерывно отправляет SYN-пакеты на сервер, и сервер отвечает подтверждающим пакетом, ожидая подтверждения от клиента.

Поскольку исходный адрес не существует, сервер должен продолжать повторно передавать данные, пока не истечет время ожидания. В результате эти поддельные пакеты SYN будут занимать очередь несоединенных пакетов на длительное время, и обычные запросы SYN будут отбрасываться.

В случае серьезных случаев, это вызовет перегрузку сети или даже сбои системы. Атака SYN - типичная атака DoS/DDoS. Нажмите, чтобы узнать больше о атаках DoS/DDoS.