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


Gemäß der Tisch hier, es sagt, dass MTU = 1500 Bytes und dass der Payload-Teil ist 1500 - 42 Bytes oder 1458 Bytes (<- das ist eigentlich falsch!). Außerdem müssen Sie IPv4- und UDP-Header hinzufügen, die 28 Byte (20 IP + 8 UDP) sind. Damit bleibt meine maximal mögliche Anwendungsnachricht auf 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 die Leitung senden kann, ohne das Risiko einer Fragmentierung. Es ist definitiv nicht 1500, weil das die Frame-Header enthält. Kann jemand helfen?


Die Verwirrung ist die PAYLOAD kann tatsächlich so groß wie 1500 Bytes und das ist die MTU. Also, was ist die Größe in-the-Wire für eine Nutzlast von 1500? Von dieser Tabelle kann es so groß wie 1542 Bytes sein.

Die maximalen App-Nachrichten, die ich senden kann, sind also 1472 (1500 - 20 (ip) - 8 (udp)) für ein Maximum in der Drahtstärke von 1542. Es erstaunt mich, wie die Dinge so kompliziert werden können, wenn sie wirklich einfach sind. Und ich habe keine Ahnung, wie jemand mit der Nummer 1518 kam, wenn der Tisch 1542 sagt.


22
2017-08-28 20:25


Ursprung


Die eigentliche Frage ist, was Sie mit "in der Drahtgröße" meinen und was werden Sie mit dieser Information machen? Versuchen Sie, Pakete pro Sekunde zu berechnen? - Mike Pennington
@MikePennington Versuch, die Transite-Zeit in der Leitung zu bestimmen. Mit Paketgröße und Ethernet-Geschwindigkeit (10 Gigabit) können Sie das berechnen. - chrisapotek


Antworten:


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


Das Maximum Nutzlast im 802.3 Ethernet ist 1500 Bytes.
Dies sind die Daten, die Sie über die Leitung senden möchten (und worauf sich die MTU bezieht).
[payload] <- 1500 Bytes

Die Nutzlast ist in einem gekapselt Ethernet-Rahmen (die Quelle / Ziel-MAC, VLAN-Tag, Länge und CRC Checksum hinzugefügt. Dies ist insgesamt 22 Bytes zusätzliche "Zeug"
[SRC+DST+VLAN+LENGTH+[payload]+CRC] <- 1522 Bytes

Der Frame wird über das Kabel übertragen - vor der Ethernet - Karte steht er auf und schreit laut, um sicherzustellen, dass niemand das Kabel benutzt (CSMA / CD) - Dies ist die Präambel und Start-of-Frame-Trennzeichen (SFD) - eine zusätzliche 8 Bytes, so jetzt haben wir:
[Preamble+SFD+[Ethernet Frame]] <- 1530 Bytes

Wenn ein Ethernet-Transceiver zum Senden eines Frames fertig ist, wird von 802.3 verlangt, 12 Bytes Stille ("Interframe Gap") zu übertragen, bevor der nächste Frame gesendet werden darf.
[Preamble+SFD+[Ethernet Frame]+Silence] <- 1542 Byte werden auf dem Draht übertragen.


Präambel, SFD und Interframe Gap zählen nicht als Teil des Frames. Sie sind eine Supportstruktur für das Ethernet-Protokoll selbst.

Die MTU gilt für die Payload - sie ist die größte Dateneinheit, die Sie in das Paket stecken können. Ein Ethernet-Paket mit einer MTU von 1500 Byte wird also tatsächlich ein 1522-Byte-Frame und 1542 Bytes auf dem Draht sein (vorausgesetzt, es gibt ein vLAN-Tag).

Also die Antwort auf deine Frage - Was ist das größte Paket, das ich über das Ethernet ohne Fragmentierung aussenden kann? - ist 1500 Byte Nutzdaten.

JEDOCH Die Ethernet-Schicht ist möglicherweise nicht Ihr limitierender Faktor. Um festzustellen, ob die MTU durch etwas auf dem Weg kleiner als 1500 Byte Nutzdaten ist, verwenden Sie eines der folgenden Verfahren:

  • 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 von sizeofdata das funktioniert, ist die MTU (über den bestimmten Weg, den Ihre Daten nehmen).


26
2017-08-28 20:35



Allerdings muss ich IP- und UDP-Header von diesem 1500 ausschließen, oder? Also ist meine maximale Anwendungsnachrichtenlänge 1472 für UDP. - chrisapotek
@chrisapotek Korrekt - Die Header IP und UDP (oder TCP, GRE usw.) sind Teil der Payload, die in den Ethernet-Frame eingefügt wird - voretaq7
traceroute --mtu {target} auf Linux zeigt auch max mtu an - Rqomey
sollten wir etwas "körperlicher" werden? en.wikipedia.org/wiki/8b/10b_encoding - SaveTheRbtz
@SaveTheRbtz oh bitte nein - runter zur binären Darstellung zu kommen schmerzt mein Kopf genug :-) - voretaq7


Es hängt von der Menge der Daten ab, die Sie in den Rahmen legen. Wenn Sie 1500 Byte Daten in einen Rahmen eingeben, beträgt Ihre Gesamtbildgröße 1518 Byte. Mit 1472 Datenbyte erhalten Sie eine Gesamtgröße von 1500 Frames.

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

Wenn Sie wirklich daran interessiert sind, die Fragmentierung zu testen, können Sie dies mit einem guten alten Ping mit ein paar Flags testen:

ping Hostname -f -l sizeofdata

