Quando utilizamos uma interface de socket em um programa em qual is camada S e qual is protocolo s estamos trabalhando?

                                      SOCKET

1) Definição

Socket é uma interface de comunicação bidirecional entre processos através de uma rede de computadores .Essa mesma interface permite que essa comunicação utilize  diversas famílias de protocolos (Unix domain , Internet domain , Xerox NS domain ).

Sockets são representados como descritores de arquivos e podem permitir  a comunicação entre processos distintos na mesma máquina ou em máquinas distintas, através de uma rede. Os sockets são a base da comunicação em redes TCP/IP e também são muito usados em comunicações entre processos no interior de um mesmo computador.Essa comunicação é baseada no paradigma cliente –servidor .

Eles normalmente são identificados como  uma interface entre a camada de aplicação e a camada de transporte que também tem a função  de servir como interface de programação pela qual as aplicações de rede são inseridas na Internet ( = Interface de Programação de Aplicação – API ) .

Sockets  podem trabalhar com  RPCs  e assim terem a função de implementar numa aplicação as funções de rede, mas fazem isto de maneiras diferentes. Em documentos de RFC (Request for Comments) relacionado a TCP ou UDP, um socket em um computador é definido como a combinação de um endereço IP, um protocolo, e o número da porta do protocolo.

Um socket  pode ainda ser visto como  um tipo de dispositivo mecânico instalado em uma placa-mãe, destinado a receber a CPU - o processador, sua nomenclatura refere-se ao número de pinos que o mesmo poderá receber. Ex.: PGA 370 - só admite processadores com 370 pinos.

A interface padronizada de soquetes surgiu originalmente no sistema operacional Unix BSD (Berkeley Software Distribution); portanto, eles são muitas vezes chamados de Berkeley Sockets. É também uma abstração computacional que mapeia diretamente a uma porta de transporte (TCP ou UDP) e mais um endereço de rede. Com esse conceito é possível identificar unicamente um aplicativo ou servidor na rede de comunicação IP.

Para identificar uma conexão ente dois computadores, um socket deve ser

definido, por meio das seguintes informações:

-Endereço IP do servidor;

-Porta onde se encontra o serviço solicitado;

-Endereço IP do cliente;

-Porta através da qual o cliente solicita o serviço.

Um bom exemplo de um estabelecimento de uma conexão entre computadores

através de socket seria o acesso à uma página da Internet. Um servidor Web tem a porta 80 como porta padrão de comunicação entre os clientes. Quando digitamos um endereço de um site no Internet Explorer do Windows, automaticamente esse endereço é convertido em seu respectivo endereço IP. Se estamos numa rede, nosso micro tem um único endereço IP. E finalmente, junto deste processo, uma porta em seu computador é disponibilizada dinamicamente, sendo um número maior que 1024, para esta conexão.Então, temos todas as informações necessárias para estabelecer a conexão, tendo assim um socket. O cliente, no caso de uma conexão à uma página da Internet, é quem a solicita através de um browser (Internet Explorer, por exemplo), e o servidor é quem disponibiliza a página para ser acessada.

Sockets podem receber diversas denominações , por exemplo Socket de Conexão para o existente no final da fase de apresentação onde a conexão TCP ocorre entre o socket do cliente e o novo socket do servidor . Também podem receber a denominação de “portas” pelas quais os dados passam da rede para o processo e do processo para a rede , sendo processo considerado parte de uma aplicação de rede .

Na Camada de Transporte do hospedeiro destinatário não há entrega dos dados de forma direta a um processo e sim a um socket intermediário . Aplicações de rede usam  um par de programas ( um cliente e o outro servidor) em  dois sistemas finais diferentes . Quando esses programas são executados ,  os dois processos ( o cliente e o servidor ) estabelecem uma comunicação entre si usando sockets para a leitura e os usando para escrever mensagens através deles . 

Uma particularidade é que pode existir mais de um socket no hospedeiro destinatário onde cada um possui um identificador exclusivo .

Ainda podem existir os sockets UDP que participa da construção de sistemas . Esse processo é similar à dos exemplos apresentados em TCP, com pequenas alterações:

·         O servidor simplesmente cria um socket; não é necessário colocá-lo em modo de escuta (listen) nem aguardar conexões (accept).

·         Ao invés de usar as chamadas send/write e recv/read, normalmente são usadas as chamadas sendto e recvfrom, que especificam os parceiros de comunicação na hora do envio/recepção.

·         Ao contrário do TCP, que transforma a comunicação em um fluxo contínuo de bytes, em UDP as fronteiras entre as mensagens são respeitadas. O receptor deve receber as mensagens com os mesmos tamanhos com que foram enviadas.

·         Em UDP não há garantia de entrega de mensagens. Caso o servidor não esteja ativo, mensagens enviadas a ele são simplesmente descartadas.

2 ) Como criar um Socket

Ao criar um socket, deve ser especificada a forma de comunicação (communication style) a ser usada e que protocolo deverá realizar a comunicação nos níveis mais baixos do sistema. Em UNIX, três formas de comunicação são normalmente usadas:

·         stream : esta forma de comunicação provê canais de comunicação bidirecional ponto-a-ponto (entre dois processos pré-definidos) sobre os quais pode-se enviar seqüências de bytes de qualquer tamanho, de maneira confiável (sem perdas, duplicações ou inversões de ordem nos dados).

·         datagram : forma que provê canais de comunicação bidirecionais sobre os quais pode-se enviar pacotes de dados a qualquer processo que tenha um canal equivalente definido. Não há garantia na entrega dos pacotes, pois o sistema implementa uma política de best-effort. Além disso, como os pacotes são tratados de forma independente, podem haver inversões de ordem.

·         raw  : esta forma de comunicação provê acesso direto aos protocolos e interfaces de comunicação de baixo nível. Geralmente é usada por processos que gerenciam ou monitoram a infra-estrutura de rede.

Essas formas de comunicação são definidas através das constantes inteiras SOCK_STREAM, SOCK_DGRAM e SOCK_RAW, no arquivo sys/socket.h.

Além da forma de comunicação, também deve ser escolhido um espaço de nomes para nomear ou endereçar o socket criado. O nome de um socket sempre está relacionado a um espaço de nomes, também chamado de domínio (socket domain). Cada espaço de nomes é definido por uma macro na forma PF_* (que vem do termo Protocol Family). Os principais espaços de nomes em uso no UNIX são:

·         PF_LOCAL : indica o espaço de nomes local, no qual os nomes de sockets são válidos somente no escopo do computador local. As macros PF_UNIX e PF_FILE são sinônimos desse espaço de nomes.

·         PF_INET : indica o espaço de nomes IPv4e seus protocolos associados.

·         PF_INET6 : indica o espaço de nomes IPv6 e seus protocolos associados.

Além dos acima, outros espaços de nome estão disponíveis, embora sejam de uso menos freqüente: PF_NS (protocolos Xerox NS), PF_ISO (protocolos OSI/ISO), PF_CCITT (protocolos do CCITT), PF_IMPLINK (Internet Message Processors), PF_ROUTE (protocolos de roteamento), etc. Para cada espaço de nomes, uma macro correspondente AF_* define o formato dos endereços para aquele espaço.

Por fim, deve ser escolhido o protocolo

que irá efetuar a comunicação, ou seja, o mecanismo usado para a transferência dos dados. Cada protocolo é aplicável a um dado espaço de nomes e uma forma de comunicação. Algumas regras são importantes na escolha de um protocolo:

  • Para ocorrer comunicação, os sockets de ambos os lados devem usar o mesmo protocolos e seus nomes devem estar no mesmo espaço de nomes.
  • Cada protocolo é aplicável a uma combinação específica de forma de comunicação e espaço de nomes, e não pode ser usado em combinações inadequadas. Por exemplo, o protocolo TCP somente pode ser usado na forma de comunicação SOCK_STREAM e no espaço de nomes da Internet.
  • Para cada combinação "forma de comunicação - espaço de nomes" existe um protocolo default, indicado pelo número 0 (zero), que é geralmente usado.

 3) Socket Na Comunicação Cliente / Servidor

