Como um downloader de arquivo sabe onde o arquivo começa?

Como um downloader de arquivo sabe onde o arquivo começa?

Suponha que estou baixando um arquivo pelo protocolo HTTP. Os pacotes contendo os fragmentos do arquivo podem chegar em qualquer ordem. Então, como o downloader sabe qual pacote é o primeiro na ordem? Eu estava olhando os campos de um pacote HTTPaquie não encontrou nenhum campo "Número de sequência".

Depois de pensar um pouco sobre a questão, cheguei à conclusão de que HTTP é um protocolo da camada 7 e depende dos protocolos das camadas subjacentes. O TCP, sendo um protocolo da camada 4, fornece ao HTTP este serviço de sequenciamento dos dados, pois o cabeçalho TCP possui um número de sequência (Encontrei aqui).

Mas não tenho certeza se essa teoria está correta, então quero perguntar aos especialistas sobre isso. Existe algum outro mecanismo para lidar com esse problema?

Responder1

Então, na verdade, se não houver interrupção, o arquivo está sendo baixado com uma única conexão TCP. Portanto, o seu downloader nem sabe que está fragmentado.

Você pode usar o wireshark e veresse exemplo aqui

insira a descrição da imagem aqui

Se a conexão cair ou se o gerenciador de download quiser dividir o download para poder usar 4 conexões, por exemplo, ele deverá configurar oCabeçalho RANGE:

GET /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
Range: bytes=0-1023

Neste caso, a resposta seria

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024

Responder2

Você adivinhou.Da seção 1.4 da RFC 2616 Operação geral, enfase adicionada:

Comunicação HTTPgeralmente ocorre em conexões TCP/IP.A porta padrão é TCP 80 [19], mas outras portas podem ser usadas. Isso não impede que o HTTP seja implementado sobre qualquer outro protocolo na Internet ou em outras redes.O HTTP pressupõe apenas um transporte confiável;qualquer protocolo que forneça tais garantias pode ser utilizado; o mapeamento das estruturas de solicitação e resposta HTTP/1.1 nas unidades de dados de transporte do protocolo em questão está fora do escopo desta especificação.

"transporte confiável" é o jargão de rede para "entrega os dados sem perda (a menos que sinalizado), duplicação/reprodução, alteração ou ordenação incorreta".

E da mesma forma, o HTTPS é executado sobre TLS (anteriormente SSL), que se baseia no TCP e fornece essencialmente o mesmo serviço (transporte confiável de fluxo de bytes), mas com as propriedades adicionais de confidencialidade e integridade (a menos que haja erro sinalizado), mesmo contra invasores inteligentes, em vez de meramente naturais. erros e falhas. Existem diferenças de desempenho, mas AFAIK as únicas diferenças de serviço são que o TLS não fornece o ponteiro 'urgente' do TCP, também conhecido como fora de banda, ou fechamento separado por direção, como os estados 'semifechados' do TCP, e HTTP/HTTPS não ' não preciso disso.

informação relacionada