Você está na página 1de 41

Captulo 03: Programao com Sockets

Ricardo Couto Antunes da Rocha rcarocha@inf.ufg.br


2005 Ricardo Couto Antunes da Rocha

Roteiro
Caractersticas, Arquitetura e Conceitos Bsicos Programao com Sockets Requisitos de aplicaes

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Camada de Aplicao Arquitetura TCP/IP


Mensagem Segmento Datagrama IP Quadro Bits Aplicao Transporte Rede Enlace Fisica

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Aplicaes e protocolos da camada de aplicao


Aplicaes de rede: processos distribudos
pares de processos que trocam mensagens atravs da rede; executam nos sistemas finais da comunicao; Identificado pelas portas; Comunicao fim-a-fim; p.ex., Browser, correio eletrnico
aplicao transporte rede enlace fsica

Protocolos da camada de aplicao


faz parte da aplicao; define a semntica e ordem dos comandos trocados entre as aplicaes; usam servios providos por protocolos da camada inferior (TCP, UDP); Exemplo, HTTP (proto) e Browser (Apl de rede).
aplicao transporte rede enlace fsica aplicao transporte rede enlace fsica

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Arquiteturas de Aplicaes
Cliente-servidor
Princpio bsico: processamento dividido entre uma aplicao cliente e uma aplicao servidora (substituiu o paradigma mainframeterminais) Servidores atendem a vrios clientes e so centralizados

Peer-to-Peer (P2P)
Mquinas dividem igualmente o processamento e recursos Mquinas so distribudas sem obedecer qualquer arquitetura

Hbridas de cliente-servidor e P2P


2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 5

Paradigma de comunicao Cliente/Servidor


Aplicao de rede tem duas partes: cliente e servidor
Servidor: prov ao cliente o servio requisitado; Possui endereo fixo e bem conhecido; p.ex., servidor WWW envia pgina solicitada pelo browser cliente; Mquina com alto poder de processamento Cliente: Envia requisies para o servidor; Mquina com baixo poder de processamento tipicamente solicita servio ao servidor; Conexo pode ser intermitente Dois clientes no se comunicam diretamente;
aplicao transporte rede enlace fsica

pedido

resposta
aplicao transporte rede enlace fsica

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Protocolos da Camada de Aplicao


Exemplos:
http SMTP DNS TLS/SSL FTP IMAP SSH RTP SIP POP3 WhoIS

Exemplos
Gopher IIOP RMI LDAP SNMP Telnet

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Comunicao entre Processos


Aplicao distribuda em rede
Processos trocam mensagens entre si pela rede

Processos assumem papel de cliente ou servidor


No contexto de uma sesso de comunicao entre um par de processos, o processo que inicia a comunicao rotulado de cliente e o processo que espera ser contactado para iniciar a sesso o servidor.

Mesmo em aplicaes P2P devem existir processos que atuem como clientes e servidores, no sentido da comunicao entre processos.
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 8

Endereamento de Processos
Processos so identificados e endereados com o par (endereo IP, porta)
Endereo IP: estao onde o processo se encontra Porta: identificador do processo na estao

Portas
SAP no nvel de transporte Identificam os processos origem e destino Viabilizam a comunicao fim-a-fim Permite envio e recepo de datagramas de forma independente
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 9

Portas
Como o protocolo de transporte identifica para qual processo ele tem que entregar as informaes na camada de aplicao?
Atravs das portas
Porta 1 Porta 2 Porta n

Nvel de Transporte

Nvel de Rede
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 10

Comunicao ClienteServidor
Porta Origem Porta Destino Dados

Outlook Internet Explorer 1024 1025

Porta bem conhecida

Servidor WWW Servidor de email 80 25

Porta aleatria

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

11

Portas
Exemplo: Protocolo TCP ou UDP
Portas so nmeros inteiros de 16 bits Padronizao da IANA (Internet Assigned Number Authority) A IAB (Internet Activity Board) define o nmero da porta que cada servio da Internet deve estar associado

0 1023 1024

PORTAS RESERVADAS PARA SERVIOS PADRONIZADOS

PORTAS UTILIZADAS POR CLIENTES E SERVIOS NO PADRONIZADOS 65535


2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 12

Portas
Processo Processo Processo Processo

APLICAO
PORTA PORTA

APLICAO
PORTA PORTA

TRANSPORTE IP REDE MAC ENLACE/FSICA

TRANSPORTE IP REDE MAC

TRANSPORTE IP

ENLACE/FSICA

REDE
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 13

Portas
Aplicao

Aplicao SMTP TCP


Protocolo

Definio de portas

FTP
Porta

DNS UDP IP

NFS

Transporte

Rede Fsica

Endereo IP Placa de Rede / Fax Modem


14

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Comunicao ClienteServidor
Porta Origem Porta Destino Dados Como definida/atribuda uma porta para uma aplicao? Porta bem conhecida Internet Explorer 1024 1025 80 Servidor WWW Servidor de email 25

Outlook

Porta aleatria

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

15

