¿Qué sucede cuando una conexión a Internet es más rápida que la velocidad de escritura de almacenamiento?

28

Si se intenta descargar un archivo a una velocidad de 800 Mb / s (100 MB / s) en un disco duro con una velocidad de escritura de 500 Mb / s (62.5 MB / s), ¿qué sucedería? ¿El sistema limitaría la velocidad de descarga?

ymulki
fuente
55
Esta es, y ha sido desde el inicio de las redes, una situación totalmente común cuando estás en una red rápida, como en una universidad fuera de las horas ocupadas.
Peter - Restablece a Mónica el
44
Como puede programar, puede observarlo fácilmente usted mismo. Escriba un servidor TCP simple y un cliente (debería poder encontrar ejemplos para la biblioteca de sockets de su idioma de elección), permita que el servidor entregue datos lo más rápido posible y modifique el cliente para leer esos datos solo a una velocidad específica (dormir entre lecturas). Verifique que los datos se reciban intactos. Incluso puede observar los paquetes enviados con wireshark o similar.
Carsten S
3
Habiendo tenido una experiencia como se describe en la publicación de @ PeterA.Schneider, puedo decirle que debe tener en cuenta los búferes de RAM del sistema operativo. Hasta que se llenen, efectivamente puede almacenar los datos descargados a la velocidad de la RAM. (Por lo general, en miles de megabytes por segundo.)
Nadie el
@ Nadie Y, por supuesto, ¡siempre están las tuberías absurdas que conforman la red troncal de Internet que transmiten datos tan rápido que la RAM típica de tu computadora ni siquiera puede seguir el ritmo!
Cort Ammon - Restablece a Monica el
Su computadora generaría una solicitud ICMP diciéndole que disminuya la velocidad. Sin embargo, a estas escasas velocidades, también podría obtener un SSD o un SSD M.2 y ahora su velocidad de escritura es tan alta que 100mb / s será fácil. Algunos M.2 son de 1500 MB / s de escritura. Ponga 2 o más en un RAID y puede multiplicar esa velocidad muchas veces. El SSD simple puede tener 300-450MB / s dependiendo de la capacidad y la marca. storagereview.com/samsung_960_pro_m2_nvme_ssd_review
cybernard

Respuestas:

41

Muchos protocolos, incluido TCP, que es el protocolo más utilizado en Internet, usan algo llamado control de flujo. El control de flujo simplemente significa que TCP garantizará que un remitente no esté abrumando a un receptor enviando paquetes más rápido de lo que puede vaciar su búfer. La idea es que un nodo que recibe datos envíe algún tipo de retroalimentación al nodo que envía los datos para informarle sobre su condición actual. Por lo tanto, la retroalimentación bidireccional permite que ambas máquinas utilicen de manera óptima sus recursos y eviten cualquier problema debido a la falta de coincidencia en su hardware.

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

Sigma
fuente
2
... idealmente. Bufferbloat significa que es probable que varios conmutadores estén almacenando y esperando reenviar una pila cada vez mayor de paquetes (que podría mitigarse de alguna manera por un protocolo de transferencia que requiere ACK ocasionales para continuar).
Eric Towers
3
Podría mencionar que esto distingue a TCP (hey, tiene control en su nombre) de UDP que felizmente seguirá enviando, independientemente de la capacidad del consumidor.
Peter - Restablece a Mónica el
55
@Fabian Esto es lo que sucede todo el tiempo de todos modos. El caché del disco duro del sistema operativo permite que los datos se 'envíen' al HDD mucho más rápido de lo que se puede escribir, llenando el caché en la RAM y escribiendo en el disco lo antes posible. Por lo tanto, dependiendo de la cantidad de RAM (no utilizada) en su máquina, el sistema operativo puede almacenar decenas a cientos de MB de un archivo en RAM antes de que llegue al disco. Sin embargo, el tamaño de la memoria caché es un compromiso, porque los datos que la aplicación puede considerar que son persistentes en el disco pueden no serlo durante cierto tiempo, lo que puede causar una pérdida inesperada de datos en caso de falla (de alimentación) o similar.
JimmyB
2
@Fabian: esto se puede ver en el cuadro de diálogo de copia de archivos en Windows, desde 8.1 en adelante. En el modo expandido, muestra la velocidad de transferencia, y puede observar que la primera mitad de segundo más o menos es muy rápida, y si el archivo es más grande de lo que podría haberse transferido durante ese tiempo, la velocidad cae significativamente, hasta Una tasa constante. Esa velocidad rápida al principio se debió al caché. Después de que se llena, la velocidad se reduce.
vsz
1
@EricTowers No, bufferbloat solo ocurre cuando una conexión de red es el cuello de botella. (Es posible que vea una forma de bloqueo de búfer en el disco duro, que ralentizará otras operaciones del disco duro, pero no afectará a otras conexiones de red)
usuario253751
12

