Prof. Edmundo R. M. Madeira Carlos R. Senna MC823 Laboratório de Teleprocessamento e Redes Primeiro Semestre 2007.

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

TRATAMENTO DE ARQUIVOS EM C
Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Programação em Java Prof. Maurício Braga
E/S Síncrona x E/S Assíncrona no sistema Unix
Interações cliente/servidor usando o UDP
Comunicação entre processos distribuídos
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
FEUPDEECRedes de Computadores, 4º Ano de EEC, ramo de ACI TCP (Transmission Control Protocol) Abril, 98Isidro Vila Verde 1 Aspectos Gerais.
1 Camada de redes: Interoperabilidade com IP. 2 Enlaces entre duas máquinas.
Modelos de Comunicação em Sistemas Distribuídos
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.
Conceitos de Sockets Universidade Federal do Rio Grande do Sul (UFRGS)
Arrays Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein) Arrays Exercícios.
Estudo de Caso 1: UNIX e LINUX
Comunicação Inter-Processos
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
1 Introdução aos Sockets (Java) Tiago Semprebom DAS – Departamento de Automação e Sistemas UFSC – Universidade Federal de Santa Catarina.
UNIX.
Auditoria de Segurança da Informação
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Paulo Roberto Freire Cunha
Armazenamento de Dados em Arquivos
Prof. Edmundo R. M. Madeira Carlos R. Senna MC823 Laboratório de Teleprocessamento e Redes Primeiro Semestre 2007.
Lista Encadeada Circular Lista Duplamente Encadeada
Escola Secundária c/ 3º CEB da Batalha
Tratamento de Ficheiros
FEUPDEECRedes de Computadores, 4º Ano de EEC, ramo de ACI Sockets Abril, 98Isidro Vila Verde 1 Formato das estruturas de dados Estrutura.
Listas Encadeadas.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Apontadores ou Ponteiros
Provas de Concursos Anteriores
Camada de Transporte: Portas, Sockets, Aplicações em Rede
Introdução à Programação Distribuída em Java
Utilitários de Redes Prof. Andréa Chicri Torga Adaptações
Árvores binárias de pesquisa com balanceamento
PROGRAMAÇÃO ESTRUTURADA II
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 27 (1) Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas.
1 António Arnaut Duarte. 2 Sumário: primeiros passos;primeiros passos formatar fundo;formatar fundo configurar apresentação;configurar apresentação animação.
Funções Universidade Federal de Ouro Preto - UFOP
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Comunicação entre processos usando Sockets
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
É u m e l e m e n t o f u n d a m e n t a l
EXERCÍCIOS PARA GUARDA-REDES
Aula Prática 12 Operações com Arquivos Monitoria
Programação de Sistemas de Comunicação
1 2 Observa ilustração. Cria um texto. Observa ilustração.
MATRICIAL CONSULTORIA LTDA. PREFEITURA MUNICIPAL DE GARIBALDI 23/10/ : ATENÇÃO Os locais descritos nas planilhas anexas não correspondem ao total.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Comunicação entre Processos - Sockets. Conceitos Básicos Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem.
Rio Verde - Goiás - Brasil
Programando sockets em python
Programação distribuída e concorrente
Aula Prática 11 Operações com Arquivos Monitoria
Operações com Arquivos Monitoria A estrutura FILE  É como um tipo de dado, mas não é um tipo propriamente dito  Definido no arquivo cabeçalho.
Desenvolvimento de Aplicações TCP/IP com Sockets Márcio de Sousa Dias
Aula Prática 11 Operações com Arquivos Monitoria
Introdução à Programação com Sockets Fernando Jorge Silveira Filho Daniel Sadoc Menasché
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.
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.
Escola de Ciência e Tecnologia Arquitetura TCP/IP Arquitetura TCP/IP Protocolos TCP, UDP e ICMP Etienne César R. de Oliveira
Curso Superior em Redes de Computadores Camada de Aplicação Prof. Sales Filho.
Transcrição da apresentação:

Prof. Edmundo R. M. Madeira Carlos R. Senna MC823 Laboratório de Teleprocessamento e Redes Primeiro Semestre 2007

2 Tecnologias de Comunicação MC823 Sockets UDP