Das Flag -f bewirkt, dass der Ping fehlschlägt, wenn das Paket fragmentiert ist. Der Schlüssel zum Verständnis hier ist "sizeofdata" ist die Menge an Daten, die Sie in eine Nachricht einfügen können, ohne zu fragmentieren. Wenn Sie also eine Payload von 1500 senden, beginnen Sie mit der Fragmentierung, wenn Sie über 1500 Bytes gehen. Stellen Sie das auf 1472 herunter (1500 - das 18-Byte-Overhead), und Sie werden sehen, dass die Pings durchgehen.


2
2017-10-29 10:34



Es tut mir leid, 1542 Bytes sind weit über dem Standard-Ethernet-Frame von IEEE 802.3 definiert. Eine ungetaggte 1500-Byte-Ethernet-Nutzlast beträgt 1518 Byte (ohne SFD / Preable). Ein 802.1q-markierter Frame ist 1522 Bytes (gleiche Vorbehalte) - 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 Frame-Größe von 1542 minus die 42 zusätzlichen Sachen. Ist das korrekt? - chrisapotek
Entschuldigung, ich habe das falsch eingegeben - ich habe nur die Antwort aktualisiert, aber wenn ich mich immer noch irre, lass es mich wissen - das ist die Mathematik, an die ich mich erinnere: S - Univ426
Es tut mir leid, ich muss mich geirrt haben - ich dachte, ich hätte es verstanden, aber ich habe eindeutig meine Nummern ausgeschaltet, es sieht aus wie sein 1518: Tut mir leid - Univ426
Du bist nicht verwirrt, sondern jeder. Also meine Fragen gehen weiter. Was ist der Unterschied zwischen MTU und Ethernet-Frame-Größe? Ist die Nutzlast 1500 oder weniger? - chrisapotek


Für den grundlegenden Ethernet_II-Rahmen beträgt die Rahmengröße 1518 Byte (on oder off the wire). Dieser besteht aus 6 Byte für die Ziel- und Quelladresse, 2 Byte für das Typfeld zwischen 46 und 1500 Byte für die Nutzdaten (in diesem Fall das gesamte IP-Paket mit IP-Header und UDP-Header) und 4 Byte für der FCS. Zusätzlich dazu gibt es eine Beschränkung, wie klein ein Rahmen sein kann (64 Bytes). Deshalb ist der Bereich von 46 Bytes (fügen Sie das zu den zwei Adressen und dem Typ und dem FCS hinzu und Sie erhalten 64 Bytes - 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 versehen müssen, wird vor dem Typfeld ein zusätzliches Feld hinzugefügt. Dies ist 4 Bytes. Dies bedeutet nun, dass der Größenbereich für die Nutzlast am unteren Ende um 4 Byte reduziert werden kann und mindestens 64 Byte beträgt. Also die 42. (Also 42 + 6 + 6 + 2 + 4 + 4 für das VLAN-Tag = 64)

Also, wenn der Bereich geschrieben wird 1500-42 bedeutet nicht 1500 minus 42, bedeutet, dass alles von 1500 bis 42 Bytes gültig ist. Eines dieser Telegramme könnte so groß wie 1522 Bytes sein (wenn nur ein Tag verwendet wird, oder 1526, wenn zwei Tags verwendet werden). Nichts davon erklärt die Nummer 1542.

Um zu dieser Nummer zu gelangen, müssen Sie überlegen, wie ein Frame über Ethernet gesendet werden kann. Es gibt keine Uhr in einem Ethernet-LAN, daher werden eine Reihe von 1en und 0en von dem Sender eines Rahmens gesendet, um eine Uhr einzustellen. Dies wird als Präambel bezeichnet. Nicht jeder Zuhörer wird die ganze 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 Bits, die gesendet wurden, umgedreht, so dass es anstelle von 10101010 zu 10101011 wird. Dieses Byte wird als Frame-Anfangsbegrenzer (SDF) bezeichnet. Dies ist technisch nicht sinnvoll, um den Draht zu erfassen, so dass die 7 Bytes der Präambel und die 1 Byte SDF normalerweise nicht gezählt werden, aber wenn sie unser Original wären 1518 wäre jetzt 1526. Immer noch nicht 1542 ..

Nachdem ein Rahmen gesendet wurde, gibt es eine erzwungene Stille auf der Leitung, die die Zwischenrahmenlücke genannt wird. Dies entspricht einer Übertragung von 12 Bytes. Dies wird auch nicht gezählt oder erfasst, aber wenn es wäre, würde uns das auf 1538 Bytes bringen. Der einzige Weg, um nun von 1538 zu 1542 zu gelangen, besteht darin, zu sagen, dass der Rahmen markiert ist (d. H. Er enthält das 4-Byte-Plan-Tag). Puh, 1542 endlich.

Es ist alles in der Terminologie. Ein Standardrahmen ist 1518 Bytes auf der Leitung (soweit es ein Erfassungsgerät betrifft). Ein markierter Rahmen (einzelnes Tag) ist 1522 Bytes auf dem Draht. Diese belegen 1538 Bytes oder 1542 Bytes Übertragungsraum auf der Leitung.

Hoffe das hilft zu klären ..


0
2018-06-09 15:24





Nein, du willst, dass die Fragmentierung auftritt. Deshalb bist du es Get-Paket muss fragmentiert werden, aber df gesetzt nimm es wie eine 2-Wege-Autobahn mit einer ganzen Reihe von Semis gegen die gleiche Autobahn mit einer ganzen Reihe von kleinen intelligenten Autos, die beide zum gleichen Ziel Semis tragen mehr Nutzlast, aber sind langsamer und können leichter kleinere Autos tragen, aber weniger tragen schneller reisen MSS ist auch nicht dasselbe wie MTU


-1



Diese Antwort ist fast, aber nicht ganz unabhängig von der Frage. - kasperd