Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. dos Santos

1,266 views
1,107 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,266
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. dos Santos

  1. 1. Workshop sobre programação em C usando a API Berkeley Sockets Carlos A. M. dos Santos unixmania at gmail dot com Workshop TcheLinux de Software Livre FTEC, Porto Alegre 30 de maio de 2009
  2. 2. ●Conhecer a linguagem C ●Experiência básica com a interface do shell ●Saber usar um editor de programas ●Saber compilar um programa :-) ●Saber usar o comando man ●Curiosidade Requisitos
  3. 3. ●Engenheiro Agrícola (UFPEL) ●Mestre em Ciência da Computação (UFRGS) ●1º Contato com Unix em 1989 (EMBRAPA) ●Experiência com diversos “sabores” de Unix ●Experiência com Linux de 1993 a 1999 ●(Portuguese-HOWTO, LDP, SGMLtools) ●Usuário de FreeBSD desde 1999 ●Ex-administrador de redes, ex-professor, etc. ●Atualmente, desenvolvedor (HP) Sobre o Apresentador
  4. 4. Comunicado O conteúdo desta apresentação não se refere a qualquer produto, processo, tecnologia ou informação pertencente HP. As opiniões contidas nesta apresentação são de responsabilidade exclusiva do autor e não refletem políticas, práticas ou negócios da HP.
  5. 5. Conteúdo Um pouco de teoria (calma, não dói!) ● Como funciona a Internet – Modelo conceitual da Internet (Tanenbaum) – Detalhes camada de rede – Endereçamento e subredes – Endereços IPv4 e IPv6 ● Detalhes da camada de transporte – Transmissão orientada a conexão (TCP) – Transmissão orientada a datagrama (UDP) Prática ● Servidor e cliente orientados a conexão ● Servidor e cliente orientados a datagrama ● Ambientes de pilha dupla (IPv4/IPv6)
  6. 6. Como Funciona a Internet G G G G Internet (gateways) obelix asterix
  7. 7. Modelo Conceitual (Tanenbaum) HTTP, etc Transporte TCP, UDP obelixasterix IP IEEE 802.2 IEEE 802.x HTTP, etc TCP, UDP IP IEEE 802.2 G Rede Enlace de dados Física Aplicação IEEE 802.x G Host-to-network (modelo Internet)
  8. 8. Modelo Conceitual Exemplo: envio de formulário HTTP Transporte Rede Enlace de dados Física Aplicação carga (payload) carga (payload) carga (payload) carga (payload) origemdestino origemdestino origemdestino ... 00:1b:77:0f:32:87 192.168.1.154 80 POST /form.php HTTP/1.1
  9. 9. Camada de Rede Endereçamento e Subredes – IPv4 1100 100100010000100010100000 1010 Hexadecimal Decimal (QDD) Binário 192 1541168 c0 9a01a8 Não-especificado Decimal (QDD) 0.0.0.0 255 0255255 Endereços especiais Máscara de subrede 1111 0000 Hexadecimal Binário ff 00ffff 1111 1111111111111111 0000 Loopback/localhost 127.0.0.1/255.0.0.0 Endereço/comprimento 192.168.1.154/24 Formas de representação Endereço/máscara 192.168.1.154/255.255.255.0 Endereço (32 bits)
  10. 10. Camada de Rede Endereçamento e Subredes – IPv6 fec0 00000000baba000ecafebebe 0001Hexadecimal Endereço (128 bits) Binário Localhost/loopback Hexadecimal + QDD ::1/128 Alguns enrereços especiais Rede mista IPv6/ IPv4 ffff c8a8Hexadecimal 192.168.1.2540000 0000000000000000 019a Não-especificado ::/128 não cabe neste espaço ffff0000 0000000000000000 Representação/notação • 8 grupos de 4 dígitos hexadecimais • zeros à esquerda de um grupo podem ser omitidos • Um ou mais grupos seguidos de quatro zeros podem ser substituídos por “::” • os 32 bits mais à direita podem ser representados em QDD
  11. 11. Camada de Transporte Tipos de Transmissão Suportados Com conexão (TCP) ●Entrega garantida ●Ordem garantida ●Controle de fluxo e congestionamento ●Início e término do envio demorados (handshake) Sem conexão (UDP) ●Não garante entrega ●Não garante ordem ●Não controla fluxo ou congestionamento ●Envio imediato
  12. 12. Violações do Modelo (necessárias para melhor desempenho) Large segment offload (LSO) – delega o envio de grandes segmentos de dados à placa de rede, aliviando o processador. TCP segmentation offload (TSO) – LSO em TCP. A placa de rede deve possuir um TCP Offload Engine or (TOE). Large Receive Offload (LRO) – placas de rede modernas acumulam pacotes recebidos em “rajada” e geram uma só interrupção para todos eles. Isso precisa ser tratado pelo driver.
  13. 13. BSD Sockets (4.2BSD, 1983) Funções Cabeçalhos sys/types.h sys/socket.h netdb.h netinet/in.h arpa/inet.h Funções de início/fim socket(2), close(2), shutdown(2) bind(2), connect(2) listen(2), accept(2) Funções de envio send(2), sendto(2), sendmsg(2), write(2) Funçoes de recepção recv(2), recvfrom(2), recvmsg(2), read(2) Funçoes auxiliares fcntl(2), ioctl(2), select(2) sendfile(2) inet(3), byteorder(3)
  14. 14. BSD Sockets (4.2BSD, 1983) Estruturas de Dados
  15. 15. Prática (baseada no código fornecido) ● Fazer os servidores TCP e UDP receberem o número da porta na linha de comando ● Fazer o cliente UDP receber o número da porta na linha de comando ● Fazer os programas operarem em modo não bloqueante. Dica: fcntl(2) ● Fazer os programas operarem com prazo para envio/recebimento. Dica: select(2) ● Fazer os programas operarem em modo duplex (um chat simples) ● Fazer os programas operarem com IPv4 e IPv6
  16. 16. Referências Stevens, W. Richard; Fenner, Bill; Rudoff, Andrew. Unix Network Programming. Addison-Wesley, 2004. Tanenbaum, Andrew. Computer Networks, 4th edition. Prentice Hall, 2003. Hall, Brian. Beej's Guide to Network Programming Using Internet Sockets. http://beej.us/guide/bgnet/ Wikipedia. Berkeley sockets. http://en.wikipedia.org/wiki/Berkeley_sockets Wikipedia. Large segment offload http://en.wikipedia.org/wiki/TCP_segmentation_offloading TcheLinux. http://www.tchelinux.org/ As pessoas que fazem o TcheLinux. http://people.tchelinux.org/

×