Desenvolvimento de Aplicações TCP/IP com Sockets Márcio de Sousa Dias

Slides:



Advertisements
Apresentações semelhantes
E/S Síncrona x E/S Assíncrona no sistema Unix
Advertisements

Interações cliente/servidor usando o UDP
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Família tcp/ip Prof: Diovani Milhorim
Comunicação entre processos distribuídos
Bruno Rafael de Oliveira Rodrigues
Ir p/ primeira página Cliente/Servidor Modelo usado para construir aplicações Servidor em número de porta conhecido – Aceita requisições e executa serviços.
Programação com sockets API Sockets apareceu no BSD4.1 UNIX em 1981 são explicitamente criados, usados e liberados por aplicações paradigma cliente/servidor.
O conceito de socket Uma comunicação entre dois processos via TCP (ou UDP) é identificada unívocamente por dois pares de valores, que denotam os dois pontos.
Interação Cliente Servidor
Conceitos de Sockets Universidade Federal do Rio Grande do Sul (UFRGS)
Comunicação Inter-Processos
26/09/2005 LCMI - DAS - UFSC 1 Introdução aos Sockets Java Fábio Favarim DAS – Departamento de Automação e Sistemas UFSC – Universidade.
1 Introdução aos Sockets (Java) Tiago Semprebom DAS – Departamento de Automação e Sistemas UFSC – Universidade Federal de Santa Catarina.
Paulo Roberto Freire Cunha
Armazenamento de Dados em Arquivos
FEUPDEECRedes de Computadores, 4º Ano de EEC, ramo de ACI Sockets Abril, 98Isidro Vila Verde 1 Formato das estruturas de dados Estrutura.
Prof. Edmundo R. M. Madeira Carlos R. Senna MC823 Laboratório de Teleprocessamento e Redes Primeiro Semestre 2007.
Visão Geral de Protocolos
Camada de Transporte: Portas, Sockets, Aplicações em Rede
Introdução à Programação Distribuída em Java
Funcionalidades e Protocolos da Camada de Aplicação
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Modelo de referência OSI
Aula 9 - Camada de aplicação
Comunicação entre processos usando Sockets
Funcionalidade e Protocolos da Camada de Aplicação
Programação de Sistemas de Comunicação
O Modelo OSI Guilherme Guimarães.
Java Avançado Luiz Carlos d´Oleron SJCP Java Sockets.
Comunicação Entre Processos Sockets - Java
Faculdade de Tecnologia SENAI de Desenvolvimento Gerencial
NetBIOS Acadêmicos: Rubens Hiroshi Suzuqui Valmir Ferreira Marques
Comunicação entre Processos - Sockets. Conceitos Básicos Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Programando sockets em python
Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -
Programação distribuída e concorrente
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
IIS Web Server.
Redes de Computadores Prof Rafael Silva.
Falso, HTTP usa TCP. 1) HTTP usa arquitetura cliente servidor, aceitando conexões UDP na porta 80.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Arquitetura de Redes de Computadores – Luiz Paulo Maia Camada de Transporte1 Arquitetura de Redes de Computadores Luiz Paulo Maia Camada de Transporte.
1) A camada de transporte provê comunicação lógica entre hosts.
Camada de Transporte: protocolo UDP
Administração e Projeto de Redes
Introdução à Programação com Sockets Fernando Jorge Silveira Filho Daniel Sadoc Menasché
Comunicação Cliente-Servidor Linguagem para Internet II Prof. Marcelo da Silveira Siedler SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIAL.
Python Threads e Socket
Programação Distribuída em Java Aula Na aula passada vimos: I/O Sockets.
1 Programação Distribuída em Java Aula Na aula de hoje veremos: Introdução Conceito de Rede Protocolos Modelo ISO/OSI Modelo TCP/IP Modelo Cliente/Servidor.
Programação Distribuída em Java Aula Na aula passada vimos Domain Name Server –Funcionamento básico O pacote java.net –Sua finalidade A classe InetAddress.
Redes de computadores: Aplicações Prof. Dr. Amine BERQIA
TCP/IP.
Arquitetura TCP/IP Aplicação Transporte Rede Enlace Física.
Camada de Aplicação Prof. Horácio. Objetivo Apresentar os detalhes específicos dos tipos de aplicação; Apresentar o modelo cliente-servidor; Apresentar.
Serviços de rede e internet Jackson Eduardo da Silva.
Passagens de Mensagens Prof. Dr. Norian Marranghello
Redes de Computadores 2 - Camada de Aplicação (Princípios Básicos) –
Protocolos de Comunicação e Passagem de Mensagens
Sockets Redes de Comunicação de Dados Prof. Esp. Cristiano José Cecanho.
2: Application Layer 1 Capítulo 2: Camada de Aplicação  2.1 Princípios da camada de aplicação  2.2 Web e HTTP  2.3 FTP  2.4  SMTP, POP3, IMAP.
Alessandro D. R. Fazenda
Redes de Computadores e Aplicações – Camada de aplicação IGOR ALVES.
Escola de Ciência e Tecnologia Arquitetura TCP/IP Arquitetura TCP/IP Interface entre o Nível Lógico e Físico Protocolo IP Etienne César R. de Oliveira.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Escola de Ciência e Tecnologia Arquitetura TCP/IP Arquitetura TCP/IP Interface entre o Nível Lógico e Físico Protocolo IP Etienne César R. de Oliveira.
Curso Superior em Redes de Computadores Camada de Aplicação Prof. Sales Filho.
Soquetes (1) SOCKET Uma interface local, criada por aplicações, ponto final de comunicação no qual os processos de aplicação podem tanto enviar quanto.
Transcrição da apresentação:

