Душевная пытка! За вводом браузера "xxxxhub".....

задняя часть внешний интерфейс

Эй, ребята, читатели и дедушки, это 13-я статья в серийном цикле компьютерной сети программиста Ксюана.

До сих пор мы рассмотрели прикладной уровень, транспортный уровень, сетевой уровень и уровень канала передачи данных, поэтому теперь пришло время объединить их все вместе для всестороннего обзора. Затем я возьму в качестве примера процесс запроса веб-страницы, чтобы рассказать вам о том, как эти протоколы работают в компьютерной сети, как пакеты данных отправляются и принимаются, от ввода URL-адреса, попадания в шину до окончательного завершения запроса. презентация страницы у вас впереди процесс.

Сначала я открыл веб-браузер и в адресной строке браузера Google набралmaps.google.com.

Потом ......

Посмотрите кеш DNS

На этом этапе браузер проверит наличие кеша в четырех местах.Первое место — это кеш браузера, который является DNS-записью.

Ваш браузер поддерживает записи DNS в течение фиксированного периода времени для веб-сайтов, которые вы посещаете. Следовательно, это первое место для выполнения DNS-запросов. Браузер сначала проверяет, есть ли у URL-адреса соответствующая запись DNS в браузере, которая используется для поиска IP-адреса целевого URL-адреса.

Я браузер Chrome, поэтому в Mac не могу использоватьchrome://net-internals/#dnsНайдите соответствующий IP-адрес, который можно найти в окнах.

Так как же Mac запрашивает записи DNS? ты можешь использоватьnslookupкоманду найти, но это не предмет нашего обсуждения.

DNS(Domain Name System)Это распределенная база данных, которая поддерживает сопоставление между URL-адресами и их IP-адресами. В Интернете IP-адрес — это адрес, понятный компьютерам, а альтернативный адрес DNS — это адрес, который мы, люди, можем понять и запомнить DNS отвечает за преобразование адресов, которые люди помнят, в адреса, понятные компьютерам. Каждому URL соответствует уникальный IP-адрес.

Например, официальный сайт Googlewww.google.com, а IP-адрес Google — 216.58.200.228, вы можете получить доступ к любому из этих двух адресов в URL-адресе, но IP-адрес нелегко запомнить, а google.com — просто и понятно. DNS эквивалентен домашней телефонной книге, которую мы использовали несколько лет назад. Например, если вы хотите позвонить Cxuan, вы можете не помнить номер телефона Cxuan. В настоящее время вам нужно запросить телефонную книгу, чтобы найти номер телефона Cxuan.

Второе место, которое браузер должен проверить, этоКэш ОС. Если записи DNS нет в кеше браузера, браузер выполнит системный вызов операционной системы, т.е.getHostName.

В Linux и большинстве систем UNIX, если не установленоnscd, иначе операционная система может не иметь кэша DNS.

nscd — этоКэш службы имен.

Просмотр низкий Третье место, чтобы проверить этокеш маршрутизатора, если DNS-записи нет на вашем компьютере, браузер сохранит DNS-запись с подключенным к нему маршрутизатором.

Если подключенный маршрутизатор также не имеет DNS-записей, браузер проверитISPЕсть ли кеш в . Кэш провайдера — это кеш вашего локального провайдера услуг связи.Поскольку провайдер поддерживает свой собственный DNS-сервер, суть кэширования DNS-записей также заключается в сокращении времени запроса и достижении эффекта быстрого ответа. После того, как вы посетили определенные веб-сайты, ваш интернет-провайдер может кэшировать эти страницы для более быстрого доступа в следующий раз. Вы шокированы тем, что часто смотрите маленькие фильмы? Было бы забавно иметь дома веб-камеру, подключенную к Интернету.

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

Таким образом, описанный выше процесс запроса с использованием кэша DNS выглядит следующим образом.

Если на вышеуказанных четырех шагах нет записи DNS, это означает, что нет кеша DNS, в это время вам необходимо инициировать DNS-запрос, чтобы найти IP-адрес целевого URL-адреса (maps.google.com в этом примере). ).

Инициировать DNS-запрос

Как упоминалось выше, если я хочу, чтобы мой компьютер подключался и связывался с maps.google.com, мне нужно знать IP-адрес maps.google.com, из-за конструкции DNS локальный DNS может не дать мне правильный IP-адрес. адрес, то ему необходимо выполнить поиск на нескольких DNS-серверах в Интернете, чтобы найти правильный IP-адрес для веб-сайта.

Вот вопрос, почему мне нужно искать несколько DNS-серверов, чтобы найти IP-адрес веб-сайта? Сервер не может этого сделать?

Поскольку DNS является распределенным сервером доменных имен, каждый сервер поддерживает только часть сопоставления IP-адресов с сетевыми адресами, и ни один сервер не может поддерживать все отношения сопоставления.

В ранних разработках DNS был только один DNS-сервер. Этот сервер будет содержать все сопоставления DNS. Это集中式дизайн, который не подходит для сегодняшнего Интернета, потому что ИнтернетОгромный и растущийхост, эта централизованная конструкция будет иметь следующие проблемы

  • 单点故障(a single point of failure), если DNS-сервер выйдет из строя, то вся сеть будет парализована.
  • 通信容量(traaffic volume), один DNS-сервер должен обрабатывать все DNS-запросы, и количество таких запросов может исчисляться миллионами или десятками миллионов, что сложно удовлетворить одному серверу.
  • 远距离集中式数据库(distant centralized database), это невозможно для одного DNS-сервера邻近Для всех пользователей предполагается, что DNS-сервер в США не может использоваться для запроса в Австралии, где запрос запроса должен проходить по низкоскоростному и перегруженному каналу, что вызывает серьезную задержку.
  • 维护(maintenance), затраты на обслуживание огромны, а также требуются частые обновления.

Таким образом, в текущей ситуации с сетью DNS не может иметь централизованную структуру, поскольку она вообще не имеет масштабируемости, поэтому внедрение分布式设计, характеристики этой конструкции следующие

Распределенная иерархическая база данных.

Во-первых, первая проблема, которую необходимо решить при распределенном проектировании, — это масштабируемость DNS-серверов, поэтому DNS использует большое количество DNS-серверов, их организационная модель, как правило, иерархична и распределена по всему миру.Ни один DNS-сервер не может отображать все хосты в Интернете.. Вместо этого эти сопоставления распределяются по всем DNS-серверам.

Вообще говоря, существует три типа DNS-серверов:根 DNS 服务器,顶级域(Top-Level Domain, TLD) DNS 服务器а также权威 DNS 服务器. Иерархическая модель этих серверов показана на следующем рисунке.

  • 根 DNS 服务器, существует более 400 корневых серверов имен по всему миру, эти корневые серверы имен управляются 13 различными организациями. Список и организацию корневых серверов имен можно найти по адресуroot-servers.org/, корневой сервер имен предоставляет IP-адрес сервера TLD.
  • 顶级域 DNS 服务器, существует сервер TLD или кластер серверов для каждого из доменов верхнего уровня, таких как com, org, net, edu и gov, а также для всех национальных доменов uk, fr, ca и jp. Список всех доменов верхнего уровня см.tld-list.com/. Сервер TDL предоставляет IP-адрес авторитетного DNS-сервера.
  • 权威 DNS 服务器, которые имеют общедоступные узлы в Интернете, такие как веб-серверы и почтовые серверы, организации которых должны предоставлять доступные записи DNS, сопоставляющие имена этих узлов с IP-адресами. Эти DNS-записи размещаются на официальном DNS-сервере организации.

После понимания концепции дизайна DNS-сервера давайте вернемся к шагам поиска DNS.В основном существует три способа поиска DNS.

Существует три типа запросов, которые возникают при поиске DNS. Комбинируя эти запросы,Оптимизированный процесс разрешения DNS сокращает расстояние передачи. В идеале можно было бы использовать кэшированные данные записи, что позволило бы DNS-серверам имен напрямую использовать нерекурсивные запросы.

  • 递归查询: в рекурсивном запросе DNS-клиент запрашивает, чтобы DNS-сервер (обычно рекурсивный преобразователь DNS) ответил клиенту с запрошенной записью ресурса или вернул сообщение об ошибке, если преобразователь не может найти запись.

  • 迭代查询: в итеративном запросе, если запрошенный DNS-сервер не соответствует запрошенному имени, он вернет ссылку на DNS-сервер, который является полномочным для пространства имен более низкого уровня. Затем DNS-клиент запросит ссылающийся адрес. Этот процесс продолжается с другими DNS-серверами в цепочке запросов до тех пор, пока не произойдет ошибка или истечет время ожидания.

  • 非递归查询: этот запрос обычно выполняется, когда клиент преобразователя DNS запрашивает у DNS-сервера запись, к которой у него есть доступ, либо потому, что он является авторитетным для этой записи, либо потому, что запись существует в его кэше. DNS-серверы обычно кэшируют записи DNS и могут возвращать кэшированные результаты непосредственно при поступлении запроса, чтобы предотвратить дальнейшее потребление полосы пропускания и нагрузку на вышестоящие серверы.

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