Parmetros de protocolos
Objetivo do protocolo Protocolo de transporte: TCP ou UDP Porta (servidora!): padronizada Caractersticas gerais: arquitetura P2P/CS, com estado/sem estado (sesso), textual, proprietrio/aberto, escopo de uso, etc.

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

16

Protocolo da Camada de Aplicao


Define
Tipos de mensagens trocadas, como de requisio e resposta Sintaxe dos vrios tipos de mensagens, tais como campos da mensagem e como os campos so delineados Semntica dos campos Regras para identificar como e quando um processo envia mensagens e responde a mensagens

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

17

Roteiro
Caractersticas, Arquitetura e Conceitos Bsicos Programao com Sockets Requisitos de aplicaes

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

18

Programao de sockets
Objetivo: aprender a construir aplicaes clienteservidor que se comunicam usando sockets Socket API
Introduzida no BSD4.1 UNIX, 1981 Explicitamente criados, usados e liberados pelas aplicaes Paradigma cliente-servidor Dois tipos de servio de transporte via socket API: Datagrama no confivel Confivel, orientado a cadeias de bytes

Socket
Uma interface local, criada por aplicaes, controlada pelo OS (uma porta) na qual os processos de aplicao podem tanto enviar quanto receber mensagens de e para outro processo de aplicao (local ou remoto)
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 19

Programao de sockets com TCP


Socket: uma porta entre o processo de aplicao e o
protocolo de transporte fim-a-fim (UDP or TCP) processo para outro

Servio TCP: transferncia confivel de bytes de um

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

20

Programao de sockets com TCP


Cliente deve contatar o servidor
Processo servidor j deve estar em execuo Servidor deve ter criado socket (porta) que aceita o contato do cliente

Cliente contata o servidor


Criando um socket TCP local Especificando endereo IP e nmero da porta do processo servidor Quando o cliente cria o socket: cliente TCP estabelece conexo com o TCP do servidor

Quando contatado pelo cliente, o TCP do servidor cria um novo socket para o processo servidor comunicar-se com o cliente
Permite ao servidor conversar com mltiplos clientes Nmeros da porta de origem so usados para distinguir o cliente

Ponto de vista da aplicao


TCP fornece a transferncia confivel, em ordem de bytes (pipe) entre o cliente e o servidor

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

21

Jargo stream
Um stream uma seqncia de caracteres que fluem para dentro ou para fora de um processo Um stream de entrada agregado a alguma fonte de entrada para o processo, ex.: teclado ou socket Um stream de sada agregado a uma fonte de sada, ex.: monitor ou socket No TCP, antes do incio de uma conexo, necessrio o handshake, com o qual cliente TCP e servidor TCP se preparam para uma conversa.
Handshake transparente para aplicaes

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

22

Programao de sockets com TCP


Exemplo de aplicao cliente-servidor:
1. Cliente l linha da entradapadro do sistema (inFromUser stream), envia para o servidor via socket (outToServer stream) 2. Servidor l linha do socket 3. Servidor converte linha para letras maisculas e envia de volta ao cliente 4. Cliente l a linha modificada atravs do (inFromServer stream)
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

ay w ee r Th

e ak h ds n ha

23

Interao cliente-servidor TCP


Servidor rodando em hostid
Cria socket port=x, para requisio entrante: welcomeSocket = ServerSocket() Esperar por requisio de conexo entrante: connectionSocket = welcomeSocket.accept () Ler requisio de connectionSocket configurao da conexo TCP Criar socket conectado a hostid, port=x clientSocket = Socket() Enviar requisio usando clientSocket

Cliente

Escrever resposta para connectionSocket

Ler resposta de clientSocket

Fechar connectionSocket
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

Fechar clientSocket
24

Exemplo: cliente Java (TCP)


