logo
Основы организации компьютерных сетей

Открытое tcp-соединение с трехсторонним квитированием

 

Для установления или инициализации соединения как бы два протокола TCP используют не сам TCP, а процессы или конечные станции, и должны синхронизировать начальные порядковые номера (ISN) сегментов друг друга для данного соединения. Порядковые номера используются для того, чтобы отслеживать последовательность обмена и гарантировать отсутствие потерянных фрагментов данных, которые требуют для пересылки нескольких пакетов. Начальный порядковый номер представляет собой стартовый номер, используемый при установлении TCP-соединения. Обмен начальными порядковыми номерами в процессе выполнения последовательности установления соединения гарантирует возможность восстановления потерянных данных, если в будущем возникнут проблемы.

Синхронизация выполняется путем обмена сегментами, несущими номера ISN и управляющий бит, называемый SYN (от английского synchronize «синхронизировать»). (Сегменты, содержащие бит SYN, тоже называются SYN.) Для успешного соединения требуется наличие подходящего механизма выбора начального порядкового номера и слегка запутанный процесс квитирования, который обеспечивает обмен значениями ISN.

Процесс синхронизации требует, чтобы каждая сторона послала свой номер ISN и получила подтверждение и ISN от другой стороны соединения. Каждая сторона должна принимать ISN от другой стороны и посылать положительное подтверждение (АСК) в определенном порядке, который описан в следующей последовательности шагов.

1. А > В SYN – мой порядковый номер X.

2. А < В АСК – твой порядковый номер X.

3. А < В SYN – мой порядковый номер Y.

4. А > В АСК – твой порядковый номер Y.

Так как второй и третий шаги могут объединяться в одном сообщении, то такой обмен называется открытым с трехсторонним квитированием (three-way handshake / open). Как показано на рис. 10.5, обе стороны соединения синхронизируются, выполняя последовательность открытого соединения с трехсторонним квитированием.

 

 

Рис. 10.5. Трехэтапное квитирование

 

Эта последовательность похожа на разговор двух людей. Первый хочет поговорить со вторым и говорит: «Я бы хотел с Вами поговорить» (SYN). Второй отвечает: «Хорошо, я хочу с Вами говорить» (SYN, ACK). Тогда первый говорит: «Прекрасно, давайте поговорим» (АСК).

Трехстороннее квитирование необходимо, поскольку порядковые номера не привязываются к глобальным часам сети и протоколы TCP могут использовать различные механизмы для выбора номера ISN. У приемника первого сегмента SYN нет способа узнать, не был ли этот сегмент старым задержавшимся, если он не помнит последний порядковый номер, использованный в соединении, что не всегда возможно, и поэтому он должен попросить отправителя верифицировать этот сегмент SYN.

В этот момент времени любая из сторон либо может начать обмен данными либо разорвать связь, поскольку протокол TCP является методом одноранговой (равноправной) связи.