Sono sicuro che ci sia qualche antica ragione per questo, ma che cos'è? Sembra un servizio orientato verso una consegna affidabile dei dati.Perché NFS usa UDP di default?
risposta
- NFS è stato originariamente progettato per essere utilizzato su una LAN dove i tassi di perdita sono molto bassi.
- UDP è più veloce, e ha meno spese generali
- NFS è senza stato, quindi è semplice per i clienti di riprovare
Nota che NFS v3 + può utilizzare il protocollo TCP.
UDP viene utilizzato quando il protocollo verrà gestito dall'applicazione stessa. L'app potrebbe avere un'idea migliore su come eseguirla, o potrebbe essere più veloce (nelle condizioni speciali dell'applicazione). TCP è molto bello ma ha un sacco di spese generali ad esso associati.
Prestazioni. UDP ha un sovraccarico molto più basso del TCP. D'altra parte NFS deve gestire il trasporto affidabile da solo (rispetto al TCP) ma in quanto questo è un protocollo per LAN in cui problemi di connessione e interruzioni del pacchetto sono (o meglio: dovrebbe essere) non un problema, è ottimizzato per le prestazioni.
Questo è solo fuorviante. Il trasferimento predefinito di UDP è la ragione più importante del perché NFS su collegamenti veloci (ad es. Gbit/s o 10 GBit/s Ethernet) è eccessivamente lento se non configurato correttamente. – Feuermurmel
@Feuermurmel Non sono sicuro del perché questo dovrebbe essere fuorviante. Nel momento in cui è stata presa la decisione sul protocollo NFS, Gbit/s o superiore non era un caso comune per le infrastrutture di rete. Inoltre, gli stack TCP non erano ottimizzati e (più o meno) tolleranti ai guasti come lo sono oggi. Sono abbastanza fiducioso che gli sviluppatori NFS abbiano applicato una buona parte dei test delle prestazioni sugli stack/protocolli di rete attuali prima che decidessero di implementare un protocollo artigianale. Non ha funzionato con velocità di rete ancora più elevate e altre ottimizzazioni, questo è probabilmente il motivo per cui hanno cambiato l'impostazione predefinita nelle versioni successive. – Kosi2801
La mia ipotesi è che sia probabilmente per motivi legacy (storici). Originariamente NFS era probabilmente usato su reti a bassa latenza dove c'erano pochissime possibilità di errore, quindi il sovraccarico di iniziare l'handshake a 3 vie per impostare la connessione TCP (insieme con il riconoscimento bidirezionale di tutti i messaggi) superò la semplicità di utilizzando un protocollo senza connessione come UDP.
Quando UDP viene utilizzato come protocollo di trasporto, presumibilmente sarebbe il cliente NFS a gestire le ritrasmissioni se necessario.
UDP è il valore predefinito per NFSv2 (che nessuno dovrebbe utilizzare in questi giorni) ma NFSv3 utilizza TCP per impostazione predefinita. Le montature TCP sono più affidabili e sai che hai un problema di rete molto più veloce che con UDP.
È vero: quando si utilizza NFS su TCP e c'è un problema di rete si ottengono lunghi timeout e maniglie obsolete. Con UDP si recupera per pura forza di volontà di esplosione di pacchetti UDP. – synthesizerpatel
La connessione UDP stateless riduce al minimo il traffico di rete, poiché il server NFS invia al client un cookie dopo che il client è autorizzato ad accedere al volume condiviso. Questo cookie è un valore casuale memorizzato sul lato server e viene inoltrato insieme alle richieste RPC dal client.
UDP è senza stato, TCP non lo è, ma TCP ha molte proprietà predefinite che non hanno la suite NFS, o piuttosto che NFS ha voluto governare le specifiche. In particolare, quando TCP esegue trasferimenti di pacchetti, governa i timeout, ecc.
Con UDP, si perdono i costi generali che non si desidera particolarmente. Quando il filesystem NFS era originariamente pensato, il sistema fa una scrittura, e se finisce solo a metà, sarebbe male ... quindi NFS (in modalità hard) continuerà a riprovare per completare la transazione per sempre, 1 minuto, 5, 10, e ora, al giorno ... quando la connessione ritorna, la transazione potrebbe continuare fino al completamento ...
NFS si occupa dello "stato" invece del TCP, il cui design imposta un nuovo stato sul nuova connessione (o riconnessione), tale connessione (e stato) potrebbe morire per qualsiasi motivo (hardware) e una nuova connessione non potrebbe persistere in quello stato ... Pensare all'elaborazione di un file ... basta lasciare il processo da solo, il La connessione NFS si interrompe per un po ', ma quando ritorna, tutto continuerà solo .. Oggi le applicazioni sono più intelligenti, i percorsi sono numerosi, le cose sono più modulari e siamo molto più impazienti ... se non lo faranno Piano .. qualcuno riceve una telefonata e deve collegarsi e farlo funzionare in ogni modo possibile ... nel giorno, quando poteva essere lasciato, era una cosa più semplice ...Il modo in cui funziona è ancora buono oggi, ma ora ha molte più opzioni e tende ad avere più persone che risolvono ogni cosa più prontamente ora. Anche l'idea di ogni estremità che passa gli oggetti di sessione avanti e indietro e non commessa tra un lavoro e l'altro, fino a quando entrambe le parti concordano che sono finite ... nel giorno in cui NFS ha fatto molto per te ...
L'analogia è in qualche modo simile a come funzionava la RS232 ... l'elettronica faceva il suo dovere e caricava i buffer e si riempiva e dovevano fermarsi (o perdere informazioni), potevano passare quel flusso di informazioni (e svuotare i buffer e continua) quando il CTS (Clear to send pin- as in metal pin sulla spina) era alto o basso (come mai dovrebbe essere).
UDP è stato utilizzato anche perché potrebbe ridurre notevolmente l'utilizzo della memoria. Negli anni '80, quando NFS era stato originariamente sviluppato, avresti un sistema UNIX con circa 4-8 MB di RAM e (almeno in ambiente accademico) il "server" potrebbe essere semplicemente uno di questi sistemi da 4-8 MB con pochi dischi extra collegati ad esso. L'utilizzo della RAM sul server è stato un grosso problema, potresti aver perso diversi MB nei buffer TCP che sono stati utilizzati meglio come cache del disco. Inoltre ha reso facile gestire la pressione della memoria, un server NFS sovraccaricato potrebbe semplicemente eliminare le richieste.
sembra che NFS non usi UDP di default più, vedere alcune delle risposte. NFSv4 potrebbe anche solo usare TCP? – rogerdpack
Sì, per NFSv4, consultare https://tools.ietf.org/html/rfc7530#section-3.1. UDP per la maggior parte sta andando via a questo punto. –