Aula 07 – 24/03/2008 - Laboratório de Redes – 7ª Fase Universidade do Contestado - UnC Sistemas de Informação Prof. Carlos Guerber APOSTILA TCP/IP 1. HISTÓRICO .............................................................................................................................. 3 2. O MODELO DE REFERÊNCIA TCP/IP.................................................................................... 6 2.1 A CAMADA INTER-REDES ................................................................................... 6 2.2 A CAMADA DE TRANSPORTE ............................................................................. 8 2.3 A CAMADA DE APLICAÇÃO ................................................................................. 9 2.4 A CAMADA HOST/REDE....................................................................................... 9 2.5 POSICIONAMENTO DO NÍVEL OSI ................................................................... 10 2.6 EXEMPLOS DE APLICAÇÃO DE REDES COM ARQUITETURA TCP/IP.......... 11 2.7 COMPARAÇÃO ENTRE OS MODELOS DE REFERÊNCIA OSI E TCP/IP ....... 14 2.8 UMA CRÍTICA AO MODELO DE REFERÊNCIA TCP/IP .................................... 17 3. IPv4 - A VERSÃO ATUAL DO IP........................................................................................... 19 3.1 O DATAGRAMA IPV4 .......................................................................................... 19 4. ENDEREÇAMENTO IP........................................................................................................... 27 4.1 IDENTIFICADORES UNIVERSAIS ...................................................................... 27 4.2 TRÊS CLASSES PRIMÁRIAS DE ENDEREÇO .................................................. 27 4.3 ENDEREÇO DE UMA REDE E ENDEREÇO DE DIFUSÃO (BROADCAST) ..... 29 4.4 DIFUSÃO LOCAL................................................................................................. 29 4.5 ENDEREÇOS DE REFERÊNCIA À PRÓPRIA REDE E AO PRÓPRIO HOST. . 30 4.6 ENDEREÇO DE MULTICAST.............................................................................. 30 4.7 FRAQUEZAS DO ENDEREÇAMENTO IP........................................................... 31 4.8 NOTAÇÃO DECIMAL........................................................................................... 32 4.9 ENDEREÇO DE LOOPBACK .............................................................................. 33 4.11 ENDEREÇAMENTO DE SUB-REDE................................................................... 33 4.11.1 Distribuição Geográfica de Endereços................................................................ 34 4.11.2 Implementação de Sub-redes com Máscara....................................................... 35 4.11.3 Super-redes ......................................................................................................... 35 4.11.4 Exemplo de Redes .............................................................................................. 36 4.12 SUB-REDES......................................................................................................... 38 4.13 PLANEJAMENTO DE UM ESQUEMA DE ENDEREÇAMENTO......................... 41 5. PROTOCOLOS DE ROTEAMENTO ...................................................................................... 43 5.1 CONCEITO........................................................................................................... 43 5.2 RIP........................................................................................................................ 45 5.3 RIP II..................................................................................................................... 46 5.4 OSPF .................................................................................................................... 47 5.5 COMPARAÇÃO ENTRE OS PROTOCOLOS DE ROTEAMENTO RIP E OSPF 47 5.6 EGP ...................................................................................................................... 48 6. PROTOCOLO ARP E RARP .................................................................................................. 50 6.1 INTRODUÇÃO ..................................................................................................... 50 6.2 PROBLEMA DE CONVERSÃO............................................................................ 50 6.2.1 Conversão Através do Mapeamento Direto: ........................................................ 51 6.2.2 Conversão Através de Vinculação Dinâmica: ...................................................... 51 6.2.3 Cache de Conversão de Endereço: ..................................................................... 51 6.3 APRIMORAMENTO DE ARP ............................................................................... 52 6.3.1 Definição ARP ...................................................................................................... 52 6.3.2 Implementação ARP............................................................................................. 52 6.3.3 Encapsulamento e Identificação ARP .................................................................. 53 6.3.4 Formato do Protocolo ARP................................................................................... 53 6.4 PROTOCOLO RARP............................................................................................ 54 6.4.1 Introdução............................................................................................................. 54 7. PROTOCOLO ICMP ............................................................................................................... 56 7.1 MENSAGEMS ICMP ............................................................................................ 57 7.1.1 Echo Request e Echo Reply................................................................................. 57 7.1.2 Destination Unreacheable .................................................................................... 58 7.1.3 Source Quench..................................................................................................... 59 7.1.4 Redirect ................................................................................................................ 60 7.1.5 TTL Expired .......................................................................................................... 62 7.1.6 ICMP Router Solicitation/Advertisement .............................................................. 63 7.1.7 Aquisição de informações de Roteamento........................................................... 64 8. PROTOCOLOS DA CAMADA DE TRANSPORTE ............................................................... 66 8.1 CAMADA DE TRANSPORTE............................................................................... 66 8.2 PROTOCOLO UDP .............................................................................................. 67 8.2.1 Formato da Mensagem UDP................................................................................ 69 8.2.2 Encapsulamento de UDP e Colocação de Protocolos em Camadas .................. 69 8.2.3.1 Organização em camadas.................................................................................... 71 8.2.4 Multiplexação e Demultiplexação UDP e Portas.................................................. 71 8.2.4.1 Números de portas UDP reservadas e disponíveis ............................................. 73 8.3 PROTOCOLO TCP .............................................................................................. 75 8.3.1 Serviços TCP........................................................................................................ 79 8.3.1.1 Serviços TCP: transferência de dados................................................................. 79 8.3.1.2 Serviços TCP: confiabilidade................................................................................ 81 8.3.1.4 Serviços TCP: controle de fluxo ........................................................................... 82 8.3.1.5 Serviços TCP: multiplexação................................................................................ 82 8.3.1.6 Serviços TCP: conexão ........................................................................................ 82 8.3.1.7 Estabelecimento de conexão ............................................................................... 83 8.3.2 Transferência de Dados ....................................................................................... 85 8.3.3 Encerramento da Conexão................................................................................... 86 8.3.4 Desempenho TCP ................................................................................................ 87 3 1 HISTÓRICO A história do TCP/IP está intimamente interligada com a da Internet. O conjunto de protocolos TCP/IP resultou de pesquisas fundadas pelo ARPA (Advanced Research Projects Agent) para conectar redes dos seus departamentos de pesquisas, a esta rede denominou-se ARPANET. Os primeiros projetos de pesquisas originaram-se da idéia de comutação de pacote, considerada radical na época, em meados de 1960. No final da década de 60, precisamente em dezembro de 69, entrou no ar uma rede experimental com quatro nós interligando as instituições UCLA (Universidade de Los Angeles), UCSB (Universidade de Santa Barbara), SRI (Instituto de Pesquisa de Stanford) e Universidade de Utah. Através da experiência conseguida nesta rede, alavancou-se grandes pesquisas sobre protocolos, culminando com a criação dos protocolos e do modelo TCP/IP. Em 1983 o TCP/IP tornou-se o protocolo oficial da ARPANET, levando a uma das primeiras definições de Internet, como sendo um conjunto de rede conectadas via TCP/IP; nessa mesma época foi feita na Universidade de Berkeley, a implantação do protocolo ao sistema operacional Unix, conhecido como BSD . Em adição aos protocolos foram oferecidas um conjunto de aplicações que passaria a expandir os serviços do Unix a mais de uma máquina. Com esta implantação o protocolo aumentou sua popularidade. Conjuntamente a estas aplicações, o BSD ofereceu uma abstração ao seu sistema operacional que permitia acesso aos protocolos TCP/IP, chamada sockets. Isto aumentou a utilização dos protocolos pelos programadores que passaram a enxergá-los num mais alto nível que antes. A partir daí pesquisas foram alavancadas e novas aplicações foram surgindo. Em 1985 a entidade americana NSF ( National Science Foundation) interligou os supercomputadores de seus centros de pesquisas em rede, que passaram a ser conhecida como NSFNET. Em 1986 esta rede conectou-se a ARPANET. O conjunto de todos os computadores desta rede e sua espinha dorsal passaram a ser conhecidas oficialmente como Internet. 4 Em 1988 a NSFNET passou a ser mantida pela IBM, MCI ( empresa de telecomunicações americana) e MERIT ( instituição responsável por uma rede pertencente a instituições de Michigan, EUA) estas criaram a ANS ( Advanced Network and Services). Em 1990 o backbone ( espinha dorsal) ARPANET deixou de existir e no seu lugar foi criado uma outra espinha dorsal conhecida como DRI ( Defense Research Internet ). Em 1990/1993 a ANS criou a ANSNET, que passou a ser a nova espinha dorsal da Internet; paralelamente foi criado a espinha dorsal européia (EBONE), que interligou alguns países da Europa a Internet. A partir de 1993 a rede deixou de ser puramente acadêmica para ser explorada comercialmente. Desde 1991, membros da IETF ( Internet Engineering Task Force ) chegaram a conclusão que o crescimento exponencial da rede levaria em poucos anos a exaustão dos endereços utilizados para identificar os computadores na Internet. Isto se os equipamentos da época não esgotassem toda a sua capacidade. Soluções paliativas então foram criadas para resolver temporariamente este problema. Foi criado um grupo de trabalho pela IETF, para definir uma nova versão do IP ( Internet Protocol ), protocolo utilizado para endereçar e enviar dados que trafegam pela rede. O intuito deste grupo era criar uma nova versão mais eficiente e flexível, e que fosse capaz de resolver os problemas relacionados com a questão do esgotamento de endereços e outros mais. Os principais objetivos foram : • aceitar bilhões de hosts, mesmo com alocação de espaço de endereço ineficiente; • reduzir o tamanho das tabelas de roteamento; • simplificar o protocolo de modo a permitir que os roteadores processem os pacotes com mais rapidez; • oferecer mais segurança ( autenticidade e privacidade ) do que o IP atual; • dar mais importância ao tipo de serviço, particularmente para os dados em tempo real; 5 • permitir multicast, possibilitando a especificação de escopos; • permitir que um host mude de lugar sem precisar mudar de endereço; • permitir que o protocolo evolua no futuro; • permitir a coexistência entre o novo e o antigo protocolo durante anos. Foram submetidos 21 trabalhos ao grupo, estes propuseram desde pequenos ajustes do IP, até a eliminação completa com o surgimento de um novo protocolo. Três propostas foram utilizadas como base, e uma versão ajustada foi criada e manteve características da versão atual, possuindo ainda uma transição melhor. Depois de muita discussão, revisão e disputas, foi produzida a recomendação para a nova versão do IP em novembro de 1994, chamada de SIPP ( Simple Internet Protocol Plus), e lhe foi atribuída a designação de Ipv6. 6 2 O MODELO DE REFERÊNCIA TCP/IP Vamos deixar de lado temporariamente o modelo de referência OSI para nos concentrarmos no modelo de referência usado na "avó" de todas as redes de computadores, a ARPANET, e sua sucessora, a Internet. A ARPANET era uma rede de pesquisa que foi criada pelo Departamento de Defesa dos Estados Unidos. Pouco a pouco, centenas de universidades e repartições públicas foram sendo conectadas a ela através de linhas telefônicas privadas. Quando foram criadas as redes de rádio e satélite, começaram a surgir problemas com os protocolos então existentes, o que forçou a criação de uma nova arquitetura de referência. Seu objetivo era conectar várias redes ao mesmo tempo. Essa arquitetura veio a ficar conhecida como o Modelo de Referência TCP/IP, graças a seus dois principais protocolos. Esse modelo foi definido pela primeira vez por Cerf e Kahn, 1974. Uma nova perspectiva foi oferecida em Leiner et aI-, 1985. A filosofia de projeto na qual se baseia o modelo é discutida em Clark, 1988. Diante da preocupação do Pentágono de que seus preciosos hosts, roteadores e gateways de inter-rede fossem destruídos de uma hora para outra, definiu-se também que a rede fosse capaz de sobreviver à perda de hardwares da sub-rede, impedindo que as conversas que estivessem sendo travadas fossem interrompidas. Em outras palavras, o Pentágono queria que as conexões permanecessem intactas enquanto as máquinas de origem e de destino estivessem funcionando, mesmo que algumas máquinas ou linhas de transmissão intermediárias deixassem de operar repentinamente. Por essa razão, era preciso criar uma arquitetura flexível, capaz de se adaptar a aplicações com necessidades divergentes, como por exemplo a transferência de arquivos e a transmissão de dados de voz em tempo real. 2.1 A CAMADA INTER-REDES Todas essas necessidades levaram à escolha de uma rede de comutação de pacotes baseada em uma camada de ligação inter-rede. Esse 7 camada, chamada de camada inter-redes, integra toda a arquitetura. Sua tarefa é permitir que os hosts injetem pacotes em qualquer rede e garantir que eles sejam transmitidos independentemente do destino (que pode ser outra rede). É possível, inclusive, que esses pacotes cheguem em outra ordem diferente daquela em que foram enviados, obrigando as camadas superiores a reorganizá-los, caso a entrega tenha de respeitar algum tipo de ordem. Observe que, nesse caso, a expressão inter-rede é usada no sentido genérico, muito embora essa camada esteja presente na Internet, analogia usada nesse caso diz respeito ao sistema do correio. Uma pessoa pode soltar uma seqüência de cartas internacionais em uma caixa de correio em um pais e, com um pouco de sorte, a maioria delas será entregue no endereço correto no pais de destino. Provavelmente as cartas atravessarão um ou mais gateways internacionais, mas esse processo é transparente para os usuários. Por essa razão, cada pais (ou seja, cada rede) tem seus próprios selos, tamanhos de envelope preferidos e regras de entrega escondidas dos usuários. A camada inter-redes define um formato de pacote oficial e um protocolo chamado de IP (Internet Protocol). A tarefa da camada inter-redes é entregar pacotes IP onde eles são necessários. O roteamento é uma questão de grande importância nessa camada, assim como evitar congestionamentos. Por essas razões, é razoável dizer que a função da camada inter-redes TCP/IP é muito parecida com a da camada de rede OSI. Host A Host A Mensagem idêntica Aplicação Aplicação Pacote idêntico Transporte Transporte Roteador Inter-Rede Datagrama idêntico Inter-rede Rede Rede Quadro idêntico Rede Física 1 Datagrama idêntico Rede Inter-Rede Rede Quadro idêntico Rede Física 2 8 2.2 A CAMADA DE TRANSPORTE No modelo TCP/IP, a camada localizada acima da camada inter-redes é chamada de camada de transporte. A finalidade dessa camada é permitir que as entidades par (peer entity) dos hosts de origem e de destino mantenham uma conversação, exatamente como acontece na camada de transporte OSI. Dois protocolos fim a fim foram definidos aqui. O primeiro deles, o TCP (Transmission Control Protocol), é um protocolo orientado à conexão confiável que permite a entrega sem erros de um fluxo de bytes originado de uma determinada máquina em qualquer computador da inter-rede. Esse protocolo fragmenta o fluxo de bytes de entrada em mensagens e passa cada uma delas para a camada inter-redes No destino, o processo TCP remonta as mensagens recebidas no fluxo de saída. O TCP cuida também do controle de fluxo, impedindo que um transmissor rápido sobrecarregue um receptor lento com um volume de mensagens muito grande. O segundo protocolo dessa camada, o UDP (User Datagram Protocol), é um protocolo sem conexão não confiável para aplicações que não necessitam nem de controle de fluxo, nem da manutenção da seqüência das mensagens enviadas. Ele é amplamente usado em aplicações em que a entrega imediata é mais importante do que a entrega precisa, como a transmissão de dados de voz ou de vídeo. Desde que o modelo foi desenvolvido, o IP foi implementado 9 em muitas outras redes. 2.3 A CAMADA DE APLICAÇÃO O modelo TCP/IP não tem as camadas de sessão e de apresentação. Como não foi percebida qualquer necessidade, elas não foram incluídas. A experiência com o modelo OSI provou a seguinte tese: elas são pouco usadas na maioria das aplicações. Acima da camada ,de transporte, está a camada de aplicação Ela contêm os protocolos de alto nível. Dentre eles estão o protocolo de terminal virtual (TELNET), o protocolo de transferência de arquivos (FTP) e o protocolo de correio eletrônico (SMTP), como mostra a Figura 1 anterior o protocolo do terminal virtual permite que um usuário de um Computador estabeleça login em uma máquina remota e trabalhe nela. O protocolo de transferência de arquivos permite mover dados com eficiência de uma máquina para outra. Originalmente, o correio eletrônico era um tipo de transferência de arquivo. No entanto, posteriormente um protocolo especializado foi desenvolvido para essa função. Muitos outros protocolos foram incluídos com o decorrer dos anos, como o DNS (Domain Name Service), que mapeia os nomes de host para seus respectivos endereços de rede, o NNTP, o protocolo usado para mover novos artigos, e o HTTP, o protocolo usado para buscar páginas na WWW (World Wide Wcb). entre outros. 2.4 A CAMADA HOST/REDE Abaixo da camada inter-redes, encontra-se um grande vácuo. O modelo de referência T'CP/IP não especifica coisa alguma, exceto pelo fato de que o host tem de se conectar com a rede utilizando um protocolo, para que seja possível enviar pacotes. Esse protocolo não é definido e varia de host para host e de rede para rede. Os livros e a documentação que tratam do modelo TCP/IP raramente descrevem esse protocolo. 10 2.5 POSICIONAMENTO DO NÍVEL OSI A arquitetura TCP/IP possui uma série de diferenças em relação à arquitetura OSI. Elas se resumem principalmente nos níveis de aplicação e Inter-rede da arquitetura TCP/IP. Como principais diferenças pode-se citar: • OSI trata todos os níveis, enquanto TCP/IP só trata a partir do nível de Rede OSI • OSI tem opções de modelos incompatíveis. TCP/IP é sempre compatível entre as várias implementações • OSI oferece serviços orientados a conexão no nível de rede, o que necessita de inteligência adicional em cada equipamento componente da estrutura de rede. Em TCP/IP a função de roteamento é bem simples e não necessita de manutenção de informações complexas • TCP/IP tem função mínima (roteamento IP) nos nós intermediários (roteadores) • Aplicações TCP/IP tratam os níveis superiores de forma monolítica, Desta forma OSI é mais eficiente pois permite reaproveitar funções comuns a diversos tipos de aplicações. Em TCP/IP, cada aplicação tem que implementar suas necessidades de forma completa. A Figura 22 ilustra a comparação entre TCP/IP e OSI. Note que a camada Inter-rede de TCP/IP apresenta uma altura menor que o correspondente nível de Rede OSI. Isto representa o fato de que uma das funções do nível de Rede OSI é realizada pelo nível de Rede TCP/IP. Esta função é a entrega local de mensagens dentro da mesma rede. O IP só trata a entrega e a decisão de roteamento quando o origem e o destino da mensagem estão situados em redes distintas. 11 Arquitetura TCP/IP Arquitetura OSI Aplicação Apresentação Aplicação Sessão Transporte Inter-rede Transporte Rede Enlace Rede Físico Figura 22- OSI e TCP/IP A Figura 23 abaixo ilustra um posicionamento geral de diversos protocolos nas arquiteturas OSI, TCP/IP e Novell Netware: Aplicação DS, MHS FTAM Shell DNS S M T P F T P ping H T T P Apresentação ISO Presentation Sessão ISO Session Transporte ISO Transport C4 SPX TCP, UDP Rede X.25 SNDCP IPX IP, ICMP NCP Winsock Enlace Físico LLC IEEE 802.2 IEEE 802.3 IEEE 802.5 DD MLID Binding A R DD NDIS P Ethernet Ethernet LSL N F S socket POP T e l n e t TLI Unix PPP X.25 Ethernet Serial Figura 23 – Posicionamento protocolos 2.6 EXEMPLOS DE APLICAÇÃO DE REDES COM ARQUITETURA TCP/IP Seguem abaixo, alguns exemplos de aplicações da arquiteturas distintas de rede baseadas em TCP/IP, como por exemplo, redes internas de empresas 12 baseadas em transporte TCP/IP, serviços de redes de empresas conectados à Internet, provedores de acesso à Internet. Exemplo 1: Redes internas à empresa utilizando protocolos TCP/IP para formar a estrutura de comunicação e a base das aplicações de rede (correioeletrônico), compartilhamento de arquivos, distribuição de informação via hipertexto, etc… e chamadas de intranet: M M Roteador B M M Hub ou switch Roteador principal Servidor HTTP Servidor DNS Servidor NFS, NIS Servidor LPD Servidor SMTP POP3/ IMAP4 Servidor FTP Servidor News Gerência SNMP Exemplo 2: Uma estrutura de rede TCP/IP conectada à Internet de forma segura, através da utilização de um firewall, que realiza o filtro de pacotes IP e o transporte de protocolo de aplicações por meio de um gateway (proxy): Servidor Externo HTTP, FTP, DNS Roteador Firewall Filtros, NAT Proxy HTTP, FTP, Telnet Gateways seguros Acesso Remoto Clientes Servidor Proxy Servidor HTTP DNS, FTP Servidor SMTP/POP3 Correio corporativo 13 Exemplo 3: Um provedor de acesso à Internet, fornecendo serviços de conexão a usuários discados e empresas por meio de ligação dedicada, além de oferecer os serviços básicos de Internet como HTTP, SMTP, POP3, FTP, etc… M Roteador B Roteador A M M M Internet Acesso IP Dedicado Hub ou switch Servidor HTTP Servidor DNS Gerência Servidor SMTP POP3/ IMAP4 Radius/Tacacs Servidor FTP Servidor News Acesso IP Discado M M M M ... M Sistema Telefônico M 14 2.7 COMPARAÇÃO ENTRE OS MODELOS DE REFERÊNCIA OSI E TCP/IP Os modelos de referência OSI e TCP/IP têm muito em comum. Os dois se baseiam no conceito de uma pilha de protocolos independentes. Além disso, as camadas têm praticamente as mesmas funções. Em ambos os modelos, por exemplo, estão presentes as camadas que englobam até a camada de transporte. Nesses modelos, são oferecidos aos processos que desejam se comunicar um serviço de transporte fim a fim independente do tipo de rede que está sendo usado. Essas camadas formam o provedor de transporte. Mais uma vez em ambos os modelos, as camadas acima da camada de transporte dizem respeito aos usuários orientados à aplicação do serviço de transporte. Apesar dessas semelhanças fundamentais, os dois modelos também têm muitas diferenças. É importante notar que estamos comparando modelos de referência, independente das pilhas de protocolos correspondentes. O modelo OSI tem três conceitos fundamentais, que são os seguintes: 1. Serviços 2. Interfaces 3. Protocolos Provavelmente a maior contribuição do modelo OSI é tornar explicita a distinção entre esses três conceitos. Cada camada executa alguns serviços para a camada acima dela. A definição do serviço informa o que a camada faz, e não a forma como as entidades acima dela o acessam ou como a camada funciona. A interface de uma camada informa como os processos acima dela podem acessá-la. A interface especifica quais são os parâmetros e resultados a serem esperados. Ela também não revela o funcionamento interno da camada. Finalmente, os protocolos utilizados em uma camada são de responsabilidade dessa camada A camada pode usar os protocolos que quiser, desde que eles viabilizem a realização do trabalho (ou seja, forneçam os 15 serviços oferecidos). Ela também pode alterar esses protocolos sem influenciar o software das camadas superiores. Essas idéias se adaptam perfeitamente aos novos conceitos da programação orientada a objetos. Um objeto, assim como uma camada, tem um conjunto de métodos (operações) que processos externos ao objeto podem ativar. A semântica desses métodos define o conjunto de serviços que o objeto oferece. Os parâmetros e os resultados do método formam a interface do objeto. O código interno do objeto e seu protocolo, que não e visível nem interessa aos elementos que estão fora do objeto. Originalmente, o modelo TCP/IP não distinguiu com clareza a diferença entre serviço, interface e protocolo, embora as pessoas tenham tentado adaptá-lo ao modelo OSI. Por exemplo, os únicos serviços reais oferecidos pela camada inter-redes são SEND IP PACKET (enviar pacote IP) e RECEIVE IP PACKET (receber pacote IP). Por essa razão, os protocolos do modelo OSI são mais bem encapsulados do que no modelo TCP/IP e podem ser substituídos com relativa facilidade, acompanhando as tendências dos eventuais avanços tecnológicos. Um dos principais objetivos das diversas camadas de protocolo são as possibilidades que elas oferecem no que diz respeito a essas mudanças. O modelo de referência OSI foi concebido antes de os protocolos terem sido inventados. Conseqüentemente, o modelo não foi criado com base em um determinado conjunto de protocolos, o que o deixou bastante flexível. No entanto, há o inconveniente de os projetistas não terem experiência com o assunto e não terem muita noção sobre a funcionalidade que deve ser colocada em cada camada. Por exemplo, a camada de enlace de dados originalmente lidava com redes ponto a ponto. Quando surgiram as redes de difusão, uma nova camada teve de ser criada no modelo. Quando as pessoas começaram a criar redes com base no modelo OSI e nos protocolos existentes, elas perceberam que as especificações de serviço obrigatórias não eram compatíveis. Portanto, foi necessário enxertar no modelo sub-camadas de convergência que permitissem atenuar as diferenças. Como acreditava que cada país teria uma rede, controlada pelo governo e baseada nos protocolos OSI, o comitê não se preocupou com as conexões inter-redes. Resumindo: na prática, foi tudo muito 16 diferente. Com o TCP/IP, aconteceu exatamente o contrário: como os protocolos vieram primeiro, o modelo foi criado com base neles. Os protocolos não tiveram problemas para se adaptar ao modelo. Foi um casamento perfeito. O único problema foi o seguinte: o modelo não se adaptava às outras pilhas de protocolos. Conseqüentemente, ele não era de muita utilidade quando havia necessidade de se escrever redes que não faziam uso do protocolo TCP/IP. Deixando a filosofia de lado e entrando em questões mais práticas, uma das maiores diferenças entre os dois modelos está no número de camadas: o modelo OSI tem sete camadas e o TCP/IP, quatro. Ambos têm as camadas de inter-rede, transporte e aplicação, mas as outras são diferentes. Outra diferença está na área da comunicação sem conexão e da comunicação orientada à conexão. Na camada de rede, o modelo OSI é compatível com a comunicação sem conexão e com a comunicação orientada à conexão no entanto, na camada de transporte, o modelo aceita apenas a comunicação orientada à conexão, onde ela de fato é mais importante (pois o serviço de transporte é visível para os usuários). O modelo TCP/IP tem apenas um modo na camada de rede (sem conexão), mas aceita ambos os modelos na camada de transporte, oferecendo aos usuários uma opção de escolha. Essa escolha é especialmente solicitação/resposta. importante para os protocolos simples de 17 2.8 UMA CRÍTICA AO MODELO DE REFERÊNCIA TCP/IP Os protocolos e o modelo TCP/IP também tiveram os seus problemas. Em primeiro lugar, o modelo não diferencia com a necessária clareza os conceitos de serviço, interface e protocolo. A boa prática da engenharia de software exige uma diferenciação entre especificação e implementação, o que, ao contrário do que acontece com o OSI, não acontece com o TCP/IP. consequentemente, o modelo TCP/IP não é o melhor dos guias para se estruturar novas redes com base em novas tecnologias. Em segundo lugar, o modelo TCP/IP não é nem um pouco abrangente e não consegue descrever outras pilhas de protocolos que não a TCP/IP. Seria praticamente impossível, por exemplo, tentar descrever a SNA usando o modelo TCP/IP. Em terceiro lugar, a camada host/rede não é realmente uma camada no sentido em que o termo é usado no contexto dos protocolos hierarquizado.s Trata-se, na verdade, de uma interface (entre as camadas de rede e de enlace de dados). A distinção entre uma interface e uma camada é crucial e você deve considerá-la com cuidado. Em quarto lugar, o modelo TCP/IP não faz distinção (nem menciona) entre as camadas física e de enlace de dados. Elas são complemente diferentes. A camada física está relacionada às características de transmissão do fio de cobre, dos cabos de fibra óptica e da comunicação sem fio. A tarefa da camada de enlace de dados é delimitar o início e o final dos quadros e enviá-los de um lado a outro com o grau de confiabilidade desejado. Um modelo mais adequado incluiria as duas camadas como elementos distintos. O modelo TCP/IP não faz isso. Por fim, apesar de os protocolos IP e TCP terem sido cuidadosamente projetados e bem implementados, o mesmo não aconteceu com muitos outros protocolos produzidos pela comunidade acadêmica. As implementações desses protocolos eram gratuitamente distribuídas, o que acabava difundindo seu uso de tal forma que acabava ficando difícil substituí-las- A fidelidade a esse produtos é, atualmente, motivo de alguns embaraços. O protocolo de 18 terminal virtual, o TELNET, por exemplo, foi projetado para um vídeo TTY mecânico, capaz de processar 10 caracteres por segundo. Ele não reconhece mouses e interfaces gráficas No entanto, esse protocolo é usado em larga escala ainda hoje, 25 anos depois de seu surgimento. Em resumo, apesar de seus problemas, o modelo OSI (menos as camadas de sessão e apresentação) mostrou-se excepcionalmente útil para a discussão das redes de computador. Por outro lado, os protocolos OSI jamais conseguiram se tornar populares. É exatamente o contrário o que acontece com o TCP/IP: o modelo é praticamente ignorado, mas os protocolos são usados cm larga escala. 19 3 IPv4 - A VERSÃO ATUAL DO IP O protocolo IP foi projetado tendo como principal objetivo a ligação interredes. Por isto ele é considerado como elemento integrador da Internet, através dele é possível a conexão de diversas sub-redes. A internet é composta de diversos backbones construídos através linhas de alta velocidades de diversos tipos de tecnologia. A cada um destes backbones estão conectados várias redes locais de muitas outras instituições cada uma com suas características de sub-rede. Em muitas empresas é comum utilizar o IP, e outros protocolos de sua família, para interligar computadores de tecnologia diferentes. O protocolo IP providencia duas importantes definições de serviço. Uma define a unidade básica de transferência de dados chamada de datagrama IP. A outra define uma função de roteamento, preocupando-se como os pacotes são endereçados e quais caminhos terão que seguir para chegarem a seu destino. 3.1 O DATAGRAMA IPV4 Antes de começar a desenvolver sobre o Protocolo IP propriamente dito, explicar-se-á sobre o conceito do termo datagrama. Como foi visto anteriormente, existem dois tipos de serviços a serem disponibilizado em uma rede: o orientado a conexão e o não orientado. No primeiro, o fluxo de dados é feito como se existisse um duto, onde uma vez feito a conexão inicial, os dados são colocados neste, garantindo assim uma entrega confiável dos dados e a sua seqüencialização. Para a camada de rede, um serviço equivalente a este tipo, costuma ser chamado de circuito virtual, em analogia aos sistemas telefônicos. Neste serviço é necessário , então, uma configuração obrigatória do circuito e a rota por onde os pacotes fluem é escolhida previamente. Cada pacote é endereçado através da identificação do circuito virtual, seguindo esta rota. No segundo, temos um fluxo de pacotes independes chamados de datagramas. No serviço de datagrama, nenhuma rota é preestabelecida e cada pacote é enviado independentemente. Neste 20 caso, cada pacote contém os endereços completos da origem e do destino sem se preocupar com a ordem de chegada dos mesmos. Uma outra característica inerente ao serviço de datagrama é que este limita o tamanho dos dados a serem transmitidos. Um datagrama IP consiste em duas partes: o cabeçalho e a área útil de dados. O cabeçalho, como já foi mencionado, inclui campos adicionais a mensagem a ser transmitida de maneira que o protocolo IP possa ser executado. Este é composto de uma parte fixa e uma parte opcional variável. A Figura 4 mostra o formato de um datagrama IP. Logo a seguir é feita uma descrição de cada um dos campos que formam o seu cabeçalho. 21 32 BITS VERSIO N TYPE IHL OF SERVICE IDENTIFICATION TOTAL LENGTH D M F F TIME TO LIVE PROTOCO L FRAGMENT OFFSET HEADER CHECKSUM SOURCE ADDRESS DESTINATION ADDRESS OPTIONS DATA Figura 4 - Formato do datagrama IPv4 O campo VERSION ( 4 bits) contém a versão do IP que foi usado para criar o datagrama. Desta maneira checa-se a versão antes de processá-lo, evitando-se que formato de pacotes diferentes sejam usados. O campo HLEN ( header length ) possui quatro bits que indicam o comprimento do datagrama em palavras de 32 bits. O seu valor mínimo é 5, o que indica um cabeçalho variando de 20 octetos ( sem o campo OPTIONS que é opcional ) a 60 octetos. O TYPE OF SERVICE ( 8 bits) indica o tipo de serviço de rede que se deseja. Como pode ser visto na Figura 5, o campo pode ser quebrado em 5 ( cinco) sub-campos. Os três primeiros bits correspondem ao sub-campo PRECEDENCE que diz a prioridade de cada datagrama àquele que enviará os 22 dados. O valor 1 indica prioridade normal, e 7 a mais alta prioridade que é utilizada para pacotes de controle de rede. Os bits D, T e R especificam respectivamente, o que é mais importante no envio do pacote: retardo, taxa de envio e confiabilidade. Desta maneira pode-se escolher prioridades de tipos de links diferentes de acordo com o desejado. Os dois últimos bits não são utilizados. Na prática os roteadores ( equipamentos utilizados para especificar rotas aos datagramas ) ignoram totalmente todas as opções do campo TYPE OF SERVICE, pois é necessário um conhecimento prévio da tecnologia dos links utilizados. 0 1 PRECEDENCE 2 3 4 5 6 D T R Não Usados Figura 5 - Os cinco sub-campos do campo SERVICE TYPE O campo TOTAL LENGTH indica o tamanho total do datagrama, incluindo cabeçalho e dados, em octetos. O valor máximo que lhe é atribuído é de 65.535 bytes. Nas tecnologias de redes existentes este valor é suficiente, porém, com a utilização de redes de altíssima velocidade é um fator limitante. Antes de falar sobre os próximos campos, seria interessante visualizar como os datagrama relacionam-se com os quadros da sub-rede. Verificou-se anteriormente que o datagrama poderia ter um tamanho de até 65.535 octetos, porém na prática, existem outros limites fundamentais. Sabe-se que os datagramas, movem-se de uma máquina para outra, e que estes devem ser transportados pela camada de sub-rede. Para fazer um transporte eficiente é preciso que cada datagrama seja transportado em um quadro distinto desta camada. Este processo denomina-se encapsulamento. Ao tamanho máximo do quadro suportado por uma camada de sub-rede denomina-se MTU ( maximum transfer unit ). O protocolo IP implementa uma maneira dos datagramas trafegarem em meios físicos que não podem contê-lo completamente. O datagrama é fragmentado em pedaços menores que serão logo depois remontados, com 7 23 isto, ele não fica limitado a pedaços pequenos de acordo com a tecnologia de hardware utilizada. Cada fragmento contém a duplicação dos campos do cabeçalho que o originou, exceto pelos que dizem tratar-se de um fragmento. Para fazer isto, ele utiliza os campos IDENTIFICATION, MF, DF e FRAGMENT OFFSET, como é explicado a seguir. O campo IDENTICATION (16 bit's), permite no caso de uma fragmentação, o destino identificar a qual datagrama pertence o fragmento, utilizando-se deste e do endereço daquele que o originou. O bit DF indica que o Datagrama não deve ser fragmentado. Garantindo que isto não ocorrerá, mesmo que se tenha um desempenho baixo se o mesmo for forçado a passar por uma rede lenta. O bit MF indica que existem mais fragmentos a seguir. Todos os fragmentos devem tê-los setados, menos o último. O campo FRAGMENT OFFSET indica a que ponto do Datagrama original o fragmento pertence. Todos os fragmentos devem ser múltiplos de 8 bytes. O campo TIME TO LIVE representa o tempo de processamento dos pacotes em segundos. Cada roteador ao processar o datagrama decrementa o tempo gasto para este processamento, se alcançar zero o datagrama é descartado. Com a dificuldade dos roteadores saberem detalhes do tempo de transmissão sub-redes, na prática ao passar pelos mesmos, este campo é decrementado de 1. Garantindo, assim, que um datagrama não trafegue indefinidamente pela rede caso haja uma rota em loop, ou seja, um caminho que seja cíclico. O campo PROTOCOL especifica qual protocolo de transporte foi utilizado para criar os dados transportados pelo datagrama. É utilizado para entregar o dados diretamente ao tipo do protocolo que o criou. O campo HEADER CHECKSUM garante a integridade do cabeçalho. Este processo é feito considerando o cabeçalho como uma seqüência de inteiros de 16 bits, onde soma-se eles utilizando aritmética de complemento de 1 e depois calcula-se o complemento de 1 do resultado. Se o valor der 0, não houve erro no cabeçalho. 24 Os campos SOURCE IP ADDRESS e DESTINATION IP ADDRESS (32 bits), contém respectivamente os endereços do host de origem e do host de destino. Apesar destes passarem por muitos equipamentos intermediários ( roteadores) os mesmos não se modificam. Discutiremos as formas de endereçamento nos capítulos seguintes. O campo OPTIONS não é requerido em todos os datagramas. Foi criado inicialmente para permitir novas implementações ao projeto original. O comprimento deste campo depende de quais opções foram selecionadas. Algumas possuem somente 1 octeto, outras possuem comprimentos variáveis. Quando presentes no datagrama, as opções aparecem de forma contígua e sem separadores. Cada opção consiste de 1 octeto simples que representa o OPTION CODE, que pode ser seguido de um outro octeto LENGTH e um conjunto de octetos de dados. O OPTION CODE é dividido em 3 sub-campos, como pode ser visto na Figura 6. O primeiro campo, o COPY, controla como os roteadores devem tratar as opções durante a fragmentação. Quando tem o seu valor 1 especifica que a opção será copiada em todos os fragmentos, quando 0, somente no primeiro. O OPTION CLASS indica as várias classes de opções. Os outros dois representam as várias sub-opções dentro desta mesma classe. 0 COPY 1 2 OPTION CLASS 3 4 5 OPTION NUMBER Figura 6 – Sub-campos do OPTION CODE OPTION Classes CLASS 0 Controle de datagrama ou de rede 1 Reservado para uso futuro 2 Medidas e depuração 3 Reservado para uso futuro 6 7 25 OPTIO N CODE 0 OPTION NUMBER Comprimento Descrição da opção 0 -------------------------- Fim das opções. Indica que as opções Terminaram, a partir daí é colocado bytes para completar o cabeçalho. 0 1 -------------------------- Sem Usados operação. para alinhar octetos em uma lista de opções 0 2 11 palavras de 32 bit’s Security. para Usado implementar segurança. 0 3 Variável Loose Route. Usado encaminhar Source para um datagrama ao longo de um caminho especificado. 0 7 Variável Record Route. Usado para registrar as rotas. 0 9 Variável Strict Route. Usado encaminhar Source para um datagrama ao longo de um especificado. caminho 26 2 4 Variável Intert Timestamp. Usado para registrar o tempo em cada roteador. A opção Record Route permite a criação de uma lista vazia de endereço IP e cada roteador anexa seu endereço nesta. É utilizada para fins de depuração de endereços. O Source Route provê uma maneira de indicar o caminho que deve ser seguido pelo datagrama, isto é feito para verificar taxa de envio de dados de uma rede obrigando-a a seguir por um caminho a ser testado, para enviar pacotes de emergência ou evitar rotas por questões políticas ou econômicas. Existem duas variações desta opção, o Strict e o Loose. No Stict é fornecido um caminho completo a ser seguido e o datagrama é obrigado a passar por ele. No Loose, o pacote percorre por uma lista de roteadores específicos e é permitido que ele passe por outros intermediários. Timestamp trabalha como o Record Option .Cria uma lista vazia que é preenchida com o roteador e um tempo relativo a ele. Esta opção elimina a ambigüidade, pois, o registro do roteador e seu timestamp permite que se possa saber exatamente qual caminho o datagrama seguiu. Security informa o nível da segurança da informação. Não utilizado na prática, pois informa justamente quais informações são mais interessantes para alguém com más intenções. 27 4 ENDEREÇAMENTO IP 4.1 IDENTIFICADORES UNIVERSAIS Diz-se que um sistema provê um serviço de comunicação universal quando é possível a quaisquer dos elementos deste sistema se comunicarem arbitrariamente. Para tornar um sistema de comunicação universal, devemos estabelecer um método globalmente aceito para identificação dos componentes a ele conectados. Nas redes TCP/IP, a entidade que atua como identificador universal é o endereço IP, um número de 32 dígitos binários. A idéia básica de seus mentores era a de tornar o roteamento simples e eficiente. É verdade que a manipulação deste tipo de número traz grande facilidade para o nível de software, mas seu tratamento não é tão simples para um humano. 4.2 TRÊS CLASSES PRIMÁRIAS DE ENDEREÇO Podemos pensar na Internet como uma gigantesca rede de computadores como qualquer outra rede física. A grande diferença, entretanto, está no fato de que a Internet é uma estrutura virtual, concebida por seus desenhistas e implementada inteiramente em software. Assim, os projetistas tiveram liberdade de arbitrar o tamanho e formato dos pacotes, endereços, técnicas de roteamento, etc. Nada é ditado pelo hardware. Na questão do endereçamento, optou-se por um esquema análogo ao das redes convencionais, onde a cada host é atribuído um número inteiro que será seu endereço - no caso o endereço IP. A grande vantagem no esquema de endereçamento da Internet é que ele foi cuidadosamente concebido para simplificar a tarefa de roteamento. Cada máquina ligada à Internet possui um endereço de 32 bits, que se divide em duas partes: uma primeira que identifica a rede a qual esse computador está fisicamente conectado e uma segunda parte que identifica o computador propriamente dito. Observe que todas as máquinas conectadas a 28 uma mesma rede irão compartilhar essa primeira parte, que se convencionou chamar net id (identificador da rede). Analogamente, à segunda porção do endereço IP chamamos host id (identificação da máquina). Em termos práticos, cada endereço IP deverá estar contido em uma das cinco categorias representadas na Figura 7. A classe de um endereço pode ser identificada através do exame dos quatro bits de mais alta ordem, sendo que as três classes básicas (A, B e C) podem ser distinguidas apenas pelos dois primeiros. A classe A, usada para um pequeno número de redes que contêm mais de 65.535 hosts, reserva 7 bits para o net id e 24 bits para o host id. Os endereços da classe B se destinam a redes de tamanho intermediário (entre 256 e 65535 máquinas) e reservam 14 bits para o net id e 16 bits para o host id. Finalmente, a classe C, apropriada para pequenas redes, aloca 21 bits para o net id e apenas 8 bits para o host id. Observe que os endereços IP são estruturados de forma a permitir uma rápida extração da identificação da rede (net id) e da máquina a ela conectada (host id). Os gateways dependem da extração eficiente do net id para realizar o roteamento dos pacotes IP. Figura 7 – Categorias IP Ainda há pouco, dissemos que os endereços IP identificam um host. Essa afirmativa simplifica o tratamento do assunto mas não é estritamente correta. Considere um gateway que conecta duas redes. Como poderemos atribuir a essa máquina um único endereço IP, contendo uma identificação da rede e do host? Na verdade, não podemos. Máquinas como a deste exemplo, possuem não um, mas múltiplos endereços IP (dois, no caso). Cada um de seus endereços identifica uma conexão de rede. Numa definição mais precisa, 29 portanto, endereços IP não definem hosts, mas conexões a uma rede. Máquinas conectadas a n redes, possuirão n endereços IP. 4.3 ENDEREÇO DE UMA REDE E ENDEREÇO DE DIFUSÃO (BROADCAST) Já mencionamos a maior vantagem em codificar informação sobre a rede num endereço Internet: possibilitar um roteamento eficiente. Outra vantagem, é que os endereços IP podem se referir tanto a hosts quanto a redes. Por convenção, um host id 0 nunca é atribuído a uma máquina. Ao invés disso, esse endereço com os bits do host id todos zerados irá se referir à rede propriamente dita. Outra vantagem do esquema de endereçamento da Internet é que ele permite que se faça referência a todos os hosts de uma determinada rede através do chamado endereço de difusão. Um endereço de broadcast é aquele em que os bits do host id são todos 1. Nem todas as redes suportam a difusão, algumas irão precisar de implementação de software e outras não permitirão esta facilidade nem mesmo a nível de software. 4.4 DIFUSÃO LOCAL O endereço de broadcast que acabamos de descrever é chamado de Endereço de Difusão Direcionada já que contém um net id válido (isto é, um endereço de uma rede existente) e um host id indicando broadcast. O endereço de difusão permite que um sistema remoto mande um pacote para todos os nós de uma determinada rede. Do ponto de vista do endereçamento, a grande desvantagem deste esquema é que ele requer o conhecimento do endereço de rede. Outra forma de endereço de difusão de pacotes é chamada endereço de difusão limitada ou endereço de difusão local. Este endereço consiste de 32 bits iguais a 1. Esse mecanismo possibilita a referência a todas as máquinas de uma rede local sem que os endereços IP reais sejam conhecidos. 30 4.5 ENDEREÇOS DE REFERÊNCIA À PRÓPRIA REDE E AO PRÓPRIO HOST. Já podemos perceber que campos de endereço preenchidos somente com 1's indicam "todos". Um endereço com 32 bits 1, indica todas as máquinas desta rede e um endereço com todos os bits do host id iguais a 1 indica todas as máquinas de uma determinada rede (especificada no net id). Analogamente, campos preenchidos com 0's são geralmente interpretados como significando "este". Assim, um endereço com 32 bits 0, indica o próprio host (este host) e um endereço com todos os bits do net id iguais a zero, se refere à rede local (esta rede). 4.6 ENDEREÇO DE MULTICAST Muitas tecnologias de rede contêm mecanismos que permitem o envio simultâneo (ou quase simultâneo) de pacotes a múltiplos destinatários. Até agora, abordamos um destes mecanismos, conhecido com difusão. Na difusão é enviada uma cópia de um pacote para todos os nós de uma rede. Em redes de barramento (como a Ethernet) isso pode ser alcançado com o envio de um único pacote (capturado por todos os hosts). Em outras topologias, com conexões ponto-a-ponto, esse pacote deverá ser replicado para alcançar todos os hosts. Algumas redes suportam um segundo tipo de comunicação ponto multiponto, conhecido com multicast. Ao contrário do broadcast, a técnica de multicast permite que cada host "escolha" se deseja ou não participar daquele "canal". Quando um grupo de máquinas decide se comunicar, elas selecionam um endereço de multicast que será, então, o seu canal de comunicação. Na Internet, quando um determinado grupo de máquinas (que podem estar conectadas a redes distintas) deseja criar um grupo de multicast, elas devem todas "sintonizar", isto é, configurar suas interfaces para receber pacotes enviados para um mesmo endereço. Esse endereço deverá pertencer 31 à Classe D. Assim, cada endereço entre 224.0.0.0 e 239.255.255.255 (mais de 268 milhões de alternativas!) pode ser usado por um determinado grupo de multicast. A idéia é que hosts podem, a qualquer momento, conectar-se ou desconectar-se de um grupo de multicast. A técnica de multicasting traz, como vantagem sobre a difusão, uma melhor seletividade. Isto é, os dados só serão enviados aos hosts necessários. E mais, os hosts alcançados não precisam pertencer a uma mesma rede física. Entretanto, sua implementação é mais complexa pois necessita de hardware especializado. 4.7 FRAQUEZAS DO ENDEREÇAMENTO IP Um das desvantagens do esquema de endereçamento da Internet é que, como um endereço IP se refere a uma conexão de rede (e não a um host), quando uma máquina muda de uma rede para outra, ela deve mudar de endereço IP. Isso traz uma grande barreira à conexão de hosts móveis (como computadores portáteis) que precisem de IPs fixos à Internet. Uma limitação menos importante está no fato de que redes classes C que crescam para além de 255 hosts devem ser realocadas para a classe B. O que implica uma mudança de todos os endereços. A maior fraqueza, entretanto, surge quando analisamos cuidadosamente uma situação especial de roteamento de pacotes na Internet. Já dissemos que as decisões de roteamento (i.e. para que canal entre diversas possibilidades um pacote deve ser mandado) dependem da extração do net id. Considere uma máquina conectada a duas redes (Rede 1 e Rede 2). Como o roteamento de pacotes para este host será determinado pelo seu net id (e ele possui dois distintos), o caminho tomado por um pacote que se destina a essa máquina irá depender do endereço usado pelo remetente. Assim, parâmetros, como o tempo de resposta na comunicação, irão variar de acordo com a interface que seja endereçada. Essa multiplicidade de caminhos pode trazer consequências pouco óbvias. Um host pode deixar de ser acessível por um de seus endereços IP, caso haja algum impedimento físico em uma das redes a que ele está 32 conectado. Uma outra máquina que conheça apenas esse endereço (desativado) e se comunique com este host através dele não poderá mais fazêlo, embora o host ainda esteja ligado a Internet. 4.8 NOTAÇÃO DECIMAL Números de 32 bits não são facilmente manipuláveis por seres humanos, e mesmo os programas da camada de aplicação não tratam diretamente com este tipo de representação. Uma forma mais inteligível de representar endereços IP é a de particioná-lo em quatro octetos convertidos para a notação decimal e separados por pontos. Desta forma, o binário 11000000 11000110 00001011 10000001 passa a ser tratado como 192.198.11.129 Pode-se também atribuir nomes alfabéticos a hosts, facilitando ainda mais sua memorização. Esta tradução é apoiada por um protocolo específico que atua sobre uma imensa base de dados distribuída conhecida como Domain Name System. O DNS é um assunto de complexidade, que merece um curso exclusivamente dedicado a ele. Por questões de simplificação pode-se representar um endereço IP de 32 bits agrupando-os em grupos de 8 bits e representando estes grupos em valores decimais. Por exemplo o endereço 11001000100010011000001100000010 representado em forma de ponto decimal seria 200.137.131.2. Classe A 1.0.0.0 até 127.255.255.255 33 4.9 Classe B 128.0.0.0 até 191.255.255.255 Classe C 192.0.0.0 até 223.255.255.255 Classe D 224.0.0.0 até 239.255.255.255 Classe E 240.0.0.0 até 247.255.255.255 ENDEREÇO DE LOOPBACK O endereço 127.0.0.0 é reservado à aplicação de loopback. Isto é, qualquer pacote enviado a este endereço não deve trafegar na rede, mas retornar ao próprio remetente (isto equivale a dizer que o pacote retornará da própria interface de rede do host). O endereço de loopback se presta a testes e comunicação entre processos que rodam numa mesma máquina. 4.11 ENDEREÇAMENTO DE SUB-REDE Uma técnica que permite que se partilhe um mesmo endereço de rede entre diversas redes é o endereçamento de sub-rede. Vamos imaginar uma instituição a qual foi atribuído um endereço classe C mas que possui diversas redes interconectadas em suas instalações. Como partilhar este endereço entre estas diversas redes? A adição de sub-redes implica uma nova subdivisão do endereço IP. O sufixo designador do host (host id) é dividido em duas partes: a primeira designará uma sub-rede, e a segunda um host a ela conectado. O problema básico que surge quando realizamos esta nova divisão é que o esquema convencional de roteamento, que procura extrair a porção que designa a rede, deixa de funcionar. Para suplantar esta dificuldade, introduz-se no sistema de roteamento uma nova entidade: a máscara de sub-rede. A máscara de sub-rede é um número de 32 bits que, aplicado (através de um "e" lógico) a um determinado endereço, permite a extração de sua 34 "porção de rede". Isto é, ele possui bits 1 nas posições correspondentes a esta "porção de rede". Para uma rede classe C sem sub-redes a máscara seria: 11111111 11111111 11111111 00000000 que em notação decimal corresponde a: 255.255.255.0 Qual seria a máscara de sub-rede usada para extrair a "porção de rede" num classe C partilhado entre quatro redes? Observe que, para podermos realizar a partilha, os dois bits mais significativos do último octeto irão ser usados para determinar a sub-rede. A máscara deverá então extrair os três primeiros octetos e estes dois bits adicionais. A máscara seria: 11111111 11111111 11111111 11000000 correspondente a: 255.255.255.192 Esse é o número que aplicado a um determinado endereço IP irá resultar na extração da porção deste endereço sobre a qual iremos "resolver" o roteamento. A utilização de máscaras é tão importante na Internet, que qualquer administrador de redes, independente de utilizar ou não sub-redes, irá lidar com esse parâmetro quando configurar seus gateways. 4.11.1 Distribuição Geográfica de Endereços Além de utilizar as classes de redes vistas anteriormente, os endereços classes C, por serem em grande quantidade, são divididos geograficamente. Cada região recebe uma faixa destes que visa facilitar a tarefa de designação das rotas até o destino ( roteamento ). 35 Faixa de endereços Localidade 194.0.0.0 a 195.255.255.255 Europa 198.0.0.0 a 199.255.255.255 América do Norte 200.0.0.0 a 201.255.255.255 América Central e América do Sul 202.0.0.0 a 203.255.255.255 Ásia e a região do Pacífico Por exemplo, um roteador americano que recebe um pacote cujo destino é Londres, o envia ao roteador padrão europeu, que terá mais detalhes sobre como encontrar o destino. Esta técnica impede que os roteadores tenham de saber a localização de todos os endereços classe C na rede mundial. 4.11.2 Implementação de Sub-redes com Máscara Os bits 1 representa a parte correspondente a rede + sub-rede. Os bits 0 representa o pedaço que será utilizado para identificar cada um dos hosts. Na rede especificada no exemplo anterior, tem-se os primeiros 22 bits para representar rede + sub-rede, e os dez últimos para endereçar os hosts nesta rede. A máscara de sub-rede também, pode ser especificada utilizando a mesma notação decimal por ponto, que no exemplo daria 255.255.252.0 . Dado um endereço completo do host e sua máscara de sub-rede uma função AND entre os dois, indicará a porção de rede deste. Por exemplo, um certo host, que utiliza esta mascara é endereçado por 186. 183.174.2 , aplicando um AND lógico entre este e a sua mascara obtém-se o endereço da sub-rede: 186.183.174.0. A faixa de endereço completa é de 186. 183.174.0 até 186. 183.177.255 excluindo os mesmos. 4.11.3 Super-redes 36 Como pode-se notar a divisão de redes utilizando classes, tem como diferença a grande quantidade de endereços entre as classes. A "C" é pequena demais para a maioria das empresas e a "B" muito grande. Em oposição ao esquema de divisão do IP em classes, surge o CIDR ( Classless Inter-Domain Routing). Este esquema de endereçamento consiste em alocar as redes classes "C" restante em blocos de tamanhos variáveis. Sendo assim, se um site precisar de 2.000 endereços receberá um bloco de 2048 correspondente a oito blocos classe "C" de maneira contígua, ao invés de uma classe "B" completa. O endereço então é representado pelo par: (rede, numero). Por exemplo a rede (192.20.8.0,4) possui a faixa de endereços correspondente as redes 192.20.8.0, 192.20.9.0, 192.21.0.0 e 192.21.1.0 possuindo como máscara de super-rede 255.255.252.0. 4.11.4 Exemplo de Redes As Figuras 8 e 9 respectivamente abaixo mostram exemplos de endereçamento de máquinas situadas na mesma rede e em redes diferentes. Pode ser observado que como o endereço começa por 200 (ou seja, os dois primeiros bits são 1 e o terceiro 0), eles são de classe C. Por isto, os três primeiros bytes do endereço identificam a rede. Como na Figura 8, ambas as estações tem o endereço começando por 200.18.171, elas estão na mesma rede. Na Figura 9, as estações estão em redes distintas e uma possível topologia é mostrada, onde um roteador interliga diretamente as duas redes. Estação A Estação B 200.18.171.37 200.18.171.148 Rede = 200.18.171.0 37 Estação A Estação B Roteador 200.18.171.148 200.18.180.10 200.18.171.37 200.18.180.200 200.18.171.0 200.18.180.0 A Figura 10 abaixo ilustra um diagrama de rede com o endereçamento utilizado. Note que não há necessidade de correlação entre os endereços utilizados nas redes adjacentes. O mecanismo para que uma mensagem chegue na rede correta é o roteamento. Cada elemento conectando mais de uma rede realiza a função de roteamento IP, baseado em decisões de rotas. Note que mesmo os enlaces formados por ligações ponto-a-pontos são também redes distintas. Neste diagrama existem 6 redes, identificadas por 200.1.2.0, 139.82.0.0, 210.200.4.0, 210.201.0.0, 10.0.0.0 e 200.1.3.0. 200.1.2.0 200.1.2.1 139.82.5.14 139.82.5.0 200.1.2.20 139.82.5.3 139.82.5.15 139.82.5.129 210.200.4.3 200.1.3.2 200.1.3.0 210.200.4.0 210.201.0.1 210.201.0.0 200.1.3.1 10.0.0.1 200.1.2.35 210.201.0.3 10.0.0.2 210.200.4.57 210.200.4.56 38 4.12 SUB-REDES Existem casos em que é necessário subdividir uma rede em redes menores. Imagine o administrador de uma rede classe A: como montar e administrar uma rede com 16 milhões de equipamentos? Mesmo redes classe C algumas vezes têm de ser sub-dividida em mais de uma rede física. Para esses casos, em que é preciso subdividir uma determinada rede em sub-redes, foi criada a máscara de rede (subnet mask). A máscara de rede define quantos bits são utilizados para o endereço de rede e quantos bits são utilizados para especificar o endereço de equipamento, dentro dessa sub-rede. Além do endereço IP cada equipamento passa a ter também uma máscara de rede. A máscara de rede tem o mesmo formato do endereço IP (número de 32 bits, representado por quatro números decimais, separados por ponto). Quando não são utilizadas sub-redes, informa-se a máscara default da rede classe A, B ou C, conforme o caso. Por exemplo, para subdividir uma rede classe A em 256 sub-redes, utiliza-se a máscara 255.255.0.0. A rede 15.0.0.0, com a máscara 255.255.0.0, passa a ser dividida nas seguintes sub-redes: 15.0.0.0, 15.1.0.0, 15.2.0.0, e assim por diante, até 15.255 0.0. Pode ser necessário subdividir uma rede classe C. Como nesse caso não é possível utilizar um byte inteiro para endereço de sub-rede, utilizam-se alguns bits do último byte do endereço IP para endereçar a sub-rede. Se precisarmos subdividir a rede 200.245.29.0 em quatro sub-redes, utilizamos a máscara 255.255.255.192, pois "192" corresponde ao número 39 "1100 0000" em binário, o que indica que os dois primeiros bits endereçam a sub-rede, e que as sub-redes possíveis são "0000 0000" (0), "0100 0000" (64), "1000 0000" ( 128) e "1100 0000" (192). Ou seja, com a máscara de rede 255.255.255.192 é possível subdividir a rede 200.245.29.0 nas seguintes sub-redes: 200.245.29.0, 200.245.29.64, 200.245.29.128 e 200.245.29.192. Cada sub-rede pode endereçar até 62 equipamentos (lembrando que um endereço é usado para identificar a ede e outro para a comunicação em broadcast). 40 A tabela abaixo relaciona as máscaras de rede possíveis para subdividir uma rede classe C, com o número de sub-redes e o número de equipamentos que cada máscara permite endereçar. Por exemplo, para dividirmos uma rede classe C em seis sub-redes de quinze equipamentos cada, a solução é utilizarmos a máscara 255.255.255.224, que divide uma rede classe C em oito sub-redes com até trinta endereços válidos para cada rede. A máscara também pode ser representada como o número de bits utilizados para endereçar a parte de rede, após o endereço IP (endereço_IP/ número_de_bits). Exemplo : Essa notação é utilizada por alguns fabricantes, e é conhecida como CIDR, de Classless Inter-Domain Routing. 41 4.13 PLANEJAMENTO DE UM ESQUEMA DE ENDEREÇAMENTO Normalmente, o provedor de backbone (ou a empresa pela qual sua empresa se conecta à Internet) fornece uma faixa de endereços IP . Após a definição dessa faixa, deve ser feito um planejamento da utilização dos endereços IP . Caso seja necessário utilizar sub-redes, define-se o número de sub-redes e o número de hosts para cada sub-rede. Em seguida, divide-se o último byte do endereço IP em duas partes, uma para a sub-rede e outra para o host. Depois disso, determina-se a máscara de rede a ser utilizada. Para a máscara 255.255.255.240 divide-se o Ultimo byte em duas partes : Nesse exemplo, para cada um desses valores de sub-rede, somente catorze endereços são disponíveis para hosts, pois somente a parte direita do byte pode ser usada, e o primeiro e o último endereço de cada sub-rede têm significado especial. 42 O primeiro endereço de cada sub-rede indica o endereço da própria subrede, portanto não pode ser utilizado para endereçar um host. O último endereço de cada sub-rede é o endereço de broadcast (esse endereço é utilizado quando se deseja enviar informações a todos os equipamentos da subrede), portanto esse endereço também não pode ser utilizado para endereçar um host. Assim, a sub-rede 192.67.32.16 (máscara 255.255.255.240) poderá conter hosts nas faixas de endereço de 192.67.32.17 até 192.67.32.30 e a subrede 192.67.32.32 poderá conter hosts na faixa de 192.67.32.33 até 192.67.32.46, etc. 43 5. PROTOCOLOS DE ROTEAMENTO 5.1 CONCEITO As redes locais podem interligar-se por meio de nós comuns, que são chamados de roteadores. Ou, ainda, a conexão entre duas redes locais pode ser um enlace entre dois roteadores, sendo cada roteador um nó de uma das redes. Se um pacote de dados tiver que ser encaminhado a um nó situado em outra rede local, ele passará por um ou mais roteadores no caminho. Cada roteador decidirá apenas a qual dos seus enlaces encaminhará o pacote. Esta parte do trajeto total do pacote é um hop. O hop seguinte no trajeto do pacote será decidido pelo roteador existente na outra extremidade do enlace. Para executar o roteamento de um pacote, o roteador precisa de uma tabela de roteamento que, para cada nó da rede a ser alcançado, indique o próximo hop que o pacote deve seguir. Por exemplo, consideremos a rede cujos roteadores, respectivos enlaces e seus custos aparecem na Figura 11. A tabela de roteamento do roteador R1 , construída pelo critério de menor custo, é dada a seguir. 44 Figura 11 – Tabela de Roteamento As rotas da tabela de roteamento podem ser estáticas ou dinâmicas. As rotas estáticas são configuradas pelo administrador da rede. Na ocorrência de falhas ou na ampliação da rede é necessário reconfigurar manualmente as tabelas de roteamento de todos os roteadores vizinhos. Já as rotas dinâmicas são constantemente atualizadas por protocolos de roteamento. Nesse caso, na ocorrência de falhas ou na ampliação da rede, o protocolo de roteamento detecta a mudança de topologia da rede e atualiza as tabelas de roteamento nos roteadores envolvidos. Esse processo é muito mais rápido do que a reconfiguração manuaI. Os protocoIos de roteamento classificam-se, de acordo com o algoritmo de mapeamento das rotas, em distance vector e link state. Além disso, os protocolos de roteamento podem ser classificados de acordo com a sua cobertura da rede ou de acordo com as "regiões administrativas", que podem ser internas (Interior Gateway Protocols) ou externas (Exterior Gateway Protocols). Tendo em vista essa última classificação, convém definir o conceito de sistema autônomo. Um sistema autônomo é uma coleção de roteadores e de redes sujeitos a um único controle administrativo, por exemplo, um backbone. • Algoritmos distance vector Os algoritmos do tipo distance vector difundem a informação de roteamento para os roteadores na rede. 45 Os roteadores que usam aIgoritmos desse tipo mantêm apenas uma tabela de roteamento com a informação necessária para atingir o próximo roteador na direção de cada um dos roteadores existentes na rede. Cada elo até o roteador mais próximo numa dada direção chama- se next hop. Esses roteadores trocam periodicamente informações a respeito das suas tabelas de roteamento mesmo que elas não tenham sido alteradas desde a última troca de informações. • Algoritmo link state Os algoritmos do tipo link state geram e mantêm um mapa lógico de toda a rede . Um roteador desse tipo realiza essa tarefa por meio do envio de um pacote com informações sobre todos os seus enlaces (conexões para redes e conexões para outros roteadores) para todos os outros roteadores link state existentes na rede. Esse procedimento é chamado de flooding. Cada roteador usa essas informações para construir um mapa da rede, sendo concluído quando todos os roteadores atingirem o mesmo mapa da rede. Os roteadores link state somente retransmitem informações entre si quando ocorre uma mudança na rota ou no serviço. 5.2 RIP O Routing Infonoation Protocol (RIP) é um protocolo do tipo distance vector usado nas redes TCP/IP. Um roteador com protocolo RIP habilitado transmite periodicamente uma mensagem de atualização de roteamento, que possui um dado para cada rede que pode alcançar, representando o custo de acesso a ela. Os roteadores RIP "escutam" todas as mensagens de broadcast do protocolo RIP . Cada dado recebido numa mensagem de atualização de roteamento é incorporado à tabela de roteamento. O roteador que enviou a mensagem de 46 atualização é identificado como o próximo roteador (next hop router) da rota para o destino, cuja distância de acesso é representada pelo dado em questão. Se um roteador for informado da existência de duas rotas de acesso a uma mesma rede, ele mantém na tabela de roteamento apenas o próximo hop e a distância da rota de caminho mais curto. O RIP usa como distância a contagem dos hops, ou seja, o número de roteadores existentes no caminho até o destino. essa, distância está limitada em quinze hops. A partir do momento em que uma rota é memorizada na tabela de roteamento, sua existência precisa ser verificada a intervalos regulares. Os roteadores RIP normalmente transmitem uma mensagem de atualização de roteamento contendo todas as rotas a cada 30 segundos. Sempre que uma rota é atualizada em conseqüência de uma mensagem de atualização de roteamento, dispara-se um temporizador. Se não for recebida nenhuma mensagem de atualização da rota dentro de 180 segundos, a rota é considerada inativa em decorrência de uma falha de rede ou de nó (métrica 16, usada para esse fim), retirada da tabela de roteamento e divulgada (como removida) para os vizinhos por 120 segundos. 5.3 RIP II O RIP II é um aprimoramento do RIP que inclui máscara de rede nas suas rotas. A falta de máscara de rede limita o RIP I (ou simplesmente RIP) à divulgação de rotas de rede apenas ou leva os roteadores RIP a fazer hipóteses sobre a máscara de rede. Quando o RIP I é usado numa rede com sub-redes, todas as sub-redes são forçadas a usar a mesma máscara. O RIP II pode ser utilizado em topologias de rede que exijam o uso de máscaras de rede com comprimentos variáveis, podendo suportar a sub-rede zero. Porém, nem todos os roteadores RIP suportam o RIP II. O RIP II também suporta autenticação de seus pacotes por password, evitando a adulteração destes em seu trajeto pela rede. 47 5.4 OSPF Open Shortest Path First (OSPF) é um protocolo de roteamento interno do tipo, link state (Dijkstra link state), que faz parte do conjunto de protocolos TCP/IP . Os roteadores do tipo link state trocam informações sobre a topologia da rede, incluindo o estado de funcionamento de cada enlace e a distância associada entre seus roteadores. Com esses dados trocados, cada roteador constrói o seu mapa da rede, que utiliza para a extração dos dados necessários para o roteamento. Os protocolos do tipo distance vector demandam dos roteadores vizinhos a troca das distâncias de cada um a todos os outros roteadores da rede. Para cada destinatário, os roteadores OSPF consultam a sua base de dados de link state e selecionam a rota que proporcione o caminho mais curto. Na seqüência, as informações de link state são compartilhadas com outros roteadores em diferentes áreas, de acordo com a relação que guardam entre si. Para fins administrativos, a rede OSPF pode ser subdividida em várias regiões ou áreas. Todos os roteadores da mesma área trocam entre si todas as informações sobre o estado completo dos enlaces. As informações trocadas entre roteadores de áreas diferentes consistem apenas em um resumo da topologia. 5.5 COMPARAÇÃO ENTRE OS PROTOCOLOS DE ROTEAMENTO RIP E OSPF A tabela a seguir resume os principais aspectos dos protocolos RIP, RIP 11 e OSPF comparando-os entre si. 48 O RIP, apesar de sua facilidade de configuração, é recomendado apenas para pequenas redes (algo em torno de quarenta ou cinqüenta roteadores no máximo).Sua grande vantagem é que, por ser um protocolo simples, é implementado pela grande maioria de roteadores e sistemas operacionais, o que não ocorre com o OSPF que é bem mais complicado de se configurar que o RIP, porém apresenta várias vantagens em relação a este, tais como: organização hierárquica, segurança contra ataques de informações de roteamento, redução de overhead, convergência de rotas mais rápida e maior tolerância a falhas. Embora apresente maior dificuldade inicial de aprendizado, e sua configuração seja mais complexa, OSPF é o protocolo ideal para ambientes mais complexos ou com previsão de crescimento. 5.6 EGP O Exterior Gateway Protocol (EGP) troca informações de acesso entre sistemas autônomos. Ele faz parte do conjunto de protocolos TCP/IP . 49 Escolhem-se alguns roteadores em cada sistema autônomo para intermediar a comunicação com o mundo externo, em geral pela Intemet. Esses roteadores são denominados roteadores externos. Os roteadores externos tomam-se vizinhos EGP. Os vizinhos EGP trocam informações sobre as redes que podem ser alcançadas no interior dos seus respectivos sistemas autônomos. 50 6. PROTOCOLO ARP E RARP 6.1 INTRODUÇÃO Foi mencionado anteriormente que os endereços IP’s possuem 32 bits e são endereços virtuais (endereço de um ponto na rede). Apartir de agora iremos verificar como é feito o endereçamento de um pacote apartir de um ponto físico (endereço de máquina). Inicialmente devemos entender o que MAC (Controle de Acesso ao Meio). Uma placa de rede possui um endereço único gravado no hardware, feito pelo fabricante. Os endereços MAC são representados por números em hexadecimal. Cada a;gorismo em hexadecimal equivale a um número de 4 bits. Desta forma, um byte é representado por dois algarismo em hexadecimal e, com isso, o endereço MAC é sempre representado como m conjunto de 12 algarismo em hexadecimal. Foi padronizado que os endereços MAC utilizam os 3 primeiros bytes para o código do fabricante, este código é chamado de OUI (Organizationally Unique Identifier). Os 3 últimos bytes se referem ao número de série da placa, número definido pelo fabricante. 6.2 PROBLEMA DE CONVERSÃO Como máquinas somente conseguem se comunicar através de endereços de interligação (endereços físicos), se torna necessário a conversão dos endereços de alto nível (camada de rede acima) para endereços de baixo nível (endereço físico do dispositivo de comunicação). 51 6.2.1 Conversão Através do Mapeamento Direto: Em alguns tipo de rede como : proNet token ring, o endereço físico é maleável e pode ser configurado pelo usuário. Neste casa se torna fácil a comversão do endereço de rede com o endereço a nível físico. 6.2.2 Conversão Através de Vinculação Dinâmica: Em uma rede IP utilizando Ethernet, todo dispositivo de rede possui um endereço MAC vinculado ao IP. Se um destes dispositivos falham, ele deve ser trocado, logo o equipamento pode ser o mesmo, porem com outro dispositivo e com o mesmo IP. Para solucionar este tipo de problema foi criado o protocolo ARP (Address Resolution Protocol), utilizando a seguinte idéia: A deseja descobrir o endereço de B Envia um pacote de broadcast para todas as máquinas, porem com o endereço IP de destino o da B Somente B responde esta solicitação A recebe esta resposta e envia a B os dados de usuário a serem transmitidos 6.2.3 Cache de Conversão de Endereço: Porque não é passado o pacote de usuário por difisão ? Devido ao tráfego da rede. 52 Para poder solucionar este problema de sempre perguntar o endereço, é mantido em toda máquina na rede uma cache interno (arquivo) que contem uma vinvulação entre o endereço físico e o endereço IP. 6.3 APRIMORAMENTO DE ARP 1o Quando B recebe o pacote de A, ele retira o MAC de A e quarda em seu cache 2o Quando A envia por difusão um pedido para B, todas as máquinas recebem este pedido porem só B responde, mas estas máquinas retiram o MAC de A e quarda em suas tabelas ARP 3o Quando B trocar sua interface, seu MAC será alterado. Porem quando B entrar no ar novamento ele informará por difusão que seu MAC foi alterado. 6.3.1 Definição ARP ARP é um protocolo de baixo nível que absrai o endereçamento físico, permitindo que seja atribuído um endereço IP para cada máquina. Idealizamos ARP como a parte física do sistema de redes, e não como a parte do protocolo de interligação em redes. 6.3.2 Implementação ARP Ao enviar um pacote, deverá ser consultado a tabela ARP para saber se o existe um MAC para o IP de destino. Se não houver, será enviado um pacote por difusão para todas as máquinas na rede. Se a máquina de destino estiver muito ocupado ou desativada a resposta pode demorar. Enquanto isto, a máquina de origem, deve manter o pacote de usuário de forma a envia-lo o mais rápido possível, assim que a resposta chegue. Porem, o canal de cmunicação deve ser mantido livre para ser utilizado com outros destinos. 53 Podemos considerar, em outro caso, quando A mantem comunicação B (o MAC de B está gravado na cache de A), e derrepente a placa de comunicação de B falha e a mesma é substituída. O que aconteceria com A se B voltasse com outro MAC. Para esta solução foi criado um timer na Cache da tabela ARP, onde um registro deverá ser atualizado, substituído ou mesmo excluído após um determinado tempo. Este procedimento mantem a segurança na comunicação entre dois hosts. Podemos ter dois tipos de tratamento para os pacotes ARP. Quando A envia uma solicitação de endereçamento para B. B envia uma resposta para A e A deverá acrescentar/atualizar em sua tabela ARP o endereço de B. Porem se o pacote de resposta de B não coincidir com o IP solicitado por A, o pacote deverá ser descartado. 6.3.3 Encapsulamento e Identificação ARP MENSAGEM ARP CABEÇALHO QUADRO MENSAGEM ARP Quando uma mensagem ARP é enviada, a mesma possui uma valor especial no campo TIPO, isto faz com seja realizado uma tratamento especial/urgente para as mensagens ARP. 6.3.4 Formato do Protocolo ARP As mensagens ARP não possuem um cabeçalho fixo, fazendo com que esta mesagens possua uma boa adaptação em diferentes tecnologias. Para a rede Ethernet a mensagem Arp possui 28 octetos. 54 TIPO HLE TIPO H OPERAÇÃO SENDER HA ( octetos 0-3 ) SENDER HA SENDER IP SENDER IP TARGET HA TARGET HA (octetos 2-5 ) TARGET IP (octetos 0-3 ) TIPO DE HARDWARE : Tipo de interface de hardware do destino TIPO DE PROTOCOLO : tipo do protocolo da camada de enlace (Ex. Ethernet = 080016) OPERAÇÃO : Solicitação ARP (1); resposta ARP (2); solicitação RARP (3) e resposta RARP (4) HLEN : extensão do endereço de hardware PLEN : extensão do endereço de protocolo SENDER HA : endereço de hardware da origem SENDER IP : endereço IP da origem TARGET HA : endereço de hardware de destino (RARP) TARGET IP : endereço IP do destino 6.4 PROTOCOLO RARP 6.4.1 Introdução Normalmente o endereço IP de uma máquina é mantido em um arquivo de configuração. Mas como máquinas sem disco irão conseguir verificar este arquivo? Máquinas sem disco, tentam contatar um servidor na rede que possua o seu endereço IP, através de uma comunicação utilizando o endereço físico 55 (MAC). É enviado uma solicitação a um servidor, o qual possui um banco de dados com tais informações, e aguardado sua resposta. Porem esta máquina, não sabe qual é o endereço físico do servidor. Ela apenas envia um broadcast para a rede e solicita a todas as máquinas que enviem o seu endereço IP. Somente o servidor responderá. Este mesmo procedimento, pode ocorrer no caso de uma máquina solicitar o endereço IP de uma terceira. O RARP é uma adaptação do protocolo ARP, e utiliza o mesmo formato de endereçamento, sendo a única necessidade é a troca do campo tipo para 803516, para identificar o conteúdo do quadro como mensagem RARP. 56 7. PROTOCOLO ICMP O protocolo ICMP é um protocolo auxiliar ao IP, que carrega informações de controle e diagnóstico, informando falhas como TTL do pacote IP expirou, erros de fragmentação, roteadores intermediários congestionados e outros. Uma mensagem ICMP é encapsulada no protocolo IP, conforme ilustrado na Figura 12 abaixo. Apesar de encapsulado dentro do pacote IP, o protocolo ICMP não é considerado um protocolo de nível mais alto. Cabeçalho ICMP Cabeçalho IP Dados ICMP Mensagem ICMP Datagrama IP Figura 12 – Encapsulamento ICMP A mensagem ICMP é sempre destinada ao host origem da mensagem, não existindo nenhum mecanismo para informar erros aos roteadores no caminho ou ao host destino. As mensagens ICMP possuem um identificar principal de tipo (TYPE) e um identificador de sub-tipo (CODE), conforme pode ser visto no formato de mensagem ilustrado abaixo: 0 7 15 Octeto 1 Octeto 2 TYPE CODE 23 Octeto 3 31 Octeto 4 CHECKSUM MENSAGEM ICMP ESPECÍFICA 57 Os tipos de mensagem ICMP são listados na tabela abaixo: Mensagem ICMP Tipo Categoria 0 Echo Reply Controle 3 Destination Unreachable 4 Source Quench Controle 5 Redirect Controle 8 Echo Request Controle 9 Router Advertisement (RFC 1256) Controle 10 Router Solicitation (RFC 1256) Controle 11 Time Exceeded for a Datagram Erro 12 Parameter Problem on a Datagram Erro 13 Timestamp Request Controle 14 Timestamp Reply Controle 15 Information Request (obsoleto) Controle 16 Information Reply (obsoleto) Controle 17 Address Mark Request Controle 18 Address Mark Reply Controle Erro As mensagens ICMP são listadas abaixo: 7.1 MENSAGEMS ICMP 7.1.1 Echo Request e Echo Reply Utilizada pelo comando ping, a mensagem Echo Request enviada para um host causa o retorno de uma mensagem Echo Reply. É utilizada principalmente para fins de testes de conectividade entre as duas máquinas. 0 7 15 Octeto 1 Octeto 2 TYPE (8 ou 0) CODE (0) 23 Octeto 3 31 Octeto 4 CHECKSUM IDENTIFIER SEQUENCE NUMBER OPTIONAL DATA ... 58 7.1.2 Destination Unreacheable Esta mensagem possui diversos sub-tipos para identificar o motivo da não alcançabilidade: os sub-tipos utilizados atualmente são: 0 : Network Unreachable - Rede destino inalcançável 1 : Host Unreachable (ou falha no roteamento para subnet) Máquina destino inalcançável 2 : Protocol Unreachable - Protocolo destino desativado ou aplicação inexistente 3 : Port Unreachable - Porta destino sem aplicação associada 4 : Fragmentation Needed and DNF set - Fragmentação necessária mas bit DNF setado. Alterado também pela RFC 1191 para suporta o protocolo Path MTU Discovery 5 : Source Route Failed - Roteamento por rota especificada em opção IP falhou 6 : Destination Network Unknown 7 : Destination Host Unknown 8 : Source Host Isolated 9 : Communication with destination network administratively prohibited 10 : Communication with destination host administratively prohibited O sub-tipo Fragmentation Needed and DNF set é utilizado como forma de um host descobrir o menor MTU nas redes que serão percorridas entre a origem e o destino. Por meio desta mensagem, é possível enviar pacotes que não precisarão ser fragmentados, aumentando a eficiência da rede. Esta técnica, que forma um protocolo é denominado de ICMP MTU Discovery Protocol, definido na RFC 1191. A operação é simples. Todo pacote IP enviado é marcado com o bit DNF (Do Not Fragment), que impede sua fragmentação nos roteadores. Desta 59 forma, se uma pacote IP, ao passar por um roteador para chegar a outra rede com MTU menor, deva ser fragmentado, o protocolo IP não irá permitir e enviará uma mensagem ICMP Destination Unreacheable para o destino. Para suportar esta técnica, a mensagem ICMP foi alterada para informar o MTU da rede que causou o ICMP. Desta forma, a máquina origem saberá qual o valor de MTU que causou a necessidade de fragmentação, podendo reduzir o MTU de acordo, nos próximos pacotes. Esta mensagem está ilustrada abaixo: 0 7 15 Octeto 1 Octeto 2 TYPE (3) CODE (4) 23 Octeto 3 31 Octeto 4 CHECKSUM Não usado (deve ser 0) MTU of next HOP IP HEADER + FIRST 64 BITS OF DATAGRAM ... 7.1.3 Source Quench Esta mensagem é utilizada por um roteador para informar à origem, que foi obrigado a descartar o pacote devido a incapacidade de roteá-lo devido ao tráfego. 0 7 15 Octeto 1 Octeto 2 TYPE (4) CODE (0) 23 Octeto 3 31 Octeto 4 CHECKSUM UNUSED (MUST BE ZERO) IP HEADER + FIRST 64 BITS OF DATAGRAM ... 60 7.1.4 Redirect Esta mensagem, uma das mais importantes do protocolo IP, é utilizada por um roteador para informar ao host origem de uma mensagem que existe uma rota direta mais adequada através de outro roteador. O host, após receber a mensagem ICMP, instalará uma rota específica para aquele host destino: 0 7 15 Octeto 1 Octeto 2 TYPE (5) CODE (0-3) 23 Octeto 3 31 Octeto 4 CHECKSUM GATEWAY INTERNET ADDRESS IP HEADER + FIRST 64 BITS OF DATAGRAM ... 0 : Redirect datagrams for the Net (obsoleto) 1 : Redirect datagrams for the Host 2 : Redirect datagrams for the Type of Service and Net 3 : Redirect datagrams for the Type of Service and Host A operação do ICMP Redirect ocorre conforme os diagramas abaixo. Note que a rota instalada é uma rota específica para host, com máscara 255.255.255.255, não servindo para outras máquinas na mesma rede. Se uma máquina se comunica com 10 máquinas em outra rede e se basear em ICMP Redirect para aprender as rotas, ele instalará pelo menos 10 entradas na tabela de rede, uma para cada máquina 61 139.82.16.33 139.82.17.22 139.82.16.1 139.82.17.1 139.82.18.44 139.92.18.1 139.92.17.2 139.82.16.2 139.82.19.1 Datagrama IP Origem: 139.82.17.22 Destino: 139.82.19.55 139.82.19.55 139.82.16.33 139.82.17.22 139.82.18.44 139.92.18.1 139.92.17.2 139.82.16.1 139.82.17.1 139.82.16.2 139.82.19.1 Mensagem ICMP 5 1 CHECKSUM 139.82.17.1 139.82.19.55 IP HEADER + FIRST 64 BITS OF DATAGRAM Figura 13 - ICMP Na Figura 13 acima, a estação 139.82.17.22 instalou, após a mensagem ICMP, a seguinte rota na tabela de rotas: Rede Destino Máscara 139.82.19.55 255.255.255.255 Roteador (Gateway) Hops 139.82.17.1 0 62 7.1.5 TTL Expired Esta mensagem ICMP originada em um roteador informa ao host de origem que foi obrigado a descartar o pacote, uma vez que o TTL chegou a zero. 0 7 15 Octeto 1 Octeto 2 TYPE (11) CODE (0-1) 23 Octeto 3 31 Octeto 4 CHECKSUM UNUSED (MUST BE ZERO) IP HEADER + FIRST 64 BITS OF DATAGRAM ... Esta mensagem é utilizada pelo programa traceroute (ou tracert no Windows) para testar o caminho percorrido por um pacote. O programa funciona da seguinte forma: 1. É enviada uma mensagem ICMP Echo Request para um endereço IP destino. Esta mensagem é enviada com TTL = 1. 2. Quando chega ao primeiro roteador, este decrementa o valor de TTL da mensagem IP e retorna uma mensagem ICMP TTL Expired. O programa armazena o endereço IP do roteador que enviou a mensagem TTL Expired. 3. O programa envia outra mensagem ICMP Echo Request para o endereço IP destino. Esta mensagem é enviada desta vez com TTL=2. 4. A mensagem atravessa o primeiro roteador e tem o TTL decrementado para 1. Quando chega ao segundo roteador, o TTL torna-se 0 e este roteador envia uma mensagem ICMP TTL Expired para a máquina origem. Esta armazena o endereço do segundo roteador. 5. Esta operação prossegue até que a máquina destino responda. Todos os roteadores no caminho são registrados. 63 Note, entretanto, que devido à diferenças de rotas seguidas pelos diversos pacotes, o caminho obtido não necessariamente é único. A execução do programa traceroute mais de uma vez pode revelar rotas diferentes seguidas pelos pacotes. 7.1.6 ICMP Router Solicitation/Advertisement Esta variação de ICMP, definido na RFC 1256 foi projetada para permitir que um roteador possa divulgar sua existência para as máquinas existentes na rede. O objetivo desta função é evitar a necessidade de se configurar manualmente todas as estações da rede com a rota default e permitir que uma estação conheça outros roteadores além do default que possam rotear no caso de falha do principal. A mensagem é composta de duas formas: a solicitação de divulgação de uma roteador e o anúncio de um roteador. O roteador pode ser configurado para enviar automaticamente as mensagens de anúncio ou fazê-lo apenas comandado por uma mensagem de solicitação. A mensagem ICMP Router Solicitation é mostrada abaixo: 0 7 15 Octeto 1 Octeto 2 TYPE (10) CODE (0) 23 Octeto 3 31 Octeto 4 CHECKSUM RESERVADO 64 A mensagem ICMP Router Solicitation é mostrada abaixo: 0 7 15 Octeto 1 Octeto 2 TYPE (9) CODE (0) 23 Octeto 3 NUM ADDR 2 (Tam Reg) 31 Octeto 4 CHECKSUM LIFETIME (seg) ROUTER ADDRESS 1 PREFERENCE LEVEL 1 ... Esta mensagem pode conter a divulgação de diversos roteadores iniciada a partir de um que seja configurado para divulgá-los. O número de preferência é a ordem de preferência que estes roteadores podem ser utilizados pelas estações. 7.1.7 Aquisição de informações de Roteamento Em uma estação e em um roteador, as informações constantes na tabela de rotas podem ser obtidas de diversas formas. As rotas podem ser obtidas por uma estação ou em um roteador de diversas formas, com limitações dependendo da implementação do TCP/IP em cada sistema operacional: 1. Estação sem nenhuma rota. Neste caso, a estação vai precisar de pelo menor um roteador default. A estação pode obter um roteador default através de: • protocolo ICMP Router Advertisement • Protocolo BOOTP ou DHCP durante a etapa de boot ou após ela. • Escuta dos protocolos de roteamento como RIP e outras para descobrir roteadores 65 • outras, sempre não respeitando a divisão em camadas 2. Estação com somente um roteador default. Com um roteador, a estação já pode operar corretamente. No caso de existir rotas melhores através de outros roteadores, o roteador default informará rotas específicas através de ICMP Redirect, sempre específica para uma estação destino. 3. Estação com mais de um roteador default, poderá utilizar os diversos roteadores default, no caso de falha do primeiro. 4. Estação com rotas específicas para outras redes configuradas de forma manual. 5. Estação executando algum protocolo de roteamento, geralmente na forma SOMENTE ESCUTA. Desta forma, a estação pode aprender informações de rotas trocadas entre os roteadores sem divulgar rotas. É possível inclusive ocorrer o recebimento de informações conflitantes ou não idênticas de rotas para determinadas redes. O roteador resolve estes conflitos com a adoção de prioridades para rotas aprendidas por meios diferentes. Geralmente, a ordem de prioridade da forma de aprendizagem das rotas é da seguinte forma: 1. Rotas configuradas estaticamente tem maior prioridade, exceto se houver outra rota mais específica (com máscara mais longa). P. exemplo, um roteador possui uma rota para a rede 200.0.0.0 mas aprende uma rotas específica para 200.0.0.123. Esta última terá maior prioridade 2. Rotas específicas aprendidas por meio de ICMP Redirect e rotas default aprendidas por meio de ICMP Router Advertisement 3. Rotas aprendidas por meio dos protocolos OSPF e BGP 4. Rotas aprendidas por meio do protocolo RIP 66 8. PROTOCOLOS DA CAMADA DE TRANSPORTE A Figura 14 ilustra a divisão em camadas da arquitetura TCP/IP: Aplicação Mensagens da aplicação Transporte Inter-rede Datagramas IP Rede HDLC, X.25, PPP, SLIP, Ethernet, Token-Ring, FDDI, ATM, LLC, NDIS, ... Figura 14 – Divisão em Camadas 8.1 CAMADA DE TRANSPORTE Esta camada reúne os protocolos que realizam as funções de transporte de dados fim-a-fim, ou seja, considerando apenas a origem e o destino da comunicação, sem se preocupar com os elementos intermediários. A camada de transporte possui dois protocolos que são o UDP (User Datagram Protocol) e TCP (Transmission Control Protocol). O protocolo UDP realiza apenas a multiplexação para que várias aplicações possam acessar o sistema de comunicação de forma coerente. O protocolo TCP realiza além da multiplexação, uma série de funções para tornar a comunicação entre origem e destino mais confiável. São responsabilidades do protocolo TCP o controle de fluco, o controle de erro, a sequenciação e a multiplexação de mensagens. A camada de transporte oferece para o nível de aplicação um conjunto de funções e procedimentos para acesso ao sistema de comunicação de modo a permitir a criação e a utilização de aplicações de forma independente da implementação. Desta forma, as interfaces socket (ambiente Unix) e Winsock 67 (ambiente Windows) fornecem um conjunto de funções-padrão para permitir que as aplicações possam ser desenvolvidas independentes do sistema operacional no qual rodarão. 8.2 PROTOCOLO UDP O protocolo UDP fornece uma forma simples de acesso ao sistema de comunicação, provendo um serviço sem conexão, sem confiabilidade e sem correção de erros. A principal função do nível de transporte implementada em UDP é a capacidade de multiplexação de acesso ao sistema de comunicação. Esta função permite que vários processos ou programas executando em um computador possam acessar o sistema de comunicação e o tráfego de dados respectivo a cada um deles seja corretamente identificado, separado e utilize buffers individuais. Um processo é o programa que implementa uma aplicação do sistema operacional, e que pode ser uma aplicação do nível de aplicação TCP/IP. A forma de identificação de um ponto de acesso de serviço (SAP) do modelo OSI é a porta de protocolo em TCP/IP. A porta é a unidade que permite identificar o tráfego de dados destinado a diversas aplicações. A identificação única de um processo acessando os serviços TCP/IP é, então, o endereço IP da máquina e a porta (ou portas) usadas pela aplicação. Cada processo pode utilizar mais de uma porta simultâneamente, mas uma porta só pode ser utilizada por uma aplicação em um dado momento. Uma aplicação que deseje utilizar os serviços de comunicação deverá requisitar uma ou mais portas para realizar a comunicação. A mesma porta usada por uma aplicação pode ser usada por outra, desde que a primeira tenha terminado de utilizá-la. A forma de utilização de portas mostra uma distinção entre a parte cliente e a parte servidora de uma aplicação TCP/IP. O programa cliente pode utilizar um número de porta qualquer, já que nenhum programa na rede terá necessidade de enviar uma mensagem para ele. Já uma aplicação servidora deve utilizar uma número de porta bem-conhecido (Well-known ports) de modo 68 que um cliente qualquer, querendo utilizar os serviços do servidor, tenha que saber apenas o endereço IP da máquina onde este está executando. Se não houvesse a utilização de um número de porta bem conhecido, a arquitetura TCP/IP deveria possuir um mecanismo de diretório para que um cliente pudesse descobrir o número da porta associado ao servidor. Para evitar este passo intermediário, utiliza-se números de porta bem conhecidos e o cliente já possui pré programado em seu código o número de porta a ser utilizado. Os números de porta de 1 a 1023 são números bem-conhecidos para serviços (aplicações) atribuídos pela IANA (Internet Assigned Numbers Authority). Os números de 1024 a 65535 podem ser atribuídos para outros serviços e são geralmente utilizados pelas programas-cliente de um protocolo (que podem utilizar um número de porta qualquer). Este conjunto de números tem ainda a atribuição de alguns serviços de forma não oficial, já que os primeiros 1024 números não conseguem comportar todos os protocolos TCP/IP existentes. A Figura 15 abaixo ilustra a multiplexação/demultiplexação realizada pelo protocolo UDP, camada de transporte: Aplicação 1 Porta 126 Aplicação 2 Porta 34 Porta 22 UDP IP Figura 15 – Multiplexação e Demultiplexação 69 8.2.1 Formato da Mensagem UDP 0 7 Octeto 1 15 Octeto 2 23 Octeto 3 31 Octeto 4 UDP SOURCE PORT UDP DESTINATION PORT UDP MESSAGE LENGTH UDP CHECKSUM DATA ... Opcional (campo=0) Figura 16 – Formato da Mensagem UDP A mensagem UDP é representada pela Figura 16. O dado carregado é o pacote de nível de aplicação. UDP acrescenta apenas mais 8 bytes que são a porta de protocolo origem a porta de protocolo destino, o tamanho da mensagem UDP e um checksum para averiguar a correção dos dados do cabeçalho UDP. 8.2.2 Encapsulamento de UDP e Colocação de Protocolos em Camadas O UDP situa-se na camada acima da camada de rede. Em tese, os programas aplicativos acessam o UDP, que usa o IP para enviar e receber datagramas. Aplicativo Datagrama de Usuário (UDP) Internet (IP) Enlace Colocação Conceitual em Camadas 70 Posicionar o UDP acima do IP significa que uma mensagem UDP completa, incluindo o cabeçalho UDP e os dados, está encapsulada em um datagrama IP, enquanto é transportada através de uma interligação em redes. A idéia de encapsulamento não é somente para o protocolo UDP, na verdade todas as camadas tem um certo encapsulamento dos dados. Desde a camada de mais baixo nível, até a de mais alto nível. O que acontece é que quando alguém envia dados para outra pessoa, primeiramente os dados estão na camada de mais alto nível, e para que exista o transporte dos dados na rede, os dados passam por todas as camadas, e com isso existe o encapsulamento de uma camada para outra, e depois quando a pessoa recebe os dados, antes passa pelo processo inverso, e volta a ter as mesmas características, mais detalhadamente pegando-se o protocolo UDP: Para os protocolos que já foram examinados, encapsulamento significa que o UDP anexa inicialmente um cabeçalho aos dados que o usuário envia e passao ao IP. A camada de rede (IP) inicialmente anexa um cabeçalho ao que ele recebe de UDP. Finalmente, a camada de enlace embute o datagrama em um quadro antes de enviá-lo de uma máquina a outra. O formato do quadro depende da tecnologia básica da rede. Normalmente os quadros de rede incluem um cabeçalho adicional. Na entrada, um pacote chega à camada mais baixa e inicia sua ascenção através de camadas sucessivamente mais altas. Cada camada remove um cabeçalho antes de passar a mensagem adiante, de modo que, quando o nível mais alto repassar os dados para o processo receptor, todos os cabeçalhos já tenham sido removidos. Assim, o cabeçalho mais externo corresponde à camada mais baixa de protocolo, enquanto o cabeçalho mais interno corresponde à camada mais alta de protocolo. Quando se considerar o modo como os cabeçalhos são inseridos e removidos, é importante lembrar o princípio de colocação em camadas. Deve-se observar que o princípio de colocação em camadas aplica-se ao UDP, assim, o datagrama UDP recebido pelo IP na máquina de destino é idêntico ao que o UDP passou ao IP na máquina de origem. Por sua vez, os dados que o UDP entrega a um processo de usuário na máquina receptora 71 serão exatamente os mesmos que um processo de usuário que passou ao UDP na máquina transmissora. Desse modo, apenas o cabeçalho IP identifica os hosts de origem e destino, apenas a camada UDP identifica as portas de origem e destino em um host. Figura 17– Encapsulamento em camadas 8.2.3.1 Organização em camadas Existe uma forte interação enrte UDP e IP, e isso viola a permissa básica de que a colocação em camadas reflete separação de funcionalidade; O UDP tem estado estreitamente integrado ao protocolo IP. É claramente um compromisso de simples separação feito por razões inteiramente práticas. Estamos dispostos a deixar passar a violação da colocação em camadas, poque é impossível identificar inteiramente um programa aplicativo de destino sem especificar a máquina de destino; e queremos tornar eficiente o mapeamento entre os endereços usados por UDP e aqueles usados por IP. 8.2.4 Multiplexação e Demultiplexação UDP e Portas Cada software colocado em cada camada de uma hierarquia de protocolo deve ser capaz de multiplexar ou demultiplexar múltiplos objetos da camada seguinte. O software UDP apresenta multiplexação e demultiplexação, 72 ele aceita datagramas do protocolo UDP de muitos programas aplicativos, e os passa ao IP, para transmissão, e aceita datagramas UDP recebidos de ip e pos passa ao programa aplicatrivo apropriado. Conceitualmente, toda multiplexação e demultiplexação entre o software UDP e o programa aplicativo ocorre através do mecanismo da porta. Cada programa aplicativo deve negociar com o sistema operacional a fim de obter uma porta de protocolo e um número de porta correspondente, antes que ele possa enviar um datagrama UDP. Uma vez que a porta tenha sido atribuída, qualquer datagrama que o programa aplicativo enviar através da porta terá aquele número de porta em seu campo Porta de origem UDP. Enquanto está processando a entrada, o UDP aceita datagramas recebidos do IP e procede à demultiplexação tendo como base a porta de destino do UDP. Figura 18 - Exemplo de demultiplexação de uma camada acima do IP. O UDP usa o número da porta de destino UDP para selecionar uma porta de destino apropriada para os datagramas recebidos O modo mais simples de conceber uma porta UDP é uma fila. Na maioria doas implementações, quando um programa aplicativo negocia com o sistema operacional para usar determinada porta, o sistema operacional cria uma fila interna que pode reter as mensagens que estão chagando. Freqüentemente, o aplicativo pode especificar ou mudar o tamanho da fila. Quando o UDP recebe um datagrama, vreifica se o número de porta de destino 73 confere com uma das portas atualmente em uso. Se não conferir, envia uma mensagem de erro ICMP de porta não-atingida descarta o datagrama. Se for encontrada uma dorrespondência, o UDP enfilera o novo datagrama na porta onde o programa aplicativo pode acessá-lo. Naturalmente ocorrerá um erro se a porta estiver cheia e o UDP descartar o datagrama recebido. 8.2.4.1 Números de portas UDP reservadas e disponíveis Uma pergunta importante é como deverão ser atribuídos números de porta de protocolo? O problema é que dois computadores precisam equipararse pelos números de porta, antes que possam se comunicar. Por exemplo, quando um computador A deseja obter um arquivo do computador B, ele precisa saber qual a porta usada no computador B pelo programa de transferência de arquivos. Existe duas abordagens fundamentais para a atribuição de portas. A primeira usa a autoridade central. Todos concordam em permitir que uma autoriddae central atribua números de portas, de acordo com a necessidade, e publique a lista de todas as atribuições. A seguir, todo o software é criado de acordo com a lista. Essa abordagem é algumas vezes chamada atribuições univresais; as atribuições de porta, especificadas pela autoridade, são chamadas atribuições de portas identificadas. A segunda abordagem para atribuição de portas usa atribuição dinâmica. Nesse tipo de abordagem de atribuição, as portas não são totalmente identificadas. Em vez disso, sempre que um programa necessita de uma porta, o software da rede atribui uma. Para aprender sobre a atribuição atual de porta em outro computador, é preciso enviar um pedido que façauma pergunta. A máquina-alvo responde, dando o número de porta correto. Os projetistas do TCP/IP adotaram uma abordagem híbrida que atribui alguns números de porta, mas deixa disponíveis para sites locais ou pragramas aplicativos. Os números de porta atribuídos começam com valores baixos e vão se elevando, deixando valores inteiros grandes disponíveis para atribuição dinâmica. 74 Decima Senha Senha UNIX Descrição 0 - - Reserved 7 ECHO echo Echo 9 DISCARD discard Discard 11 USERS sytat Active Users 13 DAYTIME daytime Daytime 15 - netstat 17 QUOTE qotd 19 CHARGEN chargen 37 TIME time 42 NAMESERVER name 43 NICNAME whois 53 DOMAIN nameserver 67 BOOTPS bootps 68 BOOTPC bootpc 69 TFTP tftp 111 SUNRPC sunrpc 123 NTP ntp Who is up or NETSTAT Quote of the Day Character Generator Time Host Name Server Who is Domain Name Server Bootstrap Protocol Server Bootstrap Protocol Client Trivial File Transfer Sun Microsystems RPC Network Time Protocol 75 8.3 SNMP net 161 - snmp 162 - snmp-trap SNMP traps 512 - biff UNIX comsat 513 - who 514 - syslog system log 525 - timed Time daemon monitor UNIX rwho daemon PROTOCOLO TCP O protocolo TCP trabalha no mesmo nível que o protocolo UDP, mas oferece serviços mais complexos, que incluem controle de erros e fluxo, serviço com conexão e envio de fluxo de dados. TCP utiliza o mesmo conceito de porta de UDP. Para TCP, uma conexão é formada pelo par (End. IP. Origem, Porta Origem) e (End. IP Destino, Porta Destino). O protocolo TCP oferece as seguintes características: • Controle de Fluxo e Erro fim-a-fim • Serviço confiável de transferência de dados • Comunicação full-duplex fim-a-fim • A aplicação basta enviar um fluxo de bytes • Desassociação entre qtd. de dados enviados pela aplicação e pela camada TCP • Ordenação de mensagens • Multiplexação de IP, através de várias portas • Opção de envio de dados urgentes A conexão TCP é ilustrada na Figura 19: 76 Porta 22 Porta 2340 TCP TCP IP IP Host 139.82.17.10 Inter-rede TCP/IP Host 139.82.55.3 Figura 19 – Conexão TCP Uma conexão TCP é formada por três fases: o estabelecimento de conexão, a troca de dados e o finalização da conexão, conforme ilustrado na Figura 20: SYN/ACK ACK Transmite dados Recebe dados Fecha conexão DADOS ACK DADOS ACK FIN ACK FIN ACK Recebe dados Transmite dados Fecha conexão Figura 20 – Conexão em três fases A fase inicial de estabelecimento de conexão é formada de três mensagens, formando o three-way-hanshaking, conforme a Figura 21: 77 SEQ 21 ACK - SEQ 152 SEQ - ACK 22 ACK 153 Figura 21 – Three Way Handshake O pacote TCP é formado pela mensagem mostrada abaixo: 0 7 15 Octeto 1 Octeto 2 23 31 Octeto 3 TCP SOURCE PORT Octeto 4 TCP DESTINATION PORT SEQUENCE NUMBER ACKNOWLEDGEMENT NUMBER HLEN RESERVED CODE BITS WINDOW CHECKSUM URGENT POINTER OPTIONS (IF ANY) PADDING DATA ... Estes campos são definidos da seguinte forma: TCP SOURCE PORT: Porta origem da mensagem TCP DESTINATION PORT: Porta destino da mensagem SEQUENCE NUMBER: número de sequência dos dados sendo transmitidos face ao conjunto total de dados já transmitidos. Este número indica a posição do primeiro byte de dados sendo transmitido em relação ao total de bytes já transmitidos nesta conexão. O primeiro número de sequência utilizado 78 não é zero ou um, mas começa de um valor aleatório. Logo se um pacote está trasmitindo do 1234o. byte até o 2000o. byte de uma conexão e o SEQUENCE NUMBER inicial utilizado nesta conexão foi 10000, o campo SEQUENCE NUMBER conterá o valor 11234. O sequence number em um sentido da conexão (máquina A para B) é diferente do seuqnece number do sentido inverso, já que os dados transmitidos por um e outro lado são completamente distintos. ACKNOWLEDGE NUMBER: número que significa o reconhecimento dos dados recebidos até então no sentido inverso. O ACK de um sentido é transmitido em piggy-backing no outro sentido. O ACK contém o número do próximo byte do fluxo de dados recebido, que a origem deste pacote espera receber da outra máquina. Este valor leva em consideração o número de SEQUENCE NUMBER inicial praticado pela outra máquina. O valor de ACK informa sempre o próximo byte ainda não recebido do conjunto contíguo de bytes recebidos do transmissor. CODE BITS: São formados por seis bits, URG, ACK, PSH, RST, SYN e FIN, cuja utilização é descrita abaixo: URG: bit de Urgência: significa que o segmento sendo carregado contém dados urgentes que devem ser lidos com prioridade pela aplicação. A aplicação origem é responsável por acionar este bit e fornecer o valor do URGENT POINTER que indica o fim dos dados urgentes. Um exemplo da utilização desta facilidade é o aborto de uma conexão (por exemplo por Control-C), que faz com que a aplicação destino examine logo o pacote até o fim da área de urgência, descubra que houve um Control-C e termine a conexão. ACK: bit de Reconhecimento: indica que o valor do campo de reconhecimento está carregando um reconhecimento válido. PSH: bit de PUSH: Este mecanismo que pode ser acionado pela aplicação informa ao TCP origem e destino que a aplicação solicita a transmissão rápida dos dados enviados, mesmo que ela contenha um número baixo de bytes, não preeenchendo o tamanho mínimo do buffer de transmissão. 79 RST: bit de RESET: Informa o destino que a conexão foi abortada neste sentido pela origem SYN: bit de Sincronismo: ë o bit que informa que este é um dos dois primeiros segmentos de estabelecimento da conexão. FIN: bit de Terminação: indica que este pacote é um dos dos pacotes de finalização da conexão WINDOW: Este campo informa o tamanho disponível em bytes na janela de recepção da origem deste pacote. Por meio deste valor, o TCP pode realizar um controle adequando de fluxo para evitar a sobrecarga do receptor. Quando este valor é igual a zero, o transmissor não envia dados, esperando receber um pacote com WINDOW maior que zero. O transmissor sempre vai tentar transmitir a quantidade de dados disponíveis na janela de recepção sem aguardar um ACK. Enquanto não for recebido um reconhecimento dos dados transmitidos e o correspondente valor de WINDOW > 0, o transmissor não enviará dados. OPTIONS: O campo de opções só possui uma única opção válida que é a negociação do MSS (Maximum Segment Size) que o TCP pode transmitir. O MSS é calculado através do MTU ou através do protocolo ICMP Path MTU Discovery. 8.3.1 Serviços TCP O principal propósito do TCP é garantir a trnsferência confiável de dados, para isto o protocolo deve fornecer alguns serviços, tais como: 8.3.1.1 Serviços TCP: transferência de dados A transferência de dados entre usuários pode ser feita tanto no modo full-duplex commo no modo half-duplex, sendo que a unidade básica de transferência entre o TCP e as estações é chamada de segmento. Em cada conexão é o protocolo que determina o momento mais conveniente 80 de bloquear ou liberar o dados para transmissão. O processo de ajuste dos intervalos enrte liberações é feito dinamicamente, para poder acomodar as constantes mudanças no tempo decorrido entre o instante de segmento, a diferença é comparada com valores correntes, sendo então feitos os ajustes necessários. Em cada conexão é o protocolo que determina o momento mais conveniente de bloquear ou liberar o dado para transmissão.O processo de ajuste dos intervalos entre liberações é feito dinamicamente, para poder acomodar as constantes mudanças no tempo de propagação do ambiente Internet. O mecanismo consiste na verificação do tempo decorrido entre o instante de transmissão de um segmento e o instante de chegada do reconhecimento associado a este segmento, a diferença é comparada com os valores correntes, sendo então feitos os ajustes necessários. O TCP também determina o número de octetos a serem incluídos em um determinado segmento, visando otimizar o uso do meio de transmissão. Após o estabelecimento da conexão o tamanho de cada segmento pode variar, ou seja, os segmentos não vão necessariamente conter o mesmo número de octetos. Exitem ainda dois mecanismos especiais : a sinalização de "push data" e de dados urgentes. O primeiro caso é usado quando o emissor quer especificar para o protocolo um conjunto de dados que devem ser transmitidos no mesmo segmento, para isto cada dado pertencente a este conjunto tem o seu flag ativado. O TCP separa todos os dados marcados com o flag, junta com os dados que já estavam no buffer e monta um segmento, transmitindo-o imediatamente. O protocolo do lado receptor ao perceber a existência de dados marcados com o push flag pega todos os dados do seu buffer e os entrega ao usuário. O segundo mecanismo é empregado nos casos em que é interessante sinalizar ao processo destinatário a existência de dados cujo atendimento seja prioritário. Neste caso é o processo destinatário que fica responsável pelo tratamento adequado destes dados. Um exemplo de sistema onde a aplicação deste conceito é útil, é o de sistemas de automação e controle. 81 8.3.1.2 Serviços TCP: confiabilidade TCP garante a correção dos dados nos casos de alteração, perda, duplicação ou entrega fora de sequência. Para manter este controle, o TCP se apoia basicamente no número de seqüência. A cadeia de bytes recebida da aplicação é vista como um conjunto de octetos. A cada octeto é associado um único número de seqüência, incrementado de um em um a cada octeto formado. A utilização deste dado e dos mecanismos de reconhecimento e checksum, visa manter a confiabilidade, sendo feita da seguinte forma : 1. perda de dados : o TCP associa um número de seqüência para cada octeto (byte) transmitido pela conexão, solicitando ao TCP destinatário o envio de um reconhecimento positivo (ACK). Este ACK contém o número de seqüência do próximo elemento esperado pela recepção, e representa uma confirmação de todos os números anteriores a ele. Se o ACK não é recebido dentro do tempo especificado para entrega (ocorrência de timeout), o receptor solicita ao transmisssor que os dados sejam retransmitidos; 2. ordenação : o mesmo número de sequência é usado pela estação receptora como forma de verificação da correta ordenação dos dados recebidos; 3. duplicação : algumas vezes pode ocorrer a perda de algum ACK, o que implicaria na duplicação do segmento associado. O número de sequência permite a identificação do segmento duplicado de forma que este possa ser descartado pelo receptor; 4. erros de conteúdo : dados recebidos possuem campo contendo um valor de checksum. O processo receptor recalcula o checksum com base no algoritmo de soma em complemento a um, e compara com o valor deste campo, caso o erro seja confirmado o receptor descarta os segmentos alterados. Para estes segmentos o receptor não envia o sinal de ACK, o que provoca a sua retransmissão. 82 8.3.1.4 Serviços TCP: controle de fluxo O TCP fornece um mecanismo, chamado de janela deslizante de tamanho variável ou janela de crédito, que permite a estação receptora controlar a quantidade de dados enviados pela estação transmissora. O receptor junto com cada ACK, envia um dado chamado janela de recepção com uma indicação da quantidade de octetos adicionais que podem ser aceitos pelo seu buffer. Normalmente a medida que o buffer vai enchendo este valor vai sendo reduzido, evitando o seu transbordamento. Quando os dados são passados do buffer para a aplicação, o valor da janela de recepção volta a aumentar, indicando que o tamanho da janela de transmissão pode aumentar também. 8.3.1.5 Serviços TCP: multiplexação O TCP usa a idéia de portas para identificar o destino final dentro da máquina. Cada máquina possui um conjunto de portas e isto permite que vários processos dentro de uma mesma máquina façam uso simultâneo dos serviços de comunicação do protocolo. Os soquetes representam o ponto terminal de todo o tráfego IP entre duas máquinas, sendo que um mesmo soquete pode ser usado para mais de uma conexão. 8.3.1.6 Serviços TCP: conexão O protocolo TCP é orientado à conexão, o que caracteriza três fases de funcionamento : estabelecimento da conexão, transferência de dados e liberação da conexão. Quando dois processos desejam se comunicar, o processo TCP associado a cada máquina deve primeiro estabelecer uma conexão. O processo de início da conexão faz com que as informações de status sejam iniciadas em ambos os lados de circuito virtual, garantindo a sincronização entre os números de seqüência iniciais de cada um dos lados. 83 Parâmetros especificando a segurança e precedência dos segmentos de dados a serem transferidos são fechados pelos usuários nesta fase. Durante a transferência de dados o processo TCP de cada máquina deve verificar a recepção correta dos dados. No caso de falhas devido a problemas na rede de comunicações, ambas as máquinas devem detectar a falha e notificá-la ao programa de aplicação. Após a troca de dados a conexão deve ser fechada para liberar recursos para outros usuários. O estabelecimento e o fechamento de uma conexão são realizados em três níveis distintos, com dois níveis de confirmação para evitar situações de erro. 8.3.1.7 Estabelecimento de conexão Um pedido de abertura de conexão pode ser feito de dois modos diferentes : passivo ou ativo. No modo de abertura passiva, o processo usuário fica em estado de espera aguardando a chegada pela rede de um pedido de início de conexão. O modo passivo pode ser do tipo completamente especificado ou não especificado. No primeiro caso o usuário fixa um soquete remoto pelo qual os pedidos de conexão serão aceitos. Um processo servidor que deseja fornecer serviços para outros processos deve fazer uma abertura passiva e aceitar aberturas ativas de qualquer processo chamador. Na abertura ativa, o usuário necessita estabelecer uma conexão com um processo servidor remoto, ele cria então um processo cliente para iniciar o circuito e faz um pedido de abertura ativa. Neste caso o processo na outra extremidade já deve ter feito a abertura passiva e estar esperando pelas chamadas de entrada. O estabelecimento de conexão possui quatro funções principais: 1. assegurar a cada extremidade da conexão a existência da outra pela troca de pacotes de pedido de conexão e resposta associada; 2. possibilitar a troca de parâmetros opcionais tais como o tamanho de pacote, o tamanho da janela e a qualidade de servico; 84 3. alocar recursos tais como o espaço em buffer; 4. criar uma entrada na tabela de conexão. Para cumprir as funções citadas acima os processos servidor e cliente devem primeiro definir o conteúdo da estrutura de dados local conhecida como TCB (Transport Connection Block), com o estabelecimento dos seguintes dados : tipo da conexão, número da porta remota e local, endereço Ip remoto e local, estado da conexão, ponteiro para o buffer de entrada. O estabelecimento da conexão é dividido em três fases para evitar a ocorrência de problemas como a duplicação da mensagem ou a perda da mensagem de confirmação do estabelecimento da conexão. A primeira fase consiste no envio do pedido de conexão, onde a máquina solicitante informa o número de seqüência inicial dos dados que serão enviados. Ao receber a solicitação o destinatário envia além do reconhecimento do pedido de abertura do solicitante, o seu número de sequência inicial. Após receber a confirmação do seu pedido o solicitante envia o reconhecimento desta resposta. O mecanismo de troca de números de sequência entre os processos, evita que dados retransmitidos ou mesmo dados atrasados sejam interpretados como um novo pedido de abertura de conexão, uma vez que não podem ser estabelecidas duas conexões consecutivas com o mesmo número de sequência. No caso de um dos processos interpretar um pedido de conexão anterior como sendo novo, o outro processo vai responder com uma indicação de rejeição do pedido. 85 Exemplo de estabelecimento de conexão bem sucedido 8.3.2 Transferência de Dados A transferência de dados começa logo após o término da operação de estabelecimento de conexão. O mecanismo de janela deslizante aumenta a eficiência da transmissão, permitindo ao TCP enviar vários pacotes antes que um reconhecimento chegue. O tamanho da janela deve ser escolhido com cuidado, pois uma janela maior apesar de aumentar a taxa de transmissão implica na necessidade de uma capacidade de armazenamento de dados maior em ambos os lados. No caso da conexão full-duplex pode-se usar o mecanismo de piggybacking para reduzir o tráfego relativo ao reconhecimento. Esta técnica usa o recurso de colocar os reconhecimentos dentro dos segmentos de dados enviados para o outro lado, evitando assim o envio do reconhecimento em um segmento isolado. 86 8.3.3 Encerramento da Conexão Existem duas formas para encerrar a conexão, uma normal e outra abrupta. Na terminação normal cada um dos lados só é efetivamente desconectado após a entrega dos seus respectivos dados. O processo de liberação é negociado, ou seja, o usuário remoto tem a opção de concordar ou não com a desconexão. A conexão TCP permite a transferência de dados full-duplex, isto significa que existem cadeias de dados independentes, fluindo em cada uma das direções da conexão. Para liberar as duas direções da conexão ambos os lados devem ser fechados, no entanto, caso desejado, pode-se encerrar só uma delas . Algumas vezes pode ocorrer um evento que force o programa de aplicação ou o software de comunicação a abortar a conexão, caracterizando uma terminação abrupta. No caso da terminação abrupta, a transferência de dados cessa imediatamente em ambas as direções, podendo ocorrer perda dos dados ainda em trânsito. 87 Exemplo de fim de conexão normal 8.3.4 Desempenho TCP O TCP é um protocolo complexo que promove a comunicação através de uma grande variedade de tecnologias de rede básica. Muitas pessoas supõem que, como o TCP desempenha uma tarefa muito mais complexa que outros protocolos de transporte, o código precisa ser inepto e ineficaz. Surpreendentemente, a generalidade sua generalidade não parece interferir no desempenho do TCP. As experiências em Berkeley comprovaram que o mesmo TCP que opera eficazmente em uma Internet global pode entregar garantidamente 8 Mbps de troughput de dados de usuário enrte duas estações de trabalho em uma Ethernet de 10 Mbps.