Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Desconstruindo a web-casado código, Manuais, Projetos, Pesquisas de Interface entre Ciência da Computação e Economia

Aborda de forma simples como a web funciona

Tipologia: Manuais, Projetos, Pesquisas

2019
Em oferta
30 Pontos
Discount

Oferta por tempo limitado


Compartilhado em 31/10/2019

magosulo15
magosulo15 🇧🇷

5

(2)

1 documento

1 / 250

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
78333
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64
Discount

Em oferta

Pré-visualização parcial do texto

Baixe Desconstruindo a web-casado código e outras Manuais, Projetos, Pesquisas em PDF para Interface entre Ciência da Computação e Economia, somente na Docsity!

78333

Tudo começou com um estudo despretensioso sobre como uma requisição para um site funciona. A ideia era mostrar o máximo possível do que acontecia em uma requisição web, durante uma palestra de 50 minutos. Depois de 40 horas de estudo e dedicação, os slides da apresentação estavam prontos, mas havia muito mais detalhes nesse conteúdo do que era possível demonstrar naquela mídia e com aquele tempo.

Durante a construção do material, foi possível perceber que há vários estudos isolados e documentos de arquitetura que mostram separadamente cada uma das peças de uma requisição web. É possível encontrar material sobre como as redes funcionam para entregar o conteúdo de um ponto ao outro, como os protocolos trabalham para encapsular os dados, como é a arquitetura de um framework de desenvolvimento web, como o servidor de aplicação se integra com o framework etc. Apesar disso, não há nada que mostre, do começo ao fim, o que acontece desde o momento em que o usuário aperta a tecla Enter do teclado até a página estar completamente carregada na tela.

PREFÁCIO

Este livro vem cobrir esse espaço, trazendo um estudo unificado e focado no entendimento de como a internet funciona, utilizando uma requisição de uma página HTML como exemplo. Durante este estudo, vamos passar por diversas áreas de conhecimento distintas. Passaremos pela criação visual da interface no navegador, pela montagem dos pacotes dentro do kernel do sistema operacional, pelos dispositivos de rede da internet, e até mesmo pela integração do código da aplicação com o servidor web.

Para quem é

Desenvolvedores de aplicações para a internet, programadores curiosos com a web, administradores de sistema, engenheiros de rede, ou qualquer outra pessoa que crie conteúdo para a internet e esteja disposta a ir fundo na tecnologia para entender o exato papel do seu trabalho no todo.

O estudo assume um conhecimento básico de como funciona o ambiente de desenvolvimento para a internet. Esse conhecimento básico significa saber que um desenvolvedor programou o site, possivelmente usou algum framework, colocou em um servidor de alguma empresa de hospedagem que possui Apache ou NGINX, e registrou o domínio para que seja fácil de acessar via internet.

Apesar de o livro explicar muitos dos termos, ele assume que quem está lendo já sabe o que significa sistema operacional, processo e thread, por exemplo. Esses e mais alguns outros termos básicos não serão detalhados para deixar a explicação mais direta, mas uma busca rápida na internet resolve o problema para continuar o entendimento. Familiaridade com alguma linguagem de programação também será útil em alguns pontos do estudo, em que vamos mais a fundo no desenvolvimento do software estudado.

Aqui há informações úteis tanto para quem é menos experiente na área de internet como para quem já trabalha com isso há algum tempo. Um especialista em desenvolvimento de aplicações, por exemplo, encontrará algumas informações redundantes para a sua área de conhecimento. Apesar disso, ele conhecerá mais sobre todas as tecnologias que envolvem a entrega de conteúdo para o usuário.

O conteúdo deste livro foi pensado para que os especialistas possam passar rapidamente pelo conteúdo de sua especialidade, focando em todos os outros componentes da infraestrutura da requisição.

Estrutura

escolha de estudo, podemos olhar o código-fonte e os documentos de design que explicam por que determinadas implementações foram feitas.

É comum a sua tecnologia preferida não estar listada como parte do estudo, pois há uma vasta lista de possibilidades para cada parte de uma requisição web. Apesar disso, a tecnologia que vamos estudar desempenhará um papel parecido para cumprir o que é necessário para entregar o conteúdo, proporcionando o conhecimento que estamos buscando.

A aplicação que o usuário vai acessar é o site deste livro. Essa aplicação tem código aberto, assim como grande parte dos softwares utilizados nesse estudo. Essa aplicação foi criada utilizando o framework Ruby on Rails e possui pouco código, para facilitar o estudo. Ela está sendo executada em um servidor externo, e é disponibilizada via NGINX e Phusion Passenger para a internet.

Vamos assumir que o usuário está utilizando um sistema GNU/Linux, que tem código aberto e podemos ver tudo o que precisarmos. Por ser um sistema operacional livre e utilizar muitos softwares de código aberto, poderemos ver onde cada um deles interage com o sistema operacional para conseguir o que precisam.

