Anfang
Inhalt
Einleitung
Erste Schritte
Die Bash
Das Dateisystem
Nutzerkommandos
Installation
Shells
Unix-Werkzeuge
System-Administration
X Window System
Der Kernel
Netzwerk Grundlagen
Geschichte
Protokolle
Netzwerkstruktur
Allgemeine Dienste
Konfigurationsdateien
Konfigurationstools
Diagnose
Internet Service Dämon
Remote Procedure Call
Request For Comments
Netzwerk Clients
Netzwerk Server
Netzwerk Sicherheit
Anhang
Register
|
Das eine oder andere hier aufgeführte Kommando finden Sie auch an anderen Stellen des Buches. Der
hiesige Schwerpunkt liegt auf Netzwerkdiagnose, d.h. auf der Verwendung der Kommandos zur Analyse von
Netzwerkproblemen. Deshalb finden sie zu Kommandos, die auch für andere Zwecke eingesetzt werden können,
im folgenden Abschnitt einzig die zur Inspektion der Netzwerkfunktionalität relevanten Optionen.
Die Fehlersuche gestaltet sich zumeist schwierig. Sie erfordert eine gewisse Methodik, um sich aus der Masse
der Möglichkeiten zur wahrscheinlichsten Ursache vorzuarbeiten. Die Reihenfolge der Beschreibung der Ihnen
als Administrator zur Seite stehenden Werkzeuge spiegelt die von uns bevorzugte Herangehensweise ab. Wir hangeln uns
vom Allgemeinen ins Detail, beginnend bei einfacher Funktionsprüfung bis hin zu Maßnahmen der Optimierung.
Vorwort
Funktional besteht kein Unterschied zwischen ping (IPv4) und ping6
(IPv6), sodass wir in nachfolgender Beschreibung auf eine Unterscheidung verzichten.
Verwenden Sie ping in traditionellen IPv4-Netzwerken und ping6 in Netzwerken, die unter IPv6 laufen.
Sollten Sie dennoch einmal einem der Kommandos die »falsche« IP-Adresse unterschieben, so
wird dieses den Dienst mit »unknown host« quittieren:
user@sonne> ping ::1
ping: unknown host :1
user@sonne> ping6 ::1
PING ::1 (::1): 56 data bytes
64 bytes from ::1: icmp_seq=0 ttl=64 time=0.054 ms
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.052 ms
...
|
Das Kommando ping greift auf Systemressourcen zu, die i.d.R. nur für root
zugänglich sind. Um dem »normalen« Benutzer dennoch seine Anwendung zu ermöglichen,
ist zumeist das setuid-root Flag gesetzt.
Allgemeines
ping dient vorrangig zum Testen, Messen und Administrieren von Netzwerken. Es erhöht die
Netzwerklast, womit sein Einsatz in automatischen Skripten in Produktionsumgebungen zu vermeiden ist.
»Ping« wurde nach dem Klang von Sonar-Ortungssystemen benannt, wo niederfrequenter Schall
in die Tiefen des Ozeans ausgesandt wird, um anhand von Reflexionen den Standort von Objekten zu
kalkulieren. Im übertragenen Sinne arbeitet »Ping« analog zu einem Sonar, da es eine
Anforderung ins Netzwerk entlässt und anhand der Art und Weise der Reaktion (»Reflexion«)
verschiedene Rückschlüsse zu ziehen vermag. Welche das sein können, werden Sie nachfolgend
kennen lernen.
Intern arbeitet ping über das ICMP-Protokoll, indem es ein
ICMP ECHO_REQUEST (Typ 8) an den entfernten Rechner im Netzwerk sendet, um (hoffentlich) ein
ECHO_RESPONSE (Typ 0) als Antwort zu erhalten.
Wichtigste Erkenntnis aus einem ECHO_RESPONSE ist sicherlich, dass die Gegenseite arbeitet und
erreichbar ist. Aussagen zur Qualität der Erreichbarbeit lassen sich ebenso ableiten.
Die Anwendung des Kommandos
Zumindest der Zielrechner ist beim Aufruf des Kommandos als Parameter anzugeben. Ohne weitere Optionen
werden ständig ECHO_REQUEST's ausgesendet, d.h. der Zielrechner wird ohne Unterlass
»angepingt«. Dies können Sie nur durch Eingabe von [Ctrl][C] unterbrechen. ping
schreibt abschließend eine kurze Zusammenfassung auf die Standardausgabe:
user@sonne> ping localhost
PING localhost (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.143 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.124 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.123 ms
[Ctrl][C]
--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% loss, time 1998ms
rtt min/avg/max/mdev = 0.123/0.130/0.143/0.009 ms
|
[Ctrl][C] bewirkt das Senden des Signals SIGINT an den Prozess, das im Falle
von ping zum Beenden des Programms führt. ping reagiert ebenso auf
ein Signal SIGQUIT, womit die Statistik erscheint, ohne das Programm zu beenden.
SIGQUIT wird durch keinen Tastencode erzeugt.
Die Statistik
Das Ausgabeformat der Statistik ist zum Großteil selbsterklärend. Eine erste Zeile enthält
die Anzahl ausgesendeter und empfangener Pakete sowie den Verlustfaktor (in Prozent). Ein letzter Wert
gibt die Gesamtzeit des Programmlaufs an.
Die zweite Zeile umfasst vier Zeitwerte. Erster beschreibt die kürzeste Zeitspanne, nach der
eine Antwort auf ein ausgesendetes Paket eintraf. Der zweite Wert enthält die längste gemessener
Dauer. Dritter Wert ist die durchschnittliche Zeitdauer und Wert Nummer 4 beschreibt die gemittelte
Abweichung vom durchschnittlichen Wert.
Die Optionen
Allgemeine Optionen
Etliche Optionen von ping lassen sich nach funktionalen Aspekten gruppieren. Aber eben nicht alle.
Die nach unserem Schema nicht »qualifizierbaren« Optionen fassen wir deshalb als
»allgemeine« Optionen zusammen. Diese Einteilung ist rein willkürlich!
Die weiter oben beschriebene Anwendung des Kommandos eignet sich nicht zur Verwendung in Skripten, da
es zum Beenden eine Interaktion mit dem Benutzer erfordert. Zwei Optionen steuern deshalb das
Programmende:
-c Anzahl |
|
Begrenzt die Anzahl zu sendender »Pings«. Nach Erreichen dieser
endet das Programm selbstätig. |
-w Sekunden |
|
Nach Verstreichen der angegebenen Sekunden endet das Programm selbstätig
unabhängig von der Anzahl gesendeter bzw. erhaltenener Pakete. |
In Verbindung mit beiden Optionen steht Ihnen zur Auswertung der Rückgabewert des
Kommandos ping zur Verfügung. Hierbei bedeutet:
0 |
|
Der Zielrechner ist erreichbar; es wurde mindestens ein ECHO_RESPONSE
empfangen.
|
1 |
|
Es wurde entweder gar kein ECHO_RESPONSE empfangen oder, bei gleichzeitiger
Verwendung der Optionen »-w« und »-c«, die
spezifizierte Anzahl wurde nicht erreicht (weniger »Pongs« als »Pings«).
|
2 |
|
Nicht näher spezifizierter Fehler. |
Zwei Beispiele zur Auswertung des Rückgabewertes:
user@sonne> ping -c 1 localhost
PING localhost (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.158 ms
--- localhost ping statistics ---
1 packets transmitted, 1 received, 0% loss, time 0ms
rtt min/avg/max/mdev = 0.158/0.158/0.158/0.000 ms
user@sonne> echo $?
0
|
user@sonne> for host in server1 server1;
> do
> ping -c 1 $host 2>&1 > /dev/null || echo "Rechner $host nicht erreichbar!"
> done
|
Eher formalen Charakter besitzen folgende Optionen:
-a |
|
Für jedes eintreffende ECHO_REPLY wird ein Piepton ausgegeben. Die
Erreichbarkeit eines Rechners wird damit akkustisch signalisiert.
|
-n |
|
Rechner werden stets mit ihrer IP-Adresse angegeben (und nicht mit ihrem Namen).
|
-q |
|
Sämtliche Ausgaben mit Ausnahme der ersten Zeile und der Statistik werden
unterdrückt.
|
Optionen zur Steuerung des Zeitverhalten
In der Voreinstellung versendet ping seine Anforderungen im Sekundentakt. Die
Optionen zur Manipulation des Zeitverhaltens erfordern teils Rootrechte, da sie
zu extremer Erhöhung der Netzwerklast missbraucht werden könnten.
-i Sekunden |
|
Die Option legt die Zeitspanne in Sekunden zwischen dem Aussenden
zweier aufeinander folgender ICMP_REQUEST's fest. Nur Root
darf einen Wert < 0.2 (Sekunden) wählen.
|
-f |
|
(flood ping). Dieses »flutende« Ping entspricht der Option
»-i 0«, d.h. die ICMP_REQUEST werden ohne Verzögerung abgesetzt.
Das Setzen der Option bleibt einzig Root vorbehalten.
Jedes gesendete ICMP_REQUEST-Paket wird in der Ausgabe durch einen Punkt
symbolisiert, der bei eintreffendem ICMP_RESPONSE durch einen Backspace »\b«
gelöscht wird. Die Anzahl Punkte entspricht somit der Anzahl ausstehender Antworten.
|
-l Anzahl |
|
Die Wirkungsweise der Option ist wie »-f« nur dass sie die Anzahl zu sendender
ICMP_REQUEST's beschränkt. Nur Root darf mehr als 3 Pakete gleichzeitig abschicken.
|
-t TimeToLive |
|
Der so genannte TTL-Wert (Time To Live) entspricht der Anzahl von Routern, die
ein Paket maximal passieren kann. Jeder Router auf dem Weg des Pakets verringert dessen
TTL-Wert stets um eins. Geht der Wert in einem Router auf Null, so wird dieser das Paket
verwerfen und eine Fehlermeldung an den Absender senden. Die Bezeichnung Time to live
stammt noch aus den Anfängen von TCP/IP, zu denen tatsächlich die Lebensdauer
eines Pakets durch einen Zeitwert begrenzt wurde.
Die Voreinstellung für TTL ist 255.
|
# Falls 3 Router auf dem Weg liegen...
user@sonne> ping -c 1 rechner.irgendwo.foo
PING rechner.irgendwo.foo (192.168.99.125) from 192.168.239.100 : 56(84) bytes of data.
64 bytes from rechner.irgendwo.foo (192.168.99.125): icmp_seq=1 ttl=252 time=3.92 ms
--- rechner.irgendwo.foo ping statistics ---
1 packets transmitted, 1 received, 0% loss, time 0ms
rtt min/avg/max/mdev = 3.926/3.926/3.926/0.000 ms
|
Der TTL-Wert in der Endstatistik (obiges Beispiel) wird von dem Rechner gesetzt, der
»angepingt« wurde.
Die Interpretation des Wertes gestaltet sich schwierig, da es keine feste Regeln gibt, nach denen ein Rechner
das Feld belegt. Manche Implementierungen schreiben dort einen Wert, der 255 minus der Anzahl der durchlaufenen
Router beträgt. Wiederum andere Rechner verändern den Wert auf 255 oder auf einen Wert, der durch ein
übergeordnetes Protokoll des TCP/IP-Protollstacks vorgegeben wird (bspw. arbeitet
Telnet mit einen TTL-Wert von 60 oder 30).
Theoretisch ist es also möglich, dass ein Rechner per ping erreichbar ist, der Kontakt via
Telnet aber scheitert (wegen des zu geringen TTL-Wertes von Telnet). Praktisch wird ein solcher Fall kaum
auftreten, da eine Vermittlung über mehr als 30 Router ein sicheres Indiz für eine Fehlkonfiguration
ist (eine Schleife).
Optionen zur Beeinflussung der Testdaten
Im Abschnitt Netzwerkprotokolle finden Sie eine Beschreibung des Aufbaus
eines ICMP-Protokollkopfes. Uns interessiert im Folgenden das in der
dortigen Skizze als »Optionale Daten« bezeichnete Feld. Dessen Gröszlig;e findet
sich in der Ausgabe des ping-Kommandos wieder:
user@sonne> ping -c 1 localhost | head -1
PING localhost (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.
|
Per Voreinstellung verpackt ping 56 Bytes Daten in ein Paket. Dieser Wert trägt auch
zur zweiten, in Klammern stehenden Angabe bei. Diese 84 Bytes im Beispiel errechnen sich aus den
20 Bytes des IP-Protokollkopfes, aus 8 Bytes, die Laufzeitinformationen des Pakets enthalten und eben
den 56 Datenbytes.
Die Paketgröße ist konfigurierbar:
-s Paketgröße |
|
Setzt die Größe des Datenpakets auf den angegebenen Wert (in Bytes).
|
Die Option eignet sich insbesondere zur Diagnose von Netzwerkproblemen, die auf
Probleme mit der Paketgröße hindeuten.
user@sonne> ping -c 1 -s 0 localhost | head -1
PING localhost (127.0.0.1) from 127.0.0.1 : 0(28) bytes of data.
root@sonne> ping -c 1 -s 65508 localhost | head -1
WARNING: packet size 65508 is too large. Maximum is 65507
ping: local error: Message too long, mtu=16436
|
In letztem Beispiel provozierten wir einen Überlauf, indem wir ein für IP zu großes Datenpaket
verwendeten (das Maximum ist fest im Programm implementiert, da hilft auch keine Änderung an der MTU).
Selbst das Muster der Testdaten kann per Option eingestellt werden:
-p Muster |
|
Muster ist ein 16 Bytes großer Wert, der als Hexadezimalzahl anzugeben ist.
»-p FF« führt zu Testdaten, die aus einer Folge von 1-Bits bestehen.
|
user@sonne> ping -p xx localhost
ping: patterns must be specified as hex digits.
user@sonne> ping -p ff -c 1 localhost | head -1
PATTERN: 0xff
|
Optionen zum Routing
Ein ausbleibendes ECHO_REQUEST muss nicht den Ausfall des Zielrechners bedeuten. Ebensogut
könnte einer der Vermittlerstellen (Router, Gateway,...) streiken. Die Aufzeichnung der
Wegstrecke, die ein Paket passierte, kann unter Umständen weiter helfen:
-R |
|
Aufzeichnen der Hin- und Rückroute, die ein ICMP-Paket durchläuft.
|
user@sonne> ping -c 2 -R lkap1073
PING lkap1073.meine-firma.de (191.0.9.104) from 187.0.34.197 : 56(124) bytes of data.
64 bytes from lkap1073.meine-firma.de (191.0.9.104): icmp_seq=1 ttl=127 time=1.35 ms
NOP
RR: lkcp38.meine-firma.de (187.0.34.197)
zsnr2-if17-vl10.meine-firma.de (191.0.100.10)
lkap1073.meine-firma.de (191.0.9.104)
lkcr2.meine-firma.de (187.0.34.10)
lkcp38.meine-firma.de (187.0.34.197)
64 bytes from lkap1073.meine-firma.de (191.0.9.104): icmp_seq=2 ttl=127 time=1.35 ms
NOP (same route)
--- lkap1073.meine-firma.de ping statistics ---
2 packets transmitted, 2 received, 0% loss, time 1002ms
rtt min/avg/max/mdev = 1.350/1.351/1.352/0.001 ms
|
Die Erreichbarkeit aller Rechner eines Netzwerks kann mit einem Broadcast erreicht werden:
-b |
|
»Broadcast-Ping« an alle Rechner eines angegebenen Netzwerks.
|
Da alle Rechner einunddasselbe Paket erhalten, entstehen Duplikate bei der Antwort,
die ping durch ein nachgestellten DUP! in der Ausgabe kennzeichnet:
user@sonne> ping -b -c 2 187.0.34.0
WARNING: pinging broadcast address
PING 187.0.34.0 (187.0.34.0) from 187.0.34.197 : 56(84) bytes of data.
64 bytes from 187.0.34.197: icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from 187.0.34.236: icmp_seq=1 ttl=255 time=0.163 ms (DUP!)
64 bytes from 187.0.34.206: icmp_seq=1 ttl=255 time=0.211 ms (DUP!)
64 bytes from 187.0.34.196: icmp_seq=1 ttl=255 time=0.213 ms (DUP!)
64 bytes from 187.0.34.181: icmp_seq=1 ttl=255 time=0.220 ms (DUP!)
64 bytes from 187.0.34.174: icmp_seq=1 ttl=255 time=0.243 ms (DUP!)
64 bytes from 187.0.34.133: icmp_seq=1 ttl=255 time=0.245 ms (DUP!)
64 bytes from 187.0.34.159: icmp_seq=1 ttl=255 time=0.247 ms (DUP!)
64 bytes from 187.0.34.134: icmp_seq=1 ttl=255 time=0.368 ms (DUP!)
64 bytes from 187.0.34.167: icmp_seq=1 ttl=255 time=0.371 ms (DUP!)
64 bytes from 187.0.34.164: icmp_seq=1 ttl=255 time=0.373 ms (DUP!)
64 bytes from 187.0.34.11: icmp_seq=1 ttl=255 time=0.432 ms (DUP!)
64 bytes from 187.0.34.10: icmp_seq=1 ttl=255 time=0.435 ms (DUP!)
64 bytes from 187.0.34.194: icmp_seq=1 ttl=255 time=0.471 ms (DUP!)
64 bytes from 187.0.34.132: icmp_seq=1 ttl=255 time=0.494 ms (DUP!)
64 bytes from 187.0.34.130: icmp_seq=1 ttl=255 time=0.496 ms (DUP!)
64 bytes from 187.0.34.7: icmp_seq=1 ttl=255 time=0.523 ms (DUP!)
64 bytes from 187.0.34.135: icmp_seq=1 ttl=255 time=0.525 ms (DUP!)
64 bytes from 187.0.34.190: icmp_seq=1 ttl=255 time=0.527 ms (DUP!)
64 bytes from 187.0.34.20: icmp_seq=1 ttl=255 time=0.812 ms (DUP!)
64 bytes from 187.0.34.131: icmp_seq=1 ttl=255 time=0.953 ms (DUP!)
64 bytes from 187.0.34.152: icmp_seq=1 ttl=60 time=1.51 ms (DUP!)
64 bytes from 187.0.34.153: icmp_seq=1 ttl=60 time=1.73 ms (DUP!)
64 bytes from 187.0.34.17: icmp_seq=1 ttl=32 time=5.39 ms (DUP!)
64 bytes from 187.0.34.197: icmp_seq=2 ttl=64 time=0.046 ms
--- 187.0.34.0 ping statistics ---
2 packets transmitted, 2 received, +23 duplicates, 0% loss, time 1010ms
rtt min/avg/max/mdev = 0.046/0.682/5.393/1.038 ms
|
Traceroute oder Ping?
»Ping« in Verbindung mit der Option »-R« erfüllt scheinbar
dieselben Aufgaben wie »traceroute«. Jedoch existieren entscheidende Einschränkungen.
Zunächst vermag »Ping« nur maximal 9 Stationen (»Hops«), die ein Paket durchläuft,
aufzuzeichen. Für mehr ist einfach kein Platz in einem ICMP-Request-Paket. Sie können das Verhalten leicht
nachvollziehen, wenn Sie nur einen Zielrechner wählen, der »weit genug« entfernt ist:
user@sonne> ping -R -c 1 www.heise.de
PING www.heise.de (193.99.144.71) from 145.254.78.131 : 56(124) bytes of data.
64 bytes from www.heise.de (193.99.144.71): icmp_seq=1 ttl=245 time=278 ms
RR: dialin-145-254-078-131.arcor-ip.net (145.254.78.131)
dre-145-253-16-118.arcor-ip.net (145.253.16.118)
dre-145-254-6-14.arcor-ip.net (145.254.6.14)
dre-145-254-6-34.arcor-ip.net (145.254.6.34)
dre-145-254-17-10.arcor-ip.net (145.254.17.10)
bln-145-254-18-58.arcor-ip.net (145.254.18.58)
ams-ix.arcor-ip.net (193.148.15.123)
pos-8-0.mpr1.ams1.nl.mfnx.net (208.184.231.181)
pos1-0.mpr2.ams1.nl.mfnx.net (208.184.231.253)
--- www.heise.de ping statistics ---
1 packets transmitted, 1 received, 0% loss, time 0ms
rtt min/avg/max/mdev = 278.643/278.643/278.643/0.000 ms
|
Erst »traceroute« zeigt die fehlenden Zwischenstationen auf:
user@sonne> /usr/sbin/traceroute www.heise.de
traceroute to www.heise.de (193.99.144.71), 30 hops max, 40 byte packets
1 dre-145-253-1-105.arcor-ip.net (145.253.1.105) 158.395 ms 178.291 ms 188.181 ms
2 dre-145-253-16-97.arcor-ip.net (145.253.16.97) 208.099 ms 228.014 ms 247.940 ms
3 dre-145-254-6-9.arcor-ip.net (145.254.6.9) 277.870 ms 307.814 ms 347.706 ms
4 amd-145-254-16-238.arcor-ip.net (145.254.16.238) 397.616 ms 417.569 ms 447.458 ms
5 ge2-0.mpr1.ams1.nl.mfnx.net (193.148.15.122) 477.370 ms 507.330 ms 537.225 ms
6 pos-0-0.mpr2.ams1.nl.mfnx.net (208.184.231.182) 567.160 ms 587.022 ms 616.952 ms
7 pos2-0.cr2.ams2.nl.mfnx.net (208.184.231.254) 149.019 ms 178.923 ms 198.843 ms
8 so-1-1-0.cr2.fra1.de.mfnx.net (64.125.31.142) 228.753 ms 258.670 ms 288.616 ms
9 pos2-0.er1b.fra1.de.mfnx.net (216.200.116.141) 308.503 ms 328.437 ms 358.360 ms
10 plusline-gw2.fra1.above.net (216.200.116.222) 398.298 ms 428.218 ms 458.146 ms
11 c6.f.de.plusline.net (213.83.57.19) 478.057 ms 507.970 ms 537.914 ms
12 c22.f.de.plusline.net (213.83.19.83) 557.839 ms 587.735 ms 617.674 ms
13 www.heise.de (193.99.144.71) 149.010 ms 168.906 ms *
|
Ist der Zielrechner nicht erreichbar, bleibt Ihnen »ping« eine Antwort schuldig. Mit »traceroute« hingegen
können Sie mit einiger Sicherheit den Streckenabschnitt identifizieren, der das Problem verursacht.
Und schließlich ermöglicht erst »traceroute« eine Analyse der Laufzeiten der Pakete und die Identifikation
eventueller Leistungsengpässe im Netz.
Die Arbeitsweise von Traceroute
Abbildung 1: Die Arbeitsweise von Traceroute
Zwei Techniken kommen zum Einsatz. Zum einen ist dies die Variation des Time-to-live-Feldes der
UDP-Testpakete. Erinnern Sie sich an die Aufgabe dieses TTL-Feldes, das verhindern soll,
dass fehl geleitete Pakete ewig im Netz kursieren. Jeder Rechner, den ein Paket passiert, inkrementiert hierzu den Wert
des Feldes. Sinkt der Wert auf Null, wird der aktuelle Rechner, insofern er nicht das Ziel markiert, das Paket verwerfen
und eine Fehlermitteilung an den Absender initiieren (ICMP-Meldung »Time excceded«). »Traceroute«
erzwingt eine solche Fehlernachricht von jeder Zwischenstation, die das Paket durchläuft.
Auf dem Zielrechner kontaktiert »Traceroute« den Port 33434. In der Regel wartet niemals ein Programm auf diesem
Port, sodass der Rechner den Verbindungswunsch als Fehler interpretiert und seinerseits mir der ICMP-Mitteilung »Unreachable
Port« antwortet. Hieran erkennt »Traceroute« das Erreichen des Ziels.
Aus Effizienzgründen sendet »Traceroute« zu einer Zeit gleich mehrere UDP-Pakete aus (im Beispiel aus
Abbildung 1 sind es 6). Des Weiteren wird in der Voreinstellung jedes Paket genau drei Mal versandt, um zum Einen eine gewisse
Resistenz gegenüber Fehlern zu wahren (bspw. darf ein Router bei &Uuuml;berlastung Pakete verwerfen, ohne entsprechende
Fehlerpakete auszusenden) und zum Anderen mehrere Zeitmessungen vorzunehmen (um »Ausreißer« zu markieren).
Fehlversuche kennzeichnet »Traceroute« mit einem Stern (*). Es ist durchaus mölgich, dass »Traceroute«
einen Weg zum Ziel findet, obwohl ein Zwischenrechner scheinbar nicht erreichbar ist (nur Sterne in der Ausgabe). Ursachen sind
zumeist Fehler in »Traceroute«-Implementierungen mancher Unix-Systeme, die dazu führen, dass die »Time exceeded«
Fehlermitteilung den Absender nicht erreichen.
Anmerkung: Manche Netzwerkrouter können so konfiguriert werden, dass sie »Traceroute«-Pakete ignorieren, d.h.
sie weiter leiten, ohne das TTL-Feld anzutasten. Deshalb muss die aufgezeichnete Route nicht vollständig sein (eine Option -R,
um auch solche Router aufzuzeichnen, existiert zwar, ist jedoch in der aktuellen Version nicht implementiert).
Die Optionen
Optionen zur Steuerung des Sendeverhaltens
-q <Anzahl> |
|
In der Voreinstellung versendet »Traceroute« je drei UDP-Pakete je Time-to-live-Wert. Mit der
Option -q kann jeder anderer Wert vorgegeben werden.
|
user@sonne> /usr/sbin/traceroute -q 4 www.heise.de | head -4
traceroute to www.heise.de (193.99.144.71), 30 hops max, 40 byte packets
1 dre-145-253-1-103.arcor-ip.net (145.253.1.103) 119.121 ms 169.047 ms 188.981 ms 208.920 ms
2 dre-145-253-16-98.arcor-ip.net (145.253.16.98) 228.861 ms 248.794 ms 268.735 ms 288.668 ms
3 dre-145-254-6-13.arcor-ip.net (145.254.6.13) 318.605 ms 348.546 ms 368.478 ms 398.416 ms
|
Anmerkung: In einigen (älteren) Programmversionen stürzt »Traceroute« bei hohen Werten mit
einen Segmentation fault (Speicherschutzverletzung) ab oder es verweigert das Setzen des TTL-Wertes. Eine Aktualisierung auf
die neueste Version behebt die Ursachen.
-w <Anzahl> |
|
»Traceroute« sendet in der Voreinstellung sechs Pakete quasi parallel mit jeweils verändertem Time-to-live-Wert
aus (im ersten Schritt mit TTL=1..6, im zweiten Schritt mit TTL=7..12 usw.). Trifft die letzte Antwort ein, wird die nächste
Welle von Paketen ins Rennen geworfen. Mit der Option -w kann eine Zeitspanne fest gelegt werden, die zwischen dem Aussenden
zweier Sondierungspakete zu warten ist (Angabe in Sekunden).
|
-N <Anzahl> |
|
Die Voreinstellung von sechs gleichzeitig zu sendenden Paketen kann hiermit verändert werden. Beachten Sie,
dass sehr hohe Werte zwar die Routenfinding durchaus beschleunigen können, gleichzeitig jedoch den Netzwerkverkehr
extrem erhöhen. Spätestens wenn Fehlermeldungen der Art »ICMP rate throttling« vermehrt austreten,
sollten Sie ein solches Vorgehen vermeiden, um nicht Auml;rger mit Ihren Netzwerkadministratoren heraufzubeschwören.
|
-f <Start-TTL> |
|
Wenn Sie die Route zu einem weit entfernten Ziel verfolgen und genau wissen, dass die ersten Stationen zuverlässig
arbeiten, dann können Sie deren Test auslassen, indem Sie mit einem höheren Startwert für das
»Time-to-live«-Feld beginnen.
|
-F |
|
Im IP-Protokollkopf wird das Don't Fragment-Bit gesetzt. Router dürfen
ein solches Datenpaket nicht weiter splitten, auch wenn es für das folgende Teilnetz zu groß sein sollte.
Sie sind gezwungen, dieses zu verwerfen und eine Fehlermeldung an den Absender zu verschicken.
|
-m <max_hops> |
|
Der maximale Wert für TTL, mit dem Pakete ausgesendet werden, liegt bei 30. Die Option -m
gestattet das Setzen dieser Grenze. Schon der Wert von 30 erscheint recht hoch; es ist unwahrscheinlich,
dass zwischen zwei Rechnern mehr Zwischenstationen liegen, es sei denn, irgendwo im Routing liegt eine
Fehlkonfiguration vor.
|
user@sonne> /usr/sbin/traceroute -n -m 3 www.heise.de
traceroute to www.heise.de (193.99.144.71), 3 hops max, 40 byte packets
1 145.253.1.105 119.031 ms 138.962 ms 168.899 ms
2 145.253.16.97 198.829 ms 228.763 ms 258.696 ms
3 145.254.6.9 288.624 ms 438.560 ms 448.500 ms
|
Optionen bezüglich der gewählten Route
-I <Interface> |
|
Verfügt ein Rechner über mehrere Netzwerk-Schnittstellen (mehrere Netzwerkkarten, Modem, ISDN-Karte...),
so muss die zu verwendende Schnittstelle angegeben werden, insofern es sich nicht um die erste Schnittstelle
handelt (Vergleichen Sie die Reihenfolge der Ausgabe von ifconfig).
|
-S <Quell-IP> |
|
Für einen Rechner mit mehreren IP-Adressen, kann mit der Option -S die als Absender zu verwendende
Adresse angegeben werden.
|
-g <Gateway> |
|
Fügt dem ausgehenden Paket die »IP source routing Option« hinzu, womit eine
Route durch das angebene Gateway zu wählen ist. Etliche Route ignorieren jedoch aus
Sichereitsgründen diese Option.
|
-t <Type of Service> |
|
Zahlreiche Implementierungen des IP-Protokoll-Stacks ignorieren diese Option, die das Routing derart
beeinflussen soll, dass Routen mit bestimmten Eigenschaften bevorzugt gewählt werden. Mögliche Werte
sind 0 (Voreinstellung), 1 (Route mit den geringsten Kosten), 2 (Route mit höchster
Zuverlässigkeit), 4 (Route mit höchstem Durchsatz), 8 (schnellste Route) und 16 (Route mit höchster
Sicherheit.
Der praktische Nutzen dieser Information steigt und fällt mit den den Routern zur Verfügung stehenden
Informationen.
Das Setzen der Option ist nur Root möglich.
|
Weitere Optionen
-n |
|
Verhindert die Namensauflösung von IP-Adressen, d.h. die Zwischenstationen werden stets mit ihrer
IP-Adresse angegeben.
|
user@sonne> /usr/sbin/traceroute -n www.heise.de
traceroute to www.heise.de (193.99.144.71), 30 hops max, 40 byte packets
1 145.253.1.105 189.075 ms 198.996 ms 218.929 ms
2 145.253.16.97 228.873 ms 248.803 ms 258.757 ms
3 145.254.6.9 288.675 ms 308.602 ms 338.519 ms
4 145.254.16.238 398.466 ms 428.395 ms 448.348 ms
5 193.148.15.122 488.293 ms 508.211 ms 528.148 ms
6 208.184.231.182 558.069 ms 598.005 ms 627.933 ms
7 208.184.231.254 429.692 ms 459.618 ms 479.550 ms
8 64.125.31.142 456.574 ms 486.505 ms 516.440 ms
9 216.200.116.141 469.589 ms 499.526 ms 529.455 ms
10 216.200.116.222 439.595 ms 469.529 ms 509.456 ms
11 213.83.57.19 457.729 ms 477.657 ms 507.585 ms
12 213.83.19.83 429.704 ms 459.633 ms 489.571 ms
13 193.99.144.71 449.649 ms 469.590 ms *
|
-4 |
|
Erzwingt die Verwendung von IP-Adressen nach Version 4 (ipv4).
|
-6 |
|
Erzwingt die Verwendung von IP-Adressen nach Version 6 (ipv6).
|
Paketlänge |
|
Der zwischen 1 und 65536 liegende Wert (Voreinstellung 40 Bytes) kann hinter der Angabe des Zielrechners auf
der Kommandozeile folgen. In Verbindung mit der Option -F besteht so eine Möglichkeit, die
Maximale Transfereinheit (MTU) zu ermitteln.
|
Anmerkung: Die Optionen -4 bzw. -6 erübrigen sich, wenn der Zielrechner als IP-Adresse angegeben wird. In dem
Fall entscheidet »Traceroute« anhand des Adressformats, nach welchem Mechanismus vorzugehen ist.
tracepath
Für Fälle, in denen es einzig um den Test des Routenverlaufs geht, ist »Traceroute« mit der
Fülle seiner Optionen quasi überqualifiziert, zumal etliche Optionen die Rechte des Administrators
bedingen. Oft genügt tracepath, das keine Optionen kennt und vom »jedem« Benutzer verwendet
werden darf. Neben der Angabe der Zieladresse kann optional der zu verwendende Port vorgegeben werden. Ohne diesen
wählt »Tracepath« zufällig einen Port aus einem definierten Pool (i.d.R.) ungültiger
Portnummern aus.
user@sonne> /usr/sbin/tracepath www.heise.de
1?: [LOCALHOST] pmtu 1500
1: dre-145-253-1-105.arcor-ip.net (145.253.1.105) 658.744ms
2: dre-145-253-16-97.arcor-ip.net (145.253.16.97) 669.516ms
3: dre-145-254-6-9.arcor-ip.net (145.254.6.9) 667.342ms
4: amd-145-254-16-238.arcor-ip.net (145.254.16.238) asymm 7 689.634ms
5: ge2-0.mpr1.ams1.nl.mfnx.net (193.148.15.122) asymm 8 695.013ms
6: pos-0-0.mpr2.ams1.nl.mfnx.net (208.184.231.182) asymm 9 689.666ms
7: pos2-0.cr2.ams2.nl.mfnx.net (208.184.231.254) asymm 10 689.717ms
8: so-1-1-0.cr2.fra1.de.mfnx.net (64.125.31.142) asymm 10 688.892ms
9: pos2-0.er1b.fra1.de.mfnx.net (216.200.116.141) asymm 10 690.307ms
10: plusline-gw2.fra1.above.net (216.200.116.222) asymm 11 689.343ms
11: c6.f.de.plusline.net (213.83.57.19) asymm 9 689.566ms
12: c22.f.de.plusline.net (213.83.19.83) asymm 10 689.310ms
13: www.heise.de (193.99.144.71) asymm 11 689.836ms reached
Resume: pmtu 1500 hops 13 back 11
|
Der ARP-Cache des Kernels
Während im Internet Pakete anhand ihrer IP-Adresse vermittelt werden, erfolgt in lokalen Netzen die
Adressierung mittels Hardwareadressen. So besitzt jede Ethernetnetzwerkkarte eine (weltweit) eindeutige
48 Bit lange Adresse. Das Ermitteln der Hardwareadresse des Rechners zu einer gegebenen IP-Adresse erfolgt
durch das Address Resolution Protocol.
Einmal ermittelte Zuordnungen speichert der Linuxkernel in einem internen Zwischenspeicher (»arp-Cache«),
um wiederholte Anfragen ohne teure Rechercheoperationen bedienen zu können. In der üblichen Konfiguration
stehen 256 Einträge im Cache zur Verfügung. Lange Zeit nicht verwendete Adressen werden nach einer maximalen
Verweildauer oder bei Bedarf (voller Cache) entfernt.
Mit dem Kommando arp steht dem Administrator ein Werkzeug zur manuellen Inspektion und Manipulation des
Arp-Caches zur Verfügung.
Die Optionen
Optionen zum Betrachten des Arp-Caches
Für den Fall, dass ein Rechner via Netzwerk nicht erreichbar ist, kann ein Blick in den
Arp-Cache helfen, um Probleme auf Hardwareebene auszuschließen. Vorhandene Einträge (die
nicht manuell eingefügt wurden) sind sichere Anzeichen für eine funktionierende Anbindung.
user@sonne> arp
Address HWtype HWaddress Flags Mask Iface
pluto.galaxsis.de ether 00:A0:C9:FC:1F:45 C eth0
mars.galaxis.de ether 00:40:05:A1:A6:C4 C eth0
erde.galaxis.de ether 00:B0:15:AA:AA:11 C eth0
|
Eine an die arp-Implementierung auf BSD-Systemen angelehnte Form der Ausgabe vermag arp ebenso
zu erzeugen.
-a |
|
Anzeige gemäß des Formats der BSD-Implementierung.
|
user@sonne> arp -a
pluto.galaxsis.de (192.168.239.1) at 00:A0:C9:FC:1F:45 [ether] on eth0
mars.galaxsis.de (192.168.239.2) at 00:40:05:A1:A6:C4 [ether] on eth0
erde.galaxsis.de (192.168.109.2) at 00:B0:15:AA:AA:11 [ether] on eth0
|
Auch zur Ausgabe erweiterter Informationen und zur Anzeige numerischer Adressen anstatt Rechnernamen
stehen Optionen zur Verfügung.
-n |
|
Adressen werden in numerischer Form wiedergegeben.
|
-v |
|
Ausführlichere Ausgaben.
|
user@sonne> arp -vn
Address HWtype HWaddress Flags Mask Iface
192.168.239.5 ether 00:02:B3:2E:65:AE C eth0
192.168.239.1 ether 00:A0:C9:FC:1F:45 C eth0
192.168.239.2 ether 00:40:05:A1:A6:C4 C eth0
192.168.239.12 ether 00:D0:B7:4D:D7:E1 C eth0
Entries: 4 Skipped: 0 Found: 4
|
-H Typ |
|
Beschränkung auf Einträge des angegebenen Schnittstellentyps. Voreinstellung ist
ether (Ethernet). Weitere mögliche Werte sind arcnet (ARCnet), ax25 (AMPR AX.25),
dlci (Frame Relay DLCI), fddi (Fiber Distributed Data Interface), hippi (HIPPI),
irda (IrLAP), netrom (AMPR NET/ROM), pronet (PROnet), strip (Metricom Starmode IP),
tr (16/4 Mbps Token Ring) und x25 (generic X.25).
|
-i <Schnittstelle> |
|
Die Anzeige beschränkt sich auf Einträge der angegebenen Netzwerkschnittstelle (nur bei
Rechnern mit mehreren Schnittstellenkarten sinnvoll).
|
|
|