10.17 Состояния TCP
10.17 Состояния TCP
Соединение 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, 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 Последовательность состояний партнера по закрытию соединения
Состояние партнера Событие Описание ESTABLISHED TCP получает FIN/ACK. CLOSE-WAIT Прибыл FIN. TCP посылает ACK. TCP ожидает от своего приложения закрытия соединения. В этот момент приложение может посылать достаточно большое количество данных. Локальное приложение инициализирует закрытие соединения. TCP посылает FIN/ACK. LAST-ACK TCP ожидает конечный ACK. TCP получает ACK. CLOSED Удалена вся информация о соединении.