From 703a8cebdd8382c3e08944f6d4cbbdca99e71b69 Mon Sep 17 00:00:00 2001 From: Jake Hillion Date: Mon, 16 Nov 2020 22:48:33 +0000 Subject: [PATCH] handover commit --- Evaluation/evaluation.tex | 19 +++++++++++-------- thesis.pdf | Bin 479973 -> 479999 bytes 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Evaluation/evaluation.tex b/Evaluation/evaluation.tex index 4b2c9b9..cb50d97 100644 --- a/Evaluation/evaluation.tex +++ b/Evaluation/evaluation.tex @@ -11,15 +11,15 @@ \graphicspath{{Evaluation/Figs/Vector/}{Evaluation/Figs/}} \fi -This chapter will discuss the methods used to evaluate my project and the results gained. The results will be discussed in the context of the success criteria, laid out in the Project Proposal. +This chapter will discuss the methods used to evaluate my project and the results gained. The results will be discussed in the context of the success criteria laid out in the Project Proposal. -This evaluation shows that a network using my method of combining Internet connections can see vastly superior network performance to one without. It will show the benefits to throughput, redundancy, and adaptability. +This evaluation shows that a network using my method of combining Internet connections can see vastly superior network performance to one without. It will show the benefits to throughput, availability, and adaptability. \section{Evaluation Methodology} -I performed my experiments on a local Proxmox\footnote{\url{https://proxmox.com}} server. To encourage frequent and thorough testing, a harness was built in Python, allowing tests to be added with very small difficulty and repeated with any code changes. +I performed my experiments on a local Proxmox\footnote{\url{https://proxmox.com}} server. To encourage frequent and thorough testing, a harness was built in Python, allowing tests to be added easily and repeated with any code changes. -Proxmox was chosen due to its RESTful API, for integration with Python. It provides the required tools to limit connection speeds and disable connections. The server that ran these tests holds only a single other virtual machine which handles routing. This limits the effects of external factors on the tests. +Proxmox was chosen due to its RESTful API, for integration with Python. It provides the required tools to limit connection speeds and disable connections. The server that ran these tests holds only a single other virtual machine which handles routing. This limits the effect of external factors on the tests. The tests are performed on a Dell R710 Server with the following specifications: @@ -34,6 +34,7 @@ The tests are performed on a Dell R710 Server with the following specifications: The majority of data presented in this section will be in the form of line graphs. These are generated in a consistent format, using a script found in appendix \ref{appendix:graph_generation}. \begin{figure} + \centering \begin{subfigure}{.3\textwidth} \includegraphics[width=0.9\linewidth]{graphs/IS0-R0-1R1-1R2-1R3-1T10S1-R0-1R1-1R2-1T10S2-R0-1R1-1T10} \caption{No error bars} @@ -92,7 +93,7 @@ To generate these results, a fresh set of VMs (Virtual Machines) are created and \label{fig:standard-network-structure} \end{figure} -The network structure of all standard tests is shown in figure \ref{fig:standard-network-structure}. Any deviations from this structure will be mentioned. The Local Portal has as many interfaces as referenced in any test, plus one to connect to the client. All Virtual Machines also have an additional interface for management, but it is not relevant to the tests. +The network structure of all standard tests is shown in figure \ref{fig:standard-network-structure}. Any deviations from this structure will be mentioned. The Local Portal has as many interfaces as referenced in any test, plus one to connect to the client. All Virtual Machines also have an additional interface for management, but this has no effect on the tests. @@ -107,6 +108,7 @@ TODO. The performance gains measured are visible in both directions (inbound and outbound to the client). The graphs shown in this evaluation section are inbound unless stated otherwise, with the outbound graphs being available in Appendix \ref{appendix:outbound-graphs}. \begin{figure} + \centering \begin{subfigure}{.49\textwidth} \includegraphics[width=0.9\linewidth]{graphs/IEyS0-R0-2R1-2T10S1-R0-1R1-2T10S2-R0-1R1-1T10} \caption{The inbound graph} @@ -152,7 +154,7 @@ This goal was to ensure the Client could use its network interface as if it real \subsection{Security} -TODO. +Not implemented yet. \subsection{More Bandwidth over Two Equal Connections} @@ -176,6 +178,7 @@ This is demonstrated by showing that $1x1MB + 1x2MB$ connections can exceed the \subsection{More Bandwidth over Four Equal Connections} \begin{figure} + \centering \begin{subfigure}{.49\textwidth} \includegraphics[width=0.9\linewidth]{graphs/IEyS0-R0-1R1-1R2-1R3-1T10S1-R0-1R1-1R2-1T10S2-R0-1R1-1T10} \caption{1MB connections} @@ -228,11 +231,11 @@ ip rule add to 1.1.1.3 table 10 priority 10 \label{fig:policy-based-routing-script-remote-portal} \end{figure} -The single interface Remote Portal is achieved using a similar set of commands to the IP Spoofing. The majority of the work is again done by policy based routing, with some kernel parameters needing to be set too. A sample script is shown in figure \ref{fig:policy-based-routing-script-remote-portal}. +The single interface Remote Portal is achieved using a similar set of commands to IP Spoofing. The majority of the work is again done by policy based routing, with some kernel parameters needing to be set too. A sample script is shown in figure \ref{fig:policy-based-routing-script-remote-portal}. \subsection{Connection Metric Values} -TODO. +Not implemented yet. diff --git a/thesis.pdf b/thesis.pdf index 595e3c55a276f10184f235f4e0c502816bcce45b..18c5a9c80242ce737ce7e3d5caad35a07579b28e 100644 GIT binary patch delta 14928 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 ZcO*^QOkGieB!FgNg&`#sl^28ge*j>ojjaFx