Domanda

Ho bisogno di sapere qual è il più grande pacchetto UDP posso inviare a un altro computer è senza frammentazione.

Questa dimensione è comunemente noto come MTU (Maximum Transmission Unit). Presumibilmente, tra i 2 computer, saranno molti router e modem che possono avere differenti MTU.

Ho letto che l'implementazione di TCP in Windows trova automaticamente la massima MTU in un percorso.

Sono stato anche sperimentando, e ho scoperto che il massimo MTU dal mio computer a un server è stato 57712 byte + intestazione. Nulla sopra che è stato scartato. Il mio computer è su una LAN, non è il MTU dovrebbe essere circa 1500 byte?

È stato utile?

Soluzione

Il seguente non risponde direttamente alla tua domanda, ma si potrebbe trovare interessante; si dice che i pacchetti IP possono essere smontati / riassemblati, e quindi più grande di limite sul supporto subalterno (ad esempio Ethernet 1500-byte): Risolvere IP frammentazione, MTU, MSS, e problemi con PMTUD GRE e IPSEC


Ulteriori informazioni su questo tema:

Non so sulla generazione di ICMP tramite un API su Windows: in una sola volta è stato proposto un tale API, ed è stato controverso perché le persone hanno sostenuto che renderebbe più facile scrivere software che implementa la funzionalità di tipo denial-of-service, generando una marea di messaggi ICMP.

No, sembra che è implementato: si veda ad esempio Winsock del programmatore Domande ricorrenti Esempi: Ping:. raw Sockets Metodo

Quindi, per scoprire MTU, generare pacchetti di ping con il 'non frammentare' bandiera.

Forse c'è un'API più facile di questo, non lo so; ma spero che ho dato a capire il protocollo sottostante [s].

Altri suggerimenti

In aggiunta a tutte le risposte precedenti, citando il classico :

IPv4 e IPv6 definire minima dimensione del buffer di riassemblaggio , la dimensione minima datagramma che sono garantiti qualsiasi implementazione deve supportare. Per IPv4, questo è 576 byte. IPv6 solleva questo per 1.280 byte.


Questo più o meno significa che si desidera limitare la dimensione del datagramma a meno di 576 se si lavora su Internet pubblica e che controlli solo un lato dello scambio - questo è quello che la maggior parte dei protocolli basati su UDP standard, fanno.
Si noti inoltre che PMTU è una proprietà dinamica del percorso. Questa è una delle cose offerte TCP per voi. A meno che non si è pronti a re-implementare un sacco di sequenziamento, i tempi, e la logica di ritrasmissione, utilizzare TCP per qualsiasi rete critiche. Benchmark, prova, profilo, cioè dimostra che il TCP è il collo di bottiglia, solo allora prendere in considerazione UDP.

Questo è un argomento interessante per me. Forse alcuni risultati pratici potrebbero essere di interesse al momento della consegna dei dati UDP grosso in tutto il mondo vero e proprio internet via UDP, e con una velocità di trasmissione di 1 bustina di un secondo, di dati continua a girare con la perdita di pacchetti minime fino a circa 2K. Durante questo e si inizia incorrere in problemi, ma con regolarità abbiamo consegnato 1600+ pacchetti bytes senza difficoltà - questo è su reti di telefonia mobile GPRS e mondo della WAN di larghezza. A ~ 1K supponendo che il segnale è stabile (la sua non!) Si ottiene bassa perdita di pacchetti.

È interessante notare che il suo non è il pacchetto strano, ma spesso una raffica di pacchetti per alcuni secondi -. Che presumibilmente è il motivo per cui le chiamate VoIP solo di tanto in tanto collasso

La tua MTU è disponibile in registro , ma il MTU in pratica sta per il più piccolo MTU nel percorso tra la macchina e la destinazione. La sua sia variabile e può essere determinato solo empiricamente. Ci sono una serie di RFC che mostra come determinare esso.

del possono avere internamente valori MTU molto grandi, poiché l'hardware di rete è tipicamente omogeneo o LAN almeno centralmente amministrato.

Per le applicazioni UDP è necessario gestire end-to-end MTU da soli se si vuole evitare la frammentazione IP o pacchetti scartati. L'approccio consigliato per qualsiasi applicazione è quello di fare del vostro meglio per usare PMTU per scegliere la vostra massima datagramma, o inviare datagrammi

https://tools.ietf.org/html/rfc5405#section-3.2

  

Unicast UDP Istruzioni per l'uso per applicazioni Designers "non dovrebbe inviare datagrammi che superano il PMTU, deve scoprire PMTU o inviare datagrammi

di Windows sembra impostazioni e l'accesso alle informazioni PMTU via è semplice interfaccia opzioni socket:

È possibile assicurarsi PMTU scoperta si trova in Via IP_MTU_DISCOVER, e si può leggere la MTU tramite IP_MTU.

https://docs.microsoft .com / it-it / windows / desktop / Winsock / ipproto-IP-presa-options

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top