commit cddda6908a55fe6ff5b9d7fab04434ef3a891f50 Author: Carl Kittelberger Date: Thu Mar 1 09:20:16 2018 +0100 Initial commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..07633cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,98 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc + +## Intermediate documents: +*.dvi +/*.ps +/*.eps +/*.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Auxiliary and intermediate files from other packages: + +# algorithms +*.alg +*.loa + +# amsthm +*.thm + +# beamer +*.nav +*.snm +*.vrb + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls + +# hyperref +*.brf + +# listings +*.lol + +# makeidx +*.idx +*.ilg +*.ind +*.ist + +# minitoc +*.maf +*.mtc +*.mtc0 + +# minted +*.pyg + +# nomencl +*.nlo + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# todonotes +*.tdo + +# xindy +*.xdy + +# Pandoc output +/*.tex +!/template.tex +/*.odt +/*.docx + +# Aufgabenblatt +sheets +#!AA_*.pdf diff --git a/00-Kittelberger_Carl_Dateisysteme.md b/00-Kittelberger_Carl_Dateisysteme.md new file mode 100644 index 0000000..456b43c --- /dev/null +++ b/00-Kittelberger_Carl_Dateisysteme.md @@ -0,0 +1,124 @@ +--- +author: Carl Kittelberger +title: Dateisysteme +date: 2017-06-02 + +papersize: a4 +documentclass: report +classoption: oneside +#classoption: draft +mainfont: Arial +sansfont: Arial +fontsize: 12pt + +toc: true + +header-includes: + # For \textcolor + - \usepackage{xcolor} + + # Long tables (used by pandoc latex template itself) + - \usepackage{longtable} + + # Localization to German for all package injections + - \usepackage[ngerman]{babel} + + # Fancy header! + - \usepackage{fancyhdr} + - \usepackage{graphicx} + - \pagestyle{fancy} + - \fancyhf{} + - \fancyhead[L]{\bfseries{\large{ITS \\ Dateisysteme}}} + - \fancyhead[R]{\raisebox{-0.1\height}{\includegraphics[height=32pt]{img/steinbeis.png}}} + - \fancyfoot[L]{\textcolor{gray}{Carl Kittelberger}} + - \fancyfoot[R]{\textcolor{gray}{\bfseries{Seite \thepage}}} + - \renewcommand{\headrulewidth}{0.4pt} + - \renewcommand{\footrulewidth}{0.4pt} + - \setlength\headheight{36pt} + - \fancypagestyle{plain}{} +--- + +\newpage + +# Strukturierung einer Festplatte + +![Einteilung einer Festplatte in Spuren und Sektoren](img/00-dateisysteme/abbildung_a.png) + +Eine Festplatte wird an sich so aufgeteilt, dass die Daten darauf für den Computer zuverlässig addressierbar werden. Dies geschieht dadurch, dass die Festplatte zuerst in Datenringe eingeteilt wird, die sich dann **Datenspuren** nennen. Diese Spuren wiederum werden in jeweils gleich lange Segmente eingeteilt, das sind dann die **Datensektoren**. + +# Begriffsklärung + +Ein Dateisystem ist eine Verwaltungsabstraktion der Daten auf einer Festplatte mittels Zeigereinträgen und weiteren Metadaten wie Dateinamen und Dateigrößen. Jedes Dateisystem macht auf unterschiedliche Art und Weise Nutzen von dem zur Verfügung stehenden Speicher, hat daher eine eigene Stärke und kann unterschiedliche Aspekte eines Betriebssystems zum eigenen Vorteil nutzen. + +In der Regel können mehrere Dateisysteme auf der gleichen Festplatte durch Partitionierung gleichzeitig existieren, andere Dateisystem erlauben auch die Verbindung mehrerer Festplatten oder verschiedener Partitionen auf mehreren Festplatten zu einem großen Speicher. + +![Auflistung einer SSD-Partitionierung mit `parted`](img/00-dateisysteme/abbildung_b.png) + +# Oft verwendete Dateisysteme + +## FAT + +Das FAT-Dateisystem (kurz für *File Allocation Table*) ist einer der ältesten Dateisysteme und wird hauptsächlich seit DOS auf Computern eingesetzt. Auch bei modernen Betriebssystemen wird FAT immer noch oft zur portablen und weitestgehend kompatiblen Speicherung von Dateien auf USB-Sticks verwendet. + +FAT teilt den gesamten Speicher in so genannte Cluster ein, welche abgegrenzte Datensegmente darstellen. Die maximale Anzahl solcher Cluster ist limitiert, somit kann es vor allem bei vielen großen Dateien dazu kommen, dass trotz ungenutztem echten Speicherplatz ein Speichern von Daten nicht mehr möglich ist. + +Es gibt zwei oft anzutreffende Variationen von FAT, FAT16 und FAT32, die jeweils mit unterschiedlichen maximalen Partitionsgrößen und Clusteranzahlen arbeiten und somit unterschiedliche Dateianzahlen und -größen zulassen. Heutzutage kommt eigentlich nur noch FAT32 zum Einsatz, vor allem auf portablen Medien wie USB-Speichersticks, SD-Karten u. Ä. + +## NTFS + +Das NTFS-Dateisystem (*New Technology File System*) wurde von Microsoft im Zuge der Entwicklung des NT-Kernels für ihr Windows-Betriebssystem entwickelt. Ein Hauptvorteil von NTFS gegenüber von vor allem FAT ist die Möglichkeit, einzelnen Dateien oder Verzeichnissen fein festgelegte Berechtigungen zuzuweisen. So ist es zum Beispiel möglich, auf einen Ordner bestimmten Benutzern Vollzugriff zu geben, während andere Benutzer eventuell nur Lesezugriff oder gar keinen Zugriff erhalten. Dieses Berechtigungssystem nennt sich auch ACL (*Access Control List*). + +Das NTFS-Dateisystem ist bis heute sehr aktiv bei allen modernen Windows-Betriebssystemen inkl. Windows 10 im Einsatz. + +## ext2/3/4 + +ext2/3/4 (*second/third/fourth extended filesystem*) sind hauptsächlich auf Linux-Installationen verwendete Dateisysteme. ext2 is dabei die älteste Version, mit ext3 als größere Erweiterung zu ext2 mit Journaling-Funktionalitäten. Die neueste Version ext4 hebt die Einschränkungen der vorherigen Versionen an indem es größere Dateien und Partitionsgrößen zulässt und die maximale Anzahl von Unterverzeichnissen in einem Verzeichnis erhöht. Außerdem wurden weitere Optimierungen eingeführt die die Performance des Dateisystems insgesamt verbessern. Die ext-Dateisysteme erlauben einfache Rechteverwaltung auf Basis von Informationen über den Besitzer und die Gruppe des Besitzers. Das Setzen der Rechte geschieht unter Linux üblicherweise über den `chmod` Befehl der die Rechte für den Besitzer, die Besitzergruppe und alle anderen in Zahlenform entgegennimmt. + +ext4 ist heutzutage Standard bei neuen Linuxinstallationen und verbreitet sich daher zügig. + +# Spezielle Dateisysteme + +Die folgenden Dateisysteme sind Beispiele die für spezielle Zwecke oder Anforderungen zum Einsatz kommen. + +## zfs + +zfs (*Zettabyte File System*) ist ein für extrem große Festplattengrößen optimiertes Dateisystem. Zur Laufzeit erstellt der zfs-Treiber auf dem entsprechenden Betriebssystem im RAM einen recht großen Cachespeicher, den dieser dann mit Verlinkungen zu oft verwendeten Daten auf der Festplatte befüllt, während diese Verlinkungen auch auf der Festplatte selbst aufgezeichnet werden. Dadurch, dass diese Daten komplett im RAM bereitstehen, entsteht ein immenser Geschwindigkeitsvorteil, vor allem bei per RAID zusammengeschalteten Festplatten, allerdings ist der offensichtliche Nachteil die riesige Menge an RAM die benötigt wird. Diese Menge hängt auch von der insgesamten Speichergröße ab. + +## VMFS + +VMFS (*Virtual Machine File System*) wurde von VMware entwickelt als Dateisystem zur Verwaltung von Festplattendaten von virtuellen Maschinen. Im Speziellen kann dieses Dateisystem sicherstellen, dass der Betrieb virtueller Maschinen nicht dadurch gestört wird, dass ein Programm oder eine zweite virtuelle Maschine gleichzeitig auf die gleichen Daten zugreift. Es erlaubt außerdem das Anlegen virtueller Festplatten über Festplattengrenzen hinweg, solange weitere Festplatten existieren die den zusätzlichen benötigten Speicher anbieten können. + +## OverlayFS/Overlay2 + +OverlayFS ist ein quelloffenes Dateisystem das auf Linux verwendet wird um logische Kombinationen verschiedener vorher existierender Dateisysteme anzubieten. Dieses Dateisystem wird vor allem in Zusammenhang mit so genannten Linux-Containern verwendet, da Containerverwaltungssoftware oft über das Internet bereitgestellte Dateisystemschichten zusammensetzen muss um eine komplette Betriebssystemumgebung für zu betreibende Software automatisiert bereitstellen zu können. Dies wiederum ermöglicht das reproduzierbare und portable Ausführen von jeglicher Software ohne den oft nervigen und komplexen Installationsaufwand. + +# Anlegen eines Dateisystems auf der Festplatte + +Um ein Dateisystem auf Festplatten anlegen zu können benötigt es immer eine entsprechende Softwareimplementierung. Die Implementierung ist für jedes Betriebssystem unterschiedlich. Allgemein muss jedoch bevor das Dateisystem angelegt werden kann immer zumindest eine leere Rohpartition auf der Festplatte vorangelegt sein. + +## Windows + +Unter Windows übernimmt das Betriebssystem selbst die Erstellung des Dateisystems. In der grafischen Benutzeroberfläche muss im Windows Explorer die entsprechende Partition mit der rechten Maustaste angeklickt und darauf der Unterpunkt **Formattieren...** aufgerufen werden. Über die Eingabeaufforderung kann die Formattierung mit dem `format`-Tool durchgeführt werden. Um zum Beispiel ein FAT32-Dateisystem auf der Partition die `F:` benannt wurde anzulegen, kann der Befehl `format /FS:FAT32 /Q`, wobei der `/Q`-Parameter optional ist und die Formattierung beschleunigt indem es die komplette Überschreibung der vorherigen Daten mit Null-Bytes überspringt. + +## Linux + +Unter Linux existieren für die meisten Dateisysteme jeweilige `mkfs`-Werkzeugprogramme. Diese Programme benötigen einen Pfad zu der Partition auf der das Dateisystem angelegt werden soll. So kann zum Beispiel mit `mkfs.ext4 /dev/sda1` die erste Partition auf der ersten erkannten Festplatte auf dem System mit einem leeren ext4-Dateisystem beschrieben werden. + +Im Gegensatz zu Windows können unter Linux sehr oft Softwarepakete nachinstalliert werden die es erlauben auf weitere Dateisysteme zuzugreifen. + +\clearpage + +# Quellenangaben + +Alle Quellen wurden zuletzt am 15.07.2017 geprüft. + +- [http://www.allround-pc.com/artikel/wissen/2009/fat32-ntfs-exfat-was-man-ueber-diese-dateisysteme-wissen-sollte](http://www.allround-pc.com/artikel/wissen/2009/fat32-ntfs-exfat-was-man-ueber-diese-dateisysteme-wissen-sollte) +- [http://www.informatik.uni-ulm.de/ni/Lehre/WS03/TechInf2/2003w-TI2-D3-4.pdf](http://www.informatik.uni-ulm.de/ni/Lehre/WS03/TechInf2/2003w-TI2-D3-4.pdf) +- [https://de.wikipedia.org/wiki/Dateisystem](https://de.wikipedia.org/wiki/Dateisystem) +- [https://de.wikipedia.org/wiki/Ext4](https://de.wikipedia.org/wiki/Ext4) +- [https://opensource.com/article/17/5/introduction-ext4-filesystem](https://opensource.com/article/17/5/introduction-ext4-filesystem) +- [https://wiki.ubuntuusers.de/ext/](https://wiki.ubuntuusers.de/ext/) +- [https://www.heise.de/ct/artikel/Das-Linux-Dateisystem-Ext4-221262.html](https://www.heise.de/ct/artikel/Das-Linux-Dateisystem-Ext4-221262.html) +- [http://www.admin-magazin.de/Online-Artikel/ZFS-Snapshots-RAID-und-Datensicherheit](http://www.admin-magazin.de/Online-Artikel/ZFS-Snapshots-RAID-und-Datensicherheit) +- [http://www.searchstorage.de/definition/VMware-VMFS-Virtual-Machine-File-System](http://www.searchstorage.de/definition/VMware-VMFS-Virtual-Machine-File-System) +- [https://www.heise.de/open/meldung/Linux-Kernel-mit-OverlayFS-Dateisysteme-uebereinander-lagern-2432269.html](https://www.heise.de/open/meldung/Linux-Kernel-mit-OverlayFS-Dateisysteme-uebereinander-lagern-2432269.html) diff --git a/00-Lehrer_Dateisysteme.md b/00-Lehrer_Dateisysteme.md new file mode 100644 index 0000000..853e79a --- /dev/null +++ b/00-Lehrer_Dateisysteme.md @@ -0,0 +1,42 @@ +--- +title: Dateisysteme +author: Carl Kittelberger + +papersize: a4 +classoption: oneside +mainfont: Arial +sansfont: Arial + +header-includes: + - \usepackage{longtable} +--- + +| Abkürzung | Beschreibung | +|-----------|----------------------------------------------------------------------| +| Btrfs | **B-tr**ee **F**ile **S**ystem (oft "Butter FS" ausgesprochen) | +| exFAT | **ex**tended **F**ile **A**llocation **T**able | +| ext2/3/4 | **ext**ended File System 2/3/4 | +| F2FS | **F**lash-**f**riendly File System | +| FAT | **F**ile **A**llocation **T**able | +| HPFS/NTFS | **NT-F**ile **S**ystem | +| ISO 9660 | Von DIN standardisiertes CD-Dateisystem, wird abgelöst von UDF | +| ReiserFS | Entwickelt von Hans Reiser | +| UDF | **U**niversal **D**isk **F**ormat (für CDs) | +| zfs | **Z**ettabyte **F**ile **S**ystem, von Java Microsystems entwickelt. | +| ⋮ | | + +journaling file systems: führen ein Journal über Änderungen + +Ältere Dateisysteme führen kein Journal. + +## Arbeitsauftrag/Hausarbeit + +Recherchieren Sie im Internet nach Dateisystemen. Welche Dateisysteme werden aktuell eingesetzt, wie gelangt ein Dateisystem auf die Festplatte? Worin liegen die Hauptunterschiede? + +Ergebnis in einer Datei abliefern mit Deckblatt, Inhaltsverzeichnis, strukturiertem Inhalt, Bildern, und Quellenangabe! + +Einzelarbeit - kein Teamwork! + +Achtung: **NOTEN!** + +Umfang: > 4 Seiten Inhalt, max. 8 Seiten Inhalt, Schriftart Arial 10pt/11pt diff --git a/01-Kittelberger_Carl_HTTP.md b/01-Kittelberger_Carl_HTTP.md new file mode 100644 index 0000000..dd3856f --- /dev/null +++ b/01-Kittelberger_Carl_HTTP.md @@ -0,0 +1,326 @@ +--- +author: Carl Kittelberger +title: "ITS: Hypertext Transfer Protocol" +date: 2018-01-25 + +papersize: a4 +documentclass: report +classoption: oneside +#classoption: draft +mainfont: Arial +sansfont: Arial +fontsize: 12pt + +toc: true + +header-includes: + + # For \textcolor + - \usepackage{xcolor} + + # Long tables (used by pandoc latex template itself) + - \usepackage{longtable} + + # Localization to German for all package injections + - \usepackage[ngerman]{babel} + + + # Fancy header! + - \usepackage{fancyhdr} + - \usepackage{graphicx} + - \pagestyle{fancy} + - \fancyhf{} + - \fancyhead[L]{\large{\textit{\textbf{ITS} \\ Hypertext Transfer Protocol}}} + - \fancyhead[R]{\raisebox{-0.1\height}{\includegraphics[height=32pt]{img/steinbeis.png}}} + - \fancyfoot[L]{\textcolor{gray}{Carl Kittelberger}} + - \fancyfoot[R]{\textcolor{gray}{\bfseries{Seite \thepage}}} + - \renewcommand{\headrulewidth}{0.4pt} + - \renewcommand{\footrulewidth}{0.4pt} + - \setlength\headheight{36pt} + - \fancypagestyle{plain}{} + + # monospace + - \lstset{basicstyle=\footnotesize\ttfamily,breaklines=true} + - \lstset{framextopmargin=50pt} +--- + +\newpage + +# Definition + +HTTP (*HyperText Transfer Protocol*) ist ein Standard, der festlegt wie +Webseiten über das Internet übertragen werden. Es definiert ein Protokoll auf +der Sitzungsschicht des OSI-Schichtenmodells, welches auf Basis des +TCP/IP-Stacks läuft. + +Das Protokoll an sich definiert die Übertragung der Anfrage und der Antwort +im Klartext. Dies soll die konsistente Implementierung deutlich vereinfachen. + +Jedoch wird HTTP heutzutage oft in anderen Protokollen eingebettet wie zum +Beispiel TLS für den sicheren, verschlüsselten Zugriff auf eine Website oder auch +Tor für dezentralisierte, anonymisierte Zugriffe auf Websites. + +# Geschichte + +Entwickelt wurde HTTP als Teil des Webprojekts an der Forschungseinrichtung +CERN von Tim Berners-Lee, Roy Fielding und anderen Teilnehmern. Die erste +bekannte Version von HTTP war die Version 0.9. + +## HTTP/0.9 + +Diese frühe Version von HTTP definiert ein Subset des kompletten Protokolls +als Prototyp und wurde bereits so entworfen, dass zukünftige Versionen von HTTP +rückwärtskompatibel mit dieser sind. + +Hier wurden bereits fundamentale Eigenschaften des Protokolls, wie dessen Abhängigkeit +vom TCP/IP-Stack, der Port 80 für Datenaustausch sowie das Nutzen von ASCII-Klartext +festgelegt. Nach jeder Anfrage, die verarbeitet wurde, wurde die Verbindung direkt +wieder geschlossen. + +## HTTP/1.0 + +Diese Version von HTTP ist die meistgenutzte Version für die einfachsten Anfragen +zu Webservern und ist die erste mit einer vollständigen Spezifikation. Sie +unterstützt unter anderem die Kodierung von Inhalten mit GZip/Compress. + +## HTTP/1.1 + +Die Version 1.1 von HTTP wurde 1999 unter der [RFC 2616](https://tools.ietf.org/html/rfc2616) +publiziert. Neuerungen in dieser Version sind unter anderem das Wiederverwenden +einer bereits aufgebauten HTTP-Verbindung über mehrere HTTP-Anfragen hinweg +erlaubt (siehe `Keep-Alive` Header später). Außerdem erlaubt diese Version +auch das Herunterladen von Teilen einer Datei anstatt die gesamte Datei +herunterladen zu müssen, um zum Beispiel bereits angefangene Übertragungen +nahtlos fortzusetzen. + +Es werden auch weitere HTTP-Methoden neben `GET` und `POST` eingeführt, die +für das direkte Speichern, Löschen und Verwalten von Dateien auf einem Server +geeignet sind. Diese Methoden werden vor allem bei WebDAV eingesetzt. + +Später wurden über mehrere RFCs hinweg (7230-7235) einige Aspekte von HTTP/1.1 +noch einmal klarer spezifiziert um Unklarheiten zur Implementierung zu beseitigen. + +## HTTP/2 + +Zu dieser im Mai 2015 von der IETF verabschiedeten Version von HTTP wurde maßgeblich +beigetragen von Google und Microsoft, die jeweils Versuche gemacht haben, HTTP +in Hinsicht auf Geschwindigkeit und Latenz zu verbessern. Ein bekannter und +grundgebender Vorgänger dieser Version war das von Google kreierte SPDY-Protokoll. + +In dieser Version können mehrere Anfragen zusammengefasst werden ("Multiplex") +und dann zum Beispiel gemeinsam inklusive Headerdaten komprimiert werden, Inhalte +können binär kodiert übertragen werden und der Server kann von sich aus Inhalte +in den Client vorladen ("push"-Verfahren). + +HTTP/2 funktioniert — obwohl die Spezifikation das mittlerweile nicht mehr +strikt einschränkt — so gut wie nur noch auf TLS-verschlüsselten Verbindungen +("HTTPS"). Hintergrund ist der Gedanke, dass Verbindungen grundsätzlich +verschlüsselt sein sollten um vor allem Man-In-The-Middle-Attacken (MITM) +und ähnliche unerlaubte Zugriffe auf Klartextbasis zu verhindern. + +Diese Version von HTTP wird in der Analyse nicht behandelt, da die Verschlüsselung +und binäre Kodierung den Rahmen des Dokuments sprengt. + +# Analyse + +Die Analyse der Anfragen findet auf der obersten OSI-Schicht statt, also wird +nur der Inhalt der eigentlichen Anfrage analysiert, nicht die Daten auf TCP-, +IP- oder Ethernet-Schicht. + +Zum Auslesen der Anfragen und Antworten wird die Software Wireshark verwendet, +die vorher wie im folgenden Screenshot konfiguriert wurde: + +![](img/01-http/ss_config.png) + +Jede HTTP-Anfrage wird in einer TCP-Verbindung gekapselt, entsprechend wird zuerst mit TCP jeweils eine Verbindung per SYN-/ACK-Paketaustausch aufgebaut bevor die eigentliche HTTP-Anfrage verschickt wird: + +![](img/01-http/ss_log_tcp.png) + +Wireshark kann die eigentlich HTTP-Anfrage aus dem Paketstrom wieder zusammensetzen, indem man per Rechtsklick, Auswahl von "Folgen" und "TCP Stream" den Inhalt verfolgt: + +![](img/01-http/ss_follow.png) + +Unten stehende Anfragen und Antworten sind jeweils zusammenhängend. + +## `GET`-Anfrage + +![](img/01-http/ss_browser_get.png) + +### Anfrage + +```http +GET / HTTP/1.1 +Host: test.icedream.tech +Connection: keep-alive +Cache-Control: max-age=0 +User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 +Upgrade-Insecure-Requests: 1 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +DNT: 1 +Accept-Encoding: gzip, deflate +Accept-Language: en-US,en;q=0.9 +``` + +Die obige Anfrage wurde vom Chromium-Browser generiert, die Seite die hier aufgerufen +wurde ist http://test.icedream.tech. + +Die erste Zeile enthält die Information, dass diese Anfrage eine `GET`-Anfrage +ist, also keine Daten hochlädt sondern nur Daten anfordert. Sie enthält außerdem +die Information, dass Daten vom Pfad `/`, also dem Wurzelverzeichnis angefragt +werden. Zum Schluss gibt der Browser an, dass er auf der HTTP-Version 1.1 +kommuniziert. + +Nach der ersten Zeile folgen die eigentlichen Kopf- bzw. Headerinformationen +zu der Anfrage: + +- `Host` gibt an über welchen DNS-Hostnamen die Website erreicht wurde. Dies + erlaubt dem Webserver Seiten für verschiedene Domains anzubieten und über + den Hostnamen zu entscheiden welche Website ausgeliefert wird. +- `Connection` gibt an ob die Verbindung nach Verarbeitung dieser Anfrage und + Rückgabe der Antwort geschlossen wird oder nicht. Die meisten modernen + Browser wollen die TCP-Verbindung aus Leistungsgründen aufrecht erhalten + und geben daher hier den Wert `keep-alive` an. Ansonsten kann hier `close` + übergeben werden, dann schließt der Webserver nach Beantwortung diese + TCP-Verbindung. +- `Cache-Control` gibt Informationen zum Cachingverhalten des Browsers an. + Diese Information ist in der Regel irrelevant. +- `User-Agent` gibt einige Informationen über den Client an der genutzt wurde + um die HTTP-Anfrage zu generieren. In diesem Fall gibt der Browser an ein + Mozilla-kompatibler Browser zu sein (`Mozilla/5.0`). Die meisten modernen + Browser geben hier Mozilla aus historischen Gründen an und geben stattdessen + nebendran genauere Informationen an. In diesem Fall folgt, dass das + Betriebssystem des Browsers ein Linux-basiertes 64-Bit System mit einem + Desktop auf Basis von X11 ist, sowie dass der Browser die Apple WebKit-Engine + verwendet, sich wie Gecko verhält und es auch ein Chrome-Browser sowie + ein Safari-kompatibler Browser ist, da Safari eine ähnliche Engine verwendet. +- `Upgrade-Insecure-Requests` ist eine Anfrage die moderne Browser mitschicken + um den Webserver aus Sicherheitsgründen zu bitten, auf HTTPS umzuleiten, + wenn eine HTTPS-Alternative existiert. +- `Accept` enthält die Dateitypen, die der Browser von der Website akzeptieren + würde samt Präferenzwerten. +- `DNT` (*Do Not Track*) ist ein Header, der von modernen Browsern + mitgeschickt wird um anzudeuten, dass der Benutzer des Browsers sich ungerne + tracken lassen würde. +- `Accept-Encoding` gibt an, welche Kodierformate der Browser unterstützt um + den Inhalt wieder entziffern zu können, in diesem Fall akzeptiert der Browser + `gzip`- und `deflate`-kodierte Daten neben den bereits implizierten + Klartextdaten. Diese Information kann der Server nutzen um Traffic-sparenden + Inhalt zu liefern. +- `Accept-Language` gibt an, welche Sprachen der Browser vorzieht. Je nach + Sprache kann sich die Website dazu entscheiden, zum Beispiel die englische + Version einer Seite statt der deutschen auszuliefern. + +### Antwort + +```http +HTTP/1.1 200 OK +Content-Encoding: gzip +Content-Length: 760 +Content-Type: text/plain +Date: Mon, 22 Jan 2018 16:11:59 GMT +Server: Caddy +Server: Caddy +Server: Caddy +Vary: Accept-Encoding + +............[s.8....)...j.T.....<.0..MeQ..G....o.EB..w.n..e.d..~..t.:+H.<..s.w.4T..2...-..Od.2A.JkH6P.P"y'.......u%v.B............/. +=...{(.Vj..F[(.=l.m...g./Q ?.Piru.7Z..@Q.i.tU.,.We...i.."/uuu."..le...'......r\.C:.72.b......b +.m.t..dQ$*.Z..q.....j.|.A..KK.2...6E3.E..>.....k.B.Y..z.../U...n...Uvfz..t...}^.-.N..a...,.|Op.Fq*..e..}N......S?8...D5."...9.\8..Y.z......}[.@./.[......T...J.i.H.}Xw:_.Le..:.......E.. +6.J.........T.g-..;@.Dw.Gd..<.c.#m.....N...y+K.,;..u8....6.....!..F.......:m...H.t.^.g..|...S..w......w.........P..w.).nG#....!./i.q.u....b]..........j...,qnlT....J#.#...T....S.88M7*;K......I[...u/x..-.. .....Q.l......)..I...=.&z..[.SA....{..]|....p....)v.x.[r.y.....S_3....1.X.jw.N....9.C.A.../....6..7..k.Zu...r.-.".'berFq.?.....c3.?.....#1.-... +``` + +Die Header-Daten setzen sich hier wie folgt zusammen: + +- Die erste Zeile gibt die HTTP-Version des Servers (`HTTP/1.1`) und den + Statuscode für die Anfrage same Bedeutungstext (`200 OK`) zurück. +- `Content-Encoding` gibt an, dass der angefragte Inhalt kodiert wurde, und + wie der Inhalt kodiert wurde (in diesem Fall GZip-kodiert). +- `Content-Length` gibt die Länge des Inhalts in Bytes zurück. Dieser Header + ist tatsächlich optional und kann für endlos streamende Daten, wie z. B. + Livemedien (Icecast/Shoutcast o. Ä.) weggelassen werden. +- `Content-Type` gibt den MIME-Typen des Inhalts an. In diesem Fall wird ein + Klartextinhalt zurückgegeben. Würde der Inhalt auf einer Festplatte gespeichert + werden, hätte die Datei üblicherweise die Dateierweiterung `.txt` gehabt. + Weitere Beispiele wären: + - `text/html` (HTML-Inhalte), + - `application/javascript` (JavaScript-Ressourcen) + - `audio/mpeg` (MP3-Audiodateien) + - `video/mp4` (MP4-Videodateien) + - oder `image/jpeg` (JPEG-Bilder). +- `Date` beinhaltet das aktuelle Datum und die aktuelle Uhrzeit auf dem Server. +- `Server` gibt die Software aus auf der der Webserver läuft. In diesem Fall + wurden aufgrund eines Proxysetups auf dem Webserver mehrere Server-Header + hintereinander verschickt. +- `Vary` gibt Header an, die ein Cachingserver, der vor dem Webserver stehen + könnte, auswerten kann um zu entscheiden, ob bereits zwischengespeicherter + Inhalt für die gegebene Anfrage verwendet werden kann oder ob der Inhalt + aktualisiert werden muss. Für einen Browser ist dieser Header in der Regel + irrelevant. + +Der Inhalt ist in diesem Fall kodiert. Wurde kein `Content-Encoding` angegeben, +wäre der Inhalt im Klartext sichtbar. Die Seite hat zwar sogenannte AJAX-Kapabilitäten, sprich sie kann bereits im Hintergrund Informationen zur Suchanfrage abschicken, die hier dafür benutzt werden Suchanfragen vor dem Abschicken der eigentlichen Suche zu liefern, aber diese Anfragen ignorieren wir hier. + +## `POST`-Anfrage + +Für den Test einer solchen Frage bin ich auf die unverschlüsselte Version der Seite +http://wiki.selfhtml.org gegangen und habe das Loginformular dort verwendet mit diesen Eingaben: + +- Username: `testuser` +- Passwort: `testpasswort` +- Angemeldet bleiben: ja +- Vorherige Aktion: Suche nach Artikeln mit Wort `test` + +Natürlich sind diese Daten nicht in ihrer Nutzerdatenbank existent, wir verwenden sie hier nur zu Testzwecken. + +![](img/01-http/ss_selfhtml_login.png) + +```http +POST /index.php?title=Spezial:Anmelden&returnto=Spezial:Suche&returnquery=profile%3Ddefault%26fulltext%3DSearch%26search%3Dtest HTTP/1.1 +Host: wiki.selfhtml.org +User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Accept-Language: de,en-US;q=0.7,en;q=0.3 +Accept-Encoding: gzip, deflate +Referer: http://wiki.selfhtml.org/index.php?title=Spezial:Anmelden&returnto=Spezial:Suche&returnquery=profile%3Ddefault%26fulltext%3DSearch%26search%3Dtest +Content-Type: application/x-www-form-urlencoded +Content-Length: 204 +Cookie: webwiki_session=0v7632i2prj2ugc7mfjn60cbmle378fl +Connection: keep-alive +Upgrade-Insecure-Requestüs: 1 + +wpName=testuser&wpPassword=testpasswort&wpRemember=1&wploginattempt=Anmelden&wpEditToken=%2B%5C&title=Spezial%3AAnmelden&authAction=login&force=&wpLoginToken=c36f62fc9e3043163962cbb7530e29e35a69764f%2B%5C +``` + +Der eigentliche Unterschied zur `GET`-Anfrage ist eigentlich nur die Anfrage selbst. Die Antwort wird ähnlich, wenn nicht genau gleich aufgebaut sein wie bei der `GET`-Anfrage, da auf diese Anfrage wieder nur ein Inhalt ausgeliefert wird, auch wenn er dynamisch als Reaktion zum Login generiert wurde. + +- Die erste Zeile enthält jetzt als Methode `POST` statt `GET`. +- Der Client hat jetzt einen `Referer`-Header mitverschickt um anzudeuten von welcher Seite die Daten gekommen sind. +- Außerdem wurde ein `Cookie` mitverschickt, den der Client bei sich gespeichert hat um dem Server bei der Zuweisung von Sitzungsdaten zu helfen. +- Der Browser hat einen `Content-Length` Header verschickt. Wie bei der Antwort zu einer `GET`-Anfrage auch wird hier die Länge des verschickten Inhalts angegeben, in diesem Fall von dem Inhalt der mit der `POST`-Anfrage verschickt wurde. + +Nach den Headerdaten folgt ein Query als Inhalt, so wie man ihn auch von dynamischen Seiten von der Addresszeile kennt. Dieser Inhalt wird zu keinem Zeitpunkt dem Nutzer direkt angezeigt, sondern der gesamte Inhalt wird direkt vom Server ausgewertet. Das ist der Sinn und Zweck einer `POST`-Anfrage, nämlich Daten beliebiger Länge direkt dem Server zur Verarbeitung zukommen zu lassen. + +In diesem Query sind unter anderem folgende Daten enthalten (unklare oder unwichtige Daten habe ich hier weggelassen): + +- `wpName` mit Wert `testuser` — unser Username. +- `wpPassword` mit Wert `testpasswort` — unser Passwort. +- `wpRemember` mit Wert `1` — unsere Checkbox die sagt ob wir angemeldet bleiben wollen. Dafür wird auch unser Cookie verwendet. +- `wploginattempt` — Der Inhalt dieses Wertes ist der Inhalt des Absenden-Knopfs, `Anmelden`. Der Browser kann sich zwischen mehreren Absendknöpfen entscheiden und nur den Wert schicken, den der Benutzer auch angeklickt hat. +- `authAction` mit Wert `login` — gibt dem Server die Aktion an, die vom Formular angetriggert wird. +- `wpLoginToken` — enthält den Token für das Formular zum Login. Jedes Formular wird per sogenanntem "CSRF"-Token abgesichert um das Versenden eines solchen Formulars von einer fremden Seite zu vermeiden und der muss genau mit dem übereinstimmen was der Server erwartet. + +\clearpage + +# Quellenangaben + +Alle Quellen wurden zuletzt am 24.01.2018 geprüft. + +- https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol +- https://wiki.selfhtml.org/wiki/HTTP/WebDAV +- https://www.w3.org/Protocols/HTTP/1.0/spec.html +- https://www.w3.org/Protocols/HTTP/AsImplemented.html + +Analysen wurden erstellt auf Basis dieser Seiten + +- http://test.icedream.tech +- http://wiki.selfhtml.org diff --git a/02-Kittelberger_Carl_IP.md b/02-Kittelberger_Carl_IP.md new file mode 100644 index 0000000..ce2c25c --- /dev/null +++ b/02-Kittelberger_Carl_IP.md @@ -0,0 +1,199 @@ +--- +author: Carl Kittelberger +date: 2018-03-01 +title: "ITS: IP und ICMP" +institute: "Ferdinand-von-Steinbeis Berufsschule" +lang: de-DE +babel-lang: ngerman +babel-otherlangs: +- english +polyglossia-lang: + name: german + options: + - spelling=new +#subtitle: "Internet Protocol und Internet Control Message Protocol" +#classoption: draft +classoption: oneside +colorlinks: true +documentclass: report +fontsize: 12pt +logo: img/steinbeis.png +mainfont: Arial +papersize: a4 +sansfont: Arial +tables: true +template: template.tex + +toc: true + +header-includes: + + # For \textcolor + - \usepackage{xcolor} + + # Long tables (used by pandoc latex template itself) + #- \usepackage{longtable} + + # Localization to German for all package injections + #- \usepackage[ngerman]{babel} + + # Fancy header! + - \usepackage{fancyhdr} + - \usepackage{graphicx} + - \pagestyle{fancy} + - \fancyhf{} + - \fancyhead[L]{\large{\textit{\textbf{ITS} \\ IP und ICMP}}} + - \fancyhead[R]{\raisebox{-0.1\height}{\includegraphics[height=32pt]{img/steinbeis.png}}} + - \fancyfoot[L]{\textcolor{gray}{Carl Kittelberger}} + - \fancyfoot[R]{\textcolor{gray}{\bfseries{Seite \thepage}}} + - \renewcommand{\headrulewidth}{0.4pt} + - \renewcommand{\footrulewidth}{0.4pt} + - \setlength\headheight{36pt} + - \fancypagestyle{plain}{} + + # monospace + - \lstset{basicstyle=\footnotesize\ttfamily,breaklines=true} + - \lstset{framextopmargin=50pt} +--- + +\newpage + +# Analyse eines Pings + +Im Folgenden wurde die IP-Adresse `8.8.8.8` als Ziel für die Pinganfragen verwendet, +die untersucht werden. Die Pinganfragen wurden von einer VM mit Netzwerkbrücke +auf einem Ethernetadapter durchgeführt und Wireshark wurde zur Aufzeichnung +innerhalb der VM verwendet. + +![](img/02-ip/cmd_ping.png) + +![](img/02-ip/wireshark_ping.png) + +![](img/02-ip/wireshark_ping_reply.png) + +Im ersten Screenshot lässt sich ablesen, dass die *IP-Adresse des Computers* von +dem die Pinganfrage verschickt wurde **`192.168.188.52`** lautet. + +Der *Typ* des IP-Pakets ist als Wert **`1` (`ICMP`)** angegeben. + +Im IP-Paket sind insgesamt laut Wireshark **84 Bytes** enthalten, davon belegt der +*IP-Header* **20 Bytes**, die restlichen **64 Bytes** sind die tatsächliche +*Nutzlast* des IP-Pakets, die aus der ICMP-Nachricht besteht. + +Die *Roundtrip Time (RTT)* ist der Zeitabstand zwischen Versand des Anfragepakets +und Erhalten des Antwortpakets. Im Screenshot sieht man als Interval für die +erste Anfrage (Pakete 1 und 2) **etwa 15,05 Millisekunden**. + +Die *Identifikationsnummern* lauten laut Wireshark für das IP-Paket selbst +`0x7566 (30054)` und das ICMP-Paket selbst hat die Identifikationsnummern +im *Big-Endian-Format (BE)* `3533` oder `0x0dcd` bzw. im *Little-Endian-Format (LE)* +`52493` oder `0xcd0d`. Im zweiten Screenshot sieht man, dass die Identifikationsnummern +für das Antwortpaket genau gleich sind. Wären diese Nummern verschieden, könnte +die Antwort der Anfrage nicht mehr zugeordnet werden. + +Das IP-Paket der Anfrage wurde nicht fragmentiert. Fragmentiert ist ein Paket erst dann, +wenn es beim Versenden in mehrere Teile aufgespalten wurde und der entsprechende +Flag für die Fragmentierung im IP-Header gesetzt wurde, was hier nicht der Fall ist +(der Flag ist `0x4000` was Wireshark entsprechend als `Don't fragment` anzeigt). + +## Analyse eines fragmentierten Pings + +### Ping mit 2000 Bytes Inhalt + +![](img/02-ip/wireshark_ping_2000.png) + +Die *IP-Adressen* haben sich nicht geändert. + +Der IP-Header enthält als *Typ* ebenso noch den gleichen Wert. + +Die Headergröße hat sich ebenfalls nicht verändert, aber die Größe der *Nutzlast* +ist jetzt auf **1500 Bytes** angewachsen. Die restlichen **500 Bytes** finden +sich in einem Folgepaket das aufgrund der Fragmentierung mitgeschickt wurde. + +Die *Roundtrip Time* beträgt jetzt **16,93 Millisekunden** (Unterschied Paket 1 zu 3). + +### Ping mit 3500 Bytes Inhalt + +![](img/02-ip/cmd_ping_3500.png) + +![](img/02-ip/wireshark_ping_3500.png) + +Die Änderungen sind ähnlich wie oben, außer dass die *Nutzlast* des ersten Pakets +sich nicht mehr ändert und **1500 Bytes** beträgt. Dafür ist ein weiteres Teilpaket +dazugekommen, bei dem der zusätzliche Inhalt angehängt wurde. + +Die *Roundtrip Time* beträgt jetzt **15,80 Millisekunden** (Unterschied Paket 1 zu 4). + +\clearpage + +# Analyse der Fragmentierung + +In dieser Analyse scheinen Daten über 1500 Bytes fragmentiert zu werden. Beide +Pakete (2000 Bytes und 3500 Bytes) wurden in max. 1500 Bytes große Datenteile +aufgespalten und dann nacheinander verschickt. + +Die wichtige Identifikationsnummer für fragmentierte Pakete ist die `Identification` +im IP-Header, nicht die `Identifier`-Felder im ICMP-Paket, denn dieses wurde +in mehrere Teile zerspaltet und um das Paket zusammensetzen zu können muss stattdessen +die Quelle mehrere Pakete mit dem gleichen Identifizierer verschicken. Entsprechend sehen wir im obigen Screenshot, dass die IP-ID der Folgepakete in der Übersicht die gleiche ID haben wir der IP-Header des ersten Pakets. + +Während der Analyse konnten wir kaum wertvolle Informationen zur Änderung der +*Roundtrip Time* abhängig von der Fragmentierung gewinnen. In der Theorie braucht +es länger, größere Datenmengen zu verschicken, vor allem wenn diese vorher in mehrere +Teile aufgespalten wurden und für jeden Teil ein weiterer Header mitverschickt wird. +Die Übertragung läuft jedoch hier in der Praxis so schnell ab, dass andere Abweichungen +in der Übertragung sich stärker in der RTT abbilden. + +\clearpage + +# Analyse einer Routenverfolgung + +Im Folgenden wurde `reutlingen.de` explizit über IPv4 als Ziel für die Routenverfolgung +verwendet. Das Tool das eingesetzt wurde ist `tracepath` (mit entsprechendem `-4` Flag). + +![](img/02-ip/tracepath_reutlingen.png) + +![](img/02-ip/wireshark_tracepath_1.png) + +![](img/02-ip/wireshark_tracepath_2.png) + +Wireshark registriert eine Sequenz von Paketen vom Typ DNS, UDP und meistens ICMP als Antwort. +Die Pakete der eigentlichen Anfragen zur Routenverfolgung werden über **UDP** versendet. +Dabei fällt auf, dass die UDP-Pakete von oben nach unten beginnend von einer *Time-To-Live (TTL)* +**von `1` inkrementierend größere Werte** (`2`, dann `3`, usw.) zugewiesen bekommen. + +Die *Antwort* auf alle Pakete ist immer ein **ICMP**-Paket. Alle Antworten bis auf +das letzte Paket sind ein **ICMP-Paket mit der Nachricht "Time-to-live exceeded"**. +Diese Antwort wird von dem jeweiligen routenden Knotenserver selbst verschickt +und daran misst `tracepath` die Zeit und die Reaktionsfähigkeit des jeweiligen +Knotens. + +Die *ersten beiden Knotenpunkte* in diesem Fall sind: + +- `192.168.188.1` (`fritz.box`) - der Router im lokalen Netzwerk. +- `62.214.63.94` (`i59F4DCE4.versanet.de`) - der erste externe Router aus dem ISP-Netzwerk. + +\clearpage + +# ICMP + +![](img/02-ip/wireshark_icmp.png) + +Ein ICMP-Paket ist wie folgt aufgebaut: + +- **`Type`** - ein Wert der die Art der ICMP-Nachricht angibt, z. B. `8` für eine Echo-Anfrage oder `11` für *Time-to-live exceeded*. **Weitere Typen** wären: + - `0` - Echo Reply + - `3` - Destination Unreachable + - `5` - Redirect (IP-Umleitung) + - `9` - Router Advertisement (wird benutzt um einem Rechner den Router bekannt zu machen zur IP-Vergabe). Gegenstück dazu: `10` (Router Solicitation) + - `12` - Parameter Problem (bei ungültigen Inhalten in einer ICMP-Anfrage) + - `13` - Timestamp. Gegenstück: `14` (Timestamp Reply) +- **`Code`** - ein separater Code zur Angabe einer Fehlerursache oder eines anderen Details +- **`Checksum`** - ein Hash des Pakets zum Sicherstellen einer korrekten Übertragung +- **Informationen zu ursprünglichen Anfragepaketen**, meisten IP-Paket und dessen Inhalt. Aufgrund der Informationen die hier enthalten sind (wie der Identifizierer) weiß der Empfänger der Nachricht **basiend auf diesen Informationen auf welche ursprünglich gesendeten Pakete sich diese ICMP-Meldung bezieht.** + +\clearpage + +# Quellenangaben + +- https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml#icmp-parameters-types diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1fe4d6c --- /dev/null +++ b/Makefile @@ -0,0 +1,52 @@ +PANDOC = pandoc +LATEX = lualatex +LATEX_FLAGS = \ + -file-line-error \ + -recorder \ + -interaction=nonstopmode \ + -halt-on-error \ + --shell-escape +PANDOC_FLAGS = --top-level-division=section +PANDOC_TEX_FLAGS = --template=template.tex +PANDOC_TEX_DEPENDENCIES = template.tex +SOFFICE = soffice +SOFFICE_FLAGS = --headless + +MARKDOWN_INPUTS = $(wildcard *.md) + +.PHONY: all build clean clean-pdf clean-tex clean-odt clean-docx default + +TEXINPUTS := .:./pkg/:$(TEXINPUTS) +export TEXINPUTS + +default: all + +all: all-tex all-pdf + +all-tex: $(addsuffix .tex,$(basename $(MARKDOWN_INPUTS))) + +all-pdf: $(addsuffix .pdf,$(basename $(MARKDOWN_INPUTS))) + +clean: clean-pdf clean-tex + +clean-tex: + rm -f $(addsuffix .tex,$(basename $(MARKDOWN_INPUTS))) + +clean-pdf: + rm -f \ + $(addsuffix .aux,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .pdf,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .out,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .fls,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .log,$(basename $(MARKDOWN_INPUTS))) \ + $(addsuffix .toc,$(basename $(MARKDOWN_INPUTS))) \ + missfont.log + +%.pdf: %.tex $(PANDOC_TEX_DEPENDENCIES) + @echo $< "->" $@ + $(LATEX) $(LATEX_FLAGS) $(LATEX_PDF_FLAGS) $< 1>/dev/null + $(LATEX) $(LATEX_FLAGS) $(LATEX_PDF_FLAGS) $< 1>/dev/null + +%.tex: %.md + @echo $< "->" $@ + $(PANDOC) $(PANDOC_FLAGS) $(PANDOC_TEX_FLAGS) --listings -s $< -o $@ diff --git a/img/00-dateisysteme/abbildung_a.png b/img/00-dateisysteme/abbildung_a.png new file mode 100644 index 0000000..7bef503 Binary files /dev/null and b/img/00-dateisysteme/abbildung_a.png differ diff --git a/img/00-dateisysteme/abbildung_a.svg b/img/00-dateisysteme/abbildung_a.svg new file mode 100644 index 0000000..b4314d0 --- /dev/null +++ b/img/00-dateisysteme/abbildung_a.svg @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Spur + + + + + + + + + + + + + + + + + + + + + + + + + + Sektor + + + + + + + + + \ No newline at end of file diff --git a/img/00-dateisysteme/abbildung_b.png b/img/00-dateisysteme/abbildung_b.png new file mode 100644 index 0000000..6b362da Binary files /dev/null and b/img/00-dateisysteme/abbildung_b.png differ diff --git a/img/01-http/ss_browser_get.png b/img/01-http/ss_browser_get.png new file mode 100644 index 0000000..4c8d872 Binary files /dev/null and b/img/01-http/ss_browser_get.png differ diff --git a/img/01-http/ss_config.png b/img/01-http/ss_config.png new file mode 100644 index 0000000..3e0a8cc Binary files /dev/null and b/img/01-http/ss_config.png differ diff --git a/img/01-http/ss_follow.png b/img/01-http/ss_follow.png new file mode 100644 index 0000000..521b5d0 Binary files /dev/null and b/img/01-http/ss_follow.png differ diff --git a/img/01-http/ss_log_tcp.png b/img/01-http/ss_log_tcp.png new file mode 100644 index 0000000..111e29f Binary files /dev/null and b/img/01-http/ss_log_tcp.png differ diff --git a/img/01-http/ss_selfhtml_login.png b/img/01-http/ss_selfhtml_login.png new file mode 100644 index 0000000..3dc78f8 Binary files /dev/null and b/img/01-http/ss_selfhtml_login.png differ diff --git a/img/02-ip/cmd_ping.png b/img/02-ip/cmd_ping.png new file mode 100644 index 0000000..052a50c Binary files /dev/null and b/img/02-ip/cmd_ping.png differ diff --git a/img/02-ip/cmd_ping_2000.png b/img/02-ip/cmd_ping_2000.png new file mode 100644 index 0000000..b7be132 Binary files /dev/null and b/img/02-ip/cmd_ping_2000.png differ diff --git a/img/02-ip/cmd_ping_3500.png b/img/02-ip/cmd_ping_3500.png new file mode 100644 index 0000000..ba93951 Binary files /dev/null and b/img/02-ip/cmd_ping_3500.png differ diff --git a/img/02-ip/tracepath_reutlingen.png b/img/02-ip/tracepath_reutlingen.png new file mode 100644 index 0000000..90463ca Binary files /dev/null and b/img/02-ip/tracepath_reutlingen.png differ diff --git a/img/02-ip/wireshark_icmp.png b/img/02-ip/wireshark_icmp.png new file mode 100644 index 0000000..6dd8d34 Binary files /dev/null and b/img/02-ip/wireshark_icmp.png differ diff --git a/img/02-ip/wireshark_ping.png b/img/02-ip/wireshark_ping.png new file mode 100644 index 0000000..f14c27b Binary files /dev/null and b/img/02-ip/wireshark_ping.png differ diff --git a/img/02-ip/wireshark_ping_2000.png b/img/02-ip/wireshark_ping_2000.png new file mode 100644 index 0000000..6ff6c63 Binary files /dev/null and b/img/02-ip/wireshark_ping_2000.png differ diff --git a/img/02-ip/wireshark_ping_3500.png b/img/02-ip/wireshark_ping_3500.png new file mode 100644 index 0000000..64830ae Binary files /dev/null and b/img/02-ip/wireshark_ping_3500.png differ diff --git a/img/02-ip/wireshark_ping_reply.png b/img/02-ip/wireshark_ping_reply.png new file mode 100644 index 0000000..9343b60 Binary files /dev/null and b/img/02-ip/wireshark_ping_reply.png differ diff --git a/img/02-ip/wireshark_tracepath_1.png b/img/02-ip/wireshark_tracepath_1.png new file mode 100644 index 0000000..38eed92 Binary files /dev/null and b/img/02-ip/wireshark_tracepath_1.png differ diff --git a/img/02-ip/wireshark_tracepath_2.png b/img/02-ip/wireshark_tracepath_2.png new file mode 100644 index 0000000..dd2ee55 Binary files /dev/null and b/img/02-ip/wireshark_tracepath_2.png differ diff --git a/img/steinbeis.png b/img/steinbeis.png new file mode 100644 index 0000000..bd9a2df Binary files /dev/null and b/img/steinbeis.png differ diff --git a/template.tex b/template.tex new file mode 100644 index 0000000..a44bddc --- /dev/null +++ b/template.tex @@ -0,0 +1,415 @@ +\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} +$endif$ +% +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$if(beamer)$ignorenonframetext,$if(handout)$handout,$endif$$if(aspectratio)$aspectratio=$aspectratio$,$endif$$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} +$if(beamer)$ +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provides euro and other symbols +\else % if luatex or xelatex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(colorlinks)$ +\usepackage{xcolor} +$endif$ +\usepackage{hyperref} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% These lines are needed to make table captions work with longtable: +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(beamer)$ +% Prevent slide breaks in the middle of a paragraph: +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ +\centering +\begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par +\end{beamercolorbox} +} +\setbeamertemplate{section page}{ +\centering +\begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par +\end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ +\centering +\begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par +\end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(beamer)$ +$else$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +%\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +%\else +% % load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic) +% \usepackage{polyglossia} +% \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ +% \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +%\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +$if(institute)$ +\providecommand{\institute}[1]{} +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +\date{$date$} +$if(beamer)$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + +\begin{document} +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(beamer)$ +\begin{frame} +\tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$body$ + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} +\bibliographytrue +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} +\bibliographytrue +\printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document}