Фаза установления соединения TCP

Фаза установления соединения TCP - student2.ru

Фаза установления соединения содержит следующие действия:

1) Хост Аотправляет хосту Бзапрос соединения посредством установки флага SYN и инициализирует значение начального номера нумерующей последовательности (Seq_no = m).

2) Хост Ботвечает на этот запрос установкой флага ACK и определяет поле «Порядковый номер подтверждения»значением на единицу большим m (Ack_no = m+1); одновременно, хост Бв своем ответе Аотправляет запрос соединения (SYN) и также инициализирует значение начального номера своей нумерующей последовательности (Seq_no = k).

3) Хост Аотвечает на запрос соединения от хоста Бустановкой флага ACK и подтверждением ожидания следующего байта данных с порядковым номером k+1 (Ack_no = k+1); при этом, значение поля «Порядковый номер сегмента»устанавливается в значение m+1 (Seq_no = m+1).

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

Заметим, что в фазе установления соединения каждый SYN-сегмент может содержать опциональные параметры и любой хост может отказать в соединении посредством отсылки сегмента с установленным флагом RST.

Протокол ТСР поддерживает два типа соединения - активное и пассивное. Так, в приложениях, построенных по клиент-серверной архитектуре, сервер выполняет пассивное соединение (формирует свой сокет и переходит в режим «прослушивания»), сообщая тем самым своему модулю ТСР о готовности принять запрос соединения. Когда клиент желает установить связь с сервером, он выполняет процедуру активного соединения. В нее входит создание сокета на клиентской стороне и выполнение описанных выше процедур TCP-соединения.

Фаза передачи данных TCP

Фаза установления соединения TCP - student2.ru

Пусть в момент t0 ТСР-модуль хоста Вобъявил величину своего окна равной 2048 байт и номер следующего ожидаемого байта 2000. Такой размер окна позволяет хосту Аотправить без подтверждения 2 Кбайта данных, однако в его выходном буфере имеется лишь 1024 байта данных. Хост Аотправляет эти данные нумеруя байты начиная с 2000. Одновременно, он объявляет величину своего окна равной 1024 байта и подтверждает, что номер ожидаемого первого байта от хоста Бдолжен быть равен 1. Хост Бзадерживает выдачу подтверждения на прибывший сегмент данных, полагая, что у него появятся данные для отправки хосту А,вместе с которыми он отправит и подтверждение. Тем временем, в момент t2 модуль ТСР хоста Аснова получил от своего приложения 1024 байт данных и передал их хосту Б.После этого величина окна отправки на хосте Астала равной нулю и дальнейшая отправка им данных до получения подтверждения от хоста Боказывается невозможной. В момент t3 модуль ТСР хоста Бполучил 128 байт данных для отправки; вместе с ними он отправляет подтверждение получения от хоста Адвух сегментов данных, указывая Ack_no=4048. К этому моменту в буферной памяти модуля ТСР хоста Боказывается свободными лишь 512 байт, поэтому он объявляет величину своего окна приема равной 512. Когда хост Аполучит этот сегмент, он установит величину окна отсылки равной 512 байт и, несмотря на то, что в момент t4 в его буфере имеется 2048 байт данных, он сможет отослать только 512 байт и не перегрузит буфер хоста Б.



Наши рекомендации