HTTP é um protocolo de aplicação que é transmitido através de uma conexão TCP.
Os pacotes TCP / IP contêm as seguintes informações:
- Endereço de destino (IP): Internet pública do servidor da web, por exemplo, 104.16.37.249 para stackoverflow.com
- Endereço de origem (IP): seu endereço de Internet público
- Porta de destino TCP: porta para acessar o aplicativo do servidor da web depois de acessar o computador do servidor da Web, 80 para HTTP, 443 para HTTPS
- Porta de origem TCP: porta para acessar o navegador da Web, depois que o pacote chega ao computador, por exemplo 43505
A porta e o endereço de origem se tornam a porta e o endereço de destino e vice-versa quando o servidor envia respostas às solicitações do cliente.
O navegador da Web (ou qualquer cliente TCP) não precisa conhecer a porta de origem, pois ela é escolhida automaticamente pelo sistema operacional. O sistema operacional fornece uma interface programática para se comunicar usando o TCP. Essa interface fornecerá o que é chamado de "soquete" para representar essa conexão. O soquete fornece um canal de saída (para enviar solicitações) e um canal de entrada (para receber respostas), o que é interessante, já que a comunicação pela rede não é muito diferente da leitura e gravação de arquivos.
Para responder a sua pergunta mais especificamente, o sistema operacional rastreia qual processo (PID) está usando qual porta de origem, assim quando recebe um pacote TCP onde a porta de destino corresponde a porta de origem (por exemplo, 34505), saberá onde para encaminhar esse pacote. Muitos sistemas UNIX são fornecidos com o netstat , que mostra exatamente isso:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.16.123.140:34034 38.127.167.38:443 ESTABLISHED 3153/chromium-browser
tcp 0 0 172.16.123.140:50309 162.125.32.129:443 ESTABLISHED 2945/chromium-browser
Você pode ver aqui que há duas conexões TCP estabelecidas / abertas para os servidores da web 38.127.167.38 e 162.125.32.129 usando HTTPs na porta 443. O endereço de origem e a porta de origem são descritos aqui como "endereço local".
No seu exemplo, o navegador da Web se bifurca em vários processos filhos. O sistema operacional encaminha os pacotes para os processos filhos diretamente. Como o navegador parece criar um processo filho por guia, você pode dizer que os pacotes estão sendo enviados diretamente para a guia em vez de serem "roteados" por algum tipo de coreógrafo no navegador.
No entanto, isso pressupõe que o navegador use uma conexão por guia, o que nunca é o caso, ele criará muitos deles, mesmo para o mesmo host, e nada impede que ele compartilhe uma conexão em várias guias.
Eu recomendo strongmente que você se refira a um livro como Redes de Computadores, A. Tanenbaum, 5ª Edição, Pearson .