3.9. Обработка событий
Рассмотренный ниже пример обработки событий является лишь одним из возможных вариантов реализации. В конкретных реализациях порядок обработки может несколько отличаться, но эти различия должны быть только в деталях, а не по сути.
Действия TCP можно рассматривать как отклики на события. Происходящие события можно разбить на три категории — пользовательские вызовы, доставка сегментов и тайм-ауты. В этом разделе описаны действия TCP в ответ на события каждого из перечисленных типов. Во многих случаях требуемая в ответ на событие обработка зависит от состояния соединения.
- События:
- Пользовательские вызовы
- OPEN
- SEND
- RECEIVE
- CLOSE
- ABORT
- STATUS
- Доставка сегментов
- SEGMENT ARRIVES
- Тайм-ауты
- TIMEOUT
- RETRANSMISSION TIMEOUT
- TIME-WAIT TIMEOUT
Модель пользовательского интерфейса TCP базируется на немедленном возврате из пользовательских вызовов и возможно задержанных откликах на вызов с помощью события или псевдопрерывания. В последующих описаниях термин сигнал будет указывать причину асинхронного отклика.
Сообщения об ошибках приводятся в форме символьных строк. Например, при вызове команды, которая обращается к несуществующему соединению, будет возвращаться сообщение "error: connection not open" (ошибка: соединение не открыто).
Отметим также, что все арифметические операции с порядковыми номерами, номерами подтверждений, окнами и т.п. основаны на модуле 2^32 (размер пространства порядковых номеров). Значок =< означает "меньше или равно" (по модулю 2^32).
Естественным вариантом процесса обработки входящих сегментов является сначала проверка корректности порядкового номера (т. е., его "попадания" в окно приема), размещение в очереди и последующая обработка в порядке возрастания номеров.
Когда сегмент перекрывается с полученным ранее сегментом, он реконструируется таким образом, чтобы в сегменте содержались только новые данные (поля заголовков изменяются в соответствии с новым содержимым).
Отметим, что если изменение состояния TCP не указано, это говорит о сохранении прежнего состояния.