Precisando de uma resposta mais técnica para uma pergunta de entrevista sobre como a Internet funciona do começo ao fim [fechado]


13

Eu tive entrevistas com cinco pessoas separadas nas últimas duas semanas e três dessas cinco me fizeram a seguinte pergunta: Explique o que acontece entre acessar o "Google.com" e a página exibida na tela. Basicamente, como a Internet funciona. Acho que, depois de três vezes, é melhor que eu esteja preparado se tiver essa pergunta novamente.

Sei algumas coisas, mas não estou totalmente convencido de que minha resposta seja boa o suficiente. Basicamente, mencionei que o servidor DNS traduz "google.com" em um endereço IP. Eu meio que dou uma olhada no TCP / IP, depois falo sobre o servidor da web literalmente servindo as páginas solicitadas que são enviadas de volta ao navegador que o navegador interpreta e exibe.

Como eu disse antes, não estou convencido de que minha resposta seja técnica o suficiente. Quais são os passos que estou deixando de fora?

Pelo que vale, duas dessas três vezes estiveram na mesma empresa e estou sendo chamado de volta para uma terceira entrevista com eles, então não posso ter bombardeado isso com muita força.


1
Qual é a natureza das posições para as quais você estava entrevistando?
smp7d

3
Se três em cada cinco entrevistadores fizerem essa pergunta, é hora de você fazer alguns estudos / pesquisas e obter uma boa resposta que demonstre que você a entende completamente. Se você está sendo chamado para uma terceira entrevista na mesma empresa e a pergunta é feita novamente, você demonstrará que se importou o suficiente para reforçar seu conhecimento ou não.
Robert Harvey

1
Além disso, tentaria restringir o escopo da pergunta perguntando em qual parte do processo eles estão mais interessados. Eles podem não se importar se você conhece profundamente coisas como as sete camadas do modelo OSI , por exemplo, mas você ainda deve ter um conhecimento de trabalho.
Robert Harvey

1
Por outro lado, talvez a resposta seja muito técnica. Talvez eles estejam procurando ver como você pode relacionar informações com pessoas de uma maneira não técnica?
Matt

1
Se a pergunta for feita para ver se você se comunica bem, talvez seja bom fazer perguntas sobre a pergunta em vez de apenas responder a uma pergunta muito ampla. Você pode dar uma resposta técnica muito detalhada e levar o dia todo para explicá-la. Eu não acho que esse é o objetivo da pergunta.
Matt

Respostas:


