Cosa succede quando una connessione Internet è più veloce della velocità di scrittura della memoria?


28

Se si tentasse di scaricare un file a una velocità di 800 Mb / s (100 MB / s) su un disco rigido con una velocità di scrittura di 500 Mb / s (62,5 MB / s), cosa accadrebbe? Il sistema limiterebbe la velocità di download?


5
Questa è, ed è stata fin dall'inizio delle reti, una situazione totalmente comune quando ci si trova in una rete veloce, come in un'università al di fuori delle ore di punta.
Peter - Ripristina Monica il

4
Dato che puoi programmare, puoi facilmente osservarlo da solo. Scrivi un semplice server e client TCP (dovresti essere in grado di trovare esempi per la libreria socket della tua lingua preferita), lasciare che il servizio fornisca i dati il ​​più velocemente possibile e modificare il client per leggerli solo a una velocità specificata (dormire tra le letture). Verificare che i dati vengano ricevuti intatti. Puoi persino osservare i pacchetti inviati con WireShark o simili.
Carsten S,

3
Avendo avuto un'esperienza come descritto nel post di @ PeterA.Schneider, posso dirti che devi tenere conto dei buffer RAM del sistema operativo. Fino a quando non vengono riempiti, è possibile archiviare efficacemente i dati scaricati alla velocità della RAM. (Di solito in migliaia di megabyte al secondo.)
Nessuno il

@Nobody E, naturalmente, ci sono sempre le assurde pipe che compongono la spina dorsale di Internet che trasmettono i dati così velocemente che la RAM del tuo tipico computer non riesce nemmeno a tenere il passo!
Cort Ammon - Ripristina Monica il

Il tuo computer genererebbe una richiesta ICMP che gli dice di rallentare. Tuttavia, a queste magre velocità potresti anche ottenere un SSD o M.2 ssd e ora la tua velocità di scrittura è così alta che 100mb / s sarà facile. Alcuni M.2 sono 1500 MB / s di scrittura. Inserisci 2 o più in un RAID e puoi moltiplicare quella velocità più volte. l'SSD semplice può essere di 300-450 MB / s in base alla capacità e al marchio. storagereview.com/samsung_960_pro_m2_nvme_ssd_review
cybernard

Risposte:


41

Molti protocolli, incluso TCP, che è il protocollo più utilizzato su Internet, usano qualcosa chiamato controllo di flusso. Il controllo del flusso significa semplicemente che TCP assicurerà che un mittente non stia schiacciando un destinatario inviando pacchetti più velocemente di quanto possa svuotare il suo buffer. L'idea è che un nodo che riceve i dati invierà una sorta di feedback al nodo che invia i dati per fargli conoscere le sue condizioni attuali. Pertanto, il feedback bidirezionale consente a entrambe le macchine di utilizzare in modo ottimale le proprie risorse e prevenire eventuali problemi dovuti a mancata corrispondenza nel proprio hardware.

https://en.wikipedia.org/wiki/Flow_control_(data)


2
... idealmente. Bufferbloat significa che è probabile che diversi switch stiano archiviando e aspettando di inoltrare un mucchio sempre crescente di pacchetti (che potrebbe essere in qualche modo mitigato da un protocollo di trasferimento che richiede ACK occasionali per continuare).
Eric Towers,

3
Si potrebbe dire che questo distingue TCP (ehi, ha il controllo nel suo nome) da UDP che continuerà felicemente a inviare, indipendentemente dalla capacità del consumatore.
Peter - Ripristina Monica il

5
@Fabian Questo è quello che succede comunque in ogni momento. La cache del disco rigido del sistema operativo consente di "inviare" i dati all'HDD molto più velocemente di quanto possa essere scritto, riempiendo la cache in-RAM e scrivendo sul disco il più presto possibile. Pertanto, a seconda della quantità di RAM (non utilizzata) nel computer, il sistema operativo potrebbe bufferizzare da dozzine a centinaia di MB di un file nella RAM prima che raggiunga il disco. La dimensione della cache è tuttavia un compromesso, poiché i dati che l'applicazione potrebbe considerare già persistenti sul disco potrebbero non essere per un certo periodo di tempo, il che potrebbe causare una perdita imprevista di dati in caso di interruzione dell'alimentazione o simili.
JimmyB,

