Таблица содержания
Что такое протокол TCP?
TCP используется для общения между устройствами в сети. Он означает Протокол управления передачей. Он используется для установления соединения между клиентом и сервером. Он работает путем разбиения данных на небольшие пакеты, которые могут передаваться через сетевую активность.
Управление соединением TCP включает в себя три рукопожатия и четыре волны.
Сегмент — это функция маршрутизации навигации для всего протокола TCP/IP. Сегмент пакета относится к IP-пакетам данных в сети протокола TCP/IP, которые используют маршрутизацию, запрашивают каждый сегмент маршрута сети, IP-адрес, протокол обмена и т. д.
- SYN: Синхронизация номеров последовательности
- ACK: Поле подтверждения значимо
- Seq: Последовательный номер
- 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.