3 Funções para cliente-servidor UDP Sockets UDP socket( ) bind( ) recvfrom( ) socket( ) sendto( ) Blocks until datagram received from a client Process request recvfrom( ) close( ) UDP Server UDP Client data (request) data (reply) well-known port Sem conexão. Não implementa entrega confiável. DNS, NFS, SNMP. Stevens Vol. 1 Fig. 8.1

4 Funções recvfrom e sendto Sockets UDP #include ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen); Retorno: número de bytes lidos ou escritos se OK, -1 para erro. Argumentos: sockfd: descriptor buff: buffer de leitura/escrita nbytes: quantidade de bytes leitura/escrita flags: por enquanto = 0 to: ponteiro para socket address structure addrlen: tamanho do socket address structure

5 Funções recvfrom e sendto Sockets UDP ssize_t recvfrom (int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); ssize_t sendto (int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen); Escrever datagrama tamanho zero é válido (20 bytes IPv4 + 8 bytes UDP header). recvfrom e addrlen podem ser ambos nulos. Não importa quem enviou. recvfrom e sento podem ser usados por TCP Exemplo: T / TCP – TCP for Transaction.

6 Função sendto Sockets - UDP Aplicação UDP IP Fila saída Enlace Buffer da aplicação sendto Buffer de envio do socket ( SO_SNDBUF ) Processo do usuário Kernel Datagramas UDP Pacotes IPv4 ou IPv6 do tamanho da MTU Sucesso do write: datagrama foi colocado na fila de saída do enlace.

7 UDP Echo Server Sockets UDP 1 #include "unp.h" 2 3 int main(int argc, char **argv) 4 { 5 int sockfd; 6 struct sockaddr_in servaddr, cliaddr; 7 sockfd = Socket (AF_INET, SOCK_DGRAM, 0); 8 Bzero (&servaddr, sizeof(servaddr)); 9 servaddr.sin_family = AF_INET; 10 servaddr.sin_addr.s_addr = htonl (INADDR_ANY); 11 servaddr.sin_port = htons (SERV_PORT); 12 Bind (sockfd, (SA *) &servaddr, sizeof(servaddr)); 13 dg_echo (sockfd, (SA *) &cliaddr, sizeof(cliaddr)); 14 } Stevens Vol. 1 Fig. 8.1

8 UDP Echo Server Sockets UDP 1 #include "unp.h" 2 3 void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen) 4 { 5 int n; 6 socklen_t len; 7 char mesg[MAXLINE]; 8 for ( ; ; ) { 9 len = clilen; 10 n = Recvfrom (sockfd, mesg, MAXLINE, 0, pcliaddr, &len); 11 Sendto (sockfd, mesg, n, 0, pcliaddr, len); 12 } 13 } Stevens Vol. 1 Fig. 8.1

9 Servidor UDP Sockets UDP Não há end of file TCP concorrente. UDP interativo. Apenas um processo servidor e único socket. Um único buffer no qual todos os datagramas chegam.

10 Servidor UDP x TCP Sockets UDP Stevens Vol. 1 Fig. 8.6 Stevens Vol. 1 Fig. 8.5

11 UDP Echo Client Sockets UDP 1 #include "unp.h" 2 3int main(int argc, char **argv) 4 { 5 int sockfd; 6 struct sockaddr_in servaddr; 7 if(argc != 2) 8 err_quit("usage: udpcli "); 9 bzero(&servaddr, sizeof(servaddr)); 10 servaddr.sin_family = AF_INET; 11 servaddr.sin_port = htons (SERV_PORT); 12 Inet_pton (AF_INET, argv[1], &servaddr.sin_addr); 13 sockfd = Socket (AF_INET, SOCK_DGRAM, 0); 14 dg_cli(stdin, sockfd, (SA *) &servaddr, sizeof(servaddr)); 15 exit(0); 16 }

12 UDP Echo Client (função dg_cli) Sockets UDP 1 #include "unp.h" 2 3 void dg_cli(FILE *fp,int sockfd,const SA *pservaddr,socklen_t,servlen) 4 { 5 int n; 6 char sendline[MAXLINE], recvline[MAXLINE + 1]; 7 while (Fgets(sendline, MAXLINE, fp) != NULL) { 8 Sendto (sockfd,sendline,strlen(sendline),0,pservaddr,servlen); 9 n = Recvfrom (sockfd, recvline, MAXLINE, 0, NULL, NULL); 10 recvline[n] = 0; /* null terminate */ 11 Fputs(recvline, stdout); 12 } 13 }

