Texto Didático 4
Quais os eventos que acontecem quando se acessa um site através de um navegador web, desde o momento em que o usuário preenche a barra de endereços do navegador web até a carga e exibição do site solicitado?
Ao inicializar o computador, durante a carga das configurações de rede TCP/IP, um endereço IP deve ser atribuído ao host. Ele pode ser obtido de três diferentes formas: i. Estático: configurado pelo administrador do host;
ii. Dinâmico: Via protocolo de aquisição de configurações TCP/IP, como o DHCP;
iii. Automático: via APIPA (Automatic Private IP Addressing). Caso a obtenção do endereço IP, via protocolo de aquisição, falhe, e o sistema operacional do host suporte o APIPA e o mesmo esteja ativado, será configurado um endereço IP na faixa: 169.254.0.1 a 169.254.255.254.
Obtido o endereço IP do host, e sendo intrínseco à placa de interface de rede(NIC – Network Interface Card) a existência de um endereço físico, o endereço MAC, para acessar um outro nó TCP/IP, devese obter o endereço MAC de destino e o endereço IP do destino. Assim que o usuário realiza o evento para a busca da página web, por exemplo www.google.com.br, o navegador terá que traduzir a URL que compõe o nome do website de destino no endereço IP de destino. Primeiramente, é verificado o arquivo local de mapeamento de nomes em IPs. Por exemplo, no Linux 2.6, /etc/hosts, e no Windows XP, c:\windows\system32\drivers\etc\hosts. Caso não haja uma correspondência no arquivo estático de mapeamento, é enviada uma solicitação DNS, equivalente à exibida abaixo(a captura da soliticação foi realizada através do Analisador de Tráfego Wireshark): No. Time Source Destination Protocol Info 22 2.100799 172.17.118.127 172.17.33.26 DNS Standard query AAAA www.google.com.br Frame 22 (77 bytes on wire, 77 bytes captured) Ethernet II, Src: 00:a0:d1:63:7f:4a (00:a0:d1:63:7f:4a), Dst: 00:15:c5:5f:a2:d2 (00:15:c5:5f:a2:d2) Internet Protocol, Src: 172.17.118.127 (172.17.118.127), Dst: 172.17.33.26 (172.17.33.26) User Datagram Protocol, Src Port: 33170 (33170), Dst Port: 53 (53) Domain Name System (query) [Response In: 25] Transaction ID: 0x7f9c Flags: 0x0100 (Standard query) Questions: 1 Answer RRs: 0 Authority RRs: 0 Additional RRs: 0 Queries
www.google.com.br: type AAAA, class IN Name: www.google.com.br
Type: AAAA (IPv6 address) Class: IN (0x0001)
Esta solicitação é enviada para o endereço IP do servidor DNS configurado no host. Neste caso, o endereço IP do servidor DNS é 172.17.33.26, conforme pode ser observado pela Figura 1 abaixo:
A resposta a solicitação DNS pode ser observada a seguir:
No. Time Source Destination Protocol Info 28 2.673195 172.17.33.26 172.17.118.127 DNS Standard query response CNAME www.google.com CNAME www.l.google.com A 64.233.169.103 A 64.233.169.147 A 64.233.169.99 A 64.233.169.104 Frame 28 (189 bytes on wire, 189 bytes captured) Ethernet II, Src: 00:15:c5:5f:a2:d2 (00:15:c5:5f:a2:d2), Dst: 00:a0:d1:63:7f:4a (00:a0:d1:63:7f:4a) Internet Protocol, Src: 172.17.33.26 (172.17.33.26), Dst: 172.17.118.127 (172.17.118.127) User Datagram Protocol, Src Port: 53 (53), Dst Port: 33170 (33170) Domain Name System (response) [Request In: 26] [Time: 0.344429000 seconds] Transaction ID: 0x4b72 Flags: 0x8180 (Standard query response, No error) Questions: 1 Answer RRs: 6 Authority RRs: 0 Additional RRs: 0 Queries www.google.com.br: type A, class IN Name: www.google.com.br Type: A (Host address) Figura 1: Endereço IP do Servidor DNS
Class: IN (0x0001) Answers www.google.com.br: type CNAME, class IN, cname www.google.com www.google.com: type CNAME, class IN, cname www.l.google.com www.l.google.com: type A, class IN, addr 64.233.169.103 A linha destacada exibe o endereço IP para a URL www.google.com.br. Uma vez obtido o endereço IP de destino, resta apenas descobrir o endereço MAC de destino. O protocolo ARP (Address Resolution Protocol) é utilizado com esse objetivo. Uma vez de posse do endereço IP de destino, uma solicitação ARP é enviada, em broadcast de camada 2 (ff:ff:ff:ff:ff:ff). A máquina que contiver o endereço IP enviado na mensagem ARP irá responder à solicitação. A resposta contém o endereço MAC do destino a ser alcançado. Há ocasiões nas quais são utilizados dispositivos ProxyARP. Esses dispositivos enviam seu próprio endereço MAC, uma vez que não é possível encaminhar uma solicitação em
broadcast através dos mesmos. Um exemplo são roteadores.
De posse dos 4 endereços necessários ao encaminhamento da solicitação do navegador web, procedese ao estabelecimento de uma conexão TCP. Esse processo é chamado de threeway handshake. Observe a Figura 2 abaixo. Tratase do cabeçalho do protocolo TCP, responsável pelo estabelecimento da conexão fimafim. i. O cliente envia um segmento SYN, definindo o número da porta do servidor remoto ao qual ele deseja se conectar (nesse caso, 80) e o Initial Sequence Number(ISN) (Número de seqüência inicial, ou seja, o primeiro valor presente no campo Sequence Number da Figura 2), que, neste caso, é igual a 0 (zero), conforme mostrado abaixo: Figura 2: Cabeçalho TCP
Frame 11 Transmission Control Protocol, Src Port: 58173 (58173), Dst Port: http (80), Seq: 0, Len: 0 Source port: 58173 (58173) Destination port: http (80) Sequence number: 0 (relative sequence number) Header length: 40 bytes Flags: 0x0002 (SYN) Window size: 23232 (scaled) Checksum: 0x5185 [correct] Options: (20 bytes) ii. O servidor responde com seu próprio segmento SYN, contendo o ISN do servidor. Ele também confirma o SYN enviado pelo cliente, ativando a flag ACK, e preenchendo o campo ACKNOWLEDGMENT com o valor do campo de sincronização anterior, acrescido de 1: Frame 12 Transmission Control Protocol, Src Port: http (80), Dst Port: 58173 (58173), Seq: 0, Ack: 1, Len: 0 Source port: http (80) Destination port: 58173 (58173) Sequence number: 0 (relative sequence number) Acknowledgement number: 1 (relative ack number) Header length: 40 bytes Flags: 0x0012 (SYN, ACK) Window size: 23168 (scaled) Checksum: 0x1e94 [correct] Options: (20 bytes)
iii. O cliente, então, deve confirmar o SYN proveniente do servidor, através de confirmação, que segue o mesmo procedimento anterior, ou seja, ativa a flag ACK e acresce 1 ao valor do ISN do remetente. Além disso, o cliente já envia o próximo número de seqüência: Frame 13 Transmission Control Protocol, Src Port: 58173 (58173), Dst Port: http (80), Seq: 1, Ack: 1, Len: 0 Source port: 58173 (58173) Destination port: http (80) Sequence number: 1 (relative sequence number) Acknowledgement number: 1 (relative ack number) Header length: 32 bytes Flags: 0x0010 (ACK) Window size: 5808 (scaled) Checksum: 0x5e1c [correct] Options: (12 bytes)
Logo após o estabelecimento da conexão, a solicitação HTTP, realizada pelo navegador web, pode ser enviada ao servidor HTTP de destino, conforme exibido abaixo: No. Time Source Destination Protocol Info 32 2.674204 172.17.118.127 64.233.169.103 HTTP GET / HTTP/1.1 Frame 32 (834 bytes on wire, 834 bytes captured) Ethernet II, Src: 00:a0:d1:63:7f:4a (00:a0:d1:63:7f:4a), Dst: 00:18:8b:74:43:28 (00:18:8b:74:43:28) Internet Protocol, Src: 172.17.118.127 (172.17.118.127), Dst: 64.233.169.103 (64.233.169.103) Transmission Control Protocol, Src Port: 58173 (58173), Dst Port: 80 (80), Seq: 1, Ack: 1, Len: 768 Hypertext Transfer Protocol GET / HTTP/1.1\r\n Host: www.google.com.br\r\n
UserAgent: Mozilla/5.0 (X11; U; Linux i686; ptBR; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4\r\n Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8 ,image/png,*/*;q=0.5\r\n AcceptLanguage: ptbr,pt;q=0.8,enus;q=0.5,en;q=0.3\r\n AcceptEncoding: gzip,deflate\r\n AcceptCharset: ISO88591,utf8;q=0.7,*;q=0.7\r\n KeepAlive: 300\r\n Connection: keepalive\r\n Cookie: PREF=ID=9cafcaa3dddcf149:TM=1173917510:LM=1189533479:S=VjTShCBHuY_78WvZ; SID=DQAAAHYAAADRWa2g2BPOWbp5Lvq5Tj9cc_8XL8_p_oNAV2CQItUDkp7z5CQIWOxcmpAfLipP xBbcEhjQkeSbIz5HSwHQA0e4qs24noAhzz2_NyWsk5gkpljLz9aw89rJT3QVHSDNIP3gNlialWQ1ZV9 \r\n A linha em destaque exibe que a mensagem é do tipo GET, ou seja, está sendo realizada a solicitação da página web presente no host www.google.com.br. CLIENTE SERVIDOR Aplicação Aplicação Transporte Transporte Rede Rede Enlace Enlace Física Física A solicitação migra da camada de aplicação para a camada de transporte, onde as portas de fonte e destino, exibidas na Figura 2, são preenchidas. A porta de fonte é preenchida com qualquer valor maior ou igual a 1024, determinada pelo sistema operacional. A porta de destino é preenchida com o valor correspondente do protocolo, neste caso, porta 80
para o protocolo HTTP. Esses valores de porta são PADRONIZADOS pela IANA (Internet Assigned Number Authority – http://www.iana.org). Este instituto de padronização mantém um arquivo chamado portnumbers(http://www.iana.org/assignments/portnumbers). Esse arquivo institui que a porta do HTTP é a 80.
A solicitação migra para a camada de rede. Os campos IP de fonte e IP de destino (Source Address e Destination Address, exibidos na Figura 4) são preenchidos com os valores previamente obtidos. Além disso, o campo protocol é preenchido com o valor 0x06, identificando que o protocolo utilizado na camada de transporte é o TCP.
A solicitação migra para a camada de enlace. Os campos MAC de fonte e MAC de destino(DST MAC e SRC MAC, exibidos na Figura 3) são preenchidos com os valores previamente obtidos. Além disso, o campo tipo é preenchido com o valor 0x0806, identificando que o protocolo a ser invocado, no destino, pela camada de enlace é o IP.
A solicitação migra para a camada física, onde a mesma é codificada em sinal. Caso o meio seja metálico, o sinal é uma corrente elétrica. Caso o meio seja semfio, o sinal é formado por ondas eletromagnéticas. Caso o meio seja ótico, o sinal é a formado por luz.
Quando está solicitação chega até o servidor www.google.com.br (64.233.169.103), a camada física detecta a chegada deste sinal, decodifica o mesmo, e o envia para a camada de Enlace. Ela verifica se o endereço contido no campo DST MAC (MAC de destino) é igual ao endereço MAC presente na placa de rede do host. Se os valores forem iguais, o campo tipo é consultado para identificar qual o protocolo de camada de rede deve ser chamado. Uma vez que o valor consultado é 0x0806, o protocolo chamado na camada de rede será o IP. Na camada de rede, o campo Destination Address, do cabeçalho IP, é consultado. Se os valores forem iguais, o campo protocol é consultado para que se possa determinar qual o protocolo deve ser chamado na camada transporte. Uma vez que o valor consultado foi 0x06, o protocolo a ser chamado na camada de transporte será o TCP. Caso o valor consultado fosse 0x11, o protocolo invocado na camada de transporte seria o UDP. Na camada de transporte, o campo Destination port é consultado, para que possa tomar conhecimento de qual programa deve ser invocado na camada de aplicação. O valor observado é 80. Alguns programas que estão associados à porta 80 são: Apache(http://www.apache.org), IIS(http://www.iis.net). Os servidores web mais utilizados podem ser observados no site: http://news.netcraft.com/ . Seja qual o servidor web em
execução, a sua função é encontrar, no sistema de arquivo local, o arquivo solicitado pelo cliente. Uma vez encontrado o arquivo, o servidor web (e.g.: Apache), insere esse arquivo em uma mensagem HTTP e passa esta mensagem de volta para a camada de transporte, onde todo o ciclo de encapsulamento realizado no cliente será repetido no servidor.
De volta ao cliente, todo o ciclo de desencapsulamento realizado no servidor, volta a ocorrer no cliente, até que o arquivo enviado pelo servidor www.google.com.br seja interpretado e exibido pelo navegador WEB.
O arquivo enviado pelo servidor é escrito na linguagem HTML – HyperText Markup
Language. Uma das principais funções do navegador web é saber interpretar
corretamente este arquivo, resultando na exibição do mesmo, conforme a Figura 5 abaixo.