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