TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Шрифт:
Состояние сервера | Событие | Описание |
---|---|---|
CLOSED (закрыто) | Фиктивное состояние перед началом установки соединения. | |
Пассивное открытие серверным приложением. | ||
LISTEN (отслеживание) | Сервер ожидает соединения с клиентом. | |
Сервер TCP получает SYN и посылает SYN/ACK. | Сервер получил SYN и послал SYN/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 | Удалена вся информация о соединении. |
10.17.1 Анализ состояний соединения TCP
Команда netstat -an позволяет проверить текущее состояние соединения. Ниже показаны соединения в состояниях listen, startup, established, closing и time-wait.
Отметим, что номер порта соединения указан в конце каждого локального и внешнего адреса. Видно, что имеется трафик TCP как для входной, так и для выходной очередей.