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

Последние исследования показывают, что во втором квартале 2022 года среднее время, проведенное в Интернете на человека, составляло 397 минут (6 часов 37 минут) в день. Большая часть трафика, генерируемого обычным человеком, передается по протоколу HTTP, который образует так называемую всемирную паутину, обычно называемую паутиной. Интернет позволяет объектам данных, таким как веб-страницы, быть доступными в сети через веб-серверы, и к ним могут обращаться клиентские программы, такие как веб-браузеры. Но задумывались ли вы когда-нибудь, что на самом деле происходит, когда вы отправляете запрос на загрузку веб-страницы из своего браузера?

Утро

Представьте себе студента Диего, который подключает ноутбук к Ethernet-коммутатору своей школы и загружает веб-страницу (скажем, домашнюю страницу medium.com).

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

Ноутбук Диего создает сообщение запроса DHCP и помещает это сообщение в сегмент UDP. Затем сегмент UDP помещается в IP-датаграмму с широковещательным IP-адресом назначения (255.255.255.255) и исходным IP-адресом 0.0.0.0, поскольку у ноутбука Диего еще нет IP-адреса.

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

Маршрутизатор получает широковещательный кадр Ethernet, содержащий запрос DHCP, и дейтаграмма IP извлекается из кадра Ethernet. Широковещательный IP-адрес назначения дейтаграммы указывает, что эта дейтаграмма IP должна быть обработана протоколами верхнего уровня на этом узле, поэтому полезная нагрузка дейтаграммы (сегмент UDP) демультиплексируется до UDP, а сообщение запроса DHCP извлекается из сегмента UDP. Сервер DHCP теперь имеет сообщение запроса DHCP.

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

Ноутбук Диего получает кадр Ethernet, содержащий DHCP ACK, извлекает дейтаграмму IP из кадра Ethernet, извлекает сегмент UDP из дейтаграммы IP и извлекает сообщение DHCP ACK из сегмента UDP. Затем DHCP-клиент Diego записывает свой IP-адрес, IP-адрес своего DNS-сервера и IP-адрес шлюза-маршрутизатора по умолчанию.

Полдень

Чтобы веб-браузер мог отображать домашнюю страницу Medium, ему необходимо знать IP-адрес веб-сервера Medium. Протокол DNS используется для предоставления этой услуги преобразования имени в IP-адрес. Таким образом, ноутбук Диего создает сообщение запроса DNS, помещая строку medium.com в раздел вопросов сообщения DNS. Затем это DNS-сообщение помещается в сегмент UDP, который затем помещается в IP-датаграмму с IP-адресом назначения DNS-сервера, возвращенным в сообщении DHCP ACK.

Затем ноутбук Диего помещает дейтаграмму, содержащую сообщение запроса DNS, во фрейм Ethernet. Этот кадр будет отправлен (с адресацией на канальном уровне) на маршрутизатор-шлюз в сети школы Диего. Однако, несмотря на то, что ноутбук Диего знает IP-адрес шлюзового маршрутизатора школы через сообщение DHCP ACK, он не знает MAC-адрес шлюзового маршрутизатора. Чтобы получить MAC-адрес маршрутизатора-шлюза, ноутбук Диего должен будет использовать протокол ARP.

Ноутбук Диего создает сообщение запроса ARP с целевым IP-адресом шлюза по умолчанию, помещает сообщение ARP в кадр Ethernet с широковещательным адресом назначения (FF:FF:FF:FF:FF:FF) и отправляет кадр Ethernet на коммутатор, который доставляет кадр на все подключенные устройства. , включая шлюз-маршрутизатор.

Маршрутизатор шлюза получает кадр, содержащий сообщение запроса ARP, на интерфейсе школьной сети и обнаруживает, что целевой IP-адрес в сообщении ARP совпадает с IP-адресом его интерфейса. Таким образом, маршрутизатор шлюза подготавливает ответ ARP со своим MAC-адресом. Ноутбук Диего получает кадр, содержащий ответное сообщение ARP, и извлекает MAC-адрес маршрутизатора-шлюза из ответного сообщения ARP.

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

