comunicação entre processos - sockets. conceitos básicos sockets são uma forma de ipc (...

38
Comunicação entre Comunicação entre Processos - Processos - Sockets Sockets

Upload: internet

Post on 21-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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 Comunicação entre Processos - Processos -

SocketsSockets

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

Conceitos BásicosConceitos Básicos

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

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

Conceitos BásicosConceitos Básicos

Sockets criados por diferentes programas Sockets criados por diferentes programas usam nomes para se referenciarem.usam nomes para se referenciarem.

Esses nomes geralmente devem ser Esses nomes geralmente devem ser traduzidos em endereços para uso.traduzidos em endereços para uso.

Um endereço é especificado por um Um endereço é especificado por um domínio.domínio.

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

Processo Usuário Processo Usuário

SO

IPC em um mesmo sistema

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

Processo Usuário Processo usuário

SO SO

Comunicação de Processos Remotos

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

Tipos de SocketsTipos de Sockets

– STREAM SOCKET - Provê sequenciamento e STREAM SOCKET - Provê sequenciamento e fluxo bidirecinal. Este tipo de socket transmite fluxo bidirecinal. Este tipo de socket transmite dados sobre um base confiável e com dados sobre um base confiável e com capacidade de transmissão de dados expressos.capacidade de transmissão de dados expressos.

– No domínio UNIX, o SOCKET_STREAM No domínio UNIX, o SOCKET_STREAM trabalha igual a um pipe, no domínio trabalha igual a um pipe, no domínio INTERNET este tipo de socket é implementado INTERNET este tipo de socket é implementado sobre TCP/IP.sobre TCP/IP.

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

Tipos de SocketsTipos de Sockets

– SOCK_DGRAM - Suporta fluxo de dados SOCK_DGRAM - Suporta fluxo de dados bidirecional mas não oferece um serviço bidirecional mas não oferece um serviço confiável como STREAM_SOCKET.confiável como STREAM_SOCKET.

– Mensagens duplicadas e em ordem diferente Mensagens duplicadas e em ordem diferente ( não sequenciadas ) são problemas que podem ( não sequenciadas ) são problemas que podem aparecer neste tipo de socket.aparecer neste tipo de socket.

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

Tipos de SocketsTipos de Sockets

– RAW_SOCKET - permite o acesso a interface RAW_SOCKET - permite o acesso a interface de protocolos de rede. Disponível para usuários de protocolos de rede. Disponível para usuários avançados e que possuam autoridade de usuário avançados e que possuam autoridade de usuário rootroot

– permite que uma aplicação acesse diretamente permite que uma aplicação acesse diretamente protocolos de comunicação de baixo nível.protocolos de comunicação de baixo nível.

– permite a construção de novos protocolos permite a construção de novos protocolos sobre os protocolos de baixo nível já existentes sobre os protocolos de baixo nível já existentes

– normalmente orientados a datagramanormalmente orientados a datagrama

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

AssociaçãoAssociação

O socket é criado sem nomeO socket é criado sem nome É necessário um nome para para a sua É necessário um nome para para a sua

utilizaçãoutilização Os processos são ligados por uma Os processos são ligados por uma

associaçãoassociação Associação: Associação: <protocolo, end. máquina local, porta local, end. <protocolo, end. máquina local, porta local, end.

máquina remota, porta remota>máquina remota, porta remota>

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

Domínios e ProtocolosDomínios e Protocolos

O espaço no qual o endereço é especificado O espaço no qual o endereço é especificado é chamado de domínioé chamado de domínio

Domínios básicos:Domínios básicos:» INTERNET - AF_INET - os endereços consistem INTERNET - AF_INET - os endereços consistem

do end. de rede da máquina e da identificação do no. do end. de rede da máquina e da identificação do no. da porta, o que permite a comunicação entre da porta, o que permite a comunicação entre processos de sistemas diferentesprocessos de sistemas diferentes

» Unix: AF_UNIX - os processos se comunicam Unix: AF_UNIX - os processos se comunicam referenciando um pathname, dentro do espaço de referenciando um pathname, dentro do espaço de nomes do sistema de arquivosnomes do sistema de arquivos

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

Domínios e ProtocolosDomínios e Protocolos

Domínio InternetDomínio Internet– Implementação Unix da protocolo TCP/UDP/IPImplementação Unix da protocolo TCP/UDP/IP– Consistem de:Consistem de:

» end. de rede da máquinaend. de rede da máquina

» identificação do no. da portaidentificação do no. da porta

– Permitem a comunicação entre máquinas Permitem a comunicação entre máquinas diferentesdiferentes

– Conexões sob a forma de sockets do tipo stream Conexões sob a forma de sockets do tipo stream e do tipo datagramase do tipo datagramas

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

Tipos de SocketsTipos de Sockets

Socket StreamSocket Stream– conexões confiáveisconexões confiáveis

DatagramasDatagramas– não fornecem segurançanão fornecem segurança

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

Protocolos TCP/IP

ProcessoA

ProcessoB

TCP UDP

IP

Interfacehardware

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

IP

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

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

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

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

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

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

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

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

Associação

• Definida por

• Um protocolo: TCP ou UDP• Endereço IP local• Porta local• Endereço IP distante• Porta distante

Page 19: 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 por sockets

Servidor Cliente 1

kernelkernel

socket socket

conexão

rede

Page 20: 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 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)sockfd (int) = socket int) family int ,type int ,protocol(

Page 21: 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 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) ret = (int)bind int) sockfd struct sockaddr ,myaddr*int ,addrlen (

Page 22: 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 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) ret = (int)listen int) sockfdint ,backlog (

Page 23: 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 via TCPServidor

socket ( )

bind ( )

listen ( )

accept ( )

newsock = (int) accept (int sockfd, struct sockaddr *peer, int *addrlen)newsock (int) = accept int) sockfd* struct sockaddr ,peerint ,addrlen* (

• Bloqueia até que haja pedido de conexão• Quando houver algum, aceita

Page 24: 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 via TCPServidor

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)sockfd (int) = socket int) family int ,type int ,protocol(

Page 25: 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 via TCPServidor

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)ret = (int)connect int) sockfd * struct sockaddr ,servaddr int ,addrlen(

estabelecimento de conexão

Page 26: 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 via TCPServidor

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)nbytes(int) = send int) sockfd * char ,buf int ,nbytes int ,flags(

Page 27: 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 via TCPServidor

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)nbytes(int) = recv int) sockfd * char ,buf int ,nbytes int ,flags(

Page 28: 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 via TCPServidor

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 ( ) close ( )

ret = (int) close (int sockfd)ret = (int)close int) sockfd (

Page 29: 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 via TCPServidor

socket ( )

bind ( )

listen ( )

accept ( )

recv ( )

send ( )

socket ( )

connect ( )

send ( )

recv ( )

estabelecimento de conexão

solicitação

resposta

processamento

Cliente

• Diagrama completo

close ( ) close ( )

Page 30: 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 via UDP

Servidor

socket ( ) socket ( )

Cliente

• Cliente e servidor criam seus sockets• Família = Internet, tipo = datagrama

Page 31: 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 via UDP

Servidor

socket ( )

bind ( )

socket ( )

bind ( )

Cliente

• Cliente e servidor definem endereços

Page 32: 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 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 sockaddrfrom* int ,addrlen(

Page 33: 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 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 sockaddrfrom* int ,addrlen(

Page 34: 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 via UDP

Servidor

socket ( )

bind ( )

recvfrom ( )

sendto ( )

socket ( )

bind ( )

sendto ( )

recvfrom ( )

solicitação

resposta

processamento

Cliente

• Diagrama completo

close ( ) close ( )

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

MultiplexaçãoMultiplexação• Problema:

Servidor esperando conexão em vários sockets

Como aceitar a 1a que chegar?

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

MultiplexaçãoMultiplexaçã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 ( )

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

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_setexceptfds* struct timeval ,timeout(

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

Função select ( )Função select ( )#include <sys/time.h>#include <sys/types.h>...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 */ } ...