В связи с крайней ненадежностью нижележащих протокольных уровней TCP использует процедуру троекратного рукопожатия для установления соединения (см. рис.).
На рисунке 6.18 ПВУ – это один из протоколов вышележащего уровня (HTTP, FTP и т.д.). Последовательность следующая:
1. ПВУ А посылает в свой объект TCP примитив «Открыть», указав адрес и параметры.
2. TCP А посылает TCP B сегмент SYN с номером, к примеру, 55.(флаг SYN=1, «номер в последовательности» = 55). Этот начальный номер будет затем использоваться в процедуре передачи данных.
Начальный порядковый номер устанавливается с помощью специального генератора случайных чисел, который увеличивает свои значения каждые 4 мкс, работая по модулю 232. Это значит, что следующий раз такой номер встретится через 4,5 часа.
3. TCP B подтверждает получение запроса на соединение посылкой пакета SYN-ACK (SYN=1, ACK-1) с собственным начальным номером (например, 202) и с установленным в поле подтверждения номером 56 (следующий ожидаемый на приеме номер).
Рис.6.18.
4. TCP A посылает сегмент ACK с номером 203 (номер следующего ожидаемого байта).
5. TCP A уведомляет ПВУ А об открытии соединения.
6. Получив ACK 203 TCP B уведомляет примитивом «успешное открытие» ПВУ В.