Linux Netzwerktests

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie Netzwerktests in Linux mit dem Befehl ping durchführen. Netzwerktests sind unerlässlich für die Diagnose von Konnektivitätsproblemen, die Messung der Netzwerkleistung und die Sicherstellung, dass Geräte richtig miteinander kommunizieren können.

Der Befehl ping ist eines der grundlegendsten Netzwerktestwerkzeuge auf Linux-Systemen. Es funktioniert, indem es ICMP (Internet Control Message Protocol)-Echoanforderungspakete an einen Zielhost sendet und auf ICMP-Echowiderholungspakete wartet. Dieser einfache Mechanismus ermöglicht es Ihnen, zu überprüfen, ob ein Remotehost erreichbar ist, und die Round-Trip-Zeit für die Pakete zu messen, die zum Ziel und zurück reisen.

Durch die Absolvierung dieses Labs erhalten Sie praktische Erfahrungen mit Netzwerktestwerkzeugen und entwickeln essentielle Fähigkeiten für die Netzwerkfehlersuche.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/echo -.-> lab-271353{{"Linux Netzwerktests"}} linux/cat -.-> lab-271353{{"Linux Netzwerktests"}} linux/chmod -.-> lab-271353{{"Linux Netzwerktests"}} linux/cd -.-> lab-271353{{"Linux Netzwerktests"}} linux/ping -.-> lab-271353{{"Linux Netzwerktests"}} linux/nano -.-> lab-271353{{"Linux Netzwerktests"}} end

Verwendung des ping-Befehls für grundlegende Netzwerktests

In diesem Schritt lernen wir, wie man den Befehl ping verwendet, um die Konnektivität zwischen Ihrem Computer und einem anderen Host im Netzwerk zu testen. Der Befehl ping sendet Echoanforderungen an eine Zieladresse und wartet auf Antworten, sodass Sie überprüfen können, ob der Host erreichbar ist.

Zunächst öffnen Sie Ihr Terminal und stellen Sie sicher, dass Sie sich im Projektverzeichnis befinden:

cd ~/project

Erstellen wir eine Textdatei, um die IP-Adressen zu speichern, die wir testen möchten. Dies hilft uns, unsere Netzwerktests zu organisieren:

echo "8.8.8.8" > ~/project/ping_hosts.txt

Dieser Befehl erstellt eine Datei namens ping_hosts.txt, die die IP-Adresse 8.8.8.8 enthält, welche der öffentliche DNS-Server von Google ist.

Jetzt führen wir unseren ersten Ping-Test mit dem folgenden Befehl aus:

ping -c 4 $(cat ~/project/ping_hosts.txt)

Der obige Befehl macht Folgendes:

  • ping: Ruft das Ping-Programm auf
  • -c 4: Begrenzt den Ping auf 4 Pakete (standardmäßig läuft der Ping weiter, bis Sie ihn mit Ctrl+C stoppen)
  • $(cat ~/project/ping_hosts.txt): Liest die IP-Adresse aus unserer Datei

Wenn Sie diesen Befehl ausführen, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=14.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=13.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=13.8 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=13.7 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 13.676/13.963/14.513/0.329 ms

Diese Ausgabe zeigt Folgendes an:

  • Ihr System hat erfolgreich 4 Pakete an den Zielhost gesendet
  • Der Zielhost hat auf alle 4 Pakete geantwortet
  • Es gab einen Paketverlust von 0%
  • Die Round-Trip-Zeit (rtt) betrug durchschnittlich etwa 14 Millisekunden

Wenn Sie einen nicht erreichbaren Host pingen würden, könnten Sie etwas wie Folgendes sehen:

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.

--- 192.168.1.100 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3062ms

Dies zeigt an, dass keine Antworten vom Zielhost empfangen wurden, was darauf hindeutet, dass der Host entweder offline ist, nicht erreichbar ist oder ICMP-Echoanforderungen blockiert.

Versuchen wir ein weiteres Beispiel mit einer anderen IP-Adresse. Diesmal verwenden wir eine gängige lokale Netzwerkgateway-Adresse:

ping -c 4 192.168.1.1

Die Antwort variiert je nach Ihrer Netzwerkkonfiguration. Wenn diese IP-Adresse Ihr Gateway ist, sollten Sie erfolgreiche Ping-Antworten mit sehr geringer Latenz (typischerweise unter 1 ms) sehen. Wenn nicht, könnten Sie Timeouts oder die Meldung "Destination Host Unreachable" sehen.

Verständnis und Analyse der ping-Ausgabe

Nachdem Sie gelernt haben, wie man den grundlegenden ping-Befehl verwendet, wollen wir nun untersuchen, wie man seine Ausgabe genauer interpretiert. Das Verständnis der ping-Ergebnisse ist für die Diagnose von Netzwerkproblemen unerlässlich.

