Qual é a diferença entre socket e porta?
Baseado na minha resposta sobre Qual é a diferença entre socket e porta?
Antes de mais nada, vamos analisar as palavras?
-
socket
Em Português, soquete. A palavra originou do inglês socket mesmo, que por sua vez veio do do francês antigo soc… no final, a origem significa “nariz de porco”. Em questões de conexões elétricas, é a parte fêmea da conexão. [1], [2], [3]
-
porta
Ou porto em Português de Portugal. A palavra nesse uso veio da especificação em inglês, onde estava escrito port. Pelo que está descrito na origem da palavra no Wiktionary, vem do francês antigo porte/latim porta, no sentido de portão, passagem por onde coisas podem entrar. Também usado em alguns lugares como a parte fêmea de uma conexão (porta serial/ethernet, por exemplo). [1] (etimologia 2), [2]
Bem, ambos significam a parte fêmea de uma conexão, então isso acaba que não ajudou 100% a diferenciá-los.
Bem, então vamos para uma metáfora com tomadas?
Imagine que você tem a seguinte tomada suíça:
Você tem 3 portas de entrada:
- a superior
- a esquerda inferior
- a direita inferior
Se você tentar estabelecer uma conexão com uma dessas portas, você precisa de um cabo de plugue adequado para entrar na porta. Se o soquete estiver ligado na rede elétrica, então haverá uma corrente elétrica (haverá comunicação) entre o servidor de energia (sua casa, que é na Suíça para ter uma tomada dessas) e quem está consumindo a energia, o aparelho cliente.
Mas e se não tiver ligação no soquete? Então a porta é vacuosa. Você pode ligar o que for nela que não haverá comunicação.
A porta, então, é o identificador de onde quero me encaixar. O plugue é o meu padrão de conexão, definida no nível 4 (transporte) no modelo TCP/IP de redes. O socket seria a ligação dessa porta com a aplicação, que pode ser um servidor web, FTP, SSH ou qualquer outra aplicação (a aplicação aqui seria a rede elétrica).
Berkley sockets
Uma coisa que vale a pena mencionar é sobre socket Unix, e é de bom tom para tal falar dos sockets Berkley.
Esses tais sockets Berkley, na verdade, é uma API para se ter acesso a um ponto de comunicação. Ela prevê dois tipos de sockets comumente usados:
- socket de rede
- socket Unix
Ambos são pontos de conexão para se realizar IPC e são usados da mesma maneira: lê-se e escreve-se dados. A diferença entre os dois sockets é com quem a comunicação será feita. Sockets Unix são para conexões dentro do mesmo computador (como pipes), já sockets de rede são para computadores em rede.