Ответ:
Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN. Далее:
- Сервер получает сегмент, запоминает номер последовательности клиента и создает сокет для нового клиента. В случае успеха сервер отправляет клиенту сегмент с флагами SYN + ACK, запрашивая подтверждение, и переходит в состояние SYN-RECEIVED. В случае ошибки (например, недостаток ресурсов) сервер может отправить сегмент с флагом RST.
- Клиент, получив сегмент с флагами SYN + ACK, запоминает номер последовательности сервера и отправляет сегмент с флагом ACK, подтверждая получение. После этого клиент переходит в состояние ESTABLISHED.
- Если клиент не получает ответа от сервера в течение определенного времени, он повторяет попытку установления соединения.
Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, он также переходит в состояние ESTABLISHED. Если сервер не получает ACK от клиента в течение тайм-аута, он закрывает соединение и переходит в состояние CLOSED.
Этот процесс называется трехсторонним рукопожатием (three-way handshake) и включает три сегмента: SYN → SYN-ACK → ACK.