27
Sockets Bruno Guimarães Lucas Rossini

Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

SocketsBruno GuimarãesLucas Rossini

Page 2: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Introdução● Comunicação entre processos:

○ Memória compartilhada○ Memória distribuída - Mensagens pela rede

● Um sistema distribuído é ausente de memória compartilhada, toda comunicação é feita por troca de mensagens.

● Troca de mensagens entre A e B:○ A cria a mensagem e despacha para o SO enviá-la○ Mensagem é binária, logo A e B deve concordar no

significados dos bits

Page 3: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Modelo ISO OSI● Questões:

○ Quantos volts para bit zero, e para bit um?○ Como será o último bit?○ Como dizer se a mensagem está danificada?

● Foi criado um modelo em camadas para identificar níveis e serviços.

● 7 camadas:○ Física○ Enlace○ Rede○ Transporte○ Sessão - Apresentação - Aplicação

Page 4: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

1ª definição"Socket é a interface entre a camada de

aplicação e a camada de transporte"

Page 5: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Tipos de comunicação● Persistente

○ Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento.

○ Há uma camada middleware que irá armazenar a mensagem.

○ Exemplo: serviço de e-mail.

● Transiente○ Mensagem fica ativa durante o tempo de aplicação.

Page 6: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Tipos de comunicaçãoAssíncrona

○ Remetente cria a mensagem e "apresenta" para o SO.

○ Remetente NÃO é bloqueado.

Síncrona○ Após o remetente ter criado a mensagem podem

ocorrer três momentos na qual ficará bloqueado:1. Até o momento que a camada inferior captura a mensagem2. Até que o receptor receba a mensagem3. Até que o receptor processe a mensagem

Page 7: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Tipos de comunicaçãoDiscreto

○ A mensagem é uma unidade completa.

Fluxo○ Há um conjunto de mensagens relacionadas por

uma certa ordem.

Page 8: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

2ª definição ● É um terminal de comunicação baseada em

mensagens para o qual uma aplicação pode escrever e ler dados da rede.

● As informações são strings de bytes sem significado aparente.

Page 9: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

2ª definição● Implementa uma porta de comunicação entre um

processo da camada de aplicação e um protocolo da camada transporte.

Page 10: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Tipo de conexão● Datagram sockets

○ Connectionless sockets○ User Datagram Protocol (UDP)○ Transmite pacotes

● Stream sockets○ Connection-oriented sockets○ Transmission Control Protocol (TCP)○ Cria uma conexão com outro processo

Page 11: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Interface Berkeley● Também conhecido como BSD Socket, é a API de fato

para programação.● Veio do padrão POSIX.● Esta API é provida pelo SO, e assim permite os

programadores controlar e utilizar os sockets.● Todos os sistemas operacionais modernos tem alguma

implementação da interface de socket Berkeley.● Se tornou o padrão de interface para conexão com a

Internet, pois é uma implementação original para TCP/IP.

● Há outras interfaces como a Winsock para Windows, muito parecida com a de Berkeley.

Page 12: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Funções da API● socket_create(dominio, protocolo)

○ Cria um novo terminal.○ SO reserva recursos para atender envio e

recebimento.○ Retorna um socket resource em caso de sucesso.○ Tipos de dominio:

■ IPv4■ IPv6

○ Tipos de protocolo da comunicação:■ Stream (TCP) - Connectionless■ Datagrama (UDP) - Connection-oriented

Page 13: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Funções da API● socket_bind(socket, endereço, porta)

○ Associa um endereço com o socket.○ Local Socket Address.○ Lado servidor.

● socket_listen(socket, numMax) ○ Para orientado a conexão.○ Não bloqueante.○ SO reserva buffer para o nº de conexões.

Page 14: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Funções da API● accept(socket)

○ É bloqueante até chegar uma nova conexão.○ Aceita conexões vindas neste socket. ○ Uma vez que uma conexão com sucesso é feita, é

criado um novo socket (Remote Socket Address) com as mesmas propiedades do original que deve ser usado para comunicação.

Page 15: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Funções da API

Page 16: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Funções da API● connect(socket)

○ Especifica um endereço.○ Bloqueia até a conexão estiver estabelecida.

● send()● receive()

Page 17: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento
Page 18: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Java● A API sockets BSD é escrita em linguagem

C. A maioria das outras linguagens provêm uma interface similar, escrita como um wrapper baseado na API.

● Está localizado no pacote java.net

Page 19: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

PHP● PHP é bem "equipado" para tratar sockets● A extensão socket implementa uma interface de

baixo nível para funções de comunicação entre sockets baseadas no popular BSD sockets, podendo acionar como um servidor socket ou como um cliente.○ --enable-sockets à linha de comando

configure.○ Descomentar ;extension=php_sockets.dll no

php.ini

Page 20: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Servidor● Processo que espera ser contactado.● É associado a uma porta particular, e fica

escutando requisições naquela porta e respondendo.

● Servidores de email (POP3, SMTP) e servidores WEB são bons exemplos. O servidor HTTP escuta (na porta 80) requisições e serve de volta o HTML e outros arquivos.

Page 21: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Programando o servidor1. Criar um ServerSocket

a. ServerSocket server = new ServerSocket(port);

b. numPorta - Ponto de handshake2. Espera conexão

a. Socket connection = server.accept();b. Objeto Socket - Gerencia a conexão com cliente

3. Obtem fluxo de E/S do socketa. connection.getOutputStream();b. Objeto OutputStream e InputStream

4. Processamento5. Fechar conexão no fluxo e sockets

Page 22: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Programando o cliente1. Cria um socket

Socket socket = new Socket (ip, porta);

2. Obtém fluxo de E/Snew DataOutputStream(socket.getOutputStream());

3. Processamento4. Fecha conexão

Page 23: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Compatibilidade● Java ultilizamos br.readLine() != null

○ Lê até EOL■ socket_write($socket, $texto . "\n", strlen

($texto) + 1)

○ Função só retorna null quando socket cliente é fechado.

● Modo de leitura do PHP○ PHP_BINARY_READ - \0○ PHP_NORMAL_READ - \n

Page 24: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Quais os tipos de conexão em Sockets? O que as caracteriza?

● Connection-oriented X Connectionless○ Depende de como aplicação deseja.○ Temos dois tipos de serviços de transporte via

socket:■ O confiável orientado a cadeia de bytes (byte

stream) utilizando TCP.■ Datagramas não confiáveis. Utilizando o

protocolo UDP.

Page 25: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Cite 5 funções da API Sockets e explique sua funcionalidade.

● Principais funções da API○ socket();

○ bind();

○ listen();

○ accept();

○ connect();

○ send();

○ receive();

Page 26: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Explique em linhas gerais o que deve ser feito para implementar uma aplicação servidora que atenda a vários clientes simultaneamente através de uma porta Socket.

● A API socket prevê esta funcionalidade.● A aplicação servidora cria um Local Socket,

e quando ocorre a conexão retorna um Remote Socket.

● Neste ponto pode ocorrer um fork(), ou uma programação com threads na qual uma linha escuta infinitamente por novas requisições e a outra processa a requisição.

Page 27: Sockets - Universidade Federal de Juiz de Fora · Tipos de comunicação Persistente Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento

Referências● Java in Distributed Systems: Concurrency,

Distribution and Persistence - Marko Boger● Sistemas Distribuídos - ANDREW S. TANENBAUM ● http://php.net/manual/pt_BR/book.sockets.php● http://en.wikipedia.org/wiki/Berkeley_sockets