Как устанавливается соединение по TCP

Когда программа открывает соединение с сервером, обычно сначала работает TCP — протокол, который помогает доставлять данные в правильном порядке и замечать их потерю. Для начала стороны должны убедиться, что сообщения доходят в обе стороны. Это происходит через трёхэтапное рукопожатие.

Три сообщения — и зачем каждое нужно

  1. Компьютер отправляет серверу `SYN`: запрос начать соединение и начальное число для нумерации своих данных.
  2. Сервер отвечает `SYN-ACK`: подтверждает запрос и сообщает собственное начальное число.
  3. Компьютер отправляет `ACK`, подтверждая ответ сервера.

Эти числа нужны, чтобы стороны могли упорядочивать данные и понимать, какие фрагменты уже получены. Обмен заодно проверяет, что связь работает в обоих направлениях: сервер услышал компьютер, а компьютер — сервер.

Почему первый байт приходится ждать

Сообщения проходят через сеть не мгновенно. Пока завершается рукопожатие, приложение обычно ещё не начинает отправлять полезные данные по этому соединению. Поэтому даже небольшой запрос может сначала потратить время на установку связи — особенно заметно это при медленном соединении или большом расстоянии до сервера.

После подтверждения TCP-соединение готово к обмену данными. Но это не обязательно означает, что тут же начнётся загрузка страницы: поверх TCP могут понадобиться дополнительные шаги, например согласование защищённого соединения. Так что до появления содержимого браузер может ждать не только ответа сервера, но и завершения нескольких подготовительных обменов.