Netzwerkschnittstelleneinstellungen mit ethtool unter Linux untersuchen

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie das Befehlszeilen-Tool ethtool verwenden, um Netzwerkschnittstellen-Einstellungen in einer Linux-Umgebung zu untersuchen und zu verwalten. Sie beginnen mit der Installation des Tools und der Identifizierung Ihrer primären Netzwerkschnittstelle. Anschließend üben Sie das Anzeigen der aktuellen Schnittstellengeschwindigkeit und des Duplex-Modus, das manuelle Einstellen dieser Parameter auf eine spezifische Konfiguration wie 10Mbps Half-Duplex und das Zurücksetzen der Schnittstelle in ihren Standard-Auto-Negotiation-Zustand.

Durch das Abschließen dieser Schritte erwerben Sie praktische Fähigkeiten zur Diagnose von Netzwerkproblemen auf der physikalischen Schicht. Das Lab endet damit, dass Sie lernen, wie Sie die unterstützten Link-Modi Ihrer Netzwerkkarte analysieren, was für die Fehlerbehebung bei potenziellen Leistungsproblemen aufgrund von Geschwindigkeits- oder Duplex-Fehlanpassungen zwischen Netzwerkgeräten unerlässlich ist.

ethtool installieren und Ihre Netzwerkschnittstelle identifizieren

In diesem Schritt installieren Sie zunächst ethtool, ein wichtiges Befehlszeilen-Tool zur Untersuchung und Modifizierung von Parametern von Netzwerkinterface-Controllern. Nachdem Sie sichergestellt haben, dass das Tool verfügbar ist, lernen Sie, wie Sie den Namen der primären Netzwerkschnittstelle auf Ihrem System identifizieren, was eine Voraussetzung für jede weitere Netzwerkanalyse ist.

Zuerst aktualisieren wir die Paketliste und installieren ethtool. Es ist eine gute Praxis, apt update auszuführen, bevor neue Pakete installiert werden, um sicherzustellen, dass Sie die neuesten verfügbaren Versionen aus den Repositories erhalten.

Öffnen Sie ein Terminal, das sich bereits in Ihrem ~/project-Verzeichnis befinden sollte. Führen Sie die folgenden Befehle aus:

sudo apt update
sudo apt install ethtool -y

Das Flag -y beantwortet die Installationsaufforderung automatisch mit "ja", wodurch der Prozess nicht-interaktiv wird. Sie sollten eine Ausgabe sehen, die anzeigt, dass die Paketlisten gelesen werden und ethtool installiert wird.

Nachdem ethtool installiert ist, müssen Sie ermitteln, welche Netzwerkschnittstelle Sie untersuchen möchten. Ein System kann mehrere Schnittstellen haben, wie z. B. eine Loopback-Schnittstelle (lo), eine kabelgebundene Ethernet-Schnittstelle (eth0 oder enp0s3) und andere. Der Befehl ip ist der moderne Standard für die Anzeige und Manipulation von Netzwerkgeräten, Adressen und Routen.

Um alle Netzwerkschnittstellen und ihre Konfigurationen aufzulisten, verwenden Sie den Befehl ip a (eine Kurzform für ip addr):

ip a

Sie sehen eine Liste aller Netzwerkschnittstellen. Suchen Sie nach einer Schnittstelle, die nicht lo (die Loopback-Schnittstelle) ist und den Status UP hat. Dies ist typischerweise Ihre primäre Netzwerkverbindung. Der Name ist normalerweise eth0 oder ein Name, der mit enp beginnt.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:01:b1:ae brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.232/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159922sec preferred_lft 1892159922sec
    inet6 fe80::216:3eff:fe01:b1ae/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:da:5e:55:d4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

Aus der obigen Beispielausgabe ist der Name der primären Netzwerkschnittstelle eth0. Möglicherweise sehen Sie auch andere Schnittstellen wie docker0, aber für dieses Lab konzentrieren wir uns auf eth0. Notieren Sie sich den Namen Ihrer Schnittstelle, da Sie ihn in den folgenden Schritten benötigen werden. Sie haben nun erfolgreich das notwendige Tool installiert und Ihre Ziel-Netzwerkschnittstelle identifiziert.

Aktuelle Schnittstellengeschwindigkeit und Duplex mit ethtool anzeigen

In diesem Schritt verwenden Sie das gerade installierte ethtool-Dienstprogramm, um den aktuellen Betriebszustand Ihrer Netzwerkschnittstelle zu überprüfen. Insbesondere konzentrieren Sie sich auf zwei kritische Parameter: Speed (Geschwindigkeit) und Duplex.

