Download - Programação para Kernel Linux - Parte 2
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Programacao para o Kernel Linux (Parte 2)
Ivo Augusto Andrade Rocha Calado
Instituto Federal de Educacao, Ciencia e Tecnologia de Alagoas
8 de Dezembro de 2011
1 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Agenda I
1 Os protocolos TCP e DCCPTCPDCCPImplementacoes no Kernel
2 Implementacao dos CCIDsCCID-2CCID-3 e CCID-4CCID-249
3 AtividadesAdicionando um Novo CCIDAdicionando uma nova SysctlLogando os pacotes enviados
2 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Observacao sobre este material
Este material e derivado de diversos trabalhos livrementedisponıveis na Internet
3 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
TCP
TCP: O que e?
Protocolo de transporte mais difundido no mundo
Prove comunicacao unicast
Efetua controle de congestionamento e de fluxo
Protocolo confiavel: os dados perdidos na rede saoretransmitidos
4 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
TCP
TCP: Controles de congestionamento
Possui diversas variacoes do mecanismo de controle decongestionamento
Utiliza duas fases: partida lenta e prevencao decongestionamento
A versao mais conhecida e o Reno que implementa o AIMD
Porem, existem diversas outras variantes como: Tcp Cubic,Bic, NewReno, Vegas, Compound, WestWood, Africa, etc
No linux o algoritmo padrao e o Cubic enquanto que noWindows Vista e o Compound
A selecao algoritmo default de CC e realizada ou naconfiguracao do kernel ou via sysctl, porem o valor e validoem nıvel de protocolo (todos os sockets sao afetados)
5 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
DCCP
DCCP: O que e?
Protocolo de transporte
Prove comunicacao unicast
Controle de congestionamento e entrega nao confiavel
Possui como principal foco aplicacoes multimıdia
6 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
DCCP
DCCP: Controles de congestionamento
Oferece uma estrutura componentizavel para gerencia demecanismos de controle de congestionamento
Possibilita que novos algoritmos sejam “plugados” no formatode CCIDs
A selecao do algoritmo de CC se da ou via sysctl (todos ossockets sao afetados) ou por socket (apenas a transmissao eafetada)
Uma transmissao e composta por duas “half-connections”
7 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
DCCP
CCIDs: 2, 3, 4, 249
Atualmente encontram-se padronizados 3 mecanismos de controlede congestionamento no DCCP e um experimental
CCID-2 (RFC4341): baseado em janela, esquema AIMD(Additive Increase Multiplicative Decrease) e confirmacaoseletiva (Ack Vectors). Uso: jogos onlineCCID-3 (RFC4342): baseado na equacao TFRC, evitamudancas abruptas na taxa de transmissao (diminuicaosuave). Uso: fluxo de vıdeoCCID-4 (RFC5622): variante do TFRC voltado paraaplicacoes que podem adaptar o fluxo a partir da alteracao dotamanho do pacote enviado. Uso: VoIPCCID-249 (Dccp Cubic): algoritmo baseado no TCP Cubic,voltado para redes de alta velocidade
8 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
As implementacoes no Kernel
Apresentam arquiteturas bastante diferentes
TCP considera que todos os algoritmos de CC sao compostosdos estados partida lenta e prevencao decongestionamento
DCCP apresenta uma interface mais generica e, portanto,mais flexıvel para o mecanismo de controle decongestionamento
Para o registro do protocolo no sistema operacional ambos osprotocolos devem criar um instancia das structs proto,net protocol, inet protosw e pernet operations eregistra-las no SO
9 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
Implementacao do TCP
Definido em linux/net/ipv4
Apresenta tanto os componentes genericos quanto asimplementacoes dos algoritmos de CC
Cada algoritmo de CC, a excecao do Reno, e implementadocomo um modulo
Estrutura de um algoritmo e definida em include/net/tcp.h
10 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
Implementacao do TCP
s t r u c t l i s t h e a d l i s t ;u n s i g n e d l o n g f l a g s ;v o i d (∗ i n i t ) ( s t r u c t sock ∗ sk ) ;v o i d (∗ r e l e a s e ) ( s t r u c t sock ∗ sk ) ;u32 (∗ s s t h r e s h ) ( s t r u c t sock ∗ sk ) ;u32 (∗min cwnd ) ( c o n s t s t r u c t sock ∗ sk ) ;v o i d (∗ c o n g a v o i d ) ( s t r u c t sock ∗ sk , u32 ack , u32
i n f l i g h t ) ;v o i d (∗ s e t s t a t e ) ( s t r u c t sock ∗ sk , u8 n e w s t a t e ) ;v o i d (∗ cwnd event ) ( s t r u c t sock ∗ sk , enum t c p c a e v e n t
ev ) ;u32 (∗ undo cwnd ) ( s t r u c t sock ∗ sk ) ;v o i d (∗ p k t s a c k e d ) ( s t r u c t sock ∗ sk , u32 num acked , s32
r t t u s ) ;v o i d (∗ g e t i n f o ) ( s t r u c t sock ∗ sk , u32 ext , s t r u c t
s k b u f f ∗ skb ) ;
11 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
Implementacao do TCP
Como pode-se ver, a implementacao do algoritmo de CC no TCP efortemente ligada a
Mudanca de estados da conexao
Recebimento de pacote de confirmacao
Limiar de partida lenta
12 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
Implementacao do DCCP
Definido em linux/net/dccp
Apresenta uma estrutura bem definida sobre o que e o nucleodo protocolo e o que e algoritmo de controle decongestionamento
Apesar de nao ser implementado como modulo, a estrutura docontrole de congestionamento e componentizavel
13 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
Operacoes de um CCID
s t r u c t c c i d o p e r a t i o n s {v o i d (∗ c c i d h c r x p a c k e t r e c v ) ( s t r u c t sock ∗ sk ,
s t r u c t s k b u f f ∗ skb ) ;v o i d (∗ c c i d h c t x p a c k e t r e c v ) ( s t r u c t sock ∗ sk ,
s t r u c t s k b u f f ∗ skb ) ;i n t (∗ c c i d h c t x s e n d p a c k e t ) ( s t r u c t sock ∗ sk ,
s t r u c t s k b u f f ∗ skb ) ;v o i d (∗ c c i d h c t x p a c k e t s e n t ) ( s t r u c t sock ∗ sk ,
u n s i g n e d i n t l e n ) ;
// Outras f u n c o e s e} ;
14 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Implementacoes no Kernel
Um pouco mais sobre a implementacao dos CCIDs
Os CCIDs sao livres para implementar as funcionalidades quedesejarem
Antes de fazer a chamada a alguma das acoes do CCID, onucleo DCCP verifica se tal funcao e, de fato, implementada ecaso nao seja descarta a chamada
15 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
CCID-2
Funcionamento
Cria uma estrutura em lista que armazena os ultimos Acksrecebidos (nao faz uso de Ack acumulativo!)
Porque uma abordagem utilizando Ack acumulativo nao e possıvelno DCCP?
Por que o protocolo DCCP e nao confiavel!!
Os hosts trocam os vetores de confirmacao (enviadojuntamente com o pacote de dados)
16 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
CCID-2
Funcionamento
Cria uma estrutura em lista que armazena os ultimos Acksrecebidos (nao faz uso de Ack acumulativo!)
Porque uma abordagem utilizando Ack acumulativo nao e possıvelno DCCP?
Por que o protocolo DCCP e nao confiavel!!
Os hosts trocam os vetores de confirmacao (enviadojuntamente com o pacote de dados)
16 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
CCID-3 e CCID-4
CCID-3
Utiliza uma equacao para fazer o calculo da taxa de envio
Mais complexo que o CCID-2 pois necessita sincronizar otempo de envio ao inves de ser Ack-Clocked
Utiliza o conceito de intervalo de perda (1 RTT) onde em umintervalo todas as perdas sao consideradas como apenas uma
Apresenta tanto um crescimento quanto uma queda na taxade envio mais suave
Define um tamanho fixo de pacotes (1500 bytes) e em caso dediminuicao da taxa de envio altera o numero de pacotesenviados
17 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
CCID-3 e CCID-4
CCID-3 e CCID-4
Variacao do CCID-3 onde, ao inves de variar o numero depacotes enviados varia o tamanho dos pacotes
Possui taxa de transmissao limitada a 1,5 Mbps
CCID-4 ainda nao disponıvel na arvore principal do Kernel
18 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
CCID-249
Funcionamento
Implementa uma mistura entre TCP Cubic e CCID-2
“Rouba” o mecanismo de confirmacao seletiva via AckVectors do CCID-2
Utiliza a funcao de calculo de janela do Tcp Cubic
Consegue obter maior vazao que os outros CCIDs
Disponibilizacao
Nao disponıvel na arvore principal do Kernel, sendodisponibilizado apenas na arvore git mantida por GerritRenker (principal mantenedor do Dccp)
19 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
Adicionando um Novo CCID
Agora vamos criar um novo CCID
Este CCID ira simular o protocolo UDP, ou seja, sem controlealgum de taxa de envio
Para isso, vamos escolher o numero 248 para ser o CCID (naarvore oficial o Dccp Cubic ainda nao existe!)
20 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
1a etapa: Definir a constante para o CCID
Abrir o arquivo include/linux/dccp.h
Buscar o enum onde esta definido DCCPC CCID3
Adicionar uma nova constante
DCCPC CCID248 = 248 ,
21 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
2a etapa: Implementar o algoritmo
Criar um novo arquivo chamado ccid248.c emlinux/net/dccp/ccids item Adicionar a seguinteimplementacao
#i n c l u d e "../ccid.h"
s t r u c t c c i d o p e r a t i o n s c c i d 2 4 8 o p s = {. c c i d i d = DCCPC CCID248 ,. cc id name = "UDP-like"
} ;
22 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
3a etapa: Adicionar o CCID a lista de CCIDs disponıveis
Abrir o arquivo linux/net/dccp/ccid.c
No vetor ccid operations adicionar a seguinte linha no final
#i f d e f CONFIG IP DCCP CCID248&c c i d 2 4 8 o p s ,
#e n d i f
23 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
4a etapa: Adicionar a constante de CCID a lista de CCIDsque podem ser negociados
Abrir o arquivo linux/net/dccp/feat.c
Localizar a funcao dccp feat is valid sp val
Alterar o opcao DCCPF CCID para que fique da seguinteforma
c a s e DCCPF CCID :r e t u r n v a l == DCCPC CCID2 | | v a l == DCCPC CCID3 | |
v a l == DCCPC CCID248 ;
24 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
5a etapa: Adicionar as dependencias de negociacao
Ainda no arquivo linux/net/dccp/feat.c
Localize a funcao dccp feat ccid deps
Adicione antes do switch final o seguinte bloco
s t a t i c c o n s t s t r u c t c c i d d e p e n d e n c yc c i d 2 4 8 d e p e n d e n c i e s [ 2 ] [ 2 ] = {
{{ 0 , 0 , 0 , 0 }} , {{ 0 , 0 , 0 , 0 }}} ;
Adicionar ao switch final a seguinte linha
c a s e DCCPC CCID248 : r e t u r n c c i d 2 4 8 d e p e n d e n c i e s [i s l o c a l ] ;
25 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
6a etapa: Declarar operacoes do novo CCID em ccid.h
Abra o arquivo linux/net/dccp/ccid.h
Localize o seguinte trecho
#i f d e f CONFIG IP DCCP CCID3e x t e r n s t r u c t c c i d o p e r a t i o n s c c i d 3 o p s ;
#e n d i f
Apos ele, adicione o seguinte trecho
#i f d e f CONFIG IP DCCP CCID248e x t e r n s t r u c t c c i d o p e r a t i o n s c c i d 2 4 8 o p s ;
#e n d i f
26 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
7a etapa: Adicionar ao menu de configuracoes o novoCCID
Abrir arquivo linux/net/dccp/ccids/Kconfig
Adicione ao final da secao menu o seguinte trecho
c o n f i g IP DCCP CCID248b o o l "CCID -248 (UDP-like) novo CCID"
d e f b o o l n−−−he lp−−−Aqui v a i a d e s c r i c a o do novo CCID .
27 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
8a etapa: Adicionar o novo CCID a compilacao
Abrir o arquivo linux/net/dccp/ccids/Makefile
Apos a definicao do CCID-3, adicionar o seguinte trecho
dccp−y += c c i d s / c c i d 2 4 8 . o
28 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
Testando
Habilitar o novo CCID no menuconfig durante a configuracaodo kernel
Compilar o Kernel e instalar
Reiniciar a maquina virtual
Instalar o iperf com suporte a DCCP (http://139.133.210.30/~gerrit/dccp/apps/iperf/zip/
iperf-2.0.2_DCCP-patched-CBR-continuous.tar.bz2)
29 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando um Novo CCID
Testando
Executar a sysctl para alterar o CCID padrao
s y s c t l −w ne t . dccp . d e f a u l t . t x c c i d =248s y s c t l −w ne t . dccp . d e f a u l t . r x c c i d =248
Iniciar o lado servidor do iperf
i p e r f −d −s − i 1
Iniciar o lado cliente do iperf
i p e r f −d −c 1 2 7 . 0 . 0 . 1 − i 1
30 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando uma nova Sysctl
Adicionando uma nova Sysctl
sysctl e uma abordagem utilizada pelo SO para umacomunicacao entre o espaco de usuario e o espaco de nucleo
Realizado a partir de entradas em /proc
O protocolo pode disponibilizar tanto a leitura quanto aalteracao de algumas variaveis
A alteracao do valor e realizado tanto via arquivo virtual em/proc quanto via chamada de sistema syscall
31 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando uma nova Sysctl
1a etapa: Definir a variavel a ser exportada
Vamos considerar o compartilhamente de uma variavel inteirachamada “value1”
Abrir o arquivo linux/net/dccp/proto.c
Declarar uma variavel inteira chamada “value”
i n t s y s c t l d c c p v a l u e r e a d m o s t l y = 5 ;
Exportar a variavel em linux/net/dccp/dccp.h
e x t e r n i n t s y s c t l d c c p v a l u e ;
32 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando uma nova Sysctl
2a etapa: Adicionar uma entrada em ctl table
Abrir arquivo linux/net/dccp/sysctl.c
Localizar array dccp default table
Adicionar o seguinte trecho ao final do array
{. procname = "value" ,. data = &s y s c t l d c c p v a l u e ,. maxlen = s i z e o f ( s y s c t l d c c p v a l u e ) ,. mode = 0644 ,. p r o c h a n d l e r = p r o c d o i n t v e c m i n m a x ,. e x t r a 1 = &zero ,
} ,
33 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Adicionando uma nova Sysctl
Testando
Apos salvar tudo e recompilar o Kernel, realizar a seguinteoperacao
c a t / p r o c / s y s / n e t / dccp / d e f a u l t / v a l u e
Ao realizar essa operacao deve ser impresso na tela o valor 5
Um segundo teste a ser realizado e a tentativa de alterar ovalor da variavel
s y s c t l −w ne t . dccp . d e f a u l t . v a l u e =10
34 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Logando os pacotes enviados
Logando os pacotes enviados
Nesta atividade o aluno ira modificar o CCID recem criadopara que toda vez que um pacote seja recebido sera realizadoum log do pacote
Deste modo, o aluno deve implementar a funcao correta queregistre o recebimento de pacotes no lado receptor
Dica...
Analisar funcao ccid hc tx packet sent
Tempo da atividade: 10 - 15 minutos
35 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Logando os pacotes enviados
Bibliografia I
Jeremy Andrews.Linux: Documenting how patches reach the kernel.http://kerneltrap.org/node/3180, Maio 2004.
The Git Community Book.The git community book.http://book.git-scm.com/index.html, Outubro 2011.
Ariejan de Vroom.How to create and apply a patch with git.http://ariejan.net/2009/10/26/
how-to-create-and-apply-a-patch-with-git/, Outubro2009.
36 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)
Os protocolos TCP e DCCP Implementacao dos CCIDs Atividades
Logando os pacotes enviados
Bibliografia II
Wikipedia Foudation.Sco-linux controversies.http:
//en.wikipedia.org/wiki/SCO-Linux_controversies,Outubro 2011.
37 / 37 Ivo Calado IFAL
Programacao para o Kernel Linux (Parte 2)