
• Сервер сообщил клиенту свой ISN (полем Sequence Number)
Осталось только одно – клиент должен подтвердить серверу, что и он правильно понял его
ISN, для этого клиенту придется отправлять еще один сегмент. В данном сегменте не нужно
устанавливать флага SYN (договоренность о соединении уже достигнута), в этом сегменте в поле
Acknowledged Number клиент должен передать серверу увеличенный на единицу ISN сервера,
подчеркивая тем самым, что клиент ожидает от сервера байта с соответствующим номером, т.е.
подтверждая серверу, что его ISN ясен. Ясно, что в таком сегменте должен быть установлен флаг
ACK, подчеркивающий, что сегменте интерпретируется поле Acknowledged Number. Что клиент
должен указать в этом сегменте в поле Sequence Number? Очевидно, что, так как сервер ждет от
клиента байта номер ISN (клиента) + 1, а клиент еще не передал серверу ни одного байта, то именно
это значение (ISN (клиента) + 1) и должен указать клиент в поле Sequence Number, подчеркивая, что
байт именно с таким номером будет первым байтом, который клиент передаст серверу.
Еще раз подводим итог с помощью данного рисунка. В первом сегменте клиент предлагает
установить соединение и сообщает свой ISN серверу, во втором сегменте сервер соглашается
установить соединение, подтверждает клиенту «понимание» его ISN и сообщает клиенту свой ISN,
в третьем сегменте клиент подтверждает серверу «понимание» его ISN. В результате данной
процедуры:
• Клиент знает о готовности сервера обмениваться данными, знает, с какого номера сервер
начнет нумерацию своих данных, знает о том, что сервер знает с какого номера сам клиент
начнет нумерацию своих данных
• Сервер знает о готовности клиента обмениваться данными, знает, с какого номера клиент
начнет нумерацию своих данных, знает о том, что клиент знает с какого номера сам сервер
начнет нумерацию своих данных
Таким образом, стороны готовы к обмену данными в рамках соединения – они знают как
нумеровать отправляемые в соединение данные, знают, что партнер поймет нумерацию их данных
и знают нумерацию данных, которую будет использовать партнер.
Отметим, что мы рассмотрели только самый простой случай установки соединения, на
самом деле существует еще один способ установки TCP соединения (одновременное открытие), в
процессе обмена вышеописанными сегментами активно используются некоторые опции, однако
подчеркнем, что мы движемся в изучении TCP от частного к общему – сначала рассматриваем
принципы, затем будем рассматривать тонкости.
В результате рассмотрения данной темы Вы должны четко понимать:
• Зачем устанавливать соединение перед передачей данных
• Зачем используется три сегмента при установке соединение
• Как используются флаги SYN и ACK, как используются поля Sequence Number и Acknowledged
Number в процессе установки соединения.
Когда мы изучали протокол UDP, мы говорили о возможности организации селективного
обслуживания по IP адресу сервера, протокол TCP так же поддерживает такую возможность.
Серверное приложение может начать прослушивать порт с помощью вызова специальной функции