Come è l'MTU di 65535 in UDP ma ethernet non consente la dimensione del frame più di 1500 byte

Sto utilizzando un Ethernet veloce di 100 Mbps, la cui dimensione è inferiore a 1500 byte (1472 byte per il carico utile come per il mio libro di text). In questo modo ho potuto submit e ricevere un pacchetto UDP di size di messaggio 65507 byte, il che significa che la dimensione del pacchetto era 65507 + 20 (intestazione IP) + 8 (intestazione UDP) = 65535.

Se la dimensione del payload del fotogramma è di massima 1472 byte (come per il mio libro di text), come può la dimensione del pacchetto di IP essere maggiore di quella che è qui 65535?

  • Trovare i pacchetti di invio di file eseguibili ad un indirizzo IP specifico?
  • Perché il model tcp / ip viene utilizzato per sviluppare i protocolli e non OSI
  • Qual è la differenza tra UDP e TCP?
  • Nagios check_udp_ports restituisce critico: il risultato al controllo pianificato, viene eseguito manualmente
  • Piccoli pacchetti di networking vs pacchetti più grandi - confusi
  • Problemi di modifica della maschera di networking da / 24 a / 22 sulla networking locale
  • Ho usato il codice del mittente come

    char buffer[100000]; for (int i = 1; i < 100000; i++) { int len = send (socket_id, buffer, i); printf("%d\n", len); } 

    Codice del ricevitore come

     while (len = recv (socket_id, buffer, 100000)) { printf("%d\n". len); } 

    Ho osservato che send returns -1 su i > 65507 e recv printing o riceve un pacchetto di maximum of length 65507 .

  • Come aumentare la dimensione MTU su Linux 2.6?
  • POST di MTU + ~ 798 byte si perde
  • Come posso visualizzare il PMTU memorizzato nella cache sotto Linux (e tutti gli altri OS)
  • PIX 506E, MTU, VPN Packet Fragmentation e sistema telefonico Shonetworkingl IP
  • OpenVPN bassa prestazione. Ho problemi MTU? Scorie all'interno
  • Perché posso ricevere frame di ethernet più grandi della mia attuale dimensione MTU?
  • 5 Solutions collect form web for “Come è l'MTU di 65535 in UDP ma ethernet non consente la dimensione del frame più di 1500 byte”

    I datagrammi UDP hanno poco a che fare con la dimensione MTU che puoi renderli grandi quanto ti piace fino al 64K è la massima menzionata sopra. Puoi anche submit uno di essi in un pacchetto integer finché si utilizzano i frame jumbo con una dimensione più grande del grande datagramma.

    Tuttavia i frame jumbo devono essere supportti da tutte le apparecchiature che il canvasio passerà e questo è un problema. Per scopi pratici i telegrammi Ethernet sono la dimensione del tranport più comune, MTU per questi è circa 1500 byte, voglio dire che 1500 avanti, ma non sempre. Quando si crea un datagramma UDP più grande del MTU sottostante (che, come indicato è più spesso ethernet), verrà quindi disturbato in modo silenzioso in un numero di frame di 1500 byte. Se tcpdump questo traffico vedrai un certo numero di pacchetti rotti al limite MTU che avrà più flag di frammenti insieme con un numero di frammento. Il primo pacchetto avrà un numero di frammenti di 0 e più frammenti impostati e l'ultimo avrà un numero di frammento non zero e più frammenti non impostati.

    Allora perché la cura? Il dettaglio dell'attuazione è davvero importnte. La frammentazione può danneggiare le performance della networking, non un problema più importnte, ma uno di cui essere consapevoli. Se una dimensione enorme del datagramma si utilizza allora qualora un frammento venga perso, tutti i datagrammi dovranno essere risentiti. Allo stesso modo ad alti volumi e oggi sono volumi perfettamente raggiungibili, ma è ansible l'associazione di cornici al riassemblaggio. Ci possono essere problemi anche per get pacchetti UDP frammentati per attraversare configurazioni di firewall aziendali in cui i bilanciatori di carico distribuiscono i pacchetti, se un frammento è su un firewall e l'altro in un altro, il traffico verrà eliminato come incompleto.

    Quindi non creare datagrammi UDP più grandi della frammentazione della dimensione MTU a less che non sia necessario e se si deve specificare che l'infrastruttura che viene comunicata è vicina (stessa substring), a quel punto i frame jumbo sarebbero probabilmente una buona opzione.

    Lo strato IP frammenterà il pacchetto sull'estremità di invio e quindi reinstalla nuovamente sull'estremità di ricezione, prima di passarlo in UDP. Dal livello UDP, non si può dire che il pacchetto sia stato frammentato. Se utilizzi uno strumento di cattura di pacchetti come Wireshark , dovresti essere in grado di vedere che il computer sta ricevendo pacchetti IP limitati all' MTU.

    Risulta che consentire a stack TCP / IP di frammentare i pacchetti, se necessario, è molto più basso rispetto all'invio di singoli pacchetti.

    Per rispondere alla tua domanda, "Se la dimensione del payload del frame è di massima 1472 byte (come per il mio manuale), come può la dimensione del pacchetto di IP essere maggiore di quella che è qui 65535?"

    È dovuto ad una function di scaricamento chiamata UFO (UDP Fragmentation Offload). Fare riferimento a questo link.

    È ansible verificare e triggersre le funzioni di offloading tramite ethtool -k ethX e ethtool -K ethX rispettivamente.

    Se stai monitorando i frame in output, è ansible che la scheda di networking supporti la distribuzione della segmentazione e sia abilitata. Con la distriggerszione della segmentazione abilitata, la scheda di networking gestisce la segmentazione del pacchetto / frame nella dimensione appropriata piuttosto che lo stack di networking. Ciò libera la CPU nel computer per eseguire altre attività, migliorando le performance. Su linux, "ethtool -k [device]" mostrerà le flag di offload.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.