programação em rede baseada em javaaffonso/dca2401/2004_1/pdf/redes.pdfdefiniçõs básicas •...

50
Programação em Rede Baseada em Java Luiz Affonso Guedes Tópicos em Redes de Computadores – Programação Distribuída www.dca.ufrn.br/~affonso/cursos

Upload: lekhue

Post on 09-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Programação em RedeBaseada em Java

Luiz Affonso GuedesTópicos em Redes de

Computadores – ProgramaçãoDistribuída

www.dca.ufrn.br/~affonso/cursos

Page 2: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Definiçõs Básicas• Uma rede é um conjunto de computadores e

outros dispositivos interligados por um meiofísico.– Estes podem enviar e receber dados entre si, mais

ou menos em tempo real.• Redes de Pacotes

– O canal de comunicação é compartilhado entre osdiversos computadores.

– Os computadores de reversam na utilização do canal, enviando mensagens: pacotes.

Page 3: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Camadas de uma Redes

Camada de Interface de Rede (Ethernet, FDDI, ATM)

Camada de Rede (IP)

Camada de Transporte(TCP ou UDP)

Camada de Aplicacao(DNS, HTTP,FTP, …)

Camada de Rede (IP)

Camada de Transporte(TCP ou UDP)

Camada de Aplicacao(DNS, HTTP,FTP, …)

Programas deAplicacao

Programas deAplicacao

Maquina 1 Maquina 2

Page 4: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Encapsulação de Dados

Camada de Interface de Rede (Ethernet, FDDI, ATM)

Camada de Rede (IP)

Camada de Transporte(TCP ou UDP)

Camada de Aplicacao(DNS, HTTP,FTP, …)

Programas deAplicacao

Page 5: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Encapsulação de Dados

Camada de Interface de Rede (Ethernet, FDDI, ATM)

Camada de Rede (IP)

Camada de Transporte(TCP ou UDP)

Camada de Aplicacao(DNS, HTTP,FTP, …)

Programas deAplicacao

Page 6: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Camada de Interface de Rede(Ethernet, FDDI, ATM)

Camada de Rede (IP)

Camada de Transporte(TCP ou UDP)

Camada de Aplicacao(DNS, HTTP,FTP, …)

Camada de Rede (IP)

Camada de Transporte(TCP ou UDP)

Camada de Aplicacao(DNS, HTTP,FTP, …)

Programas deAplicacao

Programas deAplicacao

Camada de Interface de Rede(Ethernet, FDDI, ATM)

Roteador

Roteamento de Pacotes

Page 7: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Camada de Rede

• Protocolos IP (Internet Protocol)– Responsável pelo roteamento dos pacotes

entre as sub-redes.– Numeração IP:

• 04 bytes.• 05 Classes de números: A, B, C, D, E.• Cada interface de rede tem de ter pelo menos um

endereco IP.• 127.0.0.1 endereço de loop-back (localhost)

Page 8: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Formato do Pacote IP0 04 08 12 16 20 24 28 31

versão

Tamanho cabeçalho

Tipo de serviço

Tamanho do pacote

Identificação

Flags

Offset/frag

TTL

Protocolo

Checksum/cab.

End. fonte

End. destino

Opções

Dados

Page 9: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Formato do Pacote IP

• Campo Versão:– Atualmente versão quatro: 4– IPv6 (Versao 6): 6

• Campo PROTOCOLO:– Protocolo TCP: 6– Protocolo UDP: 17

• Campos TTL – Time To Live e Offset/Flags: – Únicos campos que são alterados durante o percurso

de roteamento dos pacotes

Page 10: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Camada de Transporte

• Responsável pela comunição fim-a-fim.• TCP – Transmission Control Protocol

– Protocolo com orientação de conexão e garantia de entrega de mensagem.

• UDP – User Datagram Protocol– Protocolo sem orientação de conexão e sem

garantia de entrega de mensagem.

Page 11: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Formato da Mensagem TCP0 04 08 12 16 20 24 28 31

Numero da Porta Fonte Numero da Porta Destino

Numero de Sequencia da Mensagem

Page 12: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Camada de Transporte

• Conceito de serviço– Servicos estão associados com portas.– Portas são números inteiros representados

por 02 bytes:• 65.536 portas possíveis• As portas de 1 a 1023 são destinadas a servicos

especificos.

Page 13: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Comunicação num Host

Portas de serviços 6533625 802321

Camada de Transporte

Camadade Rede

Protocolo TCP Protocolo UDP

Protocolo IP

07

Interface deProgramação API Sockets

Camada deAplicação

echo

FTP

Telnet

SMTP

HTTPProg.1 Prog.N

Page 14: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Protocolo da Camada de Aplicação

Converter nomede máquina emnúmero e vice-

versa

TCP ouUDP

23 (?)DNS

Transferência de e-mails

acumulados no servidor para um

cliente

TCP110POP3

Envio de e-mail para servidor de

e-mail

TCP25SMTP

Transferênciade hipertextos

TCP80HTTP

Transferênciade arquivos

TCP20 e 21FTP

PropositoProtocolo de Transporte

