Как видно из рисунка, начальное состояние узла (сервера или клиента) — состояние CLOSED. Готовность сервера к обработке инициирующих запросов от клиента определяется переходом его в состояние LISTEN. С этого момента сервер может принимать и обрабатывать инициирующие сеанс сегменты SYN
. При отправлении такого сегмента клиент переходит в состояние SYN-SENT и ожидает ответного запроса от сервера. Сервер при получении сегмента также отправляет сегмент SYN
с подтверждением ACK
и переходит в состояние SYN-RECEIVED. Подтверждение от клиента завершает "рукопожатие" и сеанс переходит в состояние ESTABLISHED. После завершения обмена данными одна из сторон (например, клиент) отправляет сегмент FIN, переходя при этом в состояние FIN-WAIT-1. Приняв этот сегмент другая сторона (например, сервер) отправляет подтверждение ACK
и переходит в состояние CLOSE-WAIT, при этом канал становится симплексным — передача данных возможна только в направлении от сервера к клиенту. Когда клиент получает подтверждение он переходит в состояние FIN-WAIT-2, в котором находится до получения сегмента FIN
. После подтверждения получения этого сегмента канал окончательно разрушается.
Расшифровка состояний приведена в табл. 6.5.
Таблица 6.5. Состояния TCP-сеанса
Состояние | Описание |
---|---|
LISTEN | Готовность узла к получению запроса на соединение от любого удаленного узла. |
SYN-SENT | Ожидание ответного запроса на соединение. |
SYN-RECEIVED | Ожидание подтверждения получения ответного запроса на соединение. |
ESTABLISHED | Состояние канала, при котором возможен дуплексный обмен данными между клиентом и сервером. |
CLOSE-WAIT | Ожидание запроса на окончание связи от локального процесса, использующего данный коммуникационный узел. |
LAST-ACK | Ожидание подтверждения запроса на окончание связи, отправленного удаленному узлу. Предварительно от удаленного узла уже был получен запрос на окончание связи и канал стал симплексным. |
FIN-WAIT-1 | Ожидание подтверждения запроса на окончание связи, отправленного удаленному узлу (инициирующий запрос, канал переходит в симплексный режим). |
FIN-WAIT-2 | Ожидание запроса на окончание связи от удаленного узла |
CLOSING | Ожидание подтверждения от удаленного узла на запрос окончания связи. |
TIME-WAIT | Таймаут перед окончательным разрушением канала, достаточный для того, чтобы удаленный узел получил подтверждение своего запроса окончания связи. Величина тайм-аута составляет 2 MSL (Maximum Segment Lifetime).[73] |
CLOSED | Фиктивное состояние, при котором коммуникационный узел и канал фактически не существуют. |
Для обеспечения правильной обработки данных для каждого логического TCP-канала хранится полная информация о его состоянии, различных таймерах и о текущих порядковых номерах переданных и принятых октетов. Это необходимо, например, для корректной обработки служебных сегментов SYN
и FIN
.[74]
Передача данных
После создания виртуального канала взаимодействующие процессы получают возможность обмениваться данными в дуплексном режиме.
Хотя фактически передача данных осуществляется в виде сегментов, ее логический вид представляет собой последовательный поток октетов, каждый из которых адресуется порядковым номером. Каждый сегмент хранит в заголовке порядковый номер первого октета данных. Данные буферизуются обоими коммуникационными узлами TCP-канала. Как правило, модуль TCP самостоятельно принимает решение, когда именно сформировать сегмент для отправки и когда передать полученные данные процессу- адресату.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии