O que acontece quando uma conexão com a Internet é mais rápida que a velocidade de gravação de armazenamento?


28

Se alguém tentasse baixar um arquivo a uma velocidade de 800 Mb / s (100 MB / s) em um disco rígido com uma velocidade de gravação de 500 Mb / s (62,5 MB / s), o que aconteceria? O sistema limitaria a velocidade do download?


5
Essa é e tem sido desde o início das redes uma situação totalmente comum quando você está em uma rede rápida, como em uma universidade fora do horário de pico.
Peter - Restabelece Monica

4
Como você pode programar, você pode observar isso facilmente. Escreva um servidor e cliente TCP simples (você poderá encontrar exemplos para a biblioteca de soquetes do seu idioma preferido), deixe o serviço entregar os dados o mais rápido possível e modifique o cliente para ler esses dados apenas a uma velocidade especificada (durma entre leituras). Verifique se os dados foram recebidos intactos. Você pode até observar os pacotes enviados com wireshark ou similar.
Carsten S

3
Tendo tido uma experiência como a descrita na publicação de @ PeterA.Schneider, posso dizer que é necessário levar em consideração os buffers de RAM do sistema operacional. Até que sejam preenchidos, você pode efetivamente armazenar os dados baixados na velocidade da RAM. (Normalmente em milhares de megabytes por segundo.)
Ninguém

@ Nobody E, é claro, sempre existem os canais absurdos que compõem o backbone da Internet que transmitem dados tão rapidamente que a RAM do seu computador típico nem consegue acompanhar!
Cort Ammon - Restabelece Monica

Seu computador geraria uma solicitação do ICMP, dizendo para diminuir a velocidade. No entanto, nessas velocidades escassas, você também pode obter um SSD ou M.2 ssd e agora sua velocidade de gravação é tão alta que 100mb / s será fácil. Alguns M.2 têm gravação de 1500MB / s. Coloque 2 ou mais em um RAID e você poderá multiplicar essa velocidade várias vezes. O SSD comum pode ser de 300 a 450 MB / s, dependendo da capacidade e da marca. storagereview.com/samsung_960_pro_m2_nvme_ssd_review
cybernard

Respostas:


41

Muitos protocolos, incluindo o TCP, o protocolo mais amplamente usado na Internet, usam algo chamado controle de fluxo. O controle de fluxo significa simplesmente que o TCP garantirá que um remetente não sobrecarregue um receptor enviando pacotes mais rapidamente do que ele pode esvaziar seu buffer. A ideia é que um nó que recebe dados envie algum tipo de feedback ao nó que envia os dados para que ele saiba sobre sua condição atual. Portanto, o feedback bidirecional permite que ambas as máquinas usem seus recursos da melhor maneira possível e evitem quaisquer problemas devido à incompatibilidade em seu hardware.

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


2
... idealmente. Bufferbloat significa que é provável que vários comutadores estejam armazenando e aguardando o encaminhamento de uma pilha cada vez maior de pacotes (que podem ser mitigados de alguma forma por um protocolo de transferência que requer ACKs ocasionais para continuar).
Eric Towers

3
Você pode mencionar que isso distingue o TCP (ei, ele tem controle em seu nome) do UDP, que continuará enviando, independentemente da capacidade do consumidor.
Peter - Restabelece Monica

5
@ Fabian Isso é o que acontece o tempo todo de qualquer maneira. O cache do disco rígido do sistema operacional permite que os dados sejam 'enviados' ao HDD muito mais rapidamente do que podem ser gravados, preenchendo o cache da RAM e gravando no disco o mais rápido possível. Portanto, dependendo da quantidade de RAM (não usada) em sua máquina, o sistema operacional pode armazenar em buffer algumas dezenas a centenas de MB de um arquivo na RAM antes de atingir o disco. O tamanho do cache é, no entanto, um comprometimento, porque os dados que o aplicativo pode considerar já persistentes no disco podem não durar um certo período de tempo, o que pode causar perda inesperada de dados em caso de falha de energia ou similar.
JimmyB

