Comunicação entre Processos - Sockets. Conceitos Básicos Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem.

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
Redes de computadores I
Comunicação entre processos distribuídos
Bruno Rafael de Oliveira Rodrigues
Redes I Os Protocolos Prof. Dr. Amine BERQIA
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.
Modelos de Comunicação em Sistemas Distribuídos
URL: Redes Prof. Edgard Jamhour URL:
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.
TCP Serviço de Transporte Confiável
Conceitos de Sockets Universidade Federal do Rio Grande do Sul (UFRGS)
Comunicação Inter-Processos
E-Commerce, Systems Performance Evaluation, and Experimental Development Laboratory Tecnologias WWW Protocolos e Aplicações Wagner Meira Jr.
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
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.
Obtenção de IP TCP UDP.
REVISÃO MÓDULO 3(Camada de Transporte)
Camada de Transporte: Portas, Sockets, Aplicações em Rede
PROTOCOLOS DE COMUNICAÇÃO
Introdução à Programação Distribuída em Java
NETBIOS Disciplina: Redes de Computadores
Modelo de referência OSI
Comunicação entre processos usando Sockets
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Uma descrição detalhada da rede
IC II - Prof. Msc. Allan K. Luizi - UNEMAT
Programação de Sistemas de Comunicação
O Modelo OSI Guilherme Guimarães.
Sistemas Distribuídos
Comunicação Entre Processos Sockets - Java
Camada de Transporte prof. Eduardo.
Comunicação entre processos: Mensagens Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas Distribuídos.
Programando sockets em python
Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -
Programação distribuída e concorrente
Prof. Carlos Roberto da Silva Filho, M. Eng.
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
TCP Conexão Fiabilidade Full Duplex Entrega ordenada Controlo de fluxo
Escola Secundaria Sebastião da Gama Trabalho realizado por: André Santos 12ºL nº:2 Prof: Carlos Pereira.
REDES DE COMPUTADORES Camada de Transporte Professor: M.Sc. Carlos Oberdan Rolim.
MODELO DE REFERÊNCIA TCP/IP
Protocolo TCP e UDP Ricardo Costa Nº 10 12ºL.
Desenvolvimento de Aplicações TCP/IP com Sockets Márcio de Sousa Dias
Disciplina de: Comunicação de Dados Professor: Carlos Pereira Trabalho Realizado por: João Santos.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Disciplina: Comunicação de Dados Ricardo Bento 12ºL.
Arquitetura de redes ISSO/OSI Liane Tarouco UFRGS.
Arquitectura tcp. Camada tcp Ao contrário do protocolo UDP, o TCP representa um grande incremento de qualidade relativamente ao protocolo IP que lhe serve.
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.
Administração e Projeto de Redes
Introdução à Programação com Sockets Fernando Jorge Silveira Filho Daniel Sadoc Menasché
Redes de computadores: Camada de Transporte Prof. Dr. Amine BERQIA
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.
TCP È um dos protocolos sob os quais assenta o núcleo da Internet nos dias de hoje. A versatilidade e robustez deste protocolo tornaram adequado para.
Passagens de Mensagens Prof. Dr. Norian Marranghello
Redes de Computadores 2 - Camada de Aplicação (Princípios Básicos) –
Redes de computadores e a Internet
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.
Redes de Computadores Prof. Msc. Moisés Pereira Bastos.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
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:

Comunicação entre Processos - Sockets

Conceitos Básicos Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem comunicação entre processos residentes em sistema único ou processos residentes em sistemas remotos. Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem comunicação entre processos residentes em sistema único ou processos residentes em sistemas remotos.

Conceitos Básicos Sockets criados por diferentes programas usam nomes para se referenciarem. Sockets criados por diferentes programas usam nomes para se referenciarem. Esses nomes geralmente devem ser traduzidos em endereços para uso. Esses nomes geralmente devem ser traduzidos em endereços para uso. Um endereço é especificado por um domínio. Um endereço é especificado por um domínio.

Processo Usuário SO IPC em um mesmo sistema

Processo Usuário Processo usuário SO Comunicação de Processos Remotos

