develop #2
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
_minted-thesis/
|
||||
*.tdo*
|
||||
.DS_Store*
|
||||
*.aux*
|
||||
|
@ -1,132 +0,0 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
% ******************************* Thesis Appendix A ****************************
|
||||
\chapter{How to install \LaTeX}
|
||||
|
||||
\section*{Windows OS}
|
||||
|
||||
\subsection*{TeXLive package - full version}
|
||||
\begin{enumerate}
|
||||
\item Download the TeXLive ISO (2.2GB) from\\
|
||||
\href{https://www.tug.org/texlive/}{https://www.tug.org/texlive/}
|
||||
\item Download WinCDEmu (if you don't have a virtual drive) from \\
|
||||
\href{http://wincdemu.sysprogs.org/download/}
|
||||
{http://wincdemu.sysprogs.org/download/}
|
||||
\item To install Windows CD Emulator follow the instructions at\\
|
||||
\href{http://wincdemu.sysprogs.org/tutorials/install/}
|
||||
{http://wincdemu.sysprogs.org/tutorials/install/}
|
||||
\item Right click the iso and mount it using the WinCDEmu as shown in \\
|
||||
\href{http://wincdemu.sysprogs.org/tutorials/mount/}{
|
||||
http://wincdemu.sysprogs.org/tutorials/mount/}
|
||||
\item Open your virtual drive and run setup.pl
|
||||
\end{enumerate}
|
||||
|
||||
or
|
||||
|
||||
\subsection*{Basic MikTeX - \TeX~ distribution}
|
||||
\begin{enumerate}
|
||||
\item Download Basic-MiK\TeX (32bit or 64bit) from\\
|
||||
\href{http://miktex.org/download}{http://miktex.org/download}
|
||||
\item Run the installer
|
||||
\item To add a new package go to Start >> All Programs >> MikTex >> Maintenance (Admin) and choose Package Manager
|
||||
\item Select or search for packages to install
|
||||
\end{enumerate}
|
||||
|
||||
\subsection*{TexStudio - \TeX~ editor}
|
||||
\begin{enumerate}
|
||||
\item Download TexStudio from\\
|
||||
\href{http://texstudio.sourceforge.net/\#downloads}
|
||||
{http://texstudio.sourceforge.net/\#downloads}
|
||||
\item Run the installer
|
||||
\end{enumerate}
|
||||
|
||||
\section*{Mac OS X}
|
||||
\subsection*{MacTeX - \TeX~ distribution}
|
||||
\begin{enumerate}
|
||||
\item Download the file from\\
|
||||
\href{https://www.tug.org/mactex/}{https://www.tug.org/mactex/}
|
||||
\item Extract and double click to run the installer. It does the entire configuration, sit back and relax.
|
||||
\end{enumerate}
|
||||
|
||||
\subsection*{TexStudio - \TeX~ editor}
|
||||
\begin{enumerate}
|
||||
\item Download TexStudio from\\
|
||||
\href{http://texstudio.sourceforge.net/\#downloads}
|
||||
{http://texstudio.sourceforge.net/\#downloads}
|
||||
\item Extract and Start
|
||||
\end{enumerate}
|
||||
|
||||
|
||||
\section*{Unix/Linux}
|
||||
\subsection*{TeXLive - \TeX~ distribution}
|
||||
\subsubsection*{Getting the distribution:}
|
||||
\begin{enumerate}
|
||||
\item TexLive can be downloaded from\\
|
||||
\href{http://www.tug.org/texlive/acquire-netinstall.html}
|
||||
{http://www.tug.org/texlive/acquire-netinstall.html}.
|
||||
\item TexLive is provided by most operating system you can use (rpm,apt-get or yum) to get TexLive distributions
|
||||
\end{enumerate}
|
||||
|
||||
\subsubsection*{Installation}
|
||||
\begin{enumerate}
|
||||
\item Mount the ISO file in the mnt directory
|
||||
\begin{verbatim}
|
||||
mount -t iso9660 -o ro,loop,noauto /your/texlive####.iso /mnt
|
||||
\end{verbatim}
|
||||
|
||||
\item Install wget on your OS (use rpm, apt-get or yum install)
|
||||
\item Run the installer script install-tl.
|
||||
\begin{verbatim}
|
||||
cd /your/download/directory
|
||||
./install-tl
|
||||
\end{verbatim}
|
||||
\item Enter command `i' for installation
|
||||
|
||||
\item Post-Installation configuration:\\
|
||||
\href{http://www.tug.org/texlive/doc/texlive-en/texlive-en.html\#x1-320003.4.1}
|
||||
{http://www.tug.org/texlive/doc/texlive-en/texlive-en.html\#x1-320003.4.1}
|
||||
\item Set the path for the directory of TexLive binaries in your .bashrc file
|
||||
\end{enumerate}
|
||||
|
||||
\subsubsection*{For 32bit OS}
|
||||
For Bourne-compatible shells such as bash, and using Intel x86 GNU/Linux and a default directory setup as an example, the file to edit might be \begin{verbatim}
|
||||
edit $~/.bashrc file and add following lines
|
||||
PATH=/usr/local/texlive/2011/bin/i386-linux:$PATH;
|
||||
export PATH
|
||||
MANPATH=/usr/local/texlive/2011/texmf/doc/man:$MANPATH;
|
||||
export MANPATH
|
||||
INFOPATH=/usr/local/texlive/2011/texmf/doc/info:$INFOPATH;
|
||||
export INFOPATH
|
||||
\end{verbatim}
|
||||
\subsubsection*{For 64bit OS}
|
||||
\begin{verbatim}
|
||||
edit $~/.bashrc file and add following lines
|
||||
PATH=/usr/local/texlive/2011/bin/x86_64-linux:$PATH;
|
||||
export PATH
|
||||
MANPATH=/usr/local/texlive/2011/texmf/doc/man:$MANPATH;
|
||||
export MANPATH
|
||||
INFOPATH=/usr/local/texlive/2011/texmf/doc/info:$INFOPATH;
|
||||
export INFOPATH
|
||||
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
|
||||
%\subsection{Installing directly using Linux packages}
|
||||
\subsubsection*{Fedora/RedHat/CentOS:}
|
||||
\begin{verbatim}
|
||||
sudo yum install texlive
|
||||
sudo yum install psutils
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
\subsubsection*{SUSE:}
|
||||
\begin{verbatim}
|
||||
sudo zypper install texlive
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
\subsubsection*{Debian/Ubuntu:}
|
||||
\begin{verbatim}
|
||||
sudo apt-get install texlive texlive-latex-extra
|
||||
sudo apt-get install psutils
|
||||
\end{verbatim}
|
@ -1,13 +0,0 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
% ******************************* Thesis Appendix B ********************************
|
||||
|
||||
\chapter{Installing the CUED class file}
|
||||
|
||||
\LaTeX.cls files can be accessed system-wide when they are placed in the
|
||||
<texmf>/tex/latex directory, where <texmf> is the root directory of the user’s \TeX installation. On systems that have a local texmf tree (<texmflocal>), which
|
||||
may be named ``texmf-local'' or ``localtexmf'', it may be advisable to install packages in <texmflocal>, rather than <texmf> as the contents of the former, unlike that of the latter, are preserved after the \LaTeX system is reinstalled and/or upgraded.
|
||||
|
||||
It is recommended that the user create a subdirectory <texmf>/tex/latex/CUED for all CUED related \LaTeX class and package files. On some \LaTeX systems, the directory look-up tables will need to be refreshed after making additions or deletions to the system files. For \TeX Live systems this is accomplished via executing ``texhash'' as root. MIK\TeX users can run ``initexmf -u'' to accomplish the same thing.
|
||||
|
||||
Users not willing or able to install the files system-wide can install them in their personal directories, but will then have to provide the path (full or relative) in addition to the filename when referring to them in \LaTeX.
|
||||
|
@ -1,100 +0,0 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
%*******************************************************************************
|
||||
%*********************************** First Chapter *****************************
|
||||
%*******************************************************************************
|
||||
|
||||
\chapter{Getting started} %Title of the First Chapter
|
||||
|
||||
\ifpdf
|
||||
\graphicspath{{Chapter1/Figs/Raster/}{Chapter1/Figs/PDF/}{Chapter1/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Chapter1/Figs/Vector/}{Chapter1/Figs/}}
|
||||
\fi
|
||||
|
||||
|
||||
%********************************** %First Section **************************************
|
||||
\section{What is loren ipsum? Title with math \texorpdfstring{$\sigma$}{[sigma]}} %Section - 1.1
|
||||
|
||||
Lorem Ipsum is simply dummy text of the printing and typesetting industry (see
|
||||
Section~\ref{section1.3}). Lorem Ipsum~\citep{Aup91} has been the industry's
|
||||
standard dummy text ever since the 1500s, when an unknown printer took a galley
|
||||
of type and scrambled it to make a type specimen book. It has survived not only
|
||||
five centuries, but also the leap into electronic typesetting, remaining
|
||||
essentially unchanged. It was popularised in the 1960s with the release of
|
||||
Letraset sheets containing Lorem Ipsum passages, and more recently with desktop
|
||||
publishing software like Aldus PageMaker including versions of Lorem
|
||||
Ipsum~\citep{AAB95,Con90,LM65}.
|
||||
|
||||
The most famous equation in the world: $E^2 = (m_0c^2)^2 + (pc)^2$, which is
|
||||
known as the \textbf{energy-mass-momentum} relation as an in-line equation.
|
||||
|
||||
A {\em \LaTeX{} class file}\index{\LaTeX{} class file@LaTeX class file} is a file, which holds style information for a particular \LaTeX{}.
|
||||
|
||||
|
||||
\begin{align}
|
||||
CIF: \hspace*{5mm}F_0^j(a) = \frac{1}{2\pi \iota} \oint_{\gamma} \frac{F_0^j(z)}{z - a} dz
|
||||
\end{align}
|
||||
|
||||
\nomenclature[z-cif]{$CIF$}{Cauchy's Integral Formula} % first letter Z is for Acronyms
|
||||
\nomenclature[a-F]{$F$}{complex function} % first letter A is for Roman symbols
|
||||
\nomenclature[g-p]{$\pi$}{ $\simeq 3.14\ldots$} % first letter G is for Greek Symbols
|
||||
\nomenclature[g-i]{$\iota$}{unit imaginary number $\sqrt{-1}$} % first letter G is for Greek Symbols
|
||||
\nomenclature[g-g]{$\gamma$}{a simply closed curve on a complex plane} % first letter G is for Greek Symbols
|
||||
\nomenclature[x-i]{$\oint_\gamma$}{integration around a curve $\gamma$} % first letter X is for Other Symbols
|
||||
\nomenclature[r-j]{$j$}{superscript index} % first letter R is for superscripts
|
||||
\nomenclature[s-0]{$0$}{subscript index} % first letter S is for subscripts
|
||||
|
||||
|
||||
%********************************** %Second Section *************************************
|
||||
\section{Why do we use loren ipsum?} %Section - 1.2
|
||||
|
||||
|
||||
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using `Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for `lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
|
||||
|
||||
%********************************** % Third Section *************************************
|
||||
\section{Where does it come from?} %Section - 1.3
|
||||
\label{section1.3}
|
||||
|
||||
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
|
||||
|
||||
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from ``de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham
|
||||
|
||||
``Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
|
||||
|
||||
Section 1.10.32 of ``de Finibus Bonorum et Malorum", written by Cicero in 45 BC: ``Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"
|
||||
|
||||
1914 translation by H. Rackham: ``But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?"
|
||||
|
||||
Section 1.10.33 of ``de Finibus Bonorum et Malorum", written by Cicero in 45 BC: ``At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
|
||||
|
||||
1914 translation by H. Rackham: ``On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains."
|
||||
|
||||
\nomenclature[z-DEM]{DEM}{Discrete Element Method}
|
||||
\nomenclature[z-FEM]{FEM}{Finite Element Method}
|
||||
\nomenclature[z-PFEM]{PFEM}{Particle Finite Element Method}
|
||||
\nomenclature[z-FVM]{FVM}{Finite Volume Method}
|
||||
\nomenclature[z-BEM]{BEM}{Boundary Element Method}
|
||||
\nomenclature[z-MPM]{MPM}{Material Point Method}
|
||||
\nomenclature[z-LBM]{LBM}{Lattice Boltzmann Method}
|
||||
\nomenclature[z-MRT]{MRT}{Multi-Relaxation
|
||||
Time}
|
||||
\nomenclature[z-RVE]{RVE}{Representative Elemental Volume}
|
||||
\nomenclature[z-GPU]{GPU}{Graphics Processing Unit}
|
||||
\nomenclature[z-SH]{SH}{Savage Hutter}
|
||||
\nomenclature[z-CFD]{CFD}{Computational Fluid Dynamics}
|
||||
\nomenclature[z-LES]{LES}{Large Eddy Simulation}
|
||||
\nomenclature[z-FLOP]{FLOP}{Floating Point Operations}
|
||||
\nomenclature[z-ALU]{ALU}{Arithmetic Logic Unit}
|
||||
\nomenclature[z-FPU]{FPU}{Floating Point Unit}
|
||||
\nomenclature[z-SM]{SM}{Streaming Multiprocessors}
|
||||
\nomenclature[z-PCI]{PCI}{Peripheral Component Interconnect}
|
||||
\nomenclature[z-CK]{CK}{Carman - Kozeny}
|
||||
\nomenclature[z-CD]{CD}{Contact Dynamics}
|
||||
\nomenclature[z-DNS]{DNS}{Direct Numerical Simulation}
|
||||
\nomenclature[z-EFG]{EFG}{Element-Free Galerkin}
|
||||
\nomenclature[z-PIC]{PIC}{Particle-in-cell}
|
||||
\nomenclature[z-USF]{USF}{Update Stress First}
|
||||
\nomenclature[z-USL]{USL}{Update Stress Last}
|
||||
\nomenclature[s-crit]{crit}{Critical state}
|
||||
\nomenclature[z-DKT]{DKT}{Draft Kiss Tumble}
|
||||
\nomenclature[z-PPC]{PPC}{Particles per cell}
|
@ -1,110 +0,0 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
%*******************************************************************************
|
||||
%****************************** Second Chapter *********************************
|
||||
%*******************************************************************************
|
||||
|
||||
\chapter{My second chapter}
|
||||
|
||||
\ifpdf
|
||||
\graphicspath{{Chapter2/Figs/Raster/}{Chapter2/Figs/PDF/}{Chapter2/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Chapter2/Figs/Vector/}{Chapter2/Figs/}}
|
||||
\fi
|
||||
|
||||
|
||||
\section[Short title]{Reasonably long section title}
|
||||
|
||||
% Uncomment this line, when you have siunitx package loaded.
|
||||
%The SI Units for dynamic viscosity is \si{\newton\second\per\metre\squared}.
|
||||
I'm going to randomly include a picture Figure~\ref{fig:minion}.
|
||||
|
||||
|
||||
If you have trouble viewing this document contact Krishna at: \href{mailto:kks32@cam.ac.uk}{kks32@cam.ac.uk} or raise an issue at \url{https://github.com/kks32/phd-thesis-template/}
|
||||
|
||||
|
||||
\begin{figure}[htbp!]
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{minion}
|
||||
\caption[Minion]{This is just a long figure caption for the minion in Despicable Me from Pixar}
|
||||
\label{fig:minion}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\section*{Enumeration}
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae laoreet lectus. Donec lacus quam, malesuada ut erat vel, consectetur eleifend tellus. Aliquam non feugiat lacus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque a dolor sit amet dui malesuada malesuada id ac metus. Phasellus posuere egestas mauris, sed porta arcu vulputate ut. Donec arcu erat, ultrices et nisl ut, ultricies facilisis urna. Quisque iaculis, lorem non maximus pretium, dui eros auctor quam, sed sodales libero felis vel orci. Aliquam neque nunc, elementum id accumsan eu, varius eu enim. Aliquam blandit ante et ligula tempor pharetra. Donec molestie porttitor commodo. Integer rutrum turpis ac erat tristique cursus. Sed venenatis urna vel tempus venenatis. Nam eu rhoncus eros, et condimentum elit. Quisque risus turpis, aliquam eget euismod id, gravida in odio. Nunc elementum nibh risus, ut faucibus mauris molestie eu.
|
||||
Vivamus quis nunc nec nisl vulputate fringilla. Duis tempus libero ac justo laoreet tincidunt. Fusce sagittis gravida magna, pharetra venenatis mauris semper at. Nullam eleifend felis a elementum sagittis. In vel turpis eu metus euismod tempus eget sit amet tortor. Donec eu rhoncus libero, quis iaculis lectus. Aliquam erat volutpat. Proin id ullamcorper tortor. Fusce vestibulum a enim non volutpat. Nam ut interdum nulla. Proin lacinia felis malesuada arcu aliquet fringilla. Aliquam condimentum, tellus eget maximus porttitor, quam sem luctus massa, eu fermentum arcu diam ac massa. Praesent ut quam id leo molestie rhoncus. Praesent nec odio eget turpis bibendum eleifend non sit amet mi. Curabitur placerat finibus velit, eu ultricies risus imperdiet ut. Suspendisse lorem orci, luctus porta eros a, commodo maximus nisi.
|
||||
|
||||
Nunc et dolor diam. Phasellus eu justo vitae diam vehicula tristique. Vestibulum vulputate cursus turpis nec commodo. Etiam elementum sit amet erat et pellentesque. In eu augue sed tortor mollis tincidunt. Mauris eros dui, sagittis vestibulum vestibulum vitae, molestie a velit. Donec non felis ut velit aliquam convallis sit amet sit amet velit. Aliquam vulputate, elit in lacinia lacinia, odio lacus consectetur quam, sit amet facilisis mi justo id magna. Curabitur aliquet pulvinar eros. Cras metus enim, tristique ut magna a, interdum egestas nibh. Aenean lorem odio, varius a sollicitudin non, cursus a odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
|
||||
\begin{enumerate}
|
||||
\item The first topic is dull
|
||||
\item The second topic is duller
|
||||
\begin{enumerate}
|
||||
\item The first subtopic is silly
|
||||
\item The second subtopic is stupid
|
||||
\end{enumerate}
|
||||
\item The third topic is the dullest
|
||||
\end{enumerate}
|
||||
Morbi bibendum est aliquam, hendrerit dolor ac, pretium sem. Nunc molestie, dui in euismod finibus, nunc enim viverra enim, eu mattis mi metus id libero. Cras sed accumsan justo, ut volutpat ipsum. Nam faucibus auctor molestie. Morbi sit amet eros a justo pretium aliquet. Maecenas tempor risus sit amet tincidunt tincidunt. Curabitur dapibus gravida gravida. Vivamus porta ullamcorper nisi eu molestie. Ut pretium nisl eu facilisis tempor. Nulla rutrum tincidunt justo, id placerat lacus laoreet et. Sed cursus lobortis vehicula. Donec sed tortor et est cursus pellentesque sit amet sed velit. Proin efficitur posuere felis, porta auctor nunc. Etiam non porta risus. Pellentesque lacinia eros at ante iaculis, sed aliquet ipsum volutpat. Suspendisse potenti.
|
||||
|
||||
Ut ultrices lectus sed sagittis varius. Nulla facilisi. Nullam tortor sem, placerat nec condimentum eu, tristique eget ex. Nullam pretium tellus ut nibh accumsan elementum. Aliquam posuere gravida tellus, id imperdiet nulla rutrum imperdiet. Nulla pretium ullamcorper quam, non iaculis orci consectetur eget. Curabitur non laoreet nisl. Maecenas lacinia, lorem vel tincidunt cursus, odio lorem aliquet est, gravida auctor arcu urna id enim. Morbi accumsan bibendum ipsum, ut maximus dui placerat vitae. Nullam pretium ac tortor nec venenatis. Nunc non aliquet neque.
|
||||
|
||||
\section*{Itemize}
|
||||
\begin{itemize}
|
||||
\item The first topic is dull
|
||||
\item The second topic is duller
|
||||
\begin{itemize}
|
||||
\item The first subtopic is silly
|
||||
\item The second subtopic is stupid
|
||||
\end{itemize}
|
||||
\item The third topic is the dullest
|
||||
\end{itemize}
|
||||
|
||||
\section*{Description}
|
||||
\begin{description}
|
||||
\item[The first topic] is dull
|
||||
\item[The second topic] is duller
|
||||
\begin{description}
|
||||
\item[The first subtopic] is silly
|
||||
\item[The second subtopic] is stupid
|
||||
\end{description}
|
||||
\item[The third topic] is the dullest
|
||||
\end{description}
|
||||
|
||||
|
||||
\clearpage
|
||||
|
||||
\tochide\section{Hidden section}
|
||||
\textbf{Lorem ipsum dolor sit amet}, \textit{consectetur adipiscing elit}. In magna nisi, aliquam id blandit id, congue ac est. Fusce porta consequat leo. Proin feugiat at felis vel consectetur. Ut tempus ipsum sit amet congue posuere. Nulla varius rutrum quam. Donec sed purus luctus, faucibus velit id, ultrices sapien. Cras diam purus, tincidunt eget tristique ut, egestas quis nulla. Curabitur vel iaculis lectus. Nunc nulla urna, ultrices et eleifend in, accumsan ut erat. In ut ante leo. Aenean a lacinia nisl, sit amet ullamcorper dolor. Maecenas blandit, tortor ut scelerisque congue, velit diam volutpat metus, sed vestibulum eros justo ut nulla. Etiam nec ipsum non enim luctus porta in in massa. Cras arcu urna, malesuada ut tellus ut, pellentesque mollis risus.Morbi vel tortor imperdiet arcu auctor mattis sit amet eu nisi. Nulla gravida urna vel nisl egestas varius. Aliquam posuere ante quis malesuada dignissim. Mauris ultrices tristique eros, a dignissim nisl iaculis nec. Praesent dapibus tincidunt mauris nec tempor. Curabitur et consequat nisi. Quisque viverra egestas risus, ut sodales enim blandit at. Mauris quis odio nulla. Cras euismod turpis magna, in facilisis diam congue non. Mauris faucibus nisl a orci dictum, et tempus mi cursus.
|
||||
|
||||
Etiam elementum tristique lacus, sit amet eleifend nibh eleifend sed \footnote{My footnote goes blah blah blah! \dots}. Maecenas dapibu augue ut urna malesuada, non tempor nibh mollis. Donec sed sem sollicitudin, convallis velit aliquam, tincidunt diam. In eu venenatis lorem. Aliquam non augue porttitor tellus faucibus porta et nec ante. Proin sodales, libero vitae commodo sodales, dolor nisi cursus magna, non tincidunt ipsum nibh eget purus. Nam rutrum tincidunt arcu, tincidunt vulputate mi sagittis id. Proin et nisi nec orci tincidunt auctor et porta elit. Praesent eu dolor ac magna cursus euismod. Integer non dictum nunc.
|
||||
|
||||
|
||||
\begin{landscape}
|
||||
|
||||
\section*{Subplots}
|
||||
I can cite Wall-E (see Fig.~\ref{fig:WallE}) and Minions in despicable me (Fig.~\ref{fig:Minnion}) or I can cite the whole figure as Fig.~\ref{fig:animations}
|
||||
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.3\textwidth}
|
||||
\includegraphics[width=\textwidth]{TomandJerry}
|
||||
\caption{Tom and Jerry}
|
||||
\label{fig:TomJerry}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[b]{0.3\textwidth}
|
||||
\includegraphics[width=\textwidth]{WallE}
|
||||
\caption{Wall-E}
|
||||
\label{fig:WallE}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[b]{0.3\textwidth}
|
||||
\includegraphics[width=\textwidth]{minion}
|
||||
\caption{Minions}
|
||||
\label{fig:Minnion}
|
||||
\end{subfigure}
|
||||
\caption{Best Animations}
|
||||
\label{fig:animations}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\end{landscape}
|
@ -1,156 +0,0 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
%*******************************************************************************
|
||||
%****************************** Third Chapter **********************************
|
||||
%*******************************************************************************
|
||||
\chapter{My third chapter}
|
||||
|
||||
% **************************** Define Graphics Path **************************
|
||||
\ifpdf
|
||||
\graphicspath{{Chapter3/Figs/Raster/}{Chapter3/Figs/PDF/}{Chapter3/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Chapter3/Figs/Vector/}{Chapter3/Figs/}}
|
||||
\fi
|
||||
|
||||
\section{First section of the third chapter}
|
||||
And now I begin my third chapter here \dots
|
||||
|
||||
And now to cite some more people~\citet{Rea85,Ancey1996}
|
||||
|
||||
\subsection{First subsection in the first section}
|
||||
\dots and some more
|
||||
|
||||
\subsection{Second subsection in the first section}
|
||||
\dots and some more \dots
|
||||
|
||||
\subsubsection{First subsub section in the second subsection}
|
||||
\dots and some more in the first subsub section otherwise it all looks the same
|
||||
doesn't it? well we can add some text to it \dots
|
||||
|
||||
\subsection{Third subsection in the first section}
|
||||
\dots and some more \dots
|
||||
|
||||
\subsubsection{First subsub section in the third subsection}
|
||||
\dots and some more in the first subsub section otherwise it all looks the same
|
||||
doesn't it? well we can add some text to it and some more and some more and
|
||||
some more and some more and some more and some more and some more \dots
|
||||
|
||||
\subsubsection{Second subsub section in the third subsection}
|
||||
\dots and some more in the first subsub section otherwise it all looks the same
|
||||
doesn't it? well we can add some text to it \dots
|
||||
|
||||
\section{Second section of the third chapter}
|
||||
and here I write more \dots
|
||||
|
||||
\section{The layout of formal tables}
|
||||
This section has been modified from ``Publication quality tables in \LaTeX*''
|
||||
by Simon Fear.
|
||||
|
||||
The layout of a table has been established over centuries of experience and
|
||||
should only be altered in extraordinary circumstances.
|
||||
|
||||
When formatting a table, remember two simple guidelines at all times:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Never, ever use vertical rules (lines).
|
||||
\item Never use double rules.
|
||||
\end{enumerate}
|
||||
|
||||
These guidelines may seem extreme but I have
|
||||
never found a good argument in favour of breaking them. For
|
||||
example, if you feel that the information in the left half of
|
||||
a table is so different from that on the right that it needs
|
||||
to be separated by a vertical line, then you should use two
|
||||
tables instead. Not everyone follows the second guideline:
|
||||
|
||||
There are three further guidelines worth mentioning here as they
|
||||
are generally not known outside the circle of professional
|
||||
typesetters and subeditors:
|
||||
|
||||
\begin{enumerate}\setcounter{enumi}{2}
|
||||
\item Put the units in the column heading (not in the body of
|
||||
the table).
|
||||
\item Always precede a decimal point by a digit; thus 0.1
|
||||
{\em not} just .1.
|
||||
\item Do not use `ditto' signs or any other such convention to
|
||||
repeat a previous value. In many circumstances a blank
|
||||
will serve just as well. If it won't, then repeat the value.
|
||||
\end{enumerate}
|
||||
|
||||
A frequently seen mistake is to use `\textbackslash begin\{center\}' \dots `\textbackslash end\{center\}' inside a figure or table environment. This center environment can cause additional vertical space. If you want to avoid that just use `\textbackslash centering'
|
||||
|
||||
|
||||
\begin{table}
|
||||
\caption{A badly formatted table}
|
||||
\centering
|
||||
\label{table:bad_table}
|
||||
\begin{tabular}{|l|c|c|c|c|}
|
||||
\hline
|
||||
& \multicolumn{2}{c}{Species I} & \multicolumn{2}{c|}{Species II} \\
|
||||
\hline
|
||||
Dental measurement & mean & SD & mean & SD \\ \hline
|
||||
\hline
|
||||
I1MD & 6.23 & 0.91 & 5.2 & 0.7 \\
|
||||
\hline
|
||||
I1LL & 7.48 & 0.56 & 8.7 & 0.71 \\
|
||||
\hline
|
||||
I2MD & 3.99 & 0.63 & 4.22 & 0.54 \\
|
||||
\hline
|
||||
I2LL & 6.81 & 0.02 & 6.66 & 0.01 \\
|
||||
\hline
|
||||
CMD & 13.47 & 0.09 & 10.55 & 0.05 \\
|
||||
\hline
|
||||
CBL & 11.88 & 0.05 & 13.11 & 0.04\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\begin{table}
|
||||
\caption{A nice looking table}
|
||||
\centering
|
||||
\label{table:nice_table}
|
||||
\begin{tabular}{l c c c c}
|
||||
\hline
|
||||
\multirow{2}{*}{Dental measurement} & \multicolumn{2}{c}{Species I} & \multicolumn{2}{c}{Species II} \\
|
||||
\cline{2-5}
|
||||
& mean & SD & mean & SD \\
|
||||
\hline
|
||||
I1MD & 6.23 & 0.91 & 5.2 & 0.7 \\
|
||||
|
||||
I1LL & 7.48 & 0.56 & 8.7 & 0.71 \\
|
||||
|
||||
I2MD & 3.99 & 0.63 & 4.22 & 0.54 \\
|
||||
|
||||
I2LL & 6.81 & 0.02 & 6.66 & 0.01 \\
|
||||
|
||||
CMD & 13.47 & 0.09 & 10.55 & 0.05 \\
|
||||
|
||||
CBL & 11.88 & 0.05 & 13.11 & 0.04\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
|
||||
\begin{table}
|
||||
\caption{Even better looking table using booktabs}
|
||||
\centering
|
||||
\label{table:good_table}
|
||||
\begin{tabular}{l c c c c}
|
||||
\toprule
|
||||
\multirow{2}{*}{Dental measurement} & \multicolumn{2}{c}{Species I} & \multicolumn{2}{c}{Species II} \\
|
||||
\cmidrule{2-5}
|
||||
& mean & SD & mean & SD \\
|
||||
\midrule
|
||||
I1MD & 6.23 & 0.91 & 5.2 & 0.7 \\
|
||||
|
||||
I1LL & 7.48 & 0.56 & 8.7 & 0.71 \\
|
||||
|
||||
I2MD & 3.99 & 0.63 & 4.22 & 0.54 \\
|
||||
|
||||
I2LL & 6.81 & 0.02 & 6.66 & 0.01 \\
|
||||
|
||||
CMD & 13.47 & 0.09 & 10.55 & 0.05 \\
|
||||
|
||||
CBL & 11.88 & 0.05 & 13.11 & 0.04\\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{table}
|
27
Conclusions/conclusions.tex
Normal file
@ -0,0 +1,27 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
%*******************************************************************************
|
||||
%****************************** Fifth Chapter **********************************
|
||||
%*******************************************************************************
|
||||
\chapter{Conclusions}
|
||||
|
||||
% **************************** Define Graphics Path **************************
|
||||
\ifpdf
|
||||
\graphicspath{{Chapter5/Figs/Raster/}{Chapter5/Figs/PDF/}{Chapter5/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Chapter5/Figs/Vector/}{Chapter5/Figs/}}
|
||||
\fi
|
||||
|
||||
\section{Future Work}
|
||||
|
||||
The most interesting future work on multi-homed devices would focus on adding additional features to gateways.
|
||||
|
||||
Work on the most effective method of allowing a gateway to inform a device behind it that it is worth adding additional MPTCP subflows.
|
||||
|
||||
Work on gateways understanding the Layer 4 concepts of MPTCP and adapting their load balancing algorithms to ensure that multiple subflows of the same MPTCP flow are split appropriately between the available links.
|
||||
|
||||
Work on gateways that understand MPTCP to take a non-MPTCP flow and transparently convert it into a MPTCP flow at the gateway, and back again as it reaches the device behind.
|
||||
|
||||
Work on IPv6 multi-homing to more effectively inform devices behind it of when they have multiple homes.
|
||||
|
||||
TODO: Check, for all of these, whether they should actually be in past work. Particularly the IPv6 multi-homing one.
|
||||
|
@ -2,16 +2,14 @@
|
||||
|
||||
\begin{declaration}
|
||||
|
||||
I hereby declare that except where specific reference is made to the work of
|
||||
others, the contents of this dissertation are original and have not been
|
||||
submitted in whole or in part for consideration for any other degree or
|
||||
qualification in this, or any other university. This dissertation is my own
|
||||
work and contains nothing which is the outcome of work done in collaboration
|
||||
with others, except as specified in the text and Acknowledgements. This
|
||||
dissertation contains fewer than 65,000 words including appendices,
|
||||
bibliography, footnotes, tables and equations and has fewer than 150 figures.
|
||||
I, Jake Hillion of Queens' College, being a candidate for Part II of the Computer Science
|
||||
Tripos, hereby declare that this dissertation and the work described in it are my own work,
|
||||
unaided except as may be specified below, and that the dissertation does not
|
||||
contain material that has already been used to any substantial extent for a
|
||||
comparable purpose. I am content for my dissertation to be made available to the
|
||||
students and staff of the University.
|
||||
|
||||
% Author and date will be inserted automatically from thesis.tex \author \degreedate
|
||||
\vspace{25mm}
|
||||
|
||||
\end{declaration}
|
||||
|
||||
|
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 21 KiB |
263
Evaluation/evaluation.tex
Normal file
@ -0,0 +1,263 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
%*******************************************************************************
|
||||
%****************************** Fourth Chapter *********************************
|
||||
%*******************************************************************************
|
||||
\chapter{Evaluation}
|
||||
|
||||
% **************************** Define Graphics Path **************************
|
||||
\ifpdf
|
||||
\graphicspath{{Evaluation/Figs/Raster/}{Evaluation/Figs/PDF/}{Evaluation/Figs/}}
|
||||
\else
|
||||
\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 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 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 effect of external factors on the tests.
|
||||
|
||||
The tests are performed on a Dell R710 Server with the following specifications:
|
||||
|
||||
\vspace{5mm} \noindent \textbf{CPU(s)} 16 x Intel(R) Xeon(R) CPU X5667 @ 3.07GHz (2 Sockets)
|
||||
\\ \noindent \textbf{Memory} 6 x 2GB DDR3 ECC RDIMMS
|
||||
\\ \noindent \textbf{Kernel} Linux 5.4 LTS
|
||||
|
||||
|
||||
|
||||
\section{Line Graphs}
|
||||
|
||||
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/TIS0-R0-1R1-1R2-1R3-1T10S1-R0-1R1-1R2-1T10S2-R0-1R1-1T10}
|
||||
\caption{No error bars}
|
||||
\label{fig:errorbars-none}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{.3\textwidth}
|
||||
\includegraphics[width=0.9\linewidth]{graphs/IExS0-R0-1R1-1R2-1R3-1T10S1-R0-1R1-1R2-1T10S2-R0-1R1-1T10}
|
||||
\caption{X error bars}
|
||||
\label{fig:errorbars-x}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{.3\textwidth}
|
||||
\includegraphics[width=0.9\linewidth]{graphs/IEyS0-R0-1R1-1R2-1R3-1T10S1-R0-1R1-1R2-1T10S2-R0-1R1-1T10}
|
||||
\caption{Y error bars}
|
||||
\label{fig:errorbars-y}
|
||||
\end{subfigure}
|
||||
\caption{The structure of graphs throughout this section}
|
||||
\label{fig:errorbars}
|
||||
\end{figure}
|
||||
|
||||
In figure \ref{fig:errorbars}, examples are shown of the same graph without any error bars, with error bars on the X axis, and with error bars on the Y axis. Error bars for the X axis are plotted as the range of all of the results, while error bars on the Y axis are plotted as $1.5*\sigma$, where $\sigma$ represents the standard deviation of the results.
|
||||
|
||||
In figure \ref{fig:errorbars-x}, it is shown that the range of the timestamps provided is incredibly tight. For this reason, I will not be including error bars in the X axis on the graphs shown from this point onwards.
|
||||
|
||||
In figure \ref{fig:errorbars-y}, it can be seen that the error bars on the Y axis are far more significant. Thus, error bars will continue to be included in the Y axis.
|
||||
|
||||
To generate these results, a fresh set of VMs (Virtual Machines) are created and the software installed on them. Once this is complete, each test is repeated until the coefficient of variance ($\sigma / \mu$, where $\mu$ is the arithmetic mean and $\sigma$ the standard deviation) is below a desired level, or too many attempts have been completed. The number of attempts taken for each series will be shown in the legend of each graph.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{tikzpicture}[
|
||||
squarednode/.style={rectangle, draw=black!60, fill=red!5, very thick, minimum size=5mm},
|
||||
]
|
||||
|
||||
% Nodes
|
||||
\node[squarednode] at (0,0) (speedtest) {Speed Test Server};
|
||||
\node[squarednode] at (4,0) (remoteportal) {Remote Portal};
|
||||
\node[squarednode] at (8,0) (localportal) {Local Portal};
|
||||
\node[squarednode] at (11,0) (client) {Client};
|
||||
|
||||
% Edges
|
||||
\draw[->] ([yshift=6mm]speedtest.north) -- (speedtest.north);
|
||||
\draw[->] ([yshift=6mm]remoteportal.north) -- (remoteportal.north);
|
||||
\draw[->] ([xshift=-7mm,yshift=6mm]localportal.north) -- ([xshift=-7mm]localportal.north);
|
||||
\draw[->] ([yshift=6mm]localportal.north) -- (localportal.north);
|
||||
\draw[->] ([xshift=7mm,yshift=6mm]localportal.north) -- ([xshift=7mm]localportal.north);
|
||||
\draw[->] ([yshift=6mm]client.north) -- (client.north);
|
||||
|
||||
\draw[-] ([yshift=6mm]speedtest.north) -- ([yshift=6mm]localportal.north);
|
||||
\draw[-] ([xshift=7mm,yshift=6mm]localportal.north) -- ([yshift=6mm]client.north);
|
||||
|
||||
% Edge Label
|
||||
\node at ([xshift=-3.5mm,yshift=9mm]localportal.north) {0 .. N};
|
||||
\end{tikzpicture}
|
||||
|
||||
\caption{The network structure of standard tests}
|
||||
\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 this has no effect on the tests.
|
||||
|
||||
|
||||
|
||||
\section{Success Criteria}
|
||||
|
||||
\subsection{Flow Maintained}
|
||||
|
||||
TODO.
|
||||
|
||||
\subsection{Bidirectional Performance Gains}
|
||||
|
||||
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}
|
||||
\label{fig:example-inbound}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{.49\textwidth}
|
||||
\includegraphics[width=0.9\linewidth]{graphs/OEyS0-R0-2R1-2T10S1-R0-1R1-2T10S2-R0-1R1-1T10}
|
||||
\caption{The outbound graph}
|
||||
\label{fig:example-outbound}
|
||||
\end{subfigure}
|
||||
\caption{The same test performed both inbound and outbound}
|
||||
\label{fig:example-inbound-outbound}
|
||||
\end{figure}
|
||||
|
||||
Figure \ref{fig:example-inbound-outbound} shows two graphs of the same test - one for the inbound performance and one for the outbound. It can be seen that both graphs show the same shape.
|
||||
|
||||
\subsection{IP Spoofing}
|
||||
|
||||
\begin{figure}
|
||||
\begin{minted}{shell-session}
|
||||
#IPv4 Forwarding
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
|
||||
# Route packets from the remote portal address on the client interface via the tunnel
|
||||
ip route flush 12
|
||||
ip route add table 12 to 1.1.1.0/24 via 172.19.152.2 dev nc0
|
||||
ip rule add from 1.1.1.3 iif eth3 table 12 priority 12
|
||||
|
||||
# Route packets to the remote portal address out of the client interface
|
||||
ip route flush 13
|
||||
ip route add table 13 to 1.1.1.3 dev eth3
|
||||
ip rule add to 1.1.1.3 table 13 priority 13
|
||||
\end{minted}
|
||||
\caption{The script necessary for the Local Portal to accept packets from a client with the spoofed IP.}
|
||||
\label{fig:policy-based-routing-script-local-portal}
|
||||
\end{figure}
|
||||
|
||||
This goal was to ensure the Client could use its network interface as if it really had that IP. This is achieved through Policy Based Routing. Example scripts are shown in figure \ref{fig:policy-based-routing-script-local-portal}. Linux also requires the kernel parameter \mintinline{shell-session}{net.ipv4.ip_forward} to be set to 1.
|
||||
|
||||
\subsection{Security}
|
||||
|
||||
TODO.
|
||||
|
||||
\subsection{More Bandwidth over Two Equal Connections}
|
||||
|
||||
TODO.
|
||||
|
||||
|
||||
|
||||
\section{Extended Goals}
|
||||
|
||||
\subsection{More Bandwidth over Unequal Connections}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[height=7cm]{graphs/IEyS0-R0-2R1-2T10S1-R0-1R1-2T10S2-R0-1R1-1T10}
|
||||
\caption{Unequal connections compared against equal of both sides}
|
||||
\label{fig:unequal-connections}
|
||||
\end{figure}
|
||||
|
||||
This is demonstrated by showing that $1x1MB + 1x2MB$ connections can exceed the performance of $2x1MB$ connections. The results for this can be seen in figure \ref{fig:unequal-connections}, compared against $2x2MB$ and $1x2MB$. It can be seen that the uneven connections fall between the two, which is as expected.
|
||||
|
||||
\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}
|
||||
\label{fig:equal-connections-scaling-1MB}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{.49\textwidth}
|
||||
\includegraphics[width=0.9\linewidth]{graphs/IEyS0-R0-2R1-2R2-2R3-2T10S1-R0-2R1-2R2-2T10S2-R0-2R1-2T10}
|
||||
\caption{2MB connections}
|
||||
\label{fig:equal-connections-scaling-2MB}
|
||||
\end{subfigure}
|
||||
\caption{Scaling of equal connections}
|
||||
\label{fig:equal-connections-scaling}
|
||||
\end{figure}
|
||||
|
||||
This criteria is about throughput increasing with the number of equal connections added. It is demonstrated by comparing the throughput of $2x1MB$, $3x1MB$ and $4x1MB$ connections. This can be seen in figure \ref{fig:equal-connections-scaling-1MB}. A further example is provided of $2x2MB$, $3x2MB$ and $4x2MB$ in figure \ref{fig:equal-connections-scaling-2MB}.
|
||||
|
||||
\subsection{Bandwidth Variation}
|
||||
|
||||
TODO.
|
||||
|
||||
\subsection{Connection Loss}
|
||||
|
||||
TODO.
|
||||
|
||||
\subsection{Single Interface Remote Portal}
|
||||
|
||||
\begin{figure}
|
||||
\begin{minted}{shell-session}
|
||||
# IPv4 Forwarding
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
sysctl -w net.ipv4.conf.eth0.proxy_arp=1
|
||||
|
||||
# Deliberately break local routing
|
||||
ip rule add from all table local priority 20
|
||||
ip rule del 0 || true
|
||||
|
||||
# Route packets to the interface but for nc to this host
|
||||
ip rule add to 1.1.1.3 dport 1234 table local priority 9
|
||||
|
||||
# Route packets to the interface but not for nc via the tunnel
|
||||
ip route flush 10
|
||||
ip route add table 10 to 1.1.1.3 via 172.19.152.3 dev nc0
|
||||
ip rule add to 1.1.1.3 table 10 priority 10
|
||||
\end{minted}
|
||||
\caption{The scripts necessary to allow the Remote Portal to only use a single interface.}
|
||||
\label{fig:policy-based-routing-script-remote-portal}
|
||||
\end{figure}
|
||||
|
||||
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}
|
||||
|
||||
Not implemented yet.
|
||||
|
||||
|
||||
|
||||
\section{Stretch Goals}
|
||||
|
||||
\subsection{IPv4/IPv6 Support}
|
||||
|
||||
The project is only tested with IPv4.
|
||||
|
||||
\subsection{UDP Proxy Datagrams}
|
||||
|
||||
TODO
|
||||
|
||||
\subsection{IP Proxy Packets}
|
||||
|
||||
The project only supports TCP flows for carrying the proxied data.
|
||||
|
||||
\section{Performance Evaluation}
|
||||
|
||||
The discussion of success criteria above used slow network connections to test scaling in certain situations. This section will focus on testing how the solution scales, in terms of faster individual connections, and with many more connections. Further, all of the above tests were automated and carried out entirely on virtual hardware. This section will show some 'real-world' data, using a Raspberry Pi 4B and real Internet connections.
|
||||
|
||||
\subsection{Faster Connections Scaling}
|
||||
|
||||
TODO
|
||||
|
||||
\subsection{Number of Connections Scaling}
|
||||
|
||||
TODO
|
||||
|
||||
\subsection{Real World Testing}
|
||||
|
||||
TODO
|
||||
|
74
GraphGeneration/graphgeneration.tex
Normal file
@ -0,0 +1,74 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
% ********************* Thesis Appendix A - Graph Generation **********************
|
||||
\chapter{Graph Generation Script}
|
||||
\label{appendix:graph_generation}
|
||||
|
||||
\begin{minted}[
|
||||
fontsize=\footnotesize,
|
||||
linenos,
|
||||
breaklines,
|
||||
]{python}
|
||||
from itertools import cycle
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def plot_iperf_results(
|
||||
series: Dict[str, StandardTest],
|
||||
title: str = None,
|
||||
direction = 'inbound',
|
||||
error_bars_x=False,
|
||||
error_bars_y=False,
|
||||
filename=None,
|
||||
start_at_zero=True,
|
||||
):
|
||||
if filename in ['png', 'eps']:
|
||||
filename = 'graphs/{}{}{}{}.{}'.format(
|
||||
'I' if direction == 'inbound' else 'O',
|
||||
'Ex' if error_bars_x else '',
|
||||
'Ey' if error_bars_y else '',
|
||||
''.join(['S{}-{}'.format(i,x.name()) for (i, x) in enumerate(series.values())]),
|
||||
filename,
|
||||
)
|
||||
|
||||
series = {
|
||||
k: (directionInbound if direction == 'inbound' else directionOutbound)[v.name()] for (k, v) in series.items()
|
||||
}
|
||||
|
||||
cycol = cycle('brgy')
|
||||
|
||||
fig = plt.figure()
|
||||
axes = fig.add_axes([0,0,1,1])
|
||||
|
||||
if title is not None:
|
||||
axes.set_title(title, pad=20.0 if True in [len(x.test.events) > 0 for x in series.values()] else None)
|
||||
|
||||
axes.set_xlabel('Time (s)')
|
||||
axes.set_ylabel('Throughput (Mbps)')
|
||||
|
||||
for k, v in series.items():
|
||||
data = v.summarise()
|
||||
|
||||
axes.errorbar(
|
||||
data.keys(),
|
||||
[x/1e6 for x in data.values()],
|
||||
xerr=([x[0] for x in v.time_range().values()], [x[1] for x in v.time_range().values()]) if error_bars_x else None,
|
||||
yerr=[x*1.5/1e6 for x in v.standard_deviation().values()] if error_bars_y else None,
|
||||
capsize=3,
|
||||
ecolor='grey',
|
||||
color=next(cycol),
|
||||
label=k,
|
||||
)
|
||||
|
||||
legend = axes.legend()
|
||||
|
||||
if start_at_zero:
|
||||
axes.set_ylim(bottom=0)
|
||||
axes.set_xlim(left=0)
|
||||
|
||||
if False:
|
||||
for k, v in events.items():
|
||||
axes.axvline(k, linestyle='--', color='grey')
|
||||
axes.annotate(v, (k, 1.02), xycoords=axes.get_xaxis_transform(), ha='center')
|
||||
|
||||
if filename is not None:
|
||||
fig.savefig(filename, bbox_extra_artists=(legend,), bbox_inches='tight', pad_inches=0.3)
|
||||
\end{minted}
|
17
Implementation/Samples/congestion.go
Normal file
@ -0,0 +1,17 @@
|
||||
package udp
|
||||
|
||||
import "time"
|
||||
|
||||
type Congestion interface {
|
||||
Sequence() uint32
|
||||
ReceivedPacket(seq uint32)
|
||||
|
||||
ReceivedAck(uint32)
|
||||
NextAck() uint32
|
||||
|
||||
ReceivedNack(uint32)
|
||||
NextNack() uint32
|
||||
|
||||
AwaitEarlyUpdate(keepalive time.Duration) uint32
|
||||
Reset()
|
||||
}
|
11
Implementation/Samples/mac.go
Normal file
@ -0,0 +1,11 @@
|
||||
package proxy
|
||||
|
||||
type MacGenerator interface {
|
||||
CodeLength() int
|
||||
Generate([]byte) []byte
|
||||
}
|
||||
|
||||
type MacVerifier interface {
|
||||
CodeLength() int
|
||||
Verify(data []byte, sum []byte) error
|
||||
}
|
35
Implementation/Samples/wireshark_dissector.lua
Normal file
@ -0,0 +1,35 @@
|
||||
mpbl3p_udp = Proto("mpbl3p_udp", "Multi Path Proxy Custom UDP")
|
||||
|
||||
ack_F = ProtoField.uint32("mpbl3p_udp.ack", "Acknowledgement")
|
||||
nack_F = ProtoField.uint32("mpbl3p_udp.nack", "Negative Acknowledgement")
|
||||
seq_F = ProtoField.uint32("mpbl3p_udp.seq", "Sequence Number")
|
||||
time_F = ProtoField.absolute_time("mpbl3p_udp.time", "Timestamp")
|
||||
proxied_F = ProtoField.bytes("mpbl3p_udp.data", "Proxied Data")
|
||||
|
||||
mpbl3p_udp.fields = { ack_F, nack_F, seq_F, time_F, proxied_F }
|
||||
|
||||
function mpbl3p_udp.dissector(buffer, pinfo, tree)
|
||||
if buffer:len() < 20 then
|
||||
return
|
||||
end
|
||||
|
||||
pinfo.cols.protocol = "MPBL3P_UDP"
|
||||
|
||||
local ack = buffer(0, 4):le_uint()
|
||||
local nack = buffer(4, 4):le_uint()
|
||||
local seq = buffer(8, 4):le_uint()
|
||||
|
||||
local unix_time = buffer(buffer:len() - 8, 8):le_uint64()
|
||||
|
||||
local subtree = tree:add(mpbl3p_udp, buffer(), "Multi Path Proxy Header, SEQ: " .. seq .. " ACK: " .. ack .. " NACK: " .. nack)
|
||||
|
||||
subtree:add(ack_F, ack)
|
||||
subtree:add(nack_F, nack)
|
||||
subtree:add(seq_F, seq)
|
||||
subtree:add(time_F, NSTime.new(unix_time:tonumber()))
|
||||
if buffer:len() > 20 then
|
||||
subtree:add(proxied_F, buffer(12, buffer:len() - 12 - 8))
|
||||
end
|
||||
end
|
||||
|
||||
DissectorTable.get("udp.port"):add(1234, mpbl3p_udp)
|
233
Implementation/implementation.tex
Normal file
@ -0,0 +1,233 @@
|
||||
%*******************************************************************************
|
||||
%****************************** Third Chapter **********************************
|
||||
%*******************************************************************************
|
||||
\chapter{Implementation}
|
||||
|
||||
% **************************** Define Graphics Path **************************
|
||||
\ifpdf
|
||||
\graphicspath{{Implementation/Figs/Raster/}{Implementation/Figs/PDF/}{Implementation/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Implementation/Figs/Vector/}{Implementation/Figs/}}
|
||||
\fi
|
||||
|
||||
|
||||
% --------------------------------- TCP ------------------------------------ %
|
||||
\section{TCP}
|
||||
|
||||
The base implementation is built on TCP. TCP provides congestion control and flow control, which are all that is necessary for this form of greedy load balancing, and therefore solves almost all of the issues given here. To implement such a solution on TCP, the only difference that needs to be made is punctuating the connection. As TCP provides a byte stream and not distinct datagrams, a distinction must be made between the packets. One option is to use a punctuating character, though this would reduce the character set of the packets, and therefore require escape sequences in the packets. The second option is to read the length of the packets and then read the correct amount of data from the stream.
|
||||
|
||||
My implementation uses the second option, of punctuating the stream by providing the length of each packet. Although the IP packets do provide their length internally, I kept the TCP flow as flexible as possible. That is, it is kept as simple as possible, so that it doesn't have to be updated for transmitting any other sort of packets. Therefore, the TCP flow is punctuated by sending the length of the packet before the packet itself within the stream. Then, this number of bytes can be read.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{bytefield}[bitwidth=0.99em]{32}
|
||||
\bitheader{0-31} \\
|
||||
\begin{rightwordgroup}{TCP\\Header}
|
||||
\bitbox{16}{Source Port} & \bitbox{16}{Destination Port} \\
|
||||
\wordbox{1}{Sequence Number} \\
|
||||
\wordbox{1}{Acknowledgment Number} \\
|
||||
\bytefieldsetup{bitheight=5em}\bitbox{4}{Data offset} & \bitbox{3}{\begin{turn}{-60}Reserved\end{turn}} & \bitbox{1}{N S} & \bitbox{1}{C R W} & \bitbox{1}{E C E} & \bitbox{1}{U R G} & \bitbox{1}{A C K} & \bitbox{1}{P S H} & \bitbox{1}{R S T} & \bitbox{1}{S Y N} & \bitbox{1}{F I N} & \bitbox{16}{Window Size} \\
|
||||
\bitbox{16}{Checksum} & \bitbox{16}{Urgent Pointer}
|
||||
\end{rightwordgroup} \\
|
||||
\wordbox[tlr]{1}{Proxied IP packet} \\
|
||||
\skippedwords \\
|
||||
\wordbox[blr]{1}{} \\
|
||||
\begin{rightwordgroup}{Security\\Footer}
|
||||
\bitbox{32}{Unix Timestamp} \\
|
||||
\wordbox[tlr]{1}{Message Authentication Code} \\
|
||||
\wordbox[blr]{1}{$\cdots$}
|
||||
\end{rightwordgroup}
|
||||
\end{bytefield}
|
||||
\caption{TCP packet structure}
|
||||
\label{fig:tcp-packet-structure}
|
||||
\end{figure}
|
||||
|
||||
% --------------------------------- UDP ------------------------------------ %
|
||||
\section{UDP}
|
||||
|
||||
To increase the performance of the system, I implemented a UDP method of tunnelling packets, available alongside the TCP method discussed earlier. Using UDP datagrams instead of a TCP flow is a two front approach to increasing performance. Firstly, it removes the issue of head of line blocking, as the protocol does not resend packets when they are not received. Secondly, the datagram design can include less per packet overhead in the form of a header, increasing the efficiency of transmitting packets.
|
||||
|
||||
The goal was to create a UDP packet structure that allows for congestion control (and implicit flow control), without the other benefits that TCP provides. This is as the other features of TCP are unnecessary for this project, due to being covered by protocols above Layer 3, which function regardless of the tunnelling.
|
||||
|
||||
\subsection{Packet Structure}
|
||||
|
||||
The packet structure was decided to allow for effective congestion control and nothing else. This is achieved with a simple 3 part, 12 byte header (shown in figure \ref{fig:udp-packet-structure}). Similarly to TCP, each packet contains an acknowledgement number (ACK) and a sequence number (SEQ). These serve the same purpose as in TCP: providing a method for a congestion controller to know which packets have been received by their partner. However, they are implemented slightly differently. TCP sequence numbers are based on bytes, and as such the sequence number of a packet is the sequence number of the first byte that it contains. As this protocol is designed for transmitting packets, losing part of a packet does not make sense. They will also never be split, as this protocol does not support partial transmission, and as such are atomic. This means that the sequence number can safely represent an individual packet, as opposed to a byte.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{bytefield}[bitwidth=0.99em]{32}
|
||||
\bitheader{0-31} \\
|
||||
\begin{rightwordgroup}{UDP\\Header}
|
||||
\bitbox{16}{Source port} & \bitbox{16}{Destination port} \\
|
||||
\bitbox{16}{Length} & \bitbox{16}{Checksum}
|
||||
\end{rightwordgroup} \\
|
||||
\begin{rightwordgroup}{CC\\Header}
|
||||
\bitbox{32}{Acknowledgement number} \\
|
||||
\bitbox{32}{Negative acknowledgement number} \\
|
||||
\bitbox{32}{Sequence number}
|
||||
\end{rightwordgroup} \\
|
||||
\wordbox[tlr]{1}{Proxied IP packet} \\
|
||||
\skippedwords \\
|
||||
\wordbox[blr]{1}{} \\
|
||||
\begin{rightwordgroup}{Security\\Footer}
|
||||
\bitbox{32}{Unix timestamp} \\
|
||||
\wordbox[tlr]{1}{Message authentication code} \\
|
||||
\wordbox[blr]{1}{$\cdots$}
|
||||
\end{rightwordgroup}
|
||||
\end{bytefield}
|
||||
\caption{UDP packet structure}
|
||||
\label{fig:udp-packet-structure}
|
||||
\end{figure}
|
||||
|
||||
In addition to these two fields, a further Negative Acknowledgement (NACK) field is required. Due to TCP's promise of reliable transmission, negative acknowledgements can never occur. Either the sender must resend the packet in question, or the flow is terminated. In my protocol, however, it is necessary that the receiver has a method to provide a discontinuous stream of acknowledgements. If this was attempted without a separate NACK number, it would be required that each ACK number is sent and received individually. This decreases the efficiency and correctness of ACKs, both in terms of missing packets, and having to send at least one packet for every packet received.
|
||||
|
||||
The benefit of a NACK is demonstrated in figure \ref{fig:sequence-ack-nack-comparison}. Figure \ref{fig:sequence-ack-continuous} shows a series of ACKs for a perfect set of sequence numbers. This is rather pointless, as there is no point to ACKing packets if you never intend to lose any, but is a situation that can occur for large portions of a flow, given good congestion control and reliable networking. Figure \ref{fig:sequence-ack-discontinuous} shows the same ACK system for a stream of sequence numbers with one missing. It can be seen that the sender and receiver reach an impasse: the receiver cannot increase its ACK number, as it has not received packet 5, and the sender cannot send more packets, as its window is full. The only move is for the receiver to increase its ACK number and rely on the sender realising that it took too long to acknowledge the missing packet, though this is unreliable at best.
|
||||
|
||||
Figure \ref{fig:sequence-ack-nack-discontinuous} shows how this same situation can be responded to with a NACK field. After the receiver has concluded that the intermediate packet(s) were lost in transit (a function of RTT, to be discussed further later), it updates the NACK field to the highest lost packet, allowing the ACK field to be increased from one after the lost packet. This solution resolves the deadlock of not being able to increase the ACK number without requiring reliable delivery.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{subfigure}{0.3\textwidth}
|
||||
\begin{tabular}{|c|c|}
|
||||
Sequence & ACK \\
|
||||
1 & 0 \\
|
||||
2 & 0 \\
|
||||
3 & 2 \\
|
||||
4 & 2 \\
|
||||
5 & 2 \\
|
||||
6 & 5 \\
|
||||
6 & 6
|
||||
\end{tabular}
|
||||
\caption{ACKs responding to in order sequence numbers}
|
||||
\label{fig:sequence-ack-continuous}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}{0.3\textwidth}
|
||||
\begin{tabular}{|c|c|}
|
||||
Sequence & ACK \\
|
||||
1 & 0 \\
|
||||
2 & 0 \\
|
||||
3 & 2 \\
|
||||
5 & 3 \\
|
||||
6 & 3 \\
|
||||
7 & 3 \\
|
||||
7 & 3
|
||||
\end{tabular}
|
||||
\caption{ACKs responding to a missing sequence number}
|
||||
\label{fig:sequence-ack-discontinuous}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}{0.3\textwidth}
|
||||
\begin{tabular}{|c|c|c|}
|
||||
Sequence & ACK & NACK \\
|
||||
1 & 0 & 0 \\
|
||||
2 & 0 & 0 \\
|
||||
3 & 2 & 0 \\
|
||||
5 & 2 & 0 \\
|
||||
6 & 2 & 0 \\
|
||||
7 & 6 & 4 \\
|
||||
7 & 7 & 4
|
||||
\end{tabular}
|
||||
\caption{ACKs and NACKs responding to a missing sequence number}
|
||||
\label{fig:sequence-ack-nack-discontinuous}
|
||||
\end{subfigure}
|
||||
\caption{ACKs and NACKs responding to sequence numbers}
|
||||
\label{fig:sequence-ack-nack-comparison}
|
||||
\end{figure}
|
||||
|
||||
In implementing the UDP based protocol, I spent some time reading packet data in Wireshark\footnote{\url{https://wireshark.org}}. After attempting this with simply the RAW byte data, I wrote a dissector for Wireshark for my protocol. This can be seen in figure \ref{fig:udp-wireshark-dissector}. This is a Lua script that requests Wireshark use the given dissector function for UDP traffic on port 1234 (a port chosen for testing). This extracts the three congestion control numbers from the UDP datagram, showing them in a far easier to read format and allowing more efficient debugging of congestion control protocols.
|
||||
|
||||
\begin{figure}
|
||||
\inputminted{go}{Implementation/Samples/wireshark_dissector.lua}
|
||||
\caption{Wireshark dissector}
|
||||
\label{fig:udp-wireshark-dissector}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Congestion Control}
|
||||
|
||||
To allow for flexibility in congestion control, I started by building an interface (shown in figure \ref{fig:congestion-control-interface}) for congestion controllers. The aim of the interface is to provide the controller with every update that could be used for congestion control, while also providing it every opportunity to set an ACK or NACK on a packet.
|
||||
|
||||
\begin{figure}
|
||||
\inputminted{go}{Implementation/Samples/congestion.go}
|
||||
\caption{Congestion controller interface}
|
||||
\label{fig:congestion-control-interface}
|
||||
\end{figure}
|
||||
|
||||
A benefit of the chosen language (Go\footnote{\url{https://golang.org}} is the powerful management of threads of execution, or Goroutines. This is demonstrated in the interface, particularly the method \mintinline{go}{Sequence() uint32}. This method expects a congestion controller to block until it can provide the packet with a sequence number for dispatch. Given that the design runs each producer and consumer in a separate Goroutine, this is an effective way to synchronise the packet sending with the congestion controller, and should be effective for any potential method of congestion control.
|
||||
|
||||
\subsubsection{New Reno}
|
||||
|
||||
The first congestion control protocol I implemented is based on TCP New Reno. It is a well understood and powerful congestion control protocol. The pseudocode for the two most interesting functions are shown in figure \ref{fig:udp-congestion-newreno-pseudocode}.
|
||||
|
||||
\begin{figure}
|
||||
\begin{minted}{c}
|
||||
def findAck(start):
|
||||
ack = start
|
||||
while acksToSend.Min() == ack+1:
|
||||
ack = acksToSend.PopMin()
|
||||
return ack
|
||||
|
||||
def updateAckNack(lastAck, lastNack):
|
||||
nack = lastNack
|
||||
ack = findAck(lastAck, acksToSend)
|
||||
if ack == lastAck:
|
||||
if acksToSend.Min().IsDelayedMoreThan(NackTimeout):
|
||||
nack = acksToSend.Min() - 1
|
||||
ack = findAck(acksToSend.PopMin(), acksToSend)
|
||||
return ack, nack
|
||||
|
||||
def ReceivedNack(nack):
|
||||
if !nack.IsFresh():
|
||||
return
|
||||
windowSize /= 2
|
||||
|
||||
def ReceivedAck(ack):
|
||||
if !ack.IsFresh():
|
||||
return
|
||||
if slowStart:
|
||||
windowSize += numberAcked
|
||||
else:
|
||||
windowCount += numberAcked
|
||||
if windowCount >= windowSize:
|
||||
windowSize += 1
|
||||
windowCount -= windowSize
|
||||
\end{minted}
|
||||
\caption{UDP New Reno pseudocode}
|
||||
\label{fig:udp-congestion-newreno-pseudocode}
|
||||
\end{figure}
|
||||
|
||||
My implementation of New Reno functions differently to the TCP version, given that it responds with NACKs instead of retransmits. In TCP, updating the ACK is similar - the ACK sent is the highest ACK available that remains a continuous stream. The interesting part is visible when the controller decides to send a NACK. Whenever a hole is seen in the packets waiting to be acknowledged, the delay of the minimum packet waiting to be sent is checked. If the packet has been waiting for more than a multiple of the round trip time, chosen presently to be $3*RTT$, the NACK is updated to one below the next packet that can be sent, indicating that a packet has been missed. The ACK can then be incremented from the next available.
|
||||
|
||||
A point of interest is the \mintinline{go}{acksToSend} data structure. It can be seen that three methods are required: \mintinline{go}{Min()}, \mintinline{go}{PopMin()} and \mintinline{go}{Insert()} (in a section of code not shown in the pseudocode). A data structure that implements these methods particularly efficiently is the binary heap, providing Min in $O(1)$ time, with Insert and PopMin in $O(log n)$ time. Therefore, I implemented a binary heap to store the ACKs to send.
|
||||
|
||||
% ------------------------------- Security --------------------------------- %
|
||||
\section{Security}
|
||||
|
||||
% For the security implementation, I paid careful attention to the work of Wireguard (Donenfeld, “WireGuard.” \cite{donenfeld_wireguard_2017}). Wireguard is a modern, well respected method of securely transferring Layer 3 packets across the Internet.
|
||||
|
||||
% However, as Wireguard is a VPN, it provides certain security benefits that are not within the remit of my threat model (section \ref{section:threat-model}). The primary example of this is privacy. When Wireguard, and most VPNs, send a packet, they first encrypt the contents such that the contents of the datagram are only visible to the intended recipient. For this project, encryption will not be necessary, as that would provide privacy above using the modem without this solution. If a user wishes to also have the benefits of an encrypted Internet connection, the transparency of this solution allows existing VPNs to run underneath and provide that. This follows the philosophy of do one thing and do it well.
|
||||
|
||||
% The security in this solution will be achieved by using public and private key-pairs to perform a key exchange at the beginning of connections, and then using that key to produce a message authentication code for each packet sent across the connection. To prevent replay of earlier messages, a timestamp will be included within the authenticated section of the message. This timestamp can be used to discard messages sent a certain time earlier than received, reducing the usefulness of replay attacks.
|
||||
|
||||
The security in this solution is achieved by providing a set of interfaces for potential cryptographic systems to implement. This can be seen in figure \ref{fig:message-authenticator-interface}. As with all interfaces, the goal here was to create a flexible but minimal interface.
|
||||
|
||||
\begin{figure}
|
||||
\inputminted{go}{Implementation/Samples/mac.go}
|
||||
\caption{Message authenticator interface}
|
||||
\label{fig:message-authenticator-interface}
|
||||
\end{figure}
|
||||
|
||||
As far as is possible, the security of the application relies on external libraries. Although an interesting exercise, implementing security algorithms directly from papers is far more likely to result in errors and thus security flaws. Due to this, I will be using trusted and open source libraries for the scheme I have chosen.
|
||||
|
||||
\subsection{Symmetric Key Cryptography}
|
||||
|
||||
When providing integrity and authentication for a message, there are two main choices: a Message Authentication Code (MAC) or signing.
|
||||
|
||||
TODO: Finish this section.
|
||||
|
||||
\subsubsection{BLAKE2s}
|
||||
|
||||
The shared key algorithm I chose to implement is BLAKE2s\cite{hutchison_blake2_2013}. It is extremely fast (comparable to MD5) while remaining cryptographically secure. Further to this, BLAKE2s is available in the Go crypto library\footnote{\url{https://github.com/golang/crypto}}, which is a trusted and open source implementation.
|
||||
|
||||
|
||||
|
41
Introduction/introduction.tex
Normal file
@ -0,0 +1,41 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
%*******************************************************************************
|
||||
%*********************************** First Chapter *****************************
|
||||
%*******************************************************************************
|
||||
|
||||
\chapter{Introduction} %Title of the First Chapter
|
||||
|
||||
\ifpdf
|
||||
\graphicspath{{Introduction/Figs/Raster/}{Introduction/Figs/PDF/}{Introduction/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Introduction/Figs/Vector/}{Introduction/Figs/}}
|
||||
\fi
|
||||
|
||||
\section{Motivation}
|
||||
|
||||
Most UK residential broadband speeds receive broadband speeds advertised at between 30Mbps and 100Mbps download (Ofcom 2020, \cite{ofcom_performance_2020}). However, it is often possible to have multiple low bandwidth connections installed. More generally, a wider variety of Internet connections for fixed locations are becoming available with time. These include: DSL, Fibre To The Premises, 4G, 5G, Wireless ISPs such as LARIAT and Low Earth Orbit ISPs such as Starlink.
|
||||
|
||||
\section{Existing Work}
|
||||
|
||||
\subsection{MultiPath TCP}
|
||||
|
||||
MultiPath TCP (Wischik et al. 2011, \cite{wischik_design_2011}) is an extension to the regular Transmission Control Protocol, allowing the creation of subflows. MultiPath TCP was designed with two purposes: increasing resiliency and throughput for multi-homed mobile devices, and providing multi-homed servers with better control over balancing flows between their interfaces.
|
||||
|
||||
The first reason that MPTCP does not satisfy the motivation for this project is temporal. MPTCP is most effective at creating flows when the device has distinct interfaces or IP addresses. In the case of an IPv4 home connection, it is often the case that a single IPv4 address is provided to the home. This leads to the use of NAT for IPv4 addresses behind the router. If an MPTCP capable device lies behind a NAT router which has two external IPv4 addresses, the device itself will have no knowledge of this.
|
||||
|
||||
TODO: IPv6 autoconf wrt. multihoming
|
||||
|
||||
Further, it is important to remember legacy devices. Many legacy devices will never support IPv6, and certainly will never support MPTCP. Though it is possible that these devices will not require the performance benefits available from multiple Internet connections, it is likely that they would particularly benefit from a more reliable connection. Being able to apply speed benefits to an entire network without control over every device on it is a significant benefit to the solution provided in this dissertation.
|
||||
|
||||
The second reason that MPTCP may not provide the change to the Internet that was once hoped is the UDP based protocols that are coming into existence. Although MPTCP is now making its way into the Linux kernel, many services are switching to lighter UDP protocols such as QUIC. The most interesting example of this is HTTP/3, which was previously known as HTTP over QUIC. This shift to application controlled network connections which do not contain unnecessary overhead for each specific application seems to be the direction that the Internet is going in, but suggests that it will be a very long time before even modern applications can benefit from multipathing.
|
||||
|
||||
TODO: Find a study on how many of the connections on the Internet are TCP or UDP, particularly over time
|
||||
|
||||
\section{Aims}
|
||||
|
||||
This project aimed to provide a method of combining a variety of Internet connections, such as the situations listed above.
|
||||
|
||||
When combining Internet connections, there are three main measures that one can prioritise: throughput, resilience and latency. This project aimed to provide throughput and resilience at the cost of latency.
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 11 KiB |
8
OutboundGraphs/outboundgraphs.tex
Normal file
@ -0,0 +1,8 @@
|
||||
%!TEX root = ../thesis.tex
|
||||
% ********************** Thesis Appendix B - Outbound Graphs *************************
|
||||
|
||||
\chapter{Outbound Graphs}
|
||||
\label{appendix:outbound-graphs}
|
||||
|
||||
The graphs shown in the evaluation section are Inbound to the Client (unless otherwise specified).
|
||||
This appendix contains the same tests but Outbound from the client.
|
@ -1016,8 +1016,7 @@ wish to left align your text}
|
||||
\chapter*{\centering \Large \@declarationtitle}
|
||||
\thispagestyle{empty}
|
||||
}{
|
||||
\flushright
|
||||
\@author{}\\
|
||||
\noindent\@author{}\\
|
||||
\@degreedate{}
|
||||
\vfill
|
||||
}
|
||||
@ -1037,6 +1036,32 @@ wish to left align your text}
|
||||
|
||||
|
||||
|
||||
% ********************************** Proforma ***********************************
|
||||
% The acknowledgements environment puts a large, bold, centered
|
||||
% "Proforma" label at the top of the page.
|
||||
|
||||
\newenvironment{proforma}{
|
||||
\cleardoublepage
|
||||
\setsinglecolumn
|
||||
\chapter*{\centering \Large Proforma}
|
||||
\thispagestyle{empty}
|
||||
}
|
||||
|
||||
|
||||
|
||||
% ********************************** Proposal ***********************************
|
||||
% The acknowledgements environment puts a large, bold, centered
|
||||
% "Project Proposal" label at the top of the page.
|
||||
|
||||
\newenvironment{proposal}{
|
||||
\cleardoublepage
|
||||
\setsinglecolumn
|
||||
\chapter*{\centering \Large Project Proposal}
|
||||
\addcontentsline{toc}{chapter}{Project Proposal}
|
||||
\thispagestyle{empty}
|
||||
}
|
||||
|
||||
|
||||
% ******************************* Nomenclature *********************************
|
||||
\RequirePackage[intoc]{nomencl}
|
||||
\makenomenclature
|
||||
|
@ -47,7 +47,14 @@
|
||||
% ************************* Algorithms and Pseudocode **************************
|
||||
|
||||
%\usepackage{algpseudocode}
|
||||
\usepackage{minted}
|
||||
\usepackage{listings}
|
||||
|
||||
\setminted{
|
||||
fontsize=\footnotesize,
|
||||
linenos,
|
||||
breaklines,
|
||||
}
|
||||
|
||||
% ********************Captions and Hyperreferencing / URL **********************
|
||||
|
||||
@ -73,6 +80,13 @@
|
||||
% This is for people stuck with older versions of texlive
|
||||
%\usepackage{sty/caption/subcaption}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{pdfpages}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{bytefield}
|
||||
\usepackage{rotating}
|
||||
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{positioning}
|
||||
|
||||
% ********************************** Tables ************************************
|
||||
\usepackage{booktabs} % For professional looking tables
|
||||
@ -80,7 +94,7 @@
|
||||
|
||||
%\usepackage{multicol}
|
||||
%\usepackage{longtable}
|
||||
%\usepackage{tabularx}
|
||||
\usepackage{tabularx}
|
||||
|
||||
|
||||
% *********************************** SI Units *********************************
|
||||
@ -123,7 +137,7 @@
|
||||
\fi
|
||||
|
||||
% changes the default name `Bibliography` -> `References'
|
||||
\renewcommand{\bibname}{References}
|
||||
%\renewcommand{\bibname}{References}
|
||||
|
||||
|
||||
% ******************************************************************************
|
||||
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 KiB |
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 153 KiB |
0
Chapter2/Figs/Vector/minion.eps → Preparation/Figs/Vector/minion.eps
Executable file → Normal file
84
Preparation/preparation.tex
Normal file
@ -0,0 +1,84 @@
|
||||
%*******************************************************************************
|
||||
%****************************** Second Chapter *********************************
|
||||
%*******************************************************************************
|
||||
|
||||
\chapter{Preparation}
|
||||
|
||||
\ifpdf
|
||||
\graphicspath{{Preparation/Figs/Raster/}{Preparation/Figs/PDF/}{Preparation/Figs/}}
|
||||
\else
|
||||
\graphicspath{{Preparation/Figs/Vector/}{Preparation/Figs/}}
|
||||
\fi
|
||||
|
||||
\section{Threat Model}
|
||||
\label{section:threat-model}
|
||||
|
||||
Proxying a network connection via a Remote Portal creates an expanded set of security threats than connecting directly to the Internet via a modem. In this section, I will discuss my analysis of these threats, in both isolation, and compared to the case of connecting directly.
|
||||
|
||||
The first focus of this analysis is the transparent security. That is, if the Local Portal is treated as a modem, what security would normally be expected? And for servers communicating with the Remote Portal, what guarantees can they expect of the packets sent and received?
|
||||
|
||||
The second focus is the direct interaction between the Local Portal and the Remote Portal. Questions like, does having this system make it easier for someone to perform a Denial of Service attack on the principal?
|
||||
|
||||
These security problems will be considered in the context of the success criteria: provide security no worse than not using this solution at all. That is, the security should be identical or stronger than the threats in the first case, and provide no additional vectors of attack in the second.
|
||||
|
||||
\subsection{Transparent Security}
|
||||
|
||||
A convenient factor of the Internet being an interconnected set of smaller networks is that there are very few guarantees of security. At layer 3, none of anonymity, integrity, privacy or freshness are provided once the packet leaves private ranges, so it is up to the application to ensure its own security on top of this lack of guarantees. For the purposes of this software, this is very useful: if there are no guarantees to maintain, applications can be expected to act correctly regardless of how easy it is for these cases to occur.
|
||||
|
||||
Therefore, to maintain the same level of security for applications, this project can simply guarantee that the packets which leave the Remote Portal are the same as those that came in. By doing this, all of the security implemented above Layer 3 will be maintained. This means that whether a user is accessing insecure websites over HTTP, running a corporate VPN connection or sending encrypted emails, the security of these applications will be unaltered.
|
||||
|
||||
\subsection{Portal to Portal Communication}
|
||||
|
||||
\subsubsection{Cost}
|
||||
|
||||
Many Internet connections have caps or cost for additional bandwidth. In a standard network, the control of your cap is physical, in that, if someone wished to increase the load, they would have to physically connect to the modem.
|
||||
|
||||
Due to this, it is important that care is taken with regards to cost. The difference is that rather than needing physical access to send data through your connection, all one needs is an Internet connection. A conceivable threat is for someone to send packets to your Remote Portal from their own connection, causing the Portal to forward these packets, and thus using your limited or costly bandwidth.
|
||||
|
||||
\subsubsection{Denial of Service}
|
||||
\label{subsubsection:threats-denial-of-service}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{subfigure}{.49\textwidth}
|
||||
\begin{tabularx}{\textwidth}{ | l l }
|
||||
Downlink Capacity & Percentage of Packets \\
|
||||
25 Mbps & 5\% \\
|
||||
25 Mbps & 5\% \\
|
||||
25 Mbps & 5\% \\
|
||||
(BAD) 425 Mbps & 85\%
|
||||
\end{tabularx}
|
||||
\caption{A bad actor with a fast connection taking a percentage of packets.}
|
||||
\label{fig:fast-bad-actor-packet-loss}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{.49\textwidth}
|
||||
\begin{tabularx}{\textwidth}{ | l l | }
|
||||
Downlink Capacity & Percentage of Packets \\
|
||||
25 Mbps & 25\% \\
|
||||
25 Mbps & 25\% \\
|
||||
25 Mbps & 25\% \\
|
||||
(BAD) 25 Mbps & 25\%
|
||||
\end{tabularx}
|
||||
\caption{A bad actor with an equally slow connection to you taking a percentage of packets.}
|
||||
\label{fig:slow-bad-actor-packet-loss}
|
||||
\end{subfigure}
|
||||
\caption{Bad actors taking a percentage of packets based on their network speed.}
|
||||
\label{fig:bad-actor-packet-loss}
|
||||
\end{figure}
|
||||
|
||||
If a malicious actor can fool the Remote Portal into sending them a portion of your packets, they are immediately performing an effective Denial of Service on any tunnelled flows relying on loss based congestion control. In figure \ref{fig:fast-bad-actor-packet-loss}, it can be seen that a bad actor, with a significantly faster connection than you, can cause huge packet loss if the Remote Portal would accept them as a valid Local Portal connection.
|
||||
|
||||
\begin{figure}
|
||||
\begin{equation}
|
||||
Throughput = \sqrt{\frac{3}{2}}\frac{1}{RTT\sqrt{p}}
|
||||
\end{equation}
|
||||
\caption{TCP Throughput Equation (New Reno)}
|
||||
\label{fig:tcp-throughput}
|
||||
\end{figure}
|
||||
|
||||
However, of much more relevance is \ref{fig:slow-bad-actor-packet-loss}. Given the TCP throughput equation, shown in figure \ref{fig:tcp-throughput}, there is an inverse relation between packet loss and throughput of any TCP connections. Assuming a Round Trip Time of $20ms$ and Maximum Segment Size of $1460$, packet loss of $25\%$ limits the maximum TCP throughput to approximately $1.17Mbps$. In fact, due to this relation, a packet loss of even $1\%$ leads to a maximum throughput of approximately $5.84Mbps$. This means that even a small packet loss can have a drastic effect on the performance of the connection as a whole, and thus makes Remote Portals an effective target for Denial of Service attacks. Care must be taken that all Local Portal connections are from the intended subject.
|
||||
|
||||
\subsection{Privacy}
|
||||
|
||||
Though the packets leaving a modem have no reasonable expectation of privacy, having the packets enter the Internet at two points does increase this vector. For example, if a malicious actor convinces the Remote Portal that they are a valid connection from the Local Portal, a portion of packets will be sent to them. However, as a fortunate side effect, this method to attempt sniffing would cause a significant Denial of Service to any congestion controlled links based on packet loss, due to the amount of packet loss caused. Therefore, as long as it is ensured that each packet is not sent to multiple places, privacy should be maintained at a similar level to simple Internet access.
|
||||
|
7
Proforma/proforma.tex
Normal file
@ -0,0 +1,7 @@
|
||||
% ************************** Thesis Proforma **************************
|
||||
|
||||
\begin{proforma}
|
||||
|
||||
TODO
|
||||
|
||||
\end{proforma}
|
BIN
Proposal/project-proposal.pdf
Normal file
6
Proposal/proposal.tex
Normal file
@ -0,0 +1,6 @@
|
||||
% ************************** Proposal **************************
|
||||
|
||||
\begin{proposal}
|
||||
\includepdf[pages=-]{Proposal/project-proposal.pdf}
|
||||
\end{proposal}
|
||||
|
@ -1,390 +1,129 @@
|
||||
% ------------------------------------------------------------------------
|
||||
% SAMPLE BIBLIOGRAPHY FILE
|
||||
% ------------------------------------------------------------------------
|
||||
@misc{cve-2008-1368,
|
||||
key = {CVE-2008-1368},
|
||||
title = {Publication quality tables in \LaTeX*},
|
||||
howpublished = {},
|
||||
institution = {NIST},
|
||||
day = 17,
|
||||
month = {March},
|
||||
year = 2008,
|
||||
note = {[online] \url{http://nvd.nist.gov/nvd.cfm?cvename=CVE-2008-1368}},
|
||||
url = {http://nvd.nist.gov/nvd.cfm?cvename=CVE-2008-1368}
|
||||
}
|
||||
|
||||
@MISC{prime-number-theorem,
|
||||
author = "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin",
|
||||
note = "A strong form of the prime number theorem, 19th century" }
|
||||
|
||||
% ------------------------------------------------------------------------
|
||||
|
||||
@BOOK{texbook,
|
||||
author = "Donald E. Knuth",
|
||||
title= "The {{\TeX}book}",
|
||||
publisher = "Addison-Wesley",
|
||||
year = 1984 }
|
||||
|
||||
@BOOK{latex,
|
||||
author = "Leslie Lamport",
|
||||
title = "{\LaTeX:} {A} Document Preparation System",
|
||||
publisher = "Addison-Wesley",
|
||||
year = 1986 }
|
||||
|
||||
% ------------------------------------------------------------------------
|
||||
@article{Ancey1996,
|
||||
author = {Ancey, Christophe and Coussot, Philippe and Evesque, Pierre},
|
||||
journal = {Mechanics of Cohesive-frictional Materials},
|
||||
number = {4},
|
||||
pages = {385--403},
|
||||
title = {Examination of the possibility of a fluid-mechanics treatment of dense granular flows},
|
||||
url = {http://doi.wiley.com/10.1002/(SICI)1099-1484(199610)1:4<385::AID-CFM20>3.0.CO;2-0},
|
||||
volume = {1},
|
||||
year = {1996}
|
||||
}
|
||||
|
||||
@BOOK{RR73,
|
||||
author={H. Radjavi and P. Rosenthal},
|
||||
title={Invariant {Subspaces}},
|
||||
publisher={Springer-Verlag},
|
||||
address={New York},
|
||||
year={1973},
|
||||
}
|
||||
|
||||
@BOOK{Aup91,
|
||||
author={B. Aupetit},
|
||||
title={A {Primer} on {Spectral} {Theory}},
|
||||
publisher={Springer-Verlag},
|
||||
address={New York},
|
||||
year={1991},
|
||||
}
|
||||
|
||||
@BOOK{Dou72,
|
||||
author={R. G. Douglas},
|
||||
title={Banach {Algebra} {Techniques} in {Operator} {Theory}},
|
||||
publisher={Academic Press},
|
||||
address={New York},
|
||||
year={1972},
|
||||
}
|
||||
|
||||
@BOOK{Hal82,
|
||||
author={P. R. Halmos},
|
||||
title={A {Hilbert} {Space} {Problem} {Book}},
|
||||
edition={Second},
|
||||
publisher={Springer-Verlag},
|
||||
address={New York},
|
||||
year={1982},
|
||||
}
|
||||
|
||||
@BOOK{Rud73,
|
||||
author={W. Rudin},
|
||||
title={Functional {Analysis}},
|
||||
publisher={McGraw-Hill},
|
||||
address={New York},
|
||||
year={1973},
|
||||
}
|
||||
|
||||
@BOOK{Con90,
|
||||
author={J. B. Conway},
|
||||
title={A {Course} in {Functional} {Analysis}},
|
||||
edition={Second},
|
||||
publisher={Springer-Verlag},
|
||||
address={New York},
|
||||
year={1990},
|
||||
}
|
||||
|
||||
@BOOK{Con78,
|
||||
author={J. B. Conway},
|
||||
title={Functions of {One} {Complex} {Variable}},
|
||||
publisher={Springer-Verlag},
|
||||
address={New York},
|
||||
year={1978},
|
||||
}
|
||||
|
||||
@BOOK{KR83,
|
||||
author={R. V. Kadison and J. R. Ringrose},
|
||||
title={Fundamentals of the {Theory} of {Operator} {Algebras},
|
||||
{Part} {I}},
|
||||
publisher={Academic Press},
|
||||
address={New York},
|
||||
year={1983},
|
||||
}
|
||||
|
||||
@BOOK{KR86,
|
||||
author={R. V. Kadison and J. R. Ringrose},
|
||||
title={Fundamentals of the {Theory} of {Operator} {Algebras},
|
||||
{Part} {II}},
|
||||
publisher={Academic Press},
|
||||
address={New York},
|
||||
year={1986},
|
||||
}
|
||||
|
||||
@INBOOK{SFPT,
|
||||
author={N. Dunford and J. T. Schwartz},
|
||||
title={Linear {Operators},
|
||||
{Part} {I}: {General} {Theory}},
|
||||
pages={456},
|
||||
publisher={Interscience},
|
||||
address={New York},
|
||||
year={1957},
|
||||
}
|
||||
|
||||
@BOOK{DS57,
|
||||
author={N. Dunford and J. T. Schwartz},
|
||||
title={Linear {Operators},
|
||||
{Part} {I}: {General} {Theory}},
|
||||
publisher={Interscience},
|
||||
address={New York},
|
||||
year={1957},
|
||||
}
|
||||
|
||||
@BOOK{Gan59,
|
||||
author={F. R. Gantmacher},
|
||||
title={Applications of the {Theory} of {Matrices}},
|
||||
publisher={Interscience},
|
||||
address={New York},
|
||||
year={1959},
|
||||
}
|
||||
|
||||
@BOOK{Pau86,
|
||||
author={Vern I. Paulsen},
|
||||
title={Completely bounded maps and dilations},
|
||||
series={Pitman Research Notes in Mathematics Series},
|
||||
volume={146},
|
||||
publisher={Longman Scientific \& Technical},
|
||||
address={Harlow UK},
|
||||
year={1986},
|
||||
}
|
||||
|
||||
@BOOK{Dav88,
|
||||
author={Kenneth R. Davidson},
|
||||
title={Nest algebras},
|
||||
series={Pitman Research Notes in Mathematics Series},
|
||||
volume={191},
|
||||
publisher={Longman Scientific \& Technical},
|
||||
address={Harlow UK},
|
||||
year={1988},
|
||||
}
|
||||
|
||||
@BOOK{Spi65,
|
||||
author={Michael Spivak},
|
||||
title={Calculus on {Manifolds}},
|
||||
publisher={The Benjamin/Cummings Publishing Company},
|
||||
address={New York},
|
||||
year={1965},
|
||||
}
|
||||
|
||||
@BOOK{Dev68,
|
||||
author={Allen Devinaz},
|
||||
title={Advanced {Calculus}},
|
||||
publisher={Holt, Rinehart and Winston},
|
||||
address={New York},
|
||||
year={1968},
|
||||
}
|
||||
|
||||
@BOOK{Gam90,
|
||||
editor={R. V. Gamkerlidze},
|
||||
title={Analysis {I}{I}: {Convex} {Analysis} and
|
||||
{Approximation} {Theory}},
|
||||
series={Encyclopaedia of Mathematical Sciences},
|
||||
volume={14},
|
||||
publisher={Springer-Verlag},
|
||||
address={New York},
|
||||
year={1990},
|
||||
}
|
||||
|
||||
@BOOK{Hen93,
|
||||
author={Peter Henderson},
|
||||
title={Object-oriented specification and design with {C}$++$},
|
||||
publisher={McGraw-Hill},
|
||||
address={London},
|
||||
year={1993},
|
||||
}
|
||||
|
||||
% ------------------------------------------------------------------------
|
||||
|
||||
@ARTICLE{Rea85,
|
||||
author={C. J. Read},
|
||||
title={A solution to the invariant subspace problem on the space $l_1$},
|
||||
journal={Bull. London Math. Soc.},
|
||||
volume={17},
|
||||
year={1985},
|
||||
pages={305-317},
|
||||
}
|
||||
|
||||
@ARTICLE{Enf87,
|
||||
author={P. Enflo},
|
||||
title={On the invariant subspaces problem for {Banach} spaces},
|
||||
journal={Acta. Math.},
|
||||
note={Seminare Maurey-Schwartz (1975-1976)},
|
||||
volume={158},
|
||||
year={1987},
|
||||
pages={213-313},
|
||||
}
|
||||
|
||||
@ARTICLE{Dau75,
|
||||
author={J. Daughtry},
|
||||
title={An invariant subspace theorem},
|
||||
journal={Proc. Amer. Math. Soc.},
|
||||
volume={49},
|
||||
year={1975},
|
||||
pages={267-268},
|
||||
}
|
||||
|
||||
@ARTICLE{KPS75,
|
||||
author={H. W. Kim and C. Pearcy and A. L. Shields},
|
||||
title={Rank-One Commutators and Hyperinvariant Subspaces},
|
||||
journal={Michigan Math. J.},
|
||||
volume={22},
|
||||
number={3},
|
||||
year={1975},
|
||||
pages={193-194},
|
||||
}
|
||||
|
||||
% --------------------------------------------------------------------------
|
||||
|
||||
@ARTICLE{Rad87,
|
||||
author={H. Radjavi},
|
||||
title={The {Engel}-{Jacobson} {Theorem} {Revisited}},
|
||||
journal={J. Alg.},
|
||||
volume={111},
|
||||
year={1987},
|
||||
pages={427-430},
|
||||
}
|
||||
|
||||
@ARTICLE{MOR91,
|
||||
author={B. Mathes and M. Omladi\v{c} and H. Radjavi},
|
||||
title={Linear {Spaces} of {Nilpotent} {Operators}},
|
||||
journal={Linear Algebra Appl.},
|
||||
volume={149},
|
||||
year={1991},
|
||||
pages={215-225},
|
||||
}
|
||||
|
||||
@ARTICLE{Lom73,
|
||||
author={V. I. Lomonosov},
|
||||
title={Invariant subspaces for operators commuting with compact
|
||||
operators},
|
||||
journal={Functional Anal. Appl.},
|
||||
volume=7,
|
||||
year=1973,
|
||||
pages="213-214",
|
||||
}
|
||||
|
||||
@ARTICLE{Lom91,
|
||||
author={V. I. Lomonosov},
|
||||
title={An extension of {Burnside}'s theorem to infinite
|
||||
dimensional spaces},
|
||||
journal={Israel J. Math},
|
||||
volume=75,
|
||||
year=1991,
|
||||
pages="329-339",
|
||||
}
|
||||
|
||||
@ARTICLE{Lom92,
|
||||
author={V. I. Lomonosov},
|
||||
title={On {Real} {Invariant} {Subspaces} of {Bounded} {Operators} with
|
||||
{Compact} {Imaginary} {Part}},
|
||||
journal={Proc. Amer. Math. Soc.},
|
||||
volume=115,
|
||||
number=3,
|
||||
month=jul,
|
||||
year=1992,
|
||||
pages="775-777",
|
||||
}
|
||||
|
||||
@ARTICLE{dB59,
|
||||
author={L. de Branges},
|
||||
title={The {Stone}-{Weierstrass} {Theorem}},
|
||||
journal={Proc. Amer. Math. Soc.},
|
||||
volume=10,
|
||||
year=1959,
|
||||
pages="822-824",
|
||||
}
|
||||
|
||||
@ARTICLE{dB93,
|
||||
author={L. de Branges},
|
||||
title={A construction of invariant subspaces},
|
||||
journal={Math. Nachr.},
|
||||
volume=163,
|
||||
year=1993,
|
||||
pages="163-175",
|
||||
}
|
||||
|
||||
@ARTICLE{AAB95,
|
||||
author={Y. A. Abramovich and C. D. Aliprantis and O. Burkinshaw},
|
||||
title={Another Characterization of the Invariant Subspace Problem},
|
||||
journal={Operator Theory in Function Spaces and Banach Lattices.
|
||||
{\em The A.C.\,Zaanen Anniversary Volume},
|
||||
Operator Theory: Advances and Applications},
|
||||
volume={75},
|
||||
year={1995},
|
||||
pages={15-31},
|
||||
note={Birkh\"auser Verlag},
|
||||
}
|
||||
|
||||
@ARTICLE{LM65,
|
||||
author={Ju. I. Ljubi\v{c} and V. I. Macaev},
|
||||
title={On Operators with a Separable Spectrum},
|
||||
journal={Amer. Math. Soc. Transl. (2)},
|
||||
volume={47},
|
||||
year={1965},
|
||||
pages={89-129},
|
||||
}
|
||||
|
||||
% ------------------------------------------------------------------------
|
||||
|
||||
@MASTERSTHESIS{Sim90,
|
||||
author={A. Simoni\v{c}},
|
||||
title={Grupe Operatorjev s Pozitivnim Spektrom},
|
||||
school={Univerza v Ljubljani, FNT, Oddelek za Matematiko},
|
||||
year={1990},
|
||||
}
|
||||
|
||||
@UNPUBLISHED{Sim91,
|
||||
author={A. Simoni\v{c}},
|
||||
title={Notes on {Subharmonic} {Functions}},
|
||||
note={Lecture Notes, Dalhousie University,
|
||||
Department of Mathematics, Statistics, \& Computing Science},
|
||||
year={1991},
|
||||
}
|
||||
|
||||
@ARTICLE{Sim92,
|
||||
author={A. Simoni\v{c}},
|
||||
title={Matrix {Groups} with {Positive} {Spectra}},
|
||||
journal={Linear Algebra Appl.},
|
||||
volume={173},
|
||||
year={1992},
|
||||
pages={57-76},
|
||||
}
|
||||
|
||||
@PHDTHESIS{Sim94,
|
||||
author={A. Simoni\v{c}},
|
||||
title={An {Extension} of {Lomonosov's} {Techniques} to {Non}-{Compact}
|
||||
{Operators}},
|
||||
school={Dalhousie University,
|
||||
Department of Mathematics, Statistics, \& Computing Science},
|
||||
year={1994},
|
||||
}
|
||||
|
||||
@ARTICLE{Sim96a,
|
||||
author={A. Simoni\v{c}},
|
||||
title={A {Construction} of {Lomonosov} {Functions} and
|
||||
{Applications} to the {Invariant} {Subspace} {Problem}},
|
||||
journal={Pacific J. Math.},
|
||||
volume={175},
|
||||
pages={257-270},
|
||||
year={1996},
|
||||
}
|
||||
|
||||
@ARTICLE{Sim96b,
|
||||
author={A. Simoni\v{c}},
|
||||
title={An extension of {Lomonosov's} {Techniques} to non-compact
|
||||
{Operators}},
|
||||
journal={Trans. Amer. Math. Soc.},
|
||||
volume={348},
|
||||
pages={975-995},
|
||||
year={1996},
|
||||
}
|
||||
|
||||
% ------------------------------------------------------------------------
|
||||
|
||||
@misc{noauthor_2018_2018,
|
||||
title = {2018 {United} {Kingdom} {Speedtest} {Market} {Snapshot}},
|
||||
shorttitle = {Ookla {Speedtest} {Market} {Snapshot}},
|
||||
url = {http://www.speedtest.net/reports/united-kingdom/},
|
||||
abstract = {Based on millions of Speedtest results, the 2018 United Kingdom Market Snapshot is the comprehensive guide to fixed broadband and mobile internet speeds in the UK.},
|
||||
urldate = {2020-11-19},
|
||||
journal = {Ookla},
|
||||
year = {2018},
|
||||
file = {Snapshot:/home/jake/Zotero/storage/49UCNVCV/united-kingdom.html:text/html},
|
||||
}
|
||||
|
||||
@inproceedings{donenfeld_wireguard_2017,
|
||||
address = {San Diego, CA},
|
||||
title = {{WireGuard}: {Next} {Generation} {Kernel} {Network} {Tunnel}},
|
||||
isbn = {978-1-891562-46-4},
|
||||
shorttitle = {{WireGuard}},
|
||||
url = {https://www.ndss-symposium.org/ndss2017/ndss-2017-programme/wireguard-next-generation-kernel-network-tunnel/},
|
||||
doi = {10.14722/ndss.2017.23160},
|
||||
abstract = {WireGuard is a secure network tunnel, operating at layer 3, implemented as a kernel virtual network interface for Linux, which aims to replace both IPsec for most use cases, as well as popular user space and/or TLS-based solutions like OpenVPN, while being more secure, more performant, and easier to use. The virtual tunnel interface is based on a proposed fundamental principle of secure tunnels: an association between a peer public key and a tunnel source IP address. It uses a single round trip key exchange, based on NoiseIK, and handles all session creation transparently to the user using a novel timer state machine mechanism. Short pre-shared static keys—Curve25519 points—are used for mutual authentication in the style of OpenSSH. The protocol provides strong perfect forward secrecy in addition to a high degree of identity hiding. Transport speed is accomplished using ChaCha20Poly1305 authenticated-encryption for encapsulation of packets in UDP. An improved take on IP-binding cookies is used for mitigating denial of service attacks, improving greatly on IKEv2 and DTLS’s cookie mechanisms to add encryption and authentication. The overall design allows for allocating no resources in response to received packets, and from a systems perspective, there are multiple interesting Linux implementation techniques for queues and parallelism. Finally, WireGuard can be simply implemented for Linux in less than 4,000 lines of code, making it easily audited and verified.},
|
||||
language = {en},
|
||||
urldate = {2020-11-19},
|
||||
booktitle = {Proceedings 2017 {Network} and {Distributed} {System} {Security} {Symposium}},
|
||||
publisher = {Internet Society},
|
||||
author = {Donenfeld, Jason A.},
|
||||
year = {2017},
|
||||
file = {Donenfeld - 2017 - WireGuard Next Generation Kernel Network Tunnel.pdf:/home/jake/Zotero/storage/6MEQYC9J/Donenfeld - 2017 - WireGuard Next Generation Kernel Network Tunnel.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{noauthor_implementation_nodate,
|
||||
title = {An implementation and evaluation of {Loopix}, an anonymous communication system},
|
||||
url = {https://www.cl.cam.ac.uk/teaching/projects/archive/2018/jsc81-dissertation.pdf},
|
||||
}
|
||||
|
||||
@article{noauthor_zeromq_nodate,
|
||||
title = {A {ZeroMQ} {Implementation} for {MirageOS}},
|
||||
url = {https://www.cl.cam.ac.uk/teaching/projects/archive/2019/hz326-dissertation.pdf},
|
||||
}
|
||||
|
||||
@article{noauthor_typesafely_nodate,
|
||||
title = {{TypeSafely} - {A} {Secure} {USB} {Keyboard}},
|
||||
url = {https://www.cl.cam.ac.uk/teaching/projects/archive/2019/hbgj2-dissertation.pdf},
|
||||
}
|
||||
|
||||
@inproceedings{hacker_effects_2002,
|
||||
title = {The {Effects} of {Systemic} {Packet} {Loss} on {Aggregate} {TCP} {Flows}},
|
||||
doi = {10.1109/SC.2002.10029},
|
||||
abstract = {The use of parallel TCP connections to increase throughput for bulk transfers is common practice within the high performance computing community. However, the effectiveness, fairness, and efficiency of data transfers across parallel connections is unclear. This paper considers the impact of systemic non-congestion related packet loss on the effectiveness, fairness, and efficiency of parallel TCP transmissions. The results indicate that parallel connections are effective at increasing aggregate throughput, and increase the overall efficiency of the network bottleneck. In the presence of congestion related losses, parallel flows steal bandwidth from other single stream flows. A simple modification is presented that reduces the fairness problems when congestion is present, but retains effectiveness and efficiency.},
|
||||
booktitle = {{SC} '02: {Proceedings} of the 2002 {ACM}/{IEEE} {Conference} on {Supercomputing}},
|
||||
author = {Hacker, T. J. and Noble, B. D. and Athey, B. D.},
|
||||
month = nov,
|
||||
year = {2002},
|
||||
note = {ISSN: 1063-9535},
|
||||
keywords = {Aggregates, Bandwidth, Biology computing, Computer hacking, Concurrent computing, High performance computing, Internet, Loss measurement, Robustness, Throughput},
|
||||
pages = {7--7},
|
||||
file = {IEEE Xplore Full Text PDF:/home/jake/Zotero/storage/GGX3FAK6/Hacker et al. - 2002 - The Effects of Systemic Packet Loss on Aggregate T.pdf:application/pdf;IEEE Xplore Abstract Record:/home/jake/Zotero/storage/F9XVJNZS/1592843.html:text/html},
|
||||
}
|
||||
|
||||
@misc{ofcom_performance_2020,
|
||||
title = {The performance of fixed-line broadband delivered to {UK} residential customers},
|
||||
shorttitle = {{UK} {Home} {Broadband} {Performance}},
|
||||
url = {https://www.ofcom.org.uk/research-and-data/telecoms-research/broadband-research/home-broadband-performance-2019},
|
||||
abstract = {Our annual home broadband performance report compares how different broadband packages perform, using data from monitors installed on people's broadband routers.},
|
||||
language = {en},
|
||||
urldate = {2020-11-21},
|
||||
journal = {Ofcom},
|
||||
author = {Ofcom},
|
||||
month = may,
|
||||
year = {2020},
|
||||
file = {Snapshot:/home/jake/Zotero/storage/437YQTVF/home-broadband-performance-2019.html:text/html;2020 - UK home broadband performance, measurement period .pdf:/home/jake/Zotero/storage/HPR3TALB/2020 - UK home broadband performance, measurement period .pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{wischik_design_2011,
|
||||
title = {Design, implementation and evaluation of congestion control for multipath {TCP}},
|
||||
abstract = {Multipath TCP, as proposed by the IETF working group mptcp, allows a single data stream to be split across multiple paths. This has obvious benefits for reliability, and it can also lead to more efficient use of networked resources. We describe the design of a multipath congestion control algorithm, we implement it in Linux, and we evaluate it for multihomed servers, data centers and mobile clients. We show that some ‘obvious’ solutions for multipath congestion control can be harmful, but that our algorithm improves throughput and fairness compared to single-path TCP. Our algorithm is a drop-in replacement for TCP, and we believe it is safe to deploy.},
|
||||
language = {en},
|
||||
author = {Wischik, Damon and Raiciu, Costin and Greenhalgh, Adam and Handley, Mark},
|
||||
year = {2011},
|
||||
pages = {14},
|
||||
file = {Wischik et al. - Design, implementation and evaluation of congestio.pdf:/home/jake/Zotero/storage/5EIJG455/Wischik et al. - Design, implementation and evaluation of congestio.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{postel_transmission_nodate,
|
||||
title = {Transmission {Control} {Protocol}},
|
||||
url = {https://tools.ietf.org/html/rfc793},
|
||||
language = {en},
|
||||
urldate = {2020-11-28},
|
||||
author = {Postel, J.},
|
||||
file = {Snapshot:/home/jake/Zotero/storage/UYLHNHTA/rfc793.html:text/html},
|
||||
}
|
||||
|
||||
@article{peng_multipath_2016,
|
||||
title = {Multipath {TCP}: {Analysis}, {Design}, and {Implementation}},
|
||||
volume = {24},
|
||||
issn = {1558-2566},
|
||||
shorttitle = {Multipath {TCP}},
|
||||
doi = {10.1109/TNET.2014.2379698},
|
||||
abstract = {Multipath TCP (MP-TCP) has the potential to greatly improve application performance by using multiple paths transparently. We propose a fluid model for a large class of MP-TCP algorithms and identify design criteria that guarantee the existence, uniqueness, and stability of system equilibrium. We clarify how algorithm parameters impact TCP-friendliness, responsiveness, and window oscillation and demonstrate an inevitable tradeoff among these properties. We discuss the implications of these properties on the behavior of existing algorithms and motivate our algorithm Balia (balanced linked adaptation), which generalizes existing algorithms and strikes a good balance among TCP-friendliness, responsiveness, and window oscillation. We have implemented Balia in the Linux kernel. We use our prototype to compare the new algorithm to existing MP-TCP algorithms.},
|
||||
number = {1},
|
||||
journal = {IEEE/ACM Transactions on Networking},
|
||||
author = {Peng, Q. and Walid, A. and Hwang, J. and Low, S. H.},
|
||||
month = feb,
|
||||
year = {2016},
|
||||
note = {Conference Name: IEEE/ACM Transactions on Networking},
|
||||
keywords = {Aggregates, Algorithm design and analysis, Asymptotic stability, balanced linked adaptation, Balia algorithm, Computer networks, convergence, Heuristic algorithms, Linux kernel, MP-TCP algorithms, multipath TCP, nonlinear dynamical systems, Oscillators, Stability analysis, TCPIP, transport protocols, Vectors, window oscillation},
|
||||
pages = {596--609},
|
||||
file = {IEEE Xplore Full Text PDF:/home/jake/Zotero/storage/9QTMKA3G/Peng et al. - 2016 - Multipath TCP Analysis, Design, and Implementatio.pdf:application/pdf;IEEE Xplore Abstract Record:/home/jake/Zotero/storage/S2L269MS/7000573.html:text/html},
|
||||
}
|
||||
|
||||
@incollection{hutchison_blake2_2013,
|
||||
address = {Berlin, Heidelberg},
|
||||
title = {{BLAKE2}: {Simpler}, {Smaller}, {Fast} as {MD5}},
|
||||
volume = {7954},
|
||||
isbn = {978-3-642-38979-5 978-3-642-38980-1},
|
||||
shorttitle = {{BLAKE2}},
|
||||
url = {http://link.springer.com/10.1007/978-3-642-38980-1_8},
|
||||
abstract = {We present the hash function BLAKE2, an improved version of the SHA-3 finalist BLAKE optimized for speed in software. Target applications include cloud storage, intrusion detection, or version control systems. BLAKE2 comes in two main flavors: BLAKE2b is optimized for 64-bit platforms, and BLAKE2s for smaller architectures. On 64bit platforms, BLAKE2 is often faster than MD5, yet provides security similar to that of SHA-3: up to 256-bit collision resistance, immunity to length extension, indifferentiability from a random oracle, etc. We specify parallel versions BLAKE2bp and BLAKE2sp that are up to 4 and 8 times faster, by taking advantage of SIMD and/or multiple cores. BLAKE2 reduces the RAM requirements of BLAKE down to 168 bytes, making it smaller than any of the five SHA-3 finalists, and 32\% smaller than BLAKE. Finally, BLAKE2 provides a comprehensive support for tree-hashing as well as keyed hashing (be it in sequential or tree mode).},
|
||||
language = {en},
|
||||
urldate = {2020-11-28},
|
||||
booktitle = {Applied {Cryptography} and {Network} {Security}},
|
||||
publisher = {Springer Berlin Heidelberg},
|
||||
author = {Aumasson, Jean-Philippe and Neves, Samuel and Wilcox-O’Hearn, Zooko and Winnerlein, Christian},
|
||||
editor = {Hutchison, David and Kanade, Takeo and Kittler, Josef and Kleinberg, Jon M. and Mattern, Friedemann and Mitchell, John C. and Naor, Moni and Nierstrasz, Oscar and Pandu Rangan, C. and Steffen, Bernhard and Sudan, Madhu and Terzopoulos, Demetri and Tygar, Doug and Vardi, Moshe Y. and Weikum, Gerhard and Jacobson, Michael and Locasto, Michael and Mohassel, Payman and Safavi-Naini, Reihaneh},
|
||||
year = {2013},
|
||||
doi = {10.1007/978-3-642-38980-1_8},
|
||||
note = {Series Title: Lecture Notes in Computer Science},
|
||||
pages = {119--135},
|
||||
file = {Aumasson et al. - 2013 - BLAKE2 Simpler, Smaller, Fast as MD5.pdf:/home/jake/Zotero/storage/ZG25MG4B/Aumasson et al. - 2013 - BLAKE2 Simpler, Smaller, Fast as MD5.pdf:application/pdf},
|
||||
}
|
||||
|
0
compile-thesis.sh
Executable file → Normal file
0
hooks/install.sh
Executable file → Normal file
0
hooks/pre-commit
Executable file → Normal file
11
import-code.sh
Normal file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Clean up previous code samples
|
||||
rm /home/jake/repos/dissertation/4-dissertation/Implementation/Samples/* || true
|
||||
|
||||
# Copy code samples for implementation
|
||||
cp /home/jake/repos/dissertation/2-code/udp/congestion.go /home/jake/repos/dissertation/4-dissertation/Implementation/Samples/
|
||||
cp /home/jake/repos/dissertation/2-code/udp/wireshark_dissector.lua /home/jake/repos/dissertation/4-dissertation/Implementation/Samples/
|
||||
cp /home/jake/repos/dissertation/2-code/proxy/mac.go /home/jake/repos/dissertation/4-dissertation/Implementation/Samples/
|
||||
|
14
import-graphs.sh
Normal file
@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Clean up previous graphs
|
||||
rm /home/jake/repos/dissertation/4-dissertation/Evaluation/Figs/graphs/* || true
|
||||
rm /home/jake/repos/dissertation/4-dissertation/OutboundGraphs/Figs/graphs/* || true
|
||||
|
||||
# Copy graphs for evaluation
|
||||
cp /home/jake/repos/dissertation/3-evaluation/output/I* /home/jake/repos/dissertation/4-dissertation/Evaluation/Figs/graphs/
|
||||
cp /home/jake/repos/dissertation/3-evaluation/output/TOEyS0-R0-2R1-2T10S1-R0-1R1-2T10S2-R0-1R1-1T10.png /home/jake/repos/dissertation/4-dissertation/Evaluation/Figs/graphs/
|
||||
|
||||
# Copy graphs for outbound graphs appendix
|
||||
cp /home/jake/repos/dissertation/3-evaluation/output/O* /home/jake/repos/dissertation/4-dissertation/OutboundGraphs/Figs/graphs/
|
||||
|
@ -1,30 +1,30 @@
|
||||
% ************************ Thesis Information & Meta-data **********************
|
||||
%% The title of the thesis
|
||||
\title{Writing your PhD thesis in \texorpdfstring{\\ \LaTeX2e}{LaTeX2e}}
|
||||
\title{A Multi-Path Bidirectional Layer 3 Proxy}
|
||||
%\texorpdfstring is used for PDF metadata. Usage:
|
||||
%\texorpdfstring{LaTeX_Version}{PDF Version (non-latex)} eg.,
|
||||
%\texorpdfstring{$sigma$}{sigma}
|
||||
|
||||
%% Subtitle (Optional)
|
||||
\subtitle{Using the CUED template}
|
||||
%\subtitle{Using the CUED template}
|
||||
|
||||
%% The full name of the author
|
||||
\author{Krishna Kumar}
|
||||
\author{Jake Hillion}
|
||||
|
||||
%% Department (eg. Department of Engineering, Maths, Physics)
|
||||
\dept{Department of Engineering}
|
||||
\dept{Department of Computer Science}
|
||||
|
||||
%% University and Crest
|
||||
\university{University of Cambridge}
|
||||
% Crest minimum should be 30mm.
|
||||
\crest{\includegraphics[width=0.2\textwidth]{University_Crest}}
|
||||
%\crest{\includegraphics[width=0.2\textwidth]{University_Crest}}
|
||||
%% Use this crest, if you are using the college crest
|
||||
%% Crest long miminum should be 65mm
|
||||
%\crest{\includegraphics[width=0.45\textwidth]{University_Crest_Long}}
|
||||
\crest{\includegraphics[width=0.45\textwidth]{University_Crest_Long}}
|
||||
|
||||
%% College shield [optional]
|
||||
% Crest minimum should be 30mm.
|
||||
%\collegeshield{\includegraphics[width=0.2\textwidth]{CollegeShields/Kings}}
|
||||
\collegeshield{\includegraphics[width=0.2\textwidth]{CollegeShields/Queens}}
|
||||
|
||||
|
||||
%% Supervisor (optional)
|
||||
@ -32,13 +32,15 @@
|
||||
%\supervisor{Prof. A.B. Supervisor\newline
|
||||
%Prof. C.D. Supervisor}
|
||||
|
||||
%\supervisor{Mike Dodson}
|
||||
|
||||
%% Supervisor Role (optional) - Supervisor (default) or advisor
|
||||
% \supervisorrole{\textbf{Supervisors: }}
|
||||
%% if no title is desired:
|
||||
% \supervisorrole{}
|
||||
|
||||
%% Supervisor line width: required to align supervisors
|
||||
%\supervisorlinewidth{0.35\textwidth}
|
||||
%\supervisorlinewidth{0.20\textwidth}
|
||||
|
||||
%% Advisor (optional)
|
||||
%% for multiple advisors, append each advisor with the \newline command
|
||||
@ -60,15 +62,14 @@
|
||||
%\renewcommand{\submissiontext}{change the default text here if needed}
|
||||
|
||||
%% Full title of the Degree
|
||||
\degreetitle{Doctor of Philosophy}
|
||||
\degreetitle{Bachelor of Arts}
|
||||
|
||||
%% College affiliation (optional)
|
||||
\college{King's College}
|
||||
\college{Queens' College}
|
||||
|
||||
%% Submission date
|
||||
% Default is set as {\monthname[\the\month]\space\the\year}
|
||||
%\degreedate{September 2014}
|
||||
|
||||
%% Meta information
|
||||
\subject{LaTeX} \keywords{{LaTeX} {PhD Thesis} {Engineering} {University of
|
||||
Cambridge}}
|
||||
\subject{LaTeX} \keywords{{LaTeX} {Part II Dissertation} {Computer Science} {University of Cambridge}}
|
||||
|
BIN
thesis.pdf
33
thesis.tex
@ -103,7 +103,7 @@
|
||||
% To use choose `chapter' option in the document class
|
||||
|
||||
\ifdefineChapter
|
||||
\includeonly{Chapter3/chapter3}
|
||||
\includeonly{Implementation/implementation}
|
||||
\fi
|
||||
|
||||
% ******************************** Front Matter ********************************
|
||||
@ -113,10 +113,11 @@
|
||||
|
||||
\maketitle
|
||||
|
||||
\include{Dedication/dedication}
|
||||
%\include{Dedication/dedication}
|
||||
\include{Declaration/declaration}
|
||||
\include{Acknowledgement/acknowledgement}
|
||||
\include{Abstract/abstract}
|
||||
\include{Proforma/proforma}
|
||||
%\include{Acknowledgement/acknowledgement}
|
||||
%\include{Abstract/abstract}
|
||||
|
||||
% *********************** Adding TOC and List of Figures ***********************
|
||||
|
||||
@ -124,7 +125,7 @@
|
||||
|
||||
\listoffigures
|
||||
|
||||
\listoftables
|
||||
% \listoftables
|
||||
|
||||
% \printnomenclature[space] space can be set as 2em between symbol and description
|
||||
%\printnomenclature[3em]
|
||||
@ -134,14 +135,11 @@
|
||||
% ******************************** Main Matter *********************************
|
||||
\mainmatter
|
||||
|
||||
\include{Chapter1/chapter1}
|
||||
\include{Chapter2/chapter2}
|
||||
\include{Chapter3/chapter3}
|
||||
%\include{Chapter4/chapter4}
|
||||
%\include{Chapter5/chapter5}
|
||||
%\include{Chapter6/chapter6}
|
||||
%\include{Chapter7/chapter7}
|
||||
|
||||
\include{Introduction/introduction}
|
||||
\include{Preparation/preparation}
|
||||
\include{Implementation/implementation}
|
||||
\include{Evaluation/evaluation}
|
||||
\include{Conclusions/conclusions}
|
||||
|
||||
|
||||
% ********************************** Back Matter *******************************
|
||||
@ -174,14 +172,19 @@
|
||||
|
||||
% ********************************** Appendices ********************************
|
||||
|
||||
%TC:ignore
|
||||
\begin{appendices} % Using appendices environment for more functunality
|
||||
|
||||
\include{Appendix1/appendix1}
|
||||
\include{Appendix2/appendix2}
|
||||
\include{GraphGeneration/graphgeneration}
|
||||
\include{OutboundGraphs/outboundgraphs}
|
||||
|
||||
\end{appendices}
|
||||
|
||||
% *************************************** Index ********************************
|
||||
\printthesisindex % If index is present
|
||||
|
||||
% ************************************** Proposal ******************************
|
||||
\include{Proposal/proposal}
|
||||
|
||||
%TC:endignore
|
||||
\end{document}
|
||||
|