import java.io.*; import java.net.*; class TCPClient {

public static void main(String argv[]) throws Exceptio { String sentence; String modifiedSentence; Cria BufferedReader inFromUser = stream de entrada new BufferedReader(new InputStreamReader(System Cria Socket clientSocket = new Socket("hostname", 6789); socket cliente, conecta ao servidor DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream Cria stream de sada ligado ao socket
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 25

Exemplo: cliente Java (TCP)


Cria stream de entrada ligado ao socket

BufferedReader inFromServer = new BufferedReader( new InputStreamReader(clientSocket.getInputStream() sentence = inFromUser.readLine();

Envia linha para o servidor L linha do servidor

outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine();

System.out.println("FROM SERVER: " + modifiedSen clientSocket.close(); } }


2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 26

Exemplo: servidor Java (TCP)


import java.io.*; import java.net.*; class TCPServer {

public static void main( String argv[]) throws Exception { String clientSentence; Cria String capitalizedSentence; socket de aceitao ServerSocket welcomeSocket = new ServerSocket(6789 na porta 6789 while (true) { Espera, no socket de aceitao, por Socket connectionSocket = welcomeSocket.accept() contato do cliente BufferedReader inFromClient = new BufferedReader( new Cria stream de InputStreamReader(connectionSocket.getInputStre entrada ligado ao socket
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 27

Exemplo: servidor Java (TCP)


L linha do socket clientSentence = inFromClient.readLine(); Escreve linha para o socket outToClient.writeBytes(capitalizedSentence); } } Fim do while loop, } retorne e espere por outra conexo do cliente

Cria stream de sada ligado ao DataOutputStream outToClient = socket new DataOutputStream(connectionSocket.getOutputStr

capitalizedSentence = clientSentence.toUpperCase() + '\n

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

28

Programao de sockets com UDP


UDP: no h conexo entre o cliente e o servidor
No existe apresentao Transmissor envia explicitamente endereo IP e porta de destino em cada mensagem Servidor deve extrair o endereo IP e porta do transmissor de cada datagrama recebido

UDP: dados transmitidos podem ser recebidos fora de ordem ou perdidos


Ponto de vista da aplicao UDP fornece a transferncia no confivel de grupos de bytes (datagramas) entre o cliente e o servidor

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

29

Interao clienteservidor: UDP

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

30

Exemplo: cliente Java (UDP)


Lado cliente Lado servidor

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

31

Exemplo: cliente Java (UDP) import java.io.*;


import java.net.*; class UDPClient { public static void main (String args[]) throws Exception { Cria stream de entrada Cria socket cliente BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket();

Translada InetAddress IPAddress = nome do hospedeiro para InetAddress.getByName("hostname"); endereo IP byte[] sendData = new byte[1024]; usando DNS byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes();
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 32

Exemplo: cliente Java (UDP)


Cria datagrama com dados a enviar, DatagramPacket sendPacket = tamanho, endereo new DatagramPacket(sendData, IP porta sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); Envia datagrama para servidor L datagrama do servidor DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } }
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 33

Exemplo: servidor Java (UDP)


import java.io.*; import java.net.*;

class UDPServer { public static void main (String args[]) throws Exception Cria { socket datagrama na porta 9876 DatagramSocket serverSocket = new DatagramSocket( byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while (true) { Cria espao para datagramas recebidos Recebe datagrama

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.len serverSocket.receive(receivePacket);

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

34

Exemplo: servidor Java (UDP)


Obtm endereo IP e nmero da porta do transmissor
String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort();

String capitalizedSentence = sentence.toUpperCase sendData = capitalizedSentence.getBytes();

Cria datagrama para enviar ao cliente

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddr port);

Escreve o serverSocket.send(sendPacket); datagrama para } } dentro do socket } Termina o while loop, retorna e espera por outro datagrama
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 35

Roteiro
Caractersticas, Arquitetura e Conceitos Bsicos Programao com Sockets Requisitos de aplicaes

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

36

De qual servio de transporte uma aplicao necessita?


Perda de dados
Algumas aplicaes (ex.: udio) podem tolerar alguma perda Outras aplicaes (ex.: transferncia de arquivos, telnet) exigem transferncia de dados 100% confivel

Temporizao
Algumas aplicaes (ex.: telefonia Internet, jogos interativos) exigem baixos atrasos para serem efetivos

Banda passante
Algumas aplicaes (ex.: multimdia) exigem uma banda mnima para serem efetivas Outras aplicaes (aplicaes elsticas) melhoram quando a banda disponvel aumenta
2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha 37

Requisitos de transporte de aplicao comuns


Aplicao Perdas Banda Sensvel ao atraso no no no sim, 100s mseg sim, segundos sim, 100s mseg sim file transfer sem perdas elstica e-mail sem perdas elstica Web documents sem perdas elstica adio: 5 Kb-1 real-time udio/vdeo tolerante Mb vdeo:10 Kb-5 stored udio/video tolerante Mb jogos interativos tolerante e-business sem perda igual anterior
kbps elstica

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

38

Servios dos protocolos de transporte da Internet


Servio TCP:
Orientado conexo: conexo requerida entre processos cliente e servidor Transporte confivel entre os processor de envio e recepo Controle de fluxo: o transmissor no sobrecarrega o receptor Controle de congestionamento: protege a rede do excesso de trfego No oferece: garantias de temporizao e de banda mnima

Servio UDP:
Transferncia de dados no confivel entre os processos transmissor e receptor No oferece: estabelecimento de conexo, confiabilidade, controle de fluxo e de congestionamento, garantia de temporizao e de banda mnima.

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

39

Aplicao e protocolos de transporte da Internet


Aplicao e-mail acesso de terminais remotos Web transferncia de arquivos streaming multimdia servidor de arquivos remoto telefonia Internet Protocolo de aplicao smtp [RFC 821] telnet [RFC 854] http [RFC 2068] ftp [RFC 959] RTP ou proprietrio (ex.: RealNetworks) NFS RTP ou proprietrio (ex.: Vocaltec) Protocolo de transporte TCP TCP TCP TCP TCP ou UDP TCP ou UDP tipicamente UDP

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

40

Referncias
Kurose & Ross. Redes de Computadores e a Internet. Pearson.
Captulo 2, sees 2.7 (Programao e desenvolvimento de aplicaes com TCP), 2.8 (Programao de sockets com UDP) e 2.9 (Construindo um servidor Web Simples).

2006 Vagner Sacramento / Ricardo Couto Antunes da Rocha

41