O estabelecimento de uma Conexão na Camada de Aplicação é o processo de criar um canal de comunicação lógico entre dois processos (software).

1. O Papel do Socket

Um Socket é a interface de programação (API) que permite a uma aplicação interagir com a pilha de rede do sistema operacional.
- Quando uma aplicação quer enviar dados, ela os “escreve” em um socket.
- Quando quer receber dados, ela os “lê” de um socket.

O socket é identificado por uma Quíntupla (5-Tuple) exclusiva na Internet, que garante que nenhum pacote se perca:
1. Protocolo de Origem (TCP ou UDP)
2. IP de Origem
3. Porta de Origem
4. IP de Destino
5. Porta de Destino

2. Fluxo da Conexão (TCP)

Para a maioria das aplicações (Web, SSH, E-mail), a conexão é Orientada à Conexão (TCP) e segue este fluxo:

  1. Three-Way Handshake: Antes de enviar qualquer dado, o cliente e o servidor trocam pacotes (SYN, SYN-ACK, ACK) para sincronizar números de sequência e confirmar que ambos estão prontos.
  2. Transferência de Dados: O fluxo de bytes é enviado. A camada de transporte garante que, se um pacote for perdido, ele será reenviado sem que a aplicação precise se preocupar.
  3. Four-Way Handshake (Encerramento): Quando a troca termina, as partes enviam pacotes (FIN e ACK) para fechar o socket e liberar os recursos (memória e porta).

3. Conexões Sem Estado (UDP)

Algumas aplicações (DNS, DHCP, Streaming) usam o UDP, que não estabelece uma conexão formal.
- O cliente simplesmente envia o pacote com o IP e Porta de destino.
- Não há confirmação de recebimento.
- Isso é muito mais rápido e leve, mas exige que a camada de aplicação trate possíveis erros de perda de dados.

4. Gerenciamento de Sockets no S.O.

Em sistemas Linux/Unix, você pode visualizar as conexões e sockets ativos usando os comandos:
- netstat -tunlp
- ss -tunlp

Esses comandos mostram qual processo (PID) está “dono” de qual porta (Socket).