Desenvolvimento de Aplicações TCP/IP com Sockets Márcio de Sousa Dias

Sumário  Introdução  Arquitetura Internet TCP/IP  Endereçamento Internet  Modelo Cliente-Servidor  Interface de Sockets  Arquiteturas Cliente-Servidor  Protocolo de Serviços Internet

Arquitetura Internet TCP/IP  Internet Protocol (IP): Datagrama não confiável  Transmission Control Protocol (TCP): Conexão  User Data Protocol (UDP): Datagrama não confiável

Endereçamento Internet  Endereço IP : 32 bits (4 octetos)  exemplo:  duas partes: Id. da rede + Id. do host  Classes de endereçamento:  Classe A: 1 octeto para Rede (16 milhões de hosts) 1.x.x.x a 126.x.x.x  Classe B: 2 octetos para Rede (65 mil hosts) x.x a x.x  Classe C: 3 octetos para Rede (254 hosts) x a x  Sistema de domínios e servidores de nomes:  Organização hierárquica  Nomes: br ufrj.br nce.ufrj.br ipanema.nce.ufrj.br

Modelo Cliente-Servidor TCP/IP  Comunicação ponto a ponto  Paradigma de Comunicação Cliente/Servidor  Servidores baseados em conexão/datagrama:  TCP garante confiabilidade (overhead e delays)  UDP depende do Ambiente. Só usado quando: o protocolo da aplicação controla confiabilidade; confia no broadcast ou multicast do hardware; ou a aplicação não pode tolerar o atraso computacional exigido nos circuitos virtuais do TCP.  Servidores com/sem estado  Com estado: mensagens menores, processamento simples; protocolo mais complexo para controlar estados e erros  Sem estado: protocolo deve realizar operações idempotentes

A Interface de Sockets  Objetivo:  Funções para comunicação com múltiplos protocolos  TCP/IP é uma família de protocolo nesse contexto  Especificar tipo de serviço, e não o nome do protocolo  Usando um socket:  Esperar pedido de conexão: socket passivo  Iniciar uma conexão: socket ativo

Usando Sockets

Principais Funções de Sockets #include Estrutura de Dados para Endereço do Socket /* Structure used by kernel to store most addresses. */ struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; /* Socket address, internet style. */ struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };

Principais Funções de Socket socket: Cria um novo socket para comunicação em rede. int socket (int af, int type, int proto); connect: Após criação do socket, um cliente chama connect para estabelecer uma conexão ativa com um servidor remoto. int connect (int s, const struct sockaddr *addr, int addrlen); bind: Quando um socket é criado, ele não possui noção dos endereços (local e remoto). Uma aplicação chama bind para especificar o endereço local da porta. Um servidor chama bind para especificar a porta pela qual aceitará conexões. int bind (int s, const struct sockaddr *addr, int addrlen); listen: Quando um socket é criado, ele não é ativo nem passivo. Servidor orientados a conexão chamam listen para colocar o socket em modo passivo e para torná-lo apto a aceitar conexões. int listen (int s, int qlen); accept: O servidor chama accept para aceitar a próxima requisição de conexão. Ela cria um novo socket para cada conexão requisitada. O socket original continua sendo usado para aceitar novas conexões, enquanto o novo socket é utilizado efetivamente para comunicação com o cliente. int accept (int s, struct sockaddr *addr, int *addrlen);

