Qual è la dimensione "in-the-wire" di un frame Ethernet? 1518 o 1542?


22

Secondo la tabella qui , si dice che MTU = 1500 byte e che la parte del payload è 1500 - 42 byte o 1458 byte (<- questo è effettivamente sbagliato!). Inoltre, devi aggiungere le intestazioni IPv4 e UDP, che sono 28 byte (20 IP + 8 UDP). Ciò lascia il mio messaggio di applicazione massima possibile a 1430 byte! Ma cercando questo numero su Internet, vedo invece il 1472. Sto facendo questo calcolo sbagliato qui?

Tutto quello che voglio scoprire è il massimo messaggio di applicazione che posso inviare via cavo senza il rischio di frammentazione. Non è sicuramente 1500 perché include le intestazioni del frame. Qualcuno può aiutare?


La confusione è che PAYLOAD può effettivamente essere grande quanto 1500 byte e questo è l'MTU. Allora, qual è la dimensione in-the-wire per un carico utile di 1500? Da quella tabella può arrivare a 1542 byte.

Quindi il numero massimo di messaggi di app che posso inviare è 1472 (1500 - 20 (ip) - 8 (udp)) per un massimo nella dimensione del filo del 1542. Mi stupisce di come le cose possano diventare così complicate quando in realtà sono semplici. E non ho idea di come qualcuno abbia inventato il numero 1518 se la tabella dice 1542.


La vera domanda qui è cosa intendi per "nella dimensione del filo" e cosa farai con queste informazioni? Stai cercando di calcolare i pacchetti al secondo?
Mike Pennington,

@MikePennington Sto provando a determinare il tempo di transito nel filo. Con la dimensione del pacchetto e la velocità Ethernet (10 gigabit) puoi calcolarlo.
chrisapotek,

Risposte:


26

Il diagramma su Wikipedia è orribile. Spero che quello che sto per scrivere sia più chiaro.


