- •Пояснительная записка к лабораторной работе
- •Постановка задачи
- •Структура решения
- •Теория Типы адресов: физический (mac-адрес), сетевой (ip-адрес) и символьный (dns-имя)
- •Бесклассовая адресация (cidr)
- •Сетевые протоколы
- •Служба dns
- •Межсетевой экран
- •Обзор и анализ методов решения
- •Работа с параметрами стека tcp/ip
- •Настройка параметров tcp/ip
- •Просмотр параметров tcp/ip
- •Построение структуры кафедральной, факультетской и университетской сетей
- •Сбор первичной информации о сети
- •Анализ информации о сети
- •Построение структуры сети
- •Работа с межсетевым экраном
- •Обзор межсетевых экранов
- •Описание реализации применяемых методов
- •Описание tcp/ip параметров настройки компьютера
- •Построение структуры кафедральной, факультетской и университетской сетей
- •Сбор информации о сети с помощью специально написанного приложения
- •Руководство программиста
- •Руководство пользователя
- •Построение карты сети
- •Работа с межсетевым экраном
- •Установка
- •Настройка
- •Создание правил
Обзор и анализ методов решения
Работа с параметрами стека tcp/ip
Параметры TCP/IP:
Собственный IP-адрес узла
Маска подсети
IP-адрес шлюза
IP-адрес основного и вторичного DNS-серверов
Настройка параметров tcp/ip
Настройка стека протоколов TCP/IP предполагает установление для узла сети IP-адреса узла в сети, маски сети, шлюза, DNS-сервер для данного узла. Эти настройки можно выполнить: вручную (статические параметры) или автоматически (динамические параметры по протоколу DHCP).
Настройка параметров сети производится стандартными средствами ОС. Для этого на компьютере с установленной ОС Windows 8.1 нужно проследовать по пути:
Пуск → Панель управления → Сеть и Интернет → Центр управления сетями и общим доступом → Подключение → Протокол Интернета версии 4 (TCP/IPv4)
В открывшемся окне есть возможность задать настройки сети автоматически, либо задать их вручную.
Просмотр параметров tcp/ip
Просмотр TCP/IP параметров в операционной системе Windows можно осуществить двумя способами:
консольной утилитой ipconfig
стандартными средствами ОС
Способ 1. Утилита ipconfig
В операционных системах Microsoft Windows утилита ipconfig служит для вывода деталей текущего соединения и управления клиентскими сервисами DHCP и DNS.
Для просмотра сведений о сетевых подключениях в командной строке введём команду «ipconfig /all» (вызов утилиты ipconfig с ключом /all, который отвечает за вывод полной информации по всем адаптерам).
Способ 2. Просмотр сведений с помощью встроенных оконных приложений ОС
Чтобы просмотреть параметры стека TCP/IP в операционной системе Windows 8.1, необходимо проследовать по пути:
Пуск → Панель управления → Сеть и Интернет → Центр управления сетями и общим доступом → Подключение → Сведения
Построение структуры кафедральной, факультетской и университетской сетей
Сбор первичной информации о сети
Дано:
- Диапазон IP-адресов.
Необходимо определить:
- Для каждого адреса из диапазона работоспособность узла.
- Для каждого адреса из диапазона доменное имя.
Задачу можно решить двумя способами:
Ручной способ – с помощью утилит.
Программный способ – с помощью специально написанной программы.
Способ 1. Сбор информации о сети вручную
При работе в сети могут возникнуть ситуации, когда необходимо определить работоспособность того или иного узла или канала связи, а также по возможности выяснить его доменное имя. Для этой цели служат утилиты ping и nslookup. Названия программных файлов утилит, а также формат их командной строки могут изменяться в зависимости от версии ОС, но принципы работы и назначение этих утилит одинаковы. В Windows утилиты ping и nslookup имеются в комплекте поставки и представляют собой программы, запускаемые из командной строки.
Утилита ping является одним из главных средств, используемых для отладки сетей, и служит для принудительного вызова ответа конкретной машины. Она позволяет проверять работу программ TCP/IP на удаленных машинах, адреса устройств в локальной сети, адрес и маршрут для удаленного сетевого устройства. В выполнении команды ping участвуют система маршрутизации, схемы разрешения адресов и сетевые шлюзы. Это утилита низкого уровня, которая не требует наличия серверных процессов на проверяемой машине, поэтому успешный результат при прохождении запроса вовсе не означает, что выполняются какие-либо сервисные программы высокого уровня, а говорит о том, что сеть находится в рабочем состоянии.
Использование ping на Windows 8.1:
ping [-t] [-a] [-n <число>] [-l <размер>] [-f] [-i <TTL>] [-v <TOS>] [-r <число>] [-s <число>] [[-j <список_узлов>] | [-k <список_узлов>]] [-w <время_ожидания>] [-R] [-S <адрес_источника>] [-c секция] [-p] [-4] [-6] конечный_узел
ПАРАМЕТРЫ:
-t
Проверяет связь с указанным узлом до прекращения.
-a
Разрешает адреса в имена узлов.
-n <число>
Число отправляемых запросов проверки связи.
-l <размер>
Размер буфера отправки.
-f
Устанавливает флаг, запрещающий фрагментацию, в пакете (только IPv4).
-i <TTL>
Срок жизни пакетов.
-v <TOS>
Тип службы (только IPv4; этот параметр использовать не рекомендуется, и он не влияет на поле TOS в заголовке IP).
-r <число>
Записывает маршрут для указанного числа прыжков (только IPv4).
-s <число>
Задает метку времени для указанного числа прыжков (только IPv4).
-j <список_узлов>
Задает свободный выбор маршрута по списку узлов (только IPv4).
-k <список_узлов>
Задает жесткий выбор маршрута по списку узлов (только IPv4).
-w <время_ожидания>
Задает время ожидания каждого ответа (в миллисекундах).
-R
Использует заголовок маршрута для проверки и обратного маршрута (только IPv6). В соответствии с RFC 5095, использование этого заголовка маршрута не рекомендуется. В некоторых системах запросы проверки связи могут быть сброшены, если используется этот заголовок.
-S <адрес_источника>
Задает адрес источника.
-c секция
Идентификатор секции маршрутизации.
-p
Проверяет связь с сетевым адресом поставщика виртуализации Hyper-V.
-4
Задает принудительное использование протокола IPv4.
-6
Задает принудительное использование протокола IPv6.
Таким образом, вызов утилиты ping с IP-адресом узла в качестве параметра, позволяет определить работоспособность узла.
Утилита nslookup (англ. name server lookup поиск на сервере имён) — утилита, предоставляющая пользователю интерфейс командной строки для обращения к системе DNS (проще говоря, DNS-клиент). Позволяет задавать различные типы запросов и запрашивать произвольно указываемые сервера. Использование nslookup на Windows 8.1:
Синтаксис |
Описание |
nslookup [-opt ...] |
Интерактивный режим с использованием сервера по умолчанию. |
nslookup [-opt ...] -server |
Интерактивный режим с использованием сервера "server". |
nslookup [-opt ...] host |
Поиск узла "host" с использованием сервера по умолчанию. |
nslookup [-opt ...] host server |
Поиск узла "host" с использованием сервера "server". |
Вызов утилиты nslookup с IP-адресом узла в качестве параметра позволит определить доменное имя этого узла.
Способ 2. Сбор информации о сети с помощью написанного приложения
Здесь необходимо решить следующие подзадачи:
Выбрать способ ввода диапазона IP-адресов
Выбрать способ распараллеливания вычислений
Для написания приложения было решено использовать платформу .NET Framework версии 4.6.2 (20 июля 2016). Рассмотрим методы решения в рамках данной платформы:
Ввод диапазона адресов
Для упрощения процесса сбора информации о сети, необходимо предусмотреть возможность ввода диапазона адресов, путем ввода начального и конечного адреса. Современные среды разработки предоставляют большое количество компонент, позволяющих организовать ввод компонент: в виде пары (текстовое поле - пара кнопок со стрелками) это может быть numericUpDown или spinButton, в виде поля для текстового ввода, такие как textBox или richTextBot и другие различные компоненты. Для приложения по сбору и анализу информации о сети было принято решение использовать стандартный компонент платформы .NET – numericUpDown.
Распараллеливание вычислений
Для удобной работы с приложением и для повышения скорости его работы, необходимо предусмотреть следующее: для обработки большого количества IP-адресов потребуется довольно много времени, кроме того, в обычном синхронном подходе, будет блокироваться основной поток программы, в следствии чего программа будет подвисать на некоторое время, что не есть хорошо для пользователя. Есть два подхода для решения данных проблем: асинхронные вызовы и использование многопоточности.
Асинхронность. Асинхронная модель построена на очереди событий. При возникновении некоторого события (пришел запрос, выполнилось считывание файла, пришел ответ от БД и т.д.) оно помещается в конец очереди. Поток, который обрабатывает эту очередь, берет событие с начала очереди, и выполняет связанный с этим событием код. Пока очередь не пуста процессор будет занят работой. Таким образом, запустив некоторый запрос, основной поток приложения приступит к запуску следующего, не ожидая ответа на предыдущий запрос. Ответ на предыдущий запрос будет обработан в порядке очереди. Отправка асинхронного запроса предполагает написание метода Callback, который осуществит обработку ответа на запрос непосредственно после завершения запроса. Callback метод называют методом обратного вызова. В его теле доступны результаты завершенного асинхронного запроса.
Многопоточность. Многопоточность – это свойство платформы (например, операционной системы) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся параллельно, то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины. Все потоки процесса имеют не только общее адресное пространство, но и общие дескрипторы файлов. Выполняющийся процесс имеет как минимум один (главный) поток. В программе в главном потоке находится графический интерфейс, а вызов функций выполняется в отдельных потоках, тем самым не блокируя главный поток.
Рассмотрим различные решения платформы .NET 4.6.2, позволяющие использовать асинхронность и многопоточность:
Многопоточность .NET представлена в пространстве имен System.Threading. Именно там содержатся классы реализующие многопоточность, в частности класс Thread. Используя класс Thread, мы можем выделить в приложении несколько потоков, которые будут выполняться одновременно. Определяется задача в приложении, которую будет выполнять данный поток. Для этого добавляется новый метод. Для создания нового потока используется делегат ThreadStart, который получает в качестве параметра метод, определенный выше. Делегат — структура данных, указывающая на методы (статические или экземпляра класса). И чтобы запустить поток, вызывается метод Start. Можно использовать класс ThreadPool, который обеспечивает приложение пулом рабочих потоков, управляемых системой, позволяя пользователю сосредоточиться на выполнении задач приложения, а не на управлении потоками. Если имеются небольшие задачи, которые требуют фоновой обработки, пул управляемых потоков — это самый простой способ воспользоваться преимуществами нескольких потоков. С появлением версии .NET Framework 4.0 разработчики получили новую библиотеку для параллельного программирования - TPL и в частности - класс Task. Данный класс позволяет в значительной степени упростить написание параллельного кода, без необходимости работы, непосредственно с потоками или пулом потоков. От класса Thread класс Task отличается тем, что он является абстракцией, представляющей асинхронную операцию, а в классе Thread инкапсулируется поток исполнения. Одним из новых классов в .NET Framework 4.0 - является класс System.Threading.Tasks.Parallel. Этот класс поддерживает набор методов, которые позволяют выполнять итерации по коллекции данных в параллельном режиме. Одними из таких методов являются Parallel.For() и Parallel.ForEach(), Parallel.Invoke(): Parallel.Invoke: выполняет параллельно массив делегатов; Parallel.For: параллельный эквивалент цикла for; Parallel.ForEach: параллельный эквивалент цикла foreach. Все три метода блокируют управление до окончания выполнения всех действий.
Асинхронное программирование реализовано с помощью async/await через асинхронные функции. Асинхронная функция — это метод класса или анонимная функция, помеченные модификатором async. Она может возвращать как объект класса Task, так и Task<T> для произвольного типа T — в таких функциях может быть await. В .NET используется, начиная с версии 1.0.0.
Для определения работоспособности узла был выбран асинхронный подход, для определения его доменного имени – многопоточный подход с использованием класса Thread.
Для решения поставленных задач было принято решение использовать платформу .NET c языком C# версии 6.0.
Обобщенный алгоритм сбора информации о сети:
Считать диапазон IP-адресов с выбранных компонент ввода.
Для каждого адреса из диапазона:
Запросить статус работоспобности узла:
Создать асинхронный запрос работоспобности узла.
Прикрепить Callback метод к запросу.
Отправить асинхронный запрос работоспобности узла.
В методе Callback:
Извлечь информацию о результате запроса
Сохранить результат.
Для каждого адреса из диапазона:
Определить доменное имя узла:
Создать новый поток, указав на метод делегат.
Запустить поток.
В методе делегате:
Выполнить запрос на разрешение IP-адреса в доменное имя.
Сохранить результат.
