Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа1.doc Зыкин

.doc
Скачиваний:
8
Добавлен:
13.03.2016
Размер:
350.72 Кб
Скачать

Лабораторная работа №1. Моделирование IP сетей.

Основное содержание работы

Цель работы - ознакомиться с принципами функционирования сетей передачи данных с коммутацией пакетов, научиться использовать средства моделирования и анализа сетей передачи данных.

Краткие теоретические сведения:

Введение

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

Одним из способов коммутации является коммутация пакетов (КП, packet switching) — разбиение сообщения на «пакеты», которые передаются отдельно. Разница между сообщением и пакетом: размер пакета ограничен технически, сообщения — логически. При этом, если маршрут движения пакетов между узлами определён заранее, говорят о виртуальном канале (с установлением соединения). Если же каждый для каждого пакета задача нахождения пути решается заново, говорят о датаграммном (без установления соединения) способе пакетной коммутации.

Известно, что математическая модель аппроксимирует свойства и поведение исследуемой сети и, как следствие, позволяет решать задачи по оптимизации и ее управлению. Также на модели возможна апробация тех или иных решений, что несравнимо дешевле нежели на реальной системе и исключает возможные ошибки в ней. Имитационной является математическая модель реализованная как программное обеспечение для компьютера и использующая специальные или стандартные языки программирования. При построении подобной модели сети связи могут использоваться как статические, так и динамические модели. При этом под статическими понимаются модели используемые для исследования состояния сети в заданные моменты времени, например, аналитические методы расчета из теории массового обслуживания, а под динамическими – дискретные стохастические модели, например, процессы генерации заявок или процессы их обслуживания. Сегодня для решения задач имитационного моделирования сетей связи существует достаточно широкий спектр программных средств: от библитек функций для стандартных компиляторов до специализированных языков программирования.

Одним из таких средств является network simulator 2 (далее - ns2). Главной целью при его разработке являлось построение программного продукта, позволяющего осуществлять имитационное моделирование сетей связи и обладающего целым рядом характеристик, среди которых высокая производительность, хорошая масштабируемость, визуализация результатов и гибкость. В качестве основы программной реализации был выбран разрабатываемый в University of California с 1989 года пакет network simulator (до 1995 года известный как REAL). ns2, как и его предшественники, разрабатывался как программное обеспечение с открытым исходным кодом.

ns2 является объектно-ориентированным ПО, ядро котрого реализовано на языке С++. Язык скриптов (сценариев) OTcl (Object oriented Tool Command Language) используется в качестве интерпретатора. Использование двух языков программирования в ns2 объясняется следующими причинами. С одной стороны, для детального моделирования протоколов необходимо использовать системный язык программирования, обеспечивающий высокую скорость выполнения и способный манипулировать достаточно большими объемами данных. С другой стороны, для удобства пользователя и быстроты реализации и модификации различных сценариев моделирования привлекательнее использовать язык программирования более высокого уровня абстракции.

Установка ns2

Для инсталляции полной версии ns2 необходимо иметь 250 МБ свободного места на диске компьютера и компилятор С++. Существует также упрощенная версия (компилированная) для некоторых ОС, в частности всех версий Windows, являющаяся не столь гибкой как полная версия, в частности невозможно добавлять компоненты, модифицировать ядро и т.п. Однако эта версия очень проста в использовании и не требует глубоких знаний ОС и языка C++. Для функционирования упрощенной версии ns2 достаточно иметь 3 МБ свободного места на жестком диске компьютера.

Требования к производительности компьютера у ns2 не столь жестки. В принципе, компьютер с процессором 486 может обеспечить приемлемое функционирование даже полной версии ns2.При необходимости использования ns2 группой пользователей достаточно иметь инсталлированную полную версию на машине под управлением Unix-like ОС. Пользователи могут иметь доступ в режиме терминала к ns2 и производить необходимые модификации в том числе и ядра программы компилируя свою версию в домашнюю директорию. Так же при помощи X-сервера возможна анимация полученных результатов.

Для успешной работы ns2 под Windows, необходимо сначала установить интерпретатор tcl. ns2 и nam в установке не нуждаются и могут быть просто запущены с необходимыми параметрами. Для запуска программы запустить tclsh83.exe, после чего набрать ns «название файла», нажать Enter.

Введение в Tcl

TCL (Tool Command Language) является интерпретируемым языком программирования по собственным характеристикам и возможностям схожим с Perl. Название произносится как "tickle" ("тикл"). Фактически TCL состоит из командного интерпретатора и библиотеки. В первую очередь TCL - простой язык обработки текстовой информации, предназначенный прежде всего для создания команд для интерактивным программам типа текстовых редакторов, отладчиков, и оболочек. TCL имеет достаточно простой синтаксис и, кроме того, является программируемым. Пользователи TCL могут легко создавать новые команды, для создания нового, более мощного синтаксиса.