29
  1. Seu navegador primeiro faz com que o SO procure no arquivo "hosts" uma entrada que traduza o nome do domínio em um endereço IP. Esse é um recurso herdado da ARPANET, quando era possível que um único arquivo de texto contivesse nomes inteligíveis para todos os computadores acessíveis via ARPANET e para cada computador conectado a ele ter uma cópia relativamente recente. Costumava ter algum valor remanescente em pequenas redes de computadores que não tinham NetBIOS ou protocolos semelhantes de nomeação de nós, mas hoje em dia é mais provável que seja um alvo para hackers (que podem usá-lo para desviar do DNS e apontar o computador para sites) eles controlam) para ter qualquer uso legítimo em um computador cliente ou seu usuário / proprietário.
  2. Supondo que seu computador não tenha uma entrada HOSTS para esse domínio, seu navegador envia uma solicitação UDP para o servidor DNS configurado nas configurações de Internet do sistema operacional para a conexão que está sendo usada, passando o "nome do host" conhecido como nome de domínio da solicitação (tudo entre "http: //" e a primeira barra ou dois pontos após o que vem a seguir; por exemplo, "www.google.com"). Esse servidor DNS normalmente pertence à sua empresa ou ao seu provedor de serviços de Internet local.
    • UDP significa "Universal Datagram Protocol" e é um protocolo de "camada de transporte" da mesma classe que o TCP (acima do protocolo IP de "camada de rede", abaixo dos protocolos de "camada de aplicação", como HTTP, FTP, SMTP etc. ) Enquanto o TCP fornece muitos recursos de verificação de erros e tolerância a falhas (adicionando dados extras e aumentando a sobrecarga), o UDP adota uma abordagem muito mais leve, aumentando a largura de banda de dados líquida; a desvantagem é que o protocolo não suporta recursos disponíveis no TCP, como dividir dados grandes em vários pacotes (para que as mensagens sejam pequenas) ou reenviar pacotes perdidos em trânsito. É bom para mensagens pequenas e simples (como DNS) e para streaming, dados do tipo telemetria, onde não importa se um pacote é perdido.
  3. Esse servidor DNS saberá uma de três coisas: como converter esse nome de domínio diretamente em um endereço IP (o que significa que é o "servidor de nome autoritativo" ou ANS para esse domínio); o endereço IP da ANS ou um dos pais dela; ou seu próprio servidor de nomes pai, com maior probabilidade de saber como alcançar o ANS. Se o servidor não converter a solicitação, ele a encaminhará "inativo" para um ANS conhecido ou "up" para o NS pai, e esse processo se repete recursivamente.
    • A "raiz" dessa estrutura em árvore é um único servidor que não faz nada além de encaminhar as solicitações que recebe para um dos vários servidores de "domínio de nível superior" ou TLD. Por exemplo, existe um servidor de nomes ".com", que sabe como encontrar o endereço IP de qualquer domínio ".com" do planeta (encaminhando essas solicitações para servidores de nomes no nível do ISP). Esses TLDs encaminham solicitações para servidores de nomes de domínio que não são conhecidos por nenhum DNS em uma "ramificação" específica da Internet pertencente a um ISP.
  4. Depois que o servidor de nomes autorizado for encontrado e tiver convertido o nome de domínio em um endereço IP, esse endereço será retornado ao cliente e seu navegador. Se um ANS não puder ser encontrado dentro do "tempo de vida" da solicitação (TTL; o número máximo de vezes que a solicitação deve ser encaminhada entre servidores, para evitar ciclos infinitos entre servidores configurados incorretamente), um erro será retornado ao cliente pelo nó em que a solicitação "atinge o tempo limite" (ou o nó que é o servidor autoritativo do domínio, mas que não pode converter o prefixo do domínio específico).
  5. O navegador, para uma conexão HTTP, envia uma solicitação "TCP SYN" para o endereço IP e a porta especificada (ou a porta HTTP padrão 80) para estabelecer uma conexão. Essa é uma solicitação em nível de protocolo, em camadas no cabeçalho IP "em nível de rede", que contém informações como a porta de resposta preferida do cliente (a "porta de origem"), preferências para comunicação TCP como tamanho do segmento, escala da janela e uso de recursos opcionais do protocolo.
  6. A solicitação é roteada no "nível do link" (que governa como os circuitos elétricos reais são manipulados para transmitir os dados contidos nas camadas de rede, transporte e aplicação) através da estrutura da Internet; normalmente, os dados trafegam ao longo de um fio ou fibra até o "Escritório Central" da sua casa ou empresa (isso é chamado de "última milha" e é tipicamente o circuito que representa o maior gargalo na largura de banda), que é mais ou menos o "onramp" para Superestrada da Informação. O CO tem acesso aos tubos de alta largura de banda (portadoras T, SONET etc.) que transmitem sua solicitação, juntamente com bilhões de outras pessoas, em todo o mundo ao CO do destino, que o encaminha ao servidor ou rede de destino.
    • Esse "roteamento IP" funciona de maneira conceitualmente semelhante à da resolução DNS; Os ISPs de "primeira linha" recebem redes IP "classe A" inteiras (todos os endereços possíveis com um primeiro byte conhecido) pela ICANN, e outros ISPs sabem quem é o proprietário dessa rede de classe A e como obter os dados na frente "mais próxima" da rede. door ", usando informações em uma" tabela de roteamento ". Esse ISP de primeira linha aluga blocos de endereços, alguns para ISPs locais, outros diretamente para usuários corporativos, e esses ISPs e corporações têm roteadores que usam o endereço IP (e suas próprias tabelas de roteamento) para determinar se devem enviar pacotes para outros circuitos próximos, lateralmente a outros roteadores ISP locais ou até troncos e roteadores de nível superior.
  7. O servidor recebe essa solicitação (desde que não seja rejeitada em uma camada de abstração mais baixa, como o soquete ou um firewall) e, se decidir aceitar a conexão, enviará uma etapa de resposta à solicitação "SYN-ACK", ambos reconhecendo a solicitar e especificar suas próprias preferências (incluindo qualquer uma das preferências do cliente que ele possa acomodar, mas alterar qualquer uma que não possa ou que não tenha sido especificada).
  8. Se o cliente suportar a comunicação usando a opção definida pelo servidor, ele enviará uma resposta ACK e agora a conexão será "estabelecida".
  9. O navegador em seguida envia uma solicitação "HTTP GET". A solicitação inclui o URI completo do recurso solicitado pelo navegador (mesmo sabendo que estamos conversando com www.google.com, enviamos essa string como parte da solicitação, para que o servidor possa, se desejar, interpretar melhor o nome do domínio para direcionar a solicitação). Esta solicitação pode incluir "cookies"; dados armazenados no cliente que podem ser fornecidos ao servidor para auxiliar no processamento da solicitação de maneira eficiente e conveniente (como identificar as preferências do usuário).
  10. O servidor recebe a solicitação GET e decide primeiro se deseja honrá-la (o servidor pode estar ouvindo solicitações à porta TCP 80, mas esperando mensagens de um protocolo de aplicativo diferente como FTP ou VoIP; isso é raro para a porta 80, mas mais comum para outros tipos de portas). Vamos assumir que ele aceita; o servidor retornará uma resposta HTTP contendo o recurso solicitado (nesse caso, o HTML da página padrão, que é a página de pesquisa onipresente do Google). A resposta também pode incluir "cookies", que o servidor solicita ao cliente para armazenar (o cliente pode ou não fazê-lo).
  11. O HTML é digerido pelo navegador e renderizado para desenhar a página na janela do navegador. Enquanto isso acontece, mais solicitações HTTP GET para Javascript, folhas de estilo, imagens e outros dados necessários para exibir todo o conteúdo da página da maneira prescrita pelo HTML são enviadas pelo cliente e os dados resultantes são fornecidos pelo servidor.
  12. Em uma época passada, o Google era baseado em formas estáticas; você digitou o que deseja pesquisar na caixa de texto e pressionou "Pesquisar" (ou "Estou com sorte"). Quando você faz isso, uma solicitação HTTP POST é enviada pelo cliente ao servidor; a solicitação contém o local, especificado pelo cliente, para o qual as informações devem ser enviadas e, é claro, as próprias informações. Essas informações são digeridas pelo servidor, que as utiliza para encontrar resultados de pesquisa, e o servidor cria uma página desses resultados que é enviada a você. Ou pode transformar os termos da pesquisa em uma "cadeia de consulta" e responder com um "redirecionamento"; uma solicitação para o navegador enviar outra solicitação para um URI diferente especificado na mensagem. O navegador fará isso e, em seguida, o servidor criará e transmitirá essa página.
  13. Nos tempos modernos, a primeira página do Google é muito mais dinâmica. À medida que você digita, o JavaScript que é executado no lado do cliente no navegador envia o que você está digitando no Google ao longo de um "canal lateral" (ele usa os mesmos protocolos de comunicação, mas porque não é o próprio navegador enviando solicitações para páginas inteiras , a tela do navegador não é limpa completamente e redesenhada). Para a primeira página, isso é usado para fornecer dicas de consulta (sugestões de preenchimento automático para itens que você pode estar procurando porque outras pessoas fizeram isso recentemente); na página de resultados, ele faz a mesma coisa, mas também pode ser usado para fornecer resultados de pesquisa em tempo real e redesenhar completamente a página, sem a necessidade de recarregar a página inteira pelo navegador. Esses tipos de truques se enquadram no cabeçalho geral de AJAX (JavaScript assíncrono e XML,

Este filme , que foi o que eles mostraram à minha turma de iniciantes "Introdução à TI" na faculdade, tem o básico ilustrado em um formato amigável e análogo. Não é técnico de forma alguma, mas fornece uma boa visão conceitual das peças deste quebra-cabeça.


1
Essa é uma boa resposta, mas encobre muitos detalhes que a maioria das pessoas consideraria desnecessários. (Não estou dizendo que você precisa adicionar esses detalhes;. Estou apenas apontando que há muito mais acontecendo do que o seu post sugere)
greyfade

1
Sim, você precisa acessar TCP vs UDP para pesquisas de DNS. Se TCP, você deve entrar no handshake de 3 vias do TCP. Provavelmente, é seguro supor que o sistema, de alguma forma, tenha servidores de nomes de domínio definidos (antes pelo DHCP ou pela configuração de rede) ....
Alan Shutko

1
@AlanShutko - Eu não mencionar o 3-way handshake; o SYN / SYN-ACK / ACK alternativo. Eu não mencionei o UDP, embora seja o protocolo principal para o DNS.
Keiths

@KeithS, oops, você está certo, eu estava procurando por ele quando checava o DNS, mais tarde. O DNS pode recuar para o TCP se houver uma resposta maior que 512 bytes e ela for truncada.
Alan Shutko

1
ANS - "Servidor de Nome Autoritário", o servidor DNS que possui conhecimento direto e responsabilidade pelos pontos de extremidade de um nome de domínio específico. ALD foi um erro de digitação. A postagem foi editada para ser mais clara nas duas contagens.
Keiths

1

Deixar de mencionar cookies e firewalls seria algo que falta aqui. Há algo a dizer sobre o envio de cookies para que "Google.com" possa reconhecer um usuário e exibir uma página diferente para alguém não conectado ao Google. Há também a questão de onde está a pessoa que está pesquisando: Smartphone, tablet ou computador comum (laptop ou desktop)?

Gostaria de saber se pode haver algumas perguntas secundárias que você deveria fazer, mas isso não poderia ser um fator aqui. Essa é mais uma questão de como a Web funciona, pois a Internet seria um pouco mais ampla e incluiria emails e outras coisas que eu pensaria.


Meu palpite é que isso foi mais um teste de suas capacidades de comunicação. Você pode fazer uma pergunta bastante técnica e dividi-la para que técnicos e não técnicos a entendam? Que tipo de perguntas você gostaria de explicar para alguém que abre a página inicial "Google.com" no navegador? Você faz um monte de suposições ou faz as perguntas? De certa forma, vejo isso como um paralelo a uma pergunta do quadro branco, onde as coisas são deixadas vagas o suficiente para que você faça perguntas para poder dar uma resposta precisa e correta ou faça suposições ao dar uma resposta.


5
Uma pergunta sobre a internet seria, em minha opinião, mais perguntadora sobre redes em geral; como são encontradas as rotas? Qual é o objetivo e o significado de um pacote e como eles transmitem informações? Como a abstração TCP sobre pacotes funciona e por quê? Mas a pergunta é realmente vaga, talvez esteja perguntando sobre HTTP, HTML, ou comutadores de rede, ISPs e backbones ou qualquer outra coisa, talvez queira saber como seu buffer de quadro de NIC é raspado e se o SO, CPU ou NIC o fazem ...
Jimmy Hoffa

@ JimmyHoffa: De fato, é uma questão ampla. Os entrevistadores que perguntaram o texto escreveram de tal maneira que acredito que o foco está no lado da rede - do pedido da página à obtenção da página. Há muita coisa acontecendo e eu suspeito que eles ficariam felizes, não importa qual caminho eu seguisse, desde que fosse técnico o suficiente e eu soubesse do que estava falando.
Megacannon

1
Eu também acho que eles estão atrás de uma resposta não técnica para ver como é possível comunicar idéias. Muitas vezes perdemos a floresta para as árvores, não podemos ver a imagem geral.
Matt

@JimmyHoffa, bom ponto. Você provavelmente deve começar com o endereço IP dos servidores DNS e determinar se eles estão na mesma sub-rede via máscara de rede e, se estiver, usando o ARP para encontrá-los. Caso contrário, um pacote é enviado ao gateway.
Alan Shutko
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.