TCP 3-Way Handshake (SYN, SYN-ACK,ACK)

⚡ Розумний підсумок

Тристороннє рукостискання TCP – це ритуал встановлення з'єднання, з якого починається кожен TCP-сеанс. Клієнт і сервер обмінюються пакетами SYN, SYN-ACK та ACK для синхронізації порядкових номерів та підтвердження готовності обох сторін, перш ніж буде надіслано один байт даних програми.

  • 📨 Знайте чотири типи повідомлень: SYN ініціює, ACK підтверджує, SYN-ACK поєднує обидва, а FIN завершує TCP-з'єднання.
  • 🔁 Виконайте три кроки: SYN клієнта → SYN-ACK сервера → ACK клієнта; сеанс встановлюється лише після надходження третього пакета.
  • 🔢 Порядкові номери мають значення: кожна сторона вибирає початковий порядковий номер; інша сторона підтверджує його, додаючи одиницю, що забезпечує порядок у потоці байтів.
  • 🚪 План демонтажу: Після передачі даних TCP закриває з'єднання за допомогою пар FIN/ACK, щоб звільнити сокет на обох кінцях.
  • 🤖 Використовуйте штучний інтелект для аналізу пакетів: Пояснюють помічники зі штучним інтелектом Wireshark захоплення, позначати відсутні підтвердження (ACK) та виділяти SYN-перевантаження або напіввідкриті з'єднання.

TCP 3-Way Handshake

Що таке тристороннє рукостискання TCP?

Команда Тристороннє рукостискання TCP це процедура, яку використовують клієнт і сервер на Мережа TCP/IP встановити надійне з’єднання перед обміном будь-якими даними програми. Як випливає з назви, це складається з трьох кроків, на яких обидві сторони обмінюються пакетами синхронізації (SYN) та підтвердження (ACK) і узгоджують початкові порядкові номери, які вони використовуватимуть.

Рукостискання розроблено таким чином, щоб обидві кінцеві точки могли симетрично ініціювати, узгоджувати та розривати TCP-сокети. Після завершення рукостискання з'єднання стає повнодуплексним — обидві сторони можуть надсилати та отримувати дані паралельно, доки одна з них не видасть команду FIN для закриття сеансу.

Типи TCP-повідомлень

Чотири контрольні прапорці з'являються неодноразово під час рукостискання та розриву.

Повідомлення Опис
SYN Ініціює з'єднання та синхронізує порядкові номери між пристроями.
ACK Підтверджує іншій стороні отримання попереднього сегмента.
SYN-ACK Комбіноване повідомлення — SYN від локального пристрою плюс ACK попереднього SYN вузла.
FIN Використовується для коректного завершення з'єднання.

Процес тристороннього рукостискання TCP

TCP-трафік завжди починається з тристороннього рукостискання. Клієнт ініціює розмову, запитуючи сеанс із сервером.

Діаграма тристороннього рукостискання TCP

Діаграма тристороннього рукостискання.

  • Крок 1 — SYN: Клієнт надсилає сегмент із встановленим прапорцем SYN. ​​Він повідомляє серверу: «Я хочу розпочати зв'язок» та пропонує початковий порядковий номер.
  • Крок 2 — SYN-ACK: Сервер відповідає сегментом, у якому встановлено прапорці SYN та ACK. ACK підтверджує SYN клієнта, а SYN пропонує власний початковий порядковий номер сервера.
  • Крок 3 — ПІДТВЕРДЖЕННЯ: Клієнт підтверджує SYN-ACK сервера остаточним підтвердженням. З'єднання тепер встановлено, і обидві сторони можуть розпочати transmitдані програми.

Реальний приклад

Приклад реального тристороннього рукостискання TCP

Ось розв'язаний приклад з конкретними порядковими номерами.

  • Хост X розпочинає з'єднання, надсилаючи TCP SYN-пакет на сервер. Пакет містить випадковий початковий порядковий номер, наприклад, 4321 — що позначає початок потоку байтів, який надсилатиме хост X.
  • Сервер отримує SYN та відповідає SYN-ACK. Номер ACK – це порядковий номер хоста X, збільшений на 1 (4322), а SYN пропонує власний початковий порядковий номер сервера.
  • Хост X відповідає остаточним підтвердженням (ACK), номер підтвердження якого дорівнює порядковому номеру сервера, збільшеному на 1.

