TCP 3-посочно ръкостискане (SYN, SYN-ACK,ACK)

⚡ Умно обобщение

TCP 3-Way Handshake е ритуалът за установяване на връзка, с който започва всяка TCP сесия. Клиентът и сървърът обменят SYN, SYN-ACK и ACK пакети, за да синхронизират последователните номера и да потвърдят, че двете страни са готови, преди да бъде изпратен и един байт от данните на приложението.

  • 📨 Познавайте четирите типа съобщения: SYN инициира, ACK потвърждава, SYN-ACK комбинира и двете, а FIN прекратява TCP връзка.
  • 🔁 Следвайте трите стъпки: клиент SYN → сървър SYN-ACK → клиент ACK; сесията се установява едва след пристигането на третия пакет.
  • 🔢 Поредните номера имат значение: Всяка страна избира начален пореден номер; другата страна го потвърждава, като добавя единица, което поддържа подредеността на байтовия поток.
  • 🚪 План за демонтаж: След прехвърляне на данни, TCP затваря връзката с FIN/ACK двойки, за да освободи сокета и от двата края.
  • 🤖 Използвайте изкуствен интелект за анализ на пакети: Асистентите с изкуствен интелект обясняват Wireshark заснемания, маркиране на липсващи ACK-ове и маркиране на SYN наводнения или полуотворени връзки.

TCP 3-посочно ръкостискане

Какво е TCP тристранно ръкостискане?

- TCP тристранно ръкостискане е процедурата, която клиентът и сървърът използват в TCP/IP мрежа да се установи надеждна връзка, преди да се обменят каквито и да е данни от приложението. Както подсказва името, то се състои от три стъпки, в които двете страни обменят пакети за синхронизация (SYN) и потвърждение (ACK) и се договарят за началните поредни номера, които ще използват.

Ръкостискането е проектирано така, че и двете крайни точки да могат да инициират, договарят и прекъсват TCP сокети симетрично. След като ръкостискането приключи, връзката е пълнодуплексна - и двете страни могат да изпращат и получават паралелно, докато някоя от тях не издаде FIN за затваряне на сесията.

Типове TCP съобщения

Четири контролни флага се появяват многократно по време на ръкостискането и разглобяването.

Съобщение Descriptйон
СИН Инициира връзка и синхронизира последователните номера между устройствата.
ACK Потвърждава на другата страна, че предишният сегмент е получен.
SYN-ACK Комбинирано съобщение — SYN от локалното устройство плюс ACK на по-ранния SYN на партньора.
FIN Използва се за грациозно прекратяване на връзка.

TCP трипосочен процес на ръкостискане

TCP трафикът винаги започва с тристранно ръкостискане. Клиентът инициира разговора, като поиска сесия със сървъра.

Диаграма на тристранното ръкостискане на TCP

Диаграма на 3-странно ръкостискане.

  • Стъпка 1 — SYN: Клиентът изпраща сегмент с установен SYN флаг. Той казва на сървъра „Искам да започна комуникация“ и предлага начален пореден номер.
  • Стъпка 2 — SYN-ACK: Сървърът отговаря със сегмент, в който са зададени и двата флага SYN, и ACK. ACK потвърждава SYN на клиента, а SYN предлага собствения начален пореден номер на сървъра.
  • Стъпка 3 — ПОТВЪРЖДЕНИЕ: Клиентът потвърждава SYN-ACK на сървъра с окончателно ACK. Връзката вече е установена и двете страни могат да започнат. transmitданни от приложението.

Пример от реалния свят

Пример от реалния свят за 3-странно ръкостискане чрез 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 flood атаки: Злонамерен клиент изпраща хиляди SYN-и, без да отговаря на SYN-ACK-и, изчерпвайки таблицата за връзки на сървъра. SYN бисквитките са стандартната защита.
  • Полуотворени връзки: Когато третият ACK се загуби, връзката остава полуотворена и в крайна сметка се прекратява поради изчакване.
  • Сривове на защитната стена или NAT по време на полет: Междинните кутии със състояние, които губят състояние, могат да изпуснат SYN-ACK пакети и да накарат клиента да опита отново.
  • RST нулиране: Ако сървърът не слуша на заявения порт, той отговаря на SYN с RST, което незабавно прекратява опита.

Въпроси и Отговори

Две съобщения не могат да докажат, че и двете страни са се споразумели за началните поредни номера и са готови за изпращане. Третото ACK потвърждава, че SYN-ACK на сървъра е пристигнал, като гарантира, че и двете крайни точки ще достигнат състояние ESTABLISHED, преди данните да започнат да постъпват.

SYN е единичен флаг, който отваря разговора и предлага начален пореден номер. SYN-ACK комбинира SYN с потвърждение на по-ранния SYN на партньора, завършвайки синхронизацията в един пакет.

SYN наводнението претоварва сървъра, като изпраща много SYN пакети, без да завършва ръкостискането. Полуотворените връзки запълват опашката от неизпълнени задачи и блокират легитимни потребители. SYN бисквитките са стандартното средство за смекчаване.

TCP затваря връзката чрез четиристранно ръкостискане (handshake) с обмен на FIN и ACK. Всяка посока се затваря независимо, което позволява на едната страна да завърши изпращането на данни, дори след като другата страна е затворила своята половина.

Първоначалният пореден номер е произволно избрана 32-битова стойност, която всяка крайна точка избира за собствения си байтов поток. Той задава началните стойности на брояча, използван за откриване на липсващи или дублиращи се сегменти и за защита от подправени пакети.

Не. UDP е без свързване и изпраща дейтаграми без никакво „ръкостискане“. Това го прави по-бърз и по-лек от TCP, но приложенията трябва сами да се справят с надеждността, подреждането и контрола на претоварването.

Асистентите с изкуствен интелект анотират заснети пакети, класифицират...transmits и RSTs, и откриват SYN наводнения. Те превеждат Wireshark филтрира на разбираем английски и препоръчва следващата диагностична стъпка за проблеми с връзката.

Да. Асистентите за кодиране с изкуствен интелект превръщат заявка на обикновен английски език в Python Scapy или netcat скрипт, който задейства и проверява тристранното ръкостискане, след което обяснява всеки ред, за да могат инженерите да го прегледат, преди да го изпълнят.

Обобщете тази публикация с: