Надёжность передачи данных по протоколу TCP обеспечивается за счёт установления логического соединения. TCP соединения является двунаправленным полнодуплексным каналом между двумя прикладными процессами в общей IP сети. TCP соединение устанавливается в три фазы (3-way handshake) (рисунок 1).
Установление TCP соединения начинается с посылки TCP узлом 1 сегмента с установленным флагом «SYN». В качестве номера последовательности указывается случайное число «ISN», в качестве номера подтверждения указывается нулевой октет, размер «окна» выставляется по умолчанию для определённой операционной системы (для Windows 16384 байт), параметр «MSS» и параметр запроса для опции «SACK» (Selective АСК - выборочные подтверждения). Опция «SACK» позволяет установить соединение с выборочным подтверждением принятых TCP сегментов, экономя тем самым полосу пропускания и аппаратные ресурсы компьютера.
Рисунок 1. Установление TCP соединения
Если TCP узел 2 готов установить TCP соединение с TCP узлом 1, то есть данный TCP порт не закрыт и ресурсов компьютера хватает для установки соединения, то узел 2 посылает ответ с установленными флагами «SYN» и «АСК». Такой ответ также содержит параметры «SN» равный ISN2, «Аск» равный ISN1+1, «Window» равный n*MSS, «MSS» и параметр «SACK-допуск», как указание на готовность использовать опцию «SACK». Перед тем, как отравить этот сегмент, TCP узел 2 должен подсчитать допустимый размер «окна». Для этого вычисляется сначала общий «MSS» минимальный «MSS» для двух узлов, затем делится размер «окна» умолчанию (16384 байта) на величину общего «MSS» и полученный результат округляется в большую сторону до целого числа «n». Допустимый размер «окна» вычисляет как произведение «n» на общий «MSS».
На завершающей стадии установления соединения TCP узел отправляет подтверждение принятых параметров от TCP узла 2.