13 Datagramas perdidos Sockets UDP Cliente – servidor UDP não são confiáveis. Se datagrama ou ACK de aplicação se perdem, cliente-servidor ficam bloqueados para sempre.

14 Verificando respostas Sockets UDP Qualquer processo pode enviar datagramas para a porta efêmera do cliente. recvfrom retorna IP de quem enviou. Alterar o código para especificar a porta do servidor e alocar estrutura para salvar info sobre endereço IP.

15 Função dg_cli que verifica endereço Sockets UDP 1 #include "unp.h" 2 3 void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) 4 { 5 int n; 6 char sendline[MAXLINE], recvline[MAXLINE + 1]; 7 socklen_t len; 8 struct sockaddr *preply_addr; 9 preply_addr = Malloc(servlen); 10 while (Fgets(sendline, MAXLINE, fp) != NULL) { 11 Sendto (sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); 12 len = servlen; 13 n = Recvfrom (sockfd, recvline, MAXLINE, 0, preply_addr, &len); 14 if (len != servlen || memcmp(pservaddr, preply_addr, len) != 0) { 15 printf("reply from %s (ignored)\n", Sock_ntop(preply_addr, len)); 16 continue; 17 } 18 recvline[n] = 0; /* null terminate */ 19 Fputs(recvline, stdout); 20 } 21 }

16 Servidor não responsivo Sockets UDP tcpdump quando processo servidor não iniciou no servidor. sendto – retorna sucesso se houve espaço no buffer de envio para datagrama. Erro assíncrono – Não há como saber endereço IP e porta do servidor que não respondeu quando um único socket é usado para envio de datagrama para vários servidores. Erro não é retornado para processo connect socket UDP recebe de exatamente um peer. Erro retornado ao processo arp who-has freebsd4 tell macosx ( ) arp reply freebsd4 is-at 0:40:5:42:d6:de ( ) macosx > freebsd4.9877: udp ( ) freebsd4 > macosx: icmp: freebsd4 udp port 9877 unreachable

17 UDP Cliente-Servidor: visão cliente Sockets UDP Stevens Vol. 1 Fig. 8.11

18 UDP Cliente-Servidor: visão servidor Sockets UDP Stevens Vol. 1 Fig. 8.12

19 Função connect (UDP) Sockets UDP Não há three-way handshaking – estabelecimento da conexão. Não é conexão TCP. O Kernel guarda o endereço IP e a porta do peer, armazenados na estrutura passada na chamada para connect (servaddr). Deve-se usar write ou send ao invés de sento. int connect ( int sockfd, const struct sockaddr *servaddr, socklen_t addrlen );

20 Função connect (UDP) Sockets UDP Quando usar sento o ponteiro para a estrutura ( *to ) e o seu tamanho (*addrlen ), devem ser nulos. Não se usa recvfrom. Usa-se read ou recv. ssize_t sendto ( int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen );

21 Função connect (UDP) Sockets UDP Datagramas recebidos com endereço IP e porta diferentes do especificado em connect não são repassados. ®Troca de informação com um peer somente. Erros assíncronos são retornados para processo connect em socket UDP. int connect ( int sockfd, const struct sockaddr *servaddr, socklen_t addrlen );

22 Função connect (UDP) Sockets UDP Stevens Vol. 1 Fig Stevens Vol. 1 Fig. 8.15

23 Função dg_cli com connect Sockets UDP 1 #include "unp.h" 2 3 void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) 4 { 5 int n; 6 char sendline[MAXLINE], recvline[MAXLINE + 1]; 7 Connect(sockfd, (SA *) pservaddr, servlen); 8 while (Fgets(sendline, MAXLINE, fp) != NULL) { 9 Write (sockfd, sendline, strlen(sendline)); 10 n = Read (sockfd, recvline, MAXLINE); 11 recvline[n] = 0; /* null terminate */ 12 Fputs(recvline, stdout); 13 } 14 }

24 Flow Control Sockets UDP 1 #include "unp.h" 2 #define NDG 2000 /* datagrams to send */ 3 #define DGLEN 1400 /* length of each datagram */ 4 5 void dg_cli(FILE *fp,int sockfd,const SA *pservaddr,socklen_t servlen) 6 { 7 int i; 8 char sendline[DGLEN]; 9 for (i = 0; i < NDG; i++) { 10 Sendto ( sockfd, sendline, DGLEN, 0, pservaddr, servlen ); 11 } 12 } Função dg_cli que escreve um número fixo de datagramas para o server.