Não se preocupe se você conhece pouca coisa dessa sopa de letrinhas em forma de nomes de tecnologias, vamos entrar em mais detalhes durante o estudo. Lembre-se de que o propósito é entender como a internet funciona independente da tecnologia usada, explorando os conceitos que guiam cada uma delas para prover o que temos hoje. Sempre que possível haverá exemplos de uso de tecnologias diferentes das que foram descritas, a fim de fazer comparações e ajudar no entendimento, ou até mesmo para satisfazer a curiosidade.

Profundidade

Como dito no início deste prefácio, há muitos estudos sobre cada uma das várias áreas que uma requisição web passa. Alguns deles são livros com mais que o dobro de páginas deste, abordando cada detalhe dos protocolos de uma rede, por exemplo. O foco deste livro não é detalhar ao máximo cada uma das etapas, mas mostrar tudo o que é necessário para entender mais a fundo como uma requisição web funciona.

Fica fora do escopo estudar como é a sequência de bits utilizados para criar o cabeçalho de um protocolo, como o teclado trata uma tecla sendo apertada, como o kernel recebe a interrupção de I/O do teclado, como a GPU calcula os frames de vídeo e coisas do gênero. Todos esses assuntos têm alguma ligação com uma requisição web e são utilizados para alguma coisa útil desse contexto, mas nesse estudo eles não têm um papel determinante para o entendimento do todo.

Este livro segue uma linha pragmática de estudo, sem chegar aos níveis mais básicos de hardware e sistema operacional, mas chegando o mais próximo possível para mostrar por onde os dados passam. A ideia é prover informação suficiente para que seja possível entender o todo. Com isso, prover uma forma de avaliar onde uma melhoria de performance poderia ser encaixada, ou onde um determinado problema pode estar.

Referências externas

Por ser um estudo geral que envolve muitas áreas de conhecimento, todos os capítulos deste livro possuem referências externas que dão apoio ao conteúdo estudado. As referências apresentadas não são de leitura obrigatória, sendo que sua explicação básica será feita junto com o conteúdo do livro, deixando-as apenas como uma extensão. Em alguns casos, elas são deixadas apenas para os mais curiosos e corajosos que podem estar

AGRADECIMENTOS

Primeiramente, agradeço à minha esposa Jacqueline Molinari por tudo, principalmente pelo apoio durante as centenas de horas e dezenas de fins de semana em que eu estava fechado no escritório escrevendo este livro. Sem o apoio dela, ele não existiria.

Aos meus amigos, Daniel Sousa , Renan Ranelli , Mateus Linhares e Vinicius Baggio , por conseguir tempo para revisar e contribuir sugerindo alterações e inclusões de conteúdo para o livro. Muito obrigado!

Agradeço também à minha família, Wilson , Evanilda e Lilian Molinari , por me darem o alicerce para formar meu caráter e alcançar minhas conquistas. Se cheguei aonde estou, devo isso a eles.

E a todos os gigantes que estão nas referências, cujos ombros me serviram de apoio para ver mais longe.

Willian Molinari, mais conhecido como PotHix , é formado em Sistemas de informação pela Fundação Santo André e trabalha com desenvolvimento de software há mais de 10 anos. Durante sua carreira, passou por diversas linguagens de programação, desde ASP no começo da carreira até Python, Ruby e Golang atualmente. Além de trabalhos freelancer para fora do país, ele passou desde pequenas empresas e startups com cerca de 5 funcionários, até grandes empresas com mais de 1.200.

Por gostar de jogos, ele resolveu investir parte do seu tempo livre para desenvolvê-los, só pela diversão. Ficou em segundo lugar em um concurso de desenvolvimento de jogos do Itaú Cultural em 2009 e participou de alguns outros GameJams. Desde que começou a investir o tempo livre nesse hobby, foram feitos 4 pequenos jogos, sendo que 3 deles utilizam JavaScript e recursos do HTML5. O jogo que exigiu mais dedicação e trouxe mais desafios foi o Skeleton Jigsaw (http://plaev.github.io/skeleton-jigsaw).

Foi revisor técnico de dois livros. O primeiro é o Ruby on Rails: Coloque sua aplicação web nos trilhos, escrito por Vinícius Baggio Fuentes e publicado pela Casa do Código. O segundo é o HTML Game Development Hotshot, escrito por Makzan e publicado pela Packt Publishing.

Costuma participar de vários eventos de tecnologia e é um dos fundadores do grupo de usuários Ruby de São Paulo, mais conhecido como Guru-SP (https://gurusp.org/). Ele estava no primeiro encontro do grupo feito em 2008, e vem ajudando na organização desde então.

É palestrante e já passou por mais de 7 estados brasileiros

SOBRE O AUTOR

3 5 7 8 11 14 15 16

18 18 20 21 24 26 29 29

31 31

Sumário

1 E no começo, havia o navegador

1.1 O navegador de estudo 1.2 Entendendo o conteúdo da barra de endereços 1.3 Escolhendo o protocolo 1.4 O caminho até a rede 1.5 O cache da URL 1.6 O navegador e a resolução de nomes 1.7 Resumo 1.8 Referências

2 O sistema operacional e a resolução de nomes

2.1 Definindo o sistema operacional 2.2 A glibc e as chamadas de sistema 2.3 A função que resolve nomes 2.4 O protocolo IP e suas versões 2.5 Happy eyeballs 2.6 Resumo 2.7 Referências

3 Resolução de nomes na rede

3.1 O modelo Ozzy

Casa do Código Sumário

34 37 39 43 47 49

50 50 55 57 64 67 69 70

72 72 75 77 97 99 100 101

104 105 109 111 114 124

3.2 O protocolo DNS 3.3 DNS e o UDP/IP 3.4 Os sockets 3.5 O que o DNS faz para obter o que precisa 3.6 Resumo 3.7 Referências

4 Transferindo hypertexto

4.1 O básico do HTTP 4.2 O HTTP e o TCP 4.3 O three-way handshake do TCP 4.4 A requisição HTTP do navegador 4.5 O HTTP/ 4.6 Resumo 4.7 Referências

5 HTTPS e sua segurança

5.1 O HTTPS 5.2 O que é o TLS 5.3 O handshake do TLS 5.4 Testando uma conexão HTTPS manualmente 5.5 O que fica seguro? 5.6 Resumo 5.7 Referências

6 Para a internet e além!

6.1 Ethernet ou Wi-Fi 6.2 Saindo do sistema operacional 6.3 O caminho para o roteador 6.4 A segurança do Wi-Fi 6.5 Saindo para a internet

Sumário Casa do Código

228

231 232 233 233

9.11 Referências

10 Além dessa requisição web

10.1 Outras tecnologias 10.2 Discussão e aprendizado 10.3 Considerações finais

Versão: 19.9.

Sumário Casa do Código

CAPÍTULO 1

Aqui começamos nossa jornada! Como bom aventureiro em terras desconhecidas, é importante ter um mapa. Como não conseguiria representar todos os leitores com um único desenho, vamos utilizar a aparência do programador que seja mais fácil de encontrar. Além disso, esse é um desenho que o autor está acostumado a fazer de uma forma não tão ruim.

Figura 1.1: O início da jornada

Por enquanto, não temos informações sobre nenhum passo, mas vamos conhecendo cada um deles ao longo da jornada.

Neste capítulo passaremos por todo o trabalho que o navegador precisa fazer para entender o que o usuário realmente quer, antes de passar para o sistema operacional. Algumas coisas sobre a comunicação de rede serão mencionadas de forma superficial para que possamos entender o trabalho do navegador, mas focaremos nelas mais à frente.

E NO COMEÇO, HAVIA O

NAVEGADOR

1 E NO COMEÇO, HAVIA O NAVEGADOR 1

A seção de performance de navegação do W3C[1]^ nos dá uma boa ideia desse fluxo dentro do navegador.

Figura 1.3: Fluxos de uma requisição no navegador. Baseado na imagem disponível em https://www.w3.org/TR/navigation-timing

Ele passa pelos seguintes estados: espera pela URL, possível redirecionamento, possível cache, DNS, TCP, requisição, resposta, processamento e página carregada. No primeiro e segundo capítulo, vamos seguir até o momento da requisição e voltaremos a falar sobre a resposta próximo ao fim da nossa jornada.

Neste primeiro capítulo, estudaremos como o navegador faz para chegar até a resolução de DNS, passando por todas as etapas que mencionamos no parágrafo anterior.

Em nossa jornada, vamos escolher a tecnologia que será usada para cada um dos passos. Com isso, será possível entrar nos detalhes de implementação e tirar a magia do processo.

1.1 O NAVEGADOR DE ESTUDO

1.1 O NAVEGADOR DE ESTUDO 3

Na data de escrita deste livro, o navegador mais utilizado é

Google Chrome[2], representando mais de 57% do uso de navegadores no mundo. Esse valor é mais do que o dobro da utilização do Firefox, que está em segundo lugar.

Figura 1.4: Gráfico de utilização dos navegadores no StatCounter, disponível em http://gs.statcounter.com/#browser-ww-monthly-201311-

Por esse motivo, usaremos o Chromium[3]^ como nosso navegador de estudo.

Figura 1.5: Chromium e o início da jornada

A principal diferença entre o Chromium e o Google Chrome é que o primeiro tem código aberto — conhecido como open source, em inglês — e não adiciona plugins pagos por padrão. O Google

4 1.1 O NAVEGADOR DE ESTUDO