Linux: Extrem große Pakete bei tcpdump und Wireshark

Werden auf einem Linux System mit tcpdump, Wireshark oder mit Hilfe der Bibliothek libpcap Pakete mitgeschnitten, kann es dazu kommen, dass extrem große Pakete erfasst werden. Die Pakete sind dabei erheblich größer als die Maximum Transmission Unit (MTU). Im folgenden Artikel wird der Grund für dieses Phänomen kurz erläutert.

In der Regel beträgt die MTU bei Protokollen, die auf Ethernet aufbauen, 1500 Byte außer es kommen Jumboframes zum Einsatz. Im weiteren wird sich jedoch auf ersteres bezogen.

Auslesen lässt sich die aktuelle MTU mit Hilfe des Tools ifconfig.

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:198911062746 errors:0 dropped:0 overruns:0 frame:0
          TX packets:123430879624 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:219323767033916 (219.3 TB)  TX bytes:37010617004818 (37.0 TB)

Sollen Daten übertragen werden, die die Größe von 1500 Byte überschreiten, müssen diese auf einzelne Pakete aufgeteilt werden. Die Aufteilung der Pakete ist jedoch sehr CPU intensiv und die Übertragung sehr kleiner Pakete an die Netzwerkkarte ineffizient. Aus diesem Grund unterstützen neuere Netzwerkkarten(ab einer Übertragungsrate von 1 Gigabit) die Funktion "TCP segmentation offload"(TSO). Mit dieser Funktion ist es möglich, dass ein sehr großes(Größe >> MTU) Paket in einem Stück an die Netzwerkkarte übertragen wird. Anschließend übernimmt die Netzwerkkarte die Aufteilung in einzelne Pakete.

Ein Vorteil dieser Funktion ist, dass so die CPU entlastet wird und sich mit anderen Aufgaben beschäftigen kann. Neben TSO gibt es noch weitere Funktionen, mit deren Hilfe die CPU noch weiter entlastet werden kann.

Mit Hilfe des Tools ethtool können die aktivierten Funktionen angezeigt bzw. gesetzt werden.

$ sudo ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off

Verwandte Artikel