Netzwerkinterface-Karten (NICs) arbeiten mit spezifischen Geschwindigkeiten (z. B. 10 Mbps, 100 Mbps, 1000 Mbps) und in einem von zwei Duplex-Modi:

  • Half-Duplex: Die Schnittstelle kann zu einem bestimmten Zeitpunkt nur Daten senden oder empfangen, aber nicht beides gleichzeitig.
  • Full-Duplex: Die Schnittstelle kann gleichzeitig Daten senden und empfangen, was den Durchsatz erheblich verbessert.

Moderne Netzwerke verwenden fast immer einen Prozess namens Auto-Negotiation (automatische Aushandlung), bei dem die NIC und das angeschlossene Netzwerkgerät (wie ein Switch) automatisch kommunizieren, um die höchstmögliche Geschwindigkeit und den höchstmöglichen Duplex-Modus zu ermitteln, die beide unterstützen.

Nun lassen Sie uns diese Einstellungen für die in den vorherigen Schritt identifizierte Netzwerkschnittstelle anzeigen (wir verwenden eth0 als Beispiel). Führen Sie in Ihrem Terminal den folgenden Befehl aus. Denken Sie daran, eth0 durch Ihren tatsächlichen Schnittstellennamen zu ersetzen, falls dieser abweicht.

ethtool eth0

Nachdem Sie Enter gedrückt haben, sehen Sie detaillierte Informationen über die Schnittstelle. In einigen virtuellen Umgebungen sehen Sie möglicherweise viele "Not reported" (nicht gemeldet) oder "Unknown" (unbekannt) Werte, was darauf hinweist, dass die virtuelle Netzwerkschnittstelle nur begrenzte Funktionen hat. Dies ist in dieser Laborumgebung normal.

Settings for eth0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: Unknown!
        Duplex: Unknown! (255)
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
netlink error: Operation not permitted
        Link detected: yes

Beobachten Sie die Ausgabe sorgfältig. Die wichtigsten Zeilen für diesen Schritt sind:

  • Speed: Unknown!: Die aktuelle Geschwindigkeit wird vom Treiber nicht gemeldet.
  • Duplex: Unknown! (255): Der Duplex-Modus wird ebenfalls nicht gemeldet.
  • Auto-negotiation: off: Dies ist wichtig. Es zeigt an, dass die Schnittstelle nicht auf automatische Aushandlung eingestellt ist, weshalb wir in den nächsten Schritt die Geschwindigkeit und den Duplex-Modus manuell einstellen können.
  • netlink error: Operation not permitted: Dieser Fehler ist in containerisierten oder virtuellen Umgebungen mit eingeschränkten Berechtigungen üblich. Er hindert uns nicht daran, das Lab abzuschließen.

Die Zeile Link detected: yes bestätigt, dass eine physische Verbindung zum Netzwerk aktiv ist. Diese Einstellungen sind grundlegend dafür, wie die physikalische Schicht (Schicht 1) funktioniert.

Schnittstellengeschwindigkeit manuell auf 10 Mbps Half-Duplex setzen

In diesem Schritt lernen Sie, wie Sie die automatisch ausgehandelten Einstellungen manuell überschreiben. Obwohl die automatische Aushandlung der Standard für moderne Netzwerke ist, gibt es seltene Situationen, wie z. B. die Verbindung mit älterer Legacy-Hardware oder die Fehlerbehebung bei spezifischen Verbindungsproblemen, in denen Sie möglicherweise eine bestimmte Geschwindigkeit und einen bestimmten Duplex-Modus erzwingen müssen.

Wichtiger Hinweis: Das manuelle Einstellen dieser Parameter kann zu Netzwerkverbindungsproblemen führen, wenn es nicht korrekt durchgeführt wird. Das Erzwingen einer Einstellung, die nicht mit dem Gerät am anderen Ende des Kabels (z. B. einem Switch-Port) übereinstimmt, kann zu einem Duplex-Mismatch führen, der die Netzwerkleistung stark beeinträchtigt, oder die Verbindung kann vollständig fehlschlagen. In dieser virtuellen Umgebung ist die Änderung sicher zum Ausprobieren.

Um die Einstellungen zu ändern, verwenden Sie den Befehl ethtool mit dem Flag -s, das für "settings" (Einstellungen) steht. Diese Operation erfordert Administratorrechte, daher müssen Sie sudo verwenden.

