Лабораторная работа1.doc Зыкин
.docЛабораторная работа №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 |
|