Лабораторная работа № 14. Анализ работы вычислительной сети

Цель работы: Практическое изучение работы локальной сети, выявление слабых мест и загруженности сети.

Теоретическая справка.

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

Программа может использоваться в различных сетях независимо от топологии с количеством клиентских машин до 100, операционная система Windows 9x/Me/NT/XP.

Программа производит сравнительный анализ сетевого трафика и ведет статистку подключений и загрузки сети. Имеет удобный интерфейс, вся аналитическая информация выводится в графическом виде.

Программа может использоваться не только в локальных сетях, но также и в глобальной сети Internet.

Данное программное обеспечение состоит из двух взаимосвязанных программных модулей: клиентской части и серверной программы.

Клиентская программа устанавливается на все компьютеры сети, которые будут анализироваться. Соответственно серверная программа устанавливается на машину с которой будет анализироваться работа сети.

Клиентская программа практически не нуждается в настройке. В файле serv.ini хранится IP адрес сервера. При запуске программа автоматически пытается подключиться по данному адресу. В случае успешного подключения просто сворачивается на панель задач, иначе выдает сообщение об ошибке.

Лабораторная работа № 14. Анализ работы вычислительной сети - student2.ru

Рисунок 22 – Внешний вид клиентской программы

Лабораторная работа № 14. Анализ работы вычислительной сети - student2.ru Серверная программа работает как анализатор тех данных, которые присылают клиентские программы. Сразу после запуска она ожидает сообщения от клиентов, и после получения немедленно реагирует и выводит результаты на экран.

Рисунок 23 – Внешний вид серверной программы

Вверху выводится IP адрес машины, где установлена серверная программа. В таблице выводится список всех подключенных машин и их сетевой трафик. Нижняя диаграмма показывает сравнительную загрузку сети каждой из машин, автоматически присваивая каждой определенный цвет, сбоку от диаграммы выводится расшифровка к каждой колонке диаграммы.

Справа находится индикатор загрузки, каждую секунду показывающий уровень нагрузки на сеть.

 
  Лабораторная работа № 14. Анализ работы вычислительной сети - student2.ru

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

Рисунок 24 – Получение дополнительной информации о клиенте

 
  Лабораторная работа № 14. Анализ работы вычислительной сети - student2.ru

На протяжении всей работы программа ведет статистику работы сети.

Рисунок 24 – Получение статистической информации.

При этом выводится статистическая информация на текущее время на машине, где установлена серверная программа.

При обрыве связи с одним из клиентов информация о нем не удаляется из списка подключений, но свойство «текущее состояние» становится равным «Отключено». При повторном подключении клиента его свойства просто обновляются.

Клиентская программа (описание процедур и функций).

Основная функция клиентской программы это определение входящего и исходящего трафика локальной машины. Для этого достаточно использовать всего лишь одну функцию библиотеки IPHLPAPI.DLL, которая поставляется со всеми версиями Windows. Рассмотрим ее:

Объявление функции ():

var GetIfTable:function( pIfTable: PMibIfTable; pdwSize : PULONG; bOrder : Boolean ): DWORD; stdcall;

Параметры:
pIfTable - должен содержать указатель на структуру;
pdwSize - должен содержать размер структуры;
bOrder - указывает, нужна ли сортировка в возвращаемом массиве.

В качестве первого параметра функция использует указатель на структуру.

Само описание структуры:

type TMibIfTable = packed record dwNumEntries : DWORD; Table : TMibIfArray; end; PMibIfTable = ^ TMibIfTable;

Поля:
dwNumEntries - определяет размерность массива представленного вторым параметром
Table - является массивом структур

Структура сама по себе крайне неинформативна, нас интересует второе ее поле, также представляющее собой структуру:

type TMibIfRow = packed record wszName : array[0..255] of WideChar; dwIndex : DWORD; dwType : DWORD; dwMtu : DWORD; dwSpeed : DWORD; dwPhysAddrLen : DWORD; bPhysAddr : array[0..7] of Byte; dwAdminStatus : DWORD; dwOperStatus : DWORD; dwLastChange : DWORD; dwInOctets : DWORD; dwInUcastPkts : DWORD; dwInNUCastPkts : DWORD; dwInDiscards : DWORD; dwInErrors : DWORD; dwInUnknownProtos : DWORD; dwOutOctets : DWORD; dwOutUCastPkts : DWORD; dwOutNUCastPkts : DWORD; dwOutDiscards : DWORD; dwOutErrors : DWORD; dwOutQLen : DWORD; dwDescrLen : DWORD; bDescr : array[0..255] of Char; end; TMibIfArray = array [0..512] of TMibIfRow; PMibIfRow = ^TMibIfRow; PmibIfArray = ^TmibIfArray;

Поля:
wszName - Указатель на строку содержащую имя интерфейса

dwIndex - Определяет индекс интерфейса

dwType - Определяет тип интерфейса (см. MSDN)

dwMtu - Определяет максимальную скорость передачи

dwSpeed - Определяет текущую скорость передачи в битах в секунду

dwPhysAddrLen - Определяет длину адреса содержащегося в bPhysAddr

bPhysAddr - Содержит физический адрес интерфейса (если проще то его, немного видоизмененный, МАС адрес)

dwAdminStatus - Определяет активность интерфейса

dwOperStatus - Содержит текущий статус интерфейса (см. MSDN)

dwLastChange - Содержит последний измененный статус

dwInOctets - Содержит количество байт принятых через интерфейс

dwInUcastPkts - Содержит количество направленных пакетов принятых интерфейсом

dwInNUCastPkts - Содержит количество ненаправленных пакетов принятых интерфейсом (включая Броадкаст и т.п.)

dwInDiscards - Содержит количество забракованных входящих пакетов (даже если они не содержали ошибки)

dwInErrors - Содержит количество входящих пакетов содержащих ошибки

dwInUnknownProtos - Содержит количество забракованных входящих пакетов со структурой неизвестного протокола

dwOutOctets - Содержит количество байт отправленных интерфейсом

dwOutUCastPkts - Содержит количество направленных пакетов отправленных интерфейсом

dwOutNUCastPkts- Содержит количество ненаправленных пакетов отправленных интерфейсом (включая Броадкаст и т.п.)

dwOutDiscards- Содержит количество забракованных исходящих пакетов (даже если они не содержали ошибки)

dwOutErrors- Содержит количество исходящих пакетов содержащих ошибки

dwOutQLen - Содержит длину очереди данных

dwDescrLen - Содержит размер массива bDescr

bDescr - Содержит описание интерфейса /2/.

По MSDN интерфейсом является не обязательно какое-либо физическое устройство, например сетевая карта, но также и сетевые службы.

Передача данных по сети осуществляется при помощи сокетов.

При подключении клиентская машина отсылает серверу код #1, при отключении - код #2.

На форме находится элемент «Таймер». Каждые полсекунды по событию таймера клиентская программа проверяет переменные со значениями количества полученных и отосланных бит и если хотя бы одно значение изменилось, то отсылает серверу строку следующего формата:

«Код»#«всего получено бит»#«всего отправлено бит»

Проверка сделана для того, чтобы не загружать сеть сообщениями о нулевом трафике.

Клиентская программа автоматически подключается к серверу при запуске программы, используя в качестве адреса сервера информацию из файла serv.ini и сворачивается на панель задач.

Серверная программа (описание процедур и функций).

Основное назначение серверной программы – анализ тех данных, которые присылают клиентские программы.

Для хранения присланных данных используется массив:

hosts: array [1..100,1..9] of string;

в котором хранятся: сетевое имя клиентской машины, количество отправленных бит машины, количество полученных бит машины, скорость передачи, время подключения, время отключения, IP адрес, текущее состояние.

