Was ist die "In-the-Wire" -Größe eines Ethernet-Frames? 1518 oder 1542?


22

Gemäß der Tabelle hier heißt es, dass MTU = 1500 Bytes und der Nutzlastteil 1500 - 42 Bytes oder 1458 Bytes beträgt (<- das ist tatsächlich falsch!). Jetzt müssen Sie noch IPv4- und UDP-Header hinzufügen, das sind 28 Byte (20 IP + 8 UDP). Damit verbleibt meine maximal mögliche Anwendungsnachricht bei 1430 Bytes! Aber wenn ich im Internet nach dieser Nummer suche, sehe ich stattdessen 1472. Mache ich diese Berechnung hier falsch?

Alles, was ich herausfinden möchte, ist die maximale Anwendungsnachricht, die ich über das Kabel senden kann, ohne dass die Gefahr einer Fragmentierung besteht. Es ist definitiv nicht 1500, da dies die Frame-Header einschließt. Kann jemand helfen?


Die Verwirrung ist, dass der PAYLOAD tatsächlich 1500 Bytes groß sein kann und das ist die MTU. Wie groß ist das Kabel für eine Nutzlast von 1500? Aus dieser Tabelle kann es bis zu 1542 Bytes groß sein.

Die maximale Anzahl an App-Nachrichten, die ich senden kann, ist 1472 (1500 - 20 (ip) - 8 (udp)) für eine maximale Drahtgröße von 1542. Es überrascht mich, wie kompliziert Dinge werden können, wenn sie tatsächlich einfach sind. Und ich habe keine Ahnung, wie jemand auf die Nummer 1518 gekommen ist, wenn in der Tabelle 1542 steht.


Die eigentliche Frage ist hier, was Sie mit "in der Drahtgröße" meinen und was Sie mit diesen Informationen tun werden. Versuchen Sie, Pakete pro Sekunde zu berechnen?
Mike Pennington

@MikePennington Versucht, die Laufzeit im Kabel zu bestimmen. Mit Paketgröße und Ethernet-Geschwindigkeit (10 Gigabit) können Sie das berechnen.
Chrisapotek

Antworten:


26

Das Diagramm auf Wikipedia ist schrecklich. Hoffentlich wird klarer, was ich schreiben werde.


Die maximale Nutzlast in 802.3-Ethernet beträgt 1500 Byte.
Dies sind die Daten, die Sie über die Leitung senden möchten (und auf die sich die MTU bezieht).
[payload]<- 1500 Bytes

Die Nutzdaten sind in einem Ethernet-Frame gekapselt (der die Quell- / Ziel-MAC-, VLAN-Tag-, Längen- und CRC-Prüfsumme hinzufügt. Dies sind insgesamt 22 Bytes zusätzlicher "Daten"
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<- 1522 Bytes

Der Frame wird über das Kabel übertragen - bevor Ihre Ethernet-Karte dies tut, steht sie im Grunde genommen auf und ruft laut, um sicherzustellen, dass niemand anderes das Kabel verwendet (CSMA / CD). Dies ist der Begrenzer für Präambel und Frame-Start (SFD) - zusätzliche 8 Bytes, also haben wir jetzt:
[Preamble+SFD+[Ethernet Frame]]<- 1530 Bytes

Wenn ein Ethernet-Transceiver einen Frame gesendet hat, muss 802.3 12 Byte Stille ("Interframe Gap") senden, bevor der nächste Frame gesendet werden kann.
[Preamble+SFD+[Ethernet Frame]+Silence]<- 1542 Bytes auf der Leitung übertragen.


Präambel, SFD und Interframe Gap zählen nicht zum Frame. Sie sind eine Unterstützungsstruktur für das Ethernet-Protokoll selbst.

Die MTU gilt für die Nutzlast - es ist die größte Dateneinheit, die Sie in das Paket packen können. Ein Ethernet-Paket mit einer MTU von 1500 Bytes ist also tatsächlich ein Frame von 1522 Bytes und 1542 Bytes auf der Leitung (vorausgesetzt, es gibt ein vLAN-Tag).

Die Antwort auf Ihre Frage: Was ist das größte Paket, das ich ohne Fragmentierung über 802.3-Ethernet senden kann? - ist 1500 Bytes Nutzdaten .

JEDOCH die EthernetSchicht kann nicht Ihr limitierender Faktor sein. Um herauszufinden, ob die MTU unterwegs auf weniger als 1500 Byte Nutzdaten beschränkt ist, führen Sie einen der folgenden Schritte aus:

  • Windows: ping hostname -f -l sizeofdata(Technik John K erwähnt)
  • BSD: ping -D -s sizeofdata hostname
  • Linux: ping -M do -s sizeofdata hostname

Der größte Wert davon sizeofdataist die MTU (über den bestimmten Pfad, den Ihre Daten nehmen).


Allerdings muss ich IP- und UDP-Header von dieser 1500 ausschließen, oder? Meine maximale Länge für Anwendungsnachrichten beträgt also 1472 für UDP.
Chrisapotek

@chrisapotek Richtig - Die IP- und UDP- (oder TCP-, GRE- usw.) Header sind Teil der Payload, die in den Ethernet-Frame gestellt wird
voretaq7

2
traceroute --mtu {target} unter linux zeigt ebenfalls max mtu
Rqomey 31.08.12

Sollen wir etwas "körperlicher" werden? en.wikipedia.org/wiki/8b/10b_encoding
SaveTheRbtz

@ SaveTheRbtz oh bitte nein - auf die binäre Darstellung zu kommen tut mir genug weh :-)
voretaq7