Escondendo Detalhes

Aplicações Clientes  Exemplo de Cliente TCP: daytime #include #include “connect.h” int main () { char buffer[200]; int n, s; s = connectTCP( “barra.nce.ufrj.br”, “daytime” ); while( (n = read( s, buffer, sizeof(buffer) )) > 0 ) { buffer[n] = ‘\0’; puts( buffer ); } close(s); exit(0); }

Aplicações Clientes  Exemplo de Cliente TCP: echo #include #include “connect.h” int main () { char buffer[200]; int n, s; s = connectTCP( “barra.nce.ufrj.br”, “echo” ); while( strlen( gets(buffer) ) ) { write( s, buffer, strlen(buffer) ); while( (n = read( s, buffer, sizeof(buffer) )) > 0 ) { buffer[n] = ‘\0’; printf( buffer ); } close(s); exit(0); }

Aplicações Clientes  TCP/UDP ‘conectado’ Quando aplicado a sockets de tipo SOCK_DGRAM, a função connect apenas armazena o endereço para posterior uso.  UDP não ‘conectado’

Revelando os Detalhes (1)  Identificar Localização do Servidor: host + porta  Identificando Host: Converter endereço IP para 32 bits struct hostent { char * h_name;/* official name of host */ char ** h_aliases;/* alias list */ short h_addrtype;/* host address type */ short h_length;/* length of address */ char ** h_addr_list;/* list of addresses */ #define h_addr h_addr_list[0] }; #include struct hostent * phe; char *hostname = “barra.nce.ufrj.br”; /* ou “ ” */ if( phe = gethostbyname(hostname) ) { /* Endereço IP 32 bits: phe->h_addr */ } else { /* Erro: nome do host não encontrado */ }

Revelando os Detalhes (2)  Identificando Porta de Serviços Conhecidos: struct servent { char * s_name;/* official service name */ char ** s_aliases;/* alias list */ short s_port;/* port # */ char * s_proto;/* protocol to use */ }; #include struct servent *pse; if( pse = getservbyname( “smtp”, “tcp” ) ) { /* Número da Porta: pse->s_port */ } else { /* Erro: nome do serviço não encontrado */ }

Revelando os Detalhes (3)  Identificando Protocolo pelo Nome: struct protoent { char * p_name;/* official protocol name */ char ** p_aliases;/* alias list */ int p_proto;/* official protocol number */ }; #include struct protoent *ppe; if( ppe = getprotobyname( “udp” ) ) { /* Número Oficial do Protocolo: ppe->p_proto */ } else { /* Erro: nome de protocolo não encontrado */ }

Servidores

 Servidores Iterativos

Servidores  Servidor Concorrente TCP (com Conexão)

Servidores  Múltiplas conexões compartilhando dados:  Concorrência Aparente: I/O assíncrono  Concorrência por Threads

Servidores  I/O Assíncrono: select  Permite um processo esperar pelo primeiro descritor de arquivo (dentro de um conjunto) que esteja pronto. int select( int numfds, fd_set *in_fds, fd_set *out_fds, fd_set *exc_fds, struct timeval *timeout );  Conjunto de Descritores de Arquivo: Tipo do Dado: fd_set Macros de Manipulação: FD_ZERO ( fd_set *conjunto ) FD_SET ( int arquivo, fd_set *conjunto ) FD_ISSET ( int arquivo, fd_set *conjunto ) FD_CLR ( int arquivo, fd_set *conjunto )

Servidores int s1, s2, nfs; fd_set afds, rfds;... nfs = gettablesize(); FD_ZERO( &afds ); FD_SET( s1, &afds ); FD_SET( s2, &afds ); for(;;) { bcopy( (char*)&afds, (char*)&rfds, sizeof(rfds) ); if( select( nfs, &rfds, NULL, NULL, NULL) >= 0 ) { if( FD_ISSET(s1, &rfds) ) {s3 = accept( s1,... );... FD_SET( s3, &afds );... } if( FD_ISSET(s2, &rfds) ) {read( s2,... ); write( s2,... ); close( s2 ); FD_CLR( s2, &afds ); } } else /* Erro */ }

Protocolo de Aplicação  SMTP (Simple Mail Transfer Protocol)  HTTP (HiperText Transfer Protocol)  FTP (File Tranfer Protocol)