Tipos de Sockets –STREAM SOCKET - Provê sequenciamento e fluxo bidirecinal. Este tipo de socket transmite dados sobre um base confiável e com capacidade de transmissão de dados expressos. –No domínio UNIX, o SOCKET_STREAM trabalha igual a um pipe, no domínio INTERNET este tipo de socket é implementado sobre TCP/IP.

Tipos de Sockets –SOCK_DGRAM - Suporta fluxo de dados bidirecional mas não oferece um serviço confiável como STREAM_SOCKET. –Mensagens duplicadas e em ordem diferente ( não sequenciadas ) são problemas que podem aparecer neste tipo de socket.

Tipos de Sockets –RAW_SOCKET - permite o acesso a interface de protocolos de rede. Disponível para usuários avançados e que possuam autoridade de usuário root –permite que uma aplicação acesse diretamente protocolos de comunicação de baixo nível. – permite a construção de novos protocolos sobre os protocolos de baixo nível já existentes –normalmente orientados a datagrama

Associação O socket é criado sem nome O socket é criado sem nome É necessário um nome para para a sua utilização É necessário um nome para para a sua utilização Os processos são ligados por uma associação Os processos são ligados por uma associação Associação: Associação:

Domínios e Protocolos O espaço no qual o endereço é especificado é chamado de domínio O espaço no qual o endereço é especificado é chamado de domínio Domínios básicos: Domínios básicos: »INTERNET - AF_INET - os endereços consistem do end. de rede da máquina e da identificação do no. da porta, o que permite a comunicação entre processos de sistemas diferentes »Unix: AF_UNIX - os processos se comunicam referenciando um pathname, dentro do espaço de nomes do sistema de arquivos

Domínios e Protocolos Domínio Internet Domínio Internet –Implementação Unix da protocolo TCP/UDP/IP –Consistem de: »end. de rede da máquina »identificação do no. da porta –Permitem a comunicação entre máquinas diferentes –Conexões sob a forma de sockets do tipo stream e do tipo datagramas

Tipos de Sockets Socket Stream Socket Stream –conexões confiáveis Datagramas Datagramas –não fornecem segurança

Protocolos TCP/IP Processo A Processo B TCPUDP IP Interface hardware

IP Internetwork Protocol Roteamento de mensagens na rede Unidade: datagramas Fragmentação de pacotes (se > MTU)‏ Entrega não confiável de pacotes

TCP Transmission Control Protocol Para comunicação longa (conexão)‏ Confiável Transmissão de fluxo de dados: Não respeita limites de mensagens Baixo desempenho em comunicações curtas (?)‏ Usos típicos: Login remoto Transferência de arquivo

UDP User Datagram Protocol Para comunicação curta (sem conexão)‏ Não confiável Transmissão de pacotes: respeita limites de mensagens Pouco prático para comunicações longas (confiabilidade precisa ser programada)‏ Usos típicos: RPC Broadcast

Porta “Endereço” para um processo comunicante Inteiro de 16 bits (definido pelo usuário)‏ Portas 1 a 1023 são do sistema Portas de TCP independentes das de UDP

Associação Definida por Um protocolo: TCP ou UDP Endereço IP local Porta local Endereço IP distante Porta distante

Comunicação por sockets ServidorCliente 1 kernel socket conexão rede

Comunicação via TCP Servidor socket ( )‏ Cria um socket com - Família (ou domínio): UNIX, Internet, XNS - Tipo: stream, datagrama, puro - Protocolo (por conseq.): TCP, UDP sockfd = (int) socket (int family, int type, int protocol)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ Atribui ao socket - Endereço Internet (pode ser “any”)‏ - Porta de comunicação ret = (int) bind (int sockfd, struct sockaddr *myaddr, int addrlen)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ Declara - Que está pronto para receber conexões - Até quantas devem ser enfileiradas ret = (int) listen (int sockfd, int backlog)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ newsock = (int) accept (int sockfd, struct sockaddr *peer, int *addrlen)‏ Bloqueia até que haja pedido de conexão Quando houver algum, aceita

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ socket ( )‏ Cliente Cria um socket idêntico ao do servidor (mesma família e tipo)‏ sockfd = (int) socket (int family, int type, int protocol)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ socket ( )‏ connect ( )‏ Cliente Pede uma conexão ao servidor Fica bloqueado ou retorna erro Se aceito, fecha a conexão ret = (int) connect (int sockfd, struct sockaddr *servaddr, int addrlen)‏ estabelecimento de conexão

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ socket ( )‏ connect ( )‏ send ( )‏ estabelecimento de conexão Cliente Envia uma seqüência de bytes pela conexão nbytes = (int) send (int sockfd, char *buf, int nbytes, int flags)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ recv ( )‏ socket ( )‏ connect ( )‏ send ( )‏ estabelecimento de conexão solicitação Cliente Recebe (parte da ) msg enviada por send ( )‏ nbytes = (int) recv (int sockfd, char *buf, int nbytes, int flags)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ recv ( )‏ send ( )‏ socket ( )‏ connect ( )‏ send ( )‏ recv ( )‏ estabelecimento de conexão solicitação resposta processamento Cliente Transmite ou confirma msgs faltantes Encerra a conexão Fecha o socket close ( )‏ ret = (int) close (int sockfd)‏

