00-006 Volnys Bernal 00-006 Volnys Bernal Agenda Introdução à Programação Sockets Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Interface de programação sockets Socket Socket address Par Socket Estrutura sockaddr_in Estrutura de dados mantida pelo sistema operacional 00-006 Volnys Bernal 00-006 Volnys Bernal Interface de Programação Sockets Interface de programação mais usual para comunicação sobre a pilha /IP Permite à uma (processo) estabelecer, por eemplo: Sessão de comunicação Coneão Sessão de comunicação IP 00-006 Volnys Bernal 00-006 Volnys Bernal 6 NFS NIS SMB Processos Camada de DNS HTTP FTP Telnet SMTP POP RPC NetBios Interface Sockets Camada de transporte Camada de redes IP ICMP IGMP Núcleo do Sistema Operacional ICMP IP IGMP ARP RARP Device Driver ARP Camada intra-rede Fast Gigabit PPP SLIP Frame Relay Placa de Rede PPP meio físico Meio Físico
00-006 Volnys Bernal 7 00-006 Volnys Bernal 8 Principais funções da interface de programação sockets bind listen connect accept read write recv send recvfrom sendto close shutdown connect ( ) send ( ) recv ( ) OPEN bind ( ) recvfrom ( ) sendto ( ) 00-006 Volnys Bernal 9 00-006 Volnys Bernal 0 connect ( ) send ( ) CLOSED CLOSED LISTEN SYN SYN_SENT SYN,ACK SYN_RCVD ACK ESTABLISHED ESTABLISHED ACK bind ( ) listen ( ) accept ( ) recv ( ) shutdown ( ) 00-006 Volnys Bernal 00-006 Volnys Bernal Socket Socket = Soquete = Plug de comunicação Identifica um etremo da comunicação entre duas aplicações Socket address Endereço que permite identificar um soquete Socket address para IPv é Endereço IP Porta do protocolo de transporte = End. IP + Porta
00-006 Volnys Bernal 00-006 Volnys Bernal Par Socket Identifica uma sessão de comunicação Identificado por dois Socket Adddress Estrutura sockaddr Estrutura genérica para representar o endereço de um socket Protocolo de End. IP Porta End. IP Porta u_short ; char []; 00-006 Volnys Bernal 00-006 Volnys Bernal 6 Address Family Identificador do tipo de endereço utilizado Eemplo de identificadores para address family: AF_INET - para endereços IPv AF_INET6 - para endereços IPv6 u_short ; char []; Estrutura sockaddr_in Quando for um endereço IPv (address family=af_inet) o endereço do socket pode ser representado utilizando a estrutura Internet. Formato geral u_short ; char []; Formato específico p/ Internet _in u_short ; u_short ; u_long char [8]; 00-006 Volnys Bernal 7 00-006 Volnys Bernal 8 Estrutura customizada para internet Estrutura geral _in Utilização de sockets com a Pilha /IP Mapeada em
00-006 Volnys Bernal 9 00-006 Volnys Bernal 0 Sockets com a Pilha /IP Quando a chamada socket() é ativada para uma comunicação sobre a pilha /IP, é alocada no sistema operacional uma estrutura socket, contendo inicialmente somente informações a respeito de Família de protocolo Tipo de serviço Protocolo de interação Eistem diversas pilhas de protocolos de rede (além da pílha /IP), cada uma com diferentes protocolos e formatos de endereço. Para cada uma destas, eistem diferentes valores que podem ser utilizados para identificar a Famídia de protocolos, o tipo de fluo e o protocolo de interação Sockets com a Pilha /IP No caso da utilização da pilha /IP com IPv os valores possíveis são: Protocol Family (PF) Possibilita identificar o tipo de protocolo utilizado Deve ser utilizado PF_INET Address Family (AF) Possibilita identificar o tipo de endereço utilizado Deve ser utilizado AF_INET Protocol Protocolo de interação Valores possíveis:, ou IP Type Tipo de serviço oferecido Valores possíveis: STREAM, DGRAM ou RAW 00-006 Volnys Bernal 00-006 Volnys Bernal Tabela de descritores de arquivos abertos Quando um arquivo ou socket é aberto é alocada uma entrada da tabela de descritores de arquivos abertos Cada entrada da tabela de descritores contém um índice para outra tabela que contém informações a respeito do arquivo ou socket O índice da tabela (chamado de descritor) é utilizado pela para identificar o arquivo ou socket em operações futuras Tabela de descritores de arquivos abertos 0 Arquivo Arquivo Socket 00-006 Volnys Bernal Contém informações a respeito de uma sessão de comunicação ( ou ) ou uma sessão embrionária Para cada sessão de comunicação, ou IP é necessário alocar uma estrutura socket protocol family PF_INET Observação: Visão simplificada da estrutura. O programador não manipula a estrutura socket diretamente. 00-006 Volnys Bernal Tabela de descritores 0 Socket Descriptor Observação: Visão simplificada O programador não manipula estas estruturas diretamente. protocol family PF_INET
00-006 Volnys Bernal 00-006 Volnys Bernal 6 Lado servidor com protocolo IPv (Internet) family PF_INET socketaddr_in bind() Utilizado no lado servidor. Define o endereço e a porta para o socket Lado cliente com protocolo IPv (Internet) family PF_INET socketaddr_in Connect() Utilizado no lado cliente. Define para o socket o parceiro remoto de comunicação 00-006 Volnys Bernal 7 00-006 Volnys Bernal 8 Referências Bibliográficas Referências Bibliográficas COMMER, DOUGLAS; STEVENS, DAVID Internetworking with /IP: volume : client-server programming and applications Prentice Hall 99