![](https://i0.wp.com/media.dev.to/cdn-cgi/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hfpvfoegf0mzh2cm8qb.jpg?w=1200&ssl=1)
A comunicação desempenha um papel crucial no funcionamento da Internet, com destaque para o uso do TCP (Transmission Control Protocol). Localizado na camada de transporte, o TCP é essencial para a transmissão de dados pela rede, assegurando a comunicação e a transferência de informações entre sistemas de forma confiável e segura.
Na estrutura Cliente-Servidor, o TCP é fundamental para facilitar a comunicação e a troca de informações. Mas como exatamente essa conexão é estabelecida? Embora saibamos que o three-way handshake é o mecanismo utilizado para essa comunicação, vamos explorar mais detalhes com base nos sistemas operacionais Unix.
Criação e Configuração do Socket:
Durante o processo de conexão, o servidor web delega a responsabilidade das conexões TCP para o kernel do sistema operacional, garantindo eficiência, confiabilidade e segurança na comunicação em rede.
Quando um processo de aplicação solicita a criação de um socket de comunicação, o sistema operacional aloca recursos para esse novo socket, como memória, e cria estruturas de dados necessárias para representar o socket no nível do kernel. Em seguida, um “File Descriptor” é atribuído a esse socket.
Esse File Descriptor é disponibilizado para a aplicação, que configura o socket para receber novas conexões, geralmente utilizando primeiro a chamada bind(), indicando ao sistema operacional o endereço e a porta para escutar novas conexões.
Em seguida, a aplicação coloca o socket no estado de ‘Listen’ utilizando a chamada de sistema listen(), informando ao sistema operacional que o socket está pronto para aceitar novas conexões de entrada.
Estabelecendo conexão:
Quando o cliente deseja se conectar a um servidor, ele envia um segmento SYN (synchronize) para o servidor de destino. O kernel do sistema operacional, ao receber o segmento SYN, verifica se há um processo esperando conexão pela porta especificada no segmento. Se houver, o segmento SYN é aceito, e o kernel aloca recursos para a nova conexão, colocando as informações na SYN queue, aguardando confirmação.
Após esse processo, o kernel envia um SYN/ACK para o cliente, reconhecendo o segmento recebido e enviando outro segmento SYN para que o cliente também o reconheça. Em seguida, o cliente envia um ACK, confirmando o recebimento.
O recebimento desse ACK pelo kernel do servidor conclui o three-way handshake. O kernel move as informações para a Accept Queue, onde as conexões estabelecidas, mas não aceitas pela aplicação, são mantidas.
Quando a conexão está no backlog, a aplicação pode utilizar a chamada de sistema accept() para aceitar a conexão específica e iniciar a troca de informações com o cliente, utilizando o file descriptor associado para interagir com o cliente por meio das chamadas read() e write().
Em suma, o estabelecimento adequado das conexões TCP é crucial para a comunicação eficiente entre clientes e servidores na Internet. Através do meticuloso processo de three-way handshake e do cuidadoso gerenciamento pelo kernel do sistema operacional, as informações podem ser trocadas de forma confiável e segura. Por trás da aparente simplicidade de clicar em um link ou enviar uma mensagem, há uma intrincada dança entre o hardware, o software e os protocolos de rede.