Как происходит установка и завершение TCP-соединения?
Модели OSI и TCP/IP
Соединение открывается трёхшаговым рукопожатием SYN → SYN-ACK → ACK, а закрывается обменом FIN и ACK в обе стороны с состоянием TIME_WAIT у инициатора.
Установка соединения
- Клиент шлёт
SYNсо своим начальным номером последовательности. - Сервер отвечает
SYN-ACK: свой номер плюс подтверждение клиентского. - Клиент шлёт
ACK— соединение установлено, можно передавать данные.
Три шага нужны, чтобы обе стороны подтвердили и свои, и чужие стартовые номера последовательности.
Завершение
- Каждая сторона закрывается независимо:
FIN→ACK, затем то же в обратную сторону — обычно четыре сегмента. - Инициатор остаётся в
TIME_WAIT(1–2 минуты), чтобы дошли запоздавшие сегменты и порт не переиспользовался преждевременно. RST— мгновенный разрыв соединения без обмена FIN.
Практика
- SYN-flood — классическая DoS-атака на полуоткрытые соединения; лечится SYN cookies.
- Много TIME_WAIT на клиенте — повод включить keep-alive и пулы соединений.
Коротко для собеседования
Три сегмента на открытие нужны, чтобы обе стороны синхронизировали стартовые номера последовательности, а закрывается каждое направление отдельно. На практике переиспользуйте соединения через keep-alive и пулы, иначе платите RTT на каждый запрос и копите TIME_WAIT.