CMPUS GRAVATA BIBLIOTECA TCP/IP PARA AMBIENTES MICROPROCESSADOS Luiz Guiode Salamon Monografia desenvolvida durante a disciplina de Trabalho de Concluso de Curso em Informtica II e apresentada ao Curso de Cincia da Computao da Universidade Luterana do Brasil, cmpus Gravata, como pr-requisito para a obteno do ttulo de Bacharel em Cincia da Computao. Orientador: Prof. Elgio Schlemer Gravata, dezembro de 2002. 2 Universidade Luterana do Brasil ULBRA Curso de Cincia da Computao Cmpus Gravata Reitor: Pastor Ruben Eugen Becker Vice-Reitor: Eng. Leandro Eugnio Becker Diretor do Cmpus Gravata: Prof. Felcio Korb Coordenador do Curso de Cincia da Computao (Cmpus Gravata): Prof. Jos Luiz Andrade Duizith Coordenador das Disciplinas de Trabalho de Concluso de Curso (Cmpus Gravata): Prof. Roland Teodorowitsch Banca Avaliadora composta por: Data da defesa: 5/12/2002. Prof. Elgio Schlemer (Orientador) Prof. Roland Teodorowitsch Prof. Julio Carlos Balzano de Mattos CIP Catalogao na Publicao S159b Salamon, Luiz Guiode Biblioteca TCP/IP para ambientes microprocessados / Luiz Guiode Salamon; [orientado por] Elgio Schlemer. Gravata: 2002. 68 p.: il. Trabalho de Concluso de Curso (Graduao em Cincia da Computao). Universidade Luterana do Brasil, 2002. 1. TCP/IP. 2. Microprocessador. 3. Interface Socket. I. Schlemer, Elgio. II. Ttulo. CDU 004.738.5.057.4 Setor de Processamento Tcnico da Biblioteca Martinho Lutero ULBRA-Gravata Endereo: Universidade Luterana do Brasil Cmpus Gravata Estrada Itacolomi, 3.600 Bairro So Vicente CEP 94170-240 Gravata-RS Brasil Quem controla as suas palavras sbio, e quem mantm a calma mostra que inteligente. At um tolo pode passar por sbio e inteligente se ficar calado. Provrbios de Salomo minha esposa Luciane Salamon, que aceitou minha dedicao aos estudos com resignao. Aos meus filhos, Francis Salamon e Samuel Salamon, que so minha inspirao. Aos meus familiares, que sempre me apoiaram neste meu objetivo. SUMRIO LISTA DE FIGURAS.............................................................................................................7 LISTA DE ABREVIATURAS E SIGLAS............................................................................8 RESUMO ..............................................................................................................................10 ABSTRACT..........................................................................................................................11 1 INTRODUO................................................................................................................12 2 INFRA-ESTRUTURA DE REDE...................................................................................14 2.1 COMO FUNCIONA A TROCA DE DADOS.........................................................................15 2.2 MODELO EM CAMADAS ..............................................................................................15 2.3 INTERLIGAO EM REDE ............................................................................................18 3 A PILHA DE PROTOCOLOS TCP/IP..........................................................................20 3.1 COMUNICAO SEGURA.............................................................................................20 3.2 ESTABELECIMENTO DE CONEXES .............................................................................21 3.3 ESPECIFICAO TCP .................................................................................................23 3.4 MQUINA DE ESTADOS ..............................................................................................24 3.5 PROTOCOLO IP...........................................................................................................25 3.6 FRAGMENTAO........................................................................................................27 3.7 ROTEAMENTO............................................................................................................27 3.8 IP ORIENTADO POR HARDWARE ...................................................................................29 3.9 ESPECIFICAO IP.....................................................................................................29 3.10 MODELO DE OPERAO IP.........................................................................................31 3.11 MENSAGENS DE ERRO (ICMP) ...................................................................................31 3.12 USER DATAGRAM PROTOCOL (UDP) .........................................................................33 4 A INTERFACE SOCKET................................................................................................34 4.1 A CHAMADA SOCKET() ...............................................................................................35 4.2 ASSOCIAO DE PORTAS AO SOCKET ..........................................................................35 4.3 ENVIANDO E RECEBENDO DADOS ...............................................................................36 4.4 CHAMADAS AUXILIARES ............................................................................................37 5 PROJETO PROPOSTO..................................................................................................39 5.1 PROJETO DE SOFTWARE...............................................................................................40 5.2 IMPLEMENTAO DO PROTOCOLO TCP/IP .................................................................41 5.3 FUNES DE GERENCIAMENTO...................................................................................42 5.4 AMBIENTE DE TESTES.................................................................................................43 5.5 ESPECIFICAO DO PROTTIPO..................................................................................44 6 5.5.1 Caractersticas do mdulo selecionado ..............................................................44 5.5.2 Especificaes do microcontrolador ..................................................................45 5.5.3 Interfaces disponveis.........................................................................................45 6 IMPLEMENTAO DO PROJETO ............................................................................47 6.1 AMBIENTE ESCOLHIDO...............................................................................................47 6.2 AMBIENTE DE TESTE ..................................................................................................48 6.3 IMPLEMENTAO DO PROTOCOLO PPP.......................................................................49 6.3.1 Fluxo de negociao PPP...................................................................................50 6.3.2 Otimizao na negociao LCP .........................................................................51 6.3.3 Otimizao na negociao IPCP ........................................................................52 6.3.4 Otimizando a negociao com CCP...................................................................52 6.4 IMPLEMENTAO DO PROTOCOLO IP..........................................................................52 6.4.1 Extraindo dados do datagrama IP.......................................................................54 6.4.2 Tratamento de mensagem UDP..........................................................................55 6.4.3 Tratamento de mensagem TCP..........................................................................55 6.4.3.1 Implementao de temporizadores............................................................56 6.4.3.2 Dando partida mquina de estados TCP.................................................57 6.4.3.3 Estruturas de dados...................................................................................57 6.5 PORTANDO O CDIGO PARA O DESTINO.......................................................................59 6.5.1 Ferramentas utilizadas .......................................................................................61 6.6 VERIFICAO DE FUNCIONAMENTO............................................................................62 6.6.1 Tipos de testes....................................................................................................62 6.6.1.1 Teste de conexo TCP ..............................................................................63 7 CONCLUSO..................................................................................................................65 REFERNCIAS....................................................................................................................67 LISTA DE FIGURAS Figura 1 Datagramas que trafegam na rede TCP/IP .............................................................14 Figura 2 As sete camadas de referncia do modelo RM-OSI ...............................................16 Figura 3 Dados sendo passados entre as camadas................................................................18 Figura 4 As quatro camadas conceituais da arquitetura de software TCP/IP........................18 Figura 5 Estabelecimento de conexo inicial .......................................................................23 Figura 6 Formato do cabealho TCP....................................................................................24 Figura 7 Mquina de estados TCP (RFC793, p. 23).............................................................26 Figura 8 Classes de redes IP.................................................................................................28 Figura 9 Formato do cabealho IP Verso 4 ........................................................................30 Figura 10 Formato do cabealho do protocolo ICMP ..........................................................32 Figura 11 Formato do cabealho UDP.................................................................................33 Figura 12 A interface socket e os protocolos........................................................................34 Figura 13 Modelo de ciclo de vida incremental ...................................................................41 Figura 14 Estrutura do hardware com suas interfaces .........................................................43 Figura 15 Interao entre camadas.......................................................................................43 Figura 17 Troca de seqncias de caracteres com o MODEM.............................................48 Figura 18 Interconexo entre os sinais RS-232....................................................................49 Figura 19 Formato do protocolo PPP...................................................................................49 Figura 20 Algoritmo de tratamento para quadros.................................................................54 Figura 21 Estrutura de dados do datagrama IP.....................................................................58 Figura 22 Estrutura para manipulao de dados numricos de 2 bytes.................................58 Figura 23 Estrutura para manipulao de dados numricos de 4 bytes.................................58 Figura 24 Estrutura de dados do datagrama TCP.................................................................58 Figura 25 Estrutura auxiliar usada para clculo de soma de verificao TCP......................59 Figura 26 Fluxograma de tratamento de recepo................................................................61 Figura 27 Captura de testes de conexo TCP.......................................................................63 LISTA DE ABREVIATURAS E SIGLAS ACK ACKnowledgement ANSI American National Standards Institute API Applicatio Programming Interface ARPANET Advanced Research Projects Agency ATeT American Telephone and Telegraph Corparation BSD UNIX Berkeley Software Distribution UNIX CCP Compression Control Protocol CMOS Complementary Metal Oxide Silicon DARPA Defence Advanced Research Projects Agency EEPROM Eletrically Erasable Programmable Read Only Memory EPROM Erasable Programmable Read Only Memory FCS Frame Check Sequence FTP File Transfer Protocol GPL General Public License HTTP Hypertext Transfer Protocol ICMP Internet Control Message Protocol INTERNIC Internet Network Information Center ISO Internacional Organization for Standardization IP Internet Protocol IPC Interprocess Communication IPCP Internet Protocol Control Protocol IPv4 Internet Protocol Verso 4 IPv6 Internet Protocol Verso 6 LAN Local Area Network LCD Liquid Cristal Display LCP Link Control Protocol LSB Last Significant Bit MODEM MOdulador-DEMOdulador MRU Maximun Receive Unit MSB Most Significant Bit NSF National Science Fundation OSI Open Systems Interconnection PAP Password Authentication Protocol PPP Point to Point Protocol RAM Random Access Memory RFC Request For Comments RM-OSI Reference Model of Open System Interconnection 9 ROM Read Only Memory SYN SYNcronizing Segment TCB Transmission Control Block TCP Transmission Control Protocol TTL Time To Live UART Universal Asynchronous Receiver and Transmitter UCP Unidade Central de Processamento UDP User Datagram Protocol VLSI Very Large Scale Integration WWW World Wide Web RESUMO Este trabalho descreve a implementao de uma biblioteca TCP/IP voltada para sistemas microprocessados de 8 bits, propiciando que arquiteturas mais simples possam utilizar-se da Internet para as mais diversas finalidades. Assim sistemas de monitorao, dispositivos de pagamento eletrnicos, controladores de processos industriais, circuitos de vigilncia residenciais, podem ser conectados Internet e tornar possvel serem monitorados e controlados partir de qualquer lugar. Buscou-se implementar a biblioteca de forma otimizada, com vistas a atender exigncias especficas de ambientes com recursos computacionais limitados. Esta otimizao exigiu estudo criterioso do funcionamento dos protocolos TCP, IP, UDP e ICMP, bem como seu inter-relacionamento, a fim de manter suas funcionalidades e, acima de tudo, compatibilidade com a arquitetura presente nos dispositivos que se utilizam da Internet. Em uma implementao deste tipo deve-se buscar uma integrao no uso de recursos, principalmente no uso de memria. Ao mesmo tempo, que a otimizao norteou o desenvolvimento, os recursos de comunicao foram disponibilizados de forma acessvel e simplificada, para que sua utilizao por aplicaes fosse da forma mais transparente possvel. Para isto, implementou-se uma interface socket, que permite uma abstrao para chamadas de comunicao, disponibilizando uma camada otimizada para acesso aos recursos, alm disto, o estudo permitiu que o objetivo fosse atingido, pois, estabeleceu a diretriz para o desenvolvimento do prottipo de forma segura e planejada, permitindo comprovar na prtica a implementao dos recursos, demonstrando seu uso e funcionamento no ambiente microprocessado escolhido. Palavras-chaves: TCP/IP; Microprocessador; Interface Socket. ABSTRACT Title: TCP/IP library for microprocessed environments This work describes the implementation of a TCP/IP library directed toward microprocessed systems of 8 bits, that simpler architectures can be used from the Internet for the most diverse purposes. Thus electronic systems of monitoring, controlling devices of payment, industrial processes, monitoring residential circuits, can be connected to the Internet and can be monitored and controlled from of any place. One searched to implement the library of optimized form, with sights to take care of specific environment requirements with limited computational resources. This optimization demanded dedicate study of the functioning of protocols TCP, IP, UDP and ICMP, as well as its inter-relationship, in order to keep its functionalities and, above of everything, compatibility with the present architecture in the devices that if they use of the Internet. In an implementation of this type an integration in the use of resources must be searched, mainly in the memory use. At the same time, that the optimization guided the development, the communication resources had been disabled of accessible and simplified form, so that its use for applications was of the possible form most transparent. For this, an interface was implemented socket, that it allows an abstraction for communication calls, making use a layer optimized for access to the resources, moreover, the study allowed that the objective was reached, therefore, established the line of direction for the development of the prototype of safe and planned form, allowing to prove in the practical a implementation of the resources, being demonstrated its use and functioning in the chosen microprocessed environment. Key-words: TCP/IP; Microprocessor; Socket Interface. 1 INTRODUO A Internet demonstrou ser o caminho de interao entre os mais diversos dispositivos eletrnicos e esta possibilidade exerce grande fascnio sobre as pessoas. Praticamente qualquer dispositivo que tenha recursos de comunicao est apto a ser conectado grande rede mundial. A tecnologia atual permite esta integrao com grande facilidade, pois os sistemas eletrnicos tm a sua disposio memria e capacidade de processamento a baixos custos. As possibilidades e aplicaes que esta rea da tecnologia disponibiliza esto longe de se esgotar. A Internet vem crescendo de forma surpreendente, superando todas as expectativas, tanto que as classes de endereamento IP (Internet Protocol) esto esgotadas. Isto demonstra o sucesso que sua utilizao representa. Talvez uma boa razo para este sucesso seja sua filosofia, onde todas as correntes de pensamento tem oportunidades de expresso. O uso da Internet avana em todas as reas tecnolgicas de nossa sociedade e sua aplicao assume novas propores medida que passa a ser usada rotineiramente. A demanda por meios que propiciem o acesso Internet movimenta profissionais em todas as reas, dentre elas os sistemas embarcados e sistemas microprocessados dedicados, onde os recursos de hardware disponveis normalmente so limitados, o que justifica o desenvolvimento de tecnologias otimizadas para estas finalidades. Esta grande demanda movimentou a comunidade da Internet para impedir que seu crescimento seja prejudicado pelas limitaes impostas pelos protocolos utilizados atualmente. Esto sendo desenvolvido testes de uma nova verso do protocolo IP, verso 6, que busca justamente dar maior flexibilidade faixa de endereamento. Neste novo protocolo o endereo IP passa a ter 128 bits, bem mais do que os 32 bits da verso atual (IPv4). Dentre as muitas reas que esto aderindo integrao com a Internet, sistemas industriais uma das mais automatizadas, pela crescente busca de eficincia e reduo de custos, permitindo que vrios tipos de dispositivos sejam conectados WWW (World Wide Web). Para isto h grande demanda de sistemas de monitorao que possibilitem o controle distncia de equipamentos. Sistemas podem, desta forma, identificar falhas e notificar os sistemas de monitorao sobre tais situaes, o que reduz a necessidade de interveno humana, muitas vezes em ambientes nocivos. Este trabalho pretende implementar os protocolos necessrios para que um sistema microprocessado possa conectar-se Internet e interagir com ela, fornecendo e recebendo dados. Para isto ser descrito o funcionamento dos protocolos usados na Internet e detalhados os aspectos dos protocolos que devem ser utilizados. Levando-se em conta que os recursos disponveis neste tipo de equipamento so escassos, e muitas vezes compartilhados com o 13 sistema que exerce o controle sobre o equipamento, a otimizao, juntamente com a compatibilidade das funcionalidade implementadas, foi uma das principais metas. Inicialmente, no captulo 2 sero abordados os conceitos que formam uma infra- estrutura de rede, descrevendo os modelos que deram origem organizao existente atualmente. Ser discutido o desenvolvimento de protocolos com viso em camadas, abordando os exemplos mais relevantes, que servem de referncia para esta rea, pois possibilitaram que os problemas fossem reduzidos em partes menores e mais fceis de resolver. A seguir, no captulo 3, sero discutidos os detalhes especficos dos protocolos que este trabalho se prope a implementar, que so: TCP (Transmission Control Protocol), IP, UDP (User Datagram Protocol) e ICMP (Internet Control Message Protocol). Todos fazem parte da pilha de protocolos que compem a Internet. O captulo 4 discorrer sobre o conceito de socket, utilizado como uma abstrao para criar isolamento entre os recursos de comunicao fornecidos pelo sistema e as aplicaes que fazem uso destes servios. No captulo 5 discutido o projeto proposto. Sero vistas as opes de ferramentas de desenvolvimento que foram utilizadas para a implementao do cdigo do prottipo, as tcnicas que foram empregadas no desenvolvimento, qual o ambiente de teste necessrios, os recursos disponibilizados no hardware do prottipo escolhido e suas interfaces. O captulo 6 descreve a implementao do projeto abordando como ele foi realizado. Descreve os problemas enfrentados e as solues encontradas, os teste que foram realizados, utilizando-se do hardware escolhido como prottipo deste projeto, bem como os resultados obtidos. Por fim, no captulo 7, ser apresentada a concluso do trabalho. 2 INFRA-ESTRUTURA DE REDE O principal objetivo de uma rede o compartilhamento de recursos, sejam eles dados, aplicativos, dispositivos de armazenamento, impressoras, etc. A possibilidade de troca de informaes sobre diversos assuntos com computadores em rede local ou geograficamente distribudos encurta distncias e virtualmente aproxima as pessoas. As diversas ferramentas que fazem uso destes recursos, como correio eletrnico, listas de discusso e navegadores de pginas na Internet so exemplos atravs dos quais as pessoas interagem, utilizando-se dos computadores interligados a redes (JORDAM e CHURCHILL, 1994, p. 16). Um ambiente de rede consiste de estaes interconectadas que normalmente so atendidas por um servidor. Esta viso pode ser aplicada a uma rede local com microcomputadores interligados atravs de uma placa de rede Ethernet ou grandes redes (ARPANET, Internet). H vrios nveis de protocolos trafegando na rede na forma de pacotes, tambm chamados de datagramas, dependendo do nvel em que eles esto. A Figura 1 mostra um exemplo de pacote TCP contido em um datagrama IP. O termo pacote usado genericamente para designar uma poro de dados que trafegam entre as estaes. O formato dos pacotes que esto nesta rede definido por vrios protocolos, responsveis pelo transporte dos dados entre as estaes (computadores conectados rede que so fonte e destino de pacotes de dados). Pacote TCP Dados da Aplicao Datagrama IP Dados do datagrama Figura 1 Datagramas que trafegam na rede TCP/IP Alm das estaes, existem outros equipamentos, que fazem parte da rede. Estes equipamentos normalmente do suporte rede, tais como: gateway: um dos vrios tipos de servidores de comunicao, sua funo permitir que duas ou mais redes diferentes se comuniquem como se fossem uma nica entidade lgica; roteadores: so dispositivos que controlam o trnsito de pacotes entre redes separadas logicamente; 15 pontes (bridges): as pontes conectam duas redes separadas fisicamente; repetidores: os repetidores so utilizados para estender a extenso fsica de uma LAN (Local Area Network). 2.1 COMO FUNCIONA A TROCA DE DADOS Independentemente do tipo de conexo que faam, seja entre computadores ou entre terminais e computadores, as redes de comunicao dividem-se em dois tipos bsicos: comutao de circuitos (tambm conhecidas como redes baseadas em conexes); comutao de pacotes (conhecidas, ainda, como redes sem conexo). A comutao por circuitos opera formando uma conexo dedicada entre duas pontas. J nas redes de comutao de pacotes, as mensagens a serem transmitidas atravs das estaes da rede so divididas em pequenas unidades chamadas pacotes, que so multiplexados por meio de conexes entre mquinas de alto desempenho. Um pacote, que geralmente contm pequenas unidades de informaes, transporta uma identificao que capacita o hardware da rede a enviar as informaes ao destino. Por exemplo, a transmisso de um arquivo extenso entre dois equipamentos deve ser feita a partir da diviso do arquivo em vrios pacotes antes de encaminh-los rede. O hardware da rede envia os pacotes aos seus respectivos destinos onde o software os rene novamente em um nico arquivo. De acordo com Nunes (1999), a grande vantagem da comutao de pacotes a possibilidade de realizar simultaneamente vrias conexes entre computadores distintos. A desvantagem que medida que a atividade se intensifica, h um decrscimo do desempenho da rede. As estaes conectadas Internet, quando querem transmitir dados, fazem chamadas ao TCP passando buffers com dados. O TCP cria os pacotes com os tamanhos adequados de segmentos, agregando informaes de controle. Aps, chamado o mdulo responsvel por enviar os pacotes pela rede. O destino, ao receber os pacotes em segmentos, coloca os dados no buffer do usurio e notifica a recepo dos dados. Os dados recebidos contm informaes que garantem que os pacotes possam ser corretamente ordenados, visto que podem chegar fora de ordem no destino. 2.2 MODELO EM CAMADAS A diviso dos mdulos de protocolo em camadas surgiu com o objetivo de isolar o tratamento da comunicao das aplicaes, e ao mesmo tempo isolar os vrios nveis de problemas que este tipo de ambiente apresenta, como pode ser visto em Comer e Stevens (1999a, p. 177). A viso em camadas permite que problemas apresentados em nveis diferentes sejam tratados por mdulos especficos, com maior eficincia, pois cada mdulo desenvolvido para resolver da melhor forma o tratamento de sua camada. Assim os problemas no so propagados aos mdulos seguintes. Dividindo o tratamento em unidades menores fica mais fcil de implementar solues que sejam mais eficientes. 16 Uma das primeiras vises desta implementao foi o modelo RM-OSI (Reference Model of Open System Interconnection), feito pela ISO (Internacional Organization for Standardization). Este modelo foi concebido nas sete camadas apresentadas na Figura 2. Camada Funcionalidade 7 Aplicativo 6 Apresentao 5 Sesso 4 Transporte 3 Rede 2 Enlaces de Dados 1 Conexo Fsica Figura 2 As sete camadas de referncia do modelo RM-OSI O propsito do modelo fornecer uma base comum para o desenvolvimento coordenado de padres para a interconexo de sistemas. O modelo no trata questes de implementao. Conceitualmente o modelo OSI (Open Systems Interconnection) no define uma arquitetura, j que no especifica os servios e protocolos de cada camada, apenas indica o que cada uma deve fazer (NUNES, 1999). Desta forma dois sistemas obedecendo o modelo OSI podem no interagir, por oferecer protocolos e servios incompatveis nas suas camadas. Outro aspecto relevante do modelo OSI que o mesmo foi concebido para redes homogneas e distribudas. A definio das camadas do modelo OSI especifica o seguinte: Nvel Fsico (1): Permite o envio de cadeias de bits pela rede sem se preocupar com o significado dos bits ou com o modo como so agrupados. Especifica um padro para interconexo fsica entre estaes e comutadores de pacotes de rede, e tambm os procedimentos usados para transferir pacotes de uma mquina para outra. No modelo de referncia, o nvel 1 especifica a interconexo fsica, incluindo as caractersticas eltricas de voltagem e corrente. Nvel de Enlace de Dados (2): Neste nvel a unidade de dados chama-se quadro. Este nvel detecta e opcionalmente corrige erros no nvel fsico. Particiona a cadeia de bits em quadros de forma a incluir dados que possam garantir deteco de erros. Tambm responsvel por evitar que o transmissor envie mais dados ao receptor do que este possa receber. Para isso usa mtodos de controle de fluxo. O protocolo deste nvel responsvel por definir o formato dos quadros e especificar como as duas mquinas reconhecem os limites deste. Nvel de Rede (3): Fornece ao nvel de rede uma independncia quanto a questes de chaveamento e roteamento associado com a conexo da rede. Duas filosofias de servios so oferecidas: servio de datagrama (no orientado a conexo), onde cada pacote carrega por completo o endereo do destino e servio de circuito virtual (orientado a conexo), onde o transmissor inicialmente envia pacotes para 17 estabelecer a conexo. Ao circuito dado um nmero que representa a conexo, que usada pelos outros pacotes. O software presente neste nvel deve reunir os pacotes na forma que a rede espera e usa o nvel de Enlace de Dados para transferi-los at os comutadores de pacotes. Nvel de Transporte (4): Tem como funo fornecer os seguintes servios: - comunicao fim-a-fim (origem e destino) confivel, uma vez que o nvel de rede no garante a entrega dos pacotes, nem sua ordem; - otimizao de conexes de rede utilizando multiplexao (vrias conexes de transporte partilhando a mesma conexo de rede) ou splitting (uma conexo de transporte ligada a vrias conexes de rede); - controle de fluxo; - controle fim-a-fim; - deteco e recuperao de erros; - segmentao de mensagens. Apesar das camadas inferiores de protocolos fornecerem verificao confivel de cada transferncia, a camada fim-a-fim faz outra verificao para se certificar de que nenhuma mquina no meio falhou. Nvel de Sesso (5): Fornece servios para estruturar os circuitos oferecidos pelo nvel de transporte. Os servios deste nvel so: - gerenciamento de tokens: controlam a posse e a passagem do token entre entidades de aplicao que esto utilizando o servio; - controle de dilogo: permitem retomar um dilogo interrompido por falha de rede; - gerenciamento de atividades: partes do intercmbio de dados. Nvel de Apresentao (6): Fornece servios para aplicativos, tais como: - transformao de dados, com criptografia e compresso de textos; - formatao de dados tais como converso de padres entre redes; - seleo de sintaxe adequada entre entidades; - conexo de apresentao. Nvel de Aplicao (7): Fornece funes de gerenciamento e mecanismos genricos de suporte construo de aplicaes distribudas. Cada camada comunica-se com sua semelhante em outro computador. Quando a informao passada de uma camada para outra inferior, um cabealho adicionado aos dados para indicar de onde a informao vem e para onde vai. A Figura 3 exemplifica como os dados so passados de uma camada para a seguinte, onde os blocos de cabealho e dados de uma camada so os dados da prxima camada. 18 Estao A Estao B Aplicativo Mensagem Aplicativo Transporte Cabealho Dados Transporte Interligao de rede Cabealho Dados Interligao de rede Interface de redes Cabealho Dados Interface de redes Pacote idntico Datagrama idntico Rede Fsica Quadro idntico Figura 3 Dados sendo passados entre as camadas 2.3 INTERLIGAO EM REDE O desenvolvimento da arquitetura RM-OSI foi patrocinada pelo DARPA (Defence Advanced Research Projects Agency) (COMER e STEVENS, 1999a, p. 41). Esta arquitetura baseia-se em um servio de transporte orientado conexo, determinado pelo protocolo TCP e um servio de rede no orientado conexo, datagrama no confivel, determinado pelo UDP, usando o IP para transportar mensagens entre mquinas. A arquitetura Internet d nfase interconexo de redes com diferentes tecnologias. Este modelo foi concebido em quatro camadas, tal como o modelo apresentado na Figura 4. Camada Conceitual Objetos Passados entre Camadas 4 Aplicao Mensagens ou Fluxos 3 Transporte Pacotes de Protocolos de Transporte 2 Interrede Datagramas IP 1 Interface de Redes Quadros de Redes Especficos Hardware Figura 4 As quatro camadas conceituais da arquitetura de software TCP/IP 19 A descrio de cada camada a seguinte: Nvel Interface de Redes (1): Compatibiliza a tecnologia especfica de cada rede ao protocolo IP. Recebe os datagramas IP do nvel interrede e os transmite atravs da rede especfica. Nvel Interrede ou Camada Internet (2): Responsvel pela transferncia de dados pela interrede, da mquina origem ao destino. Recebe do nvel de transporte os pedidos de transmisso de pacotes j com o endereo de onde devem ser entregues. O pacote encapsulado em um datagrama IP e o algoritmo de roteamento executado. Este nvel tambm processa pacotes recebidos das interfaces de rede. Esta camada responsvel por enviar mensagens de controle e de erro ICMP e tratar as mensagens ICMP que chegam. Nvel de Transporte (3): Permite a comunicao fim-a-fim entre as aplicaes. O protocolo TCP possui servios de: controle de erro, controle de fluxo, seqenciamento e multiplexao de acesso ao nvel interrede. O protocolo UDP tem apenas multiplexao e demultiplexao do acesso ao nvel interrede. Nvel de Aplicativo (4): Usurios utilizam programas de aplicao para acessar servios disponveis na interrede. Aplicaes interagem com o nvel de transporte para enviar e receber dados. As aplicaes podem utilizar o servio de transporte orientado a conexo, ou no orientado a conexo. A arquitetura de interligao em rede com nveis de abstrao, onde cada nvel executa uma dada tarefa, possibilitou que a tecnologia de cada nvel fosse sendo aprimorada, sem que houvesse interferncia nos demais nveis. Segundo Comer e Stevens (1999a, p. 100), o grande sucesso desta organizao hierrquica ocorreu porque esta arquitetura surpreendentemente eficiente e adaptvel. Apesar da diviso em camadas ser extremamente til, servindo como base para a implementao do projeto de protocolo, seu uso de forma rgida pode resultar em algoritmos extremamente ineficientes. Desta forma o isolamento total entre as camadas no deve ser levado ao extremo, mas para que se tenha uma relao custo-benefcio aceitvel, a implementao deve permitir que haja difuso de dados entre camadas adjacentes. Existem algumas diferenas entre os modelos RM-OSI e TCP/IP, alm da simplificao no nvel de camadas proposto pela arquitetura Internet. Uma delas a tcnica para garantir segurana na transferncia de dados. O modelo OSI trata erros em vrios nveis enquanto o TCP/IP adota um esquema menos rgido, onde pacotes podem ser perdidos ou descartados e mesmo assim o protocolo garante a comunicao eficiente fim-a-fim. Salienta- se tambm que o modelo OSI, criado para descrever protocolos para uma nica rede, no contm um nvel especfico de roteamento de interligao em redes igual ao dos protocolos TCP/IP. 3 A PILHA DE PROTOCOLOS TCP/IP As referncias que so normalmente encontradas sobre implementao de protocolos para a Internet abordam arquiteturas que suportam ambientes multitarefas. Assim boa parte do material de referncia est voltada para sistemas com grande capacidade de processamento. A documentao base para qualquer implementao que vise manter o padro definido para o protocolo TCP/IP so os documentos chamados RFCs (Requests for Comments), que abordam detalhadamente sua implementao. Este material est disponvel para ser consultado livremente por qualquer pessoa ou entidade. Os RFCs podem ser obtidos em http://www.rfc.net. A tecnologia TCP/IP no pertence a nenhum fornecedor e a nenhuma sociedade profissional ou instituies responsveis pelos padres. Uma entidade chamada National Science Fundation (NSF) financia um grupo da ATeT para manter e distribuir informaes sobre TCP/IP e Internet global. Este grupo conhecido como Internet Network Information Center (INTERNIC), que trata de muitos detalhes administrativos para a Internet, alm de distribuir a documentao. A leitura desta documentao essencial para o correto entendimento dos padres de protocolos que esto em operao, pois estes fornecem todas as informaes que so utilizadas por quem deseja desenvolver protocolos compatveis com os padres da Internet. A base deste estudo foi a leitura das RFCs 768, 791, 792, 793 e 1180, as quais descrevem os protocolos que sero implementados e sua fundamentao. A leitura destes documentos fornece esclarecimento para que os modelos possam ser entendidos e assim orientar sua implementao, no caso, para o ambiente especfico ao qual o projeto se destina, ou seja, um sistema microprocessado com poucos recursos em funo de sua caractersticas de hardware. O trabalho de Dunkels (2001) uma obra de referncia nesta rea. Este trabalho traz a implementao de um servidor TCP/IP voltado para o processador 6502, e implementa o protocolo de forma a proporcionar bibliotecas para acesso aos servios de comunicao, criando com isso uma abstrao que separa a aplicao da implementao do protocolo. Esta abstrao criada usando-se o conceito conhecido como Socket (COMER e STEVENS, 1999a, p. 371) e desenvolvido inicialmente no sistema operacional BSD UNIX. 3.1 COMUNICAO SEGURA O protocolo TCP foi concebido para garantir uma comunicao segura entre duas estaes. Para isto a transmisso feita com o uso de numerao de seqncia nos pacotes 21 que so enviados, e com o uso de ACK (ACKnowledgement) para confirmar que os dados foram recebidos corretamente pela interface de rede responsvel pelo encaminhamento do pacote, a qual tambm pode ser o destino final, caso se trate de uma rede local onde os pacotes no tenham de ser roteados (RFC1180). Quando h a transmisso de dados em um pacote TCP, este colocado em uma fila de retransmisso e um temporizador (timer) associado ao pacote inicializado. Ao receber um ACK o segmento apagado da fila de retransmisso. Se o ACK no for recebido antes do trmino da contagem do temporizador, o segmento retransmitido. O recebimento de um ACK no garante que os dados chegaram ao destino. Quem deve garantir que os dados sejam corretamente recebidos a estao remota, a qual tem a responsabilidade de informar de que pacotes necessita para continuar montando a mensagem. Para garantir o fluxo de dados entre duas conexes TCP, um mecanismo de controle de fluxo empregado. A estao destino informa sua janela de dados para a estao de origem. Esta janela informa o nmero de octetos (bytes), iniciando com o cdigo de ACK (confirmao), assim a estao receptora estar preparada para a recepo de dados. Segundo Comer e Stevens (1999a, p. 212), a interface entre programas aplicativos e o servio TCP/IP de transmisso confivel pode ser representada por cinco caractersticas: Orientao do stream (fluxo de dados): O servio de transmisso de streams da mquina de destino passa para o receptor exatamente a mesma seqncia de octetos que o transmissor passa para ele na mquina de origem. Conexo de circuito virtual: Uma conexo vista por programas aplicativos como um circuito de hardware dedicado, onde a confiabilidade proporcionada pelo servio de transmisso de fluxo de dados. Esta abstrao proporcionada aos aplicativos de forma transparente, mas para isto h uma srie de interaes entre transmissor e receptor. Transmisso bufferizada: O protocolo livre para manipular o tamanho dos pacotes de forma mais adequada, a fim de proporcionar o uso adequado do meio de transmisso, armazenando dados para reuni-los em blocos maiores ou particionando-os para que sejam transmitidos dentro de blocos menores. Ao final de recepo, o protocolo entrega os dados exatamente na mesma ordem em que foram enviados. Stream desestruturado: O servio de stream TCP/IP no reconhece os dados que manipula. Estes so tratados como uma seqncia de bits. Conexo full duplex: As conexes fornecidas pelo servio de stream TCP/IP permitem transferncia em ambas as direes. Estas so as caractersticas que o protocolo disponibiliza na forma de propriedades ou caractersticas de sua implementao. Cabe observar que o conjunto de protocolos que torna possvel a existncia destas caractersticas. Isoladamente cada protocolo implementa aes que fazem que o conjunto seja responsvel pelo desempenho observado em cada nvel. 3.2 ESTABELECIMENTO DE CONEXES O protocolo TCP foi concebido para ser executado em ambiente multitarefa, onde mltiplas conexes podem estar em andamento simultaneamente. Para que isto possa ocorrer foi criado o conceito de porta de conexo. Este identificador utilizado para isolar conexes em uma estao e associar estas a determinados tipos de servios. Assim os processos que 22 utilizam o TCP associam suas conexes a portas. Exemplos de portas atribudas servios so: 7: Eco. Utilizada normalmente para verificar se um determinado servidor encontra-se ativo; 20: FTP (File Transfer Protocol); 23: TELNET; 80: HTTP (Hypertext Transfer Protocol). Atravs da mquina de estados apresentada na seo 3.4 possvel descrever os passos necessrios para que processos possam se utilizar do TCP, estes devem solicitar uma conexo via uma porta, para isto implementada a chamada ao estado OPEN, para a qual so passados a porta e os dados da conexo remota. Quando uma conexo estabelecida, o processo recebe um identificador que dever ser utilizado nas chamadas subseqentes. As informaes desta conexo so armazenadas em uma estrutura chamada TCB (Transmission Control Block). Uma conexo pode ser realizada por iniciativa local ou remota. O processo de conexo iniciado pela estao que deseja enviar ou receber dados. Para isto ela toma a iniciativa de conexo, enviando pacotes necessrios para estabelecer uma conexo TCP. Este processo assume que o computador remoto, ao qual se est solicitando a conexo, est em estado de escuta (LISTEN, Figura 7), onde ele estar aguardando chegadas de conexes. Para que seja aceita uma conexo endereada a qualquer porta, o estado LISTEN deve ser aberto com a porta 0 (zero). De outra forma, somente para a porta especificada que sero aceitas conexes. Para que haja o estabelecimento de uma conexo, necessrio que as duas estaes troquem dados iniciais, envolvendo a troca de trs mensagens utilizando-se do flag de sincronismo SYN (FLAGS, Figura 6). Uma conexo iniciada com a retribuio de um segmento contendo SYN e a criao do TCB correspondente. Uma conexo dita estabelecida quando as portas local e remota so as mesmas e h troca de seqncia de sincronismo. Para que uma conexo possa ser desfeita, deve existir troca de segmentos que contenham o flag FIN, desta forma os processos sero notificados desta situao. O protocolo TCP especifica o procedimento para estabelecimento de uma conexo entre duas estaes conectadas Internet. Este procedimento conhecido como three-way handshake, sendo mostrado na Figura 5 e descrito na RFC793. A especificao das regras de operao para este procedimento de conexo, fazem com que este mtodo reduza a possibilidade de haver falsas conexes, mas a principal razo para sua utilizao prevenir duplicao de conexes j existentes, o que causaria uma srie de confuses. Isto assegurado utilizando-se mensagens de controle e reinicializaes de forma planejada. Partindo-se do estado CLOSED, a estao que deseja estabelecer uma conexo, inicia enviando um segmento com o flag SYN. A estao receptora devolve outro segmento com os flags SYN e ACK, indicando que recebeu a requisio e aceitou o pedido. Neste momento a estao que iniciou a conexo passa para o estado ESTABLISHED, e envia uma confirmao para a estao remota com o flag ACK ligado, assim esta recebe a confirmao que necessita para passar para o estado ESTABLISHED. O controle de fluxo faz parte da especificao do protocolo TCP, este estabelece regras para que a troca de dados entre as estaes esteja adaptada s caractersticas de cada 23 estao. Isto realizado por meio de negociao do controle de fluxo, visando adequar o tamanho da janela de dados capacidade das estaes. Envia SYN Recebe SYN Envia SYN + ACK Recebe SYN+ACK Envia ACK Recebe ACK TCP A TCP B Figura 5 Estabelecimento de conexo inicial O envio de dados deve ser feito atravs de uma chamada funo SEND, que cria um isolamento dos detalhes do protocolo para a aplicao, utilizando os conceitos de abstrao socket. Para cada poro de dados uma nova chamada deve ser feita. O protocolo permite tratamento de dados urgentes, fazendo com que os dados sejam entregues imediatamente ao destino, para isto existe um flag chamado PSH (FLAGS, Figura 6), que pode ser definido. O destino ao perceber o flag PSH disponibiliza os dados contidos em seu buffer imediatamente para a aplicao, descartando tratamento de temporizao ou verificao de seqncia de pacotes. O envio de dados pelo TCP permite que os dados sejam quebrados em blocos adequados conexo vigente, ou mesmo conter dados de mltiplas chamadas funo SEND. 3.3 ESPECIFICAO TCP Os segmentos TCP so enviados em blocos chamados pacotes. Junto aos dados includo um cabealho (header) que contm informaes especficas do protocolo, que descrito em RFC793 e RFC1180. O formato do cabealho mostrado na Figura 6. Este cabealho tem os seguintes campos: source port (16 bits): nmero da porta origem, que identifica o processo que enviou os dados; destination port (16 bits): nmero da porta destino, que identifica o processo remoto que deve tratar os dados enviados; sequence number (32 bits): o nmero do primeiro octeto (byte) dentro do segmento (exceto se o flag SYN estiver presente). Se o flag SYN estiver presente este representa o primeiro nmero de seqncia (ISN); acknowledgment number (32 bits): se o flag ACK estiver definido este campo ter o valor do prximo nmero de seqncia esperado; data offset (4 bits): o nmero de palavras (32 bits) que compem o cabealho TCP; reserved (6 bits): reservado para uso futuro, deve ser zero; flags (6 bits): 24 - URG: especifica dados urgentes; - ACK: ACKNOWLEDMENT (mensagem de confirmao); - PSH: funo Push; - RST: encerra a conexo; - SYN: sincroniza o nmero de seqncia; - FIN: indica que no h mais dados; window (16 bits): tamanho da janela de dados que o protocolo TCP espera receber; checksum (16 bits): soma de verificao dos dados; urgent pointer (16 bits): ponteiro para os dados urgentes, usado somente quando o flag URG estiver definido, indica o final da rea dos dados urgentes; options (24 bits): este campo no requerido para a maioria dos datagramas, utilizado para testes e depurao; padding (8 bits): este campo varivel, utilizado para preenchimento, de forma que a barreira limite de trmino do cabealho acabe em mltiplos de 16 bits. 32 bits Source port Destination port Sequence number Acknowledgment number Data offset Reserved Flags Window Checksum Urgent pointer Options (+ padding) Data (variable) Figura 6 Formato do cabealho TCP 3.4 MQUINA DE ESTADOS possvel representar o funcionamento do protocolo TCP como uma mquina de estados (Figura 7), como descrito na especificao do protocolo (RFC 793) e comentada por Comer e Stevens (1999a, p. 242; 1999b, p. 185). Esta mquina de estados no representa totalmente todas as interaes, somente o estado macroscpico, pois cada estado pode conter mais de um tratamento para os eventos. H muitas situaes que so controladas em funo de contadores e relgios. Por exemplo, para garantir que os dados cheguem ao destino, utilizando ao mximo a banda disponvel, so implementados algoritmos que fazem avaliao constante de erros e time-outs. A flexibilidade e adaptabilidade do protocolo TCP, que o tornou o protocolo padro da Internet amparado em muitos de seus detalhes de operao, que no so mostrados ou representados em suas mquinas de estados. No trabalho de Dunkels (2001), h uma nova 25 abordagem para a mquina de estados implementada. Esta nova abordagem procura otimizar os estados que no so crticos, dentro da implementao proposta. O estabelecimento de uma conexo pode ser exemplificado atravs do funcionamento da mquina de estados. So percorridos os passos necessrios para o estabelecimento de uma conexo, assumindo que tanto o cliente como o servidor tem a mesma mquina de estados com base no esquema mostrado na Figura 7. Seu modo de operao tem a seqncia descrita abaixo: o servidor entra em modo de LISTEN (open passivo) e espera at que um cliente faa uma conexo; quando uma estao cliente emite um open ativo, ele faz com que o software TCP envie um segmento SYN ao servidor e entra no estado SYN-SENT; o servidor ao receber SYN, responde com um segmento SYN e um ACK, cria um TCB e passa para o estado SYN-RECEIVED; quando o segmento SYN e ACK chega ao cliente, este responde com um ACK e passa do estado SYN-SENT para o estado ESTABLISHED; finalmente, quando o ACK do cliente chega ao servidor, este passa para o estado ESTABLISHED. O TCP utiliza uma tcnica simples para garantir a entrega de dados: a confirmao positiva com retransmisso (piggyback). A cada pacote recebido o receptor informa ao transmissor (ACK) qual o prximo byte do fluxo remoto que ele espera receber. Esta informao colocada no cabealho TCP, no campo acknowledgment number. Outra informao importante que o protocolo trata o campo sequence number, o qual informa qual o nmero do primeiro byte do fluxo que est sendo enviado. Estas informaes representam a numerao seqencial dos bytes da rea de dados que esto fluindo entre receptor e transmissor. A implementao destas informaes utilizada pelo protocolo para garantir que os dados cheguem ao destino, permitindo que o protocolo fornea o servio para qual ele foi projetado, que a garantia de entrega dos dados. Uma implementao que pretenda ser otimizada por restries impostas pelo ambiente onde ser utilizado, dever manter o tratamento para estes campos, pois so fundamentais para o funcionamento adequado do protocolo. 3.5 PROTOCOLO IP Conforme Comer e Stevens (1999a, p. 122), o objetivo do protocolo IP fornecer uma rede virtual com vrias redes fsicas que oferea um servio de entrega de datagramas sem conexo. Este nvel no se preocupa com a integridade dos dados. O protocolo IP implementa o conceito da entrega de pacotes sem conexo. Esta denominao especifica que cada pacote independente dos demais. Um certo nmero de pacotes enviados podem trafegar por vrios percursos diferentes, serem perdidos, danificados, ou mesmo chegar ao destino fora de ordem. Os aspectos mais relevantes que o protocolo implementa so: fragmentao de pacotes, adequando o tamanho dos fragmentos capacidade da rede, roteamento, ou seja, a escolha de um caminho por onde os pacotes sero enviados. Alm disso o protocolo especifica as regras de como os dados devem ser tratados por roteadores e estaes durante sua permanncia na rede. 26 incio algo / reset CLOSED close open passivo open ativo / syn LISTEN send / syn reset syn / syn + ack syn / syn + ack SYN SENT close / timeout / reset SYN RECVD ack ESTAB- LISHED syn + ack / syn CLOSE WAIT fin / ack close / fin CLOSING LAST ACK ack / fin / ack close / fin close / fin FIN WAIT-1 FIN WAIT-2 ack / TIME WAIT ack / timeout aps 2 milisegundos ack / Figura 7 Mquina de estados TCP (RFC793, p. 23) 27 Os servios que o protocolo IP fornece so atendidos por quatro caractersticas implementadas em seu cabealho, so eles: Tipo de Servio, Tempo de Vida de um Pacote, campo de Opes e dado de Soma de Verificao de integridade de cabealho. A qualidade do servio de entrega desejado especificada no campo Tipo de Servio. Este campo pode especificar o uso de servios desejados para o pacote e usados por entidades da rede para tomada de decises de roteamento. O Tempo de Vida de um Pacote especifica o quanto um pacote deve permanecer na rede at que ele seja descartado, antes de chegar ao destino. Sua utilidade pode ser percebida pelo fato de que pacotes no entregues poderiam ficar trafegando na rede indefinidamente, causando trafego desnecessrio. O campo de Opes prov meios de controle para situaes no muito comuns e que normalmente no so utilizadas para a maioria das comunicaes. H tratamento para segurana, roteamento e relgios. A integridade do cabealho assegurada pelo campo Soma de Verificao, que pode ser conferido para validao. Os dados enviados junto ao cabealho podem conter erros, mas no h qualquer indicao para sua verificao. Em caso de um cabealho estar corrompido, o pacote automaticamente descartado. Este modelo de operao pressupe que os integrantes da rede tenham mdulos IP idnticos residentes em cada unidade que faz parte desta rede. Desta forma podem compartilhar das caractersticas que o protocolo implementa. 3.6 FRAGMENTAO A protocolo IP usa campos de seu cabealho para tratar a fragmentao e remontagem de pacotes. A fragmentao utilizada para adequar redes onde os fluxo de dados so de diferentes capacidades. Esta caracterstica de adequao amparada por outra muito importante: cada pacote tratado como uma unidade independente, no relacionado com nenhum outro pacote. A fragmentao ocorre independentemente de qualquer ao por parte da origem. Esta pode enviar pacotes do tamanho que julgar necessrio, mas o uso de tamanho de pacotes adequado ao tamanho utilizado na rede permite maior eficincia, pois reduz a necessidade de fragmentao. O desempenho tende a ser seriamente afetado em redes onde h necessidade de fragmentao, pois, em caso de perda de algum pacote fragmentado necessrio para remontagem no destino, todos os demais pacotes sero descartados. Por definio qualquer destino deve estar apto a receber um datagrama enviado com tamanho de 68 bytes, sem necessidade de fragmentao. Isto ocorre porque um cabealho IP mnimo tem 60 bytes e uma rea de dados mnima tem o tamanho de 8 bytes. Em caso de datagramas que no devem ser fragmentados h o uso de um bit sinalizador (DF- Dont Fragment). Este bit informa que determinado datagrama no deve ser fragmentado para ser entregue ao seu destino. Em caso de recebimento de um datagrama com este bit ligado, a origem ir descart-lo automaticamente, se no houver recursos suficientes para realizar a remontagem do datagrama. 3.7 ROTEAMENTO Um dos objetivos do protocolo IP fornecer uma rede virtual que abranja vrias redes fsicas oferecendo servio de entrega de datagramas sem conexo aos protocolos de nvel superior. Para isto o protocolo IP escolhe qual o melhor caminho a ser dado para um 28 datagrama em funo de seu destino, dentre as vrias redes fsicas que esto disponveis. Esta deciso leva em considerao carga da rede, comprimento do datagrama e tipo de servio solicitado no cabealho do datagrama. De acordo com Comer e Stevens (1999a, p. 122), a maioria dos programas de roteamento da interligao em rede no so to sofisticados na tomada de decises, estes selecionam rotas baseados em pressupostos fixos sobre caminhos mais curtos. O protocolo IP participa em conjunto com roteadores na tomada de decises de roteamento de datagramas. possvel classificar o roteamento em dois tipos: encaminhamento direto e encaminhamento indireto. O encaminhamento direto a transmisso de um datagrama, por meio de uma nica rede fsica entre duas mquinas. J o encaminhamento indireto se d quando o destino no se encontra na mesma rede fsica, exigindo que o datagrama seja passado para um roteador, conectado rede, que far a entrega. Quando o IP recebe um datagrama, este deve mapear o endereo IP do destino para um endereo fsico e entreg-lo ao hardware de rede. Para duas mquinas interligadas em uma mesma rede fsica no h envolvimento de roteadores. O transmissor sabe que o destino encontra-se em uma rede diretamente conectada. O algoritmo de roteamento IP emprega o uso de tabela de roteamento. Esta tabela armazena informaes sobre endereos de destinos e como acess-los. Seu contedo dinmico e vai mudando conforme o trfego de entrega bem sucedido. A idia armazenar o mximo de informaes que possam auxiliar na deciso de roteamento, mas deve ser avaliado o tamanho e a facilidade de manipulao dos dados armazenados. Endereos IP so formados por nmeros de 4 bytes (32 bits no total) e so manipulados de forma a permitir uma diviso em classes com capacidades para comportar diferentes tamanhos de redes. Sua construo foi dirigida visando tornar sua manipulao o mais eficiente possvel, com vistas a garantir altas taxas de desempenho por parte de roteadores. A definio do formato atribudo ao endereo de rede IP mostrado na Figura 8. H uma parte designada para representar um segmento de rede e outra para representar uma estao dentro desta rede. H essencialmente trs classes principais. Endereos do tipo A so usados para redes com muitas estaes, o tipo B para redes com tamanho mdio e o tipo C para redes pequenas mas com grande distribuio geogrfica. Classe Endereos Representao binria A 1-126.E.E.E 0nnnnnnn.bbbbbbbb.bbbbbbbb.bbbbbbbb B 128-191.E.E.E 10nnnnnn.nnnnnnnn.bbbbbbbb.bbbbbbbb C 192-223.E.E.E 110nnnnn.nnnnnnnn.nnnnnnnn.bbbbbbbb D 224-239.E.E.E 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx E 240-247.E.E.E 11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx Figura 8 Classes de redes IP 29 A classe A permite formar at 126 redes (7 bits), sendo cada rede capaz de enderear 2 24 estaes diferentes. Endereos com todos os bits em zero no so vlidos. A classe B permite formar 2 14 redes e endereamento de 65.535 estaes diferentes em cada n da rede. Com a classe C possvel criar 2 21 redes diferentes, sendo que cada rede poder enderear at 256 estaes (8 bits). A classe D utilizada para endereamento multicast, para difuso de pacotes entre estaes e redes. A classe D est definida como reservada para uso futuro. A manipulao por software permite criar redes virtuais com base no endereamento nico que uma estao pode ter na rede. As aplicaes que dedicam-se ao roteamento de pacotes tratam essencialmente os bits que identificam a rede, objetivando encaminhar os datagramas para a rede destino o mais rapidamente possvel, visto que devem ser processados por equipamentos de alto desempenho. 3.8 IP ORIENTADO POR HARDWARE H duas correntes de pensamento quanto forma de implementao do nvel de transporte, como pode ser observado no trabalho de Iren e Amer (1999). Uma busca a implementao do nvel de transporte orientado por hardware e outra direciona para transporte orientado aplicao. A corrente que busca o transporte orientado por hardware defende a implementao deste servio em sistemas de integrao em larga escala, do tipo circuitos VLSI e processadores dedicados. Defendem sua proposta argumentando que a necessidade do uso de temporizadores, interrupes e acesso a memria degradam a desempenho do protocolo de transporte. Assim defendem que seria necessrio o uso de arquiteturas dedicadas para esta finalidade. Os defensores do transporte em nvel de aplicao, argumentam que os atuais processadores fornecem os recursos necessrios para que a implementao se faa a nvel de sistema operacional, com vantagens para todos, visto que continuaria permitindo que sua atualizao tecnolgica no fique presa ao hardware. Esta, sem dvida, a forma mais conveniente de manter o protocolo sempre em contnuo desenvolvimento, visto que no restringe novas implementaes a alteraes de hardware. 3.9 ESPECIFICAO IP O datagrama IP encontra-se especificado em RFC791. A seguir sero descritos o cabealho (mostrado na Figura 9) e a finalidade de cada campo. 30 32 bits Version IHL Type-of-service Total length Identification Flags Fragment Offset Time-to-live Protocol Header checksum Source address Destination address Options (+ padding) Data (variable) Figura 9 Formato do cabealho IP Verso 4 Os campos que compem o cabealho de um pacote IP so: version (4 bits): utilizado para informar a verso do protocolo; IHL (4 bits): fornece o comprimento do cabealho em unidades de 32 bits; type-of-service (8 bits): determina como o datagrama deve ser tratado e est subdividido em cinco subcampos: - precedence (bits 0-2): especifica a precedncia do datagrama com valores variando de zero (precedncia normal) at sete (controle de rede); - D (bit 3): especifica o tipo de transporte que o datagrama deseja, quando definido solicita um intervalo baixo; - T (bit 4): especifica o tipo de transporte que o datagrama deseja, quando definido solicita um throughput alto; - R (bit 5): especifica o tipo de transporte que o datagrama deseja, quando definido solicita alta confiabilidade; - bits 6 e 7: reservado para uso futuro; total length (16 bits): fornecer o tamanho total do datagrama IP, incluindo o cabealho e os dados; identification (16 bits): nmero inteiro nico que identifica o datagrama (utilizado para controle de fragmentao de datagramas); flags (3 bits): bits de controle de fragmentao: - bit 0: reservado, deve ser zero; - bit 1: no fragmentar o datagrama; - bit 2: ltimo fragmento. fragment offset (13 bits): especifica o deslocamento do datagrama quando este fragmentado; time-to-live (8 bits): especifica o tempo em segundos, que o datagrama pode permanecer no sistema de interligao em rede antes de ser descartado; protocol (8 bits): especifica qual protocolo de alto nvel foi utilizado para criar a mensagem, que est sendo transportada na rea de dados do datagrama. Este dado esta especificado na RFC790, sendo 1 para ICMP, 6 para TCP e 17 para UDP; 31 header checksum (16 bits): soma de verificao dos dados do cabealho somente. Os dados so somados em unidade de 16 bits em complemento de 1; source address (32 bits): endereo IP do transmissor; destination address (32 bits): endereo IP do destino do datagrama; options (24 bits): campo utilizado para testes ou depurao da rede. No necessrio em todo o datagrama. Este campo pode variar de tamanho conforme as opes selecionadas; padding (N bits): utilizado para preenchimento com bits visando garantir que o cabealho seja mltiplo de palavras de 32 bits (deve ser preenchido com zeros). Conforme Comer e Stevens (1999a, p. 101), o servio mais importante da interligao em redes consiste em um sistema de entrega de pacotes. O protocolo IP define este mecanismo de transmisso sem conexo no confivel dos programas de interligao em rede TCP/IP. O protocolo define a unidade bsica de transferncia de dados utilizada atravs de uma interligao em rede, fazendo com que seja especificado exatamente o formato de todos os dados que trafegam pela interligao. Outra funcionalidade que o IP apresenta o roteamento de pacotes, escolhendo um caminho por onde os dados sero enviados. Outro aspecto que sua estrutura de dados propicia informar como os roteadores devem processar os pacotes, como e quando as mensagens de erro devem ser geradas e as condies segundo as quais os pacotes podem ser descartados. 3.10 MODELO DE OPERAO IP Estaes conectadas em uma rede TCP/IP devem se comportar de forma similar no tratamento dos dados que trafegam na rede. A especificao do protocolo IP descreve detalhadamente como este comportamento deve ser. Cada programador ao ler esta especificao procura priorizar diferentes recursos descritos no protocolo. Assim, diferentes implementaes so construdas, podendo diferir uma da outra. Para tentar minimizar problemas de compatibilidade h a especificao de um mnimo de recursos que uma interface IP deve atender. Na RFC 791 est descrita a interface mnima que deve ser implementada. 3.11 MENSAGENS DE ERRO (ICMP) O protocolo IP implementa a entrega no segura de pacotes, mas para dar um mnimo de condies de administrao de falhas na rede, foi criado o protocolo ICMP (Internet Control Message Protocol). Este trafega sob o datagrama IP, em sua rea de dados, e tem o objetivo de criar condies para deteco de falhas na entrega ou roteamento de pacotes. Sua especificao est descrita na RFC792. O motivo de encapsular mensagens ICMP no protocolo IP, que este necessita trafegar por vrias redes at alcanar seu destino. Uma funcionalidade importante implementada por aplicaes que fornecem a rota percorrida por pacotes at o seu destino. Estas aplicaes utilizam o ICMP como forma de obterem as informaes deste trajeto. A tcnica empregada faz com que o TTL (Time To Live) das mensagens ICMP enviadas, tenham valores que variam de 1 at o nmero de saltos de roteadores que se espera at o destino. Cada pacote que passa por um roteador tem seu TTL 32 decrementado em uma unidade. Ao atingir o valor zero os pacotes so descartados, mas a maioria dos roteadores mandam de volta uma mensagem ao remetente, indicando que o pacote foi descartado. Esta informao de retorno traz os dados que indicam at onde os pacotes foram. O formato das mensagens ICMP descrito na Figura 10. 32 bits Type Code Checksum Unused Internet Header + 64 bits of Original Data Datagram Figura 10 Formato do cabealho do protocolo ICMP Cada mensagem ICMP tem um formato diferente dependendo de seu propsito, no entanto alguns campos iniciais so comuns: type (8 bits): identifica o tipo de mensagem. O campo type pode ter os seguintes valores e significados entre outros: - 0: resposta de eco; - 3: destino no acessvel; - 4: dissipao na origem (congestionamento); - 5: redirecionamento; - 8: solicitao de eco; - 11: tempo excedido para um datagrama; - 12: problemas de parmetro no datagrama; - 13: solicitao de indicao de hora; - 14: resposta de indicao de hora; - 15: solicitao de mscara de endereo; - 16: resposta de mscara de endereo. code (8 bits): informa detalhes sobre o tipo de mensagem; checksum (16 bits): soma de verificao que abrange somente os dados ICMP. Embora todos estes tipos de mensagem estejam disponveis, a sua implementao em sistemas com poucos recursos no essencial. Para este projeto a implementao se restringiu ao tratamento dos cdigos 0, 8 e 12, visto que os demais cdigos abordam informaes e tratamentos que se implementados iro contra a abordagem que busca um desempenho otimizado. H essencialmente duas classes de mensagens: uma de origem em estaes, que normalmente indica destino inatingvel ou uma resposta de eco, e outra de origem em roteadores, normalmente indicando problemas na rede ou rotas livres. Mensagens de erro ICMP, devem incluir os primeiros 60 bytes do cabealho da mensagem original, logo aps o cabealho ICMP. Desta forma a origem da mensagem poder identificar o datagrama e tomar as medidas necessrias para corrigir o problema. 33 3.12 USER DATAGRAM PROTOCOL (UDP) O UDP implementa um servio de transmisso sem conexo, no confivel, usando o IP para transportar mensagens entre mquinas. Sua especificao esta descrita na RFC768. Este protocolo implementa um servio sem garantia de entrega de datagramas, ou seja, um datagrama pode ser perdido, entregue em duplicidade ao destino ou mesmo entregue fora de ordem. Tambm no implementa controle de integridade de dados. Seu formato de cabealho descrito na Figura 11. Pelas suas caractersticas utilizado para transportar dados onde a importncia maior seja o fluxo e no sua integridade, como, por exemplo, a transmisso de uma vdeo conferncia onde uma frao de dados perdidos no compromete o restante da informao. No caso deste projeto uma possvel aplicao abordaria a simples recepo de dados, que poderiam ser monitorados por uma estao cliente. Neste caso a simplicidade deste protocolo atenderia s necessidades. O protocolo UDP fornece suporte para endereamento de portas, permitindo assim distinguir qual aplicao deve receber determinado pacote de dados que tenha chegado. Desta forma, vrias aplicaes distintas, executando em uma mesma mquina, podem fazer acesso assncrono dados remotos. Seu desempenho pode ser considerado muito bom em redes com baixa taxa de erros, mas tende a ser problemtico em redes de baixa qualidade. Estes fatores devem ser levados em considerao durante a sua implementao. 32 bits Source port Destination port Length Checksum Figura 11 Formato do cabealho UDP Os campos do cabealho UDP so: source port (16 bits): porta do protocolo que foi obtida na conexo (opcional, quando no usada deve ser zero); destination (16 bits): porta do protocolo UPD cliente destino, aberta pelo processo que espera receber/transmitir dados; length (16 bits): contm o comprimento do datagrama UPD, incluindo cabealho e dados; checksum (16 bits): soma de verificao de 16 bits em complemento de um de todo o datagrama mais um pseudocabealho, que no enviado, formado pelo endereo IP origem, endereo IP destino, 8 bits em zero, 8 bits do cdigo do protocolo (17 para UDP) e o campo comprimento (sem o pseudocabealho). 4 A INTERFACE SOCKET O conceito da abstrao socket originou-se no sistema operacional Unix. Um socket pode ser visto como uma generalizao do mecanismo de acesso a arquivos do Unix, conforme Comer e Stevens (1999a, p. 371), pois este incorpora servios e dispositivos ao sistema de arquivos. Um socket sempre ter um tipo, de acordo com as propriedades de comunicao e um ou mais processos associados a ele. Um socket uma forma de IPC (Interprocess Communication) genrica que permite comunicao entre processos em rede, mas pode ser utilizado para comunicao entre processos na mesma mquina. Esta abstrao procura isolar os detalhes de funcionamento dos protocolos formando uma interface de acesso para os aplicativos, representada na Figura 12. Na verdade os projetistas tentaram criar um mecanismo geral para acomodar muitos protocolos, aumentando substancialmente a complexidade da interface de E/S. Socket Protocolo 1 Protocolo 2 Protocolo 3 Interface IP Interface 1 Interface 2 Interface 3 Figura 12 A interface socket e os protocolos Mas os protocolos de rede no so to simples como um arquivo de acesso local, por exemplo. Por isto a interface socket permite que alguns detalhes possam ser especificados pelo programador. Assim foram criadas novas bibliotecas para acomodar a grande variedade de protocolos e suas caractersticas, possibilitando que os programadores possam ter acesso a detalhes que podem ser definidos pela aplicao, conforme sua convenincia. 35 No existe uma padronizao a respeito do conceito de interface socket, apenas este modelo se difundiu tornando-se amplamente utilizado por vrios sistemas operacionais (DUNKELS, 2001, p. 12). 4.1 A CHAMADA SOCKET() Algumas chamadas de sistema so disponibilizadas para que aplicaes tenham acesso aos recursos de dispositivos de transmisso e recepo de dados. Sempre que uma aplicao deseja usar um servio de comunicao este deve abrir o dispositivo, efetuar a operao desejada e fechar o dispositivo. No ambiente UNIX (BSD), a chamada socket() cria o socket solicitado. Esta chamada necessita de trs argumentos e retorna um inteiro: s = socket ( DOMNIO, TIPO, PROTOCOL ) Se bem sucedida, a chamada retorna um inteiro que deve ser utilizado para identificar o recurso disponibilizado nas chamadas seguintes. O parmetro DOMNIO especifica o domnio onde o socket criado, definindo o protocolo e o espao de nomes. O parmetro TIPO especifica o tipo de comunicao desejado, orientado conexo ou sem orientao conexo. O terceiro parmetro pode ser utilizado para selecionar um protocolo especfico. Neste caso o programador passa a determinar o protocolo que deve ser utilizado, sendo necessrio amplo conhecimento dos detalhes do protocolo escolhido. Para finalizar o uso do socket e liberar os recursos deve ser realizada uma chamada close(), que tem o seguinte formato: int close ( socket ) Esta chamada utiliza o parmetro passado como argumento para determinar o socket a ser fechado. 4.2 ASSOCIAO DE PORTAS AO SOCKET Ao ser criado um socket, este no est associado nenhuma porta especfica de endereo local ou remoto. Dependendo do tipo de aplicao, pode ser necessrio especificar que um determinado socket passe a tratar uma porta. Existem muitos aplicativos que tem seu funcionamento associado a determinados nmeros de portas, alguns foram citados no item 3.2. A associao de portas a um socket realizada atravs da chamada bind(): int bind ( socket, LOCALADDR, ADDRLEN ) A chamada recebe um parmetro que associa o socket porta especificada na estrutura LOCALADDR. Esta estrutura contm o endereo da mquina, o protocolo e o nmero da porta que deve ser utilizada. Em caso de falha, um cdigo de erro retornado. Do mesmo modo que necessitamos especificar uma porta local para um socket, pode ser til associ-lo a uma porta remota. Aplicativos que utilizam servio de datagramas sem conexo no necessitam especificar uma porta, necessariamente. Mas, se optar por um servio de entrega confivel, deve existir uma associao a uma porta remota. Assim foi criada a chamada connect(), que apresenta a seguinte sintaxe: 36 int connect ( socket, DESTADDR, ADDLEN ) O argumento socket identifica o descritor socket que deve ser associado. DESTADDR uma estrutura, que especifica o endereo do socket que deve ser vinculado. O terceiro parmetro informa o tamanho da estrutura DESTADDR. Em caso de falha, um erro retornado. Normalmente aps a criao de um socket, um programa servidor de comunicao usa uma chamada de sistema para permitir que ele possa receber conexes. Esta chamada tem o seguinte formato: int listen ( socket, LENGTH ) Esta chamada recebe o indicador do socket a ser utilizado e o tamanho da fila de conexes que o sistema deve disponibilizar. Esta chamada aplica-se somente para servios de entrega confivel. A chamada accept() bloqueia um processo at que seja estabelecida uma conexo ao respectivo socket. Seu formato : int accept ( socket, ADDR, ADDLEN ) A chamada accept() recebe o descritor do socket a ser tratado, o parmetro ADDR que fornece uma estrutura que contm o endereo e o tamanho desta estrutura. 4.3 ENVIANDO E RECEBENDO DADOS As operaes de envio e recebimento esto disponveis em vrias chamadas de sistema. Algumas delas so: send(), sento(), sendmsg(), write(), read(), recvfrom(), recvmsg(). As chamadas send(), write() e read() somente podem ser utilizadas com sockets conectados, pois no permitem que seja informado um nmero de porta em sua chamada. A chamada send tem o seguinte formato: int send ( socket, MESSAGE, LENGTH, FLAGS ) O parmetro socket especifica o socket a ser usado, o argumento MESSAGE indica os dados que devem ser enviados, LENGHT informa a quantidade de dados e o ltimo parmetro utilizado para controle da transmisso. Estes flags permitem que o programador tenha acesso aos detalhes especficos do protocolo. Pode-se, por exemplo, especificar que os dados devem ser tratados como dados urgentes. Algumas chamadas bloqueiam o processo durante sua execuo, at que estas sejam executadas ou retornem em caso de falha. A chamada write() tem esta caracterstica de operao. Seu formato : int write ( socket, MESSAGE, LENGTH ) O argumento socket indica o socket a ser utilizado, MESSAGE informa o endereo dos dados a serem transmitidos e LENGTH a quantidade de dados que deve ser tratada. Em caso de erro um cdigo retornado. A chamada sendto() permite que sejam enviados dados por um socket desconectado. Seu formato mostrado a seguir: int sendto ( socket, MESSAGE, LENGTH, FLAGS, DESTADDR, ADDLEN ) 37 Como pode ser observado, os quatro primeiros parmetros so os mesmos presentes na chamada send(). O parmetro DESTADDR especifica o endereo do destino e o parmetro seguinte informa o comprimento desse endereo. Um outro formato para a chamada sendto() est implementado com o nome sendmsg(), onde h somente trs parmetros, a fim de proporcionar uma chamada com menos argumentos. Os parmetros so passados em um estrutura. Esta chamada tem o seguinte formato: int sendmsg ( socket, MESSAGESTRUCT, FLAGS ) Para o recebimento de dados est disponvel a chamada read(). Esta chamada utilizada da mesma forma que no acesso a um arquivo, com exceo de que o primeiro parmetro passado, refere-se ao descritor de um socket. Seu formato o seguinte: int read ( socket, BUFFER, LENGTH ) O parmetro BUFFER indica o endereo de memria onde os dados sero armazenados. O parmetro LENGTH informa o tamanho da rea do BUFFER. Esta chamada utiliza um identificador de socket que deve estar conectado uma porta destino e bloqueia o processo at o retorno da chamada. Outro mtodo de recebimento de dados a chamada recvfrom(), esta chamada permite que seja informada a porta de entrada dos dados a serem recebidos. Seu formato : int recvfrom ( socket, BUFFER, LENGTH, FLAGS, FROMADDR, ADDRLEN) O parmetro socket especifica o descritor do qual os dados devem ser recebidos. BUFFER indica o endereo onde devem ser armazenados os dados e LENGTH o tamanho desta rea. O parmetro FLAGS permite controlar a recepo. FROMADDR um ponteiro para uma estrutura que contm o endereo do socket e ADDRLEN informa o tamanho desta estrutura. A forma simplificada da chamada recvfrom() recebe somente trs parmetros e tem o seguinte formato: int recvmsg ( socket, MESSAGESTRUCT, FLAGS ) Os parmetros so os mesmos utilizados na chamada sendmsg(), o que torna mais fcil enviar uma resposta para o origem da mensagem. 4.4 CHAMADAS AUXILIARES Existem muitas variaes no formato e no nmero de chamadas que permitem acesso aos recursos de comunicao e recepo de dados no ambiente de sistemas operacionais. Normalmente os protocolos destes sistemas fazem parte integrante destes ambientes. O objetivo destas chamadas propiciar uma interface amigvel para acesso aos recursos. Assim foram disponibilizadas muitas chamadas auxiliares para permitir maior flexibilidade na implementao de aplicaes. Entre elas, podemos citar: gethostbyname(): devolve o identificador de rede associado ao nome; inet_addr(): converte uma cadeia de caracteres contendo o IP no formato de rede; inet_toa(): converte um endereo de rede em uma cadeia de caracteres; getsockename(): utilizada para obter a estrutura associada a um socket. 38 Muitas chamadas so implementadas para atender necessidades especficas de cada sistema, visto que no h um padro definido, apenas um modelo a ser seguido, assim os programadores implementam chamadas que podem variar de nome, nmeros de parmetros necessrios ou mesmo a ao que se propem realizar, dependendo de cada implementao. Portanto a utilizao destes recursos est associada ao sistema onde foi implementado. Ao utilizar-se de outro sistema, onde estejam presentes chamadas de servio socket, importante que haja um estudo para reconhecimento e entendimento adequado de sua implementao. 5 PROJETO PROPOSTO O objetivo final deste projeto permitir que um sistema microprocessado possa de conectar-se Internet utilizando-se de uma pilha de protocolos TCP/IP especialmente implementada para este fim. O protocolo TCP foi implementado por ser este o protocolo padro da Internet. O TCP fornece um dos principais servios: a comunicao segura entre duas estaes. O protocolo UDP, por sua simplicidade, foi agregado ao projeto, pois a maioria dos recursos de que ele necessita sero implementados para atender aos requisitos do protocolo TCP. O protocolo IP fundamental nesta implementao, pois o meio pelo qual os pacotes so enviados ao nvel fsico, ao destino da conexo. Este tem o papel de fornecer aos nveis superiores a abstrao de uma rede virtual. Junto ao protocolo IP estar includo o protocolo ICMP, muito utilizado para tratamento de erros na rede. Para que uma aplicao possa utilizar os recursos implementados em forma de uma biblioteca, foi necessrio criar uma interface para disponibilizar estes recursos de comunicao, de forma a manter um isolamento e tornar seu uso mais simples e seguro. O projeto final inclui, alm da implementao da biblioteca, o desenvolvimento de um prottipo para que se possa realizar os testes e avaliaes. Para atingir estes objetivos muitos desafios foram sobrepujados. Alguns destes desafios so: Microcontrolador: Decidiu-se pelo uso de um determinado microcontrolador, o qual foi estudado. Isto envolveu conhecer como so controlados os recursos de memria, quais instrues esto disponveis (instruction set), quais recursos especiais ele apresenta e como utiliz-los. Como so tratadas as interrupes de hardware e de que forma devem ser utilizadas. Em muitos casos a linguagem de montagem ser utilizada como forma de garantir um cdigo mais eficiente e otimizado. Recursos do kit de hardware: por se tratar de um projeto com implementao prtica ser utilizado um kit de hardware, para que sejam realizados testes na implementao, assim, foi necessidade conhecer bem como funciona este kit e quais recursos ele disponibiliza. Conhecer completamente os recursos disponveis foi determinante para que a implementao pudesse tirar proveito destes. de acordo com a especificao do hardware que deve-se configurar corretamente a ferramenta de gerao de cdigo. SDCC: O compilador escolhido para a montagem dos cdigos tambm foi estudado. Somente com pleno conhecimento de suas limitaes foi possvel evitar falhas que podiam ser atribudas codificao. Alguns desafios foram conhecer 40 todas as ferramentas utilizadas e a forma como as mesmas so utilizadas, definir como as ferramentas so configuradas para as necessidades necessrias, que parmetros usam, etc. Pilha TCP/IP: Foi necessrio conhecer os detalhes de funcionamento que fazem com que cada protocolo tenha suas caractersticas prprias, como cada um interage com os demais, de que forma uma aplicao usar os recursos, quais pontos crticos de cada protocolo devem ter tratamento especial e qual a melhor forma de resolve-los (C ou linguagem de montagem). Aqui o conhecimento dos detalhes de funcionamento do hardware extremamente importante. Estes so alguns dos desafios que este estudo proporcionou nesta rea. Ambiente de testes: Toda implementao deve ter seu ambiente para depurao. Apesar da ferramenta escolhida proporcionar meios para simulaes, estes testes estaro restritos uma parte especfica do cdigo. No possvel uma simulao completa, j que h funes de gerenciamento do hardware sendo executadas, com interrupes de hardware sendo tratadas e bibliotecas sendo utilizadas. Foi necessrio um ambiente de testes para o projeto. Este ambiente envolveu um microcomputador sendo utilizado como cliente, conectado via cabo serial ao sistema em desenvolvimento. Este proporcionou os meios para captura do trfego de comunicao e auxiliou na depurao dos erros. Funes de Gerenciamento: Para que as funcionalidades que se deseja implementar sejam utilizadas foi necessrio que o hardware escolhido possua funes que permitam seu gerenciamento. Este foi implementado garantindo o uso adequado das interfaces disponveis, oferecendo recursos para que aplicaes possam tirar o melhor proveito possvel. Neste caso foi exigido amplo conhecimento dos recursos de hardware disponibilizados. O desenvolvimento de cada atividade no acorreu de forma isolada. Todas tem relao e devem ser priorizadas medida que o andamento de uma implique na realizao de outra. Para que o projeto ocorresse dentro do prazo proposto, cada tarefa e suas implicaes, foram avaliadas com antecedncia, quando possvel. 5.1 PROJETO DE SOFTWARE A implementao da Biblioteca TCP/IP para Ambientes Microprocessados foi realizada utilizando-se a tcnica de Engenharia Progressiva (PETERS e PEDRYCZ, 2001, p. 559). Esta tcnica um modelo simplificado da tcnica de desenvolvimento de software Ciclo de Vida Incremental. Parte-se de uma planejamento com especificao mnima. seguir iniciada a implementao e na seqncia os testes para verificao de conformidade. A medida que as especificaes vo sendo atendidas, novas so introduzidas, fazendo com que o ciclo volte a se repetir continuamente. O Modelo de desenvolvimento de software Ciclo de Vida Incremental pode ser visto na Figura 13. Algumas tcnicas de programao devem ser observadas nesta implementao, como, por exemplo, evitar flexibilidade desnecessria, isto pode tornar muito difcil a depurao e a localizao de erros posteriormente (MAGUIRE, 1994, p. 176). Ao mesmo tempo deve-se introduzir crticas em parmetros, evitando-se excessos, o que poderia, em determinados casos, causar degradao de desempenho. 41
Requisitos Projeto Implementao Testes Projeto Implementao Testes Projeto Implementao Testes Figura 13 Modelo de ciclo de vida incremental A fase de levantamento de requisitos foi realizada na avaliao de cada protocolo que foi implementado. Nesta fase obteve-se os dados que seriam necessrios manipular, seus relacionamentos e a definio de estruturas de dados. O projeto avaliou as prioridades, seqncia de operao, tamanhos de reas de dados volteis, definiu as funes e mdulos que podem ser compartilhados e interao entre mdulos. Durante a fase de implementao, alguns detalhes no previstos surgiram, os quais foram corrigidos reavaliando suas implicaes no planejamento existente. Uma boa prtica de codificao utilizada, foi a introduo de comentrios junto ao cdigo, a fim de facilitar seu entendimento e o posterior incremento de novos requisitos. Para tornar o cdigo apto a uma depurao mais amigvel, tambm foi introduzido cdigo que permite visualizar certos dados considerados relevantes. A fase de testes serviu para avaliar os requisitos implementados e o posterior incremento nas funcionalidades do projeto. 5.2 IMPLEMENTAO DO PROTOCOLO TCP/IP A pilha de protocolos TCP/IP foi criada de forma otimizada, tendo-se em mente que os recursos disponibilizados so limitados. O uso da UCP (Unidade Central de Processamento) estar sendo disputado por vrias necessidades. Haver interrupes de hardware, funes de gerenciamento controlando os dispositivos de interface, uma possvel aplicao sendo executada. Isto dever ser administrado de forma que no haja alocao exclusiva da UCP. Alguns detalhes de cada protocolo foram otimizados para atingir um uso mais racional dos recursos, sem com isto descuidar da compatibilidade. A construo dos protocolos buscando isolamento em demasia, pode contribuir para um maior sobrecarga entre camadas. Um isolamento excessivo contribuiria para degradar a desempenho, visto que acarretaria realocao de dados entre as vrias camadas envolvidas na comunicao. Deve-se ter em mente que cada protocolo est designado para resolver um determinado problema em sua camada, mas uma possvel propagao de dados entre estas pode ser realizada sem comprometer suas caractersticas. 42 O protocolo TCP, por ser considerado o de implementao mais delicada, por envolver contagem de ciclos de tempo, largamente utilizados em sua mquina de estados e, em muitos casos, utilizado como regra para causar mudana de estado em sua mquina de estados, deve estar mais prximo do ncleo, inclusive podendo ser parte integrante deste, como forma de garantir um melhor desempenho global. A avaliao das necessidades de cada protocolo pode auxiliar na escolha a ser feita para sua implementao. O protocolo TCP tem um execuo peculiar neste caso, este envia e recebe dados provenientes de mais de uma camada. Uma possvel abordagem foi definir o protocolo TCP para aceitar somente uma conexo, neste caso, significaria uma grande simplificao na implementao, pois no haveria necessidade de armazenar mltiplas cpias da estrutura de dados responsvel por armazenar as conexes vigentes. Quanto ao protocolo IP, este pode contribuir para minimizar o uso de recursos. Ao se observar o uso de seu cabealho, podemos verificar que este pode ter um cabealho fixo, pois muitas de sua opes no so utilizadas na prtica. Isto torna sua utilizao mais rpida e simplifica a codificao. Os recursos de memria utilizados podem ser minimizados de outra forma. A biblioteca destina-se a dar suporte conexo Internet para um sistema microprocessado. Equipamento este que, normalmente, deve estar dedicado para uma determinada atividade de monitorao, envolvendo leitura de sinais analgicos, controle de acionamentos, etc. Sua prioridade no manter uma base de dados histrica sobre algum evento, mas sim manter o controle sobre determinado processo ou estados de entradas. Assim sua interao via Internet estaria limitada a fornecer dados recentes, os quais estariam constantemente sendo atualizados, ou receber algum tipo de dado que poderia ser interpretado por uma aplicao em execuo. Com esta viso no haveria necessidade de armazenar buffers enviados, para os casos em que os dados estejam sempre sendo atualizados e no fossem prioridade. Outra forma seria o uso do protocolo UDP, que traria mais vantagens neste caso, pois um protocolo mais adequado para envio de dados onde pode-se desprezar dados perdidos em um envio. 5.3 FUNES DE GERENCIAMENTO Uma parte importante do projeto foi tomada pela definio e construo das funes de gerenciamento para gerenciar o hardware utilizado. Mesmo sendo um sistema de pequeno porte, se comparado com um microcomputador que normalmente convivemos, este tem muitas semelhanas. Uma viso geral de sua estrutura pode ser observada na Figura 14. As funes construdas desempenha atividades bsicas para gerenciamento de interfaces e prestar alguns servios s aplicaes que estaro sendo executadas. Seu funcionamento foi definido de forma a acomodar o gerenciamento do hardware, rotinas bsicas para tratamento de interrupes, fornecimento de servio de acesso dados e chamadas de sistema para acesso biblioteca de comunicao. Alm de ser responsvel pela inicializao do hardware, com o objetivo de preparar os perifricos para entrar em funcionamento, uma funo principal deve ficar em um lao infinito, responsvel pela operao de atendimento das requisies do hardware, bem como execuo da aplicao principal. 43 SERIAL PORTAS I/O D/A UCP+MEMRIA TECLADO A/D DISPLAY LCD Figura 14 Estrutura do hardware com suas interfaces O isolamento entre as funes de gerenciamento, as bibliotecas e as aplicaes foi planejado de acordo com a avaliao de desempenho necessria e o custo que isto representaria ao sistema. Uma viso da estrutura construda pode ser vista na Figura 15. Como mencionado anteriormente, o isolamento entre as camadas permitiu um grau de permeabilidade entre as mesmas, com o objetivo de tornar o desempenho global mais eficiente. APLICAO FUNES DE GERENCIAMENTO BIBLIOTECA TCP/IP Figura 15 Interao entre camadas Em alguns casos foi til para uma aplicao ter acesso direto aos perifricos. Neste caso deve-se evitar conflitos com as funes de gerenciamento do hardware, prevendo-se esta possibilidade antecipadamente para poder implementar os acessos isoladamente. 5.4 AMBIENTE DE TESTES O ambiente de testes foi fundamental para que o projeto tivesse xito. Esta estrutura foi planejada antecipadamente para estar pronta quando iniciassem os testes de comunicao. Foi necessrio alocao de recursos para a montagem deste ambiente. Os seguintes itens foram utilizados: um microcomputador com uma porta de comunicao serial disponvel; software para interagir com o sistema desenvolvido e ferramentas que possibilitem captura de pacotes que trafegam entre os protocolos; cabos de comunicao para interligao dos equipamentos; kit com microcontrolador. 44 Alm destes recursos, h as ferramentas utilizadas para o desenvolvimento do projeto. Foi necessria muita pesquisa na Internet para a localizao de ferramentas livres para o ambiente escolhido e que tornassem o desenvolvimento mais eficiente. 5.5 ESPECIFICAO DO PROTTIPO Para servir de base para a implementao deste projeto, foi necessria uma plataforma com caractersticas especficas, empregadas em sistemas de controle e monitorao. Normalmente este hardware contm um circuito eletrnico contendo um microcontrolador e circuitos perifricos que disponibilizam recursos para seu funcionamento, fornecendo memria, canais de entrada e sada, pelos quais possvel interagir com o hardware. Procurou-se uma plataforma onde houvesse documentao e ferramentas de desenvolvimento, tais como compilador, depurador, baixo custo e tecnologia de fcil manuteno, prevendo-se que em caso de dano ao hardware, durante a fase de desenvolvimento poderia haver comprometimento nos prazos para concluso dos trabalhos. Algumas caractersticas de hardware definiram o dispositivo que foi ser escolhido: processador 8 bits; memria voltil (RAM) de 32 Kbytes; memria de programa de 64 Kbytes; interface serial RS232; entrada para teclada 3X4 teclas no mnimo; interface para display de cristal lquido de duas linhas e 20 caracteres. O processador de 8 bits foi definido por ser um dispositivo facilmente encontrado no mercado de microcontroladores, com uma grande variedade de tipos disponveis. Os itens que mais devem pesar na seleo do mdulo so: memria, ferramentas de desenvolvimento e interfaces. 5.5.1 Caractersticas do mdulo selecionado Entre as inmeras opes de hardware que foram localizadas para servir de base para a implementao, selecionou-se o modelo CP-AT32 PLUS. Este modelo fornecido pela empresa Futurlec (http://www.futurlec.com), localizada na Austrlia. A unidade central desta placa um microcontrolador de 8 bits da PHILIPS modelo P89C51RD2. Este microcontrolador compatvel com o chip 8051 do fabricante INTEL. As caractersticas desta placa so: processador P89C51RD2 e clock 18,432 Mhz; 64 K bytes de ROM Flash na prpria UCP; 32 K bytes de RAM; 9 portas I/O; interface para display grfico LCD (Liquid Cristal Display); interface para teclado 4 x 4; 8 portas de sada Open Collector; ADC de 12 bits, com dois canais; DAC de 8 bits, com 4 canais; EEPROM serial da famlia 24XX; relgio de tempo real DS1307; 45 RAM back up com DS1307; interface RS232; interface RS422/RS485; carga de software direto para a placa via interface serial; fonte reguladora. A disponibilidade de recursos de memria e a variedade de interfaces possibilitou a escolha deste mdulo, que propicia facilidade de carga de verses, pois utiliza memria flash incorporada junto prpria UCP. Este recurso tornou o desenvolvimento e depurao mais eficientes. 5.5.2 Especificaes do microcontrolador O microcontrolador utilizado no mdulo CP-AT32 PLUS tem vrias caractersticas que foram estudadas, para ser utilizado adequadamente. Algumas destas caractersticas mais importantes so: P89C51RD2 Unidade Central de Processamento compatvel com a famlia de microcontroladores 8051 conforme datasheet disponibilizado pela fabricante (http://www.semiconductors.philips.com/pip/P89C51RB2HBP); On-Chip Flahs Program Memory rea de dados para programa esto junto ao chip do microcontrolador; memria ROM interna de 64 K bytes; boot ROM UCP contm programa interno para carga de cdigo via porta serial; 6 ou 12 ciclos de relgio por operao; capacidade de endereamento de at 64 K bytes de RAM; 4 nveis de prioridade de interrupes; 7 tipos de interrupes; 32 portas de I/O; Full-duplex UART; 3 registradores de 16 bits com contadores programveis; conjunto de instrues para manipulao de bits. Este chip de microcontrolador, feito pela empresa PHILIPS, fabricado com tecnologia CMOS que garante baixo consumo de energia. Esta tecnologia sensvel a descargas eletrostticas, portanto deve-se ter cuidado especial com sua manipulao. A gravao de dados facilitada pelo uso de memria interna ao microcontrolador. Esta caracterstica evita o uso de memria de programa externa (EPROM), que torna o processo de desenvolvimento mais lento, pela necessidade de apagamento e regravao da memria a ser utilizada. 5.5.3 Interfaces disponveis desejvel que todo dispositivo de hardware tenha recursos que disponibilizem meios para interao com o dispositivo. Estes recursos so disponibilizados atravs de interfaces que apoiam a conexo de dispositivos perifricos que do suporte entrada e sada de dados. Dentre os recursos disponibilizados pelo mdulo CP-AT32 PLUS esto: controle de teclado de at 16 teclas; interface para display grfico LCD; 46 2 canais de entrada conversor A/D de 12 bits que permitem monitorar sinais analgicos at 5 V; 4 canais de sada de conversor D/A de 8 bits; 8 portas de I/O open collector que permitem acionamento direto de dispositivos com maior demanda de corrente, por exemplo, rels; interface de comunicao serial. Esta utilizada para carga de programas e como interface de comunicao para a rede. mini alto-falante conectado a uma porta do microcontrolador. Permite emitir sons associado eventos. Atravs destas interfaces foi possvel interagir com o sistema, permitindo que informaes de sua operao fossem visualizadas continuamente. 6 IMPLEMENTAO DO PROJETO Este projeto envolveu o domnio sobre duas reas de conhecimento: os protocolos que seriam implementados e o hardware microprocessado escolhido para ser utilizado como prottipo. Em funo disto, optou-se por isolar a implementao da lgica de funcionamento dos protocolos do ambiente microprocessado. Assim, foi possvel ter-se problemas menores, mais fceis de resolver. Este isolamento permitiu que o desenvolvimento da lgica existente na implementao de cada protocolo no fosse influenciado pelo desconhecimento das limitaes do prottipo, bem como por alguma limitao ou restrio presente no compilador para este microcontrolador. Esta escolha permitiu o uso de um ambiente mais robusto no desenvolvimento da lgica dos protocolos. Assim pode-se optar por um ambiente que tornou possvel a codificao e depurao integrados. Esta medida, sem dvida, foi crucial para que o projeto atingisse o sucesso. A base para qualquer desenvolvimento de aplicaes deve estar amparada em testes que servem para validar aquilo que foi especificado e implementado, sendo assim, fundamental que este ambiente de teste esteja acima de qualquer suspeita, no que diz respeito a seu funcionamento. Este ambiente de testes utilizado para exercitar o sistema em desenvolvimento foi escolhido em funo da facilidade que traria para a depurao de falhas. O desenvolvimento foi realizado em um ambiente de 32 bits, utilizando-se de um compilador com ambiente integrado incluindo compilador, ligador e editor. Este ambiente trouxe algumas restries quanto ao controle e manipulao dos protocolos utilizados no ambiente de teste, em decorrncia do no acesso que se tem aos recursos de chamadas de sistema, para manipulao de estruturas de dados utilizadas em chamadas socket. 6.1 AMBIENTE ESCOLHIDO A opo de desenvolver a lgica de operao dos protocolos em uma plataforma 32 bits possibilitou o uso de ferramentas mais adequadas e que tornaram o desenvolvimento mais fcil de ser administrado. A preocupao foi centralizada em manter uma implementao C ANSI (American National Standards Institute), para que ao portar-se o cdigo para o compilador do ambiente destino, no houvessem restries quando ao cdigo. Outra preocupao foi seguida quanto ao acesso ao recurso de comunicao do sistema. Este deveria trazer o mnimo de impacto no momento de portar o cdigo de uma plataforma para a outra. Como este recurso envolve uma chamada de sistema, sua abordagem foi simples de implementar, pois no sistema do prottipo este recurso faz parte das funes de 48 gerenciamento operacional que controla os recursos do hardware. Bastou manter esta chamada restrita a uma funo de envio recebendo parmetros para seu controle. 6.2 AMBIENTE DE TESTE O desenvolvimento no ambiente Windows permitiu conjugar a ferramenta de desenvolvimento com o ambiente de teste. Por permitir facilidade no desenvolvimento e depurao, foi escolhida a conexo com a Internet do Windows, como forma de verificar o funcionamento da implementao que estava sendo realizada. Este processo ocorre de forma automtica quando se utiliza algum recurso que dispare o acesso Internet envolvendo a biblioteca socket do Windows. No se tem o controle sobre este processo, apenas pode-se dar incio sua execuo. A API (Application Programming Interface) do Windows tem algumas chamadas que permitem manipular certos parmetros, mas que se restringem a informar como devem proceder durante sua execuo, sem permitir o controle destes. Esta forma de funcionamento implementada por ser o Windows um produto comercial e por buscar simplificar o acesso Internet para seus usurios. Esta escolha de ambiente de teste trouxe algumas conseqncias implementao que estava sendo realizada. Pretendia-se implementar no prottipo uma arquitetura cliente, que toma a iniciativa de conexo. Face s restries impostas, a forma de contorn-las foi implementar uma arquitetura servidor no prottipo. O Windows, durante uma conexo discada Internet, utiliza o protocolo PPP (Point to Point Protocol) para estabelecer uma conexo com um provedor. Outra srie de protocolos tambm utilizada no processo inicial de conexo. Outro detalhe que o Windows espera manipular um MODEM (MOdulador-DEModulador) em uma conexo discada. Assim, sempre antes de iniciar uma conexo so trocadas seqncias de caracteres de controle com o MODEM, que o Windows espera que esteja conectado e funcionando. Estas seqncias de caracteres dizem ao MODEM como este deve operar e o telefone a ser discado. Aps esta troca inicial de dados o Windows espera receber a confirmao do MODEM de que houve a conexo com o nmero discado. Esta troca de seqncias de caracteres pode ser vista na Figura 17, onde os caracteres em vermelho representam os dados que esto sendo enviados pelo Windows e em azul os que esto sendo recebidos do MODEM. Figura 17 Troca de seqncias de caracteres com o MODEM O Windows detecta que a conexo se estabeleceu ao receber do MODEM a seqncia de caracteres CONNECT, a partir deste momento se d incio o uso do protocolo PPP para o estabelecimento da conexo com o provedor de acesso Internet. Para poder simular tal funcionamento foi necessrio implementar esta troca de seqncias de caracteres iniciais, para colocar a mquina de estados do Windows apta a dar 49 incio ao processo de conexo discada. Utilizou-se uma configurao que informava sobre a existncia de um MODEM externo, desta forma foi possvel utilizar um computador com duas portas de comunicao interligadas, conforme a configurao mostrada na Figura 18. Onde uma porta serial controlada pela processo disparado pelo Windows e outra pelo processo que simularia as respostas que o sistema operacional esperava receber. Com esta tcnica seria possvel o desenvolvimento dos protocolos e seu teste no mesmo ambiente, de forma prtica e controlada. Figura 18 Interconexo entre os sinais RS-232 6.3 IMPLEMENTAO DO PROTOCOLO PPP Um estudo extra foi necessrio para que o projeto fosse implementado no ambiente escolhido, em virtude das restries impostas pelo ambiente de teste, que necessariamente utiliza-se do protocolo PPP para uma conexo discada. A base para este estudo foi buscar as informaes de especificao do protocolo. Por se tratar de uma arquitetura aberta seu conhecimento de domnio pblico, estando presente na documentao disponvel na Internet. Para auxiliar o entendimento de como funciona um processo de conexo a um provedor de acesso Internet, foi estudado um caso prtico. Foi realizada a captura dos dados que trafegam entre um microcomputador e um provedor de acesso Internet, no momento em que isto ocorre, para que os dados que so trocados fossem analisados, confrontando-os com sua descrio de funcionamento e assim auxiliar o entendimento da operao do protocolo PPP utilizado neste caso. O protocolo PPP utilizado para transportar dados em uma conexo discada. Est posicionado no nvel 2 (Enlace de Dados) da arquitetura OSI. Trabalha em conexes full- duplex com transmisso de dados bidirecional e assume que os dados so enviados de modo ordenado. Sua estrutura de controle simples e envolve poucos parmetros, como pode ser visto na Figura 19, objetivando reduzir ao mnimo a quantidade de dados de controle introduzidos pelo protocolo. Flag Address Control Protocol Information Padding FCS Flag Figura 19 Formato do protocolo PPP Cada campo do protocolo tem uma finalidade descrita a seguir: 50 flag: cada quadro de dados inicia e termina com um byte 0x7E, sendo utilizado para sincronizao na identificao de incio e fim de um quadro; address: especifica o endereo da estao que deve receber os dados, sendo utilizado o valor 0xFF para especificar todas as estaes; control: controle de seqncia e confirmao de recebimento; protocol: usado para identificar o protocolo transportado na rea de dados (information); information: rea de dados; padding: rea para preenchimento, se necessrio; FCS: frame check sequence, soma binria de 16 bits para verificao de erros no frame; flag: byte indicador de fim de quadro. A verificao de integridade do quadro garante que dados incorretos no sejam tratados, ocasionando erros de processamento, visto que os mesmos so descartados automaticamente quando no for constatada a sua integridade. Este descarte realizado sem qualquer notificao para a origem. responsabilidade de quem esta enviando os dados tentar novamente quando no recebe resposta a uma solicitao. Segundo a especificao do protocolo PPP, no RFC1661, um link para ser estabelecido deve passar por uma negociao que determinar as regras a serem usadas na conexo e servem para tornar o protocolo verstil e adaptvel a uma grande variedade de ambientes. Para isto so utilizados protocolos que auxiliam o processo de negociao. Os protocolos utilizados so: LCP: Link Control Protocol, utilizado para negociar o formato de encapsulamento dos dados, visando reduzir as reas de controle, negociar limites e tamanhos de buffers, solicitar a finalizao da conexo; PAP: Password Authentication Protocol, descrito em RFC1334, utilizado para realizar autenticao de usurio com envio de nome de usurio e senha; IPCP: Internet Protocol Control Protocol, descrito em RFC1332, utilizado para configurar o uso do Internet Protocol encapsulado no protocolo PPP; CCP: Compression Control Protocol, descrito em RFC1662, responsvel pela negociao de algoritmos de compresso. Seguindo a abordagem escolhida para a implementao dos protocolos, estes foram implementados de forma seqencial, obedecendo o ciclo de desenvolvimento incremental (projeto, implementao e testes). 6.3.1 Fluxo de negociao PPP Ao dar-se incio a uma conexo discada, o Windows segue uma seqncia de negociao que deve ser observada para que o mesmo atinja o estado conectado, permitindo que exista trfego de dados utilizando o IP e TCP sob o protocolo PPP. Para chegar-se a este estado a negociao deve passar por vrias etapas, onde so trocadas informaes que permitem avanar o estabelecimento da conexo para o estado em que ambos tenham condies de atender os requisitos impostos por cada implementao. Cada fase utiliza um protocolo especifico e regras especificas. Um exemplo de fluxo a ser seguido pode ser visto na seqncia a seguir: 1. enviado um quadro contendo o protocolo LCP, com os parmetros que se deseja que sejam negociados. 51 2. O receptor devolve uma confirmao de aceite (ACK) ou de rejeio (NAK). No caso de rejeio, este toma a iniciativa de informar os valores que devem ser utilizados. 3. Assim que foi concluda a negociao, que tambm envolve a forma de autenticao desejada, se d incio a fase seguinte, que a fase de autenticao pelo modo j negociado. Neste caso est se utilizando autenticao PAP. 4. Aps a troca de dados de autenticao se inicia a fase de negociao envolvendo o protocolo IPCP, o qual define como ser utilizado o IP encapsulado no protocolo PPP. Nesta fase so definidas algumas regras de otimizao no envio de dados, visando aumentar a eficincia do link. 5. Como ltima fase antes de passar para o estado conectado, existe a negociao utilizando-se do protocolo CCP, o qual utilizado para negociar algoritmos de compresso. Apesar de existirem regras bem definidas quanto ao tipo de parmetros que podem ser negociados, estes tem uma implementao flexvel, visto que so definidas as condies mnimas que devem ser atendidas por aqueles que pretendem se utilizar destes recursos de conexo, principalmente em se tratando de provedores de conexo, o qual devem atender o mais variado tipo de dispositivo que necessita acesso Internet. 6.3.2 Otimizao na negociao LCP Para esta implementao foi necessrio direcionar as exigncias de conexo com vistas a atender as restries impostas pela capacidade e recursos disponveis no ambiente prottipo. Durante a fase de negociao LCP, a configurao do MRU (Maximun Receive Unit), que define o comprimento mximo que um quadro PPP pode atingir, foi estabelecido em 128 bytes, quando o normal seria o Windows solicitar um tamanho de 1.500 bytes. Outros parmetros de negociao que no suportados pela implementao realizada, so rejeitados. A implementao do tratamento LCP se restringiu ao tratamento dos seguintes itens: VENDOR SPECIFIC: uma solicitao de negociao de parmetros desta classe rejeitada, somente as definies padro do protocolo so negociveis; OPTION ACCM: esta opo aceita e define quais caracteres so tratados por seqncia de escape; AUTENTICATION PROTOCOL: foi estabelecido que a autenticao seria realizada utilizando-se o protocolo PAP e uma solicitao diferente desta rejeitada; MAGIC NUMBER: esta opo aceita e retribuda adequadamente; PROTOCOL FIELD COMPRESSION: foi previsto tratamento para esta opo, que visa otimizar campos do protocolo PPP aps estabelecida a conexo, evitando-se o envio de campos desnecessrios; ADDRESS AND CONTROL FIELD COMPRESSION: para esta opo tambm foi previsto tratamento, sendo aceito quando requerido, pois tem como objetivo reduzir o envio da campos desnecessrios aps a conexo estar estabelecida; CALLBACK: esta opo no aceita sendo rejeitada; MULTLINK MRRU: este parmetro negociado para atender a limitao de memria do prottipo, sendo solicitado o valor de 128 bytes, valores maiores que este so rejeitados; 52 MULTLINK ENDPOINT DISCRIMINATOR: no h tratamento para esta opo, sendo a mesma rejeitada caso ocorra. Qualquer outra opo diferente das que foram implementadas so automaticamente rejeitadas. 6.3.3 Otimizao na negociao IPCP Atravs deste protocolo so estabelecidas as regras que permitem configurar o IP para que este possa estar disponvel para receber e enviar dados para a Internet, sua especificao est descrita em RFC1332 e RFC1877. O tratamento para estas opes foi necessrio para que a mquina de estados do Windows atingisse os estgios seguintes, sendo sua implementao obrigatria. Esta implementao incluiu tratamento para as seguintes opes: IP ADDRESS: o tratamento para este parmetro necessrio pois atravs desta opo que informado o endereo que a estao dever assumir; PRIMARY DNS ADDRESS: o tratamento para esta opo foi implementado por exigncia da conexo solicitada pelo Windows, que necessita desta informao para enviar suas solicitaes de resoluo de nomes; PRYMARY NBNS ADDRESS: mantido tratamento pelo mesmo motivo, necessidade de compatibilidade, visando atender as exigncias da mquina de estados do Windows; SECONDARY DNS ADDRESS: mantido tratamento pelo mesmo motivo; SECONDARY NBNS ADDRESS: mantido tratamento pelo mesmo motivo. O tratamento para estes casos ocorre de forma a fornecer dados estticos previamente armazenados, no significando algum tipo de processamento especial quando de sua negociao durante as fases de conexo. 6.3.4 Otimizando a negociao com CCP Este protocolo utilizado para negociar os parmetros que determinaro como o protocolo IP dever ser tratado, envolvendo, em certos casos, grandes limitaes de implementao em virtude da opo escolhida, que pode envolver tratamentos no suportados por um sistema onde busca-se otimizao. Alguns destes parmetros envolvem compresso de dados, o que foge do escopo desta implementao, que visa proporcionar uma interface com recursos otimizados. A rejeio das opes existentes neste protocolo no compromete o objetivo que colocar o Windows no estado conectado, apenas faz com que o protocolo passe a trafegar sem usar este recurso. Sua implementao teria de utilizar algoritmos mais elaborados e complexos, utilizando regras que tornariam sua descompresso excessivamente onerosa. 6.4 IMPLEMENTAO DO PROTOCOLO IP Vencidas as barreiras no tratamento do quadro PPP, este trar em sua rea de dados as informaes que aps extradas, podero ser identificadas como pertencentes ao protocolo IP. Para isto h uma padronizao de codificao que especifica o tipo de protocolo que est 53 sendo transportado na rea de dados do protocolo. Esta codificao esta especificada em RFC1700 (POINT-TO-POINT PROTOCOL FIELD ASSIGNMENTS). Conforme visto anteriormente, no item 6.3, o campo Protocol informa o protocolo que est sendo transportado, portanto na implementao basta verificar se o cdigo corresponde ao esperado para o IP, que 0x0021, ou de forma compactada, 0x21. Sendo o protocolo transportado reconhecido o processamento desviado para a rotina que faz sua extrao e verificao de integridade. O algoritmo utilizado para realizao da soma de verificao encontra-se disponvel junto documentao de especificao do protocolo, no caso do IP, trata-se da RFC791. O algoritmo genrico implementado para realizar o tratamento de quadros no estado conectado segue a lgica demostrada na Figura 20. Assim que detectado um quadro vlido, ou seja, foi identificado o flag de incio e fim, a execuo passa para o ponto onde realizada a extrao dos caracteres de escape do quadro recebido. Este procedimento aplicado em ambientes de comunicao serial que utilizam MODEMs para serem interligados. Os MODEMs interceptam certos caracteres que so utilizados como caracteres de controle, assim estes caracteres so alterados para que no sejam tratados pelo MODEM. Segundo a especificao do protocolo PPP a regra a ser seguida a seguinte: se caracter menor que 0x20: insere caracter de escape 0x7D mais o resultado da operao do caracter XOR 0x20, no lugar do caracter; se caracter igual a 0x7D: insere caracter de escape 0x7D mais o caracter 0x5D, correspondente a operao 0x7D XOR 0x20, no lugar do caracter; se caracter igual a 0x7E: insere caracter de escape 0x7D mais o caracter 0x5E, correspondente a operao 0x7E XOR 0x20, no lugar do caracter. A operao sobre os caracteres 0x7D e 0x7E so necessrias para evitar que caracteres de dados sejam tratados como caracteres de escape, o que ocasionaria tratamento incorreto para os dados recebidos. Aps a extrao dos caracteres de escape, os dados estaro prontos para serem confrontados com a soma de verificao para teste de integridade. No caso do quadro PPP a soma de verificao abrange todos os bytes exceto os flags e os bytes do campo FCS. Se ocorrer falha da soma de verificao o quadro descartado silenciosamente. O prximo passo verificar qual o protocolo est sendo transportado, para que ocorra o desvio ao tratamento adequado dos dados recebidos. Caso o protocolo no tenha tratamento este descartado sem nenhuma notificao. Para o protocolo IP haver mais algumas consistncias a serem realizadas antes de disponibilizar seus dados para tratamento. A primeira a ser realizada a soma de verificao do datagrama IP, o qual engloba somente o cabealho, sem incluir a rea de dados. O algoritmo para realizao desta soma encontra-se disponvel junto a documentao de referncia do protocolo, em RFC791. O passo seguinte verificar se o campo de endereo IP destino o endereo do mdulo. Do mesmo modo que os tratamentos anteriores, caso algum destes testes no sejam vlidos o tratamento cancelado, no sendo realizado nenhum tipo de notificao. 54 switch ( ESTADO ) { MODEM: //trata strings do modem break; CONECTADO: if ( FRAME ) { //extrai caracteres de escape ... //calcula soma de verificao ... if ( FRAME != VALIDO ) { //descarta silenciosamente ... } else { switch ( PROTOCOLO ) { case LCP: ... case IPCP: ... case PAP: ... case CCP: ... case IP: ... } } } } Figura 20 Algoritmo de tratamento para quadros Cabe ressaltar que o tratamento do cabealho IP esta restrito aos campos necessrios para esta implementao, portanto no esto sendo implementados todos os tratamentos que o protocolo permitiria, tais como fragmentao de dados, tratamento de dados urgentes e outros servios que implementam o tipo de transporte desejado para o datagrama. 6.4.1 Extraindo dados do datagrama IP Os dados recebidos em um datagrama IP vlido devem ser tratados conforme o campo Protocol, o qual especifica o tipo de protocolo que o mesmo esta transportando em sua rea de dados. O tratamento realizado de acordo com a lista a seguir, conforme documentado em RFC790: 0x01: protocolo ICMP; 0x06: protocolo TCP; 0x11: protocolo UDP. Caso seja identificado o protocolo ICMP o fluxo desviado para o cdigo que realiza o tratamento especfico deste protocolo. Esta implementao incluiu o tratamento para as seguintes opes previstas no protocolo ICMP: ECHO REQUEST: mensagem requisitando retorno de resposta para a origem da mensagem; ECHO REPLY: atendimento de pedido de resposta para origem. Este protocolo torna possvel a utilizao de aplicativo para detectar se uma determinada estao ou servidor encontra-se ativo. Este recurso simples mas de grande utilidade permite identificar se determinado IP pode ser atingido ou no, atravs do envio de uma mensagem utilizando o protocolo ICMP. 55 Esta implementao optou por incluir este recurso para que fosse possvel diagnosticar de forma simples o funcionamento do mdulo prottipo. 6.4.2 Tratamento de mensagem UDP Um pacote UDP detectado quando o datagrama IP contiver em seu campo de cabealho Protocol o cdigo 0x11. Neste ponto inicia-se mais uma etapa de verificao de integridade de dados e verificao de porta destino da mensagem. A soma de verificao realizada utilizando-se o mesmo algoritmo empregado na verificao do datagrama IP. Os seguintes campos so utilizados nesta soma: soma em complemento de um do cabealho UDP mais seus dados; soma em complemento de um de pseudocabealho montado no momento da verificao, contendo os seguintes dados: 4 bytes do IP da origem, 4 bytes do IP do destino, 1 byte com zero, 1 byte com o cdigo do protocolo, no caso 0x11 e 2 bytes com o tamanho do pacote UDP. A implementao deste teste garante que somente pacotes vlidos sejam tratados. O protocolo UDP permite que esta verificao no seja executada, nos casos em que o tempo de processamento na validao de pacotes ocasione degradao de desempenho. Em certas aplicaes, dados invlidos no causam prejuzo ao processamento da informao, onde o fluxo deve prioritariamente ser mantido contnuo, tais como transmisso de vdeo conferncias e sinais de udio. Antes de dar prosseguimento ao tratamento dos dados transportados no pacote UDP, deve-se verificar o campo destination port, no cabealho UDP, a fim de confirmar que se tratam de dados destinados a porta que o mdulo prottipo esta ouvindo. Para efeito de demonstrao de funcionamento, foi implementado no mdulo prottipo, uma resposta automtica para datagramas que sejam enviados a este. Assim para todo o datagrama que chegar haver uma resposta que envia uma seqncia fixa de dados, indicando que os dados foram recebidos e que o fluxo de envio foi implementado. Os dados recebidos so mostrados no display grfico por alguns instantes a fim de facilitar o reconhecimento dos mesmos e confirmar seu recebimento de forma adequada. 6.4.3 Tratamento de mensagem TCP Este sem dvida o objetivo principal deste projeto, permitir que um sistema microprocessado manipule pacotes TCP/IP de forma a permitir sua interao com a Internet e assim permitir sua integrao a rede mundial de comunicao. O protocolo TCP em conjunto com o IP so os protocolos que sustentam as principais funcionalidades atendidas neste meio de comunicao: a garantia de entrega e o servio de entrega sem conexo. Ao detectar a presena de um pacote TCP a ser tratado, a execuo desviada para o fluxo adequado. Neste ponto inicia-se algumas verificaes de integridade e porta destino das informaes. A soma de verificao do datagrama TCP envolve a soma em complemento de um de todos os dados do datagrama em unidades de 16 bits de tamanho. Se o datagrama contiver numero de bytes impar, um byte deve ser acrescentado para efeito de soma com o contedo 56 zero, mas no deve ser enviado com o datagrama. Esta soma tambm inclui a montagem de um pseudodatagrama que inclui os seguintes dados: 4 bytes com o endereo IP da origem; 4 bytes com o endereo IP do destino; 1 byte com valor zero; 1 byte com o cdigo do protocolo, no caso, 0x06; 2 bytes com a tamanho do datagrama TCP. Estes dados so montados em tempo de execuo e realizado a soma, com o mesmo algoritmo utilizado para a soma do cabealho. Para efeito de clculo o contedo do valor do campo contendo a soma de verificao recebida deve ser salvo em uma varivel auxiliar e este campo deve ser zerado. Aps realizado a soma de verificao faz-se o teste da porta para qual os dados esto sendo enviados, se corresponde a porta do prottipo. Caso algum destes testes falhem, o tratamento interrompido e os dados so descartados silenciosamente. A partir deste ponto o tratamento passa a ser realizado em funo da mquina de estados especificada para o protocolo TCP. Assim, o primeiro passo verificar o estado atual em que se encontra a mquina local, e a partir deste estado tomar a iniciativa adequada com relao ao pacote que esta sendo tratado. Conforme citado anteriormente, no item 6.2, em funo das limitaes impostas pelo ambiente de teste, o prottipo foi projetado para funcionar como um ambiente servidor de conexes. Este passou a esperar a iniciativa externa de conexo para que sua mquina de estados fosse movimentada. Seu funcionamento ativado com a abertura de um socket passivo, o qual fica apto a receber conexes externas para uma determinada porta. Este socket entra no estado LISTEN, a espera de uma conexo. A mquina de estados para esta implementao sofreu uma simplificao, visando atender a necessidade de reduo em seu tamanho e em virtude do tipo de tratamento de dados para qual se destina. No sendo necessrio a implementao total da mquina de estados prevista na literatura sobre o assunto. Alguns estados transitrios foram eliminados a fim de simplificar sua implementao, sem no entanto restringir suas funcionalidades. Os estados que foram implementados so: LISTEN: este o estado inicial que a mquina assume sempre ao dar inicio ou ao concluir uma conexo; SYNRCVD: ao receber uma solicitao de conexo, partindo do estado LISTEN, passa para este estado, aguardando a confirmao ao receber um pacote contendo o flag ACK ligado; ESTABLISHED: estado conectado, apto a receber e enviar dados; CLOSEWAIT: ao receber uma solicitao de encerramento, flag FIN ligado, passa para este estado antes de encerrar a conexo. 6.4.3.1 Implementao de temporizadores A implementao de temporizadores no causou problemas, em virtude das limitaes da unidade de processamento, que tem seu tempo compartilhado entre muitas outras atividades. O otimizao da mquina de estados e a capacidade de recuperao tornaram 57 desnecessria a implementao de muitos tipos distintos de temporizadores, visando estabelecer limites para estados especficos. Como a mquina de estados implementada movimentada por iniciativa externa, caso esta fique em um estado invlido em relao a uma iniciativa externa, ao dar-se incio ao processo novamente, este tornar a ser reiniciado. Somente dois temporizadores foram implementados, um que utilizado como temporizador de uso geral na mquina de estados TCP e outro para controle de descarte de quadros no recebidos completos aps certo tempo. 6.4.3.2 Dando partida mquina de estados TCP Alguns procedimentos so tomados quando se d incio o processo de conexo virtual realizado pela mquina de estados TCP. O processo se inicia com a criao da estrutura que armazenar as informaes que identificao a conexo em andamento chamada TCB, e parmetros que especificam o estado da conexo. Alguns destes parmetros so: porta origem: identifica a porta que est conectando-se ao sistema; sequence number: identifica qual o primeiro byte do fluxo local; acknowledgment number: identifica qual o prximo byte do fluxo remoto esperado; estado da conexo: identifica qual o estado da conexo. Estes dados servem para manipular a conexo ativa e indicar mutuamente qual posio do fluxo de dados foram recebidas corretamente. O tratamento para sequence number e acknowledgment number deve ser dado como se existisse um fluxo de dados percorrendo ambas as direes, cada um incrementado de acordo com o recebimento e confirmao de recebimento de dados. Esta a tcnica que o TCP utiliza para garantir que os dados sejam entregues ao destino. H ainda mais um parmetro, que nesta implementao foi deixado com valor fixo. Trata-se do valor da janela de dados, que informa o espao disponvel para receber dados. Esta implementao no necessita recorrer a esta tcnica para controle de fluxo, pois no foi planejado implement-la. Este recurso utilizado em ambientes de maior capacidade de processamento, onde sistemas multitarefas podem ter um processo tratando dados recebidos enquanto outro captura novos que esto chegando, sendo necessrio, nestes casos, administrar a capacidade remanescente do buffer de recepo. 6.4.3.3 Estruturas de dados A implementao dos protocolos e o tratamento destes contou com o uso de estruturas de dados, normalmente utilizadas como tipos em ponteiros, tendo em vista que sua manipulao no esttica. Estas estruturas representam os dados definidos na especificao dos protocolos e estruturas auxiliares, utilizadas na verificao de somas de segurana. A estrutura mostrada na Figura 21 representa os dados que so manipulados quando um datagrama IP tratado. Os dados esto todos no formato char. 58 typedef struct { unsigned char Versao_Len; unsigned char Service; unsigned char TotalLen[2]; unsigned char ID[2]; unsigned char FragmDesloc[2]; unsigned char TTL; unsigned char Protocol; unsigned char CheckSum[2]; unsigned char SourceIP[4]; unsigned char DestinIP[4]; unsigned char dados; } DatagramaIP; Figura 21 Estrutura de dados do datagrama IP A incluso da campo dados no faz parte da definio do cabealho do datagrama IP, mas foi criado por permitir uma forma mais simples de obter-se o endereo da rea de dados que deve ser tratado pelo protocolo que esta sendo transportado pelo IP. Para manipulao de dados numricos, como o campo CheckSum[2], foi criado uma estrutura conforme mostrado na Figura 22. Esta estrutura permite representar no mesmo espao de memria dois tipos diferentes de dados, de forma que seja visto como um nmero de dois bytes e ao mesmo tempo pode ser visto como uma seqncia de caracteres. Este formato facilita sua manipulao, pois permite tratar os dados como um nmero quando isto necessrio e realizar a transferncia como bytes contnuos. union NUMBER2 { unsigned int numw; unsigned char numc[2]; }; Figura 22 Estrutura para manipulao de dados numricos de 2 bytes Para manipulao de dados com tamanho de 4 bytes foi criado a estrutura mostrada na Figura 23. Esta estrutura permite manipular o campos utilizados na estrutura do protocolo TCP. Union NUMBER4 { unsigned long seqn; unsigned char seqc[4]; }; Figura 23 Estrutura para manipulao de dados numricos de 4 bytes A estrutura do protocolo TCP mostrada na Figura 24. typedef struct { unsigned char SourcePort[2]; unsigned char DestinPort[2]; unsigned char SequenceNum[4]; unsigned char AckNumber[4]; unsigned char ControlBits[2]; unsigned char Window[2]; unsigned char CheckSum[2]; unsigned char UrgentPointer[2]; unsigned char Options[4]; unsigned char Dados[128]; } DatagramaTCP; Figura 24 Estrutura de dados do datagrama TCP 59 A estrutura de dados do protocolo TCP, mostrado no Figura 24, contm dados numricos de 4 bytes, que devem ser manipulados a cada pacote recebido e transmitido pelo protocolo TCP. Estes campos so SequenceNum[4] e AckNumber[4]. Sua manipulao foi simplificada utilizando-se e estrutura auxiliar que permite representar os dados como nmero de 4 bytes e seqncia de caracteres. Na estrutura mostrada na Figura 25, esto os dados utilizados na montagem para o clculo da soma de verificao dos pacotes TCP. Esta estrutura manipulada somente no momento do tratamento dos dados, no sendo enviada junto ao pacote. typedef struct { unsigned char SourceIP[4]; unsigned char DestinIP[4]; unsigned char zero; unsigned char protocolo; unsigned char TCPLen[2]; } PseudoHeaderTCP; Figura 25 Estrutura auxiliar usada para clculo de soma de verificao TCP Esta mesma estrutura, mostrada na Figura 25, tambm utilizada para clculo da soma de verificao do protocolo UDP. 6.5 PORTANDO O CDIGO PARA O DESTINO Aps implementao da lgica de funcionamento dos protocolos no ambiente 32 bits, este foi portado para o ambiente final para o qual foi desenvolvido, ou seja, um microcontrolador de 8 bits, descrito no captulo 5. No ambiente destino j haviam sido implementados os recursos necessrios para o gerenciamento do hardware e controle de interrupes. Este ambiente conta um grupo de funes de gerenciamento responsveis pelo controle de inicializao dos recursos, rotinas de acesso a display grfico e controle da porta de comunicao serial RS-232, a qual seria utilizada para conexo com um microcomputador. Inicialmente a lgica desenvolvida estava encarregada de detectar os flags de incio e fim de um quadro PPP. Esta implementao funcionou corretamente no ambiente de desenvolvimento durante os testes, mas demonstrou fragilidade no ambiente final, como ficou comprovado nos primeiros testes realizados. Ocorre que no ambiente de desenvolvimento tinha-se um sistema trabalhando com um processador infinitamente mais veloz que o prottipo a ser utilizado. Este realizava as verificaes necessrias nos dados recebidos muitas vezes mais rpido que o hardware de comunicao serial podia atualizar, desta forma conseguia detectar a presena de um quadro e desviar o processamento para o tratamento enquanto um novo quadro podia estar sendo recebido e mantido armazenado pelo sistema operacional. Esta lgica se mostrou ineficaz no ambiente microprocessado, ocasionando lentido e falta de sincronismo para detectar a presena de dados adequadamente. Alm da restrio verificada com respeito a capacidade de processamento o buffer de armazenamento de dados para este ambiente estava limitado em 128 bytes. Na implementao original, no ambiente de desenvolvimento, utilizou-se uma lgica que permitia a movimentao de um ponteiro indicador de dados o qual era passado para a rotina de comunicao, assim esta podia continuar a recepo de novos dados a partir deste ponto do buffer, enquanto no fosse 60 detectado a presena de um quadro completo. Esta lgica tambm detectava a presena de um quadro incompleto que estivesse presente aps um quadro j completo. Neste caso os dados quando eram transferidos para o buffer de trabalho, tambm era realizado o deslocamento dos dados remanescentes para o incio da rea de dados, a fim de facilitar a deteco de incio e fim de um quadro, permitindo que a recepo continua-se aps estes. A soluo encontrada foi simplificar a forma de manipular os dados recebidos e detectar a presena dos flags de incio e fim de quadro de uma forma mais eficiente e adequada aos recursos computacionais existentes. O tratamento de envio e recebimento de dados pela porta de comunicao serial RS- 232 realizada via rotina de interrupo, assim que inicializado o sistema, este ativa a recepo que tem um vetor de interrupo fixo para tratamento de comunicao serial. Neste vetor esto implementados os procedimentos de armazenamento dos dados que chegam e demais controles necessrios para a correta recepo de dados. O mtodo empregado para otimizar o processo de recepo e detectar a presena de um quadro PPP no buffer de recepo foi utilizar a prpria rotina de interrupo para indicar esta situao. O algoritmo empregado segue a lgica descrita no fluxograma representado na Figura 26. Partindo-se do princpio que houve a chegada de um byte pela interface de comunicao serial e a rotina de tratamento foi invocada, h o seguinte processamento: 1. Coloca byte recebido no buffer. 2. o primeiro byte recebido e um flag ? Se sim, ento indica incio de quadro, inicializa relgio de recepo e indicao de nmero de bytes recebido igual a zero. 3. Se no: Verifica se o nmero de bytes recebido maior que 2 e se trata de um flag; Se sim, indica final de quadro e desabilita a recepo de novos dados. 4. Se no: Verifica se o nmero de bytes recebidos igual a 1 e trata-se de um flag; Se sim, faz ponteiro de buffer apontar para o incio, faz quantidade de bytes recebidas igual a zero, tira indicao de incio e final de quadro e reinicia relgio de recepo. 5. O ponteiro de dados no atingiu o final do buffer ? Se no, incrementa ponteiro de uma unidade. Com esta lgica implementada, a deteco de um quadro foi simplificada, sendo que a rotina responsvel pelo tratamento PPP somente invocada quando h a presena de um quadro completo na rea de dados. O processamento fica destinado a aplicao que esta sendo executada e a rotina que monitora os indicadores de incio e fim de quadro. Um aspecto relevante nesta implementao a ordem em que os testes so realizados, para que o impacto no tratamento, desta interrupo, seja o menor possvel, evitando-se testes desnecessrios. Para isto procurou-se dispor a ordem na seqncia que privilegia a execuo sem falhas, que se estima seja a execuo mais freqente e assim tornar o tratamento da interrupo mais eficiente. Outra medida tomada foi o bloqueio da recepo de novos dados enquanto no finalizar o tratamento dos dados recm chegados. Esta medida reduziu a manipulao de ponteiros e ampliou a permanncia do processamento dedicado ao tratamento dos dados recebidos, pois no h novas interrupes geradas pela chegada de novos dados. Como pode ser visto na descrio dos protocolos, estes exigem uma srie de consistncias e verificaes que tornam seu processamento demorado. Em alguns casos pode ocorrer de o transmissor reenviar seu dados em virtude da demora na resposta, isto traria uma degradao de desempenho, pois, continuaria ativa a gerao de interrupo para tratamento 61 de dados recebidos, assim, bloqueando a recepo de novos dados, mesmo que haja nova recepo, antes da concluso do tratamento dos dados recebidos anteriormente, estes no influenciaro o processamento em andamento e ao termino deste, os dados esperados sero enviados ao destino. Figura 26 Fluxograma de tratamento de recepo Isto no pode ser visto como uma limitao, mas sim como uma adequao capacidade de processamento para o dispositivo em desenvolvimento, afinal os protocolos foram desenvolvidos com este propsito, o de se adaptarem aos mais diversos dispositivos e meios de comunicao utilizando-se de temporizadores, retransmisso e tcnicas de validao. 6.5.1 Ferramentas utilizadas Para auxiliar o desenvolvimento durante a fase de testes, foram utilizadas algumas ferramentas que tornaram esta tarefa mais simples. O objetivo era comprovar a operao em conformidade com as especificaes que estavam sendo implementadas. 62 A ferramenta ComLite32 (ComLit32.exe, http://www.rtcomm.com) foi utilizada para captura dos dados que trafegavam entre a porta de comunicao do computador e o prottipo. Esta ferramenta permite visualizar, em tempo real, os dados que estavam sendo trocados na porta de comunicao. Sua utilizao permitiu acompanhar o desenvolvimento durante a fase de implementao do protocolo PPP, que interage diretamente com o hardware, adequando os dados recebidos dos nveis superiores com a interface de comunicao serial. A ferramenta Analyzer (Analyzer.exe, http://www.polito.it) foi utilizada para capturar os dados que so trocados no nvel de rede. Esta aplicao um pacote analisador de protocolos, que permite sua visualizao em alto nvel, permitindo navegar sobre os protocolos capturados e desta forma facilitar a verificao de operao. 6.6 VERIFICAO DE FUNCIONAMENTO Os testes de funcionamento foram permanentes durante todas as fases do desenvolvimento. Mas um bom projeto deve sempre contar com meios de comprovar sua operao em conformidade com o que foi planejado. Para tornar isto possvel, durante o desenvolvimento foram concebidos meios para que testes prticos pudessem ser realizados. O prottipo conta com uma interface grfica (LCD), que permite acompanhar a apresentao de mensagens. Este recurso foi utilizado de forma a permitir que a troca de mensagens realizada entre uma estao e o prottipo pudessem ser acompanhadas. Os recursos implementados no projeto permitem atender s seguintes caractersticas: tratamento para quadros com encapsulamento PPP (RFC1661); tratamento para protocolos de negociao de conexo CCP, IPCP, LCP e PAP; tratamento para datagramas com encapsulamento IPv4 (RFC791); tratamento para pacotes UDP (RFC768); tratamento para pacotes ICMP (RFC792); tratamento para pacotes TCP (RFC793, RFC1180). Os protocolos descritos foram implementados de forma otimizada, objetivando manter-se a compatibilidade com suas especificaes, eliminado tratamentos que no trariam contribuio para seu uso neste tipo de ambiente microprocessado. 6.6.1 Tipos de testes A verificao de operao das funcionalidades implementadas foi realizada utilizando- se de um microcomputador interligado ao prottipo via porta de comunicao serial. O prottipo implementado se comporta como um servidor. Os seguintes teste foram realizados: atravs de uma aplicao 32 bits, utilizou-se a criao de um socket, usando o protocolo TCP, permitindo a troca de mensagens com o prottipo; atravs de uma aplicao 32 bits, utilizou-se a criao de um socket, usando o protocolo UDP, e do mesmo modo, permitindo a troca de mensagens com o prottipo; utilizao do programa ping.exe, permitindo que mensagens ICMP fossem trocadas com o mdulo prottipo; 63 os procedimentos acima do incio ao processo de conexo discada que permite testar o funcionamento da implementao que trata o protocolo PPP e os demais protocolos utilizados durante a negociao da conexo. Estas ferramentas comerciais de largo uso, permitem comprovar a operao do prottipo e sua compatibilidade, visto que se utilizam bibliotecas de uso habitual neste tipo de sistema operacional de 32 bits. 6.6.1.1 Teste de conexo TCP Durante os testes realizados na verificao de funcionamento do protocolo TCP, os dados trocados foram capturados com o auxlio das ferramentas descritas. Na figura 27, capturada com o auxlio da ferramenta Analyzer.exe, podemos observar que houve a troca de 9 pacotes. O primeiro iniciou s 21:31:08.498266, pacote nmero 2. Este primeiro pacote partiu do microcomputador conectado ao prottipo e trazia a indicao de solicitao de conexo com a porta destino, no caso 43055. Logo a seguir o prottipo devolve um pacote indicando aceitar a solicitao de conexo, o pacote nmero 3. O pacote seguinte contm a resposta de confirmao, contendo um ACK. Neste momento a mquina de estados TCP do prottipo passa para o estado conectado. A partir deste ponto notamos que enviado 3 pacotes partindo do microcomputador, pacotes 5, 6 e 7. Isto se deve por motivo de desempenho no processamento da informao recebida pelo prottipo. No primeiro pacote enviado por este, no haviam dados para serem manipulados, permitindo que a resposta fosse dada mais rapidamente. Figura 27 Captura de testes de conexo TCP 64 Foram trs pacotes enviados, o primeiro que foi recebido deu incio ao processamento da informao, ou seja, o prottipo recebeu e passou a tratar os dados, neste momento houve a chegada de mais dois pacotes, os quais no foram tratados, pois o prottipo estava com a recepo de dados bloqueada enquanto no conclua o tratamento corrente. Este procedimento foi tomado para assegurar que no ocorressem novas interrupes durante o tratamento de uma informao, o que implicaria de degradao do tempo de resposta. No pacote de nmero 8 o prottipo devolve a resposta esperada. Os pacotes seguintes so: um contendo o flag de confirmao de recebimento (ACK) e outro encerrando a conexo com o flag RESET ligado. 7 CONCLUSO Este trabalho implementou os protocolos que so utilizados para conexo Internet em um prottipo utilizando um microprocessador de 8 bits. Foram implementados os protocolos TCP, UDP, IP e ICMP, tornando o prottipo utilizado plenamente funcional e apto para conectar-se na Internet. Este recurso permitiu que houvesse interao via troca de dados, possibilitando controlar o prottipo remotamente. Os protocolos foram amplamente estudados a fim de buscar atendimento de requisitos de compatibilidade e otimizao, objetivando reduzir o comprometimento no uso de recursos, tornando sua utilizao vivel em sistema de reduzida capacidade computacional. O projeto de implementao foi dividido em duas fases. A primeira fase foi da construo da lgica de implementao dos protocolos em um ambiente multitarefa, contando com ferramentas visuais para a codificao e depurao dos protocolos. A implementao foi realizada utilizando-se a linguagem C ANSI, com a preocupao de tornar o cdigo portvel para o ambiente final. Nesta fase foi possvel implementar a lgica de funcionamento dos protocolos e efetuar os testes e comprovao de funcionamento. A Segunda fase foi realizada quando o cdigo dos protocolos estavam prontos e testados. Foi necessrio portar a codificao construda no ambiente de desenvolvimento para o sistema utilizado para compilar o projeto para o sistema microprocessado do prottipo. Algumas adaptaes tiveram se ser realizadas, tais como: o acesso aos recursos de comunicao serial e ordenao de dados em estruturas em virtude do tipo de processador. O acesso aos recursos de comunicao disponibilizados em forma de biblioteca, foram simplificados na forma de algumas funes que permitem reduzir o nmero de parmetros necessrios ao seu uso. Em testes realizados no prottipo implementado foi possvel comprovar o funcionamento pleno do projeto. Demonstrou-se com isto, a viabilidade de uso de sistemas microprocessados de pequeno porte para conexo com a Internet, permitindo ampliar sua utilizao sem comprometer o funcionamento em um sistema microprocessado. A implementao realizada comprova que os protocolos implementados podem atender necessidades variadas com flexibilidade, tornando possvel o uso de dispositivos simples e direcionados para atender necessidades especficas, tais como: sistemas dedicados utilizados em ambientes industriais, sistemas de monitorao, aquisio de dados, dispositivos de pagamento eletrnicos, etc. Novas perspectivas se abrem e possibilidades de aprimoramento do projeto realizado. Ampliar os recursos dispondo de um servio de pginas HTTP seria um recurso possvel de implementao. Desta forma uma aplicao sendo executada em um navegador Internet, 66 poderia acessar recursos e informaes disponibilizados pelo mdulo, permitindo interao com este. Incluir um mdulo para controle de discagem utilizando um MODEM, ampliaria sua gama de aplicaes. Este recurso essencial em sistemas remotos com conexo discada. REFERNCIAS COMER, Douglas E.; STEVENS, David. Interligao em Rede TCP/IP Volume I. Rio de Janeiro: Campus, 1999. 672 p. COMER, Douglas E.; STEVENS, David. Interligao em Rede TCP/IP Volume II. Rio de Janeiro: Campus, 1999. 592 p. DUNKELS, Adam. Minimal TCP/IP Implementation with Proxy Support. 2001. Disponvel em: <http://www.sics.se/~adam/publications.html>. Acessado em: 22 Ago. 2001. IREN, Sami; AMER, Paul D. The Transport Layer: Tutorial and Survey. Philadelphia, 1999. Disponvel em: <http://citeseer.nj.nec.com/iren99transport.html>. Acessado em: 1 Out. 2001. JORDAM, Larry; CHURCHILL, Bruce. Comunicao e Redes com o PC-5 ed. Rio de Janeiro: Axcel Books, 1994. 698 p. NUNES, L. TELEPROCESSAMENTO. [s/l]: [s/e], 1998. 60 f. Apostila da disciplina Teleprocessamento. MAGUIRE, Steve. Guia Microsoft para O Desenvolvimento de Programas Sem Erros. Rio de Janeiro: Campus, 1994. 249 p. PETERS, James F.; PEDRYCZ, Witold. Engenharia de Software. Rio de Janeiro: Campus, 2001. 602 p. RFC1180. A TCP/IP Tutorial. 1991. Disponvel em: <http://www.rfc.net/rfc1180.txt>. Acessado em: 1 Out. 2001. RFC791. INTERNET PROTOCOL. 1981. Disponvel em: <http://www.rfc.net/rfc791.txt>. Acessado em: 1 Out. 2001. RFC793. TRANSMISSION CONTROL PROTOCOL. 1981. Disponvel em: <http://www.rfc.net/rfc793.txt>. Acessado em: 1 Out. 2001. RFC790. ASSIGNED NUMBERS. 1981. Disponvel em: <http://www.rfc.net/rfc790.txt>. Acessado em: 1 Out. 2001. RFC768. USER DATAGRAM PROTOCOL. 1980. Disponvel em: <http://www.rfc.net/rfc768.txt>. Acessado em: 1 Out. 2001. RFC792. INTERNET CONTROL MESSAGE PROTOCOL. 1981. Disponvel em: <http://www.rfc.net/rfc792.txt>. Acessado em: 1 Out. 2001. RFC1332. INTERNET PROTOCOL CONTROL PROTOCOL. 1992. Disponvel em: <http://www.ietf.org/rfc/rfc1332.txt>. Acessado em: 6 Nov. 2002. 68 RFC1334. PPP ATHENTICATION PROTOCOL. 1992. Disponvel em: <http://www.ietf.org/rfc/rfc1334.txt>. Acessado em: 6 Nov. 2002. RFC1661. POINT-TO-POINT PROTOCOL. 1994. Disponvel em: <http://www.ietf.org/rfc/rfc1661.txt>. Acessado em: 6 Nov. 2002. RFC1662. PPP in HDLC-LIKE FRAMING. 1994. Disponvel em: <http://www.ietf.org/rfc/rfc1662.txt>. Acessado em: 6 Nov. 2002. RFC1700. ASSIGNED NUMBERS. 1994. Disponvel em: <http://www.ietf.org/rfc/rfc1700.txt>. Acessado em: 6 Nov. 2002. RFC1877. PPP INTERNET PROTOCOL CONTROL PROTOCOL EXTENSION for NAME SERVER ADDRESS. 1995. Disponvel em: <http://www.ietf.org/rfc/rfc1877.txt>. Acessado em: 6 Nov. 2002.