This commit is contained in:
2026-05-25 01:47:25 +03:00
parent d10d6d1352
commit 2661ef1437
11 changed files with 144 additions and 169 deletions
+2 -2
View File
@@ -53,7 +53,7 @@
\label{fig:ensp} \label{fig:ensp}
\end{figure} \end{figure}
Эти решения ближе к реальной настройке сети, чем универсальные диаграммеры: они позволяют нарисовать топологию (а также) моделировать поведение сетевых устройств. Однако их назначение далеко от цели данной работы. Диаграммеры в их составе ориентированы на описание сети на основе оборудования конкретного производителя, а не на универсальное формализованное описание конфигурации сети виртуальных машин для лабораторных стендов. Эти решения ближе к реальной настройке сети, чем универсальные диаграммеры: они позволяют нарисовать топологию сетевых устройств, однако их назначение далеко от цели данной работы. Диаграммеры в их составе ориентированы на описание сети на основе оборудования конкретного производителя, а не на универсальное формализованное описание конфигурации сети виртуальных машин для лабораторных стендов.
\subsection{Генераторы диаграмм} \subsection{Генераторы диаграмм}
@@ -73,7 +73,7 @@
\label{fig:graphviz} \label{fig:graphviz}
\end{figure} \end{figure}
\begin{figure}[htbp] \begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\textwidth]{files/plantuml.png} \includegraphics[width=0.8\textwidth]{files/plantuml.png}
\caption{Диаграмма сети в PlantUML} \caption{Диаграмма сети в PlantUML}
+2 -2
View File
@@ -4,7 +4,7 @@
Исходя из результатов обзора, в качестве пользовательской формы задания конфигурации выбрано табличное представление. Такая форма представления удобна тем, что позволяет явно фиксировать элементы сети и их атрибуты, редактировать отдельные значения и проверять заполненность полей. При этом она допускает частично заданные конфигурации: часть параметров может быть указана сразу, а часть оставлена пустой для последующего уточнения. Исходя из результатов обзора, в качестве пользовательской формы задания конфигурации выбрано табличное представление. Такая форма представления удобна тем, что позволяет явно фиксировать элементы сети и их атрибуты, редактировать отдельные значения и проверять заполненность полей. При этом она допускает частично заданные конфигурации: часть параметров может быть указана сразу, а часть оставлена пустой для последующего уточнения.
При разработке табличного представления конфигурации сети виртуальных машин рассматривались два варианта организации данных: представление в первой нормальной форме (далее - 1НФ) и представление в третьей нормальной форме (далее - 3НФ). Оба варианта позволяют структурированно описать сеть, однако различаются сложностью редактирования данных в случае непосредственной работы с таблицами. Вторая нормальная форма отдельно не рассматривалась как самостоятельный вариант представления, поскольку для данной задачи она является промежуточным этапом между компактным пользовательским описанием и полностью разнесённой структурой данных. При разработке табличного представления конфигурации сети виртуальных машин рассматривались два варианта организации данных: представление в первой нормальной форме (далее~-- 1НФ) и представление в третьей нормальной форме (далее~-- 3НФ). Оба варианта позволяют структурированно описать сеть, однако различаются сложностью редактирования данных в случае непосредственной работы с таблицами.
Разберём оба представления на примере топологии, изображённой на рисунке~\ref{fig:exmpl1} Разберём оба представления на примере топологии, изображённой на рисунке~\ref{fig:exmpl1}
@@ -126,7 +126,7 @@ PC4.eth1 & 10.0.0.4/24 \\
\label{tab:3nf3} \label{tab:3nf3}
\end{table} \end{table}
\subsubsection*{Выбор формы} \subsubsection*{Выбор представления}
В качестве основного пользовательского представления была выбрана первая нормальная форма. Она удобнее в сравнении с 3НФ для ручного заполнения, проще воспринимается при описании лабораторных стендов и не требует постоянного перехода между большим количеством связанных таблиц. В качестве основного пользовательского представления была выбрана первая нормальная форма. Она удобнее в сравнении с 3НФ для ручного заполнения, проще воспринимается при описании лабораторных стендов и не требует постоянного перехода между большим количеством связанных таблиц.
+40 -15
View File
@@ -8,43 +8,68 @@
%\label{fig:uml_model} %\label{fig:uml_model}
%\end{figure} %\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{files/schema.png}
\caption{Процесс работы}
\label{fig:schema}
\end{figure}
Табличное представление используется для ввода, но для дальнейшей обработки требуется программная структура, в которой связи между объектами выражены явно. Поэтому данные таблиц должны преобразовываться во внутреннее представление, например в набор объектов Python (рисуок \ref{fig:uml_model1}), соответствующих основным сущностям конфигурации. Такая модель служит центральным представлением, из которого данные могут быть преобразованы в другие форматы. \begin{figure}[H]
\begin{figure}[htbp]
\centering \centering
\includegraphics[width=0.8\textwidth]{files/UML.png} \includegraphics[width=1\textwidth]{files/UML.png}
\caption{UML диаграмма классов Python} \caption{UML-диаграмма классов Python}
\label{fig:uml_model1} \label{fig:uml_model1}
\end{figure} \end{figure}
Табличное представление используется для ввода, но для дальнейшей обработки требуется программная структура, в которой связи между объектами выражены явно. Поэтому данные таблиц должны преобразовываться во внутреннее представление, которое было реализовано в виде набора объектов Python (рис. \ref{fig:uml_model1}), соответствующих основным сущностям конфигурации. Такая модель служит центральным представлением, из которого данные могут быть преобразованы в другие форматы.
Также необходима разработка механизмов преобразования модели. Основными преобразованиями являются импорт данных из табличного описания во внутреннюю модель, экспорт во входные языки средства развертывания сетевых конфигураций и средства построения диаграмм. YAML-файл в этом случае используется как структурированное описание, пригодное для дальнейшей обработки программами, вроде Netloom \cite{netloom} для поднятия сети из виртуальных машин, а D2 может применяться для генерации визуального представления сети на основе уже построенной модели. Также необходима разработка механизмов преобразования модели. Основными преобразованиями являются импорт данных из табличного описания во внутреннюю модель, экспорт во входные языки средства развертывания сетевых конфигураций и средства построения диаграмм. YAML-файл в этом случае используется как структурированное описание, пригодное для дальнейшей обработки программами, вроде Netloom \cite{netloom} для поднятия сети из виртуальных машин, а D2 может применяться для генерации визуального представления сети на основе уже построенной модели.
Программная реализация средства описания конфигурации сети виртуальных машин выполнена на языке Python. Объём написанного кода: 710 строк, 48 килобайт. Код выложен на веб-сервисе Github \cite{github}. На рисунке \ref{fig:schema} представлен основной процесс работы с утилитой. Построение диаграмм происходит с помощью модуля py-d2 (пример на рисунке \ref{fig:diagram}).
\begin{figure}[htbp] Программная реализация выполнена на языке Python. Объём написанного кода: 710 строк, 48 килобайт. Код выложен на веб-сервисе Github \cite{github}. На рисунке \ref{fig:schema} представлен основной процесс работы с утилитой. Построение диаграмм происходит с помощью модуля py-d2 (пример на рис \ref{fig:diagram}).
\begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\textwidth]{files/diagram.png} \includegraphics[width=0.8\textwidth]{files/schema.png}
\caption{Схема работы программной реализации}
\label{fig:schema}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=1\textwidth]{files/diagram.png}
\caption{Пример диаграмммы, построенной утилитой} \caption{Пример диаграмммы, построенной утилитой}
\label{fig:diagram} \label{fig:diagram}
\end{figure} \end{figure}
Воспроизводимость описания конфигурации обеспечивается тем, что результат хранится в виде структурированных данных. Одна и та же таблица при повторной обработке приводит к построению той же внутренней модели и, соответственно, к одинаковому описанию конфигурации. А преобразование в формат, пригодный для использования в средстве развёртывания сети виртуальных машин, обеспечивает возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин. Воспроизводимость описания конфигурации обеспечивается тем, что результат хранится в виде структурированных данных. Одна и та же таблица при повторной обработке приводит к построению той же внутренней модели и, соответственно, к одинаковому описанию конфигурации. А преобразование в формат, пригодный для использования в средстве развёртывания сети виртуальных машин, обеспечивает возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.
\todo[inline]{вынести в отдельное приложение?} \todo[inline]{вынести в отдельное приложение?}
Пример экспортированного YAML-описания конфигурации сети приведён в листинге~\ref{lst:yaml-config}. Пример экспортированного YAML-описания конфигурации сети приведён в листинге~\ref{lst:yaml-config}.
\lstinputlisting[ \lstinputlisting[
language=yaml, language=yaml,
caption={Фрагмент YAML-описания конфигурации сети виртуальных машин}, caption={Фрагмент YAML-описания конфигурации сети виртуальных машин},
label={lst:yaml-config} label={lst:yaml-config},
frame=single,
framerule=0.4pt,
numbers=left,
numberstyle=\tiny,
basicstyle=\ttfamily\footnotesize,
lineskip=-1pt,
breaklines=true,
columns=fullflexible,
keepspaces=true
]{files/topology.yaml} ]{files/topology.yaml}
% \lstinputlisting[
% language=yaml,
% caption={Фрагмент YAML-описания конфигурации сети виртуальных машин},
% label={lst:yaml-config}
% ]{files/topology.yaml}
% Таким образом, решение строится не вокруг построения диаграммы, а вокруг формальной модели сетевой конфигурации. Табличное представление используется как способ ввода и редактирования, внутренняя модель — как основа обработки данных, а YAML и диаграмма — как формы представления результата. Такой подход позволяет обеспечить редактируемость, воспроизводимость и возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин. % Таким образом, решение строится не вокруг построения диаграммы, а вокруг формальной модели сетевой конфигурации. Табличное представление используется как способ ввода и редактирования, внутренняя модель — как основа обработки данных, а YAML и диаграмма — как формы представления результата. Такой подход позволяет обеспечить редактируемость, воспроизводимость и возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 64 KiB

