Учебное пособие Издательство спбгпу санкт-Петербург
Вид материала | Учебное пособие |
- Учебное пособие Санкт-Петербург Издательство спбгпу 2003, 5418.74kb.
- Методические указания Санкт-Петербург Издательство спбгпу 2007, 1378.97kb.
- Учебное пособие Санкт-Петербург 2011 удк 621. 38. 049. 77(075) Поляков, 643.33kb.
- Учебное пособие Санкт-Петербург Издательство спбгэту «лэти» 2004, 1302.72kb.
- Учебное пособие Санкт-Петербург 2009 удк 802., 485.15kb.
- Учебное пособие Санкт-Петербург Издательство спбгэту «лэти» 2006, 1935.03kb.
- Учебное пособие Санкт-Петербург Издательство спбгэту «лэти» 2006, 648.91kb.
- Новые поступления в библиотеку балтийского русского института, 158.89kb.
- Учебное пособие издательство санкт-петербургского государственного университета экономики, 3398.77kb.
- Учебное пособие Санкт- петербург 2010 удк 778. 5 Нестерова Е. И, Кулаков А. К., Луговой, 708kb.
Описание имитационной модели абстрактного транспортного протокола
Как уже было сказано, AnyLogic позволяет просто и красиво моделировать сеть и все происходящие в ней процессы на любом уровне детализации.
Следовательно, данный программный продукт должен обладать всеми функциональными возможностями по созданию имитационной модели протокола транспортного уровня.
Во-первых, разработчик модели может пользоваться всеми преимуществами объектно-ориентированного моделирования: наследование, полиморфизм и т.д. Что является неотъемлемым требованием при создании абстракции сети.
Активные объекты могут содержать вложенные объекты, причем уровень вложенности не ограничен. Это позволяет производить декомпозицию модели на любое количество уровней детализации. С помощью инкапсуляции объектов можно прятать детали разработки моделируемого объекта.
Активные объекты имеют четко определенные интерфейсы взаимодействия. Они взаимодействуют со своим окружением только посредством своих интерфейсных элементов – портов и переменных. Для взаимодействия активных объектов посредством портов в AnyLogic существует базовый класс сообщений, с помощью которого можно моделировать любые потоки (транспортные, информационные и т.д.).
Анимация в AnyLogic дает возможность наглядно представить динамику всей системы в процессе моделирования. Средства анимации позволяют пользователю легко создать виртуальный мир (совокупность графических образов, мнемосхему и т. п.), управляемый динамическими параметрами модели по законам, определенным пользователем с помощью уравнений и логики моделируемых объектов.
Моделирование систем с дискретными событиями в AnyLogic основывается на механизме обмена сообщениями между активными объектами через порты, а на внутриобъектном уровне используются таймеры и события с очевидной семантикой. Данная механизм дает возможность реализовать схему взаимодействия хостов по протоколу TCP, и моделированию установки соединения.
Возможность ведения журнала события дает необходимую статистику работы модели, что может быть полезно при разработке механизма управления потоком сообщений.
7.1 Структура модели
Основной трудностью в создании модели протокола TCP является перевод неформального языка спецификации на формальный объектно-ориентированный алгоритм моделирования в системе AnyLogic. Из неформальной природы спецификации также следует, что практически невозможно доказать адекватность модели. Основными инструментами для исследования свойств модели в этой системе является симуляция (выполнение) модели и анализ поведения окна перезагрузки и производительности механизма.
В предыдущей главе мы уже рассмотрели, что такое активные объекты системы AnyLogic, и как с помощью них можно реализовать модель протокола.
Моделирующие объекты для реализации схемы:
- модуль TcpModule (активный объект, описывающий функционирование рабочей станции)
- модуль TcpModuleClient (активный объект отправителя)
- модуль TcpModuleServer (активный объект получателя)
- модуль Network (активный объект, имитирующий сеть между двумя станциями)
Иерархия активных объектов отображена на рис.4.1.
Также в модели присутствуют блоки работы с анимацией и описание класса сообщений (имитирующих tcp-сегменты)
Рис.2.1. Рабочее окно инструмента AnyLogic с иерархией объектов.
Активные объекты отправителя, приемника и сети объединены через порты, с помощью которых обмениваются сообщениями (сегментами).
AnyLogic позволяет передавать информацию от одного объекта другому путем передачи специальных пакетов данных – сообщений. С помощью передачи сообщений можно реализовать механизм оповещения – в этом случае сообщения будут представлять команды или сигналы, посылаемые системой управления. Или же можно смоделировать поток заявок, в этом случае сообщения будут представлять собой заявки – объекты, которые производятся, обрабатываются, обслуживаются, или еще каким-нибудь образом подвергаются действию моделируемого процесса: это могут быть документы в модели бизнес-процесса, клиенты в модели системы массового обслуживания, детали в производственной моделях. Сообщения принимаются и посылаются через специальные элементы активных объектов – порты. Обмен сообщениями возможен только между портами, соединенными соединителями – элементами, играющими роль путей движения сообщений.
Порты играют центральную роль в механизме передачи сообщений. Сообщения посылаются и получаются портами. Порты являются двунаправленными и могут служить одновременно как для приема, так и для посылки сообщений. [11]
Рис 2.2. Схема объединения активных объектов.
Каждый активный объект имеет внутреннюю структуру, представленную схемой стейчартов и описывается своим java-кодом. Подробное описание реализации внутренней структуры объектов и механизмов работы протокола приведено в следующем параграфе данной главы.
7.2 Интерфейс пользователя
Для работы с имитационной моделью была создана анимация, позволяющая исследовать механизмы работы протокола, и оценки его характеристик.
Также в инструменте AnyLogic встроена функция создания апплета, позволяющего пользователю работать с моделью без наличия соответствующего программного обеспечения.
Рабочее окно анимации модели представлено на рис 2.3.
Описание элементов:
- инструментальная панель для запуска модели, изменения скорости симуляции.
- индикатор, отображающий состояние окна контроля перезагрузки в данный момент времени.
- индикатор, отображающий состояние окна отправителя в данный момент времени.
- индикаторы контроля состояния системы.
1-й индикатор – количество пакетов, переданных приложением отправителю.
2-й индикатор – количество пакетов, отправленных отправителем получателю.
3-й индикатор – количество пакетов, на которые пришло подтверждение.
4-й индикатор – количество пакетов, отправленных, но на котрые еще не пришло подтверждение.
- индикатор, отображающий скорость передачи пакетов, с помощью которого можно судить о производительности алгоритма.
- бегунок, с помощью которого задается время RTT, т е задержка в блоке Network.
- бегунок, задающий окно приемника. Значение окна, которое пересылает приемник отправителю.
- бегунок, задающий вероятность потери пакетов в сети. С помощью него реализуем процент потерянных пакетов.
- бегунок, задающий значение RTO для отправителя, по истечении которого запуститься повторная передача.
- бегунок, позволяющий варьировать значение отклонения задержки от среднего значения для пакетов в сети.
- флаг, который запускает механизм быстрой повторной передачи.
- динамическая таблица, отображающая передачу пакетов, и подтверждений на них, а также срабатывания таймаутов.
- графики изменения окна перезагрузки (сверху) и скорости передачи пакетов. С помощью них можно увидеть работу механизмов протокола (например: медленный старт, повторная передача, быстрая повторная передача).
Рис 2.3. Анимационное окно имитационной модели.
Для подробного изучения статистики можно использовать журнал заданий, отображающий любое событие в системе.
Started...
AnyLogic simulation engine has started [$Id: Engine.java,v 1.134 2004/12/03 08:49:39 basil Exp $]
syn from client received
syn_ack_from server received
>> посылка пакета номер 1
ack_from_client_received
<< получен пакет номер = 1, подтверждает = 0, ожидая пакет с номером = 1
Finished...
Started...
AnyLogic simulation engine has started [$Id: Engine.java,v 1.134 2004/12/03 08:49:39 basil Exp $]
syn from client received
syn_ack_from server received
>> посылка пакета номер 1
ack_from_client_received
<< получен пакет номер = 1, подтверждает = 0, ожидая пакет с номером = 1
<< получен пакет номер = 1, подтверждает = 1, ожидая пакет с номером = 1
>> посылка пакета номер 2
>> посылка пакета номер 3
<< получен пакет номер = 2, подтверждает = 0, ожидая пакет с номером = 2
<< получен пакет номер = 3, подтверждает = 0, ожидая пакет с номером = 3
<< получен пакет номер = 1, подтверждает = 2, ожидая пакет с номером = 1
>> посылка пакета номер 4
<< получен пакет номер = 1, подтверждает = 3, ожидая пакет с номером = 1
>> посылка пакета номер 5
>> посылка пакета номер 6
>> посылка пакета номер 7
<< получен пакет номер = 4, подтверждает = 0, ожидая пакет с номером = 4
<< получен пакет номер = 5, подтверждает = 0, ожидая пакет с номером = 5
<< получен пакет номер = 6, подтверждает = 0, ожидая пакет с номером = 6
<< получен пакет номер = 7, подтверждает = 0, ожидая пакет с номером = 7
<< получен пакет номер = 1, подтверждает = 4, ожидая пакет с номером = 1
>> посылка пакета номер 8
7.3 Функционирование модели
Подробно механизмы модели протокола будут изучены в рамках учебно-лабораторного комплекса.
Рассмотрим схему работы стейчартов, с помощью которых были реализованы блоки отправителя и приемника.
Стейчарты позволяют реализовать различные состояния для данных объектов. А это крайне необходимо при реализации протокола с обратной связью.
Отправитель.
Отправитель имеет 2 состояния. Начальное состояние - установка соединения. Он ждет прихода сообщения с флагом syn от приемника, что послужит сигналом к переходу в состояние 2. Второе состояние – передача данных , которое работает в цикле.
Получатель.
Приемник имеет 3 состояния. Первое состояние ожидания синхронизации. Второе состояние – ожидание подтверждения от отправителя. После установки соединения приемник переходит в состояние обмена, отправки ack на прибывшие пакеты.
Описанная выше модель работает по следующей схеме:
- На первом этапе имитируется механизм установки соединения, который можно увидеть в динамической таблице.
- Затем модель переходит в состояние передачи пакетов, и отправки на них подтверждение.
- Приложение выдает с заданной постоянной периодичностью данные отправителю.
- Отправитель посылает пакеты в сеть по алгоритму медленного старта, и ждет подтверждающие пакеты от получателя. Таким образом в модели реализован механизм обратной связи. Один пакет Ack может подтвердить несколько присланных пакетов.
- Пакеты приходящие к получателю в неправильной последовательности отбрасываются, и ack на них не высылаются.
- На стороне отправителя запускается таймер RTO, контролирующий надежность доставки.
- При определении отправителем потери, окно контроля падает до 1 пакета, как реализовано это в базовом алгоритме TCP. И возрастает потом по экспоненциальному закону (алгоритм медленного старта).
- Блок имитации задержки сети работает как функция нормального распределения с отклонением, которое можно задать вручную.
- При выставлении механизма быстрой повторной передачи, отправитель не дожидается срабатывания таймера RTO, а определяет потерю пакета по 3 одинаковым ack, и окно контроля перегрузки падает в 2 раза ( не до 1) .
Описание лабораторных работ:
1. Механизм обратной связи транспортного протокола
В данной работе будут рассмотрены основные особенности создания протокола с обратной связью в системе AnyLogic. Имитация установки соединения. Описание структуры активных объектов, их взаимодействия, создание стейчартов, классов сообщений.
2. Имитация работы сетевых устройств между рабочими станциями в ЛВС.
Процесс создания блока задержки сети. Механизм имитации задержки, имитации потери пакетов. Работа с различными функциями распределения, с помощью которых реализуется задержка.
3. Механизмы управления потоком в транспортных соединениях. Окно контроля перезагрузки.
Механизм медленного старта и фаза исключения перегрузки. Алгоритм быстрой повторной передачи. Окно отправителя. Окно получателя. Таймер RTO.
4. Исследование и оптимизация производительности протокола.
В данной работе будет проведен ряд экспериментов, показывающий влияние различных механизмов на качество и производительность алгоритма протокола. По статистическим данным необходимо будет определить результаты и сделать соответствующие выводы.
Механизм обратной связи транспортного протокола
Механизм обратной связи транспортного протокола служит для повышения надежности доставки данных между объектами сети, и является первой ступенью создания транспортного протокола управления передачей.
Алгоритм работает следующим образом. Отправитель посылает сегменты получателю и ждет прихода сегментов, подтверждающих получение (ACK). Эти сообщения содержат в себе номер последовательности следующего сегмента. Можно выслать одно подтверждение на несколько сегментов. Например, приемник получил сегменты 2, 3 и 4, но задержал подтверждения о приеме сегментов 2 и 3 до получения сегмента 4. После посылки подтверждения с номером последовательности 5 приемник подтверждает получение сегментов 2, 3 и 4 за один раз.
Перед режимом передачи данных между рабочими станциями необходимо произвести установку соединения (синхронизацию).
Синхронизация требует, чтобы каждая сторона, участвующая в соединении, посылала свой собственный первоначальный номер очереди, а также получала подтверждение на это от напарника. Каждая сторона должна также получить первоначальный номер очереди от напарника и послать подтверждение.
1) A –> B сигнал SYN: мой номер очереди X |
2) A <– B сигнал ACK: ваш номер очереди X |
3) A <– B сигнал SYN: мой номер очереди Y |
4) A –> B сигнал ACK: ваш номер очереди Y |
Поскольку шаги 2 и 3 можно объединить в одно сообщение, последнее называется подтверждением трех путей (трех сообщений).
В системе AnyLogic данный механизм можно увидеть в динамической таблице при запуске имитационной модели.
Рис. 3.1. Установка соединения между рабочими станциями.
На рис. 2.4 мы видим , что в момент времени 0 клиент (он же отправитель) посылает сообщение с флагом syn. В момент времени 1 сервер (он же получатель) получает данное сообщение, и формирует ответное сообщение с флагами подтверждения (ack) и синхронизации (syn). Клиент получает подтверждение, и высылает подтверждение уже вместе с данными.
Структура активных объектов. Работа стейчартов.
Как уже говорилось, рабочие станции в системе AnyLogic представлены активными объектами, которые содержат в себе коды описания работы взаимодействия, таймеры, наборы данных для создания диаграмм, стейчарты.
Рис. 3.2. Структура активных объектов
Механизмы работы клиента и сервера задаются с помощью переходов стейчартов, которые были описаны выше. Переходы срабатывают по заданным условиям «гардам»
[2]
Стейчарты расположены в соответствующих им активных объектах.
Работа стейчартов описывается java-кодом в окнах свойств стейчартов.
Код 1-го перехода стейчарта клиента:
Сигнал
TcpPacket
Гард
((TcpPacket)getEvent()).syn && ((TcpPacket)getEvent()).ack == nextToSend
Действие
traceln("syn_ack_from server received");
port.setQueueSize(0);
TcpPacket receivedPac = (TcpPacket) getEvent();
TcpPacket pac = new TcpPacket();
nextToRecv = receivedPac.num + 1;
oldestNotAcked = receivedPac.ack;
senderWinSize = receivedPac.winSize;
animation.display.newLine(
"recv",
"syn",
"num=" + String.valueOf(receivedPac.num)
+ ", ack=" + String.valueOf(receivedPac.ack)
);
pac.num = nextToSend;
pac.ack = nextToRecv;
pac.syn = true;
sendToPort(pac);
animation.display.newLine(
"send",
String.valueOf(pac.num),
String.valueOf(pac.ack)
);
Код 2-го перехода стейчарта клиента:
newDataRecieved((TcpPacket)getEvent());
Код 1-го перехода стейчарта сервера:
Сигнал
TcpPacket
Гард
((TcpPacket) getEvent()).syn
Действие
traceln("syn from client received");
port.setQueueSize(0);
TcpPacket receivedPac = (TcpPacket) getEvent();
nextToRecv = receivedPac.num + 1;
senderWinSize = receivedPac.winSize;
animation.display.newLine(
"recv",
"syn",
"num=" + String.valueOf(receivedPac.num));
TcpPacket pac = new TcpPacket();
pac.num = nextToSend;
pac.ack = receivedPac.num + 1;
pac.syn = true;
pac.winSize = (int) recvWinSize;
port.send(pac);
nextToSend ++;
animation.display.newLine(
"send",
"syn",
"num=" + String.valueOf(pac.num) +
", ack=" + String.valueOf(pac.ack)
);
Код 2-го перехода стейчарта сервера:
Сигнал
TcpPacket
Гард
((TcpPacket)getEvent()).ack == nextToSend
Действие
TcpPacket pac = (TcpPacket) getEvent();
traceln("ack_from_client_received");
animation.display.newLine(
"recv",
String.valueOf(pac.num),
String.valueOf(pac.ack)
);
3-й переход аналогичен переходу клиента.
Классы сообщений.
В системе AnyLogic TCP-сегменты моделируются сообщениями, которые передаются между портами активных объектов. С помощью них реализуется взаимодействие данных объектов.
Рис. 3.3. Окно свойств класса сообщений.
В окне свойств необходимо задать поля флагов, которые будут использоваться при имитации механизма установки соединения.
Имитация работы сетевых устройств между рабочими станциями в ЛВС
Для имитации процессов, происходящих в сети между рабочими станциями, создается блок Network. Причинами задержки и потери пакетов могут быть: переполнения буферов сетевых устройств, «узкие» участки сети, программные средства промежуточных устройств, физические дефекты и т.д. В простейшем случае задержку сети (время RTT) можно реализовать с помощью функции распределения с задаваемой величиной отклонения (разброс). Также можно задать вероятность потери пакетов в промежуточных устройствах.
Блок Network также является активным объектом и соединяется с рабочими станциями путем портов, и передачи сообщений между ними. Задержка задается в java-кодом в свойствах портов объекта. См. Рис 3.4.
Рис. 3.5. Создание задержки сетевых устройств.
Значения по умолчанию для имитации задержки задаем в коде блока Network.
Рис. 3.6. Переменные блока Network .
В коде портов задается функция распределения, используемая для задержки.
Действие при получении:
if (!Func.randomTrue(dropProbability)) .//функция потери пакетов с заданной вероятностью потери
{
new DelayTimer( Func.normal ( networkDelayLambda, rtt/2.), msg); //в данном случае задано Гауссовское распределение.
numPacketsInNetwork ++;
}
Таким образом, можно менять функции потери и задержки пакетов, выбирая их из библиотеки AnyLogic.
Для выбора просмотра списка доступных функций выполняем следующие действия: справка - справочник классов – выбираем среди множества классов Func – в окне Method Summary приведен перечень функций, и их синтаксис.
Рис. 3.7. Перечень различных функций в библиотеке AnyLogic.
Для примера проведем следующий эксперимент. Исследуем влияние различных функций распределения на скорость передачи и количество переданных пакетов через сеть за определенное модельное время. Для это используем распределения Гаусса и Коши.
Моделирование было задано при следующих условиях:
Размер окна приемника = 50
Среднее время задержки сети (RTT) = 2
Вероятность потери пакетов = 1 %
Время таймера повторной передачи RTO = 2.1
Вариация функции задержки = 1 %
Режим быстрой повторной передачи - выключен
Время моделирования = 10.18 сек.
Моделирование дало следующие результаты:
Функция распределения Гаусса.
Количество переданных пакетов
Функция распределения Коши.
Количество переданных пакетов
Из результатов моделирования видно, что при распределении Коши при прочих равных условиях, количество переданных пакетов больше (6206 пакетов против 5676 при Гауссовком). А график скорости передачи имеет более «плавное» изменение и достигает значение выше 10 в единицу модельного времени.
Таким образом, можно сделать вывод, что с помощью функций распределения, а также их комбинаций, можно имитировать различные процессы, происходящие в сети между двумя участниками сеанса.
Механизмы управления потоком в транспортных соединениях. Окно контроля перезагрузки.
Особый интерес при исследовании транспортных протоколов управления передачей вызывают механизмы управления потоком данных. Именно от них в наибольшей степени зависит качество, надежность и скорость передачи данных.
Разработанная модель в системе AnyLogic позволяет проиллюстрировать следующие алгоритмы, присущие различным версиям протокола TCP:
- Алгоритм медленного старта
- Управление окном контроля перезагрузки
- Повторная передача
- Алгоритм быстрой повторной передачи
- Механизм исключения перегрузки
Имитационная модель позволяет исследовать влияние различных параметров на работу данных механизмов.
Механизм медленного старта и фаза исключения перегрузки.
При работе с медленным стартом отправляющему TCP добавляется еще одно окно: окно переполнения, которое называется cwnd. Когда устанавливается новое соединение с хостом, находящимся в другой сети, размер окна переполнения устанавливается равным размеру одного сегмента (размер сегмента объявлен удаленным концом). Каждый раз, когда принимается ACK, окно переполнения увеличивается на один сегмент. (Размер cwnd измеряется в байтах, однако при медленном старте размер всегда увеличивается на размер сегмента.) Отправитель может передать объем данных величиной до минимального размера окна переполнения и объявленного окна. С помощью окна переполнения, отправитель осуществляет управление потоком, тогда как с помощью объявленного окна потоком управляет получатель.
Отправитель начинает работу, отправив один сегмент и ожидая ACK на этот сегмент. Когда ACK получен, окно переполнения увеличивается с одного сегмента до двух, и в этом случае могут быть отправлены два сегмента. Когда каждый из этих двух сегментов подтвержден, окно переполнения увеличивается до 4. Таким образом, осуществляется экспоненциальное увеличение.
Термин "медленный старт" не вполне корректен. Это, скорее, замедление передачи пакетов, которое вызвано переполнением, однако скорость увеличения количества пакетов, отправленных в сеть, увеличивается в течение медленного старта. Скорость увеличения не уменьшается до тех пор, пока не будет достигнуто значение ssthresh, когда начинает действовать предотвращение переполнения (фаза исключения перегрузки).[5]
В исследуемой модели управление потоком происходит по следующему принципу, подобно алгоритму TCP-Reno:
Когда в результате таймаута детектируется потеря пакета значения cwnd(t) и ssth(t) обновляются следующим образом:
cwnd(t)=1; ssth(t)=(cwnd(t))/2;
Алгоритм управления передачей данных описан java-кодом в блоке TCP-модуль. Там же и задаются многие переменные, которые выставлены в модели по умолчанию.
Функция, вызываемая при приеме данных:
public void newDataRecieved(TcpPacket pac)
{
if (currentlyProccessing) return;
currentlyProccessing = true;
//animation.display.clear();
animation.display.newLine(
"recv",
String.valueOf(pac.num),
String.valueOf(pac.ack));
traceln("<<получен пакет номер= "
+ String.valueOf(pac.num) +
", подтверждает= " + String.valueOf(pac.ack - 1)
+ ", ожидая пакет с номером= " + String.valueOf(nextToRecv));
if (pac.ack > oldestNotAcked)
{
// пакет подтверждает новые данные, увеличиваем окно перезагрузки
if (pac.ack >= nextNumToIncreaseCwnd)
{
if (!congestionHasBeen || cwndSize < ssthresh)
{
cwndSize *= 2; // если окно cwnd < предела ssthresh, то работает медленный старт
if (congestionHasBeen && cwndSize > ssthresh) // если окно cwnd > предела ssthresh, то начинается фаза исключения перегрузки и окно начинает расти линейно
cwndSize = ssthresh;
}
else
cwndSize += 1 + 1 / cwndSize;
if (cwndSize > senderWinSize)
{
cwndSize = senderWinSize;
}
nextNumToIncreaseCwnd = pac.ack + cwndSize;
}
oldestNotAcked = pac.ack;
retransmitionTimer.reset();
retransmitionTimer = new RetransmitionTimer( retransmitTimeout );
numDoubleAcks = 0;
}
else
{
// пакет не подтверждает новых данных , начинаем считать Ack
if (curDoubleAckNum != pac.ack)
numDoubleAcks ++;
}
if (fastRetransmit)
{
if (numDoubleAcks > 4)
{
// если пришло 3 дублированных Ack происходит повторная передача. Fast retransmit
animation.display.newLine(
"DOUBLE ACK",
"",
"");
retransmit(true);
curDoubleAckNum = pac.ack;
numDoubleAcks = 0;
retransmitionTimer.reset();
retransmitionTimer = new RetransmitionTimer( retransmitTimeout );
}
}
if (pac.num == nextToRecv)
nextToRecv += pac.size;
senderWinSize = pac.winSize;
if (pac.size != 0)
{
// посылаем подтверждение
TcpPacket pacToSend = new TcpPacket();
pacToSend.num = nextToSend;
pacToSend.ack = nextToRecv;
pacToSend.winSize = (int) recvWinSize;
pacToSend.size = 0;
sendToPort(pacToSend);
animation.display.newLine(
"send",
String.valueOf(pacToSend.num),
String.valueOf(pacToSend.ack));
}
currentlyProccessing = false;
}
Рис. 3.8. иллюстрирует как изменяется окно контроля перезагрузки при медленном старте и фазе исключения перегрузки.
Рис. 3.8. График изменения CWND
После установки соединения медленный старт растет до значения окна, заданного получателем. После потери пакета ssthresh устанавливается в половину размера окна. После данного момента CWND переходит в режим исключения перегрузки.
В данном коде также описан режим быстрой повторной передачи, который в модели можно включать для исследования изменения окна перезагрузки. См. Рис. 3.9.
Рис. 3.9. Включение режима быстрой повторной передачи.
Когда TCP детектирует потерю пакета согласно алгоритму быстрой повторной передачи, cwnd(t) и ssth(t) обновляются иначе:
ssth(t) = (cwnd(t))/2; cwnd(t)= ssth(t);
Теперь посмотрим, как будет изменяться окно перезагрузки на графике при включение данного режима.
Рис.3.10. Изменение CWND при режиме быстрой повторной передачи
Видно, что отправитель не дожидается таймаута и окно падает не до 1, а уменьшается в 2 раза.
Исследование механизмов и производительности протокола
Для иллюстрации работы протокола проведем ряд экспериментов.
Выставим вероятность потери пакетов 5 %.
Рис.3.11. Работа модели при большой потере пакетов.
Очевидно, что окно не может подняться выше значения 12 пакетов при окне приемника в 50 пакетов, так как пакеты теряются слишком часто.
Теперь выставим значение RTO = 5.
Рис.3.12. График изменения CWND при RTO =2.1 и 5. И график изменения скорости передачи данных
В период до значения 210 модельного времени значение RTO (таймаут повторной передачи) = 2.1. После 210 RTO=5. по графику CWND видно, что периоды роста окна увеличились за счет увеличения таймера перезагрузки. По графику скорости видно, что при установке RTO =5, скорость передачи увеличивается приблизительно в 2 раза, а значит и увеличивается производительность.
Из этого эксперимента можно сделать вывод, что в некоторых случаях увеличение значения RTO может повлиять на качество работы протокола.
Необходимо посмотреть как режим быстрой повторной передачи влияет на качество передачи и производительность.
Рис. 3.13. Количество переданных пакетов и скорость передачи без режима быстрой повторной передачи.
Рис. 3.14. Количество переданных пакетов и скорость передачи в режиме быстрой повторной передачи.
Эксперимент показал, что механизм быстрой повторной передачи, впервые введенный в версии TCP-Reno, в значительной степени повышает производительность. Это видно из показаний переданных пакетов (5127 против 3762). Также это можно увидеть на графике скорости передачи.
Рекомендации по созданию и совершенствованию имитационной модели транспортного протокола в AnyLogic
В данных методических указаниях были разобраны принципы построения имитационной модели транспортного протокола управления передачей в системе AnyLogic. Приведен алгоритм построения механизмов абстрактного транспортного протокола, как схематически, так и с помощью поддержки языка Java. Выполнен ряд экспериментов в имитационной модели. По результатам работ сделаны выводы.
Инструментальное средство AnyLogic предлагает широкий спектр средств для создания сетевых процессов. Реализованная модель является экспериментальным исследованием AnyLogic с точки зрения разработки и оптимизации в ней транспортных протоколов.
Данная работа может послужить как учебным пособием по изучению принципов функционирования TCP, так и помочь при разработке и исследовании новых алгоритмов.
Предлагается использовать данные методические указания студентам, выбравшим данную систему в качестве инструментального средства реализации сетевых процессов и определившим свои научные работы в данном направлении.
Рекомендуется выполнить ряд доработок созданной модели.
Модель реализована, основываясь на базовых механизмах управления потоком. В ней не учитываются такие параметры, как размер передаваемых сегментов, пропускная способность и т.п.
Рекомендуется:
- расширить и дополнить модель различными функциями и параметрами с целью получения более совершенного протокола, отвечающего всем требованиям какой-либо версии TCP (например ARTCP, описанный в );
- реализовать современные сложные алгоритмы, оптимизирующие передачу данных. Например, механизм выборочного подтверждения, учет RTT при регулировании CWND (как это реализовано в TCP-Vegas), буферизация пакетов приемника;
- использовать сокеты при установке соединения;
- имитация механизмов сетевого уровня;
- использовать возможности AnyLogic при проведении экспериментов.
Рис. 3.15. Возможности AnyLogic при проведении экспериметов.