Oque é Um Socket?
Por: Felipe Fonseca • 25/4/2020 • Trabalho acadêmico • 1.330 Palavras (6 Páginas) • 392 Visualizações
Oque é um socket?
O socket (em inglês), ou do “soquete”, em português como um todo é um mecanismo que facilita a comunicação, interligação e troca de dados entre aplicação cliente/servidor, que permite a troca de mensagens entre os processos de uma máquina/aplicação servidores e de uma máquina/aplicação cliente.
Os sockets surgiram originalmente no sistema operativo Unix BSD (Berkeley Software Distribution).
O BSD é um sistema operativo do UNIX desenvolvido pela Universidade de Berkeley, na Califórnia, durante os anos 70 e 80.
Apesar de um socket ter que se comportar como um terminal ou um arquivo, ele não é uma entidade física como eles, mas sim, uma abstração; é uma estrutura de dados criada e utilizada pelo aplicativo.
Muito do que fazemos no dia a dia faz uso de sockets. O nosso navegador utiliza sockets para requisitar as páginas; quando acessamos o nosso servidor pelo protocolo de aplicação SSH também estamos abrindo e utilizando um socket.
Ciente que a base da nossa comunicação na internet, levando em consideração o modelo de rede OSI, os sockets estão entre a camada de aplicação e a de transporte:
[pic 1]
Aos processos devidamente envolvidos fica a impressão que a comunicação esta ocorrendo diretamente entre eles, porém, ela está passando pelas camadas de rede. Essa abstração provida pelos Sockets é chamada de comunicação lógica. Outro método de entender os Sockets é que eles são “interface” de comunicação Inter processos.
Todo cliente deve ter conhecimento mediante o socket e ao servidor (conjunto ip e porta) para se comunicar entre si, entretanto o servidor só vai reconhecer o socket do cliente quando este realizar uma conexão com ele, ou seja, a conexão no modelo cliente/servidor é sempre iniciada pelo cliente.
O método abaixo demonstra que a porta do servidor necessita ser previamente conhecida pelo cliente, enquanto que para o servidor não importa qual é a porta do cliente, ele vai conhecê-la quando a conexão dele com o cliente forem estabelecidos.
[pic 2]
Como um socket se comporta como um arquivo, chamadas de sistema de leitura e escrita são aplicáveis, da mesma forma como funcionam em um arquivo ordinário, e é aqui que entra a programação de sockets com a API POSIX sockets. Linguagens como o Java, PHP etc. Abstraem isso fornecendo ao desenvolvedor uma API de ainda mais alto nível.
De modo geral existem dois tipos de sockets TCP e UDP.
Protocolo TCP
O TCP fornece um serviço de fluxo de bytes orientado a conexão e confiável. O TCP exige que dois sistemas finais primeiro criem uma conexão logica entre eles por meio da troca de alguns pacotes de estabelecimento de conexão. Essa fase, geralmente denominada handshaking (que pode ser entendido como um “aperto de mãos”), estabelece alguns parâmetros entre os dois sistemas finais, incluindo o tamanho dos pacotes de dados a serem trocados, o tamanho dos buffers para armazenar os blocos de dados até a chegada da mensagem completa, e assim por diante. Após o processo de handshaking, as duas pontas podem enviar blocos de dados em ambas as direções na forma de segmentos. A continuidade dos bytes pode ser verificada pela numeração dos bytes trocados. Por exemplo, se alguns bytes forem perdidos ou danificados, o receptor pode solicitar o reenvio, oque faz com que o TCP seja um protocolo confiável. O TCP também pode fornecer controle de fluxo e controle de congestionamento, como veremos no Capitulo 3. Um problema com o protocolo TCP é que ele não é orientado a mensagens, ou seja, não delimita as fronteiras das mensagens trocadas.
Podemos comparar o serviço orientado a conexão e confiável fornecido pelo TCP com o serviço prestado pela companhia telefônica, embora apenas ate certo ponto. Se duas partes decidem se comunicar por telefone em vez de usar os correios, elas podem criar uma conexão e trocar palavras por um período de tempo. O serviço telefônico é, de certa forma, confiável, porque se uma pessoa não entende uma palavra ou algumas palavras pronunciadas pela outra, ela pode pedir a repetição.
A maioria das aplicações padronizadas que precisam enviar mensagens longas e exigem confiabilidade pode se beneficiar dos serviços do TCP.
Protocolo UDP
O UDP fornece um serviço de datagrama não orientado a conexão e não confiável. Serviço não orientado a conexão significa que não existe qualquer conexão logica entre os dois sistemas finais trocando mensagens. Cada mensagem é uma entidade independente encapsulada em um pacote denominado datagrama. O UDP não enxerga qualquer relação (ligação) entre os datagramas consecutivos vindos de uma mesma fonte e indo para o mesmo destino.
O UDP não é um protocolo confiável. Embora ele possa verificar se os dados não foram corrompidos durante a transmissão, ele não pede ao remetente para reenviar datagramas corrompidos ou perdidos. Para algumas aplicações, o UDP tem uma vantagem ele é orientado a mensagem. Ele delimita a fronteira das mensagens trocadas.
Podemos comparar esse serviço não orientado a conexão e não confiável com o serviço normal fornecido pelos Correios. Duas entidades podem trocar varias cartas entre si, mas os Correios não veem qualquer conexão entre estas cartas. Para os Correios, cada carta é uma entidade separada com seu próprio remetente e destinatário. Se uma carta for perdida ou danificada durante a entrega, os correios não são responsáveis, apesar de tentaram dar o melhor de si durante a entrega.
Uma aplicação pode ser projetada para utilizar UDP se ela enviar mensagens pequenas e a simplicidade/velocidade forem mais importantes para a aplicação do que a confiabilidade. Por exemplo, algumas aplicações de gerenciamento e multimidia se encaixam nessa categoria
...