Полный процесс ответа на HTTP-запрос (2)

задняя часть сервер алгоритм Mac

Предыдущая статьяМы полностью описали «прикладной уровень» и «транспортный уровень» в пятиуровневой компьютерной модели и изложили соответствующие принципы более сложного протокола TCP. Я считаю, что все должны были чему-то научиться, поэтому эта статья продолжит изучение пятислойная модель.

Сетевой уровень

"Сетевой уровень" фактически решает проблему "переадресации".Диапазон сети разделен легендарным "протоколом IP", то есть я не подключен к вам напрямую сетевым кабелем, и я также могу анализировать его через ваш IP Как насчет того, чтобы найти маршрутизатор, отвечающий за ваш шлюз, и направить дейтаграммы к вам через ваш шлюз.

Это то, что делает «сетевой уровень», и он, по сути, решает проблему взаимодействия двух хостов, которые не существуют в одной и той же подсети. "IP-протокол" и "как анализировать IP-алгоритм" являются двумя основными содержаниями. Давайте сначала рассмотрим связанные концепции этого "IP-протокола".

Взяв в качестве примера IPv4, для описания IP-адреса используются 32 бита, поэтому теоретически весь IPv4 может предоставить 4 миллиарда IP-адресов, для представления которых мы обычно используем «десятичное число с точками».

Например: IP-адрес 11000001 00100000 11011000 00001001 обычно записывается как 193.32.216.9.

Таким образом, мы решили проблему IP-адресации, но как по IP-адресу определить, к какой подсети она принадлежит?

Введите термин «маска подсети», который выражается 32 битами в той же форме, что и IP-адрес. Среди них все биты, описывающие сетевую часть, равны 1, а часть номера хоста в подсети — все 0.

Например: маска подсети 11111111.11111111.11111111.00000000, записанная в десятичном виде 255.255.255.0. В нем поясняется, что первые 24 бита IP-адреса, использующего маску подсети, являются его частью подсети, а последние 8 бит — это номер хоста, соответствующий IP-адресу в подсети.

Например:

Маска подсети, соответствующая IP-адресу 172.16.254.1, равна 255.255.255.0, тогда нам нужно только выполнить операцию «И» из двух, чтобы получить сетевую часть IP-адреса.

Итак, номер сети для этого IP-адреса — 172.16.254.

Далее мы обсудим очень важный протокол, который решает проблему того, как хост, который только что присоединился к подсети, получает свой IP-адрес.Этот протокол называетсяПротокол динамической конфигурации хоста (DHCP).

DHCP

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

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

По умолчанию маршрутизаторы изолируют широковещательные пакеты и не отправляют полученные широковещательные пакеты из одной подсети в другую. Когда DHCP-сервер и клиент находятся в разных подсетях, маршрутизатор, выступающий в роли шлюза клиента по умолчанию, отправляет широковещательный пакет в подсеть, где находится DHCP-сервер.Эта функция называется ретрансляцией DHCP.

То есть в подсети должен быть один DHCP-сервер для назначения IP-адресов по всей подсети. Но настраивать отдельный сервер DHCP для каждой подсети тоже немного «глупо».

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

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

Полный процесс запроса и ответа DHCP выглядит следующим образом:

первый шаг:

Обнаружение DHCP-сервера.Основная задача этого этапа — найти местоположение DHCP-сервера в текущей сети, а обмен всем DHCP-сообщением осуществляется на основе протокола UDP/IP и отправляется на порт назначения 67.

Поскольку у этой машины нет IP-адреса, «адрес источника» в дейтаграмме IP — «0.0.0.0», а «адрес назначения» — «255.255.255.255».

Таким образом, когда канальный уровень передает дейтаграмму в широковещательном режиме, все узлы в одной подсети примут дейтаграмму, но только DHCP-сервер ответит на запрос.

Таким образом, если маршрутизатор сам является DHCP-сервером, он перейдет ко второму шагу, в противном случае маршрутизатор перенаправит пакет в сеть, где находится DHCP-сервер.

Шаг 2:

Предоставляется DHCP-сервером.DHCP-сервер, независимо от того, находится ли он во внешней сети или на самом маршрутизаторе шлюза, ответит «сообщением с предложением» после получения «сообщения об обнаружении».

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

третий шаг:

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

четвертый шаг:

DHCP ACK. После получения запроса подтверждения от клиентского хоста сервер фактически выделит IP-адрес из пула IP-адресов и вернет ACK информации подтверждения от клиента.

С тех пор хост получил пригодный для использования IP-адрес и, наконец, присоединился к сети.

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

Это соглашение протокола DHCP.Когда хост впервые подключается к подсети, он получает совершенно новый IP-адрес от DHCP-сервера.

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

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

image

Что касается того, как используется каждое поле или параметр, мы пока не будем обсуждать это здесь. Мы подробно объясним это и сделаем его доступным для понимания. Будет легче понять, когда будет подробно проанализирован распределение и анализ пакетов. .

маршрутизатор

Маршрутизатор является основным устройством сетевого уровня, которое выполняет полный процесс переадресации пути от «IP-адреса назначения» к «подсети, в которой расположен IP-адрес назначения». Его внутренняя структура выглядит следующим образом:

image

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

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

Хороший «алгоритм маршрутизации» должен не только решать проблему того, как добраться до места назначения, но и учитывать, как добраться до места назначения как можно быстрее, то есть определить и выборочно обойти перегруженный сетевой путь.

Весь алгоритм маршрутизации делится на две категории:Алгоритмы глобальной маршрутизации и алгоритмы распределенной маршрутизации. Типичной реализацией первого является «алгоритм маршрутизации состояния канала», а типичной реализацией последнего является «алгоритм вектора расстояния».

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

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

image

