TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Шрифт:
Если бы партнеры одновременно пытались установить соединение друг с другом (что случается крайне редко), каждый прошел бы через состояния CLOSED, SYN-SENT, SYN-RECEIVED и ESTABLISHED.
Конечные стороны соединения остаются в состоянии ESTABLISHED, пока одна из сторон не приступит к закрытию соединения, послав сегмент FIN. В процессе обычного закрытия
Таблица 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 как для входной, так и для выходной очередей.
10.18 Замечания о реализациях
С самого начала протокол TCP предназначен для взаимодействия сетевого оборудования от различных производителей. Спецификация TCP не указывает точно, как должны работать внутренние структуры реализации. Эти вопросы оставлены для разработчиков, которые призваны найти наилучшие механизмы для каждой конкретной реализации.
Даже RFC 1122 (документ Host Requirements — требования к хостам) оставляет достаточную свободу для вариаций. Каждая из реализуемых функций маркируется определенным уровнем совместимости:
■ MUST (Необходимо)
■ SHOULD (Рекомендовано)
■ MAY (Разрешено)
■ SHOULD NOT (Не рекомендовано)
■ MUST NOT (Не нужно)
К сожалению, иногда встречаются продукты, не реализующие требования MUST. В результате пользователи испытывают неудобства от снижения производительности.
Некоторые хорошие методы реализации не учитываются в стандартах. Например, улучшение безопасности возможно при ограничении использования общеизвестных портов привилегированными процессами системы, если в локальной операционной системе поддерживается этот метод. С целью увеличения производительности в реализациях должно быть как можно меньше копирования и перемещения посланных или извлеченных данных.