Estou tentando entender como os sistemas operacionais geralmente implementam a remontagem de solicitações de rede. Do meu melhor entendimento, o seguinte é verdadeiro:
Uma solicitação HTTP é feita na camada de aplicativo usando alguma biblioteca HTTP. Essa biblioteca HTTP é realmente um invólucro para alguma implementação de soquete pelo sistema operacional.
Um soquete "de transmissão" é instanciado usando o destino e a origem da solicitação HTTP.
Um soquete "de recebimento" é instanciado usando o endereço IP do dispositivo e uma porta aleatória (livre).
A mensagem HTTP é "enviada" usando o descritor de arquivo do soquete "transmissor".
O método "send" do soquete envia a mensagem para a implementação TCP do sistema operacional.
A implementação do TCP segmenta a mensagem HTTP, precedendo a porta de destino (fornecida ao instanciar o soquete) e a porta de origem. (Suponho que isso seja repassado de alguma forma, dependendo da implementação.) Depois que a mensagem HTTP foi segmentada e os cabeçalhos TCP anexados, os segmentos TCP são passados para a implementação IP do sistema operacional.
Os segmentos TCP são anexados com cabeçalhos IP. O endereço de destino IP foi fornecido ao instanciar o soquete. (Mais uma vez, presumo que o endereço IP de origem seja passado dependendo da implementação.)
Os pacotes IP são então agrupados com cabeçalhos Ethernet, enviados ao roteador, enviados ao servidor, o servidor processa a solicitação e envia de volta a resposta.
É aqui que meu entendimento se divide sobre o que exatamente acontece no processo de remontagem.
Como a resposta retorna ao buffer de recebimento do soquete "receptor", mais uma vez que o pacote IP retorna ao dispositivo?
Obviamente, os cabeçalhos caem, mas que medidas são tomadas para voltar especificamente ao buffer de recebimento do soquete "receptor" e depois do soquete de volta ao Aplicativo?
PS: Espero obter mais detalhes técnicos de implementação do que apenas "IP remontar" ou "TCP remontar" e passá-lo para a próxima camada. Espero entender exatamente como isso ocorre, em vez de apenas teoricamente (embora eu entenda que é específico do SO).
Editar:
Para trazer mais clareza ao assunto, gostaria de observar minhas referências a socket e qualquer método de socket referir-se ao sistema operacional Linux.