Надёжность передачи данных по протоколу 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.