+6 -5
View File
@@ -1,8 +1,9 @@
сетевая топология -- "табличное представление (.csv)": ручное задание сетевая топология --> "табличное представление (.csv)": ручное задание
"табличное представление (.csv)" -- внутренняя модель (Python) : преобразование кодом "табличное представление (.csv)" --> внутренняя модель (Python) : разбор
внутренняя модель (Python) -- "диаграмма (.svg)" : преобразование кодом (py-d2) внутренняя модель (Python) --> "описание диаграммы (.d2)" : визуализация
внутренняя модель (Python) -- "описание для Netloom (.yaml)" : преобразование кодом "описание диаграммы (.d2)" --> "диаграмма (.svg)" : использование D2
"описание для Netloom (.yaml)" -- средство развёртывания сетевой топологии (Netloom) { внутренняя модель (Python) --> "описание для Netloom (.yaml)" : экспорт
"описание для Netloom (.yaml)" --> средство развёртывания сетевой топологии (Netloom) {
style.stroke-dash: 5 style.stroke-dash: 5
} }
средство развёртывания сетевой топологии (Netloom).style.stroke-dash: 5 средство развёртывания сетевой топологии (Netloom).style.stroke-dash: 5
Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 62 KiB

+87 -86
View File
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

+7 -59
View File
@@ -2,77 +2,25 @@ meta:
id: topology.yaml id: topology.yaml
name: topology.yaml name: topology.yaml
networks: networks:
- name: NA - name: A
- name: NB
- name: NC
nodes: nodes:
- role: host - role: host
name: H1 name: PC1
interfaces: interfaces:
eth1: eth1:
ip: null ip: 10.0.0.1/24
network: NA network: A
gateway: null
index: 1
eth2:
ip: null
network: NB
gateway: null
index: 2
bridges: []
vlans: []
- role: host
name: H2
interfaces:
eth1:
ip: null
network: NA
gateway: null gateway: null
index: 1 index: 1
bridges: [] bridges: []
vlans: [] vlans: []
- role: host - role: host
name: H3 name: PC2
interfaces: interfaces:
eth1: eth1:
ip: null ip: 10.0.0.2/24
network: NA network: A
gateway: null gateway: null
index: 1 index: 1
bridges: [] bridges: []
vlans: [] vlans: []
- role: host
name: H4
interfaces:
eth1:
ip: null
network: NB
gateway: null
index: 1
bridges: []
vlans: []
- role: host
name: H5
interfaces:
eth1:
ip: null
network: NC
gateway: null
index: 1
bridges: []
vlans: []
- role: host
name: H6
interfaces:
eth1:
ip: null
network: null
gateway: null
index: 1
eth2:
ip: null
network: NC
gateway: null
index: 2
bridges: []
vlans: []