Geralmente a interação entre processos usa o modelo de comunicação Cliente/Servidor. Algumas características importantes desse modelo:

  • O cliente conhece o endereço e forma de acesso ao servidor e toma a iniciativa da comunicação
  • O servidor é uma entidade passiva, apenas recebendo pedidos dos cliente e respondendo aos mesmos.
  • O servidor oferece um serviço específico a seus clientes
  • O cliente envia uma requisição de serviço e aguarda uma resposta do servidor.
  • As implementações do cliente e do servidor são independentes e autônomas; apenas as seqüências de mensagens trocadas durante a comunicação, que caracterizam o serviço, devem ser respeitadas.

Como servidor e cliente têm comportamentos distintos face à comunicação, suas implementações seguem também padrões distintos. Ambos criam sockets para se comunicar, mas operam de forma diferente.

Um cliente executa normalmente os seguintes passos para estabelecer uma comunicação com um servidor:

  1. Cria um socket, usando a chamada de sistema socket
  2. Conecta seu socket ao endereço do servidor, usando a chamada de sistema connect
  3. Envia e recebe dados através do socket, usando as chamadas de sistema read e write
  4. Encerra a comunicação, fechando o socket através da chamada close.

Um servidor normalmente executa os seguintes passos para oferecer serviço a seus clientes:

  1. Cria um socket, usando a chamada de sistema socket
  2. Associa um endereço a seu socket, usando a chamada de sistema bind.
  3. Coloca o socket em modo de escuta, através da chamada de sistema listen.
  4. Aguarda um pedido de conexão, através da chamada accept. (que gera um descritor específico para a conexão recebida).
  5. Envia e recebe dados através do socket, usando as chamadas de sistema read e write.
  6. Encerra a comunicação com aquele cliente, fecha o descritor da conexão (chamada close).
  7. Volta ao passo 4, ou encerra suas atividades fechando seu socket (chamada close).

Diversas variantes são possíveis no esquema acima: por exemplo, o servidor pode lançar threads ou processos filhos para tratar as conexões recebidas.

Bibliografia :

Kurose , James F.  ; Ross , Keith W.

Redes de Computadores e a Internet : Uma abordagem top-down .

3ª edição – São Paulo : Pearson Addison Wesley , 2006 .

http://pt.wikipedia.org/wiki/Socket - acessado em 22 de abril de 2007

Artigo :

Seleguim Cestarolli , Guilherme

Pontifícia Universidade Católica de Campinas

Faculdade de Análise de Sistemas

Segurança da Informação

Perigos do Mundo Virtual1

www.puccamp.br/graduacao/curso/artigos - acessado em 20 de abril de 2007

Quando utilizamos uma interface de socket em um programa em qual is camada S e qual is protocolo s estamos trabalhando?

Resposta: Camada de Apresentação e Transporte – protocolos Socket, TCP / UDP; Explicação: Pois quando utilizamos sockets precisamos declarar se utilizaremos TCP ou UDP, que corresponde a camada de transporte e nós utilizamos o socket em aplicações, o que é uma camada pertencente a camada de apresentação.

Qual camada OSI utiliza sockets?

Resposta: Camada de transporte. Explicação: A camada de transporte, Modelo TCP/IP, é a camada responsável pela transferência de dados entre duas máquinas, independente da aplicação usada e do tipo, topologia ou configuração das redes físicas existentes entre elas.

O que é a interface de sockets em programação de rede?

Socket é uma interface de comunicação bidirecional entre processos através de uma rede de computadores . Essa mesma interface permite que essa comunicação utilize diversas famílias de protocolos (Unix domain , Internet domain , Xerox NS domain ).

Qual tipo de comunicação de um socket?

Um socket é uma interface de comunicação bidirecional entre processos. Sockets são representados como descritores de arquivos e permitem a comunicação entre processos distintos na mesma máquina ou em máquinas distintas, através de uma rede.