Comunicação via TCP Servidor socket ( )‏ bind ( )‏ listen ( )‏ accept ( )‏ recv ( )‏ send ( )‏ socket ( )‏ connect ( )‏ send ( )‏ recv ( )‏ estabelecimento de conexão solicitação resposta processamento Cliente Diagrama completo close ( )‏

Comunicação via UDP Servidor socket ( )‏ Cliente Cliente e servidor criam seus sockets Família = Internet, tipo = datagrama

Comunicação via UDP Servidor socket ( )‏ bind ( )‏ socket ( )‏ bind ( )‏ Cliente Cliente e servidor definem endereços

Comunicação via UDP Servidor socket ( )‏ bind ( )‏ recvfrom ( )‏ socket ( )‏ bind ( )‏ Cliente Recebe pacote enviado do endereço informado Se não houver nada, bloqueia nbytes = (int) recvfrom (int sockfd, char *buf, int nbytes, int flags, struct sockaddr *from, int *addrlen)‏ nbytes = (int) recvfrom (int sockfd, char *buf, int nbytes, int flags, struct sockaddr *from, int *addrlen)‏

Comunicação via UDP Servidor socket ( )‏ bind ( )‏ recvfrom ( )‏ socket ( )‏ bind ( )‏ sendto ( )‏ solicitação Cliente Envia pacote para o endereço informado nbytes = (int) recvfrom (int sockfd, char *buf, int nbytes, int flags, struct sockaddr *from, int *addrlen)‏ nbytes = (int) recvfrom (int sockfd, char *buf, int nbytes, int flags, struct sockaddr *from, int *addrlen)‏

Comunicação via UDP Servidor socket ( )‏ bind ( )‏ recvfrom ( )‏ sendto ( )‏ socket ( )‏ bind ( )‏ sendto ( )‏ recvfrom ( )‏ solicitação resposta processamento Cliente Diagrama completo close ( )‏

Multiplexação Multiplexação Problema: Servidor esperando conexão em vários sockets Como aceitar a 1 a que chegar?

Multiplexação Soluções: Definir sockets não bloqueantes e fazer polling => busy wait Criar um filho para cada socket Usar I/O assíncrono (evento gera SIGIO)‏ => programação não trivial Função select ( )‏

maxfd indica o maior descritor a ser pesquisado readfds é um vetor de bits, cada bit correspondendo a um descritor onde se espera uma entrada writefds idem, se espera uma saída exceptfds idem, se espera uma exceção timeout define por quanto tempo o select espera ret = (int) select (int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)‏ ret = (int) select (int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)‏

Função select ( )‏ #include... fd_set readfds; struct timeval wait;... for (;;) { wait.tv_sec = 1; /* ajusta timeout para 1 seg */ wait.tv_usec = 0; FD_ZERO (&readfds); /* zera vetor de bits */ FD_SET (sd1, &readfds); /* liga bit correspondente ao socket 1 */ FD_SET (sd2, &readfds); /* liga bit correspondente ao socket 2 */ nb = select (FD_SETSIZE, &readfds, (fd_set *) 0, (fd_set *) 0, &wait); if (nb <= 0) { /* ocoreu erro ou expirou o timeout */ } if (FD_ISSET (s1, &readfds)) { /* socket 1 está pronto para ser lido */ }...