¿qué pasaría?

  • Los bytes que no se pueden escribir en el HDD a tiempo se almacenarían temporalmente en algún lugar; es muy probable que algunos de ellos estén almacenados en la aplicación que "convierte" el tráfico de red en tráfico HDD (es decir, su navegador) y, en casos de congestión más larga, las partes de nivel inferior de la pila (es decir, el subsistema de red de su PC) también tendría buffers en niveles más bajos, que se llenarían hasta llenarse.
  • La información de que los datos llegan demasiado rápido luego se propagaría al remitente de alguna manera. En el caso de TCP / IP, esto significaría que hay una parte del protocolo TCP que le dice al remitente que debe dejar de enviar. La página de Wikipedia sobre TCP / IP lo dice mejor cuando dice:

    Su responsabilidad [TCP] incluye la transferencia de mensajes de extremo a extremo independiente de la red subyacente, junto con control de errores, segmentación, control de flujo, control de congestión y ...

  • Al final del día, el "sistema" (no necesariamente la computadora del destinatario, pero el sistema total que consta de remitente, red y destinatario) indirectamente "limitaría" la velocidad de descarga. Sin embargo, en ningún momento es una variable de "velocidad" en existencia. Tanto el tráfico de red como el de HDD se basan en bloques, es decir, los retrasos entre esos bloques serían lo suficientemente largos (en el lado de la red más rápida) hasta que la "velocidad" (rendimiento) neta sea en promedio igual a la velocidad más lenta de su HDD

¿El sistema limitaría la velocidad de descarga?

No literalmente. Hace algunas docenas de años, las computadoras se comunicaban con velocidades sincrónicas (es decir, módems con configuraciones de velocidad fija). Esto está ocurriendo, en un nivel relativamente bajo, hoy también; es decir, su módem DSL o por cable probablemente tendrá una velocidad establecida a la que se comunica con su componente de enlace ascendente físico directo. Pero en 2017, todo esto es lo suficientemente complicado como para que casi todos los componentes sean bastante dinámicos. En los viejos tiempos, los módems a menudo solo podían hablar físicamente a una cierta velocidad, y eso incluso tenía que establecerse antes de marcar. Hay (había) algunos protocolos de red como ATM que intentaron obtener una red síncrona de área amplia, pero no resultaron tan bien, en comparación con TCP / IP.

Hoy en día, la velocidad efectiva generalmente se alcanza implícitamente mediante el almacenamiento en búfer, el control de flujo y demás.

También tenga en cuenta que en su ejemplo puede haber incluso más participantes. La interfaz de red podría tener más trabajo por hacer (otras conexiones a su PC). Alguna parte de la red en el camino podría estar ocupada (un miembro de la familia navegando o viendo videos). El HDD podría estar haciendo 3 escrituras de archivos grandes al mismo tiempo. Por lo tanto, no tendría sentido establecer específicamente una "velocidad" que podría limitarse.

AnoE
fuente
2

Las descargas de archivos (generalmente) se realizan a través de un protocolo llamado TCP. En TCP, el remitente no envía ningún dato hasta que el receptor esté listo para recibirlo.

Lo que sucederá es que su computadora reservará cierta cantidad de RAM para almacenar los datos recibidos temporalmente antes de escribirlos en su disco duro (esto se llama un búfer). Luego le pedirá al remitente los datos suficientes para llenar el búfer. A medida que recibe datos, comenzará a escribir datos desde el búfer en el disco duro; sin embargo, no solicitará más datos mientras el búfer esté casi lleno.

El efecto general es que el emisor simplemente espera a que el receptor se ponga al día antes de continuar enviando.

usuario253751
fuente