Экстернат |
Управление перегрузкой и основные алгоритмы работы TCP
Блок-схема совокупности программ управления TCP
TCP — очень сложный протокол. Он обслуживает поток, он ориентирован на соединение со сложной диаграммой переходов состояний. Он использует управление потоком и контроль ошибок. Он также сложен потому, что действующие коды составляют десятки тысяч строк.
В этом разделе мы представим простейшую блок-схему TCP. Наша цель — показать, как мы можем имитировать основу TCP, представленную диаграммой состояний.
Совокупность модулей включает таблицу, называемую блоком управления передачей (transmission control block – TCB), установку таймера и три программных модуля. На Рис. 11.13. показаны 5 компонентов и их взаимодействие.
Поскольку в любой момент времени мы можем иметь несколько соединений, TCB сохраняет массивы TCB в форме таблицы. Таблица обычно именуются как TCB ( Рис. 11.14.).
Алгоритм работы главного модуля TCP
Алгоритм работы главного модуля TCP показан на Рис. 11.15.
Этот алгоритм нарисован с помощью символов SDL, которые уже применялись при описании алгоритмов UDP. Такой подход называется автоматным и позволяет отображать алгоритмы в виде переходов от состояния к состоянию конечных автоматов. В дальнейшем при рассмотрении программного обеспечения телефонных станций будет продемонстрировано, как такой подход упрощает программирование. Там же будет рассмотрен подробно порядок задания конечного автомата.
Ниже приводятся таблицы, в которых перечисляются состояния ( таблице 11.2.), входы ( таблице 11.3.), выходы ( таблице 11.4.), используемые в данном алгоритме.
Рассмотрим работу алгоритма на Рис. 11.15. (стр. 1-3).
увеличить изображение
Рис. 11.15. Алгоритм работы главного модуля совокупности программ управления TCP (стр.3)
Исходящее соединение
Алгоритм находится в начальном состоянии ЗАКРЫТО (Оператор 1). В данном случае инициатор (клиент) вырабатывает команду для TCP активное открытие (Оператор 10); клиент подключается к прикладной программе и посылает сегмент SYN к серверу как запрос на прием (Оператор 12). После чего алгоритм включает контрольное время (Оператор 12) и переходит в состояние ПЕРЕДАЧА (SYN-SENT) пока он не получит SYN+ACK от TCP — подтверждение запроса на стороне сервера (Оператор 18). Он посылает сегмент ACK другому TCP (Оператор 19) и переходит в состояние УСТАНОВЛЕНО (ESTABLSHED) — Оператор 20 (стр.2). Это состояние передачи данных. Клиент остается в этом состоянии столько времени, сколько он посылает и получает данные.
Если алгоритм не получает сигнала подтверждения запроса SYN+ACK, то заканчивается контрольное время и поступает сигнал окончания тайм-аута (Оператор 15), ресурсы освобождаются и алгоритм переходит в начальное состояние ЗАКРЫТО (CLOSED) — Операторы 16, 17.
В состоянии ESTABLSHED (УСТАНОВЛЕНО) — Оператор 20 (стр.2) — алгоритм может получать данные (Операторы 30-32) или информацию от приложения (Операторы 33-35).
Клиент остается в этом состоянии столько времени, сколько он посылает и получает данные.
В этом состоянии клиент TCP может принять запрос на окончание от прикладной программы клиента. Он посылает сегмент Отбой (FIN) к другому TCP и переходит в состояния ОЖИДАНИЕ ОКОНЧАНИЯ1 – (FIN-WAIT1) — Оператор 36 (стр.3).
В этом состоянии клиент TCP ожидает получить ACK (Оператор 52, стр.3) от сервера TCP. ACK получен, клиент переходит в состояние FIN-WAIT2 (ОЖИДАНИЕ ОКОНЧАНИЯ2) — Оператор 54 (стр.3). Он не посылает ничего. Теперь соединение закрыто в одном направлении.
Клиент остается в этом состоянии, ожидая окончания соединения с другого конца. Если клиент получает сегмент FIN (Отбой) с другого конца — Оператор 55 (стр.3), он посылает сегмент ACK — Оператор 56 (стр.3) и переходит в состояние TIME-WAIT (ВРЕМЯ ОЖИДАНИЯ) — Оператор 42 (стр.3). Когда клиент в этом состоянии, он включает таймер контрольного времени и ждет, пока этот таймер закончится. Значение этого времени устанавливается равным двойному времени передачи максимального размера сегмента. Клиент остается еще некоторое в состоянии неполного закрытия, чтобы дублировать пакет, если какой-либо пакет достигает своего пункта назначения и будет отклонен. После тайм-аута клиент переходит в состояние CLOSED (ЗАКРЫТО) и алгоритм переходит в начальное состояние.
Кроме того, на Рис. 11.15.(стр.3) показаны еще два возможных случая завершения соединения: когда в этом состоянии приходит отбой с другого конца (одновременный отбой) либо отбой приходит вместе с подтверждением.
Входящее соединение
Алгоритм начинает работу в состоянии CLOSED (ЗАКРЫТО) – Оператор 1. В этом состоянии TCP алгоритм может получить запрос на пассивное открытие (Оператор 2). Он переходит в состояние LISTEN (СЛУШАЮ) – Оператор 4. Во время этого состояния TCP-сервер может получить сегмент SYN от клиента TCP – Оператор 5. В этом случае он посылает сегмент SYN+ACK – Оператор 6 — подтверждение заявки на передачу и переходит в состояние SYN–RCVD (Прием) – Оператор 7.
В этом состоянии TCP-сервер может получить сегмент ACK от клиента TCP (Оператор 58 на стр.4). Он переходит в состояние ESTABILISHED (УСТАНОВЛЕНО) – Оператор 20 (стр.2). Это состояние передачи данных. Алгоритм остается в этом состоянии на время получения и передачи данных, после чего выполняется алгоритм, указанный на Рис. 11.15.(стр.2)
В этом состоянии TCP-сервер может получить сегмент CLOSE (оператор 24) от клиента — это означает, что клиент желает завершить соединение. Он может послать сегмент FIN клиенту и перейти к состоянию FIN-WAIT1(ОЖИДАНИЕ ОКОНЧАНИЯ1). Далее выполняется алгоритм по Рис. 11.15.(стр.3)
По правилам составления спецификаций в каждом состоянии предусматривается поступление сигналов, которые отличаются от перечисленных для данного входа. Это ситуация сбоя или ошибки. В этом случае формируется сообщение об ошибке. На Рис. 11.15. эта часть алгоритма не показана.