2010-10-13 7 views
8

Un po 'di sfondo.Quanto è grande un frame di pacchetti IP che include intestazioni?

Sto scrivendo un'applicazione che utilizza UDP. L'applicazione verrà eseguita su una LAN (non su Internet). Suppongo che se il mio MTU è 1500 allora questo è quanto grande può essere un payload UDP, ma io sono non sicuro se l'intestazione UDP è pensata per adattarsi anche a questo.

Sospetto che se invio un pacchetto UDP con un carico utile di 1500 byte e il MTU della macchina sia 1500 byte finirà per inviare due pacchetti?

Cercare Internet per una risposta chiara qui sembra più difficile di quanto dovrebbe essere, ho visto informazioni contrastanti.

+0

Abbastanza sicuro che vi darà la frammentazione. È possibile utilizzare Wireshark per vedere questo di sicuro però. –

+0

Grazie, sì wirehark non stava mostrando molto perché sto sviluppando in isolamento. loopback MTU è 16436! – Matt

+0

Grazie a tutti, e grazie per i link. Erano migliori di quelli che ho trovato su google. – Matt

risposta

9
------------------------------------------------------------------------------ 
|Ethernet | IPv4   |UDP | Data     |Ethernet checksum| 
------------------------------------------------------------------------------ 
    14 bytes 20 bytes  8 bytes x bytes    4 bytes 
      \ (w/o options)        /
      \___________________________________________/ 
           | 
          MTU 

Se il vostro MTU è 1500, si dispone di 1500-20-8 = 1472 byte per i dati.

  • Se si supera questo, i pacchetti saranno frammentati, vale a dire. diviso in più pacchetti.
  • Potrebbero esserci più livelli coinvolti, ad es. 4 byte a intestazione VLAN se si è in cima a una vlan ethernet.
  • Alcuni router tra voi e la destinazione potrebbero aggiungere più livelli.
+1

AFAIK il MTU NON include l'intestazione Ethernet e il CRC32 finale (che è stato omesso), ma è il payload Ethernet effettivo, in cui è necessario sottrarre il sovraccarico del protocollo IP. – Lucero

+0

Grazie, questo è quello che sospettavo ma non ero sicuro. – Matt

+0

@Lucero Sì, potresti avere ragione, a seconda del layer che definisci come MTU. MTU di un datagramma IP in questo caso credo. – nos

2

Forse questo articolo aiuta: http://sd.wareonearth.com/~phil/net/overhead/

+0

Grazie, un link molto utile. I tassi di throughput per gig-e sono utili. Sto raggiungendo 760 GB/s su hardware non server, quindi penso che non sia poi così male. Ma, se imposto correttamente i miei dati a pacchetto, potrebbe migliorare. – Matt

3

Sì, l'esempio non si adatta a un frame.

Il carico utile di dati Ethernet è 1500 byte. IPv4 richiede un minimo di 20 byte per la sua intestazione. In alternativa, IPv6 richiede un minimo di 40 byte. UDP richiede 8 byte per la sua intestazione. Ciò lascia 1472 byte (ipv4) o 1452 (ipv6) per i dati.

Maggiori informazioni:

-1

Quindi, ecco come funziona. Ethernet limita il flusso di dati a 1500 byte per fotogramma anche se si dispone di un tubo di grasso da 100 mega. Per utilizzare realmente la velocità di linea, tramite l'applicazione UDP, è necessario utilizzare/spostare frame jumbo Ethernet che possono supportare fino a 9000 byte per frame. Inoltre, se guardi netflix/youtube e altri protocolli di streaming, testano il tuo link prima di iniziare lo streaming. Ciò che essenzialmente fanno è che ti inviano alcuni dati e calcolano/media la velocità del collegamento prima di scaricare il flusso. Utilizzano essenzialmente anche UDP ma con una dimensione del pacchetto molto grande. Immagino sicuramente più grandi di 1500 byte.

+0

Si chiama percorso MTU discovery e non ha nulla a che fare con la mia domanda originale. Non ha senso postare la tua risposta dato che la domanda è stata adeguatamente risposta oltre 1 anno fa. Pensaci attentamente prima di postare. – Matt

Problemi correlati