Versuchen wir, die Schnittstellengeschwindigkeit auf 10 Mbps und den Duplex-Modus auf Half zu setzen. Denken Sie daran, eth0 durch Ihren Schnittstellennamen zu ersetzen, falls dieser abweicht.

sudo ethtool -s eth0 speed 10 duplex half

Dieser Befehl erzeugt bei Erfolg keine Ausgabe. Um zu bestätigen, ob die Änderung angewendet wurde, müssen Sie die Schnittstelleneinstellungen erneut mit dem Befehl aus dem vorherigen Schritt überprüfen:

ethtool eth0

Untersuchen Sie nun die Ausgabe. Suchen Sie nach den Zeilen Speed und Duplex. Selbst mit den anfänglichen Fehlern sehen Sie, dass der Befehl zum Setzen von Geschwindigkeit und Duplex erfolgreich war.

Settings for eth0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 10Mb/s
        Duplex: Half
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
netlink error: Operation not permitted
        Link detected: yes

Sie sollten nun Speed: 10Mb/s und Duplex: Half sehen. Beachten Sie auch, dass Auto-negotiation immer noch off ist, was zu erwarten ist, da Sie die Parameter manuell eingestellt haben. Dies bestätigt, dass Sie die Netzwerkschnittstelleneinstellungen erfolgreich ändern können.

Offload-Features mit ethtool -k anzeigen und ändern

In diesem Schritt lernen Sie, wie Sie Netzwerk-Offload-Funktionen inspizieren und ändern. Dies sind erweiterte NIC-Funktionen (Network Interface Card), die es der Hardware ermöglichen, Aufgaben auszuführen, die sonst von der CPU übernommen würden, wie z. B. die Berechnung von Prüfsummen oder die Segmentierung von Daten. Das Auslagern dieser Aufgaben kann die Netzwerkleistung verbessern.

Zuerst zeigen wir die aktuellen Offload-Einstellungen für Ihre Schnittstelle mit dem Flag -k (oder --show-features) an.

ethtool -k eth0

Sie sehen eine Liste von Funktionen, von denen einige on (aktiviert) und einige off (deaktiviert) sind. Ein Status [fixed] bedeutet, dass die Einstellung vom Benutzer nicht geändert werden kann.

Features for eth0:
rx-checksumming: on [fixed]
tx-checksumming: on
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: on
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: off [fixed]
scatter-gather: on
        tx-scatter-gather: on
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
        tx-tcp-segmentation: on
        tx-tcp-ecn-segmentation: on
        tx-tcp-mangleid-segmentation: off
        tx-tcp6-segmentation: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
... (die Ausgabe ist lang und kann variieren)

Nun üben wir die Änderung einer dieser Einstellungen. Wir werden TX-Checksumming vorübergehend deaktivieren. Diese Operation erfordert Administratorrechte, daher müssen Sie sudo und das Flag -K (oder --features) verwenden.

sudo ethtool -K eth0 tx-checksumming off

Der Befehl meldet nun die vorgenommenen Änderungen. Beachten Sie, dass durch die Deaktivierung von tx-checksumming automatisch andere verwandte Funktionen deaktiviert wurden. Dies liegt daran, dass einige Funktionen von anderen abhängen.

Actual changes:
tx-checksum-ip-generic: off
tx-tcp-segmentation: off [not requested]
tx-tcp-ecn-segmentation: off [not requested]
tx-tcp6-segmentation: off [not requested]

Um die Änderung in der vollständigen Liste zu überprüfen, können Sie erneut ethtool -k eth0 ausführen.

Nun reaktivieren wir sie, um das standardmäßige, leistungssteigernde Verhalten wiederherzustellen.

sudo ethtool -K eth0 tx-checksumming on

Auch hier zeigt die Ausgabe die tatsächlichen Änderungen. Möglicherweise stellen Sie fest, dass eine Funktion, obwohl Sie sie als on angefordert haben, off bleibt, wenn die Hardware sie als fest (fixed) markiert hat. Sie zeigt auch, dass verwandte Funktionen automatisch wieder aktiviert werden.

Actual changes:
tx-checksum-ipv4: off [requested on]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [requested on]
tx-tcp-segmentation: on [not requested]
tx-tcp-ecn-segmentation: on [not requested]
tx-tcp6-segmentation: on [not requested]
tx-checksum-fcoe-crc: off [requested on]
tx-checksum-sctp: off [requested on]

Durch den Abschluss dieses Schritts haben Sie gelernt, wie Sie die Hardware-Offload-Funktionen Ihrer Netzwerkkarte untersuchen und ändern können, und Sie haben gesehen, wie sich Feature-Abhängigkeiten und Hardware-Beschränkungen auf das Ergebnis auswirken.

