Initial commit.
|
@ -0,0 +1,96 @@
|
|||
## 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
|
||||
/*.odt
|
||||
/*.docx
|
||||
|
||||
# Aufgabenblatt
|
||||
!AA_*.pdf
|
|
@ -0,0 +1,187 @@
|
|||
---
|
||||
author: Carl Kittelberger
|
||||
title: "ITS: \\ IP und ICMP"
|
||||
date: 2018-03-01
|
||||
|
||||
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} \\ 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.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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).
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
|
@ -0,0 +1,73 @@
|
|||
PANDOC = pandoc
|
||||
LATEX = lualatex
|
||||
LATEX_FLAGS = \
|
||||
-file-line-error \
|
||||
-recorder \
|
||||
-interaction=nonstopmode \
|
||||
-halt-on-error \
|
||||
--shell-escape
|
||||
PANDOC_FLAGS = --top-level-division=section
|
||||
PANDOC_DOCX_FLAGS = --reference-doc=pandoc/reference.docx
|
||||
PANDOC_ODT_FLAGS = --reference-doc=pandoc/reference.odt
|
||||
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-docx all-odt all-pdf all-tex
|
||||
|
||||
all-tex: $(addsuffix .tex,$(basename $(MARKDOWN_INPUTS)))
|
||||
|
||||
all-docx: $(addsuffix .docx,$(basename $(MARKDOWN_INPUTS)))
|
||||
|
||||
all-odt: $(addsuffix .odt,$(basename $(MARKDOWN_INPUTS)))
|
||||
|
||||
all-pdf: $(addsuffix .pdf,$(basename $(MARKDOWN_INPUTS)))
|
||||
|
||||
clean: clean-docx clean-odt clean-pdf clean-tex
|
||||
|
||||
clean-docx:
|
||||
rm -f $(addsuffix .docx,$(basename $(MARKDOWN_INPUTS)))
|
||||
|
||||
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
|
||||
|
||||
clean-odt:
|
||||
rm -f $(addsuffix .odt,$(basename $(MARKDOWN_INPUTS)))
|
||||
|
||||
%.docx: %.odt
|
||||
$(SOFFICE) $(SOFFICE_FLAGS) --convert-to docx $<
|
||||
|
||||
%.odt: %.md
|
||||
@echo $< "->" $@
|
||||
tmpname=$(shell mktemp ~.tmp_XXXXXX.odtpandoc) &&\
|
||||
$(PANDOC) $(PANDOC_FLAGS) $(PANDOC_ODT_FLAGS) $< -o "$$tmpname" &&\
|
||||
$(SOFFICE) $(SOFFICE_FLAGS) --convert-to odt "$$tmpname" &&\
|
||||
rm -f "$$tmpname" &&\
|
||||
mv "$$(basename "$$tmpname" .odtpandoc).odt" $@
|
||||
|
||||
%.pdf: %.tex
|
||||
@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 $@
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 152 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 148 KiB |
After Width: | Height: | Size: 153 KiB |
After Width: | Height: | Size: 354 KiB |
After Width: | Height: | Size: 356 KiB |