Zunächst fügen wir einen weiteren Host unserer ping_hosts.txt-Datei hinzu:

echo "1.1.1.1" >> ~/project/ping_hosts.txt

Dieser Befehl fügt die IP-Adresse des Cloudflare-DNS-Servers an unsere Datei an. Der Operator >> fügt Inhalte an eine Datei an, anstatt sie zu überschreiben (was > tut).

Lassen Sie uns den Inhalt unserer Datei überprüfen:

cat ~/project/ping_hosts.txt

Sie sollten Folgendes sehen:

8.8.8.8
1.1.1.1

Jetzt pingen wir die zweite Adresse und analysieren die Ausgabe:

ping -c 4 $(tail -n 1 ~/project/ping_hosts.txt)

Der Befehl tail -n 1 extrahiert die letzte Zeile aus der Datei, die die IP-Adresse des Cloudflare-DNS-Servers ist.

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=8.76 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=8.92 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.08 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms

Lassen Sie uns diese Ausgabe im Detail zerlegen:

  1. Kopfzeile: PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.

    • Dies zeigt die Ziel-IP-Adresse und die Größe des Ping-Pakets an (56 Bytes Daten, 84 Bytes inklusive Header)
  2. Einzelne Echo-Antworten:

    • 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
    • bytes from: Gibt die Größe der Antwort an
    • icmp_seq: Die Sequenznummer des Pakets
    • ttl: Time To Live, ein Wert, der verhindert, dass Pakete unendlich lange zirkulieren
    • time: Die Round-Trip-Zeit in Millisekunden
  3. Zusammenfassende Statistiken:

    • 4 packets transmitted, 4 received, 0% packet loss, time 3005ms
    • Dies zeigt, wie viele Pakete gesendet wurden, wie viele empfangen wurden, den Paketverlustprozentsatz und die Gesamtzeit
    • rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms
    • Das Minimum, Durchschnitt, Maximum und die mittlere Abweichung der Round-Trip-Zeiten

Lassen Sie uns einige zusätzliche Optionen mit ping verwenden, um mehr Informationen zu erhalten:

ping -c 4 -i 0.5 -s 100 1.1.1.1

Dieser Befehl:

  • -c 4: Sendet 4 Pakete
  • -i 0.5: Setzt das Intervall zwischen den Paketen auf 0,5 Sekunden (Standard ist 1 Sekunde)
  • -s 100: Ändert die Paketgröße auf 100 Bytes (Standard ist 56)

Sie sollten eine Ausgabe mit größeren Paketgrößen und schnelleren Intervallen sehen:

PING 1.1.1.1 (1.1.1.1) 100(128) bytes of data.
108 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.33 ms
108 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=9.19 ms
108 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=9.11 ms
108 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.20 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 1503ms
rtt min/avg/max/mdev = 9.108/9.205/9.326/0.079 ms

Beim Analysieren der ping-Ergebnisse sollten Sie auf diese Schlüsselmetriken achten:

  1. Paketverlust: Jeder Prozentsatz über 0 % deutet auf Netzwerkprobleme hin
  2. Latenz: Hohe Zeiten (insbesondere über 100 ms) können auf Netzwerküberlastung hinweisen
  3. Inkonsistente Zeiten: Große Unterschiede zwischen Minimal- und Maximalzeiten deuten auf Netzwerkinstabilität hin

Beispielsweise könnte ein hoher Paketverlust auf Folgendes hinweisen:

  • Netzwerküberlastung
  • Hardwareprobleme
  • Firewall-Einschränkungen
  • Routingprobleme

Hohe Latenz könnte auf Folgendes hinweisen:

  • Physikalische Entfernung zum Server
  • Netzwerküberlastung
  • Schlechte Verbindungskenngrößen
  • Ineffizientes Routing

Erweiterte ping-Optionen und praktische Anwendungen

Nachdem Sie die Grundlagen von ping und die Interpretation seiner Ausgabe verstanden haben, wollen wir nun einige erweiterte Optionen und praktische Szenarien erkunden, in denen ping für die Netzwerkdiagnose nützlich ist.

Zunächst erstellen wir ein einfaches Shell-Skript, das uns hilft, einen Host kontinuierlich zu überwachen und die Ergebnisse zu protokollieren:

nano ~/project/monitor_host.sh

Geben Sie das folgende Skript in den Editor ein:

#!/bin/bash

## Einfaches Netzwerküberwachungsskript
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt

echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE

while true; do
  ping -c 1 $HOST | grep "time=" >> $LOG_FILE
  sleep $INTERVAL
  echo "---" >> $LOG_FILE
done

