Para obter mais detalhes sobre como as conexões e reconhecimentos TCP funcionam, consulte a resposta de Diogo.
Quando você visita um site, algo assim acontece:
É feita uma conexão com o servidor DNS (se ainda não o tiver feito), cujo computador já conhece o endereço IP (ou através de algum mecanismo automático que solicita essas informações ao seu ISP), enviando pacotes para conectar-se e confirmar a conexão tem sido feito. Após a conexão, seu site solicita o endereço IP do site que você visita, para que ele saiba qual computador entrar em contato para obtê-lo. Isso significa que ele envia um pacote contendo o nome de domínio para obter essa resposta. Mais tarde, ele também envia um pacote para fechar a conexão.
É feita uma conexão com o servidor da web que hospeda o site que você deseja visitar; isso envia novamente um pacote para conectar e confirmar a conexão. Depois disso, ele solicita a página que você deseja visitar, enviando novamente um pacote. Em seguida, ele responde e você recebe o HTML da página da web, que indica a estrutura da página (não o layout).
Como você só tem a estrutura, ainda precisa buscar o restante. Portanto, solicitações adicionais (uma pergunta SU é como 40 solicitações) são feitas para obter scripts, estilos e mídias como imagens e similares. E como alguns deles podem não estar no mesmo servidor da Web que você visita, pode ocorrer uma resolução adicional do DNS, trazendo você de volta à etapa 1.
Além disso, observe que todos os pacotes que você recebe são reconhecidos, adicionando mais uma fonte de dados que é carregada, para economizar em pacotes, geralmente vários pacotes são reconhecidos ao mesmo tempo. Assim, quando você recebe algo, você envia para o servidor que o recebeu, para que ele saiba que o que ele enviou não se perdeu em algum lugar. Dessa forma, o servidor não precisa tentar enviá-lo novamente.
O ponto principal é que você não pode fazer o download de algo sem primeiro conectar e enviar algumas solicitações aos servidores dos quais está baixando. E é isso que compensa um pequeno upload ...
E não é só clicar, você faz mais do que isso, vamos dar uma pergunta como exemplo: você digitou cerca de 500 caracteres, um caractere conta como 1 byte (se caractere ASCII, todos estão nesse caso) e pode ser de 1 a 4 bytes (se um caractere Unicode). Portanto, sua pergunta realmente ocupa 0,5 KB ou 0,00005 MB! Mas não é apenas a pergunta que nos é enviada, ela também é cercada por uma solicitação POST ou AJAX que solicita ao servidor que armazene sua pergunta e os próprios cabeçalhos de pacotes.
Se você adicionar tudo, torna-se razoável atingir alguns megabytes em algumas horas.