2
@Fabian: questo è visibile nella finestra di dialogo per la copia dei file in Windows, dalla versione 8.1 in poi. In modalità estesa, mostra la velocità di trasferimento e si può osservare che la prima metà di un secondo circa è molto veloce e se il file è più grande di quello che avrebbe potuto essere trasferito durante quello, allora la velocità diminuisce in modo significativo, a un tasso costante. Quella velocità all'inizio era dovuta alla cache. Dopo che è stato riempito, la velocità è ridotta.
vsz,

1
@EricTowers No, il bufferbloat si verifica solo quando il collo di bottiglia è una connessione di rete. (Potresti vedere una forma di bufferbloat sul disco rigido, che rallenterà le altre operazioni del disco rigido, ma non influirà su altre connessioni di rete)
user253751

12

cosa succederebbe?

  • I byte che non possono essere scritti sull'HDD in tempo verranno bufferizzati temporaneamente da qualche parte; molto probabilmente alcuni di essi verrebbero bufferizzati nell'applicazione che "converte" il traffico di rete in traffico HDD (cioè il tuo browser) e, in caso di congestione più lunga, le parti di livello inferiore dello stack (cioè il sottosistema di rete del tuo PC) avrebbe buffer anche a livelli inferiori, che si riempirebbero fino al completo.
  • Le informazioni che i dati stanno arrivando troppo velocemente si propagheranno in qualche modo al mittente. Nel caso di TCP / IP, ciò significherebbe che esiste una parte del protocollo TCP che dice al mittente che dovrebbe interrompere l'invio. La pagina Wikipedia su TCP / IP lo dice meglio quando dice:

    La sua responsabilità [TCP] include il trasferimento di messaggi end-to-end indipendentemente dalla rete sottostante, insieme a controllo degli errori, segmentazione, controllo del flusso, controllo della congestione e ...

  • Alla fine della giornata, il "sistema" (non necessariamente il computer del destinatario, ma l'intero sistema costituito da mittente, rete e destinatario) "limiterebbe" indirettamente la velocità di download. Tuttavia, non esiste mai una variabile "speed". Sia il traffico di rete che il traffico dell'HDD sono basati su blocchi, vale a dire che i ritardi tra questi blocchi sarebbero abbastanza lunghi (sul lato della rete più veloce) fino a quando la "velocità" netta (throughput) è mediamente uguale alla velocità più lenta del tuo DISCO FISSO.

Il sistema limiterebbe la velocità di download?

Non letteralmente. Qualche decina di anni fa, i computer comunicavano effettivamente con velocità sincrone (ovvero modem con impostazioni di velocità fissa). Questo, a un livello relativamente basso, sta accadendo anche oggi; cioè, il tuo modem DSL o via cavo avrà probabilmente una certa velocità impostata a cui comunica con il suo componente di uplink fisico diretto. Ma nel 2017 tutto ciò è sufficientemente complicato che quasi tutti i componenti sono abbastanza dinamici. Ai vecchi tempi, i modem erano spesso fisicamente in grado di parlare solo a una certa velocità, e questo doveva persino essere stabilito prima di comporre il numero. Esistono (c'erano) alcuni protocolli di rete come ATM che cercavano di ottenere una rete sincrona ad ampia area, ma non sono andati così bene, rispetto a TCP / IP.

Oggi, la velocità effettiva viene solitamente sempre implicitamente raggiunta tramite buffering, controllo del flusso e così via.

Nota anche che nel tuo esempio possono esserci anche più partecipanti. L'interfaccia di rete potrebbe avere più lavoro da fare (altre connessioni al PC). Alcune parti della rete lungo il percorso potrebbero essere occupate (un membro della famiglia naviga o guarda video). È possibile che l'HDD stia eseguendo 3 scritture di file di grandi dimensioni contemporaneamente. Quindi non avrebbe senso impostare una "velocità" specifica che potrebbe essere limitata.


2

I download di file (di solito) avvengono tramite un protocollo chiamato TCP. In TCP, il mittente non invia alcun dato fino a quando il destinatario non è pronto a riceverlo.

Quello che accadrà è che il tuo computer si riserverà una certa quantità di RAM per conservare temporaneamente i dati ricevuti prima di scriverli sul tuo disco rigido (questo si chiama buffer). Quindi chiederà al mittente i dati sufficienti per riempire il buffer. Man mano che riceve i dati, inizierà a scrivere i dati dal buffer sul disco rigido, tuttavia non richiederà più dati mentre il buffer è quasi pieno.

L'effetto complessivo è che il mittente attende semplicemente che il destinatario raggiunga prima che continui a inviare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.