Estou interessado em saber qual processo no Linux realmente obtém informações da camada de rede no lado receptor, aplica toda a lógica relacionada ao TCP (verificação de erro no nível TCP, reconhecimento de segmentos etc.) esperando conexão?
Por outro lado, qual processo recebe as informações que foram enviadas ao soquete pelo aplicativo host para processá-las e enviá-las à camada de rede?
Talvez eu não tenha entendido esse processo corretamente... Por favor, ajude
Sua pergunta está muito confusa. Baseia-se na descrição do TCP/IP em termos do modelo OSI. E isso simplesmente não é possível. O TCP/IP é anterior ao OSI e nunca teve a intenção de obedecer a esse modelo. Acessando esta página usando um navegador compatível com HTTP/2, você tem pelo menos 4 camadas de sessão separadas, a compactação está sendo tratada em pelo menos 3 camadas diferentes da pilha, sem mencionar a otimização de WAN na própria rede.
TCP acontece no kernel. Não nos processos do usuário. Portanto, dependendo do seu quadro de referência, todos eles ou nenhum deles.
Em termos de código, é o código que existe no espaço do kernel que realmente lida com a implementação do TCP ascendente dos drivers NIC. O kernel Linux está ciente de seu hardware de rede e o abstrai em um conjunto de adaptadores de link. A pilha TCP/UDP/IP está ciente desses dispositivos de "link" e é posteriormente abstraída para conceitos de nível Linux/Unix, como soquetes.
Os processos acessam essa funcionalidade por meio de chamadas de sistema ao kernel. Embora o conceito de um processo no Linux seja isolado ou bloqueado do kernel, é tecnicamente verdade que cada processo é capaz de acessar essa funcionalidade por meio de chamadas do sistema.
Isso significa que, quando os dados são recebidos na NIC, é o TCP que manipula o kernel. Quando um aplicativo recebe dados do buffer, esse processo está manipulando o TCP, embora apenas de maneira controlada por meio de chamadas de sistema no espaço/memória do kernel por meio do início de uma chamada de sistema.
Como o Linux é preemptivo, até mesmo as chamadas para o espaço do kernel fazem parte de pelo menos como o kernel acompanha o compartilhamento de tempo desse processo, portanto, você pode considerar tecnicamente o TCP como parte de todos os processos. Mas se você considerar apenas o código que pertence ao espaço de memória desse processo (aplicativos do espaço do usuário), apenas o kernel lida com o TCP.
Lembre-se de que o Linux/Unix incorpora algumas funcionalidades de soquete que abstraem o TCP/IP em bibliotecas vinculadas ao compilar um aplicativo, portanto, estariam em seu espaço de memória. Tais como estruturas de memória usadas para representar endereços IP.