Speichern Sie die Datei, indem Sie Strg+O drücken, dann Enter, und verlassen Sie den Editor mit Strg+X.

Machen Sie das Skript ausführbar:

chmod +x ~/project/monitor_host.sh

Jetzt führen wir das Skript für einige Sekunden aus, um den Google-DNS-Server zu überwachen:

~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!

Dies wird:

  1. Das Überwachungsskript im Hintergrund starten
  2. 10 Sekunden warten
  3. Das Skript beenden

Lassen Sie uns das Protokoll untersuchen:

cat ~/project/ping_log.txt

Sie sollten mehrere Ping-Ergebnisse mit Zeitstempeln sehen.

Jetzt erkunden wir einige weitere erweiterte ping-Optionen:

  1. Festlegen des TTL (Time To Live):
ping -c 4 -t 64 8.8.8.8

Die Option -t legt den TTL-Wert fest, der definiert, wie viele Netzwerksprünge (Hops) ein Paket zurücklegen kann, bevor es verworfen wird.

  1. Flood-Ping (erfordert sudo):
sudo ping -c 10 -f 8.8.8.8

Die Option -f sendet Pakete so schnell wie möglich. Dies ist nützlich für Stress-Tests, sollte aber mit Vorsicht verwendet werden.

  1. Hörbarer Ping:
ping -c 4 -a 8.8.8.8

Die Option -a erzeugt ein hörbares Signal, wenn ein Host antwortet. Dies ist nützlich, wenn Sie Probleme beheben und nicht auf den Bildschirm schauen.

  1. Zeitlimit:
ping -c 4 -w 2 8.8.8.8

Die Option -w legt ein Zeitlimit in Sekunden fest, nach dem ping stoppt, unabhängig davon, wie viele Pakete gesendet wurden.

Lassen Sie uns ein praktisches Problembehandlungsszenario erkunden. Wir erstellen eine einfache Visualisierung des Netzwerkpfads zu einem Ziel mit traceroute (das ähnlich wie ping funktioniert, aber den Pfad zeigt, den die Pakete nehmen):

traceroute 8.8.8.8

Dieser Befehl zeigt jeden Sprung (Router) an, den die Pakete nehmen, um das Ziel zu erreichen. Sie werden etwas wie Folgendes sehen:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  _gateway (10.0.2.2)  0.113 ms  0.087 ms  0.083 ms
 2  * * *
 3  * * *
 4  8.8.8.8  14.080 ms  13.849 ms  14.399 ms

Die Sternchen (*) stellen Timeouts oder Router dar, die nicht auf traceroute-Anforderungen antworten.

Jetzt erstellen wir eine einfache Tabelle, um unsere Ping-Ergebnisse für verschiedene Hosts zu dokumentieren:

echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt

Fügen wir den Google-DNS-Server zu unserer Tabelle hinzu:

result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

Und fügen wir den Cloudflare-DNS-Server hinzu:

result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

Lassen Sie uns unsere Ergebnistabelle anzeigen:

cat ~/project/ping_results.txt

Sie sollten eine formatierte Tabelle mit Ping-Statistiken für beide DNS-Server sehen, die Sie verwenden können, um ihre Leistung zu vergleichen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den ping-Befehl für Netzwerktests in Linux verwenden. Sie haben praktische Erfahrung in folgenden Bereichen gesammelt:

  • Verwenden des grundlegenden ping-Befehls, um die Konnektivität zu einem Remote-Host zu überprüfen
  • Interpretieren der ping-Ausgabe, um Netzwerkprobleme zu diagnostizieren
  • Verwenden verschiedener ping-Optionen, um Ihre Netzwerktests anzupassen
  • Erstellen von Skripten zur Überwachung der Netzwerkverbindung
  • Analysieren von ping-Statistiken, um die Netzwerkleistung zu bewerten
  • Verwenden von verwandten Tools wie traceroute, um Netzwerkpfade zu visualisieren

Diese Fähigkeiten sind für die Netzwerkfehlersuche unerlässlich und können Ihnen helfen, eine Vielzahl von Konnektivitätsproblemen zu diagnostizieren, von einfachen Ausfällen bis hin zu komplexen Leistungsproblemen.

Wenn Sie weiterhin mit Linux-Systemen arbeiten, denken Sie daran, dass ping nur eines von vielen verfügbaren Netzwerkdiagnosetools ist. Andere nützliche Tools sind traceroute, netstat, nmap, tcpdump und wireshark, die zusammen ein umfassendes Netzwerkfehlersuchtoolkit bilden.

Durch das Verständnis, wie Sie die Netzwerkverbindung effektiv testen können, sind Sie nun besser gerüstet, um Netzwerksysteme in verschiedenen Umgebungen zu warten und zu reparieren.