Материал: 1308

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

менной экземпляра определенного агента затрагивает значения, используемые только этим агентом. Например,

Agent/TCP set window_ 100 ;# Изменяет переменную класса $tcp set window_ 2.0 ;# Изменяет, window_ только для объек-

та $tcp

Заданные по умолчанию параметры для каждого агента TCP: Agent/TCP set window_ 20 ;# максимальное значение размера

окна

Agent/TCP set windowInit_ 1 ;# установка/сброс значения

cwnd

Agent/TCP set windowOption_ 1 ;# алгоритм избежания пере-

грузки (1: стандарт)

Agent/TCP set windowConstant_ 4 ;# используется только ко-

гда windowOption! =1

Agent/TCP set windowThresh_ 0.002 ;# используется в вычис-

лении усредненного окна

Agent/TCP set overhead_ 0 ;# !=0 добавляет случайный интер-

вал времени между посылками

Agent/TCP set ecn_ 0 ;# TCP должна реагировать на бит ecn Agent/TCP set packetSize_ 1000 ;# размер пакета, используе-

мый отправителем (байты)

Agent/TCP set tcpTick_ 0.1 ;# таймер гранулирован в секундах (.1– НЕСТАНДАРТ)

Agent/TCP set maxrto_ 64 ;# ограничение на RTO (секунды) Agent/TCP set dupacks_ 0 ;# счетчик копий ACK

Agent/TCP set ack_ 0 ;# самый высокий полученный ACK Agent/TCP set cwnd_ 0 ;# окно перегрузки (пакеты) Agent/TCP set awnd_ 0 ;# усредненный cwnd (эксперимен-

тальный)

Agent/TCP set ssthresh_ 0 ;# порог медленного пуска (паке-

ты)

Agent/TCP set rtt_ 0 ;# отсчет rtt Agent/TCP set srtt_ 0 ;# усредненный rtt

Agent/TCP set rttvar_ 0 ;# значение отклонения rtt отсчета Agent/TCP set backoff_ 0 ;# текущий фактор отсрочки RTO Agent/TCP set maxseq_ 0 ;# максимальный номер посланного

сегмента (пакет)

Для большинства экспериментов, вероятно, немногие пара-

46

метры конфигурации будут требовать модификации. Обычно включают наиболее изменяемые параметры: window_ и packetSize_. Первый из них ограничивает использования окна TCP, и как рассматривалось, играет роль объявления окна получателя в реальной TCP (хотя оно остается постоянным). Размер пакета по существу функционирует подобно размеру MSS в реальной TCP. Изменяя эти параметры, можно оказать сильное влияние на поведение TCP. Обычно TCP с большими размерами пакета, большими окнами и меньшими временами кругооборота (результат топологии и перегрузки) более агрессивны в запрашивании сетевой пропускной способности.

Другие однонаправленные отправители

Reno TCP Агент Reno TCP agent очень подобен агенту Tahoe TCP, кроме этого он также включает быстрое восстановление в тех случаях, когда текущее окно перегрузки"раздуто" числом копий ACK, полученных отправителем TCP перед получением нового ACK. Понятие “ новый ACK” относится к любому ACK, значение которого выше чем наивысшее замеченное до сих пор. Кроме того, агент Reno TCP не возвращается к медленному пуску в течение быстрой повторной передачи. Скорее, он уменьшит установку окна перегрузки на половину текущего окна и сбросит ssthresh_ для соответствия этому значению.

Newreno TCP Этот агент основан на Reno TCP agent, но у которого изменены действия, принимаемые при получении нового ACK. Чтобы выйти на быстрое восстановление, отправитель должен получить ACK для самого высокого посланного номера последовательности. Таким образом, новые “ частичные ACK” (т.е. те, которые представляют новые ACK, но не представляют ACK для всех ожидающих выполнения данных) не уменьшают размеры окна (и возможно ведут к останову, характерному

Reno).

Vegas TCP Этот агент осуществляет “Vegas” TCP.

Sack TCP Этот агент осуществляет выборочное повторение, основанное на выборочных ACK, обеспечиваемых получателем.

Fack TCP Этот агент выполняет “ ускоренный ACK” TCP (модификация Sack TCP).

Linux TCP Этот агент выполняет TCP модули управления перегрузкой, импортированные из Linux ядра. Агент вырабаты-

47

вает результаты моделирования, которые являются совместимыми на уровне траектории окна перегрузки с поведением Linux хостов.

Пользователи моделирования могут модифицировать или импортировать новые модули управления перегрузкой из исходного кода ядра Linux для этого агента. Модули управления перегрузкой Linux компилированы в бинарный код NS-2. Пользователи могут выбирать различные алгоритмы управления перегрузкой, различные параметры модуля управления перегрузки, и различные Linux параметры TCP для различных экземпляров этого агента. Этот агент поддерживает SACK. Получателю, который поддерживает SACK, рекомендуют работать с этим агентом. Есть обучающая программа для использования этого агента.

Реализация этого агента свободно следует за Linux TCP пакетной обработкой маршрутизации и вызывает исходные коды управления перегрузкой из ядра Linux для изменения управлением перегрузкой, связанного с параметрами (например окно перегрузки, порог медленного пуска и т. д.).

