1- INTRODUÇÃO 1.1ORIGEM E CRESCIMENTO DA WEB A WEB é o universo de informações acessíveis por meio de computadores ligados em rede, ou seja, é uma aplicação em rede que permite aos usuários o acesso a serviços vários tais como mensagem de correio eletrônico, compra e venda, leilões, transmissão de áudio e imagens, etc. Um dos grandes passos da Internet foi criação do hipertexto. O hipertexto é uma escrita não-sequencial que apresenta informações como uma coleção de nós interligados, sendo que cada nó pode estar localizado em pontos diferentes, tendo como única relação a afinidade das informações que contém. Pode-se dizer que a WEB surgiu da ARPANET, uma rede concebida em 1960 como uma infra-estrutura de comunicação para compartilhar o acesso a supercomputadores entre os pesquisadores no Estados Unidos. Havia também o interesse do Departamento de Defesa dos Estados Unidos em estudar técnicas que possibilitassem as comunicações entre computadores de diferentes fabricantes. Com isto surgiu o conjunto de protocolos TCP/IP que foi formalizado em 1980. Influenciado pelo hipertexto, um cientista propôs o vínculo das informações contidas em diversas máquinas. Nesta época vários outros sistemas foram criados para pesquisa e acesso de documentos pela Internet, como por exemplo: FTP, Gopher, Archie e WAIS (Wide Area Information Servers). O FTP (File Transfer Protocol) permite que usuários copiem arquivos previamente colocados em servidores específicos; o Gopher permitia que usuários procurassem informações nas redes de computadores, com base em palavras-chave ou assuntos; o WAIS retornava uma lista de arquivos, classificados por sua relevância em relação à consulta realizada; o Archie foi introduzido como uma ferramenta para localizar arquivos em servidores FTP. Por algum tempo estes sistemas competiram com a WEB antes de serem abrangidos pela própria WWW, sendo que o único que permanece é o FTP para transferência de arquivos. Os demais serviços ficaram obsoletos em função de seus protocolos mais primitivos e também pelo advento do hipertexto, o qual se mostrou muito mais flexível. 1.2COMPONENTES SEMÂNTICOS DA WEB São três os componentes semânticos da WEB: Uniform Resource Identifiers (URI), Hypertext Markup Language (HTML) e Hypertext Transfer Protocol. 1.2.1URI (Uniform Resource Identifiers) O URI é o identificador do recurso distribuído colocado na WEB. O URI não representa algo físico e sim um ponteiro para métodos de pedidos. Um método de pedido é uma operação simples como busca, troca ou exclusão de um recurso. No nível mais alto um URI é um string formatada como http://www.site.com.br/algo.gif e consiste de três partes: o protocolo para comunicação (no caso http), o nome do servidor (www) e o nome do recurso no servidor (algo.gif). O formato mais popular do URI é o URL (Uniform Resource Locator) e normalmente são confundidos apesar de não serem a mesma coisa. De uma forma geral será utilizado o termo mais corrente ao longo deste trabalho que é URL. 1.2.2Hypertext Markup Language (HTML) A HTML oferece uma representação padrão para documentos de hypertexto em formato ASCII, permitindo que os autores formatem texto, façam referência a imagens e incluam links de hypertexto para outros documentos. Os arquivos HTML são lidos e interpretados pelos browsers antes de serem apresentados aos usuários. 1.2.3Hypertext Transfer Protocol(HTTP) O HTTP é o protocolo que permite as comunicações entre os componentes da WEB, definindo o formato e o significado das mensagens trocadas pelos componentes e é um protocolo do tipo cliente-servidor, ou seja, o cliente faz uma solicitação e recebe do servidor uma mensagem como resposta. Os pedidos dos clientes normalmente são disparados com um click em um hypertexto ou pela digitação de uma URL na janela do browser. Também tem como característica o fato de ser um protocolo sem estado, ou seja, as mensagens entre cliente e servidor são tratadas independentemente e não precisam manter qualquer informação de estado entre pedidos e respostas. 1.3CONCEITOS 1.3.1Componentes de Software Agente de usuário: é o componente que inicia o pedido HTTP e trata a resposta. O exemplo mais comum é o browser; Cliente: programa que envia um pedido HTTP; Servidor da web: o programa que recebe um pedido HTTP de um cliente e transmite a resposta; Proxy: intermediário entre o cliente e o servidor; Cookie: informações de estado passadas entre o agente do usuário e o servidor 1.3.2 Rede de suporte Host: qualquer dispositivo computacional componente da rede, podendo ser o computador do usuário, um servidor da web, um gateway, etc. ; Pacote: unidade básica de informação dentro da rede; IP: protocolo da pilha de protocolos TCP/IP responsável pelo encaminhamento dos pacotes entre clientes e servidores; Endereçamento IP:forma de identificação inequívoca de um host na rede, composto de 32 bits; Nome do host: nome que identifica um host na rede; DNS: Domain Name System. Trata-se de um banco de dados distribuído com a finalidade de traduzir nomes de servidores para endereços IP; TCP: Transmission Control Protocol, protocolo da pilha de protocolos TCP/IP, com a função de fornecer uma conexão confiável e bidirecional entre dois hosts; UDP: User Datagram Protocol, protocolo da pilha de protocolos TCP/IP com a função de fornecer conexões não confiáveis entre dois hosts, utilizado para mensagens curtas (p. ex. troca de mensagens com o DNS); Conexão: canal de comunicação lógico estabelecido entre dois hosts 1.3.3Padronização A Internet não possui um órgão administrativo; os vários hosts e redes aderem aos padrões de protocolo voluntariamente. A Internet Enginnerng Task Force (IETF) é uma comunidade aberta de projetistas de redes, fornecedores de produtos e pesquisadores que contribuem para a evolução e a operação da Internet. A IETF governa os padrões por uma série de publicações oficiais chamadas RFC (Request For Comments), sendo que a primeira foi publicada em 1969. Os documentos da Internet começam como Rascunhos da Internet, que são documentos informais que sofrem revisão com base nos comentários da comunidade. Nem todos os Rascunhos da Internet se tornam RFCs. Os documentos de padrões possuem requisitos de compatibilidade de diferentes níveis: PRECISA (must), DEVE (should) e PODE (may). Qualquer implementação pode ser considerada condicionalmente compatível se atender a todos os requisitos PRECISA e uma implementação pode ser considerada condicionalmente compatível se atender a todos os requisitos do nível DEVE. Os requisitos de nível PODE são opcionais. Estes níveis de requisito ajudam a assegurar a interoperabilidade entre diferentes implementações. A fim de nutrir e promover o crescimento da web, foi fundado o World Wide Web Consortium (W3C), em 1994. Este consórcio desenvolveu uma série de padrões relacionados à web, enfocando assuntos arquitetônicos, assuntos de interface com o usuário que lidam com formatos e idiomas, assuntos sociais relativos a questões de política legal e pública e assuntos de acessibilidade para assegurar que pessoas com deficiências possam ter acesso à tecnologia. 1.3.4Tráfego e desempenho da WEB. A popularidade da web trouxe um problema para os projetistas de redes, tendo em vista o aumento do tráfego na Internet e as expectativas do usuário em relação à rapidez no atendimento às suas solicitações. A terminologia relacionada ao tráfego na Internet é a seguinte: - Latência (ou demora): tempo entre a iniciação de uma ação, como o envio de uma mensagem de pedido e a primeira indicação de uma resposta; - Latência percebida pelo usuário: demora entre o momento em que o usuário seleciona um hipertexto e o conteúdo começa a aparecer na tela. Cada componente de software e protocolo contribui de forma variada para a latência percebida pelo usuário. Por exemplo, o browser precisa montar o pedido HTTP, determinar o endereço IP do servidor, estabelecer uma conexão TCP com o servidor, transmitir o pedido, esperar pela resposta e finalmente, apresentar a resposta ao usuário. Um pedido de latência alto pode ter várias origens: sobrecarga no DNS, congestionamento da rede ou sobrecarga no servidor. A conexão do usuário com a Internet também é responsável pela latência percebida pelo usuário. Neste particular, vários serviços denominados de maneira geral como acesso de banda larga tem sido oferecidos, tais como: ADSL, DVI, acesso por cabo e acesso por satélites. A largura de banda destes serviços variam até algo em torno de velocidades de rede local, mas a maioria fica na casa de 200 a 500 Kbps, o que vem a ser um grande avanço em relação aos modems convencionais que ficam na casa de 56 Kbps, além do que a transmissão é totalmente digital. A maioria da análise de tráfego da web é baseada em logs que registram as transferências HTTP realizada por componentes de software da web. A análise de logs é útil para se entender as características da carga de trabalho tratada pelos componentes de software da web. Uma carga de trabalho consiste no conjunto de todas as entradas (por exemplo, pedidos HTTP) recebidas por um componente com o passar do tempo. As características da carga de trabalho, como o tempo entre os pedidos e o tamanho e popularidade dos vários recursos, possuem implicações importantes para o desempenho dos protocolos da web, componentes de software e a rede que os suporta. 1.35 Aplicações WEB O crescimento da web ocasionou uma pesada carga sobre os servidores da web e na Internet e conseqüentemente aumentou a latência percebida pelo usuário no acesso ao conteúdo da web. O caching aproxima o conteúdo do usuário, que pode estar localizado no lado do usuário (no browser) ou em algum equipamento intermediário (proxy). Embora melhore o acesso do usuário, uma resposta em cache pode diferir da versão disponível do servidor, sendo necessário então o uso de mecanismos de coerência de cache que são usados para assegurar que uma mensagem em cache esteja atualizada com o servidor de origem. Estes mecanismos de coerência de cache podem incluir alguma consulta ao servidor de origem para comparar a última atualização com o que está armazenado. Uma alternativa para o caching, a replicação, envolve a duplicação explícita do conteúdo da web em diversos servidores. Uma alternativa para a replicação de conteúdo completo de um site da web é a entrega de conteúdo seletivamente a partir das réplicas em nome do servidor principal. Esta técnica é conhecida como distribuição de conteúdo. A web oferece acesso a diversos recursos sem levar em conta seu formato. Áudio e vídeo se tornaram comuns na web. Diferentemente do conteúdo tradicional, fluxos de áudio ou vídeo consistem em um seqüência de sons (amostras) ou imagens (quadros) durante um período de tempo. Em aplicações de streaming de multimídia o cliente toca as amostras ou quadro assim que eles chegam do servidor, em vez de baixar todo o conteúdo antes de começar a reprodução. Essas aplicações consomem grande largura de banda e são sensíveis a demoras no recebimento das amostras de áudio e quadros de vídeo. Embora o HTTP possa ser usado para entregar conteúdo de multimídia, a maioria das transferências de multimídia é simplesmente iniciada via HTTP. Depois de iniciada, uma aplicação de auxílio, ou media player, contata o servidor de multimídia usando um conjunto de protocolos mais adequados para o streaming de áudio e vídeo. 2- CLIENTES DA WEB No item anterior foi apresentado que os três componentes de software principais da web são: cliente, proxy e o servidor. A maioria dos usuários da web entra em contato direto com clientes da web e quase nunca com proxy ou servidores. Os servidores são fundamentais, os proxies desempenham um papel de alta relevância, porém o browser- a forma mais conhecida de um cliente da web- é o que é realmente visto pelos usuários finais como a interface da web. 2.1 Funções do browser relacionadas à WEB. Um cliente da web é um pedaço de software. A tarefa típica de um cliente da web é enviar um pedido da web em favor de um usuário e receber a resposta. Na prática os clientes web são muito complexos. A complexidade não vem de uma das tarefas fundamentais que um cliente da web precisa realizar: construir um pedido web corretamente for- matado, estabelecer uma conexão e comunicar-se com um servidor web por uma conexão confiável em nível de transporte. Muitas das complexidades de um programa cliente vêm de fatores ambientais ao redor da troca básica entre pedido e resposta, personalizar a criação do pedido, interpretar a resposta e moldar a apresentação. Um browser implementa principalmente um cliente web, constrói e envia um pedido HTTP, depois recebe, analisa e apresenta a resposta. Uma sessão do browser é, portanto, uma série de pedidos enviados pelo usuário, possivelmente baseados nas respostas recebidas a cada estágio. Uma sessão de browser pode durar alguns minutos ou um tempo muito longo. A figura abaixo mostra as várias etapas no processo envolvido em um pedido da web, conforme processado por um browser típico. Browser 1 Servidor DNS Servidor Conexão TCP Pedido HTTP Resposta HTTP Algumas etapas podem não ser necessárias para cada pedido, devido ao caching. Existem dois tipos de caching que são comuns nos browsers: uma parte de memória do processo em execução e uma parte do espaço em disco do sistema de arquivos que é dedicada ao caching. É possível que o recurso em cache possa ter sido modificado desde o momento em que ele foi guardado no cache. O browser pode ter que verificar se a resposta em cache ainda está atualizada., comparando esta cópia com a cópia atual no servidor. Essa verificação é chamada de revalidação do cache. Se a versão no servidor for mais recente, então a cópia no cache está desatualizada. Diz-se que um cache mantém coerência dos recursos em cache, se ele garantir que os recursos em cache ainda estão atualizados no servidor de origem. Se o cache revalida sua versão contra o servidor toda vez que é feito um pedido de um recurso, diz-se que tem uma forte coerência de cache. Se o cache utiliza uma heurística para decidir se os dados estão atualizados ou não, diz-se que tem uma fraca coerência de cache. Diversas heurísticas são usadas para se manter a coerência do cache, por exemplo: intervalos fixos de tempo ou variar o intervalo de revalidação de acordo com os atributos do recurso (tamanho, última vez que foi modificado, etc). TESTE TESTE TESTE TESTE 2.2COOKIES O HTTP é um protocolo sem estado - um servidor da web não precisa reter nenhuma informação sobre pedidos passados ou futuros. No entanto um servidor pode ter um motivo para querer manter informações (estado) entre uma série de pedidos dentro de uma sessão de navegação pela web ou ainda entre as sessões. Por exemplo, um servidor pode ter que dar um determinado tipo de acesso diferenciado para algum usuário e se for necessária alguma informação de identificação toda vez que o usuário acessa qualquer uma das páginas neste conjunto, haverá um trabalho extra considerável para o usuário incluir tais informações e o servidor processá-las. Um browser desempenha um papel importante no fornecimento de informações, exigido no pedido de um usuário. Os cookies são um meio de se administrar o estado em HTTP, ou seja, a colocação de informações para manipulação pelos servidores e são armazenados no host do cliente em favor do servidor. De uma certa forma os cookies são muito discutidos dentro da comunidade web, tendo em vista a opinião de alguns autores que consideram uma invasão na privacidade dos usuários. O cookie é enviado pelo servidor, junto com a resposta e armazenado no host cliente. Da próxima vez que o usuário visitar o site, as informações contidas no cookie são passadas para o servidor, dentro do cabeçalho do pedido. Como alternativa, as informações passadas no cookie podem permitir ao servidor acompanhar um conjunto de usuários de uma organização.A figura abaixo mostra um cliente enviando um pedido a um servidor. O servidor, em sua resposta, inclui um cabeçalho (Set-Cookie) como valor do cookie (xyz). Em todos os pedidos futuros para o servidor de origem, o cliente inclui o cookie. O cliente não interpreta a string de cookie enquanto a armazena e a inclui em pedidos subseqüentes. Observar que o cookie é trocado sem o conhecimento do usuário, a menos que este tenha solicitado que seja avisado toda vez em que cookies forem enviados. cliente Pedido cliente Resposta Set-cookie: xyz cliente Pedido servidor servidor servidor Assim como outros atributos semânticos que podem ser controlados por meio do browser, os usuários possuem um grau considerável de controle sobre os cookies. Os usuários podem: decidir se aceitam o uso de qualquer cookie: tal decisão pode impossibilitar o download de páginas de alguns sites; definir um limite para o tamanho e o número de cookies que aceitam: isso controla a quantidade de espaço que eles tem para alocar em suas máquinas e reduz o risco de cookies extremamente grandes; decidir se aceitam cookies de todos os sites ou apenas de sites/domínios específicos: esse controle permite que os usuários aceitem cookies dos sites desejados e elimina a possibilidade de aceitar cookies de outros sites; estreitar a aceitação de cookies para a duração de uma sessão específica: um grau de controle mais fino em nível de sessão permite que os usuários ativem a aceitação de cookies para conseguir uma tarefa em particular. No final da sessão, eles retornam ao default, não aceitando mais cookies para as futuras sessões; exigir que os cookies venham do mesmo servidor da página atualmente sendo vista: esse controle garante que o usuário saberá de onde os cookies vêm e impede que os outros sites (que podem ser contatados automaticamente pelo browser) enviem cookies. Por exemplo quando um browser faz download de um documento imagens incorporadas podem ser apanhadas automaticamente. As imagens incorporadas podem residir em um servidor diferente daquele que atenda ao documento. 2.3 SPIDERS Um spider é um programa usado para se obter alguns ou todos os recursos em uma grande quantidade de sites da web. Um uso inicial de um spider foi para ajudar na manutenção de sites de web. Atualmente, os recursos são reunidos e usados posteriormente em uma aplicação de pesquisa. A pesquisa na web continua sendo uma das aplicações mais populares e foi a principal motivação para a criação da ferramenta spider. 2.3.1 Pesquisando na web A pesquisa na web atualmente é um grande desafio em função do número de páginas e sites a serem visitados na busca do desejado. Para acelerar esta busca é utilizado como recurso, uma coleção de ponteiros para as posições nos documentos, das ocorrências das strings de pesquisa. Tal coleção de documentos é chamada de índice invertido. Tome-se como exemplo um índice do final de um livro, onde as ocorrências são localizadas a partir de uma string, sendo que são registradas todas as ocorrências de cada um dos termos indexados. 2.3.2 Cliente spider O spider tem a finalidade de obter alguns ou todos os recursos em uma grande quantidade de sites, principalmente com a finalidade de gerar um índice invertido para ser utilizado por uma aplicação de pesquisa. Assim como outros clientes da web, o spider prepara pedidos HTTP para acessar recursos em um site da web e analisa as respostas. As principais diferenças entre um spider e um browser são o número incrivelmente mais alto de sites contatados e pedidos enviados, a ausência de qualquer exibição das respostas e o uso bastante singular das respostas. Os sites de pesquisa utilizam um spider para procurar páginas que precisam ser indexadas. Um spider normalmente começa com uma lista básica de sites populares- lista de partida - e acompanha todos os URLs dentro do site. Um exemplo de lista de partida é a lista de categorias presentes nos sites de pesquisa. O spider obtém a página inicial de um site e examina todas as referências de hipertexto embutidas nela. Para cada uma das referências, a ferramenta pode apanhar a página correspondente- isto é chamado de travessia em largura. Cada um dos links de hipertexto dentro do site seria seguido e depois os itens dentro deles e assim por diante- esta é uma travessia em profundidade. Logicamente que há um cuidado para que não haja ciclos, evitando-se atravessar um link que já tenha sido apanhado. Um ponto interessante para os spiders é obedecer a determinados padrões dentro da web, por exemplo, devem "respeitar" os sites que não desejam ser indexados. Algumas convenções existem para isto e os spider devem segui-las para não comprometer os sites de pesquisa que os utilizam. Uma das convenções utilizadas para controlar a ação dos spiders é em nível de site : o Administrador do site mantém um arquivo chamado robots.txt, onde lista as regras de acesso para serem seguidas pelos spiders (ou robôs- que indica um cliente automatizado). Por exemplo, pode-se ter o seguinte arquivo robots.txt: User-agent: * Disallow: /stats Disallow: /cgi-bin/ Disallow: /Excite/ Este arquivo indica que todos os agentes de busca tem permissão para apanhar recursos do site para fim de indexação, exceto nos diretórios /stats, /cgi-bin/, /Excite/ Uma outra forma como os robôs podem ser informados a respeito dos recursos que não devem ser indexados é por meio da tag META Robots, que é um recurso do HTML. Por exemplo, uma tag como <META NAME="ROBOTS" CONTENT="NO INDEX, NO FOLLOW"> informa ao robô que o recurso atual não deve ser indexado e nenhum dos links no recurso deve ser seguido. 2.3.3Uso de spiders nos utilitários de pesquisa Os spiders ajudam os utilitários de pesquisa a coletar páginas de muitos sites da web. Dependendo da sofisticação do spider, do tamanho da lista inicial e do espaço de armazenamento disponível, um índice invertido pode ser criado com todas ou algumas páginas. Sites de utilitários de pesquisa estão entre os destinos mais populares na web e possuem ponteiros para várias fontes de informação. Um utilitário de pesquisa possui uma interface simples para o usuário inserir uma ou mais palavras-chave (conhecidas como termos de pesquisa). As palavras-chave são pesquisadas no índice e os ponteiros para os documentos que as contêm (se houver) são retornados. A pesquisa pode ser local em um único banco de dados ou o conteúdo indexado da web. O tempo que se gasta em pesquisas na web, é em parte por falta de um bom índice. Alguns sites como o Yahoo! indexa os sites mas não o conteúdo de todas as páginas, em outras palavras, somente as páginas básicas dos sites são reunidas para fins de indexação. Outros sites, como o AltaVista e Google indexam páginas individuais dentro dos sites. Assim sites como Yahoo! servem para se localizar informações gerais sobre um assunto em um nível de granularidade menos detalhado, enquanto o AltaVista e o Google oferecem mais resultados a partir da indexação de todas as strings nos documentos. Os utilitários de pesquisa variam em sofisticação. A maioria deles oferece o recurso de pesquisa simples, em que um ou mais termos são pesquisados no índice e ponteiros para documentos que combinam com qualquer uma das palavras-chave são retornados. 2.4 O Proxy Em um modelo convencional cliente/servidor, o cliente se conecta diretamente ao servidor sem intermediários. No caso da web, que utiliza o modelo cliente/servidor, os usuários fariam suas requisições diretamente aos servidores que enviariam a resposta também direto para o usuário. Com o aumento do número de usuários e servidores, foi pensada uma maneira de se atenuar o tráfego dentro da Internet e uma forma encontrada foi a utilização de um intermediário. Este intermediário faria um cache das solicitações e desta forma economizaria largura de banda dentro da Internet o que representa uma menor latência percebida pelo usuário. Na realidade este intermediário ganhou grandes proporções e é denominado de servidor proxy. O papel deste servidor tem sido considerado relevante, tanto que passou a fazer parte de sistemas de firewall. Além da tarefa primária de fazer cache dos sites acessados pelos usuários, o proxy também atua como um filtro para acesso à web, ou seja, de acordo com a configuração feita, os usuários só terão acesso ao que não estiver bloqueado por ele. O papel principal do proxy é o de front-end para os usuários, conferindo compartilhamento de acesso e mantendo a privacidade do usuário. De uma forma geral o proxy é instalado para proteger uma rede interna , compartilhando um só acesso. Quando instalado em uma rede local com acesso por LP à Internet, o host que roda o programa de proxy, terá duas placas de rede, uma como endereço da rede interna e outra com o endereço conhecido da Internet (endereço externo). Os clientes são configurados para acessar a rede externa via o proxy. Este recebe a solicitação do cliente, examina se o endereço pretendido pode ser acessado (de acordo com sua configuração), verifica se a página pretendida está no cache, se estiver retorna a página ao cliente, caso não esteja faz o acesso externo e retorna a página ao cliente. O proxy faz também o acesso ao servidor DNS para resolução de nomes. Todo este processo é transparente para o usuário, o que o leva a imaginar que o acesso está sendo feito diretamente. 2.4.1 Classificação dos proxies Mesmo tendo no cache uma função primordial, é possível que alguns proxyes não executem esta função, executando somente a função de compartilhamento de acesso, encaminhando as solicitações e respostas. Os proxies podem ainda ser transparentes ou não. Um proxy transparente não modifica as mensagens que passam por ele, a não ser de maneira superficial. Um exemplo de uma modificação superficial é a colocação de dados sobre si mesmo. Já um proxy não-transparente faz algumas alterações nas mensagens, como por exemplo o endereço da origem, ocultando o endereço do usuário. 2.4.2 Segurança e filtragem de endereços O proxy tem uma função importante na segurança de uma rede que esteja conectada à Internet. O fato de ocultar o endereço interno impede as tentativas de ataques a equipamentos internos da rede. Este fato é perfeitamente válido para os proxies não transparentes, já que para a rede externa todas as requisições são feitas pelo próprio proxy, não aparecendo o endereço do usuário. Outro fator contribuinte para a segurança (agora do ponto de vista tráfego interno para o externo), é a possibilidade de filtrar o acesso à sites indesejados. Por exemplo, uma determinada empresa pode bloquear sites de diversão para os usuários. 2.4.3 Encadeamento e hierarquias de proxy Normalmente os sites tem somente um proxy como intermediário entre o cliente e a Internet, porém nada impede que vários proxyies sejam colocados em cadeia entre o cliente e o servidor, desta forma pode-se dizer que existirá um encadeamento de proxies, e um será cliente para o seguinte. Neste esquema, dentro da configuração dos proxies, um proxy pode se servir do cache do seguinte o que pode facilitar ainda mais o acesso. Por exemplo dentro de uma instituição com sub-redes, pode ser criado um proxy para cada sub-rede, sendo que cada proxy destes pode passar por um proxy central que teria o acesso à rede externa. 2.4.4 Protocolos filtrados Os proxies não filtram todos os protocolos utilizados na Internet. Eles só conhecem o HTTP e o FTP, sendo que o SMTP não passa pelo proxy já que não é conhecido deste. 2.4.5 O Proxy como servidor na web Um proxy, em seu papel como servidor na web, é um destino para os pedidos dos clientes. Um proxy com caching atuando como servidor na web para os pedidos de um cliente pode verificar se o pedido pode ser satisfeito a partir do seu cache. Se puder responder a partir do cache e os dados estiverem válidos, o proxy entrega a requisição ao cliente. Caso contrário, faz a requisição ao servidor de origem e a repassa ao solicitante. Do ponto de vista do cliente o proxy se comporta como o servidor de origem. A diferença é a redução na latência quando uma resposta em cache é retornada, pois o proxy está muito mais perto do cliente. 3.0 SERVIDORES WEB Um servidor web é um programa que recebe os pedidos dos clientes, faz a devida interpretação deste pedido e gera uma resposta. Este é o terceiro componente de software da web - os clientes e os proxies são os outros dois componentes. O tratamento de um pedido consiste em várias etapas básicas: análise da mensagem de pedido, verificação se o pedido foi autorizado, associação do URL no pedido com um nome de arquivo, construção da mensagem de resposta e transmissão da mensagem de resposta para o cliente solicitante. O servidor pode gerar uma mensagem de resposta de diversas maneiras: pode ser um simples retorno de uma URL, pode ser através da ativação de um script ou pela consulta a um banco de dados em back-end. 3.1 Servidor da web e site da web Um site da web consiste em uma coleção de páginas da web associadas a um nome específico, enquanto um servidor da web é um programa que vai atender a pedidos dos clientes. Na realidade pode-se dizer que um site da web é composto de um ou mais servidores da web. 3.2 Servidor web Este servidor é um programa que trata do atendimento aos pedidos de HTTP por recursos específicos. A criação e a transmissão de uma página da web pode, na verdade, exigir o envolvimento de vários servidores, scripts e banco de dados. O servidor é executado em uma plataforma com acesso à rede e deve ser adequadamente configurado para a carga que terá para atender a demanda de pedidos. Logicamente um site popular deve ter uma configuração com maior capacidade do que um site menos popular, porém em qualquer caso o servidor não deve ser utilizado para outras funções, ou seja, não deve ser compartilhado para uso comum. Uma prática válida é a instalação de mais de um servidor dentro da mesma plataforma (por exemplo, servidor web na mesma plataforma de um servidor ftp). Deve ser evitado a colocação na mesma máquina de servidores que tenham muitas requisições como por exemplo servidor e-mail e servidor web. Servidores como o de DNS, dada a sua importância deve ser instalado sozinho em uma plataforma de alta confiabilidade. 3.2.1 Tratamento de um pedido do cliente Os servidores web oferecem acesso a uma coleção diversificada de recursos, desde arquivos estáticos a scripts que geram respostas personalizadas. As etapas no tratamento do pedido do cliente são as seguintes: 1.Ler e analisar a mensagem de pedido HTTP: o servidor lê a mensagem do pedido enviado pelo cliente. O cabeçalho da mensagem contém informações de controle, como a operação foi solicitada (método GET ou POST) e o URL do recurso solicitado; 2.Traduzir o URL para um nome de arquivo: o servidor converte o URL no nome de arquivo correspondente. O URL pode ter um relacionamento direto com a estrutura do sistema de arquivo de suporte. Por exemplo, os recursos da web podem estar localizados em um diretório básico como /www onde o URL www.site.com.br corresponde ao arquivo /www/index.html.; 3.Determinar se o pedido está autorizado: antes de gerar uma mensagem de resposta, o servidor verifica se o cliente tem permissão para acessar o recurso. Embora muitos recursos de web estejam disponíveis a todos os usuários, o servidor pode limitar o acesso a alguns recursos, com base na informação de autorização no cabeçalho de pedido HTTP; 4.Gerar e transmitir uma resposta: o servidor gera uma mensagem de resposta que inclui um cabeçalho para conduzir informações de status (por exemplo, um erro indicando um pedido não autorizado ou um recurso não existente, um redirecionamento para o cliente repetir o pedido com um URL diferente ou uma resposta bem sucedida que inclui o recurso solicitado). Além disso, o cabeçalho pode incluir metadados sobre o recurso como o tamanho e o formato. 3.2.2 Controle de acesso Um servidor web pode limitar quais usuários podem acessar certos recursos. O controle de acesso exige uma combinação de autenticação e autorização. A autenticação identifica o usuário que originou o pedido e a autorização determina se o usuário tem direito de acesso o recurso solicitado. 3.2.3Respostas geradas dinamicamente Além de oferecer recurso estático a web oferece acesso a recursos dinâmicos. Esse recurso diferencia a web dos serviços mais antigos de transferência de arquivos na Internet. Respostas geradas dinamicamente são criadas de diversas maneiras. Uma inclusão no servidor instrui o servidor a personalizar um recurso estático com base nas diretivas de um arquivo tipo HTML. Ao contrário, um script no servidor é um programa separado, que gera o recurso solicitado. O programa pode ser executado como parte dos servidores ou como um processo separado, que se comunica com o servidor. A geração dinâmica da mensagem de resposta dá aos criadores de conteúdo uma grande flexibilidade, à custa de um fardo mais pesado sobre o servidor, além de introduzir riscos em potencial à segurança. Inclusões no servidor: os criadores de conteúdo normalmente desejam personalizar uma página da web para o usuário solicitante. Por exemplo, a página pode apresentar a hora e o endereço IP do cliente. O criador do conteúdo não tem esta informação no momento em que o arquivo HTML é criado. Em vez disso, o arquivo poderia incluir diretivas, ou macros, que instruem o servidor a inserir a informação no momento da resposta. A análise de um arquivo para cada pedido introduziria um fardo desnecessário sobre o servidor, especialmente se a maioria dos arquivos não incluiu macros. Em vez disso o servidor determina se o arquivo exige análise, com base no URL. Uma convenção comum é que o nome do recurso possua uma extensão diferente de html. Por exemplo, uma extensão shtml, .php ou .asp. PHP (Personal Home Page) é uma linguagem de scripting utilizada em várias plataformas (como Linux e Windows) e ASP (Active Server Pages) é uma implementação da Microsoft que roda nos seus servidores. Estas duas implementações permitem que o servidor execute ações como acesso a banco de dados e formatação de documentos, por exemplo; Scripts no servidor: em vez de embutir informações em um arquivo tipo HTML, um programa separado poderia gerar o recurso inteiro. Nessa situação, o URL na mensagem do pedido HTTP corresponde a um programa, não um documento. O programa pode realizar uma série de tarefas, como acessar informações de um banco de dados ou criar uma resposta personalizada. É muito importante que haja uma separação entre o servidor e o script. O papel principal do servidor é associar o URL solicitado ao script apropriado e passar os dados de e para o script. O papel principal do script é processar a entrada do servidor e gerar o conteúdo para o cliente. O servidor pode interagir com o script das seguintes maneiras: oprocesso separado invocado pelo servidor: o script pode ser executado como um processo separado invocado pelo servidor, para criar o recurso solicitado. Ter um processo separado isola o servidor da operação do script, mas gerando um overhead adicional na criação e destruição de um processo para cada pedido. Essa é a técnica tradicional usada pela Common Gateway Interface (CGI); omódulo de software no mesmo processo: o script pode ser um módulo de software separado, que é executado como parte do servidor. A chamada de um módulo dentro do servidor evita o overhead da criação de um processo separado, com o risco de consumir um excesso de recursos do sistema do servidor. Essa é a técnica utilizada pela Netscape Server Application Interface (NSAPI), Internet Server Application Programing Interface (ISAPI) da Microsoft, módulo mod_perl do Apache e servlets Java da Sun Microsystems; oprocesso persistente contatado pelo servidor: o script pode ser um processo separado, que cuida de vários pedidos por um longo período de tempo. O servidor se comunica com o processo para enviar argumentos e receber a saída. Ter um processo de execução longo elimina a necessidade de se criar e destruir uma conexão com outros serviços, como um banco de dados de back-end. Essa é a técnica utilizada pelo FastCGI. A separação bem definida entre os scripts e o servidor da web exige uma interface bem definida para a passagem de dados entre as duas partes de software. Primeiro o servidor precisa determinar se o recurso solicitado identifica um script, em vez de um documento. Os URLs que correspondem aos scripts normalmente incluem um caracter "?" ou uma string como "cgi", "cgi-bin" ou "cgibin". No entanto, normalmente, a associação de um URL com um script é determinada pela configuração do servidor. Por exemplo, o servidor poderia ser configurado para assumir que qualquer URL com uma extensão em particular (por exemplo, cgi) ou associada a um diretório (p.ex. /www/cgi) corresponde a um script. Depois de identificar se o URL corresponde a um script, o servidor verifica se as permissões de acesso atribuídas ao script permitem a execução. Depois o servidor chama o script e espera o término de sua execução antes de enviar uma resposta ao cliente. A existência de uma interface bem definida para a troca de dados é importante para fazer com que o servidor e o script funcionem juntos. A interface exata difere de uma forma de scripting para outra. Ainda assim, todas as técnicas focalizam uma necessidade comum do servidor encaminhar dados de entrada para o script e receber dados de saída. Como as formas de passar e receber dados dependem do sistema operacional utilizado, será focalizada a forma de interação entre um servidor UNIX e um script CGI. O servidor web oferece diversas informações ao script, como mostra a tabela abaixo. As informações sobre o servidor incluem o nome e a versão do software do servidor, o nome e a versão do protocolo, o número da porta do servidor e o diretório raiz para os recursos hospedados no site. As informações sobre os pedidos do cliente incluem o endereço IP e o nome do host do cliente. As informações sobre o pedido incluem o endereço IP e o nome do host do cliente. As informações sobre o pedido incluem o tipo de conteúdo do pedido, o tamanho do pedido e o formato preferido para o recurso solicitado. Outros campos da mensagem de pedido HTTP estão disponíveis em variáveis iniciadas com HTTP. Por exemplo, a mensagem de pedido HTTP pode incluir um cabeçalho User-Agent que identifique o tipo de browser que iniciou o pedido; essa informação estaria disponível na variável de ambiente HTTP_USER_AGENT. Igualmente a variável HTTP_COOKIE contém o cookie incluído no pedido HTTP. As variáveis de ambiente permitem que o script personalize suas operações para o servidor de suporte, o cliente solicitante e os cabeçalhos de pedido. Por exemplo, o script poderia ler o arquivo netdata.txt no diretório raiz /www e transformar seu conteúdo para gerar um arquivo HTML que anuncie o endereço IP do cliente e inclua um texto de saudações em alemãosuíco. Tipo Servidor Variável SERVER_NAME Exemplo www.site.com.br SERVER_SOFTWARE Apache/1.2.6 SERVER_PROTOCOL HTTP/1.0 SERVER_PORT 80 DOCUMENT_ROOT /www Cliente GATEWAY_INTERFACE REMOTE_ADDR CGI/2.0 10.10.10.10 Pedido REMOTE_HOST CONTENT_TYPE user.site.com.br Text/html CONTENT_LENGTH 158 Tipo Variável REQUEST_METHOD Exemplo GET QUERY_STRING name= usuário ACCEPT_LANGUAGE de-CH HTTP_USER_AGENT mozzilla/2.0 A CGI também oferece um meio para um script aceitar entrada de um usuário, através formulários HTML. Nestes formulários sempre vai existir um botão do tipo Submit, que ao ser acionado envia os dados do formulário para o script processá-los (pode ser uma consulta, um pedido de inscrição, solicitação de cadastramento em um banco de dados, etc). Existem dois métodos pelos quais o HTTP envia os dados: o método GET e o método POST. O primeiro envia os dados dentro da URL, como por exemplo: www.site.com.br/script.cgi?nome=usuario e o segundo envia os dados no cabeçalho da mensagem HTTP. O primeiro método tem uma limitação de 255 caracteres, o que já não acontece com o segundo. Ao receber o pedido, o servidor chama o script correspondente para executá-lo e passo os argumentos do usuário por meio de uma variável de ambiente adicional (QUERY_STRING para formulários baseados em GET) ou através de uma entrada padrão para formulários baseados em POST. Tanto em relação aos scripts como em relação às inclusões no servidor (processamento pelas linguagens embutidas no código HTML), deve ser observado o problema de desempenho do servidor. Sempre que um processo estiver sendo realizado ele está ocupando recursos de memória do computador e se for um processo que exija muito do servidor, este poderá sofrer uma degradação apreciável no seu processamento, podendo causar uma latência observada muito grande. Uma boa maneira de se resolver este problema é colocar os scripts que exijam mais recursos em máquinas separadas do servidor. Ao se falar em respostas dinâmicas, a transmissão de vídeo e som aparece em destaque. Inicialmente a transmissão de vídeo e som pela Internet era muito difícil e não podia ser realizada “on-line” tendo em vista a capacidade de processamento dos computadores da época, além do que as linhas de transmissão eram muito lentas (o valor típico para as linhas era de 16 Kbps). Hoje com a facilidade de processamento e memória para os computadores pessoais e a facilidade da banda larga, a transmissão em tempo real é comum. Para este fim utiliza-se o modo “streaming”. Neste modo os arquivos começam a ser reproduzidos quase que imediatamente, enquanto os dados são enviados, sem ter que esperar pelo download do arquivo inteiro. Para obter eficiência na transmissão, áudio e vídeo são compactados em um padrão (MP3, MPEG, etc). Normalmente é utilizado o UDP como protocolo de transporte, tendo em vista o baixo overhead. O grande problema para este tipo de transmissão é a capacidade de processamento dos servidores e também a rede que deve atender a demanda. Ainda na questão de acesso a páginas dinâmicas, visando a rapidez e a segurança do ambiente criou-se um ambiente de três camadas: na primeira camada estão os servidores web para acesso dos usuários, na segunda camada os servidores de aplicações e na terceira camada os servidores de banco de dados. A primeira camada incorpora uma interface para os usuários entrarem os dados necessários às transações, na segunda camada os dados são processados e na terceira os servidores de banco de dados são acessados para recuperação ou armazenamento. Em termos de segurança, observa-se que os usuários somente têm acesso à primeira camada, isto quer dizer que nenhum agente externo tem acesso direto aos servidores de aplicação ou aos sistemas gerenciadores de banco de dados. A figura abaixo ilustra esta arquitetura: 3.2.4 Arquitetura do servidor Um servidor normalmente lida com vários pedidos de cliente ao mesmo tempo. Esses pedidos precisam compartilhar o acesso ao processador, disco, memória e interface de rede no servidor. Existem duas técnicas para alocação de recursos do sistema entre os pedidos de cliente concorrentes: controle do servidor por evento e controle do servidor por processo. Controle do servidor por evento: é o modo mais simples de se estruturar um servidor, pois neste caso existirá um único processo lidando com um pedido de cada vez. O processo aceita um pedido do cliente, gerando uma resposta e transmite a resposta aos clientes antes de considerar o próximo pedido. Como uma extensão natural do tratamento de um pedido de cada vez, um servidor poderia consistir em um único processo que alterna entre o atendimento a diferentes pedidos. Em vez de lidar com um único pedido em sua totalidade, o processo periodicamente realiza um pequeno trabalho em favor de cada pedido. Essa técnica controlada por evento é mais apropriada quando cada pedido introduz uma pequena quantidade de trabalho confinado. A maioria dos servidores web não utiliza este controle, tendo que em vista que podem acontecer várias situações que podem gerar atrasos nas etapas que envolvem o processo de atendimento aos pedidos dos clientes; Controle do servidor por processo: como uma alternativa à arquitetura controlada por evento, o servidor poderia dedicar um processo separado a cada pedido. Nessa técnica, cada processo realiza todas as etapas envolvidas no tratamento de um único pedido. A execução de vários processos permite que o servidor atenda a vários pedidos ao mesmo tempo. Um servidor controlado por processo, normalmente tem um processo-mestre que simplesmente escuta novas conexões dos clientes. Para cada nova conexão, o processomestre cria um processo separado para tratar da conexão. Depois de analisar o pedido do cliente e transmitir a resposta, o processo termina. O término de um processo significa que todos os recursos de memória que foram alocados para ele, automaticamente retornam ao sistema operacional. Existe um overhead quando da criação de cada processo novo quando é recebida uma nova conexão e para reduzir este overhead, quando o servidor é inicializado, um conjunto de processos é criado. Quando uma nova conexão chega, o processo-mestre identifica um processo inativo e atribui a ele o atendimento deste novo pedido. Além de reduzir o overhead, a latência também é reduzida. 3.2.5 Estudo de caso do servidor Apache Para ilustrar a operação de um servidor web, será apresentado o servidor web Apache, que é uma distribuição gratuita e roda sob vários sistemas operacionais. O objetivo aqui é explicar em alto nível como o servidor operar e ilustrar que tipos de opções de configurações estão disponíveis para um administrador. 1.Gerenciamento de recurso: o servidor Apache segue o modelo controlado por processo, com um processo-pai que atribui um processo-filho para cada nova conexão. Em vez de criar um novo processo-filho para cada nova conexão, o processo-pai bifurca previamente vários processos quando o servidor inicia. O número de processos-filhos adicionais (StartServers) é um dos vários parâmetros configuráveis que se relacionam a processos-filho. O servidor equilibra o número de processos. Existe um número máximo de processos simultâneos (MaxClients) que são configuráveis quando o servidor é compilado. Diretiva StartServers MaxClients MinSpareServers MaxSpareServers MaxRequestPerChild ListenBackLog MaxKeepAliveRequests KeepAliveTimeout Definição (valor default no Apache 1.3.3) Número inicial de processos filho (5) Número máximo de processos filho (256) Número mínimo de destino de filhos ociosos (5) Número máximo de destino de filhos ociosos (10) Número máximo de pedidos por filho (30) Número máximo de conexões pendentes (511) Número máximo de pedidos por conexão (100) Tempo ocioso máximo para a conexão (15 seg) O servidor impõe um limite sobre o número mínimo e máximo de processos ociosos (MinSpareServers e MaxSpareServers). A cada poucos segundos, o processo pai determina quantos processos-filho estão ociosos. Depois o pai cria ou termina os processos-filho, dependendo se o número ser muito baixo ou muito alto. O encerramento de processos ociosos retorna os recursos ao sistema operacional para serem usados por processos ativos e reduz o overhead. Certas configurações são default para cada um dos parâmetros configuráveis. No entanto, as definições de parâmetros apropriadas dependem da mistura de pedidos do cliente. Por exemplo, um servidor que recebe um grande número de pedidos de clientes com pouca largura de banda, deve ter um número relativamente grande de processos ativos, por dois motivos: primeiro as limitações de largura de banda dos clientes exigem que o servidor transmita em uma velocidade baixa, exigindo um tempo de atendimento maior para cada pedido; segundo o servidor precisa ter um número relativamente grande de transferências simultâneas para fazer uso eficaz de seu link. O processamento do pedido HTTP tem cinco etapas fundamentais: 1.converter o URL solicitado em um nome de arquivo: o servidor associa o URL a um nome de arquivo em particular, se houver. Este pode ser um processo um tanto complicado, que depende da configuração do servidor. De uma forma geral esta tradução pode ser vista como um mapeamento para uma posição física da página dentro do servidor. Por exemplo, quando se acesso um site (www.site.com.br) e uma página é aberta, significa que o servidor foi configurado para um arquivo padrão (normalmente index.htm ou index.html) situada no diretório raiz do servidor (também especificado na configuração). Este arquivo corresponde à página inicial do site. Alguns sites permite que usuários tenham suas próprias páginas e normalmente estas páginas vêm precedidas do caracter "~", portanto um URL como www.site.com.br/~nome_usuário pode estar mapeado para /usuários/nome_usuário/arquivos; 2.determinando se o pedido está autorizado: o servidor pode ser configurado para prover um controle de acesso, ou seja, pedidos vindo de determinados endereços ou de certos nomes de hosts podem ser rejeitados ou ainda o usuário pode ter que entrar com alguma senha para ter acesso ao registro. A configuração <Directory /dir/html> AuthType Basic AuthName specialuser AutUserFile /user/cadastro require valid-user </Directory> vai permitir que só os usuários cadastrados em /user/cadastro acessem o diretório /dir/html. A configuração <Directory /dir/cgi-bin> order deny, allow deny from all allow from 10.10.10.1 </Directory> somente aceita pedidos para recursos em /dir/cgi-bin a partir do host 10.10.10.1. 3.identificar e chamar um manipulador para gerar uma resposta: o Apache possui uma série de manipuladores que realiza uma ação usando o arquivo solicitado, conforme resumido na Tabela abaixo. O manipulador normalmente é atribuído com base na extensão do nome de arquivo ou no local, conforme ditado pela configuração do servidor. Manipulador default-handler send-as-is cgi-script server-parsed imap-file type-map server-info server-status Finalidade (extensão do arquivo) Enviar o arquivo como conteúdo estático Enviar o arquivo como uma mensagem de resposta HTTP (.asis) Invocar o arquivo como um script cgi (.cgi) Tratar o arquivo como uma inclusão no servidor (.shtml) Tratar o arquivo como um arquivo de regra Imagemap (.imap) Tratar o arquivo como um mapa para a negociação de conteúdo (.var) Apanhar as informações de configuração do servidor Apanhar o relatório de status do servidor 4.transmitir a resposta ao cliente 5.registrar o pedido em um log. 4.Servidor de DNS O serviço de nomes na web é um fator fundamental para que o cliente tenha acesso aos recursos na rede. Quando o usuário digita um URL no browser, o primeiro passo é traduzir este endereço em texto para o endereço IP do servidor ao qual se deseja ter acesso. Esta "tradução" é feita pelo servidor de DNS (Domain Name System). É fundamental que a implementação do protocolo na máquina do cliente tenha o endereço de, pelo menos, um servidor de DNS sendo que normalmente serão dois os servidores apontados (um primário e um secundário). 4.1 Conceito de Domain Name System O DNS é estruturado como um banco de dados distribuído, alojado em vários servidores ao longo de toda a rede. Do ponto de vista do usuário, os domínios de nomes são usados como argumentos pelos "resolvers" que é o agente local capaz de emitir consultas para os servidores de DNS e recuperar as informações passando-as ao cliente. Os servidores de nomes manipulam dois tipos de dados: o primeiro tipo de dados está armazenado em conjuntos denominados "zonas"; sendo que uma "zona" é um banco de dados completo de uma parte do domínio. Neste caso o servidor é dito ter autoridade sobre a zona sendo que o servidor checa periodicamente para ter certeza de que os dados da zona estão atualizados e se não estiver, obtém uma cópia atualizada de outro servidor de nomes. O segundo tipo de dados é a partir do seu próprio cache. Este cache eventualmente é descartado por um mecanismo de timeout. Zona e domínios normalmente são confundidos, porém são algo diferente. Uma zona é uma parte de um domínio de nomes, porém quando só existe uma zona dentro de um domínio, a referência geral é para o domínio. 4.2 Arquitetura do DNS A arquitetura do DNS reflete a hierarquia dos nomes de host e endereços IP. O DNS possui um espaço de nome hierárquico, com uma raiz sem nome, como mostra a figura abaixo. A primeira camada contém os domínios de alto nível e os domínios de país com dois caracteres variando desde Ascension Island (.ac) até Zimbabwe (.zw). Um domínio .arpa separado trata do mapeamento inverso (de endereço IP para o nome) e será visto com mais detalhes mais adiante. Root / .com .edu .org .mil .ac .br .fr. .uk .pt . .com .edu .mil .gov ... .uss .faa www ftp email 4.2 Interpretação do URL O URL identifica um recurso que se quer ter acesso e é composta no seu total pelo protocolo a ser utilizado, o nome do servidor e os domínios e sub-domínios onde está localizado o servidor. Desta forma o URL http://www.site.com.br pode ser analisado como: .br: indicativo do país ; .com: indica que dentro do país o domínio pretendido é comercial; .site: nome do domínio onde se encontra o servidor de origem; www: nome do servidor. De posse destes dados o servidor de DNS ao qual o cliente está consultando, faz a sua busca e retorna o endereço IP do servidor de origem pretendido. Caso este existe e esteja ativo é retornado o seu endereço, caso não exista é retornada uma mensagem de erro. 4.3 Tipos de consultas Os servidores de DNS utilizam dois tipos de consultas para resolver os nomes: a consulta iterativa e a recursiva. Consulta iterativa: é utilizada de servidor para servidor. Tome-se como exemplo o endereço www.uss.edu.br. Um computador na Internet que deseje acessar o servidor www no domínio uss, que está no domínio edu que é um sub-domínio do domínio br, envia sua consulta para o seu servidor de DNS. Este não tendo o endereço desejado, faz uma consulta ao servidor de DNS responsável pelo domínio br solicitando o servidor de DNS do domínio edu. De posse deste endereço, consulta ao servidor responsável pelo domínio edu quem é o servidor de DNS do domínio uss, novamente de posse do servidor de DNS do domínio uss, consulta o endereço do servidor www. Caso o servidor www exista no domínio uss, é retornado este endereço e o servidor de DNS ao qual está ligado o usuário retorna o endereço IP do servidor e daí é iniciada a sessão entre os dois hosts; Consulta recursiva: esta consulta é a realizada entre o host e o servidor de DNS ao qual está ligado e só pode retornar uma das duas respostas: ou o endereço solicitado ou uma mensagem de erro. A figura abaixo ilustra os dois tipos de consultas: 4.4 Otimização de desempenho do DNS As consultas aos servidores de primeiro nível podem causar um colapso nestes servidores ou mesmo no link. Para resolver este problema são utilizados dois recursos: um é a replicação do servidor de primeiro nível em outros servidores e outro é o cache. A replicação consiste na execução de cópias em outros servidores e o caching é o armazenamento temporário das consultas feitas, partindo do princípio que esta consulta pode ser repetida várias vezes. Desta forma, antes de consultar o servidor mais acima, o servidor contatado pelo usuário consulta o seu cache e se tiver a resposta para a consulta a entrega de imediato. 4.5 Tipos de servidores DNS Os servidores DNS podem ser englobados em três tipos: os servidores primários, os servidores secundários e os masters. Os servidores primários são os servidores que tem a cópia original do arquivo do domínio (ou da zona) e qualquer alteração no arquivo é feita no arquivo do servidor primário. O servidor secundário pega a cópia dos arquivos de um servidor primário. Este cópia é somente read-only e não é permitido alterar a cópia no servidor secundário. Quando um arquivo de uma zona é copiado para outro servidor, diz-se que houve uma transferência de zona. Várias são as razões para se ter um servidor secundário: uma delas é a segurança de que o domínio não ficará sem servidor caso o primário torne-se indisponível e outra razão são os links lentos pelos quais a consulta terá de atravessar. Com um servidor secundário em local remoto do site, as consultas dos computadores deste local remoto não precisarão atravessar o link, resultando em respostas mais rápidas. O servidor master é o servidor do qual o servidor secundário recebe a transferência de zonas. O endereço do servidor master é configurado no servidor secundário e pode ser um servidor primário ou mesmo outro servidor secundário. Tanto os servidores primários como os secundários podem ser considerados autoridades sobre suas zonas porque tanto um como outro podem responder às solicitações a respeito de suas zonas. Pode acontecer também de um servidor de DNS não ter nenhum arquivo de zona e neste caso é conhecido como um servidor de cache. A única responsabilidade do servidor de cache é fazer as consultas, retornar os resultados e armazenar os resultados obtidos. Esta é uma boa solução para links mais lentos. 4.6 Resources Records Todos os resources records do DNS tem um formato similar. O primeiro campo em qualquer registro DNS é sempre um endereço IP ou um hostname. Observar que todos os nomes e endereços terminam com um ponto (.). Isto significa que os endereços são absolutos e não relativos. Endereços absolutos também são chamados de fully qualified domain names e são relativos à raiz, enquanto endereços relativos o são em relação ao domínio default, que pode ou não ser o raiz. Este campo pode, opcionalmente, ser seguido por um TTL (Time To Live), o qual indica durante quanto tempo a informação do campo deve ser considerada válida. O segundo campo indica o tipo de endereço. Nos bancos de dados atuais, a string "IN" é a mais comum e indica um endereço Internet. Este campo está presente por motivos históricos e compatibilidade com sistemas antigos. O terceiro campo é uma string que indica o tipo de resource Record. Este campo é seguido por valores opcionais que são específicos para o RR. Start of Authority (SOA): este registro armazena o nome do DNS e o nome do responsável por ele. Um exemplo de um SOA: ; Start of Authority (SOA) record dns.com. IN dns1.dns.com. owner.dns.com. ( 16200201 ; serial number 10800 ; refresh (3 horas) 3600; retry (1 hora) 604800 ; expire (1 week) 86400) ; TTL (1 dia) serial number: indica o número de série do arquivo. É um número seqüencial e normalmente representado pelo dia e ano mais um número que indica a seqüência . É incrementado a cada vez que o arquivo é alterado; refresh: diz aos secundários o espaço de tempo no qual o servidor deve ser consultado para checar quanto a atualização do arquivo; retry: determina o intervalo de tempo no qual o servidor DNS secundário tentará entrar em contato com o primário, caso não tenha conseguido da no primeiro intervalo definido em refresh; expire: tempo a partir do qual o servidor secundário para de consultar o primário para novas atualizações, caso não tenha conseguido nas tentativas anteriores TTL: este valor é retornado com todas as respostas às consultas ao banco de dados e diz ao solicitante quanto tempo a informação pode ser mantida com segurança em cache (no caso 86400 segundos = um dia). Este valor é o valor default para todos os registros no arquivo e pode ser atualizado por um valor de TTL provido por outro RR. O arquivo de DNS para uma determinada zona, ainda inclui outros RR que definem os endereços e determinados tipos especiais de servidores. São eles: Address Resources Records: o registro A contém o endereço IP a ser associado com hostame; Name Server (NS) Resource Records: o registro NS contém o endereço do servidor de nomes para o domínio; Mail Exchanger Server (MX): o registro MX contém o endereço do servidor de e-mail. Exemplo de um arquivo de DNS: ; Start of Authority (SOA) record @ IN SOA ns.site.com.br owner.site.com.br ( 16200201 ; serial number 10800 ; refresh (3 horas) 3600; retry (1 hora) 604800 ; expire (1 week) 86400) ; TTL (1 dia) NS MX ns.site.com.br. ; nome do servidor DNS 10 mail.site.com.br. ; servidor de e-mail ns mail www ftp A A A A 192.168.122.1 192.168.122.2 192.168.122.3 192.168.122.4 Com este arquivo as consultas podem ser feitas de nome para endereços IP. Porém existem casos nos quais é necessário que o DNS converta os nomes para endereços IP e para isto existe o arquivo de zona reversa. Este arquivo é utilizado por exemplo, por servidores de IRC que necessitam saber se a máquina em questão pode ou não conversar e em caso positivo qual a prioridade que deve ser dada. Para o acesso completo, deve existir uma zona reversa. O nome desta zona tem o particular de ser, obrigatoriamente, endereço IP da rede, de maneira inversa, seguida de .in-addr.arpa. Desta forma o nome de arquivo de zona reversa para uma rede com endereço 192.168.122.0 será: "122.168.192.in-addr.arpa" ; Start of Authority (SOA) record @ IN SOA ns.site.com.br owner.site.com.br ( 16200201 ; serial number 10800 ; refresh (3 horas) 3600; retry (1 hora) 604800 ; expire (1 week) 86400) ; TTL (1 dia) 1 2 3 4 NS ns.site.com.br. PTR PTR PTR PTR ns.site.com.br. mail.site.com.br. www.site.com.br. ftp.site.com.br