25 Flow Control Sockets UDP 1 #include "unp.h" 2 static void recvfrom_int(int); 3 static int count; 4 5 void dg_echo ( int sockfd, SA *pcliaddr, socklen_t clilen ) 6 { 7 socklen_t len; 8 char mesg[MAXLINE]; 9 Signal ( SIGINT, recvfrom_int); 10 for ( ; ; ) { 11 len = clilen; 12 Recvfrom ( sockfd, mesg, MAXLINE, 0, pcliaddr, &len ); 13 count++; 14 } 15 } static void recvfrom_int(int signo) 18 { 19 printf("\nreceived %d datagrams\n", count); 20 exit(0); 21 } Função dg_echo que conta os datagramas recebidos.

26 Flow Control Sockets UDP freebsd % netstat -s -p udp udp: datagrams received 0 with incomplete header 0 with bad data length field 0 with bad checksum 0 with no checksum 832 dropped due to no socket 16 broadcast/multicast datagrams dropped due to no socket 1971 dropped due to full socket buffers 0 not for hashed pcb delivered datagrams output Saída no host servidor.

27 Servidor TCP e UDP usando select (1/4) Sockets UDP 1 #include "unp.h" 2 3 int main(int argc, char **argv) 4 { 5 int listenfd, connfd, udpfd, nready, maxfdp1; 6 char mesg[MAXLINE]; 7 pid_t childpid; 8 fd_set rset; 9 ssize_t n; 10 socklen_t len; 11 const int on = 1; 12 struct sockaddr_in cliaddr, servaddr; 13 void sig_chld(int); 14 /* create listening TCP socket */ 15 listenfd = Socket ( AF_INET, SOCK_STREAM, 0 );...

28 Servidor TCP e UDP usando select (2/4) Sockets UDP 16 bzero(&servaddr, sizeof(servaddr)); 17 servaddr.sin_family = AF_INET; 18 servaddr.sin_addr.s_addr = htonl (INADDR_ANY); 19 servaddr.sin_port = htons (SERV_PORT); 20 Setsockopt (listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); 21 Bind (listenfd, (SA *) &servaddr, sizeof(servaddr)); 22 Listen (listenfd, LISTENQ); 23 /* create UDP socket */ 24 udpfd = Socket (AF_INET, SOCK_DGRAM, 0); 25 bzero(&servaddr, sizeof(servaddr)); 26 servaddr.sin_family = AF_INET; 27 servaddr.sin_addr.s_addr = htonl (INADDR_ANY); 28 servaddr.sin_port = htons (SERV_PORT); 29 Bind (udpfd, (SA *) &servaddr, sizeof(servaddr));...

29 Servidor TCP e UDP usando select (3/4) Sockets UDP 30 Signal (SIGCHLD, sig_chld); /* must call waitpid() */ 31 FD_ZERO(&rset); 32 maxfdp1 = max(listenfd, udpfd) + 1; 33 for ( ; ; ) { 34 FD_SET (listenfd, &rset); 35 FD_SET (udpfd, &rset); 36 if( (nready = select (maxfdp1, &rset, NULL, NULL, NULL)) <0) { 37 if (errno == EINTR) 38 continue; /* back to for() */ 39 else 40 err_sys ("select error"); 41 }...

30 Servidor TCP e UDP usando select (4/4) Sockets UDP 42 if ( FD_ISSET (listenfd, &rset)) { 43 len = sizeof(cliaddr); 44 connfd = Accept (listenfd, (SA *) &cliaddr, &len); 45 if ( (childpid = Fork ()) == 0) { /*child process */ 46 Close (listenfd); /* close listening socket */ 47 str_echo(connfd); /* process the request */ 48 exit(0); 49 } 50 Close (connfd); /* parent closes connected socket */ 51 } 52 if (FD_ISSET (udpfd, &rset)) { 53 len = sizeof(cliaddr); 54 n = Recvfrom (udpfd, mesg, MAXLINE, 0, (SA *) &cliaddr, &len); 55 Sendto (udpfd, mesg, n, 0, (SA *) &cliaddr, len); 56 } 57 } 58 }

31 Tecnologias de Comunicação RMI Remote Method Invocation

32