Требуется более технический ответ на вопрос интервью о том, как работает интернет от начала до конца [закрыто]

13

За последние две недели у меня были интервью с 5 отдельными людьми, и три из этих пяти задали мне этот вопрос: Объясните, что происходит между нажатием на «Google.com» и появлением страницы на экране. В основном, как работает интернет. После трех раз я полагаю, что мне лучше быть готовым, если я когда-нибудь снова получу этот вопрос.

Я знаю кое- что, но я не совсем уверен, что мой ответ достаточно хорош. В основном я упоминаю, что DNS-сервер переводит «google.com» в IP-адрес. Я немного приукрашиваю TCP / IP, затем говорю о веб-сервере, который буквально обслуживает запрошенные страницы, которые отправляются обратно в браузер, который затем интерпретирует и отображает браузер.

Как я уже говорил, я не уверен, что мой ответ достаточно технический. Какие шаги я опускаю?

Что бы это ни стоило, два из этих трех раз были в одной и той же компании, и меня перезванивают на третье интервью с ними, так что я не могу слишком сильно его разбомбить .

Megacannon
источник
1
Каков характер позиций, на которых вы брали интервью?
smp7d
3
Если трое из пяти интервьюеров задали этот вопрос, пришло время провести какое-то исследование / исследование и получить хороший ответ, демонстрирующий, что вы его полностью понимаете. Если вас вызывают на третье собеседование в той же компании и вам снова задают вопрос, вы либо продемонстрируете, что достаточно заботились, чтобы укрепить свои знания, либо нет.
Роберт Харви,
1
Кроме того, я бы попытался сузить суть вопроса, спросив, какую часть процесса они больше всего интересуют. Им может быть все равно, что вы глубоко знаете о таких вещах, как, например, семь уровней модели OSI , но вы все еще должен иметь рабочие знания.
Роберт Харви
1
С другой стороны, возможно, ответ слишком технический. Возможно, они ищут, как вы можете донести информацию до людей нетехническим способом?
Мэтт
1
Если вопрос задают, чтобы увидеть, насколько хорошо вы общаетесь, то, возможно, будет полезно задавать вопросы по этому вопросу, а не просто дать ответ на очень широкий вопрос. Вы могли бы дать очень подробный технический ответ и потратить целый день на его объяснение. Я не думаю, что это цель вопроса.
Мэтт

Ответы:

