SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
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

Mais procurados

Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso códigoRuby 3 e Análise estática - O que esperar e o que significa para o nosso código
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso códigoWeverton Timoteo
 
PaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaPaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaGetup Cloud
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Acesso a área de trabalho remota
Acesso a área de trabalho remotaAcesso a área de trabalho remota
Acesso a área de trabalho remotaRafael Requião
 
Vagrant você deveria está usando
Vagrant   você deveria está usandoVagrant   você deveria está usando
Vagrant você deveria está usandoHudson Brendon
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.jsEdgar Eler
 
A importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPA importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPklaussilveira
 
Processamento Assíncrono com PHP
Processamento Assíncrono com PHPProcessamento Assíncrono com PHP
Processamento Assíncrono com PHPFernando Fabricio
 
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...Weverton Timoteo
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonRicardo Zalla
 

Mais procurados (20)

Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso códigoRuby 3 e Análise estática - O que esperar e o que significa para o nosso código
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
PaaS - OpenShift como plataforma públicaPaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma pública
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Gisele
GiseleGisele
Gisele
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Acesso a área de trabalho remota
Acesso a área de trabalho remotaAcesso a área de trabalho remota
Acesso a área de trabalho remota
 
Vagrant você deveria está usando
Vagrant   você deveria está usandoVagrant   você deveria está usando
Vagrant você deveria está usando
 
Parte1c
Parte1cParte1c
Parte1c
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Exercicios 01 02 tms i
Exercicios 01 02 tms iExercicios 01 02 tms i
Exercicios 01 02 tms i
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.js
 
A importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPA importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHP
 
Processamento Assíncrono com PHP
Processamento Assíncrono com PHPProcessamento Assíncrono com PHP
Processamento Assíncrono com PHP
 
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
Mrtg
MrtgMrtg
Mrtg
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
Python 3k
Python 3kPython 3k
Python 3k
 

Destaque

English Speaking Course in Lucknow India M-TEC
English Speaking Course in Lucknow India M-TECEnglish Speaking Course in Lucknow India M-TEC
English Speaking Course in Lucknow India M-TECM-TEC Lucknow
 
Abertura do Evento Dot Net Day
Abertura do Evento Dot Net DayAbertura do Evento Dot Net Day
Abertura do Evento Dot Net DayLuciano Palma
 
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803CARGAVIRIA
 
Com funciona Dot sub?
Com funciona Dot sub?Com funciona Dot sub?
Com funciona Dot sub?Daniel
 
English dot worws level 1
English dot worws level 1English dot worws level 1
English dot worws level 1mafesita2
 
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...Tchelinux
 
Entstehung eines besonderen Geschäftsberichts
Entstehung eines besonderen GeschäftsberichtsEntstehung eines besonderen Geschäftsberichts
Entstehung eines besonderen GeschäftsberichtsPatrick Kiss
 
Aprilia futura rst 1000 recepteur embrayage
Aprilia futura rst 1000 recepteur embrayageAprilia futura rst 1000 recepteur embrayage
Aprilia futura rst 1000 recepteur embrayagesnakemoto
 
Instructivo para inscripcion a nivel de ingles English dot Works
Instructivo para inscripcion a nivel de ingles English dot WorksInstructivo para inscripcion a nivel de ingles English dot Works
Instructivo para inscripcion a nivel de ingles English dot Worksguiboro
 
A todo mundo eu dou PSIU (Campus Party 2012)
A todo mundo eu dou PSIU (Campus Party 2012)A todo mundo eu dou PSIU (Campus Party 2012)
A todo mundo eu dou PSIU (Campus Party 2012)Thiago Figueredo Cardoso
 
Google Analytics Konferenz 2016: Professioneller Prozess von Analyse über Kon...
Google Analytics Konferenz 2016: Professioneller Prozess von Analyse über Kon...Google Analytics Konferenz 2016: Professioneller Prozess von Analyse über Kon...
Google Analytics Konferenz 2016: Professioneller Prozess von Analyse über Kon...e-dialog GmbH
 
Human Potential Index (HPI) als instrument der dynamischen Personalwirtschaft
Human Potential Index (HPI) als instrument der dynamischen PersonalwirtschaftHuman Potential Index (HPI) als instrument der dynamischen Personalwirtschaft
Human Potential Index (HPI) als instrument der dynamischen PersonalwirtschaftReinhard Austrup & Associates
 
09 GMW Workshop E Assessment
09 GMW Workshop E Assessment09 GMW Workshop E Assessment
09 GMW Workshop E AssessmentCornelia Ruedel
 

Destaque (20)

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

Semelhante a Workshop C Berkeley Sockets

Projeto Terminais Leves Linux
Projeto Terminais Leves LinuxProjeto Terminais Leves Linux
Projeto Terminais Leves LinuxMarco Neves
 
Conceitos Iniciais LP I
Conceitos Iniciais LP IConceitos Iniciais LP I
Conceitos Iniciais LP IPatrícia Melo
 
Linguagem c wellington telles - aula 01
Linguagem c   wellington telles - aula 01Linguagem c   wellington telles - aula 01
Linguagem c wellington telles - aula 01profwtelles
 
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Tchelinux
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteTchelinux
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCEmbarcados
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcadaRodrigo Almeida
 
Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?
Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?
Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?Embarcados
 
Ferramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei PollonFerramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei PollonTchelinux
 
Sistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 3 - Hardware e SoftwareSistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 3 - Hardware e SoftwareCharles Fortes
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Intel Software Brasil
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Luciano Palma
 

Semelhante a Workshop C Berkeley Sockets (20)

Projeto Terminais Leves Linux
Projeto Terminais Leves LinuxProjeto Terminais Leves Linux
Projeto Terminais Leves Linux
 
Conceitos Iniciais LP I
Conceitos Iniciais LP IConceitos Iniciais LP I
Conceitos Iniciais LP I
 
Linguagem c wellington telles - aula 01
Linguagem c   wellington telles - aula 01Linguagem c   wellington telles - aula 01
Linguagem c wellington telles - aula 01
 
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
 
Intro linux
Intro linuxIntro linux
Intro linux
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoC
 
Curso redes seed
Curso redes seedCurso redes seed
Curso redes seed
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcada
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?
Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?
Webinar: Por que dominar sistema operacional Linux deveria ser a sua prioridade?
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
Ferramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei PollonFerramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei Pollon
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
Sistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 3 - Hardware e SoftwareSistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 3 - Hardware e Software
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
Glossário de Termos Técnicos em Redes de Computadores
Glossário de Termos Técnicos em Redes de ComputadoresGlossário de Termos Técnicos em Redes de Computadores
Glossário de Termos Técnicos em Redes de Computadores
 

Mais de Tchelinux

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

Mais de Tchelinux (20)

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

Workshop C Berkeley Sockets

  • 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/