TCL поддерживает только один тип данных: строки. Учитывая это, все параметры передаваемые командам, все команды, и все переменные являются строками. В тех случаях когда команды требуют числовых параметров или возвращают числовые значения они интерпретируются как строки.

Синтаксис TCL подобен синтаксису Bourne aganin shell (bash) UNIX/Linux. Однако интерпретация команд отлична от стандартной оболочки UNIX. Команда TCL состоит из одной или нескольких команд разделенных символом новой строки или символом "точка с запятой"(;). Каждая из команд является набором полей разделенных пробелами или сомволом табуляции. Первое из полей обязательно имя команды, дополнительные поля (если определены командой и существуют) - параметры данной команды. Так например команда:

set x 22

устанавливает переменную в значение 22, имеет три поля: первое set, является названием команды TCL, остальные два x и 22, являются параметрами команды set.

Если первый не пробельный символ команды TCL является знак "#", то вся введенная информация от данного "#" до символа новой строки интерпретируется как комментарий и игнорируется при исполнении:

# Это комментарий

TCL предоставляет специальный способ использовать пробельные символы внутри параметров. Для таких целей используется символ двойных кавычек - ".

set x "Параметр с пробельными символами"

Изогнутые скобки "{" и "}" могут также использоваться для группировки параметров. Нои имеют два отличия от двойных кавычек. Во-первых в командых TCL можно использовать вложенные скобки. Это делает их более легкими для использования для сложных параметров подобно вложенным строкам команды TCL. Во-вторых, в пределах изогуных скобок не производится подстановка переменных и команд TCL. Строка:

set x {set x 10}

передает команде set два параметра: x и set x 10. Таким образом, переменная будет установлена в значение set x 10.

Если в пределах поля параметра появляется левая квадратная скобка ("[") в поле происходит подстановка команды.

set x [set y]

Команда set имеет единственный параметр set y Команда set y возвращает содержание переменной y. В этом случае, если переменная b имеет значение Joe, то указанная команда эквивалентна:

set x Joe

Знак доллара $ может использоваться для подстановки значений переменных.

set x Joe;

set y $x;

эквивалентно команде:

set y Joe

Если следующий символ после названия переменной - открывающая круглая скобка, то переменная является именем массива, и все символы между открывающей круглой скобкой и следующей ближайшей закрывающей круглой скобкой являются индексом в массиве.

set y second;

set x $myArray($y);

Выражения TCL состоят из комбинации операндов, операторов и круглых скобок. Пробельные символы и символы табуляции прианализе выражений игнорируются. Там, где это возможно операнды интрепретируются как целочисленные значения. Целочисленные значения могут быть определены в десятичной, восьмеричном (если первый символ операнда - "0"), или в шестнадцатеричном виде (если первые два символа операнда - "0x"). Если операнд не принадлежит ни к одного из целочисленных форматов, приведенных выше, то он будет обработан как число с плавающей запятой (если это возможно). Числа с плавающей запятой могут быть определены аналогично стандартному ANSI C. Например, все следующие записи идентичны: 2.1, 2., 2e1, 2.0e+1.

Описание сети

Напишем шаблон скрипта, который можно будет в дальнейшем использовать для создания собственных скриптов. Для написания скрипта на языке tcl можно использовать любой текстовый редактор, например "блокнот". Созданный шаблон сохраните как example1.tcl Сначала нужно создать объект-симулятор.

set ns [new Simulator]

Затем создадим файл, который будет использоваться для сохранения результатов симуляции.

set nf [open out.nam w]

$ns namtrace-all $nf

Первая строка открывает для записи файл out.nam и связывает его с дескриптором nf. Вторая строка указывает ранее созданному симулятору сохранять все результаты симуляции в этот файл. Создадим процедуру finish, завершающую процесс симуляции и запускающую nam.

proc finish {} {

global ns nf

$ns flush-trace

close $nf

exec nam out.nam &

exit 0

}

Добавим строку, запускающую процедуру finish на пятой секунде симуляции.

$ns at 5.0 "finish"

Последняя строка запускает симуляцию.

$ns run

Написанный шаблон можно использовать как отправную точку при описании собственной топологии сети. Получить его в виде файла можно здесь: Шаблон tcl скрипта. Попробуем на его основе описать сеть с простейшей топологией, состоящую из двух узлов, соединенных связью. Следующие две строки описывают два узла. Их необходимо вставить перед строкой "$ns at 5.0 "finish"

set n0 [$ns node]

set n1 [$ns node]

Команда "$ns node" создает новый узел. Созданные узлы связываются с переменными n1 и n2. Соединим узлы связью

$ns duplex-link $n0 $n1 1Mb 10ms DropTail

Эта строка указывает симулятору соединить узлы n0 и n1 связью с пропускной способностью 10 Мб, задержкой передачи 10 мс и дисциплиной очереди DropTail. Теперь можете сохранить свой файл и запустить скрипт командой

ns example1.tcl

