SlideShare uma empresa Scribd logo
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
●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
●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
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.
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)
Como Funciona a Internet
G
G
G
G
Internet
(gateways)
obelix
asterix
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)
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
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)
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
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
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.
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)
BSD Sockets (4.2BSD, 1983)
Estruturas de Dados
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
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/

Mais conteúdo relacionado

PDF
Single Packet Authorization
PDF
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
ODP
O Ermitão Renasce - A vida dentro da casca.
PPTX
PDF
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
PDF
CBSoft 2013 - Descrição dos Problemas (CbE)
PDF
IX Pylestras - SmartGrid com Python
PDF
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Single Packet Authorization
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
O Ermitão Renasce - A vida dentro da casca.
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
CBSoft 2013 - Descrição dos Problemas (CbE)
IX Pylestras - SmartGrid com Python
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)

Mais procurados (20)

PDF
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
PDF
PaaS - OpenShift como plataforma pública
PDF
Recursividade em linguagem C
PDF
Programando Software Livre em C
PPTX
Acesso a área de trabalho remota
PDF
Vagrant você deveria está usando
PDF
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
PDF
Comsolid2011 Introdução Python
PDF
Exercicios 01 02 tms i
PDF
Introdução ao Node.js
PDF
A importância dos padrões na comunidade PHP
PDF
Processamento Assíncrono com PHP
PDF
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
PPTX
PDF
Trabalho sobre a linguagem Python
ODP
Python para Programadores
ODP
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
PaaS - OpenShift como plataforma pública
Recursividade em linguagem C
Programando Software Livre em C
Acesso a área de trabalho remota
Vagrant você deveria está usando
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
Comsolid2011 Introdução Python
Exercicios 01 02 tms i
Introdução ao Node.js
A importância dos padrões na comunidade PHP
Processamento Assíncrono com PHP
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
Trabalho sobre a linguagem Python
Python para Programadores
Anúncio

Destaque (20)

PDF
English Speaking Course in Lucknow India M-TEC
PDF
PPTX
Abertura do Evento Dot Net Day
PDF
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
PPT
Com funciona Dot sub?
PDF
EBERLE - MUNDIAL TIJERAS
PPT
Documentos da rede e mec
PDF
Fairmas Hotel-Report Januar 2016 – Hamburg
PDF
English dot worws level 1
PDF
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
PPT
Entstehung eines besonderen Geschäftsberichts
PPSX
Aprilia futura rst 1000 recepteur embrayage
PPTX
Tb rmfc 2014
ODP
Abismo Digital
PDF
Instructivo para inscripcion a nivel de ingles English dot Works
PPT
Dot dot-seurat
PDF
A todo mundo eu dou PSIU (Campus Party 2012)
PPTX
Google Analytics Konferenz 2016: Professioneller Prozess von Analyse über Kon...
PDF
Human Potential Index (HPI) als instrument der dynamischen Personalwirtschaft
PDF
09 GMW Workshop E Assessment
English Speaking Course in Lucknow India M-TEC
Abertura do Evento Dot Net Day
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Com funciona Dot sub?
EBERLE - MUNDIAL TIJERAS
Documentos da rede e mec
Fairmas Hotel-Report Januar 2016 – Hamburg
English dot worws level 1
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Entstehung eines besonderen Geschäftsberichts
Aprilia futura rst 1000 recepteur embrayage
Tb rmfc 2014
Abismo Digital
Instructivo para inscripcion a nivel de ingles English dot Works
Dot dot-seurat
A todo mundo eu dou PSIU (Campus Party 2012)
Google Analytics Konferenz 2016: Professioneller Prozess von Analyse über Kon...
Human Potential Index (HPI) als instrument der dynamischen Personalwirtschaft
09 GMW Workshop E Assessment
Anúncio

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

PPTX
Unix Sockets
PPTX
Socket
PDF
1089335456 paper 4 sockets em java
PDF
Training networking-tcpip
PDF
44 sockets[1]
PPT
Arquitetura TCP/IP - 02 Camadas (Rede e Transporte)
PDF
Apostilas modelo cliente servidor
PDF
Java network-sockets-etc
PDF
Cap 02.pdf
PDF
Capítulo 23 comunicação entre processos
PDF
Artigo Wireshark
PDF
Tecnologia java para sockets
ODP
Prog web 00-modelo-cliente_servidor_web
ODP
Prog web 00-modelo-cliente_servidor_web
PDF
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
PDF
36210961 curso-avancado-redes-141027091944-conversion-gate01
PPT
Sockets java
PPT
Redes 1 - Sockets em C#
PPTX
Conceito Ethernet Sniffer em Visual Studio C#
Unix Sockets
Socket
1089335456 paper 4 sockets em java
Training networking-tcpip
44 sockets[1]
Arquitetura TCP/IP - 02 Camadas (Rede e Transporte)
Apostilas modelo cliente servidor
Java network-sockets-etc
Cap 02.pdf
Capítulo 23 comunicação entre processos
Artigo Wireshark
Tecnologia java para sockets
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
36210961 curso-avancado-redes-141027091944-conversion-gate01
Sockets java
Redes 1 - Sockets em C#
Conceito Ethernet Sniffer em Visual Studio C#

Mais de Tchelinux (20)

PDF
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
PDF
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
PDF
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
PDF
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
PDF
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
PDF
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
PPTX
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
PDF
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
PDF
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
PDF
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
PDF
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
PDF
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
PDF
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
ODP
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
PDF
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
PDF
Com que ônibus eu vou? Uma gentil introdução ao Python.
PDF
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
PDF
Não deixe para testar depois o que você pode testar antes.
PDF
Desenvolvendo jogos com pygame
PDF
Essa câmera faz fotos muito boas, né?
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Com que ônibus eu vou? Uma gentil introdução ao Python.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
Não deixe para testar depois o que você pode testar antes.
Desenvolvendo jogos com pygame
Essa câmera faz fotos muito boas, né?

Último (11)

PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Utilizando code blockes por andre backes
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Design - Introdução a Gestalt e teoria das formas
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Viasol Energia Solar -Soluções para geração e economia de energia
Manejo integrado de pragas na cultura do algodão
Utilizando code blockes por andre backes
Eng. Software - pontos essenciais para o início
Design - Introdução a Gestalt e teoria das formas
Arquitetura de computadores - Memórias Secundárias
Tipos de servidor em redes de computador.pptx
Proposta de Implementação de uma Rede de Computador Cabeada.pptx

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

  • 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. ●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. ●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. 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. 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. Como Funciona a Internet G G G G Internet (gateways) obelix asterix
  • 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. 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. 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. 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. 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. 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. 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. BSD Sockets (4.2BSD, 1983) Estruturas de Dados
  • 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. 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/