Після завершення обміну даними TCP розриває з'єднання за допомогою чотиристоронньої послідовності FIN/ACK, щоб обидві кінцеві точки могли коректно звільнити сокет.

Чому TCP потрібне тристороннє рукостискання

Рукостискання — це не просто формальність, воно вирішує три конкретні проблеми, пов'язані з надійним транспортуванням байтового потоку:

  • Синхронізація порядкових номерів: обидва вузли дізнаються початковий порядковий номер іншої сторони, який TCP використовує для виявлення втрачених або невпорядкованих сегментів.
  • Угода про стан підключення: Третє підтвердження (ACK) підтверджує отримання SYN-ACK сервера, тому жодна зі сторін не починає надсилати дані, доки обидві не отримають ВСТАНОВЛЕНО стан.
  • Захист від дублікатів пакетів: Випадкові початкові порядкові номери та часові стани рукостискання запобігають помилковому прийняттю застарілих сегментів з попереднього сеансу.

Поширені проблеми з TCP-підтвердженням

Рукостискання є надійним, але воно може порушуватися різними способами. Мережеві інженери зазвичай бачать одне з наступного:

  • SYN-атаки з перевантаженням: Зловмисний клієнт надсилає тисячі SYN-повідомлень, не відповідаючи на SYN-ACK-повідомлення, вичерпуючи таблицю підключень сервера. SYN-файли cookie є стандартним захистом.
  • Напіввідкриті з'єднання: Коли третє підтвердження (ACK) втрачається, з'єднання залишається напіввідкритим і зрештою очищується через тайм-аут.
  • Зниження брандмауера або NAT під час роботи: Проміжні блоки з функцією збереження стану, які втрачають стан, можуть скидати пакети SYN-ACK і змушувати клієнта повторювати спробу.
  • Скидання RST: Якщо сервер не прослуховує запитуваний порт, він відповідає SYN запитом RST, що негайно завершує спробу.

Поширені запитання

Два повідомлення не можуть довести, що обидві сторони погодилися щодо початкових порядкових номерів і готові до надсилання. Третє підтвердження ACK підтверджує отримання SYN-ACK сервера, гарантуючи, що обидві кінцеві точки досягнуть стану ESTABLISHED до початку потоку даних.

SYN – це єдиний прапорець, який відкриває розмову та пропонує початковий порядковий номер. SYN-ACK поєднує SYN з підтвердженням попереднього SYN вузла, завершуючи синхронізацію в одному пакеті.

SYN-флуд перевантажує сервер, надсилаючи багато SYN-пакетів без завершення встановлення зв'язку. Напіввідкриті з'єднання заповнюють чергу відкладених запитів і блокують легітимних користувачів. SYN-файли cookie є стандартним засобом зменшення цього.

TCP закриває з'єднання за допомогою чотиристороннього рукостискання обміну FIN та ACK. Кожен напрямок закривається незалежно, що дозволяє одній стороні завершити надсилання даних навіть після того, як інша сторона закрила свою половину.

Початковий порядковий номер — це випадково вибране 32-бітове значення, яке кожна кінцева точка обирає для свого власного потоку байтів. Він є початковим значенням лічильника, що використовується для виявлення відсутніх або дублікатів сегментів та захисту від підроблених пакетів.

Ні. UDP не використовує з'єднання та надсилає дейтаграми без жодного рукостискання. Це робить його швидшим та легшим за TCP, але програми повинні самостійно обробляти надійність, упорядкування та контроль перевантаження.

Помічники штучного інтелекту анотують захоплення пакетів, класифікують їхtransmits та RST, а також виявляють SYN-флуди. Вони перетворюють Wireshark фільтрує простою англійською мовою та рекомендує наступний крок діагностики проблем з підключенням.

Так. Помічники кодування зі штучним інтелектом перетворюють запит простою англійською мовою на Python Scapy або скрипт netcat, який запускає та перевіряє тристороннє рукостискання, а потім пояснює кожен рядок, щоб інженери могли переглянути його перед запуском.

Підсумуйте цей пост за допомогою: