• Nenhum resultado encontrado

Exploração da Implementação Actual de IPv6 no Kernel do Linux

N/A
N/A
Protected

Academic year: 2021

Share "Exploração da Implementação Actual de IPv6 no Kernel do Linux"

Copied!
90
0
0

Texto

(1)INSTITUTO SUPERIOR DE ENGENHARIA DE LISBOA Departamento de Engenharia de Electrónica e Telecomunicações e de Computadores ISEL. Exploração da implementação actual de IPv6 no kernel do Linux Márcio Moeda (Licenciado). Trabalho de projecto realizado para obtenção do grau de Mestre em Engenharia Informática e de Computadores. Orientador: Professor adjunto Pedro Ribeiro, ISEL Júri: Presidente: Professor adjunto Vítor Almeida, ISEL Vogais: Professor adjunto João Ascenso, ISEL. Março de 2011.

(2) Agradecimentos. Em primeiro lugar agradeço o meu orientador Pedro Ribeiro, pelo acompanhamento, auxílio e disponibilidade que mostrou durante todo este período.. Agradeço o apoio de toda a minha família e dos meus amigos, e em especial dos meus pais pelo incondicional apoio e permanente incentivo que tenho recebido ao longo dos anos.. Agradeço a todas as pessoas que contribuíram para a concretização desta dissertação.. Finalmente, um agradecimento especial à Sheila Maritza T. P. Monteiro pelo amor, apoio, incentivo e pela enorme ajuda que me deu ao ajudar na correcção do trabalho.. A todos muito Obrigado.. Exploração da Implementação actual de IPv6 no Kernel do Linux. ii.

(3) Resumo. A presente dissertação visa retratar a exploração do suporte do protocolo Internet versão seis (IPv6) no kernel do Linux, conjuntamente com a análise detalhada do estado da implementação dos diferentes aspectos em que se baseia o protocolo. O estudo incide na experimentação do funcionamento em geral do stack, a identificação de inconsistências deste em relação aos RFC’s1 respectivos, bem como a simulação laboratorial de cenários que reproduzam casos de utilização de cada uma das facilidades analisadas. O objectivo desta dissertação não é explicar o funcionamento do novo protocolo IPv6, mas antes, centrar-se essencialmente na exploração do IPv6 no kernel do Linux. Não é um documento para leigos em IPv6, no entanto, optou-se por desenvolver uma parte inicial onde é abordado o essencial do protocolo: a sua evolução até à aprovação e a sua especificação. Com base no estudo realizado, explora-se o suporte do IPv6 no Kernel do Linux, fazendo uma análise detalhada do estado de implementação dos diferentes aspectos em que se baseia o protocolo. Bem como a realização de testes de conformidade IPv6 em relação aos RFC’s.. 1. RFC é um acrónimo para o inglês Request for Comments, é um documento que descreve os padrões dos protocolos propostos para a Internet antes de serem considerados um standard. Exploração da Implementação actual de IPv6 no Kernel do Linux. iii.

(4) Abstract. The aim of this dissertation is to describe the support exploration protocol of Internet version six (IPv6) in the Linux kernel in conjunction with a detailed analysis of the implementation state of the different aspects on which the protocol is based.. This study focuses on the general working experimentation of stack, the identification of its inconsistencies in relation to the corresponding RFCs as well as laboratory simulation of scenarios, which reproduce instances of use of each of the facilities analyzed.. The goal of this dissertation is not to explain how the new IPv6 protocol works; rather, it focuses primarily on the exploration of Linux’ IPv6 kernel. This is not a document for people who are not familiar with IPv6. However, we opted to develop an initial part in which we address the fundamentals of the protocol namely, its evolution and approval and its specification.. Based on this study, we explore the support of IPv6 in Linux’ Kernel through a detailed analysis of the implementation state of the different aspects on which this protocol is based. Also, conformity tests were conducted in relation to RFC’s.. Exploração da Implementação actual de IPv6 no Kernel do Linux. iv.

(5) Acrónimos. TN. Nó que realiza o teste. NUT. Nó que é testado. NA. Neighbor Advertisement. NS. Neighbor Solicitation. ICMPv6. Internet Control Message Protocol for the Internet Protocol Version 6. PDU. Protocol Data Unit. USAGI. UniverSAL playGround for IPv6. SIP. Simple Internet Protocol. PIP. ―P‖ Internet Protocol. SIPP. The Simple Internet Protocol Plus. IPAE. IP Address Encapsulation. TUBA. TCP and UDP with Bigger Addresses. CATNIP. Common Architecture for the Internet. IPng. IP Next Generation Protocol. IESG. Internet Engineering Steering Group. IANA. Internet Assigned Numbers Authority. ICANN. Internet Corporation for Assigned Names and Numbers. ARPANET. Advanced Research Projects Agency Network. QoS. Quality of Service. CIDR. Classless InterDomain Routing. NAT. Network Address Translation. Exploração da Implementação actual de IPv6 no Kernel do Linux. v.

(6) Índice. Agradecimentos ................................................................................................................. ii Resumo ............................................................................................................................ iii Abstract ............................................................................................................................ iv Acrónimos.......................................................................................................................... v Índice ................................................................................................................................ vi Índice de Figuras ............................................................................................................... x Índice de tabelas............................................................................................................... xi Capítulo I .........................................................................................................................13 Considerações Gerais .....................................................................................................13 1.1.. Introdução .........................................................................................................13. 1.2.. Pergunta de partida ou problema da investigação .............................................15. 1.3.. Objectivos ..........................................................................................................16. 1.4.. Síntese dos capítulos ........................................................................................17. Capítulo II ........................................................................................................................18 IPv6 .................................................................................................................................18 1.1.. Considerações Gerais .......................................................................................18. 1.2.. Evolução do Protocolo Internet (IPv6)................................................................19. 1.3.. Porquê o IPv6? ..................................................................................................22. 1.4.. Limitações do IPv4 ............................................................................................23. 1.5.. Especificação do IPv6 .......................................................................................26. Simplificação do cabeçalho ......................................................................................28 Capítulo III .......................................................................................................................31 Ferramenta de conformidade da especificação IPv6 .......................................................31 1.1.. Considerações Gerais .......................................................................................31. 1.2.. Procedimento comum de limpeza dos testes .....................................................33. 1.3.. Definição da estrutura do pacote .......................................................................33. 1.4.. Exemplos de Funções Disponíveis na API ........................................................34. Exploração da Implementação actual de IPv6 no Kernel do Linux. vi.

(7) Capítulo IV .......................................................................................................................36 Descrição dos testes IPv6 realizados ..............................................................................36 1.. Considerações Gerais ...........................................................................................36. 2.. Testes em relação à especificação base do IPv6 ..................................................37 2.1.. 2.1.1.. Objectivo .................................................................................................37. 2.1.2.. Corpo do Teste .......................................................................................37. 2.1.3.. Resultado esperado do Teste .................................................................40. 2.2.. Teste ao campo Traffic Class .........................................................................40. 2.2.1.. Objectivo .................................................................................................41. 2.2.2.. Corpo do Teste .......................................................................................41. 2.2.3.. Resultado esperado do Teste .................................................................42. 2.3.. Teste ao campo Flow Label ...........................................................................42. 2.3.1.. Objectivo .................................................................................................43. 2.3.2.. Corpo do Teste .......................................................................................43. 2.3.3.. Resultado do Teste .................................................................................44. 2.4.. Teste ao campo Payload Length ....................................................................44. 2.4.1.. Objectivo .................................................................................................44. 2.4.2.. Corpo do Teste .......................................................................................44. 2.4.3.. Resultado esperado do Teste .................................................................46. 2.5.. Teste campo Next Header irreconhecível.......................................................46. 2.5.1.. Objectivo .................................................................................................47. 2.5.2.. Corpo do Teste .......................................................................................47. 2.5.3.. Resultado esperado do Teste .................................................................49. 2.6.. 3.. Teste ao Campo Versão (Version Field).........................................................37. Teste campo Hop Limit igual a zero ...............................................................49. 2.6.1.. Objectivo .................................................................................................49. 2.6.2.. Corpo do Teste .......................................................................................49. 2.6.3.. Resultado esperado do Teste .................................................................51. Testes referentes ao processamento das Opções e Cabeçalhos de Extensões....51 3.1.. Pacote Echo Request usado nos testes .........................................................53. 3.2.. Teste ao campo Next Header do cabeçalho de Extensão ..............................54. 3.2.1.. Objectivo .................................................................................................54. 3.2.2.. Corpo do teste ........................................................................................54. Exploração da Implementação actual de IPv6 no Kernel do Linux. vii.

(8) 3.2.3.. Resultado esperado do teste ..................................................................55. 3.3. Teste à ordem do cabeçalho de extensão Hop-by-Hop num pacote com mais de um cabeçalho extensão .......................................................................................56 3.3.1.. Objectivo .................................................................................................57. 3.3.2.. Corpo do teste ........................................................................................57. 3.3.3.. Resultado esperado do teste ..................................................................59. 3.4.. Teste ao cabeçalho de extensão Hop-by-Hop................................................59. 3.5.. Teste ao campo Opção Pad1/PadN do cabeçalho de extensão Hop-by-Hop 62. 3.5.1.. Objectivo .............................................................................................63. 3.5.2.. Corpo do teste .....................................................................................63. 3.5.3.. Resultado esperado do teste ...............................................................65. 3.6.. 4.. Teste à codificação dos dois bits de maior ordem do indicador Option Type 66. 3.6.1.. Objectivo .............................................................................................67. 3.6.2.. Corpo do Teste ....................................................................................67. 3.6.3.. Resultado esperado do teste ...............................................................69. Testes referentes à fragmentação no IPv6 ............................................................69 4.1.. Fragmentos de pacote usados nos testes ......................................................74. 4.2.. Teste à reconstituição de fragmentos (ordem normal/ ordem inversa) ...........75. 4.2.1.. Objectivo .................................................................................................75. 4.2.2.. Corpo do teste ........................................................................................75. 4.2.3.. Resultado esperado do teste ..................................................................77. 4.3.. Teste à reconstituição de fragmentos (Payload size = 65.536 bytes) .............77. 4.3.1.. Objectivo .................................................................................................77. 4.3.2.. Corpo do teste ........................................................................................77. 4.3.3.. Resultado esperado do teste ..................................................................78. 4.4.. Teste à reconstituição de fragmentos quando é excedido o tempo (1st only) .78. 4.4.1.. Objectivo .................................................................................................79. 4.4.2.. Corpo do teste ........................................................................................79. 4.4.3.. Resultado esperado do teste ..................................................................79. Capítulo V ........................................................................................................................80 Resultado dos Testes Realizados ....................................................................................80 1.1.. Considerações Gerais .......................................................................................80. Exploração da Implementação actual de IPv6 no Kernel do Linux. viii.

(9) 1.2.. Resultado dos testes .........................................................................................80. 1.3.. Análise dos resultados .......................................................................................82. 1.4.. Comparação entre sistemas operativos .............................................................85. Capítulo VI .......................................................................................................................87 Conclusão........................................................................................................................87 1.1.. Considerações Gerais .......................................................................................87. 1.2.. Verificação das hipóteses teóricas e práticas ....................................................87. 1.3.. Limitações da Investigação................................................................................88. 1.4.. Investigações futuras .........................................................................................88. Bibliografia .......................................................................................................................89. Exploração da Implementação actual de IPv6 no Kernel do Linux. ix.

(10) Índice de Figuras. Figura 1 - Linux Kernel 2.1.8. ...........................................................................................15 Figura 2 - Crescimento da internet ...................................................................................24 Figura 3 - Cabeçalho IPv4. ..............................................................................................28 Figura 4 - Cabeçalho IPv6. ..............................................................................................28 Figura 5 - Programa de execução Automática .................................................................33 Figura 6 - Cabeçalho de Extensão ...................................................................................52 Figura 7 - Cabeçalho Hop-by-Hop Option ........................................................................59 Figura 8 - Captura do Cabeçalho Hop-by-Hop Option......................................................59 Figura 9 - Formato do campo opções. .............................................................................61 Figura 10 - Valor do tipo de opção Pad1 de um pacote IPv6 ...........................................62 Figura 11 - PadN Option. .................................................................................................62 Figura 12 - Cabeçalho de Extensão Fragmentation .........................................................70 Figura 13 - Fragmentação de pacotes. ............................................................................71 Figura 14 - Pacote original. ..............................................................................................71 Figura 15 - Pacotes fragmentados. ..................................................................................72. Exploração da Implementação actual de IPv6 no Kernel do Linux. x.

(11) Índice de tabelas. Tabela 1 - Script de teste disponível ................................................................................32 Tabela 2 - Script Status Code ..........................................................................................34 Tabela 3 - Funções disponíveis na API ............................................................................34 Tabela 4 - Exemplo vSend ...............................................................................................35 Tabela 5 - Exemplo vRec .................................................................................................35 Tabela 6 - Funções do script IH_BadIPv6Ver.seq............................................................38 Tabela 7 - Pacotes gerados pelo script IH_BadIPv6Ver.seq ............................................39 Tabela 8 - Acções executadas no teste ao campo Versão ...............................................39 Tabela 9 - Função do script TC_NonZeroToHost.seq ......................................................41 Tabela 10 - Acções executadas no teste ao campo Traffic Class ....................................42 Tabela 11 - Função do script FL_NonZeroToHost.seq.....................................................43 Tabela 12 - Acções executadas no teste ao campo Flow Label .......................................44 Tabela 13 - Função do script PL_OddToHost.seq ...........................................................45 Tabela 14 - Pacote gerado pelo script PL_OddToHost.seq .............................................45 Tabela 15 - Acções executadas no teste ao Campo Payload Length...............................46 Tabela 16 - Alguns valores possíveis que o campo Next Header pode assumir ..............47 Tabela 17- Função do script IH_UnrecognizedNextHeader.seq .......................................48 Tabela 18 - Pacote gerado pelo script IH_UnrecognizedNextHeader.seq ........................48 Tabela 19 - Acções executadas no teste ao campo Next Header ....................................49 Tabela 20 - Função do script HL_ZeroToHost.seq ...........................................................50 Tabela 21 - Acções executadas no teste ao campo Hop Limit .........................................50 Tabela 22 - Cabeçalho de Extensão ................................................................................52 Tabela 23 - Pacote Echo Request usado nos testes ao Cabeçalho de extensão .............53 Tabela 24- Função do script EH_UnrecognizedNextHeader.seq .....................................54 Tabela 25 - Pacote gerado pelo script EH_UnrecognizedNextHeader.seq ......................55. Exploração da Implementação actual de IPv6 no Kernel do Linux. xi.

(12) Tabela 26 - Acções executadas no teste ao campo Next Header do cabeçalho de extensão ..........................................................................................................................55 Tabela 27 - Ordem dos Cabeçalhos de Extensão ............................................................56 Tabela 28 - Função do script EH_HBHOptAfterDstOpt.seq .............................................57 Tabela 29 - Pacote gerado pelo script EH_HBHOptAfterDstOpt.seq ...............................58 Tabela 30 - Acções executadas no teste à ordem do cabeçalho de extensão Hop-by-Hop ........................................................................................................................................58 Tabela 31 - Função do script EH_HBHOptAfterDstOpt.seq .............................................63 Tabela 32 - Pacote gerado pelo script HH_Pad1.seq e HH_PadN.seq ............................64 Tabela 33 - Acções executadas no teste ao campo Opção Pad1/PadN ..........................65 Tabela 34 - Identificadores Option Type ..........................................................................66 Tabela 35 - Terceiro bit mais significativo do Option Type ...............................................66 Tabela 36 - Primitivas usadas no script HH_Type.seq .....................................................68 Tabela 37 - Pacotes gerados pelo script HH_Type.seq ...................................................68 Tabela 38 - Bit M do cabeçalho de extensão Fragment ...................................................70 Tabela 39 - Fragmentos de um Pacote Echo Request usado nos testes à fragmentação74 Tabela 40 - Primitivas usadas para gerar fragmentos de um pacote................................76 Tabela 41 - Acções executadas no teste ao campo Opção Pad1/PadN ..........................78 Tabela 42- Acções executadas no teste à reconstituição de fragmentos .........................79 Tabela 43 - Resultado dos Testes de Conformidade IPv6 realizados ..............................81 Tabela 44 - Teste de Conformidade IPv6 à distribuição Ubuntu e FreeBSD ....................85. Exploração da Implementação actual de IPv6 no Kernel do Linux. xii.

(13) Capítulo I Considerações Gerais. 1.1.. Introdução. A Internet, que na sociedade actual, assume um papel preponderante, surgiu da necessidade de ligar computadores de forma a permitir e facilitar a partilha da informação. O protocolo Internet (IP) é o responsável pelo transporte de dados na internet. Existem duas variantes deste protocolo: IPv4 e IPv6. Desde que a primeira versão do protocolo IP (IPv4) foi desenvolvida, o poder de processamento das máquinas cresceu muito. Com o crescimento rápido da Internet, esta tecnologia (IPv4) tem-se esgotado e muitos esforços têm sido feitos para a sua evolução. Neste cenário é premente a necessidade de serem criadas alternativas para a solução de problemas que começaram a surgir. A escassez de endereçamento IP para alguns continentes, a necessidade de tratamento diferenciado aos fluxos de tráfego de serviços em tempo real e aspectos ligados à segurança, fizeram com que os órgãos internacionais ligados a essas matérias e os responsáveis pela elaboração das especificações do protocolo IPv4 tivessem as suas atenções voltadas para um novo estudo. Em 1993, o IESG2 (Internet Engineering Steering Group) criou um grupo de trabalho para uma nova versão do protocolo IP, o IPngWG (IP Next Generation Working Group), com base em alguns objectivos que deveriam ser alcançados.. 2. O IESG é responsável pela gestão técnica das actividades IETF. http://www.ietf.org/iesg/. Exploração da Implementação actual de IPv6 no Kernel do Linux. 13.

(14) Capítulo I – Considerações Gerias. O grupo de trabalho seleccionou três protocolos para a camada de rede da arquitectura TCP/IP. O primeiro designado de IPAE (IP Address Encapsulation), o segundo designado de SIP (Simple Internet Protocol) e o terceiro designado de PIP (“P” Internet Protocol). A combinação de aspectos positivos dos três protocolos deu origem a um novo protocolo designado de SIPP (Simple Internet Protocol Plus). O protocolo indicado pelo grupo foi o SIPP3 (Simple Internet Protocol Plus), por ser o mais próximo do IPv4, e por ter um plano de transição melhor. O protocolo IPv6 é uma nova versão do protocolo IP. A base do IPv6 é o IPv4, isto é, foi criado sobre uma plataforma comprovadamente eficaz, o que é fundamental tanto para a transição entre a versão 4 e a 6, quanto para a excelência do IPv6. O IPv6 foi concebido numa lógica de estabilidade do sistema, assim sendo, pretendeu-se que a transição se efectuasse de forma suave e eficaz. Este factor de transição foi tido como um factor muito importante na altura da sua concepção. Todavia, a transição para o IPv6 não ocorrerá de forma rápida e imediata, este cenário mais não é que uma estratégia da nova versão do protocolo, onde se pretende uma coexistência das duas versões por um período de tempo considerável. Durante os próximos anos, irão ocorrer duas etapas distintas, uma primeira em que existirão pequenas redes IPv6 no universo IPv4 (situação actual) e, seguidamente, o contrário, ou seja, quando o protocolo IPv6 estiver generalizado irão prevalecer pequenas redes IPv4 no universo IPv6.. 3. Simple Internet Protocol Plus (SIPP) http://www.faqs.org/rfcs/rfc1710.html. Exploração da Implementação actual de IPv6 no Kernel do Linux. 14.

(15) Capítulo I – Considerações Gerias. 1.2. Pergunta de partida ou problema da investigação O primeiro código relacionado ao IPv6 foi adicionado ao kernel do Linux na versão 2.1.8 por Pedro Roque da Faculdade de Ciências de Universidade de Lisboa, ainda com muitas limitações4 de implementação.. Figura 1 - Linux Kernel 2.1.8.. O suporte ao IPv6, com a versão 2.2.x, passou a ser incluído no código fonte do kernel e já ostentava maior estabilidade em relação às versões anteriores, entretanto ainda não vinha activado por defeito. Actualmente, a maioria das distribuições Linux vem com o suporte ao IPv6 activado e com algumas funcionalidades disponíveis, possibilitando a utilização das principais novidades do IPv6. A universalidade do IPv6 leva a um grande número de implementações. O IPv4, contrariamente, começou com um pequeno grupo fechado, a interoperabilidade tem sido sempre considerada como um elemento essencial para a comunidade da Internet. Grande número de implementações de funcionalidades do IPv6 no kernel do Linux e de outros sistemas operativos não acompanhou os ―Drafts‖ ou os RFC’s recém-lançados. A ausência de manutenção fez com que algumas funcionalidades passassem a estar desactualizadas. Para atenuação e/ou eliminação dessas falhas, foi lançado um projecto designado por USAGI5 (UniverSAL playGround for IPv6) que trabalha em parceria com outros projectos tais como WIDE Project, KAME Project e TAHI Project.. 4. Retirado do documento do Peter Bieringer: http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO0.html 5 O projecto USAGI pode ser consultado no seguinte link: http://www.linux-ipv6.org/ Exploração da Implementação actual de IPv6 no Kernel do Linux. 15.

(16) Capítulo I – Considerações Gerias. Estes projectos têm como objectivo primordial o desenvolvimento do IPv6 principalmente para sistemas operativos Linux, isto é, visam melhorar o IPv6 no ambiente Linux e implementar a Internet IPv6 no mundo. Presentemente, conseguiram-se alcançar muitas melhorias no kernel, bibliotecas e aplicativos. O resultado desse trabalho foi integrado no kernel 2.6.. 1.3. Objectivos Para a elaboração desta dissertação foram estabelecidos três objectivos gerais, sobre os quais se definem com maior especificidade os objectivos concretos, de acordo com a evolução verificada. Existem objectivos ao nível do trabalho prático, sendo estes mais imediatos, uma vez que, se prendem com a exploração do suporte de IPv6 no Kernel do Linux, com a análise detalhada do estado de implementação dos diferentes aspectos em que se baseia o protocolo e outros de índole mais teórica, visto que se pretende tirar conclusões sobre o estudo/análise anteriormente referido. O primeiro objectivo é o estudo das características e a arquitectura do protocolo IPv6. Apresenta-se a nova versão do protocolo IP, o IPv6, descreve-se a sua evolução até a aprovação, e, ainda, detalhadamente a sua especificação. O segundo objectivo, consiste na exploração do suporte de IPv6 no Kernel do Linux, com a análise detalhada do estado de implementação dos diferentes aspectos em que se baseia o protocolo. Serão objectivos a experimentação do funcionamento em geral do stack, a identificação de inconsistências deste em relação aos RFC’s respectivos bem como a simulação laboratorial de cenários que reproduzam casos de utilização de cada uma das facilidades analisadas. O terceiro, comparação entre o suporte de IPv6 no Kernel de várias distribuições Linux e outros sistemas operativos. O quarto, considerações finais sobre o tema.. Exploração da Implementação actual de IPv6 no Kernel do Linux. 16.

(17) Capítulo I – Considerações Gerias. 1.4. Síntese dos capítulos Esta dissertação é composta por seis (6) capítulos. Neste primeiro capítulo faz-se uma introdução, na qual é referido o enquadramento do trabalho, bem como a referência à organização da dissertação. A este capítulo introdutório, segue-se, no segundo capítulo, uma análise detalhada do estado de implementação dos diferentes aspectos em que se baseia o protocolo IPv6 no Kernel do Linux. No terceiro capítulo, faz-se uma descrição sobre a ferramenta de testes utilizada. No quarto capítulo, realizam-se os testes de conformidade IPv6 em relação aos RFC´s, testes esses que se incidem sobre a especificação base do IPv6, definidos no RFC 2460. No quinto capítulo, faz-se a análise dos resultados obtidos dos testes realizados. No sexto capítulo, faz-se as conclusões e recomendações.. Exploração da Implementação actual de IPv6 no Kernel do Linux. 17.

(18) Capítulo II IPv6. 1.1.. Considerações Gerais. A internet é vista como uma tecnologia relativamente nova, embora os protocolos e tecnologias que a fazem funcionar tenham sido desenvolvidos entre 1970 e 1980, actualmente a maioria das redes públicas e privadas usam o IPv4. O protocolo Internet (IP) corresponde à linguagem comum da Internet, sendo usada por todos os dispositivos que se encontram ligados à Internet. A versão actual do protocolo Internet, versão 4 (designado por IPv4) tem várias lacunas que dificultam, e em alguns casos apresentam barreiras para o desenvolvimento da Internet. A revolução trazida pelo IPv6 vem remover essas barreiras e proporcionar um ambiente rico em recursos para o futuro da rede Global. O protocolo IP versão 6 (o 6 corresponde ao número da versão em causa) designado de IPv6 constitui a nova geração do protocolo base da Internet. Foi recomendada pela Área de Administração da IPng da Internet Engineering Task Force, na reunião do IETF em Toronto 25 de Julho de 1994 no RFC 17526. A recomendação foi aprovada pelo Internet Engineering Steering Group, foi feita uma proposta de norma (Proposed Standard7) em 17 de Novembro de 1994. Foi projectado para funcionar bem em redes de alto desempenho (por exemplo, Gigabit Ethernet, ATM, etc.).. 6. 7. The Recommendation for the IP Next Generation Protocol http://www.faqs.org/rfcs/rfc1752.html Proposed Standard http://playground.sun.com/ipv6/doc/ipng-recomm-proposed-standard.txt. Exploração da Implementação actual de IPv6 no Kernel do Linux. 18.

(19) Capítulo II – IPv6. 1.2.. Evolução do Protocolo Internet (IPv6). A história em torno do IPv6 começou no início dos anos noventa, quando as projecções indicavam que o espaço de endereçamento da Internet (endereço IPv4) tornava um recurso cada vez mais limitado. Esta situação desafiou a comunidade da Internet a procurar novas soluções. O Internet Engineering Task Force (IETF) iniciou o esforço para escolher um sucessor para o IPv4. Houve uma conjugação de esforços de vários grupos de trabalho, com vista à exploração de possíveis soluções para as limitações de endereçamento do IPv4 e também para fornecer funcionalidades adicionais. Deste esforço conjunto e também da evolução de diferentes propostas da Internet Engineering Task Force (IETF) surgiu uma nova geração do protocolo IP, designado de IP the Next Generation8, o seu nome original foi logo substituído por IP versão 6, que é agora o nome definitivo. Os principais arquitectos do novo protocolo foram Steven Deering e Robert Hinden9. Cronologicamente a evolução da nova geração do protocolo IP (IPng) foi a seguinte segundo o RFC 1752: [1] 1990 - No encontro IETF de Vancouver, Frank Solensky, Phill Gross e Sue Hares afirmaram que à taxa de atribuição do espaço de endereçamento IPv4, às classes do tipo B esgotariam por volta de Março de 1994. A solução seria atribuir vários endereços classe C em vez dos endereços classe B, o que traria outro problema aumentando o tamanho das tabelas de Routing que cresciam a um ritmo inquietante. Na incerteza de escolher entre aceitar ou limitar a taxa de crescimento da internet, ou a interrupção da internet alterando-a para novas técnicas ou tecnologias foi criado um novo grupo de trabalho (ROAD)10, Cuja finalidade primordial era dirimir as duvidas existentes 1991 - A IETF forma o grupo de trabalho Routing and Addressing (ROAD) no encontro de Santa Fé com o objectivo de encontrar uma solução para a exaustão do espaço de endereçamento IPv4. 1992 - A Internet Association Board (IAB) apresenta o documento IP Version 7 paralelamente aos esforços do grupo de trabalho ROAD, em que recomenda à IETF a preparação de um plano detalhado para o sucessor do protocolo IP. A IETF rejeita esta sugestão e apresenta pedido de propostas recomendadas pelo grupo ROAD. Como resposta a este pedido surgiram algumas propostas:. 8. The Recommendation for the IP Next Generation Protocol http://tools.ietf.org/html/rfc1752 Grupo de trabalho IPv6 http://playground.sun.com/ipv6/ 10 IESG Deliberations on Routing and Addressing http://www.ietf.org/rfc/rfc1380.txt 9. Exploração da Implementação actual de IPv6 no Kernel do Linux. 19.

(20) Capítulo II – IPv6. . CNAT. . IP Encaps. . Nimrod. . Simple CLNP. 1992 (finais) – Surgem mais três propostas: . The P Internet Protocol (PIP). . The Simple Internet Protocol (SIP). . TP/IX. Em Novembro (1992), no seio da IETF, decorreu uma sessão denominada Selection Criteria BOF com o objectivo de obter consenso em relação ao critério a aplicar na escolha do sucessor do protocolo IPv4. Dos dois documentos preparatórios em discussão e dos pontos de vista expressos na reunião saiu um novo documento contendo os critérios de selecção tidos como consensuais. Dispondo da sugestão do Internet Engineering Steering Group (IESG) em relação ao critério técnico a adoptar na escolha do próximo protocolo IP delineada no RFC 138011 e dos resultados da discussão dentro do próprio IETF anteriormente referida, e o IETF considerou necessário um debate alargado sobre este tópico e emitiu um ―call for white paper‖. [2] Em resposta a esta solicitação foram recebidos vinte e três artigos contendo os pontos de vista dos sectores industrial, tecnológico e comercial. 1993 - Phil Gross (IESG) apresenta um memorando intitulado "A Direction for IPng" onde anuncia a criação de uma área temporária para o IPng. CLNP e IP Encaps evoluem, dando origem respectivamente a TCP and UDP with Bigger Addresses, TUBA e IPAE. 1993 (finais) – SIP evoluiu, abrangendo características do IP Address Encapsulation (IPAE)12. SIP e PIP deram origem à proposta The Simple Internet Protocol Plus (SIPP). Ao mesmo tempo, a proposta TUBA alterou o nome para Common Architecture for the Internet (CATNIP). 1994 - Aprovação do documento The Recommendation for the IP Next Generation Protocol13 como norma oficial de desenvolvimento do IPng. 1995 – Foi publicado o primeiro conjunto de RFC’s especificando o IPv6 [RFC 1883]14 11. IESG Deliberations on Routing and Addressing http://www.rfc-editor.org/in-notes/rfc1380.txt O IPAE foi adoptado como estratégia de transição para o SIP (Simple IP), proposto por Steve Deering em Novembro de 1992 http://tools.ietf.org/html/draft-ietf-ipae-ipv7-criterias-00 13 The Recommendation for the IP Next Generation Protocol http://www.ietf.org/rfc/rfc1752.txt 12. Exploração da Implementação actual de IPv6 no Kernel do Linux. 20.

(21) Capítulo II – IPv6. 1995 – Concepção do Projecto 6Bone 1996 (Março) – Formalização do projecto 6bone em Março, no encontro IETF em Los Angeles. 1996 (Junho) – Início da rede 6bone, através da criação de dois túneis: um entre a Universidade de Lisboa (UL/PT), o Navy Research Laboratory15 (NRL/US) e a CISCO16 (CISCO/US) e o outro entre a UNI-C (UNIC/DK), o grupo G6 do instituto de pesquisa IMAG (G6/FR) e o grupo WIDE, do Japão (WIDE/JP). 1996 (Dezembro) – Formação do grupo de trabalho 6bone (actualmente NGtrans). 1997 (Agosto) – No encontro do grupo de trabalho ngtrans-6bone que decorreu em Munique, referiu-se que existiam mais de 150 sites IPv6 em 28 países participantes na 6bone. O protocolo de encaminhamento do backbone da 6bone passou a ser o BGP4+. Foi criado o domínio 6bone.net, através do qual se pode aceder às páginas e base de dados 6bone. 1997 (Dezembro) – No encontro de Washington, a 6bone apresentava já 206 sites em 30 países participantes. 1998 (Março) – No encontro de Los Angeles, a 6bone apresentava 240 sites IPv6 em 32 países. 2010 (Setembro) – Segundo estimativas actuais de Geoff Houston17, conceituado responsável da APNIC, os endereços IPv4 ficarão completamente esgotados em Janeiro de 2012. 2011 (Janeiro) - A Internet Assigned Numbers Authority (IANA) entregou dois dos últimos sete blocos de endereços Internet em IPv4. Tudo indica que os últimos cinco blocos são entregues em breve. O esgotamento de endereços está iminente.. 14. Internet Protocol, Version 6 (IPv6) http://www.ietf.org/rfc/rfc1883.txt Naval Research Laboratory http://www.nrl.navy.mil/ 16 Cisco http://www.cisco.com/ 17 Geoff Houston – ―Potaroo‖ IPv4 Address Report http://www.potaroo.net/tools/ipv4/ 15. Exploração da Implementação actual de IPv6 no Kernel do Linux. 21.

(22) Capítulo II – IPv6. 1.3.. Porquê o IPv6?. Segundo a Internet Corporation for Assigned Names and Numbers (ICANN18), a inovação e o crescimento contínuo da Internet, trazem novos desafios que mantém a estabilidade. Na concepção do protocolo IP, há aproximadamente duas décadas, não foram previstas necessidades emergentes da sociedade e da sua relação com os sistemas de comunicação actuais, em particular com a Internet. Devido a este facto, há características que necessitam de alterações. Essas características necessárias são espaços de endereçamento, auto-configuração, mobilidade, segurança na camada da rede, qualidade de serviço e suporte de aplicações no tempo real. Tal como qualquer versão superior, o IPv6 baseia-se essencialmente na resolução de antigos problemas e implementação de novas funcionalidades. Isso não quer dizer que o protocolo IPv4 esteja mal implementado, muito pelo contrário. O IPv4, especificado desde 1981, obteve um grande sucesso e continua a tê-lo, por isso mesmo se adivinha ainda difícil a curto prazo, a tarefa da sua substituição pelo IPv6. O IPv6 é um pouco controverso no que diz respeito à sua necessidade actual. Opções a curto prazo têm sido escolhidas em detrimento do IPv6, mas o desenvolvimento dessas estratégias tende a tornar-se desmotivador. A nova versão do protocolo não é uma necessidade urgente, como o mediático bug do ano 2000. O IPv6 implicará uma movimentação bem mais vagarosa por parte do mundo empresarial, ao contrário do que aconteceu com o bug. Mas esta necessidade é real e a força que mais o impulsiona é o rápido crescimento da Internet. [3] A motivação primária para mudanças no IP advém do espaço de endereçamento limitado. Quando o IP foi definido, existiam somente algumas redes. Foi usado 32 bits para o endereçamento IP, o que permitiria que a internet incluísse mais de um milhão de redes. Porém, a internet está crescendo exponencialmente, com o seu tamanho duplicando em menos de um ano. Na taxa de crescimento actual, cada um dos actuais prefixos de rede possível serão logo atribuídos, e nenhum crescimento adicional será possível. Deste modo, a motivação primária para definir uma nova versão do IP surgiu da limitação de espaço de endereçamento – são necessários endereços maiores para acomodar o crescimento contínuo da internet. [4]. 18. ICANN (acrónimo em inglês para Corporação da Internet para Atribuição de Nomes e Números) http://www.icann.org/ Exploração da Implementação actual de IPv6 no Kernel do Linux. 22.

(23) Capítulo II – IPv6. As motivações primárias e secundárias para mudanças no IP surgiram das novas aplicações e serviços existentes na internet. Por exemplo aplicações que disponibilizam áudio e vídeo precisam entregar os dados em intervalos regulares. Para manter tais informações cruzando a internet sem interrupções, o IP deve evitar variar frequentemente as rotas. Embora o actual cabeçalho do pacote IP inclua um campo que pode ser usado para solicitar um tipo serviço, o protocolo não define um tipo de serviço que pode ser usado para entregar em tempo real de áudio e vídeo. [4] Outras causas para mudanças no IP baseiam-se nas especificações do protocolo IPv6 que são mais claras e optimizadas, eliminando as características não utilizadas e obsoletas do protocolo anterior (IPv4) atingindo assim uma optimização do protocolo IP. Especificações essas que podem definir-se sucintamente como: . Protocolo auto-configurável.. . Protocolo mais seguro.. . Protocolo com mais responsabilidade a nível de QoS.. . Protocolo com vista à mobilidade.. . Protocolo mais eficiente.. . Protocolo virado para o modelo ponto-a-ponto.. . Mecanismos de transição entre os dois protocolos.. 1.4.. Limitações do IPv4. Não houve mudanças expressivas no protocolo IPv4 desde o RFC 791, publicada em 1981. O protocolo IPv4 provou ser robusto e facilmente implementável, conseguindo sustentar uma rede informática (ARPANET) que inicialmente foi pensada apenas para fins militares e académicos nos Estados Unidos tendo-se depois expandido globalmente para os dias de hoje ficando conhecida como a Internet. [5] A internet prosperou de um protótipo de pesquisa para um sistema global de comunicação. Contudo, o seu tamanho não é tão surpreendente como é a sua taxa de crescimento. A figura 219 ilustra esse crescimento. A figura contém um gráfico com o número de computadores ligados à internet em função do ano (1995 a 2010).. 19. Estatísticas sobre o crescimento da internet:. Exploração da Implementação actual de IPv6 no Kernel do Linux. 23.

(24) Capítulo II – IPv6. Figura 2 - Crescimento da internet. 20. No ano de 1994 a Internet era composta por cerca de 40 mil redes. Em 1996 já eram 100 mil redes e a taxa de crescimento parecia duplicar o número de redes a cada ano. Hoje o crescimento da Internet é independente das Universidades ou dos Centros de Pesquisa. Existe uma forte massificação das sociedades em torno das questões relacionadas com a sociedade da informação. O tamanho do endereço de 32 bits faz com que o protocolo IPv4 seja um recurso com um limite relativamente baixo. Mesmo assim, a alocação dos endereços IP's em boa parte das vezes é mal feita. O desenho inicial do protocolo IPv4 não antecipou os seguintes pontos: . Escassez de endereços devido ao crescimento exponencial da internet (China e Índia).. http://www.internetworldstats.com/emarketing.htm 20. Crescimento da internet, medido pelo número de computadores ligados a cada ano.. Exploração da Implementação actual de IPv6 no Kernel do Linux. 24.

(25) Capítulo II – IPv6. . Necessidade de simplificar e automatizar a configuração de redes devido ao aumento de computadores e dispositivos que utilizam endereços IP.. . Falta de suporte para serviços e aplicações emergentes. Estes novos serviços e aplicações são mais exigentes e requerem garantia de entrega de pacotes de dados em tempo real, garantia de disponibilidade e segurança da largura de banda. [6]. . A necessidade de segurança na Internet.. . Necessidade de melhorar o suporte de entrega de pacotes de dados em tempo real – denominado QoS (Quality of Service).. Devido ao problema da exaustão da capacidade de endereçamento e outras limitações do IPv4, foram desenvolvidas e aplicadas soluções a curto prazo tais como: [7] . Atribuição de endereços que permitam atribuir várias classes C a organizações que necessitem de mais do que 256 endereços mas para as quais uma classe B seja excessiva;. . Classless Inter-Domain Routing CIDR21 é mais um "balão de ar" do que propriamente uma solução, pois permite apenas adiar, por mais algum tempo, a data de exaustão do espaço de endereçamento. [8]. O problema do tamanho excessivo das tabelas de encaminhamento foi parcialmente contornado com a adopção do Classless InterDomain Routing (CIDR) descrito pelo RFC 4632. [9] A ideia básica do CIDR é alocar as redes de classe C restantes (cerca de 2 milhões) em blocos de tamanho variável. Se um site precisa de, por exemplo, 2000 endereços, receberia 8 classes C contínuas que representam 2048 endereços. Além disso, o RFC 4632 apontou novas regras para a alocação de redes de classe C baseada na sua localização geográfica. O mundo foi dividido em 4 grandes zonas: Europa, América do Norte, América Central e do Sul, Ásia e Pacífico. Assim sendo, cada uma destas zonas teriam 32 milhões de endereços para serem alocados e outros 320 milhões de endereços classes C de 204.0.0.0 a 223.255.255.255. Com a solução CIDR, 21. Classless Inter-domain Routing http://www.rfc-editor.org/rfc/rfc4632.txt. Exploração da Implementação actual de IPv6 no Kernel do Linux. 25.

(26) Capítulo II – IPv6. as antigas classes A, B e C não são mais usadas para encaminhamento. A compreensão de como se comportou o crescimento passado pode contribuir em muito na projecção de um protocolo que tenha uma vida útil maior. . Network Address Translation (NAT) para contornar a falta de endereços IP. O NAT mapeia múltiplos endereços IP privados para um único endereço IP público. Possibilita a reutilização do espaço de endereçamento IP privado, mas não suporta padrões base de segurança ao nível da camada de rede nem o correcto mapeamento de todas as camadas protocolares acima dessa camada. Este mecanismo, apesar de parecer à primeira vista perfeito, também pode criar problemas quando duas organizações estão conectadas e utilizam um espaço de endereçamento IP privado. Para além disso, o crescimento dos dispositivos e aplicações ligados à Internet provam que o espaço de endereçamento IP público irá acabar.. 1.5.. Especificação do IPv6. O IPv6 contém muitas das características que fizeram o IPv4 ser tão bem sucedido. Apesar de reter os conceitos básicos do IPv4, o IPv6 modifica todos os detalhes. As funcionalidades do IPv4 que não têm um bom desempenho ou que não são usadas com frequência foram removidas ou tornadas opcionais. Certas capacidades novas que se consideram necessárias foram adicionadas sem, no entanto, alterar os conceitos do IPv4. [4] As principais alterações efectuadas do IPv4 para o IPv6 podem ser agrupadas na seguinte categoria: [10] . Extensão das capacidades de endereçamento e encaminhamento – O tamanho de endereços passa de 32 bits na versão 4 para 128 bits na versão 6, o que permite o suporte de um número muito superior de nós, uma melhor hierarquização do espaço de endereçamento essencial à escalabilidade do encaminhamento e uma maior facilidade em termos de auto configuração. A escalabilidade dos endereços Multicast é também aumentada através da adição do campo ―scope‖. E também é definido novo tipo de endereço designado ―anycast‖ usado para enviar um pacote para qualquer um dos grupos de nós.. . Simplificação do formato do cabeçalho – Alguns campos do cabeçalho IPv4 foram removidos ou passaram a ser opcionais de forma a simplificar o tratamento de um. Exploração da Implementação actual de IPv6 no Kernel do Linux. 26.

(27) Capítulo II – IPv6. pacote comum. O cabeçalho IPv6 tem um comprimento fixo de 40 bytes, em vez dos variáveis 20 bytes do IPv4. . Suporte para cabeçalho de Extensão e de opções – Mudanças na forma como as opções do cabeçalho IP são codificados permitem um encaminhamento mais eficaz. Este suporte permite também que outras opções futuras possam vir a ser incorporadas dando assim maior flexibilidade.. . Capacidade de Flow Labeling – É adicionada uma nova funcionalidade para identificar fluxos com necessidade de tratamento idêntico, sendo o fluxo identificado pelo Flow Label e pelo endereço de origem. Esta identificação é feita recorrendo apenas ao campo Flow Label ao endereço de origem, sem ter de recorrer á análise profunda dos pacotes.. . Suporte para autenticação e privacidade – Foram incluídas novas extensões ao protocolo que oferecem suporte para autenticação, integridade de dados e confidencialidade.. . Suporte de auto-configuração – Foram incluídos mecanismos destinados a gestão e configuração de ambientes IP através da utilização de mecanismos de autoconfiguração.. Foram. definidos. mecanismos. de. auto-configuração. com. manutenção de estados e mecanismos sem manutenção de estados.. . Suporte para tráfego com garantia de qualidade de serviço;. . Suporte para Jumbograms – Possibilidade de enviar pacotes com dimensão superior a 64Kb. O limite de um pacote Jumbogram é de 4Gb. Esta propriedade é útil para as redes com grande largura de banda.. . Mapeamento de endereços e Nomes;. . Encaminhamento. Exploração da Implementação actual de IPv6 no Kernel do Linux. 27.

(28) Capítulo II – IPv6. Simplificação do cabeçalho O cabeçalho IPv6 foi simplificado em relação ao cabeçalho IPv4 no que se refere aos campos de controlo, porém o seu tamanho passou de 20 a 40 bytes fixos para qualquer tipo e tamanho de datagrama. Esta alteração deve-se ao facto do tamanho do endereço passar de 4 para 16 octetos. Um cabeçalho básico IPv6 contém menos informações do que um cabeçalho IPv4. Alguns campos do cabeçalho IPv4 foram retirados ou passaram a ser opcionais de forma a simplificar o tratamento de um pacote comum. Embora os endereços IPv6 sejam 4 vezes maiores que os endereços IPv4, o cabeçalho é apenas duas vezes maior (40 bytes).. 22. Figura 3 - Cabeçalho IPv4 .. 23. Figura 4 - Cabeçalho IPv6 .. 22 23. Figura retirada do RFC 791: http://www.faqs.org/rfcs/rfc791.html Figura retirada da Secção 3 - IPv6 Header Format do RFC 2460: http://tools.ietf.org/html/rfc2460#section-4. Exploração da Implementação actual de IPv6 no Kernel do Linux. 28.

(29) Capítulo II – IPv6. Simplificações (Campos Removidos): . Campo IHL – A remoção do campo IHL (Internet Header Length) advém do facto de este campo essencialmente especificar o offset para a porção de dados do cabeçalho IP. Este conceito, que obrigava a uma informação adicional acerca do endereço dos dados, foi removido no IPv6.. . Campos Identification, Flags e Fragment Offset – Estes três campos são referentes ao processo de fragmentação que poderá ser necessário utilizar ao longo de todo o caminho do pacote. São campos de controlo e identificação dos fragmentos. A fragmentação no IPv6 é feita usando os Cabeçalhos de Extensão e é feito extremo a extremo, isto é, a fragmentação apenas é efectuada na origem, usando o protocolo PMTU [11] libertando os routers dessa tarefa, onde descartam todos os pacotes maiores que o MTU da rede. Isso faz com que não seja desperdiçado processamento em campos desnecessários quando não ocorre fragmentação.. . Campo Header Checksum – Este campo serve para verificação de erros apenas no cabeçalho IP. Foi removido devido a um conjunto de situações: Geralmente os pacotes são corrompidos na camada 2 (Data Link), e essa camada tem geralmente melhores mecanismos para detecção de erros; Se mesmo assim existir algum problema, a camada acima poderá solucionar esse problema. Se o pacote estiver corrompido, então o nó destino deverá estar preparado para o recusar, apesar de algum impacto a nível de processamento; Os meios de transmissão existentes (fibra óptica) são mais fiáveis a assegurar uma comunicação com menos falhas. O campo Header Checksum tinha de ser recalculado em cada nó devido à alteração do campo Hop Limit sobrecarregando os routers.. . Campos Options e Padding - O campo Padding serve para completar o pacote (tamanho múltiplo de 32 bits). Em relação ao campo Options, tem alguma utilidade a nível de encaminhamento, mas raramente é utilizado. O IPv6 junta um pouco a funcionalidade deste campo à do campo Protocol e utiliza-os no conceito dos Cabeçalhos de Extensão. De certa forma algumas funcionalidades do campo. Exploração da Implementação actual de IPv6 no Kernel do Linux. 29.

(30) Capítulo II – IPv6. Options são passadas para os Cabeçalhos de Extensão. O campo Protocol é substituído pelo Next Header, parecido com o campo Protocol do IPv4, que interliga todos os cabeçalhos de Extensão. Campos revistos: . Substituição do campo Type of Service – Este campo era o responsável por algum QoS que pudesse existir no IPv4, no entanto nunca foi adoptado pelos routers, principalmente por ser muito pequeno. No IPv6 o QoS divide-se em dois campos: o campo Traffic Class e o campo Flow Label; o primeiro é direccionado ao catálogo de tráfego (DiffServ) e o segundo à geração de fluxos prioritários (IntServ).. . Substituição do campo Total Length – Este campo indica o tamanho total do pacote, incluindo os dados. Foi substituído pelo campo Payload Length que representa o tamanho do resto do pacote que se segue ao cabeçalho IPv6, ou seja, o tamanho do cabeçalho IPv6 não é neste caso necessário, pois o cabeçalho tem tamanho fixo.. . Substituição do campo Time to Live – A substituição desde campo é devido a questões de interpretação. Ao contrário do que o nome indica, este campo é medido em saltos e não em tempo, pelo que a designação Hop Limit vem corrigir esta pequena confusão. Nada como ter o nome correspondente à função que desempenha.. . Substituição do campo Protocol – Apesar de o nome ser diferente, o novo campo Next Header funciona de uma forma semelhante ao campo Protocol. No IPv4 indicava o protocolo da camada acima que ia ser encapsulado. No IPv6 indica o protocolo de camada superior ou o Cabeçalho de Extensão seguinte. É como que um campo que interliga todos os Cabeçalhos de Extensão. Quando não se verificarem mais Cabeçalhos de Extensão, então indicará o protocolo da camada acima correspondente, tal como o campo Protocol.. . Alteração dos campos Source Address e Destination Address – Esta alteração é a mais evidente e consiste na passagem dos endereços de 32 bits para 128 bits. Verifica-se então, nas alterações efectuadas, uma maior preocupação em relação a questões como a eficiência e a simplicidade. Eficiência na medida em que só é processado aquilo que é realmente obrigatório.. Exploração da Implementação actual de IPv6 no Kernel do Linux. 30.

(31) Capítulo III Ferramenta de conformidade da especificação IPv6. 1.1.. Considerações Gerais. Para a realização dos testes de conformidade do IPv6, será utilizado uma ferramenta de teste designado por TAHI IPv6 Suite teste de conformidade, desenvolvida pelo projecto TAHI com a finalidade de desenvolver e fornecer mecanismos que permitam verificar a conformidade da tecnologia IPv6 em relação aos RFC´s. Esta ferramenta consiste em duas componentes, numa plataforma de teste e num conjunto de scripts de teste. Sendo a plataforma de teste designada por ferramenta de teste de conformidade IPv6 (―IPv6 Conformance Test Tool‖) e o script de testes designado por Pacote de Programa de teste de conformidade do IPv6 (―IPv6 Conformance Test Program Package‖). . O IPv6 Conformance Test Tool (v6eval) é um pacote de ferramentas que permite a execução de testes de conformidade para o IPv6. Essas ferramentas permitem:. . . Definir qualquer pacote a ser enviado;. . Definir qualquer pacote a ser recebido;. . Programar as acções anteriores em qualquer ordem usando scripts Perl.. IPv6 Conformance Test Program Package (ct) é um conjunto de scripts contendo testes de conformidade IPv6 em relação a grande parte dos RFC´s IPv6 existentes.. Exploração da Implementação actual de IPv6 no Kernel do Linux. 31.

(32) Capítulo III – Ferramenta de conformidade da especificação IPv6. Na tabela seguinte serão listados alguns scripts contendo um conjunto de testes disponíveis por categoria. Nome. Categoria do teste. Spec. RFC2460: Especificação do IPv6. Icmp. RFC2463: ICMPv6 para o IPv6. Nd. RFC2461: Descobrimentos de vizinhos (Neighbor Discovery). Pmtu. RFC1981: Path MTU Discovery for IPv6. IPsec. RFC2401: Security Architecture for the IP Tabela 1 - Script de teste disponível. Ambos os pacotes ―ct‖ e ―v6eval‖ podem ser obtidos do site: http://www.tahi.org. Para a realização dos testes de conformidade, serão utilizadas algumas distribuições Linux: FreeBSD, Ubuntu e Centos. Em que a distribuição FreeBSD será utilizada como o nó de teste e será designado por TN, e as outras distribuições serão utilizadas como nós em teste e serão designados por NUT. Onde o TN será o nó que realiza o teste e o NUT será o nó testado. O TN e o NUT terão um ficheiro de configuração designado respectivamente de tn.def e nut.def. Nestes ficheiros encontram-se definidos configurações específicos referentes a cada nó. Os testes podem ser executados de forma manual recorrendo à linha de comando ou de forma automática recorrendo a um programa de execução automática de testes (autorun). Para a realização deste trabalho os testes serão executados de forma automática recorrendo a um programa de execução automática de testes (autorun). A execução automática dos testes consiste em enviar um conjunto de pacotes e verificar as respostas. Os testes a serem realizados são especificados no ficheiro Index, e o programa de teste ao executar os testes verifica o ficheiro de configuração do TN e do NUT, e com base nesses ficheiros realiza os testes anteriormente especificados e os resultados verificados serão listados num ficheiro HTML designado de ―./index.html‖, como se ilustra na figura seguinte: Exploração da Implementação actual de IPv6 no Kernel do Linux. 32.