Если вы хотите узнать больше о DNS, см.Длинный текст 4D взрывает протокол DNS!

Таким образом, для доменного имени maps.google.com, если сервер, поддерживаемый интернет-провайдером, не имеет записи кэша DNS, он сделает запрос к адресу корневого сервера DNS, и корневой сервер имен перенаправит его на .com. сервер доменных имен верхнего уровня. Сервер домена верхнего уровня .com перенаправляет его на полномочный сервер google.com. Сервер имен google.com найдет IP-адрес, соответствующий map.google.com, в своих записях DNS и вернет его вашему преобразователю DNS, который затем отправит его обратно в ваш браузер.

Здесь стоит отметить, что пакеты DNS-запросов будут проходить через множество маршрутизаторов и устройств, прежде чем достичь таких серверов, как имя корневого домена.路由表чтобы определить, какой путь является самым быстрым для пакета, чтобы достичь пункта назначения. Это включает в себя алгоритм маршрутизации, Если вы хотите узнать алгоритм маршрутизации, вы можете прочитать эту статьюwoohoo.cisco.com/from/en/US/speeddating…

ARP-запрос

Я читал много статей, в которых об этом не упоминается, и это процесс запросов ARP.

Когда вам нужно отправить запрос ARP?

Здесь есть предварительное условие

  • Если DNS-сервер и наш хост находятся в одной подсети, система выполнит ARP-запрос на DNS-сервере в соответствии со следующим процессом ARP.
  • Если DNS-сервер и наш хост находятся в разных подсетях, система запросит шлюз по умолчанию в соответствии со следующим процессом ARP.

Полное название протокола ARP:Address Resolution Protocol(地址解析协议), это сквознойОн используется для реализации сопоставления IP-адреса с MAC-адресом, то есть для запроса MAC-адреса, соответствующего целевому IP-адресу.Соглашение.

Короче говоря, ARP — это протокол, решающий проблему адресов: он использует IP-адрес как подсказку для определения MAC-адреса следующего хоста, который должен получать пакеты данных. Если узел назначения не находится на том же канале, то ищется MAC-адрес маршрутизатора следующего перехода.

Чтобы узнать, почему существует IP-адрес и MAC-адрес, обратитесь к этому ответу.Ууху. Call.com/question/21…

Общий рабочий процесс ARP выглядит следующим образом.

Предполагая, что A и B находятся на одном и том же канале, преобразование маршрутизатора не требуется, узел A отправляет IP-пакет узлу B, адрес узла A — 192.168.1.2, а адрес узла B — 192.168.1.3, они не знаю адреса друг друга Что такое MAC-адрес, хост C и хост D являются другими хостами на той же ссылке.

Хост A хочет получить MAC-адрес хоста B, через хост A пройдет广播способ отправитьARP 请求包, пакет запроса ARP содержит MAC-адрес IP-адреса хоста B, который хочет знать хост A.

Пакет запроса ARP, отправленный узлом А, будет получен и проанализирован всеми узлами/маршрутизаторами на одном канале. Каждый хост/маршрутизатор проверяет информацию в пакете запроса ARP, если пакет запроса ARP содержит目标 IP 地址Так же, как и свой собственный, он запишет MAC-адрес своего хоста в ответный пакет и вернет его хосту А.

В результате MAC-адрес может быть получен из IP-адреса через ARP, что позволяет осуществлять связь по тому же каналу.

Итак, для отправки широковещательных ARP-рассылок нам необходимо иметь IP-адрес назначения, а также нам необходимо знать MAC-адрес интерфейса, используемого для отправки широковещательных ARP-рассылок.

участие здесьARP-кэшКонцепция чего-либо.

Теперь вы знаете, что MAC-адрес можно определить, отправив запрос ARP перед отправкой IP-пакета. Итак, каждый раз, когда он отправляется, должен ли он проходить серию процессов: широковещательная рассылка -> инкапсуляция ответа ARP -> возврат на хост?

Подумайте об этом, как браузер это делает? Браузеры имеют встроенные кеши, которые могут кэшировать ваши последние использованные адреса, поэтому ARP такой же. Ключом к эффективной работе ARP является поддержаниеARP 缓存(或表). Этот кэш поддерживает сопоставление каждого IP-адреса с MAC-адресом. Используя MAC-адрес, полученный первым ARP, в качестве отношения отображения между IP и MAC в таблице кэша ARP, при следующей отправке дейтаграммы на этот адрес нет необходимости повторно отправлять запрос ARP, но кэш напрямую MAC-адрес в таблице используется для передачи дейтаграмм. Каждый раз, когда отправляется запрос ARP, соответствующее отношение сопоставления в таблице кэша очищается.