Nam запустится автоматически и вы должны увидеть что-то похожее на рисунок ниже.

Следующий шаг - передача данных между узлами. в ns данные передаются между агентами. Так что создадим агента, передающего данные с узла n0 и агента принимающего данные на узле n1.

set udp0 [new Agent/UDP]

$ns attach-agent $n0 $udp0

set cbr0 [new Application/Traffic/CBR]

$cbr0 set packetSize_ 500

$cbr0 set Interval_ 0.005

$cbr0 attach-agent $udp0

Эти строки описывают агента, передающего данные с использованием протокола UDP. Характер передаваемых данных описывается моделью CBR (Constant BitRate) - поток с постоянной скоростью передачи.

Следующие строки описывают агента, принимающего трафик.

set null0 [new Agent/Null]

$ns attach-agent $n1 $null0

Теперь агентов необходимо связать друг с другом.

$ns connect $udp0 $null0

И, наконец, необходимо установить время начала и окончания передачи.

$ns at 0.5 "$cbr0 start"

$ns at 4.5 "$cbr0 stop"

Теперь можно сохранить файл и запустить симуляцию заново. Теперь, нажав кнопку "play" в открывшемся окне nam, вы можете увидеть, как через 0,5 секунды симуляции узел 0 начинает передавать данные на узел 1. Скорость воспроизведения можно регулировать ползунком "step".

Дополнительные возможности

Полная и упрощенная версии ns2 содержат средство анимации результатов моделирования nam (Network Animator) реализованное на Tcl/Tk, которое предоставляет графическое воспроизведение проведенного эксперимента: отображение топологи сети, анимация пакетов, узлов, очередей, и различные возможности анализа данных. В качестве входных данных для nam используются файлы, записанные в процессе функционирования ns2, т.е. моделирования сети связи.

Только полная версия ns2 содержит программное средство Xgraph, позволяющего графически отображать результаты моделирования

В ns2 на уровне ядра реализованы почти все известные протоколы сетей связи. Среди наиболее актуальных на данный момент можно отметить следующие: MPLS, IPv6, OSPF, RSVP, протоколы беспроводной связи, web caching и многие другие. Так же реализовано целое семйство дисциплин обслуживания очередей: RED, WFQ, CBQ, SFQ и т.д.

Реализация собственного протокола в рамках ns2 не сложна, если пользователь знаком с принципами построения архитектуры ns2 и с основами программирования протоколов. В первую очередь необходимо написать код С++, в который входит определение форматов пакетов нового протокола (если это необходимо), логики функционирования протокола, необходимых для этого классов С++ и функций bind (см. выше) для связи кода с OTcl. Далее модифицируется исходный для ns2 файл makefile и производится перекомпиляция ядра. В результате описанных действий пользователь имеет возможность использовать новый протокол в скрипте сценария моделирования сети связи. К сожлению, весьма слабым местом ns2 является документация, хотя руководство пользователя существует и всегда доступно в форматах html и ps. Это руководство не является исчерпывающим и некоторые свойства ns2 в нем не отражены.

Обеспечение сильной математической поддержки позволяет создавать различные виды трафика, начиная от простейшего, подчиняющегося пуассоновскому закону, заканчивая самоподобным. Гибкость архитектуры ns2 позволяет пользователю реализовывать собственные математические функции на С++.

Реализация модели ошибок позволяет моделировать возникновение ошибок на канальном уровне, т.е. искажение или потерю информации. Моделирование возникновения ошибки возможно на уровне битов, пакетов или вероятности в секунду. Возможна так же реализация пользовательской модели ошибок.

Задание

Установить NS2.

При помощи встроенного в nam редактора описать топологию сети в соответствии с вариантом индивидуального задания.

Проанализировать скрипт, созданный редактором.

Произвести моделирование построенной сети. просмотреть результат в nam. Определить "узкие места" топологии.

Содержание отчета

Постановка задачи, в соответствии с вариантом индивидуального задания

Исходный текст на tcl, описывающий заданную топологию сети, с комментариями на русском. Повторяющиеся элементы можно сократить для уменьшения объема отчета.

Скриншот визуализации заданной топологии в nam

Вариант 1

Пропускная способность связей между узлами (Мбит/c)

1

2

3

4

5

6

7

8

9

10

1

10

2

10

3

10

4

10

5

10

6

10

7

10

8

10

9

10

10

Тип трафика межу узлами

1

2

3

4

5

6

7

8

9

10

CBR

CBR

CBR

CBR

CBR

CBR

CBR

CBR

CBR

CBR

Вариант 2

Пропускная способность связей между узлами (Мбит/c) Тип трафика между узлами

1

2

3

4

5

6

7

8

9

10

1

10

10

10

10

10

10

10

10

10

2

3

4

5

6

7

8

9

10

1

2

3

4

5

6

7

8

9

10

1

2

3

CBR

4

CBR

5

CBR

6

CBR

7

CBR

8

CBR

9

CBR

10

CBR