Для отображения данных используется компонент таблица StringGrid. Когда сервер получает очередной пакет данных от одной из клиентских программ происходит обработка полученных данных: в первую очередь проверяется от какой машины пришли данные и есть ли она в списке подключенных машин, если есть, то обновляется соответствующая графа массива, если нет, то данные от машины и информация о ней добавляется в массив и параметр количества подключенных машин увеличивается на единицу.

Данные от машины анализируются в соответствии с шаблоном:

«Код»#«всего получено бит»#«всего отправлено бит»

Информация о сетевом имени и IP адресе машины берется из сокета по соответствующим свойствам RemoteHost и RemoteAddress.

Определяется процент загрузки сети данной машиной в соотношении с общим объемом загрузки. При этом объем загрузки сети конкретной машиной берется как:

Объем = Количество отправленных бит в данный момент времени + +Количество полученных бит в данный момент времени.

В программе используется компонент «Таймер». По событию OnTimer происходит анализ скорости передачи (бит/сек) каждой машины:

Скорость = Объем передачи в данный момент времени - Объем передачи секунду назад.

Для графического отображения данных используются компоненты диаграммы. Диаграмма Chart1 используется для отображения объема загрузки сети каждой машиной в соотношении с другими машинами. При этом каждой колонке диаграммы соответствует объем загрузки конкретной машиной. Обновление диаграммы происходит каждый раз, как приходит пакет данных от какой либо машины /2/.

Диаграмма Chart2 служит для отображения общего уровня загрузки сети в данный момент времени. Колонке диаграммы соответствует общее количество отправленных и полученных бит за последнюю секунду. Обновление происходит по событию таймера OnTimer, при этом максимальным уровнем считается максимальный уровень за все время измерения, если общее количество отправленных и полученных бит за последнюю секунду превышает максимальный уровень, то это значение в дальнейшем будет считаться максимальным уровнем.

Дополнительные свойства каждого клиента выводятся в виде сообщения при двойном нажатии левой клавиши мыши на соответствующем элементе таблицы клиентов. При этом последовательно обрабатываются события таблицы OnSelectCell и OnDblClick /2/.

В дополнительных свойствах клиента указывается: IP адрес клиента, время подключения, время отключения, текущее состояние.

На протяжении всей работы программы ведется подключений и работы сети. Статистические данные обновляются каждую секунду по событию таймера.

Вывод статистической информации осуществляется при нажатии кнопки «Статистика», при этом обрабатывается событие Button1Click.

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

Основные компоненты клиентской программы.

ClientSocket1: TclientSocket – сокет клиента. Основной компонент для передачи информации серверной программе.

tmrTraffic : Ttimer – таймер с интервалом обновления 0.5 сек. Используется для периодического получения информации с сетевого интерфейса.

Label2: Tlabel – надпись. Используется для вывода информации о сетевом адресе сервера /2/.

Основные компоненты серверной программы.

ServerSocket1: TserverSocket – сокет сервера. Сетевой компонент для получения информации от клиентских машин.

Timer1: Ttimer – таймер с интервалом обновления 1 сек. Используется для периодической обработки информации, полученной от клиентских машин.

net: TstringGrid – таблица. Используется для вывода информации о подключившихся машинах.

Label2: Tlabel – надпись. Используется для вывода сетевого адреса сервера.

Chart1: Tchart – диаграмма. Используется для графического вывода объема сравнительной загрузки сети. Диаграмма настроена таким образом, что каждой колонке автоматически присваивается индивидуальный цвет, а справа выводится комментарии к каждой и значение в проценнтном представлении.

Chart2: Tchart - диаграмма. Используется для индикации уровня загрузки сети. В свойстве LeftAxis.Maximum указывается максимальный уровень за все время работы программы.

Button1: Tbutton – кнопка. Предназначена для вывода статистической информации /2/.

Оформление работы.

Отчет по лабораторной работе должен содержать:

- название и цель работы;

- руководство для пользователя программы;

- руководство для программиста;

- алгоритм программы;

- листинг программы;

- экранные формы работы программы;

- вывод по выполненной работе;

- список использованных источников.

Наши рекомендации