Schnittstellenstatistiken mit ethtool -S untersuchen

In diesem letzten Schritt lernen Sie, wie Sie detaillierte Statistiken für Ihre Netzwerkschnittstelle anzeigen. Dies ist eine der häufigsten Anwendungen von ethtool für die tägliche Netzwerk-Fehlerbehebung. Das Tool liefert eine Fülle von Informationen, einschließlich der Anzahl gesendeter und empfangener Pakete, Byte-Zählungen und vielleicht am wichtigsten, Fehlerzählungen.

Um diese Statistiken anzuzeigen, verwenden Sie das Flag -S (oder --statistics). Denken Sie daran, eth0 durch Ihren Schnittstellennamen zu ersetzen.

ethtool -S eth0

Die Ausgabe ist eine lange Liste von Zählern. In dieser Umgebung verwendet die NIC mehrere Warteschlangen (queues), daher werden die Statistiken pro Warteschlange gemeldet. Konzentrieren wir uns auf die rx_queue_ und tx_queue_ Paketzähler.

NIC statistics:
     rx_queue_0_packets: 63768
     rx_queue_0_bytes: 93307801
     ...
     rx_queue_1_packets: 77180
     rx_queue_1_bytes: 111222183
     ...
     tx_queue_0_packets: 14363
     tx_queue_0_bytes: 4229599
     ...
     tx_queue_1_packets: 5287
     tx_queue_1_bytes: 1262219
     ... (viele weitere Statistiken)

Hinweis: Ihre Zahlen werden anders sein, da sie den gesamten Datenverkehr seit dem Hochfahren der Schnittstelle widerspiegeln.

Nun erzeugen wir etwas Netzwerkverkehr, um zu sehen, wie sich diese Zähler ändern. Wir verwenden den Befehl ping, um einige Pakete an die Loopback-Adresse (127.0.0.1) zu senden, was die lokale Maschine selbst ist. Das Flag -c 4 weist ping an, genau 4 Pakete zu senden.

ping -c 4 127.0.0.1

Sie sehen eine Ausgabe, die zeigt, wie die 4 Pakete gesendet und empfangen werden.

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.037 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.037/0.038/0.040/0.001 ms

Nachdem Sie nun etwas Verkehr erzeugt haben, überprüfen wir die Statistiken erneut:

ethtool -S eth0

Untersuchen Sie erneut die Werte für rx_queue_*_packets und tx_queue_*_packets.

NIC statistics:
     rx_queue_0_packets: 63879
     ...
     rx_queue_1_packets: 77227
     ...
     tx_queue_0_packets: 14460
     ...
     tx_queue_1_packets: 5328
     ... (viele weitere Statistiken)

Sie sollten sehen, dass die Gesamtzahl der Pakete über die Empfangs- und Sende-Warteschlangen gestiegen ist. Aufgrund von Hintergrundaktivitäten des Systems kann der Anstieg größer sein als die 4 Pakete unseres ping-Befehls, aber die Änderung bestätigt, dass die Schnittstelle Daten korrekt sendet und empfängt. Dies ist eine grundlegende Technik zur Überprüfung der Verbindungsgesundheit. Wenn Sie ein Problem beheben würden und sehen würden, wie Fehlerzähler ansteigen, wäre dies ein klares Zeichen für ein Problem.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Netzwerkschnittstelleneinstellungen mit dem Dienstprogramm ethtool unter Linux verwalten. Sie haben mit der Installation des ethtool-Pakets begonnen und den Namen Ihrer primären Netzwerkschnittstelle mit dem Befehl ip a ermittelt. Anschließend haben Sie ethtool verwendet, um die aktuellen Betriebsparameter der Schnittstelle zu untersuchen und dann manuell deren Geschwindigkeit und Duplex-Modus einzustellen.

Das Lab führte Sie dann durch die Erkundung fortgeschrittenerer Funktionen. Sie lernten, wie Sie Hardware-Offload-Einstellungen wie tx-checksumming mit den Flags -k und -K anzeigen und ändern können. Schließlich lernten Sie, wie Sie detaillierte Schnittstellenstatistiken mit ethtool -S einsehen und mit ping Verkehr erzeugen können, um diese Statistiken in Echtzeit ändern zu sehen. Dies bietet eine praktische Methode zur Überprüfung der Verbindungsgesundheit und zur Fehlerbehebung bei Konnektivitätsproblemen.