how/network
Three-way handshake → данные → four-way close. Зачем три рукопожатия и почему `ss` показывает столько состояний после закрытия.
TCP - это разговор с подтверждениями. Прежде чем начать обмен данными, две стороны должны «договориться»: каждая выбирает свой случайный «номер начала», и каждая должна подтвердить что увидела чужой. На это нужно три пакета - это и есть знаменитый three-way handshake.
После handshake'а данные ходят свободно. Когда стороны хотят закончить - они отдельно «прощаются» в обе стороны (TCP полудуплексный по закрытию: одна сторона может «всё, я сказал», а другая ещё что-то отправляет).
Из всех этих переходов рождается state machine - на каждой
стороне соединение проходит через цепочку состояний. Их можно увидеть
живьём через ss -tn - каждое ESTABLISHED/TIME_WAIT/etc. в
выводе именно отсюда.
Нажми ▶ - пройдём весь цикл от первого SYN до финального TIME_WAIT.
Сервер открыл слушающий сокет на порту 443 (см.
port). Стек ОС знает: «если пакет придёт сюда - отдай его этому
приложению». Состояние сервера - LISTEN.
Клиент пока в CLOSED - никаких сокетов не открыто. Когда
приложение вызовет connect() - стек начнёт активный handshake.
итого
Что важно запомнить:
seq и хочет убедиться что собеседник его
получил. Без этого атакующий мог бы инжектить пакеты в чужие
соединенияSYN_SENT навсегда = сервер не отвечает (фаервол дропает
/ порт закрыт). SYN_RECEIVED навсегда на сервере = очередь
входящих коннектов забитаss много
TIME_WAIT - это след массового скачивания, не утечкаЕсли хочешь смотреть состояния руками - есть [[tcp-states|статья про все состояния]] и lab по tcp-handshake с tcpdump'ом.