Кэш ARP снижает использование сетевого трафика и в определенной степени предотвращает большое количество широковещательных передач ARP.

Вообще говоря, после отправки ARP-запроса один раз вероятность повторной отправки того же запроса относительно высока, поэтому использование ARP-кэша может уменьшить отправку ARP-пакетов.Кроме того, не только отправитель ARP-запроса может кэшировать MAC-адрес. адреса получателя ARP, получатель также может кэшировать IP- и MAC-адреса отправителя запроса ARP, как показано ниже.

но,Кэш MAC-адреса имеет определенный период времени, по истечении которого кэшированный контент будет очищен..

Для более глубокого понимания протокола ARP вы можете обратиться к этой статье cxuan.

ARP, человек, стоящий за сетью


Итак, браузер сначала запросит ARP-кэш, и если кеш сработает, мы вернем результат: target IP = MAC.

Если кеш отсутствует:

  • Проверьте таблицу маршрутизации, чтобы узнать, находится ли IP-адрес назначения в подсети в локальной таблице маршрутизации. Если да, используйте интерфейс, подключенный к этой подсети, в противном случае используйте интерфейс, подключенный к шлюзу по умолчанию.
  • Запрос MAC-адреса выбранного сетевого интерфейса
  • Мы отправляем ARP-запрос канального уровня:

В зависимости от типа оборудования, соединяющего хост и маршрутизатор, его можно разделить на следующие ситуации:

Прямая связь:

  • Если мы напрямую подключены к маршрутизатору, маршрутизатор вернетARP Reply(Смотри ниже).

Центр:

  • Если мы подключены к хабу, то хаб будет транслировать ARP-запрос на все остальные порты, а если к нему также подключен роутер, то он вернетARP Reply.

выключатель:

  • Если мы подключены к коммутатору, коммутатор проверит локальную таблицу CAM/MAC, чтобы увидеть, какой порт имеет MAC-адрес, который мы ищем, и, если он не будет найден, коммутатор отправит запрос ARP на все остальные порты.
  • Если в таблице MAC/CAM коммутатора есть соответствующая запись, коммутатор отправит запрос ARP на порт, имеющий MAC-адрес, который мы хотим запросить.
  • Если маршрутизатор также连接В нем он возвращаетARP Reply

ARP Reply:

Теперь, когда у нас есть IP-адрес DNS-сервера или шлюза по умолчанию, мы можем приступить к DNS-запросам:

  • Используйте порт 53 для отправки пакета запроса UDP на DNS-сервер, если пакет ответа слишком велик, будет использоваться протокол TCP.
  • Если локальный DNS-сервер или DNS-сервер поставщика услуг Интернета не найдет результат, он отправит рекурсивный запрос на запрос к DNS-серверу верхнего уровня слой за слоем, пока не достигнет начального центра, и, если он будет найден, он вернет результат.

