OS X-Fehler bei der Erkennung von Black Hole-Routern der Path Maximum Transmission Unit (PMTU)

OS X-Fehler bei der Erkennung von Black Hole-Routern der Path Maximum Transmission Unit (PMTU)

Das Ganze begann, als ich versuchte, einen Podcast auf meinen Mac herunterzuladen. Dies passiert sowohl in Snow Leopard als auch in Lion, wenn die Ethernet-Schnittstelle auf die Verwendung von Jumbo Frames eingestellt ist.

prompt> curl -v -o x.mpg http://audio.wnyc.org/freakonomics_specials/freakonomics_specials041112.mp3 
* About to connect() to audio.wnyc.org port 80 (#0)
*   Trying 204.93.180.53... Local Interface en0 is ip 172.16.1.2 using address family 2
* Local port: 0
* connected
* Connected to audio.wnyc.org (204.93.180.53) port 80 (#0)
> GET /freakonomics_specials/freakonomics_specials041112.mp3 HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
> Host: audio.wnyc.org
> Accept: */*
> 
OK
< Server: nginx/0.7.65
< Date: Mon, 16 Apr 2012 23:39:03 GMT
< Content-Type: audio/mpeg
< Content-Length: 42075070
< Last-Modified: Tue, 10 Apr 2012 21:15:08 GMT
< Connection: close
< Content-Disposition: attachment
< Accept-Ranges: bytes
< 
  0 40.1M    0     0    0     0      0      0 --:--:--  0:00:24 --:--:--     0^C

Die Header kommen einwandfrei durch, aber der Download kommt nicht weiter. Das ist dienurIch habe diese Art von Problemen mit einem Webserver, aber es ist immer noch ärgerlich und ich würde gern sehen, ob es eine andere Lösung gibt, als überall auf Jumbo-Frames zu verzichten.

Ich habe festgestellt, dass ich eine Teildatei herunterladen kann, solange die Größe des herunterzuladenden Blocks 1448 Bytes oder weniger beträgt. Ich kann den Bereich 0-1447 oder 10000-11447 verwenden, es kommt also nicht auf die Position in der Datei an, sondern auf die Größe des Blocks. Die WAN-MTU auf meinem Router war auf 1500 eingestellt, also habe ich versucht, sie schrittweise zu reduzieren, bis ich 1400 erreichte, und es hat immer noch keinen Unterschied gemacht.

Ich dachte, dies sei ein Problem mit der Path MTU Black Hole-Erkennung, da das Problem verschwindet, wenn ich aufhöre, Jumbo-Frames auf der Ethernet-Schnittstelle zu verwenden. Aber ich habe alles für die Black Hole-Erkennung eingerichtet (soweit ich das beurteilen kann) und Ping sieht kein Problem:

ping  -g1435 -G1445 204.93.180.53PING 204.93.180.53 (204.93.180.53):
(1435 ... 1445) data bytes
1443 bytes from 204.93.180.53: icmp_seq=0 ttl=51 time=69.223 ms
1444 bytes from 204.93.180.53: icmp_seq=1 ttl=51 time=75.542 ms
1445 bytes from 204.93.180.53: icmp_seq=2 ttl=51 time=72.136 ms
1446 bytes from 204.93.180.53: icmp_seq=3 ttl=51 time=73.732 ms
1447 bytes from 204.93.180.53: icmp_seq=4 ttl=51 time=72.057 ms
1448 bytes from 204.93.180.53: icmp_seq=5 ttl=51 time=73.377 ms
1449 bytes from 204.93.180.53: icmp_seq=6 ttl=51 time=71.717 ms
1450 bytes from 204.93.180.53: icmp_seq=7 ttl=51 time=73.293 ms
1451 bytes from 204.93.180.53: icmp_seq=8 ttl=51 time=71.874 ms
1452 bytes from 204.93.180.53: icmp_seq=9 ttl=51 time=73.206 ms
1453 bytes from 204.93.180.53: icmp_seq=10 ttl=51 time=71.289 ms

Tatsächlich funktioniert Ping bis zu 1494 Bytes, obwohl ich glaube, dass der Mac die Bytes anders zählt als andere *nixes. (Ich glaube, er zählt die 8 Bytes des ICMP-Headers als Daten, aber nicht die 20 Bytes des IP-Headers, im Gegensatz zu den meisten, die weder das eine noch das andere zählen, und einigen, die beides zählen.)

Ich möchte die Leistungsvorteile von Jumbo-Frames in meinem LAN nicht nur für diese eine kaputte Website aufgeben, aber natürlich will ich meinen Podcast. Deshalb suche ich nach Vorschlägen, was ich ausprobieren könnte.

Mein Mac hat zwei integrierte Ethernet-Ports. Ich habe also versucht, den zweiten mit MTU 1500 zu verbinden und curldie Verwendung dieses Ports zu erzwingen. Curl hat zwar angegeben, dass dieser Port verwendet wird, aber die MTU dieses Ports hatte keinen Einfluss darauf, ob der Download funktioniert oder nicht. Entscheidend war die MTU des ersten aktiven Ethernet-Ports. Ich weiß auch nicht, was das bedeutet.

Hat jemand Vorschläge?

Antwort1

Problemumgehungen:

  • Senken Sie die MTU der Schnittstelle auf 1500. Wählen Sie in den Systemeinstellungen -> Netzwerk die Schnittstelle (z. B. Integriertes Ethernet), klicken Sie auf die Schaltfläche Erweitert..., Registerkarte Ethernet, Dropdown-Menü MTU oder stellen Sie Konfigurieren auf Automatisch ein. Dies löst das Problem, bedeutet jedoch, dass Sie Jumbo Frames im LAN nicht verwenden können (zumindest von diesem Computer aus).
  • Wenn dies unter Linux wäre: Verwenden Sie es, iptablesum das TCP-MSS nur für diesen Host zu klemmen. --set-mss 1460

Lösung:

  • Korrigieren Sie die Serverkonfiguration, um entweder die MTU zu senken oder die Path MTU Discovery zum Laufen zu bringen.

Tatsächlich gelang es mir schließlich, einen Gesprächspartner bei der CDN-Firma zu finden, der die Lösung implementieren konnte. Dieser senkte die MTU und löste damit das Problem.

verwandte Informationen