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?

  • La macchina non può più comunicare sulla networking locale
  • Come funziona come host RDP influenzare la visibilità / routing UDP?
  • Tuning stack di Solaris TCP
  • IP statico per IP dinamico
  • OpenVPN: come mitigare i routes MTU di path su base client?
  • È ansible utilizzare WMI per determinare se una connessione riceve i propri server DNS da DHCP?
  • 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 .

  • POST di MTU + ~ 798 byte si perde
  • MTU sul server accidentalmente impostato su 0, non può ssh in esso?
  • Come controllare chi blocca ICMP durante la negoziazione del path MTU?
  • MTU sulle reti di dati mobili
  • OpenVPN bassa prestazione. Ho problemi MTU? Scorie all'interno
  • Che cosa sono malinteso sul calcolo della 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.