2

Dies hängt von der Datenmenge ab, die Sie in den Frame einfügen. Wenn Sie 1500 Datenbytes in einen Frame einfügen, beträgt die Gesamtgröße des Frames 1518 Bytes. Mit 1472 Datenbytes haben Sie eine Gesamtgröße von 1500 Bildern.

http://en.wikipedia.org/wiki/Ethernet_frame

Wenn Sie jedoch wirklich Interesse daran haben, die Fragmentierung zu testen, können Sie dies am besten mit einem guten alten Ping mit ein paar Flags testen:

ping hostname -f -l sizeofdata

Das Flag -f führt dazu, dass der Ping fehlschlägt, wenn das Paket fragmentiert ist. Der Schlüssel zum Verständnis ist, dass "sizeofdata" die Datenmenge ist, die Sie in eine Nachricht einfügen können, ohne sie zu fragmentieren. Wenn Sie also eine Nutzlast von 1500 senden, beginnen Sie mit der Fragmentierung, wenn Sie mehr als 1500 Bytes benötigen. Wenn Sie dies auf 1472 reduzieren (1500 - der Overhead von 18 Byte), sehen Sie, wie die Pings durchgehen.


Es tut mir leid, 1542 Bytes liegen weit über dem von IEEE 802.3 definierten Standard-Ethernet-Frame. Eine Ethernet-Nutzlast von 1500 Byte ohne Tag beträgt 1518 Byte (ohne SFD / Preable). Ein 802.1q-getaggter Frame ist 1522 Byte (gleiche Einschränkung)
Mike Pennington

Das ist sehr verwirrend. MTU = 1500 aber die Rahmengröße ist 1542 ??? MTU ist also nur die Nutzlast, mit anderen Worten, es ist die Rahmengröße von 1542 abzüglich der 42 zusätzlichen Teile. Ist das korrekt?
Chrisapotek

Entschuldigung, ich habe das falsch geschrieben - ich habe gerade die Antwort aktualisiert, aber wenn ich immer noch falsch
liege

Es tut mir leid, ich muss mich irren - ich dachte, ich verstehe es, aber ich habe meine Zahlen deutlich verloren, es sieht aus wie es ist 1518: Tut mir leid
Univ426

Nicht Sie, sondern alle sind verwirrt. Meine Fragen gehen also weiter. Was zum Teufel ist der Unterschied zwischen MTU- und Ethernet-Frame-Größe? Ist die Nutzlast 1500 oder weniger?
Chrisapotek

0