2
@Fabian: isso você pode ver na caixa de diálogo de cópia de arquivo do Windows, a partir da 8.1. No modo expandido, ele mostra a taxa de transferência, e você pode observar, que a primeira metade de segundo é muito rápida e, se o arquivo for maior do que o que poderia ter sido transferido durante isso, a velocidade diminuirá significativamente para uma taxa constante. Essa velocidade rápida no início foi devido ao cache. Depois de preenchido, a velocidade é reduzida.
Vsz

11
@EricTowers Não, o bufferbloat só acontece quando uma conexão de rede é o gargalo. (Você pode ver uma forma de bufferbloat no disco rígido, que desacelera outras operações do disco rígido, mas não afeta outras conexões de rede)
user253751

12

o que aconteceria?

  • Os bytes que não podem ser gravados no HDD a tempo seriam armazenados temporariamente em algum lugar; muito provavelmente alguns deles seriam armazenados em buffer no aplicativo que "converte" o tráfego de rede em tráfego de disco rígido (isto é, seu navegador) e, em casos de congestionamento mais longo, as partes de nível mais baixo da pilha (isto é, o subsistema de rede de seu PC) também teria buffers em níveis mais baixos, que seriam preenchidos até ficarem cheios.
  • As informações de que os dados estão chegando muito rapidamente seriam propagadas de volta ao remetente de alguma maneira. No caso do TCP / IP, isso significa que há uma parte do protocolo TCP que informa ao remetente que ele deve parar de enviar. A página da Wikipedia sobre TCP / IP diz melhor quando diz:

    Sua responsabilidade [TCP] inclui a transferência de mensagens de ponta a ponta, independentemente da rede subjacente, juntamente com controle de erros, segmentação, controle de fluxo, controle de congestionamento e ...

  • No final do dia, o "sistema" (não necessariamente o computador do destinatário, mas o sistema total constituído por remetente, rede e destinatário) indiretamente "limitaria" a velocidade do download. Em nenhum momento existe uma variável "velocidade" na existência. O tráfego de rede e o HDD são baseados em blocos, ou seja, os atrasos entre esses blocos seriam longos o suficiente (no lado mais rápido da rede) até que a "velocidade" líquida (taxa de transferência) seja, em média, a mesma que a velocidade mais lenta da sua rede. HDD.

O sistema limitaria a velocidade do download?

Não literalmente. Algumas dezenas de anos atrás, os computadores realmente se comunicavam com velocidades síncronas (ou seja, modems com configurações de velocidade fixa). Isso é, em algum nível relativamente baixo, também acontecendo hoje; ou seja, seu DSL ou modem a cabo provavelmente terá uma velocidade definida na qual ele se comunica com seu componente de ligação física direta. Mas em 2017, tudo isso é suficientemente complicado para que quase todos os componentes sejam bastante dinâmicos. Nos bons velhos tempos, os modems costumavam fisicamente apenas falar uma certa velocidade, e isso ainda precisava ser estabelecido antes da discagem. Existem (havia) alguns protocolos de rede, como o ATM, que tentavam obter uma rede de área ampla síncrona, mas eles não saíram tão bem, em comparação com o TCP / IP.

Hoje, a velocidade efetiva geralmente é sempre atingida implicitamente por buffer, controle de fluxo e outros.

Observe também que no seu exemplo pode haver ainda mais participantes. A interface de rede pode ter mais trabalho a fazer (outras conexões com o seu PC). Alguma parte da rede ao longo do caminho pode estar ocupada (um membro da família navegando ou assistindo a vídeos). O HDD pode estar executando três gravações de arquivos grandes ao mesmo tempo. Portanto, não faria sentido definir especificamente uma "velocidade" que pudesse ser limitada.


2

Os downloads de arquivos (geralmente) acontecem através de um protocolo chamado TCP. No TCP, o remetente não envia nenhum dado até que o destinatário esteja pronto para recebê-lo.

O que acontecerá é que seu computador reservará uma certa quantidade de RAM para reter os dados recebidos temporariamente antes de gravá-los no disco rígido (isso é chamado de buffer). Em seguida, ele solicitará ao remetente apenas dados suficientes para preencher o buffer. À medida que recebe dados, ele começa a gravar dados do buffer no disco rígido - no entanto, não solicita mais dados enquanto o buffer estiver quase cheio.

O efeito geral é que o remetente simplesmente espera o receptor recuperar o atraso antes de continuar enviando.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.