Для достижения результатов моделирования, близких к рабочим характеристикам Linux, этот агент заменяет заданные по умолчанию значения следующих параметров согласно парамет-

рам Linux:

Agent/TCP/Linux set maxrto_ 120 Agent/TCP/Linux set ts_resetRTO_ true

Agent/TCP/Linux set delay_growth_ false

TCP получатели (стоки)

Отправители TCP, описанные выше, представляют однонаправленных отправителей данных. Они должны быть одного ранга с объектами “TCP sink”.

Базовый TCP получатель Основной объект TCP sink (Agent/TCPSink) ответствен за возвращение ACK одноранговому объекту TCP отправителя. Он формирует один ACK на полученный пакет. Размер ACK может быть конфигурирован. Создание и конфигурация объекта TCP sink обычно выполняются автоматически запросом библиотеки (см. create-connection выше).

Параметры конфигурации

Agent/TCPSink set packetSize_ 40

48

TCP получатель с задержанными ACK Объект задержанный

ACK агент (Agent/TCPSink/DelAck) доступен получателю TCP

для моделирования для того, чтобы было менее одного ACK на полученный пакет. Этот объект содержит ограничиваемую переменную interval_, которая задает количество секунд для ожидания между ACK. Получатель задержанного ACK осуществляет агрессивную ACK политику, в силу чего задерживаются только ACK для пакетов, поступающих по порядку. Пакеты вне порядка вызывают немедленную генерацию ACK.

Параметры конфигурации

Agent/TCPSink/DelAck set interval_ 100ms

Sack TCP получатели Получатели TCP с выборочным подтверждением (Agent/TCPSink/Sack1) выполняют SACK генерацию, смоделированную после описания SACK в RFC 2018. Этот объект включает ограничиваемую переменную maxSackBlocks_, которая задает максимальное число блоков информации в ACK, доступном для сохраняемой информации SACK. Заданное по умолчанию значение для этой переменной - 3, в соответствии с ожидаемым использованием SACK с RTTM (см. RFC 2018, раздел 3). Отсроченный и выборочный ACK осуществляются со-

вместно объектом типа Agent/TCPSink/Sack1/DelAck.

Параметры конфигурации

Agent/TCPSink set maxSackBlocks_ 3

Архитектура и внутреннее строение

Основной агент TCP (класс Agent/TCP) создан как совокупность программ для посылки пакетов, обработки ACK, управления окном отправителя и обработкой таймаутов. В общем, каждая из этих программ может быть отменена функцией с тем же самым названием в порождающем классе (поэтому осуществлено столько вариантов отправителя TCP).

Заголовок TCP Заголовок TCP определен структурой hdr_tcp в файле ~ns/tcp.h. Основной агент использует только следующую подгруппу полей:

ts_ / * текущее время посылки пакета источником */ ts_echo_ / * для ACKs: поля timestamp из пакета, связанного с

этим ACK */

seqno_ / * номер последовательности для сегмента этих данных или ACK (Примечание: перегрузка!) */

49

reason_ / * устанавливается отправителем при (повторной) передаче для того, чтобы проследить причину для отправки */

Функции для отправки данных Заметим, что вообще отправитель TCP фактически никогда не посылает данных (он устанавливают только размер пакета).

send_much(force, reason, maxburst - эта функция пытается по-

сылать столько пакетов, сколько позволяет окно отправителя. Она также сохраняет трассировку того, сколько пакетов послано и ограничено общим количеством maxburst.

Функция output(seqno, reason) посылает один пакет с данным номером последовательности и обновляет максимум переменной номера последовательности отправителя (maxseq _), чтобы сохранить данный номер последовательности, если он пока самый большой из посланных. Эта функция также назначает различные поля в заголовке TCP (номер последовательности, timestamp, причина для передачи). Эта функция также устанавливает таймер повторной передачи, если он уже не в ожидании.

Функции для управления окна Используемое окно отправителя каждый раз задается функцией window(). Она возвращает минимум окна перегрузки и переменную wnd _, которая представляет объявляемое окно получателя.

opencwnd () - эта функция открывает окно перегрузки. Она вызываться, когда прибывает новый ACK. При медленном пуске функция просто увеличивает cwnd_ с каждым полученным ACK. При предотвращении перегрузки – стандартная конфигурация увеличивает cwnd_ на его обратное значение. Другие опции роста окна в течение избегания перегрузки поддерживаются, но они экспериментальны (и не зарегистрированы).

closecwnd (int, how) - эта функция уменьшает окно перегрузки. Это может быть вызвано несколькими способами: при вводе быстрой повторной передачи из-за истечения таймера, или из-за уведомления перегрузки (установлен бит ECN). Эта переменная указывает как должно быть восстановлено окно перегрузки. Значение 0 используется для таймаутов повторной передачи и быстрой повторной передачи в Tahoe TCP. Это обычно заставляет TCP вводить медленный пуск и уменьшать ssthresh_ до половины текущего окна. Значение 1 используется Reno TCP для осуществления быстрого восстановления (которое избегает возвра-

50