PortaProtocolo

Page 15: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo de Comunicação com um Servidor DNS

ServidorDNS

Porta 23

www.uol.com.br

232.212.091.28Um Cliente

Porta 13.290

www.uol.com.br

232.212.091.28

Page 16: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo de Comunicação com um Servidor WEB

ServidorWeb

Porta 80

Um Cliente(Browser)

Porta 13.290

Cliente solicita página

Servidor envia página

Arquivos de Páginas(HTML)Netscape 6.lnk

Click de um linkPega arquivo Envia

arquivoNova Página

Page 17: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

325425 802321

Protocolo TCP Protocolo UDP

Protocolo IP

07API Sockets

HTTP

Netscape 6.lnk

325425 802321

Protocolo TCP Protocolo UDP

Protocolo IP

07API Sockets

HTTPApache

internet

Interface de REDE Interface de REDE

LADO CLIENTE LADO SERVIDOR

Page 18: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Socket TCP

Cliente Servidor

Cria SocketCria Socket

Bind

Listen

Connect Accept

Close Close

Troca de Mensagens

Page 19: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Socket UDPCliente Servidor

Cria SocketCria Socket

Bind

Listen

Troca de Mensagens

Page 20: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Sockets em Java

• Classes– Socket– ServerSocket

• Enviam objetos da Classe OutputStream• Recebem objetos da Classe InputStream

Page 21: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Sockets em Java

Porta Porta

ServidorCliente

ServerSocket

SocketSocket

ObjectOutputStream

ObjectInputStream

ObjectInputStream

ObjectOutputStream

Page 22: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo 1: Cria Sockets

– Um programa que faz o scan das portasbaixas (1 até 1023).

– Apenas o lado Cliente.– Socket s = new Socket(String host, int porta)

throws IOException, UnknowHostException;

– host = “localhost”; // comunicacao local

Page 23: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo2: Utilizando o serviço de nome

• DNS: Domain Name Server– Classe InetAddress

• Pacote java.net.InetAddress• Possui o endereço Internet armazenado em dois

formatos:– Nome em String e Numero em int

• Métodos– public static InetAddress.getByName(String

hostName)Throws UnknowHostException

– public static InetAddress.getLocalHost( )Throws UnknowHostException

Page 24: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo2: Utilizando o serviço de nome

– Classe InetAddress• Métodos

–public String getHostName( );–public byte[ ] getAddress( );–public String getHostAddress ( );

Page 25: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo3:

– Um programa que faz o scan das portasbaixas (1 até 1023)

– Socket s = new Socket(InetAddres host, int porta)

throws IOException,UnknowHostException;

Page 26: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo4public Socket(String host, int port, InetAddres interface,

int portaLocal) throws IOException

public Socket(InetAddress host, int port, InetAddres interface, int portaLocal) throws IOException

Page 27: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo4 - Métodos de informação

– public InetAddress getInetAddress( )-----------------------------------------------------------------------------try {

Socket umSocket = new Socket(“java.sun.com”, 80);InetAddress endereco = umSocket.getInetAddress( );System.out.println(“Conectado à máquina “ + endereco);

} catch(UnknownHostException e) {System.err.println(e);

}catch(IOException e) {

System.err.println(e);}----------------------------------------------------------------------------------

Método que obtém o InetAddress remotode onde o Socket está conectado

Page 28: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo4 - Métodos de informação

– public int getPort( )-----------------------------------------------------------------------------try {

Socket umSocket = newSocket(“java.sun.com”, 80);int porta = umSocket.getPort( );System.out.println(“Conectado à porta “ + porta);

} catch(UnknownHostException e) {System.err.println(e);

}catch(IOException e) {

System.err.println(e);}----------------------------------------------------------------------------------

Método que obtém a porta remota de onde o Socket esté conectado

Page 29: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo4 - Métodos de informação

– public int getLocalPort( )-----------------------------------------------------------------------------try {

Socket umSocket = newSocket(“java.sun.com”, 80);int porta = umSocket.getLocalPort( );System.out.println(“Conectado a partir da porta “ + porta);

} catch(UnknownHostException e) {System.err.println(e);

}catch(IOException e) {

System.err.println(e);}----------------------------------------------------------------------------------

Método que obtém a porta LOCAL poronde o Socket está conectado

Page 30: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo4 - Métodos de informaçãoMétodo que obtém o InetAddress LOCALpor onde o Socket está conectado

– public InetAddress getLocalAddress( )-----------------------------------------------------------------------------try {

Socket umSocket = newSocket(“java.sun.com”, 80);InetAddress enderecoLocal = umSocket.getInetAddress( );System.out.println(“Conectado a partir da maquina “ + enderecoLocal);

} catch(UnknownHostException e) {System.err.println(e);

}catch(IOException e) {

System.err.println(e);}----------------------------------------------------------------------------------

Page 31: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo5

• Exemplo de um programa cliente que acessaum servidor de tempo remoto– Porta 13– java GetTime <nome_do_host>– Utiliza o método getInputStream da classe Socket

• public InputStream getInputStream( ) throws IOException

