Os soquetes Unix oferecem vários tipos, cada um projetado para diferentes cenários de comunicação. Eles podem ser amplamente categorizados como:
*
soquetes de fluxo (Sock_stream): Eles fornecem um fluxo de bytes confiável, ordenado e bidirecional. Os dados são transmitidos em um fluxo contínuo e o receptor recebe os bytes na ordem exata que foram enviados. Pense nisso como um tubo - os dados fluem perfeitamente. O TCP é o protocolo mais comum usado com soquetes de fluxo.
*
soquetes de datagrama (SOCK_DGRAM): Eles oferecem um método de comunicação sem conexão, não confiável e bidirecional. Os dados são enviados em pacotes discretos (datagramas), que podem chegar fora de ordem, podem ser duplicados ou podem ser perdidos inteiramente. Não há garantia de entrega. UDP é o protocolo típico associado aos soquetes de datagrama.
*
soquetes crus (Sock_raw): Eles fornecem uma interface de nível muito baixo, permitindo acesso direto à camada de protocolo de rede. Você pode criar e enviar pacotes de rede bruta, ignorando os protocolos de nível superior, como o TCP/IP. Isso requer uma compreensão profunda das redes e geralmente é usada para tarefas especializadas, como monitoramento de rede e depuração. Requer privilégios apropriados.
*
soquetes de pacotes sequenciados (Sock_seqpacket): Semelhante aos soquetes de fluxo, eles fornecem um fluxo de bytes bidirecionais e confiável. No entanto, cada transmissão é empacotada em uma mensagem distinta com seu próprio cabeçalho, permitindo melhores limites da mensagem que o Sock_stream. Eles são menos comuns que os soquetes de fluxo ou datagrama.
*
soquetes de domínio unix (af_unix ou af_local): Esses soquetes se comunicam apenas dentro de uma única máquina; Eles não envolvem protocolos de rede como TCP ou UDP. Eles são mais rápidos e mais seguros que os soquetes de rede, pois não atravessam a pilha de rede. Eles são frequentemente usados para comunicação entre processos (IPC) dentro de um sistema.
Distinções importantes: *
Orientado por conexão vs. sem conexão: Sock_stream (TCP) é orientado para a conexão; Uma conexão é estabelecida antes da transferência de dados. Sock_dgram (UDP) é sem conexão; Cada datagrama é independente.
*
confiável vs. não confiável: Sock_stream é confiável; É garantido que os dados cheguem em ordem e sem perda (exceto falhas catastróficas da rede). Sock_dgram não é confiável; Não há garantia de entrega ou pedido.
A escolha do tipo de soquete depende inteiramente dos requisitos do aplicativo. Se a entrega e pedidos confiáveis forem fundamentais, use `sock_stream`. Se a velocidade for priorizada e alguma perda de dados for aceitável, `Sock_dgram` é uma escolha melhor. `Af_unix` é excelente para o IPC eficiente. `Sock_raw` é para tarefas de baixo nível muito especializadas. `Sock_seqpacket` é uma opção de nicho, raramente usada.