29
  1. Сначала ваш браузер ищет в своем файле «hosts» ОС запись, которая преобразует доменное имя в IP-адрес. Это устаревшая функция, унаследованная от ARPANET, когда один текстовый файл мог содержать понятные имена для каждого компьютера, доступного через ARPANET, и для каждого подключенного к нему компьютера иметь относительно свежую копию. Раньше он имел некоторое остаточное значение в небольших сетях компьютеров, у которых не было NetBIOS или подобных протоколов имен узлов, но в настоящее время он также может стать целью для хакеров (которые могут использовать его для обхода DNS и указания вашего компьютера на сайты. они контролируют) как законно использовать клиентский компьютер или его пользователя / владельца.
  2. Предполагая, что на вашем компьютере нет записи HOSTS для этого домена, ваш браузер отправляет UDP-запрос DNS-серверу, настроенному в настройках Интернета операционной системы для используемого соединения, передавая «имя хоста», то есть доменное имя запроса (все между "http: //" и первым двоеточием или косой чертой, следующей за тем, что следует далее, т. е. "www.google.com"). Этот DNS-сервер обычно принадлежит либо вашей компании, либо вашему местному интернет-провайдеру.
    • UDP означает «Универсальный протокол дейтаграмм» и является протоколом «транспортного уровня» того же класса, что и TCP (выше IP-протокола «сетевого уровня», ниже протоколов «прикладного уровня», таких как HTTP, FTP, SMTP и т. Д. ). В то время как TCP обеспечивает множество возможностей по проверке ошибок и отказоустойчивости (добавление дополнительных данных и, следовательно, увеличение накладных расходов), UDP использует гораздо более легкий подход, увеличивая пропускную способность сети; компромисс в том, что протокол не поддерживает функции, доступные в TCP, такие как разделение больших данных на несколько пакетов (поэтому сообщения должны быть небольшими) или повторная отправка пакетов, потерянных при передаче. Это хорошо для небольших, простых сообщений (таких как DNS) и потоковых данных телеметрического типа, где не имеет значения, если один пакет потерян.
  3. Этот DNS-сервер будет знать одну из трех вещей: как преобразовать это доменное имя непосредственно в IP-адрес (т.е. это «авторитетный сервер имен» или ANS для этого домена); IP-адрес ANS или его родителя; или его собственный родительский сервер имен, который с большей вероятностью узнает, как связаться с ANS. Если сервер не транслирует сам запрос, он перенаправляет запрос либо «вниз» в сторону известного ANS, либо «вверх» в свой родительский NS, и этот процесс повторяется рекурсивно.
    • «Корнем» этой древовидной структуры является отдельный сервер, который не выполняет ничего, кроме пересылки любых запросов, которые он получает, на один из нескольких серверов «домена верхнего уровня» или TLD. Например, существует сервер имен «.com», который знает, как найти IP-адрес любого домена «.com» на планете (перенаправляя эти запросы на серверы имен уровня ISP). Эти TLD пересылают запросы на серверы доменных имен, которые не известны ни одному DNS в пределах определенной «ветви» Интернета, принадлежащей интернет-провайдеру.
  4. Когда авторитетный сервер имен найден и преобразован доменное имя в IP-адрес, этот адрес возвращается клиенту и его браузеру. Если ANS не может быть найден в течение «времени жизни» запроса (TTL; максимальное количество раз, когда запрос должен пересылаться между серверами, чтобы избежать бесконечной цикличности между неправильно настроенными серверами), клиенту возвращается ошибка на узел который запрос «истекает» (или узел, который является официальным сервером для домена, но который не может преобразовать конкретный префикс домена).
  5. Браузер для соединения HTTP затем отправляет запрос «TCP SYN» на IP-адрес и указанный порт (или порт HTTP по умолчанию, равный 80), чтобы установить соединение. Это запрос уровня протокола, размещенный поверх IP-заголовка «сетевого уровня», который содержит такую ​​информацию, как предпочтительный порт ответа клиента («исходный порт»), предпочтения для связи TCP, такие как размер сегмента, масштаб окна и использование дополнительных функций протокола.
  6. Запрос направляется на «канальном уровне» (управляющем тем, как фактические электрические схемы манипулируются для передачи данных, содержащихся на сетевом, транспортном и прикладном уровнях) через структуру Интернета; как правило, данные будут передаваться по проводам или оптоволоконному кабелю в «центральный офис» вашего дома или предприятия (это называется «последней милей» и, как правило, представляет собой канал, представляющий наибольшее узкое место для пропускной способности), который является более или менее «быстрым шагом» для Информационная супермагистраль. После этого СО получает доступ к каналам с высокой пропускной способностью (T-операторы, SONET и т. Д.), Которые вместе с миллиардами других пользователей передают ваш запрос по СО в пункт назначения, который направляет его на сервер или сеть назначения.
    • Эта «IP-маршрутизация» концептуально аналогична разрешению DNS; Интернет-провайдеры «верхнего уровня» назначаются целыми IP-сетями «класса А» (каждый возможный адрес задан известным первым байтом) ICANN, и другие интернет-провайдеры знают, кто владеет этой сетью класса А и как передавать данные на ближайший «фронт» этой сети. дверь », используя информацию в« таблице маршрутизации ». Этот провайдер высшего уровня затем сдает в аренду блоки адресов, некоторые - локальным провайдерам, другие - напрямую корпоративным пользователям, и у этих провайдеров и корпораций есть маршрутизаторы, которые используют IP-адрес (и свои собственные таблицы маршрутизации), чтобы определить, следует ли отправлять пакеты другим соседние каналы, сбоку от других локальных маршрутизаторов ISP или до магистральных линий и маршрутизаторов более высокого уровня.
  7. Сервер получает этот запрос (при условии, что он не отклонен на более низком уровне абстракции, таком как сокет или межсетевой экран), и если он решит принять соединение, он отправит шаг запрос-ответ "SYN-ACK", оба подтвердят запрашивать и указывать свои собственные предпочтения (включая любые предпочтения клиентов, которые он может учитывать, но изменяя любые, которые он не может или которые не были указаны).
  8. Если клиент поддерживает связь с использованием набора параметров, предоставленного сервером, он отправит ответ ACK, и теперь соединение «установлено».
  9. Затем браузер отправляет запрос «HTTP GET». Запрос включает в себя полный URI ресурса, запрошенного браузером (хотя мы знаем, что мы общаемся с www.google.com, мы отправляем эту строку как часть запроса, чтобы сервер мог, если он пожелает, далее интерпретировать доменное имя для направления запроса). Этот запрос может включать «куки»; данные, хранящиеся на клиенте, которые могут быть переданы на сервер, чтобы помочь в эффективной и удобной обработке запроса (например, определение предпочтений пользователя).
  10. Сервер получает запрос GET и сначала решает, хочет ли он выполнить его (сервер, возможно, ожидал запросы к порту TCP 80, но ожидает сообщения от другого протокола приложения, такого как FTP или VoIP; это редко для порта 80, но чаще встречается для других типов портов). Мы будем предполагать, что он принимает это; Затем сервер возвращает HTTP-ответ, содержащий запрошенный ресурс (в данном случае HTML-код для страницы по умолчанию, которая является вездесущей страницей поиска Google). Ответ также может включать «куки», которые сервер просит клиента сохранить (клиент может или не может сделать это).
  11. HTML-код переваривается браузером и отображается для отображения страницы в окне браузера. В то время как это происходит, клиент отправляет больше запросов HTTP GET для Javascript, таблиц стилей, изображений и других данных, которые необходимы для отображения всего содержимого страницы в порядке, предписанном HTML, и результирующие данные предоставляются сервер.
  12. В былом возрасте Google был основан на статических формах; Вы ввели то, что хотели найти, в текстовое поле и нажали «Поиск» (или «Мне повезет»). Когда вы делаете это, запрос HTTP POST отправляется клиентом на сервер; запрос содержит местоположение, указанное клиентом, куда должна быть отправлена ​​информация, и, конечно, сама информация. Эта информация переваривается сервером, который использует ее для поиска результатов поиска, и сервер создает страницу с этими результатами, которую он отправляет вам. Или он может преобразовать условия поиска в «строку запроса» и ответить «перенаправлением»; запрос к браузеру отправить другой запрос на другой URI, указанный в сообщении. Браузер сделает это, а затем сервер создаст и передаст эту страницу.
  13. В наше время главная страница Google намного динамичнее. По мере ввода JavaScript, который выполняется на стороне клиента в браузере, отправляет то, что вы вводите, в Google по «побочному каналу» (он использует те же протоколы для связи, но потому что не сам браузер отправляет запросы на целые страницы). , экран браузера не очищен полностью и перерисован). Для главной страницы это используется для предоставления подсказок запроса (предложения по автозаполнению для вещей, которые вы можете искать, потому что другие люди сделали это недавно); на странице результатов он делает то же самое, но может также использоваться для предоставления результатов поиска в режиме реального времени и полного перерисовывания страницы, не требуя полной перезагрузки страницы браузером. Эти типы приемов подпадают под общий заголовок AJAX (асинхронный JavaScript и XML,

Этот фильм , который они показали моему первокурснику в классе "Введение в ИТ" в колледже, имеет основы, иллюстрированные в дружественном, аналогичном формате. Это никоим образом не технический вопрос, но он дает хороший концептуальный обзор частей этой головоломки.

Keiths
источник
1
Это хороший ответ, но содержит множество деталей, которые большинство людей сочли бы ненужными. (Я не говорю, что вам нужно добавить эти детали; я только указываю, что происходит намного больше, чем предполагает ваш пост.)
greyfade
1
Да, вам нужно перейти в TCP против UDP для поиска DNS. Если TCP, вы должны пойти в TCP трехстороннее рукопожатие. Вероятно, можно с уверенностью предположить, что в системе каким-то образом определены серверы доменных имен (предварительно с помощью DHCP или конфигурации сети) ....
Алан Шутко
1
@AlanShutko - я бы упомянуть 3 рукопожатия; назад и вперед SYN / SYN-ACK / ACK. Я не упомянул UDP, хотя это основной протокол для DNS.
KeithS
@KeithS, упс, вы правы, я искал это при проверке DNS, а не позже. DNS может откатиться к TCP, если ответ больше 512 байт, и он усекается.
Алан Шутко
1
ANS - «Официальный сервер имен», DNS-сервер, который непосредственно знает и отвечает за конечные точки определенного доменного имени. ALD была опечатка. Сообщение было отредактировано, чтобы быть более ясным по обоим пунктам.
KeithS
1

Отсутствие упоминаний о cookie-файлах и брандмауэрах здесь будет не хватать. Что-то нужно сказать об отправке файлов cookie, чтобы "Google.com" мог распознать пользователя и открыть страницу, которая может отличаться для тех, кто не вошел в Google. Существует также вопрос, где этот человек ищет: смартфон, планшет или обычный компьютер (ноутбук или настольный компьютер)?

Интересно, могут ли быть какие-то побочные вопросы, которые вы должны были задать, но не могли ли это быть фактором здесь. Это больше вопрос о том, как работает Интернет, так как Интернет будет немного шире и будет включать в себя электронную почту и другие вещи, которые я думаю.


Я предполагаю, что это была скорее проверка ваших коммуникационных возможностей. Можете ли вы взять довольно технический вопрос и разбить его так, чтобы технические и нетехнические поняли его? Какие вопросы вы бы ответили, когда их попросили объяснить кому-то, кто открывает главную страницу "Google.com" в своем браузере? Вы делаете кучу предположений или задаете вопросы? В некотором смысле я рассматриваю это как параллель к вопросу о доске, где все остается достаточно расплывчатым, так что вы либо будете задавать вопросы, чтобы дать точный правильный ответ, либо делать предположения, давая ответ.

JB King
источник
5
На мой взгляд, вопрос об Интернете будет больше задавать вопросы о сети в целом; как найти маршруты? Какова цель и значение пакета и как они передают информацию? Как работает абстракция TCP через пакеты и почему? Но вопрос действительно расплывчатый, может быть, он спрашивает об HTTP, или HTML, или о сетевых коммутаторах, или интернет-провайдерах и магистралях, или о чем-то еще, может быть, он хочет знать, как очищается ваш кадровый буфер NIC и делает ли это ОС, ЦП или NIC ...
Джимми Хоффа
@JimmyHoffa: Действительно, это широкий вопрос. Интервьюеры, которые спрашивали об этом, сформулировали это так, что я считаю, что основное внимание уделяется сетевой стороне - от запроса страницы до получения страницы. Многое продолжается, и я подозреваю, что они будут счастливы, независимо от того, какой маршрут я выбрал, пока он достаточно технический, и я знал, о чем говорю.
Мегаканнон
1
Я тоже думаю, что они после нетехнического ответа, чтобы увидеть, насколько хорошо вы можете поделиться идеями. Часто мы теряем лес из-за деревьев, не можем видеть общую картину.
Мэтт
@ JimmyHoffa, хорошая мысль. Вероятно, вам следует начать с IP-адреса ваших DNS-серверов и определить, находятся ли они в одной подсети, с помощью маски сети, и, если это так, использовать ARP для их поиска. В противном случае пакет отправляется на шлюз.
Алан Шутко