Il carico utile massimo in Ethernet 802.3 è di 1500 byte.
Questi sono i dati che stai tentando di inviare via cavo (e a cosa si riferisce l'MTU).
[payload]<- 1500 byte

Il payload è incapsulato in un frame Ethernet (che aggiunge il MAC sorgente / destinazione, tag VLAN, lunghezza e checksum CRC. Questo è un totale di 22 byte di "roba" aggiuntiva
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<- 1522 byte

Il Frame viene trasmesso sul cavo - prima che la tua scheda Ethernet lo faccia sostanzialmente si alza e grida davvero forte per assicurarsi che nessun altro stia usando il cavo (CSMA / CD) - Questo è il delimitatore Preambolo e Inizio del frame (SFD) - altri 8 byte, quindi ora abbiamo:
[Preamble+SFD+[Ethernet Frame]]<- 1530 byte

Alla fine, quando un ricetrasmettitore Ethernet ha terminato l'invio di un frame, 802.3 è tenuto a trasmettere 12 byte di silenzio ("Interframe Gap") prima che gli sia permesso di inviare il frame successivo.
[Preamble+SFD+[Ethernet Frame]+Silence]<- 1542 byte trasmessi sul filo.


Preambolo, SFD e Interframe Gap non contano come parte del frame. Sono una struttura di supporto per il protocollo Ethernet stesso.

L'MTU si applica al payload: è la più grande unità di dati che è possibile inserire nel pacchetto. Quindi un pacchetto Ethernet con un MTU di 1500 byte sarà in realtà un frame di 1522 byte e 1542 byte sul filo (supponendo che ci sia un tag vLAN).

Quindi la risposta alla tua domanda: qual è il pacchetto più grande che posso inviare su Ethernet 802.3 senza frammentazione? - è di 1500 byte di dati del payload .

TUTTAVIA lo strato ethernet potrebbe non essere il tuo fattore limitante. Per scoprire se qualcosa lungo il percorso sta limitando l'MTU a essere inferiore a 1500 byte di dati del payload, utilizzare uno dei seguenti:

  • Windows: ping hostname -f -l sizeofdata(tecnica menzionata da John K)
  • BSD: ping -D -s sizeofdata hostname
  • Linux: ping -M do -s sizeofdata hostname

Il valore più grande di sizeofdataciò che funziona è l'MTU (nel particolare percorso intrapreso dai tuoi dati).


Tuttavia devo escludere le intestazioni IP e UDP da questo 1500, giusto? Quindi la mia lunghezza massima del messaggio dell'applicazione è 1472 per UDP.
chrisapotek,

@chrisapotek Corretto - Le intestazioni IP e UDP (o TCP, GRE, ecc.) fanno parte del payload che viene inserito nel frame ethernet
voretaq7,

2
traceroute --mtu {target} su linux visualizzerà anche max
mtu

dovremmo diventare un po 'più "fisici"? en.wikipedia.org/wiki/8b/10b_encoding
SaveTheRbtz

@SaveTheRbtz oh per favore no - scendere alla rappresentazione binaria mi fa abbastanza male alla testa :-)
voretaq7

2

Dipende dalla quantità di dati inseriti nel frame. Se si inseriscono 1500 byte di dati in un frame, la dimensione totale del frame sarà di 1518 byte. Con 1472 byte di dati, ti ritroverai con una dimensione totale dei frame di 1500 ..

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

Detto questo, se sei veramente interessato a testare la frammentazione, un buon modo per testarlo è con un buon vecchio ping con alcuni flag:

ping nomehost -f -l sizeofdata

Il flag -f farà fallire il ping se il pacchetto è frammentato. La chiave per capire qui è "sizeofdata" è la quantità di dati che puoi inserire in un messaggio senza frammentare, quindi se invii un payload di 1500, inizierai a frammentare mentre vai oltre i 1500 byte. Abbassa questo valore al 1472 (1500 - il sovraccarico di 18 byte) e vedrai passare i ping.


Mi dispiace, 1542 byte è molto al di sopra del frame ethernet standard definito da IEEE 802.3. Un payload ethernet da 1500 byte senza tag è 1518 byte (escluso SFD / preable). Un frame con tag 802.1q è 1522 byte (stesse avvertenze)
Mike Pennington,

È molto confuso. MTU = 1500 ma la dimensione del frame è 1542 ??? Quindi MTU è solo il payload, in altre parole, è la dimensione del frame di 1542 meno le 42 cose extra. È corretto?
chrisapotek,

Scusa, ho sbagliato a digitare - Ho appena aggiornato la risposta, ma se sbaglio ancora, fammelo sapere - questa è la matematica che ricordo: S
Univ426,

Mi dispiace, devo sbagliarmi - Pensavo di averlo capito ma ho chiaramente i miei numeri, sembra il suo 1518: S mi dispiace per quello
Univ426

Non sei tu che sei confuso, ma tutti. Quindi le mie domande continuano. Che diamine è la differenza tra MTU e dimensioni del frame ethernet? Il payload è 1500 o meno?
chrisapotek,

0

Per il frame Ethernet_II di base, la dimensione del frame è 1518 byte (on o off the wire). È composto da 6 byte per ciascuno degli indirizzi di destinazione e di origine, 2 byte per il campo del tipo tra 46 e 1500 byte per il payload (nel tuo caso l'intero pacchetto IP con l'intestazione IP e l'intestazione UDP) e 4 byte per la FCS. Inoltre, esiste una limitazione sulla dimensione di un frame (64 byte). Questo è il motivo per cui l'intervallo è di 46 byte (aggiungilo ai due indirizzi e al tipo e all'FCS e otterrai 64 byte - 46 + 6 + 6 + 2 + 4 = 64).

Se il frame si trova su una rete che supporta più vlan e devi taggare il frame con un tag vlan, un campo aggiuntivo viene aggiunto prima del campo type. Questo è di 4 byte. Ciò significa ora che l'intervallo di dimensioni per il payload può essere ridotto di 4 byte all'estremità inferiore e avere comunque almeno 64 byte. Da qui il 42. (Quindi 42 + 6 + 6 + 2 + 4 + 4 per il tag vlan = 64)

Quindi quando l'intervallo è scritto 1500-42 non significa 1500 meno 42, significa che è valido qualsiasi valore compreso tra 1500 e 42 byte. Uno il filo, questo frame con tag potrebbe essere grande quanto 1522 byte (se viene utilizzato solo un tag, o 1526 se vengono utilizzati due tag). Niente di tutto ciò spiega il numero 1542.

Per arrivare a questo numero, è necessario considerare come è possibile inviare un frame su Ethernet. Non esiste un orologio su una LAN Ethernet, quindi una serie di 1 e 0 viene inviata dal trasmettitore di un frame per impostare un orologio. Questo si chiama preambolo. Non tutti gli ascoltatori "sentiranno" tutto il preambolo, ma la maggior parte dovrebbe ascoltarne una parte. Per segnalare la fine del preambolo, uno degli ultimi 8 bit inviati viene capovolto in modo che invece di 10101010 diventi 10101011. Questo byte si chiama Start of Frame Delimiter (SDF). Questo non è tecnicamente utile per catturare il filo, quindi i 7 byte del preambolo e l'SDF a 1 byte non vengono normalmente conteggiati ma se fossero i nostri 1518 originali ora sarebbero 1526. Ancora non 1542 ..

Dopo che un frame è stato inviato, c'è un silenzio forzato sul filo che si chiama gap inter frame. Ciò equivale a una trasmissione di 12 byte. Anche questo non viene conteggiato o acquisito, ma se fosse ci porterebbe a 1538 byte. L'unico modo per arrivare ora al 1542 dal 1538 è dire che il frame è taggato (cioè contiene il tag del piano a 4 byte). Uff, finalmente il 1542.

È tutto nella terminologia. Un frame standard è di 1518 byte sul filo (per quanto riguarda qualsiasi dispositivo di acquisizione). Un frame con tag (tag singolo) è 1522 byte sul filo. Questi occupano 1538 byte o 1542 byte di spazio di trasmissione sul filo.

Spero che aiuti a chiarire ..


-1

no, vuoi che si verifichi la frammentazione, ecco perché ottieni un pacchetto che deve essere frammentato, ma df set prendilo in questo modo un'autostrada a 2 vie con un sacco di semestri contro la stessa autostrada con un sacco di piccole macchine intelligenti che stanno andando entrambe gli stessi semestri di destinazione trasportano più carico utile ma sono più lenti e possono congestionare più facilmente le auto più piccole trasportano meno ma viaggiano più velocemente MSS non è lo stesso dell'MTU


1
Questa risposta è quasi, ma non del tutto, del tutto estranea alla domanda.
Kasperd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.