– Retorna um fluxo de entrada, de modo a se poder ler dados a partir do Socket.

Page 32: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Fechamento do Socket• Método close( )

– Public synchonized void close ( )throws IOExcepition

Socket conexao = null;try {Socket conexao = new Socket(www.ufrn.br,1333);// codigo que vai interagir com o socket

}catch (UnknownHostException e) { }catch(IOException e) { }finally {

if(conexao !=null) conexao.close( );}

Page 33: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo6

• Programa exemplificando a utilização do método de fechamento de socket, com seu tratamento de exceção.

Page 34: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Servidor Socket

• Utiliza um objeto da classe ServerSocket– Método de escuta de porta (listen).– Método que aceita uma conexão.– Método que retorna um objeto tipo Socket

quando uma conexão é efetuada.

Page 35: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Seqüência típica de uma aplicaçãoCliente-Servidor em Java

Porta do Cliente Porta do Servidor

ServidorCliente

ServerSocket SocketSocket

ObjectInputStreamObjectInputStreamObjectOutputStream

InputStreamOutputStream

ObjectOutputStream

OutputStream InputStream

readObject readObjectwriteObject

writeObject

accept( )

Page 36: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Ciclo de Vida de um Servidor1. Um novo ServerSocket é criado.2. Ele fica escutando uma porta: accept().3. Após aceitar uma conexão, accept() retorna

um objeto do tipo Socket.4. O objeto tipo Socket utiliza os métodos

getInputStream() e getOutputStream() parareceber e enviar dados, respectivamente.

5. Cliente e Servidor fecham a conexão.6. O Servidor (ServerSocket) retorna ao passo 1.

Page 37: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Rede de Petri do Ciclo de Vida de um Servidor

Page 38: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Construtores do ServerSocket

• public ServerSocket (int porta)throws IOException,BindException

• public ServerSocket (int porta, int fila)throws IOException,BindException

• public ServerSocket (int porta, int fila, InetAddress clientAddress)

throws IOException,BindException

Page 39: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Aceite de Conexão• public Socket accept throws IOException

ServerSocket server = new ServerSocket(2666);while (true) {

Socket conexao = server.accept( ); // aguarda conexaoOutputStreamWriter saida

= new OutputStreamWriter(conexao.getOutputStream);saida.write(“Mensagem para o cliente\n”);conexao.close();

}

Page 40: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo7

• Servidor1.java e Cliente1.java– Servidor envia um String para Cliente, dando

boas-vindas.

Page 41: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Socket UDP

Page 42: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Comunicação Multicast

• Tipos de comunicação:– Unicast– Multicast– Broadcast

• Por que utilizar comunicação multicast?

Page 43: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Roteamento de Grupo• Protocolo IGMP• TTL – Time To Live

– Máximo número de roteadores que o datagramapoderá ser roteado

– TTL = 0 Localhost– TTL = 1 Rede Local

• Necessidade de ser transparente para o programador da aplicação– A aplicação deve enviar pacotes para o endereço

multicast.– TCP ou UDP ???

Page 44: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

• Conceito de GRUPO: – conjunto de hosts que compartilham um mesmo

endereço multicast.– todo dado enviado para um endereço multicast é

recebido por todo os membros do grupo.– membros se associam-se e desligam-se do grupo de

forma autônoma.

• Endereçamento Multicast– Endereço do grupo– Classe D: 224.0.0.0 – 239.255.255.255

Page 45: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Endereços Multicast

• 224.0.0.0 – Endereço reservado.• 224.0.0.1 - Grupo de todos os sistemas

que suportam multicast na rede local.• 224.0.1.1 – Network Time Protocol.• 224.0..1.32 – Versão multicast do

traceroute.• 224.2.0.0 a 224.2.255.255 – MBONE

(Multicast Backbone on the Internet)

Page 46: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Sockets Multicast

Page 47: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Classe Socket Multicast

• java.net.MulticastSocket– Subclasse de: java.net.DatagramSocket

– public class MulticastSocket extendsDatagramSocket throws SocketException

– MulticastSocket socket = new MulticastSocket();– MulticastSocket socket = new MulticastSocket(int porta);

Page 48: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Estrutura de uma comunicação multicast

1. Criação do Socket2. Associação a um grupo multicast (se for

receber dados)3. Envio/Recebimento de dados para/de

membros do grupo4. Desligamento do grupomulticast5. Fechamento do Socket

Page 49: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

• Associação a um grupo multicast– public void joinGroup(InetAddres endereco)

throws IOException• Desligamento de um grupo multicast

– public void leaveGroup(InetAddres endereco) throws IOException

• Envio de dados– public void send(DatagramPacket pacote, byte ttl)

throws IOException• Recebimento de dados

– public void receive(DatagramPacket pacote) throws IOException

Page 50: Programação em Rede Baseada em Javaaffonso/DCA2401/2004_1/pdf/redes.pdfDefiniçõs Básicas • Uma rede é um conjunto de computadores e outros dispositivos interligados por um

Exemplo 9

• Programas Cliente e Servidor Multicast– O programa Cliente envia uma seqüência de

mensagens ao programa Servidor.