Читаем TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) полностью

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

Ниже мы кратко рассмотрим типичную смену состояний сервера и клиента, расположенных на разных концах соединения. Мы не ставим целью дать исчерпывающее описание всех возможных состояний при пересылке данных. Оно приведено в RFC 793 и документе Host Requirements.

Во время установки соединений сервер и клиент проходят схожие последовательности состояний. Состояния сервера показаны в таблице 10.3, а состояния клиента — в таблице 10.4.

Таблица 10.3 Последовательность состояний сервера

Состояние сервераСобытиеОписание
CLOSED (закрыто)Фиктивное состояние перед началом установки соединения.
Пассивное открытие серверным приложением.
LISTEN (отслеживание)Сервер ожидает соединения с клиентом.
Сервер TCP получает SYN и посылает SYN/ACK.Сервер получил SYN и послал SYN/ACK. Переходит к ожиданию ACK.
SYN-RECEIVEDСервер TCP получает ACK.
ESTABLISHED (установлено)Получен ACK, открыто соединение.

Таблица 10.4 Последовательность состояний клиента

Состояние сервераСобытиеОписание
CLOSEDФиктивное состояние перед началом соединения.
Клиентское приложение запрашивает соединение. Клиент TCP посылает SYN.
SYN-SENTКлиент TCP послал SYN серверу.
Клиент TCP получает SYN/ACK и посылает ACK. Клиент получил SYN/ACK от сервера и отправил обратно ACK.
ESTABLISHED (установлено)Можно перейти к пересылке данных.

Если бы партнеры одновременно пытались установить соединение друг с другом (что случается крайне редко), каждый прошел бы через состояния CLOSED, SYN-SENT, SYN-RECEIVED и ESTABLISHED.

Конечные стороны соединения остаются в состоянии ESTABLISHED, пока одна из сторон не приступит к закрытию соединения, послав сегмент FIN. В процессе обычного закрытия сторона, инициирующая это закрытие, проходит через состояния, показанные в таблице 10.5. Ее партнер проходит через состояния, представленные в таблице 10.6.

Таблица 10.5 Последовательность состояний стороны, закрывающей соединение

Состояния закрывающей стороныСобытиеОписание
ESTABLISHEDЛокальное приложение запрашивает закрытие соединения.
TCP посылает FIN/ACK.
FIN-WAIT-1Закрывающая сторона ожидает ответа партнера. Напомним, что от партнера все еще могут прибывать новые данные.
TCP получает ACK.
FIN-WAIT-2Закрывающая сторона получила ACK от партнера, но еще не пришел FIN. Закрывающая сторона ожидает FIN, принимая поступающие данные.
TCP получает FIN/ACK.
Посылает ACK.
TIME-WAITСоединение поддерживается в неопределенном состоянии, чтобы позволить прибыть или отбросить все еще существующие в сети дублированные данные или дублированный FIN. Период ожидания вдвое больше оценки максимального времени жизни сегмента.
CLOSEDУдалена вся информация о соединении.

Таблица 10.6 Последовательность состояний партнера по закрытию соединения

Перейти на страницу:

Похожие книги