(33) Capítulo III – Ferramenta de conformidade da especificação IPv6. Index. Report Index (HTML). Autorun. Exec with Option. Status. Test script Packet.def. Figura 5 - Programa de execução Automática. 1.2.. Procedimento comum de limpeza dos testes. A limpeza da cache de vizinhança (Neighbor Cache) do NUT (nó em teste) após cada execução de um teste é um procedimento comum em todos os testes. Este procedimento consiste na transição das entradas da cache de vizinhança do NUT criada durante a execução do teste para o estado NO Neighbor Cache Entry e a remoção de qualquer entrada do router por defeito e a também da lista de prefixo no caso do NUT ser um router.. 1.3.. Definição da estrutura do pacote. O pacote a ser enviado/recebido é criado usando a API Perl, através da definição de cada um dos seus componentes: . Frame – composto pelos seguintes elementos (Header, Packet);. . Pacote – pacote_IPv6, pacote_IPv4, pacote_ARP, pacote_RARP;. . Payload – dados.. Ao executar o teste de conformidade automaticamente, as seguintes regras se aplicam aos nomes de arquivo de scripts. . A extensão é ". seq".. Exploração da Implementação actual de IPv6 no Kernel do Linux. 33.

(34) Capítulo III – Ferramenta de conformidade da especificação IPv6. . Os scripts de teste encontram-se definidos dentro das directorias utilizados para classificar os arquivos de acordo com o RFC, não sendo necessário a definição manual dos pacotes a ser enviado.. A tabela seguinte lista os valores possíveis de retorno da execução dos scripts de teste. Código. Constante. Descrição. 0. $exitPass. PASS. 1. $exitIgnore. Terminação normal. 2. $exitNS. Ainda não suportado. 3. $exitWarn. Não pode ser identificado como uma falha porque a especificação não é clara. 4. $exitHostOnly. Teste suportado apenas por host. 5. $exitRouterOnly. Teste suportado apenas por router. 32. $exitFail. Fail. 64. $exitFatal. Erro interno Tabela 2 - Script Status Code. 1.4.. Exemplos de Funções Disponíveis na API. Existem disponível um conjunto de funções: Funções Disponíveis na API vStop() vClear() vCapture() vSend() vRecv() vLog () vRemote () vErrmsg () vRoundoff () vSleep () Tabela 3 - Funções disponíveis na API. Exploração da Implementação actual de IPv6 no Kernel do Linux. 34.

(35) Capítulo III – Ferramenta de conformidade da especificação IPv6. Na tabela seguinte serão exemplificadas a algumas das funções definidas anteriormente vSend () Descrição. Permite especificar um pacote a ser enviado para a interface especificada.. Argumento sub vSend($@) {my ( $ ifname,. # nome da interface do target. @ Frames,. # nome pacote a ser enviado. ) = @_; Valor de É retornado um valor de hash. A key e o valor é o seguinte: SentTimeN retorno Tabela 4 - Exemplo vSend. vRecv Descrição. O teste é realizado para determinar quando é que um determinado pacote pode ser recebido da interface especificada. Argumento sub vRec($$$$@) {my ( $ ifname,. # nome da interface do target. $ timeout, $ seektime,. # procurar pelo pacote a partir do tempo. $ count,. # esperar por quantas frames. @ Frames,. # nome da frame a ser enviado. ) = @_; Valor de É retornado um valor de hash. A key e o valor é o seguinte: retorno  = 0 – Terminação normal  = 1 – Terminação com Timeout  = 2 – o pacote especificado foi recebido, mas o pacote esperado não foi recebido  >=3 – erro Tabela 5 - Exemplo vRec. Exploração da Implementação actual de IPv6 no Kernel do Linux. 35.

(36) Capítulo IV Descrição dos testes IPv6 realizados. 1. Considerações Gerais Os testes realizados neste capítulo abrangem a especificação base do IPv6, definidos no RFC 2460, bem como o processamento das Opções e Cabeçalhos de Extensões, em particular o Hop-by-Hop Option, Destination Option. São especificados o cabeçalho IPv6 e os cabeçalhos de Extensão e Opções. Também serão abordados questões relacionados com o tamanho do pacote, a semântica do Flow Label e Traffic Classes. Em relação à especificação base do IPv6 estes testes têm a finalidade de verificar a disponibilidade da implementação do IPv6, onde serão verificados se o nó em teste (NUT) processa correctamente os campos: Version, Traffic Class, Flow Label, Payload Length, Next Header e Hop Limit. Também será verificado se o nó em teste (NUT) transmite a mensagem ICMPv6 apropriada em resposta à recepção de um campo inválido ou desconhecido. Em relação ao processamento das Opções e Cabeçalhos de Extensões, em particular o Hop-by-Hop Option, Destination Option os testes realizados têm a finalidade de verificar se o nó em teste (NUT) processa e gera correctamente o campo Header Extension Length do Cabeçalho de Extensão, os campos Option Type e Option Data Length do campo Option. Será igualmente, verificado o nó em teste (NUT) se envia a mensagem ICMPv6 apropriada em resposta ao envio de pacotes, com campos inválidos ou desconhecidos.. Exploração da Implementação actual de IPv6 no Kernel do Linux. 36.

(37) Capítulo IV – Descrição dos testes IPv6 realizados. 2. Testes em relação à especificação base do IPv6 2.1.. Teste ao Campo Versão (Version Field). O campo Versão tem 4 bits que indicam a versão do protocolo. No caso do IPv6 é o número 6. A versão 5 não poderia ser usada porque já havia sido atribuída para um protocolo experimental.. 2.1.1. Objectivo O objectivo deste teste consiste em verificar se o nó em teste (NUT) processa correctamente o campo Versão (Version) de um pacote recebido.. 2.1.2. Corpo do Teste O nó de teste (TN) envia dois pacotes Echo Request para o nó em teste (NUT), em que o primeiro pacote contém o campo versão inválido (campo versão igual a 5) e o segundo pacote um pacote valido contendo o campo versão igual a 6. Para a realização do teste o programa de execução automática utilizou o script IH_BadIPv6Ver.seq onde se encontram definidos funções que permitem gerar pacotes Echo Request validos/inválidos. Na tabela seguinte encontram-se listadas as funções usadas para gerar os dois pacotes Echo Request. Funções definidas no script IH_BadIPv6Ver.seq Echo Request inválido. Echo Request válido. FEM_icmp6_echo_request( echo_request_wrong_v6ver, _HETHER_tn2nut, {Version=5;}, { Identifier = PING_ID; SequenceNumber = PING_SN; payload = echo_data8; } ) FEM_icmp6_echo_request( echo_request, _HETHER_tn2nut, {}, { Identifier = PING_ID; SequenceNumber = PING_SN; payload = echo_data8; }. Exploração da Implementação actual de IPv6 no Kernel do Linux. 37.

Referências

Documentos relacionados

Ao rever todas as análises e discussões que realizamos neste trabalho, embasadas nos preceitos funcionalistas aplicados à tradução e nos paradigmas bakhtinianos,

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

62 daquele instrumento internacional”, verifica-se que não restam dúvidas quanto à vinculação do Estado Brasileiro à jurisdição da Corte Interamericana, no que diz respeito a

O artigo tem como objeto a realização, em 2013, do Congresso Internacional Justiça de Transição nos 25 anos da Constituição de 1988 na Faculdade de Direito da UFMG, retratando

O objetivo deste trabalho foi realizar o inventário florestal em floresta em restauração no município de São Sebastião da Vargem Alegre, para posterior

determinou, nomeadamente: “III - Salvo prova em contrário, de ocorrência de circunstâncias excecionais, o acordo no qual o sócio e gerente de uma sociedade garante

Sua obra mostrou, ainda, que civilização e exploração do trabalho andam juntas e que o avanço histórico do oeste brasileiro se fez com a carne e o sangue dos

Finally,  we  can  conclude  several  findings  from  our  research.  First,  productivity  is  the  most  important  determinant  for  internationalization  that