Весь Интернет примерно состоит из таких взаимосвязанных автономных систем, и все маршрутизаторы в автономной системе используют один и тот же алгоритм маршрутизации, «протокол RIP» на основе вектора расстояния или «протокол OSPF» на основе состояния канала.

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

Алгоритм протокола RIP такой:

image

Простая автономная система, давайте возьмем ее в качестве примера, чтобы увидеть, как работает весь протокол RIP.

Прежде всего, таблица переадресации маршрутизатора А должна быть такой:

----------------------------
目的子网   下一跳路由   跳数
x           B           1
q           E           1
----------------------------

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

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

Таким образом, после одного обмена маршрутизатор A получит информацию таблицы переадресации от B и E, поэтому таблица переадресации маршрутизации обновляется следующим образом:

----------------------------
目的子网   下一跳路由   跳数
x           B           1
q           E           1
y           B           2
p           E           2
----------------------------

Но вот деталь, подсеть y доступна через A-B-y, но также и через A-E-C-y. Как вы уже догадались, маршрутизатор, конечно же, выберет кратчайший путь для обновления своей таблицы переадресации.

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

Реализация OSPF выглядит следующим образом:

Мы также используем приведенный выше пример, чтобы объяснить:

image

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

OSPF — это, по сути, задача Дейкстры о поиске кратчайшего пути, которая обновляет всю таблицу маршрутизации и пересылки посредством непрерывной итерации и вычислений. Теперь предположим, что наш маршрутизатор A использует протокол OSPF:

После завершения первой итерации он получает расчет пути для подсетей, связанных с двумя маршрутизаторами B и E.

Второй раз, чтобы перезапустить алгоритм с B или E в качестве начальной точки, здесь мы предполагаем, что алгоритм запускается с B в качестве начальной точки, тогда путь подсети, связанный с C, также обновляется в таблице маршрутизации A.

В третий раз нужно запустить тот же алгоритм с C в качестве отправной точки и получить обновление пути подсети, относящегося к D.

Так как D является конечным маршрутом и нет других напрямую связанных маршрутов, алгоритм не продолжается и возвращается к E.

В четвертый раз, с E в качестве источника, алгоритм запускается и получается путь связанной подсети C. Если есть более короткий путь, таблица переадресации A будет обновлена ​​для использования оптимального пути.

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

Конечно, OSPF требует большей вычислительной мощности процессора и большего объема памяти. Таким образом, в целом они широко используются в Интернете, RIP используется провайдерами более низкого уровня, а OSPF используется провайдерами более высокого уровня.

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

связующий слой

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

Пакеты IP-данных сетевого уровня будут инкапсулированы в «кадры Ethernet» на канальном уровне, и его основная структура выглядит следующим образом:

image

Преамбула используется для синхронизации часов. Насколько я понимаю, она предназначена для того, чтобы отличить один кадр от другого. Адреса источника и получателя относятся к «Mac-адресу», также известному как физический адрес.

«Mac-адрес» — это уникальная идентификация хоста на аппаратном уровне, однозначно определяемая производителем. Что-то вроде этого:

34-E6-AD-17-A5-6B

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

Далее мы поговорим о протоколе, который завершает преобразование IP-адреса хоста в адрес Mac, который является протоколом разрешения адресов ARP.

Протокол ARP на самом деле немного похож на протокол DNS, введенный между нами на прикладном уровне.Введите адрес доменного имени и выведите IP-адрес, а для ARP введите IP-адрес и выведите Mac-адрес.

Каждый хост в сети, включая маршрутизаторы, имеет встроенный модуль ARP и таблицу ARP. Когда дейтаграмма поступает на канальный уровень, первое, что нужно сделать, это использовать IP-адрес назначения дейтаграммы в качестве входных данных, сначала запросить модуль ARP своего собственного хоста, и, если можно получить Mac-адрес хоста-получателя IP, затем инкапсулируйте Ethernet. Просто отправьте кадр на физический уровень и отправьте его.

Если таблица ARP локального компьютера не хранит Mac-адрес целевого IP-хоста, ему необходимо запросить другие хосты в той же сети.

Отправитель создаст специальный пакет ARP, исходный Mac-адрес — это Mac-адрес отправителя, Mac-адрес получателя — это широковещательный адрес: 255.255.255.255, а IP-адреса источника и получателя — это, по сути, специальный кадр Ethernet.

Таким образом, все хосты в сети получат этот пакет ARP, тогда все, что им нужно сделать, это открыть IP-адрес и проверить, совпадает ли он с их собственным IP-адресом, если да, ответить на пакет ARP и сообщить отправителю их собственный Mac-адрес.

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

В конце концов, отправитель получит желаемый Mac-адрес назначения и обновит свою таблицу ARP, затем инкапсулирует обычный кадр Ethernet и отправит его.

Поскольку Ethernet использует метод «широковещания», любой хост в той же подсети отправляет сообщение, и все остальные хосты получат его, но они будут совпадать, является ли Mac-адрес назначения их собственным, а если нет, они отбросят его. Это очень важно, важно.

Ну, до сих пор мы также кратко представили соответствующее содержание канального уровня, Что касается физического уровня, на самом деле нечего вводить, то есть передачу электрического сигнала 0 и 1.

Что касается всей пятиуровневой модели OSI, мы также завершили исследование сверху донизу. В следующей статье мы подробно рассмотрим «www.baidu.com». История всей компьютерной сети на самом деле немного запутана. Заголовок Вечеринка Последняя В этой статье представлен только полный процесс HTTP-запроса, извините!


Весь код, изображения, файлы в статье хранятся в облаке на моем GitHub:

(https://github.com/SingleYam/overview_java)

Добро пожаловать в публичный аккаунт WeChat: Gorky on the code, все статьи будут синхронизированы в публичном аккаунте.

image