CENTRO UNIVERSITÁRIO FRANCISCANO
Programação Distribuída e Paralela
Bruno Dalla Vecchia
Santa Maria , 2006
Questões: (1) Caracterize as estruturas a) SOCKADDR_IN A estrutura sockaddr_in é uma estrutura que contém um endereço de internet. Esta estrutura deve ser definida dentro da biblioteca O endereço completo de um socket é especificado através da estrutura sockaddr-in que contém os campos para o endereço IP da maquina. Abaixo um exemplo de uma estrutura sockadd-in. struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; } Os tipos sa_family_t e in_port_t são geralmente equivalentes a unsigned short (16bits) e o campo sin_family indica a família de endereços daquele que vai ser especificado a seguir. Para os protocolos internet (IP version 4) esse campo deverá ter sempre o valor da constante AF_INET (address family internet).
b) IP_MREQ A estrutura ip_mreq é uma estrutura que especifica a interface local e o endereço do grupo multicast. Abaixo um exemplo de uma estrutura ip_mreq. struct ip_mreq { struct in_addr imr_multiaddr; // grupo struct in_addr imr_interface; // interface } (2) Para o multicast, a função socket possui o argumento IPPROTO_UDP, qual é a finalidade? IPPROTO_UDP é um protocolo usado em socket, indicando se o protocolo UDP é usado. Caso retorne um número não negativo significa que o chamado foi efetuado com sucesso, sendo negativo indica um erro. Abaixo segue a declaração de um socket
int socket(int family,int type,int proto); Family: especifica a família do protocolo (PF_INET para TCP/IP). Type: especifica o tipo de serviço (SOCK_STREAM, SOCK_DGRAM). Proto: especifica o tipo de protocolo.
(3) Caracterize a função: SETSOCKOPT Se caracteriza pela consulta e mudança de opções de socket, como tamanho máximo de mensagens, tamanho máximo de buffers, roteamento, broadcast, entre outros. Segue abaixo um exemplo. setsockopt( sock, /* socket */ IPPROTO_IP, /* nível */ IP_ADD_MEMBERSHIP, /* opção */ (char *) &mreq, /* argumento */ sizeof(mreq) /* tamanho argumento*/ ); (4) Como um processo é incluído em um grupo multicast? E como este processo pode deixar o grupo? Um processo é incluído ao grupo com a opção de gerenciamento JoinGroup (requisição a adição de um processo a um grupo existente) através do MulticastSocket socket = new MulticastSocket(porta); socket.joinGroup(groupAddress); Para entrar no grupo o host envia um IGMP Report para participar do grupo, em seguida o roteador envia queries confirmando o grupo, onde um membro do grupo responde por subnet. Um processo é removido do grupo com a opção de gerenciamento LeaveGroup (requisição de remoção do processo ao grupo especificado) através do socket.leaveGroup(groupAddress); Para sair o host envia mensagem (leave) informando que não participa mais de um grupo.
Membros podem entrar e sair dos grupos indicando isto aos roteadores (roteadores utilizam protocolos de roteamento multicast para gerenciar os grupo).
(5) Há possibilidade de 2 processos do mesmo grupo multicast fazerem o bind a uma mesma porta? Não, pois os processos pertencem à mesma porta e tem o mesmo IP, já que ambos pertencem ao mesmo grupo, ficando assim impossibilitados de fazerem o bind.
REFERÊNCIAS BIBLIOGRÁFICAS: COMER,D. Interligação em Rede com TCP/IP. Princípios protocolos e arquitetura. Rio de Janeiro: Campus,2002 Soluções Multicasting na Internet http://penta.ufrgs.br/rc952/trab2/hl_intro.html Multicast Services Ciscohttp://www.cisco.com/warp/public/732/Tech/multicast/ IP Multicast Initiative http://www.ipmulticast.com
PACHECO, Peter. Parallel Programming with MPI. San Francisco: Morgan Kaufmann, 1997.