Für den Basis-Ethernet_II-Frame beträgt die Frame-Größe 1518 Byte (on- oder off-the-wire). Dies setzt sich aus jeweils 6 Bytes für die Ziel- und Quelladresse, 2 Bytes für das Typfeld zwischen 46 und 1500 Bytes für die Nutzlast (in Ihrem Fall das gesamte IP-Paket mit seinem IP-Header und UDP-Header) und 4 Bytes für zusammen der FCS. Zusätzlich gibt es eine Einschränkung, wie klein ein Frame sein darf (64 Bytes). Aus diesem Grund liegt der Bereich zwischen 46 Byte (addieren Sie dies zu den beiden Adressen und dem Typ und dem FCS und Sie erhalten 64 Byte - 46 + 6 + 6 + 2 + 4 = 64).

Wenn sich der Frame in einem Netzwerk befindet, das mehrere VLANs unterstützt, und Sie den Frame mit einem VLAN-Tag kennzeichnen müssen, wird vor dem Typfeld ein zusätzliches Feld hinzugefügt. Das sind 4 Bytes. Dies bedeutet nun, dass der Größenbereich für die Nutzlast am unteren Ende um 4 Byte verringert werden kann und mindestens noch 64 Byte vorhanden sind. Daher die 42. (Also 42 + 6 + 6 + 2 + 4 + 4 für das vlan-Tag = 64)

Wenn also der Bereich 1500-42 geschrieben wird, bedeutet das nicht 1500 minus 42, es bedeutet, dass alles von 1500 bis 42 Bytes gültig ist. Auf der Leitung kann dieser markierte Frame bis zu 1522 Bytes groß sein (wenn nur ein Tag verwendet wird, oder 1526, wenn zwei Tags verwendet werden). Nichts davon erklärt die Zahl 1542.

Um an diese Nummer zu gelangen, müssen Sie überlegen, wie ein Frame über Ethernet gesendet werden kann. In einem Ethernet-LAN ​​gibt es keine Uhr. Daher sendet der Sender eines Frames eine Reihe von Einsen und Nullen, um eine Uhr einzustellen. Dies nennt man die Präambel. Nicht jeder Zuhörer wird die gesamte Präambel "hören", aber die meisten sollten einen Teil davon hören. Um das Ende der Präambel zu signalisieren, wird eines der letzten 8 gesendeten Bits gekippt, sodass es anstelle von 10101010 zu 10101011 wird. Dieses Byte wird als Start of Frame Delimiter (SDF) bezeichnet. Dies ist technisch nicht sinnvoll, um das Kabel zu entfernen, daher werden die 7 Byte der Präambel und die 1 Byte SDF normalerweise nicht gezählt, aber wenn sie unsere ursprünglichen 1518 wären, wären sie jetzt 1526. Immer noch nicht 1542 ..

Nachdem ein Frame gesendet wurde, gibt es eine erzwungene Stille auf der Leitung, die als Inter-Frame-Lücke bezeichnet wird. Dies entspricht einer Übertragung von 12 Bytes. Dies wird ebenfalls nicht gezählt oder erfasst, aber wenn dies der Fall wäre, würden wir 1538 Bytes erreichen. Der einzige Weg, um jetzt von 1538 zu 1542 zu gelangen, besteht darin, zu sagen, dass der Frame markiert ist (dh das 4-Byte-Plan-Tag enthält). Puh, endlich 1542.

Es ist alles in der Terminologie. Ein Standard-Frame besteht aus 1518 Bytes auf der Leitung (sofern es sich um ein Erfassungsgerät handelt). Ein getaggter Frame (Single Tag) besteht aus 1522 Bytes auf der Leitung. Diese belegen 1538 Bytes oder 1542 Bytes Übertragungsspeicher auf der Leitung.

Hoffe das hilft zu klären ..


-1

Nein, Sie möchten, dass eine Fragmentierung auftritt. Aus diesem Grund muss das Paket fragmentiert werden, aber df set nimm es wie folgt: eine 2-Wege-Autobahn mit einer ganzen Reihe von Halbautos und dieselbe Autobahn mit einer ganzen Reihe von kleinen Smart-Autos, die beide fahren Dieselben Ziel-Semis transportieren mehr Nutzlast, sind jedoch langsamer und können leichter verstopfen. Kleinere Autos transportieren weniger, fahren jedoch schneller. MSS ist nicht dasselbe wie MTU


1
Diese Antwort hat fast, aber nicht ganz nichts mit der Frage zu tun.
Kasperd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.