Lassen Sie uns eine Pfad-MTU-Erkennung zwischen zwei Debian-Hosts durchführen, die durch einen Debian-Router getrennt sind, auf dem Shorewall-generierte iptables-Regeln ausgeführt werden. Jeder der beiden Hosts verwendet eine einzelne Ethernet-Verbindung, während der Router getaggte VLANs über zwei aggregierte Ethernet-Verbindungen verwendet.
Mit scamper :
root@kitandara:/home/jm# scamper -I "trace -M 10.64.0.2"
traceroute from 10.1.0.5 to 10.64.0.2
1 10.1.0.1 0.180 ms [mtu: 6128]
2 10.64.0.2 0.243 ms [mtu: 6128]
Gut: 6128 Bytes sind das erwartete Ergebnis (billige Realtek-Ethernet-Adapter können keine Jumbo-Frames mit einer anständigen Größe verarbeiten).
Lassen Sie jetzt iperf einen Durchsatztest durchführen und uns übrigens etwas über die MTU erzählen:
root@kitandara:/home/jm# iperf -c 10.64.0.2 -N -m
------------------------------------------------------------
Client connecting to 10.64.0.2, TCP port 5001
TCP window size: 66.2 KByte (default)
------------------------------------------------------------
[ 3] local 10.1.0.5 port 59828 connected with 10.64.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1011 MBytes 848 Mbits/sec
[ 3] MSS size 6076 bytes (MTU 6116 bytes, unknown interface)
6116 Bytes? Warum ?
Und nun zu etwas völlig anderem, lassen Sie uns sehen, was der Verkehr in dieser Sitzung tatsächlich enthielt:
root@kitandara:/home/jm# tshark -i eth0 -R "(ip.dst == 10.64.0.2) || (ip.src == 10.64.0.2)" | head
Capturing on eth0
1.308557 10.1.0.5 -> 10.64.0.2 TCP 74 60310 > 5001 [SYN] Seq=0 Win=5340 Len=0 MSS=534 SACK_PERM=1 TSval=101928961 TSecr=0 WS=16
1.308801 10.64.0.2 -> 10.1.0.5 TCP 74 5001 > 60310 [SYN, ACK] Seq=0 Ack=1 Win=18328 Len=0 MSS=6088 SACK_PERM=1 TSval=3764064056 TSecr=101928961 WS=64
6088 Bytes MSS, was 6128 MTU bedeutet ... Gut. Aber warum kündigt iperf dann eine 6116-Byte-MTU an?
An diesem Punkt erfordert Gründlichkeit einen genaueren Blick darauf, was während der Scamper-Trace-Sitzung passiert:
root@kitandara:/home/jm# tshark -i eth0 -R "(ip.dst == 10.64.0.2) || (ip.src == 10.64.0.2)"
Capturing on eth0
0.000000 10.1.0.5 -> 10.64.0.2 UDP 58 Source port: 43870 Destination port: 33435
0.000175 10.1.0.1 -> 10.1.0.5 ICMP 86 Time-to-live exceeded (Time to live exceeded in transit)
0.050358 10.1.0.5 -> 10.64.0.2 UDP 58 Source port: 43870 Destination port: 33436
0.050592 10.64.0.2 -> 10.1.0.5 ICMP 86 Destination unreachable (Port unreachable)
0.099790 10.1.0.5 -> 10.64.0.2 UDP 6142 Source port: 43870 Destination port: 33437
0.100912 10.64.0.2 -> 10.1.0.5 ICMP 590 Destination unreachable (Port unreachable)
Alle diese Pakete haben eine udp.Länge von 24, mit Ausnahme der beiden letzten, die eine udp.Länge von 6108 haben ... Aber wie sagt uns Scamper dann, dass der Pfad MTU 6128 ist?
6108, 6116, 6128 ... So viele MTUs zur Auswahl!