Вечер

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

Маршрутизатор в сети Comcast получает кадр, извлекает дейтаграмму IP, проверяет адрес назначения дейтаграммы и определяет исходящий интерфейс, по которому следует пересылать дейтаграмму на DNS-сервер, из своей таблицы переадресации, которая была заполнена внутридоменной дейтаграммой Comcast. протокола (например, RIP или OSPF), а также междоменного протокола Интернета, BGP.

В конце концов IP-датаграмма, содержащая DNS-запрос, поступает на DNS-сервер. DNS-сервер извлекает сообщение DNS-запроса, ищет имя medium.com в своей базе данных DNS и находит запись ресурса DNS, содержащую IP-адрес для medium.com (при условии, что она в настоящее время кэширована на DNS-сервере). DNS-сервер формирует ответное сообщение DNS, содержащее это сопоставление имени хоста с IP-адресом, и помещает ответное сообщение DNS в сегмент UDP, а также в сегмент IP-датаграммы, адресованной ноутбуку Диего.

Ноутбук Диего извлекает IP-адрес сервера medium.com из DNS-сообщения. Наконец, после большой работы, ноутбук Диего теперь готов связаться с сервером medium.com!

Ночь

Теперь, когда ноутбук Диего имеет IP-адрес medium.com, он может создать TCP-сокет, который будет использоваться для отправки HTTP-сообщения GET на medium.com. Таким образом, ноутбук Диего сначала создает сегмент TCP SYN, помещает сегмент TCP в IP-датаграмму с IP-адресом назначения medium.com, помещает дейтаграмму во фрейм с MAC-адресом назначения маршрутизатора-шлюза и отправляет кадр на коммутатор. .

В конце концов дейтаграмма, содержащая TCP SYN, поступает на medium.com. Сообщение TCP SYN извлекается из дейтаграммы и демультиплексируется в сокет приветствия. Сокет соединения создается для TCP-соединения между сервером Medium HTTP и ноутбуком Диего. Сегмент TCP SYNACK генерируется, помещается в дейтаграмму, адресованную ноутбуку Диего, и, наконец, помещается во фрейм канального уровня, соответствующий каналу, соединяющему medium.com с его маршрутизатором первого перехода.

Теперь, когда сокет на ноутбуке Диего готов отправлять байты на medium.com, браузер Диего создает сообщение HTTP GET, содержащее URL-адрес, который необходимо получить. Затем сообщение HTTP GET записывается в сокет, при этом сообщение HTTP GET становится полезной нагрузкой сегмента TCP. Сегмент TCP помещается в дейтаграмму, отправляется и доставляется на веб-сервер (HTTP).

Веб-сервер читает сообщение HTTP GET из сокета TCP, создает ответное сообщение HTTP, помещает запрошенное содержимое веб-страницы в тело сообщения ответа HTTP и отправляет сообщение в сокет TCP.

Дейтаграмма, содержащая ответное сообщение HTTP, пересылается через Medium, Comcast и школьные сети и поступает на ноутбук Диего. Программа веб-браузера Диего считывает HTTP-ответ из сокета, извлекает HTML-код веб-страницы из тела HTTP-ответа и, наконец, отображает веб-страницу! 🚀

Каким бы подробным ни казался приведенный выше пример, мы опустили ряд возможных дополнительных деталей и протоколов (например, NAT, работающий на школьном шлюзе, беспроводной доступ к школьной сети, протоколы безопасности для шифрования сегментов или дейтаграмм) и соображения. (веб-кэширование, иерархия DNS), с которыми можно столкнуться в общедоступном Интернете.

Если вы заинтересованы в более глубоком изучении компьютерных сетей, я настоятельно рекомендую ознакомиться с Компьютерные сети: нисходящий подход Джеймса Куроуза и Кита Росса, на котором основана эта статья!