(Все вышеперечисленное взято из:GitHub.com/skyline7548…


Инкапсулирует пакеты TCP

После того, как браузер получит IP-адрес целевого сервера, он может узнать номер порта в соответствии с портом в URL-адресе (номер порта по умолчанию для протокола http — 80, а номер порта по умолчанию для https — 443), и он будет подготовить пакеты данных TCP. Инкапсуляция пакета данных будет проходить через следующие уровни обработки.После того, как данные достигнут целевого хоста, целевой хост проанализирует пакет данных.Полный процесс запроса и анализа выглядит следующим образом.

Я не буду здесь вдаваться в подробности, читатели и друзья могут прочитать эту статью cxuanПодробное объяснение основ TCP/IPУзнать больше.

Браузер устанавливает TCP-соединение с целевым сервером.

После прохождения вышеуказанного процесса поиска DNS и ARP браузер получит IP- и MAC-адрес целевого сервера, а затем установит соединение с целевым сервером для передачи информации. Здесь можно использовать множество интернет-протоколов, но протокол транспортного уровня, используемый протоколом HTTP для установления соединения, — это протокол TCP. Таким образом, этот шаг представляет собой процесс установления TCP-соединения между браузером и целевым сервером.

Для установления TCP-соединения требуется трехстороннее рукопожатие TCP/IP, которое на самом деле представляет собой процесс обмена сообщениями синхронизации SYN и подтверждениями ACK между браузером и сервером.

Предположим, что левый конец рисунка — это клиентский хост, а правый — серверный.CLOSED(关闭)государство.

  1. Серверный процесс готов принимать TCP-соединения извне. Затем серверный процесс находится вLISTENСтатус, ожидание запроса на подключение клиента.
  2. Клиент отправляет запрос на подключение к серверу, первый бит синхронизации в запросе равен SYN = 1, и при этом выбирается начальная последовательность порядковых номеров, сокращенно seq = x. Сегмент SYN не может передавать данные и использует только порядковый номер. В этот момент клиент входитSYN-SENDгосударство.
  3. После того, как сервер получает соединение от клиента, ему необходимо подтвердить сегмент клиента. В сегменте подтверждения установите биты SYN и ACK в 1. Номер подтверждения равен ack = x + 1, а также выбирает для себя начальный порядковый номер seq = y. Обратите внимание, что этот сегмент также не может передавать данные, но также использует порядковый номер. В этот момент TCP-сервер входитSYN-RECEIVED(同步收到)государство.
  4. После получения ответа от сервера клиенту также необходимо подтвердить соединение. ACK в подтверждающем соединении устанавливается равным 1, порядковый номер — seq = x + 1, а подтверждающий номер — ack = y + 1. TCP определяет, может ли этот сегмент нести данные или нет.Если он не несет данных, порядковый номер следующего сегмента данных по-прежнему будет seq = x + 1. В этот момент клиент входитESTABLISHED (已连接)условие
  5. После того, как сервер получает подтверждение от клиента, он также входитESTABLISHEDгосударство.

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

Браузер отправляет HTTP-запрос на веб-сервер

Как только TCP-соединение установлено, пришло время передать данные напрямую и приступить к делу! Браузер отправитGETЗапрос, попросите целевой сервер предоставить веб-страницу maps.google.com, если вы заполните форму, инициацияPOSTЗапрос в HTTP, запрос GET и запрос POST являются двумя наиболее распространенными запросами, на которые в основном приходится более 90% всех HTTP-запросов.

Помимо типа запроса, HTTP-запросы также содержат много информации, самые распространенные из них — Host, Connection, User-agent, Accept-language и т. д.

Первый хост представляет хост, на котором находится объект.Connection: closeУказывает, что браузер должен указать серверу использовать非持久连接. Требуется, чтобы сервер закрыл соединение после отправки объекта ответа.User-agent: это заголовок запроса, используемый, чтобы сообщить веб-серверу, что тип, используемый браузером,Mozilla/5.0, который является браузером Firefox.Accept-languageСообщите веб-серверу, что браузер хочет получить французскую версию объекта, при условии, что сервер поддерживает французский тип, в противном случае будет отправлена ​​версия сервера по умолчанию. Ниже представлены основные поля сущностей (подробности см.developer.Mozilla.org/this-cn/docs/…обучение на официальном сайте MDN)

Существует четыре типа заголовков HTTP-запросов:通用标头,请求标头,响应标头а также实体标头.

Эти четыре заголовка содержат большое количество контента.

Глубокое понимание заголовков HTTP

Сервер обрабатывает запрос и отправляет ответ

Этот сервер содержит веб-сервер, сервер Apache, который получает запросы от браузера и передает их обработчикам запросов и генерирует ответы.

Обработчик запроса также представляет собой программу, которая обычно написана на .net, php, ruby ​​и других языках и используется для чтения запроса, проверки содержимого запроса, файлов cookie и обновления информации на сервере, если необходимо. Он будет отвечать в определенном формате, таком как JSON, XML, HTML вместе взятые.

Сервер отправляет ответ HTTP

Ответ сервера содержит запрошенную вами веб-страницу вместе с кодом состояния, типом сжатия (Content-Encoding), способом кэширования страницы (Cache-Control), файлами cookie для установки, информацией о конфиденциальности и т. д.

Например, следующее тело ответа

Для более глубокого понимания HTTP-запросов и ответов вы можете обратиться к этой статье.

После прочтения этого HTTP не проблема поспорить с интервьюером

Браузер отображает соответствующий контент HTML

Браузер отображает содержимое HTML поэтапно. Во-первых, он отобразит голый скелет HTML. Затем он проверит теги HTML и отправит запросы GET для других элементов на веб-странице, таких как изображения, таблицы стилей CSS, файлы JavaScript и т. д. Эти статические файлы кэшируются браузером, поэтому при повторном посещении страницы вам не нужно запрашивать ее снова. Наконец, в браузере появится экран map.google.com.

У меня самого было шесть PDF-файлов. После поиска «Programmer cxuan» в WeChat и подписки на официальный аккаунт я ответил на cxuan в фоновом режиме и получил все PDF-файлы.Эти PDF-файлы следующие:

Шесть ссылок в формате PDF