1. Принципы работы Интернета – Курс PHP

Основной областью применения языка программирования PHP является разработка веб-сайтов для Интернета. Позже мы узнаем, что Интернет поддерживает различные типы программ и протоколов. Все, что мы видим через браузеры Chrome или FireFox, используя компьютер или смартфон, относится к веб-части Интернета.

Разработка веб-сайтов является формой веб-программирования, и PHP является одним из первых языков, созданных специально для этой цели. Веб-сайты, по своей природе, являются распределенными программами, то есть программами, которые выполняются на нескольких компьютерах, соединенных сетью.

Однако существует и другая часть Интернета, где требуются специализированные программы, такие как мессенджеры (например, Telegram или WhatsApp), сетевые компьютерные игры или электронная почта. Хотя эти приложения могут использовать веб-приложения “под капотом”, они часто используют свои собственные протоколы обмена информацией, отличные от стандартных веб-протоколов.

Обычно веб-сайты доступны через веб-браузеры – специальные программы, позволяющие нам “путешествовать” по сети Интернет. Вместо браузеров могут быть использованы мобильные приложения или специализированные программы для определенных задач, например, для торговли на бирже.

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

Для обеспечения работы веб-сайтов требуется множество технологий. Поэтому, при изучении PHP недостаточно просто выучить сам язык программирования – необходимо ознакомиться с его технологическим окружением и, прежде всего, с тем, как работает Интернет.

Протоколы передачи данных

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

Упрощенно говоря, протокол – это набор правил, который позволяет мне, как системе, взаимодействовать в рамках сети и обмениваться данными в наиболее удобной форме для меня.

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

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

Для того чтобы мой браузер мог отобразить страницу сайта, он должен получить HTML-код этой страницы. Порядок запроса и получения такой страницы регламентируется протоколом HTTP (Hypertext Transfer Protocol, протокол передачи гипертекста).

Один протокол HTTP недостаточен для того, чтобы HTML-страница была запрошена и доставлена в браузер. В доставке участвуют несколько протоколов, которые решают проблемы на разных уровнях сети. Более того, пакеты информации в рамках протокола упаковываются в пакеты другого протокола, подобно матрешке.

Пакеты протоколов вложены друг в друга по принципу “матрешки”

На схеме, показанной на рисунке, сеть Интернет состоит из нескольких “уровней” или слоев. Всего их четыре, и именно из них состоит сеть Интернет:

  1. Канальный уровень – протоколы этого уровня определяют правила передачи информации на физическом уровне. Примером такого протокола является Ethernet, который используется для передачи информации по медным проводам. Но Ethernet не единственный протокол – существует множество протоколов для различных технологий передачи данных, таких как Wi-Fi и оптоволокно.
  2. Сетевой уровень – Интернет представляет собой объединение сетей, и на этом уровне решается проблема передачи информации из одной подсети в другую. Обычно здесь используется протокол IP (Internet Protocol, межсетевой протокол). Если вы встречаете понятие IP-адреса впервые, не беспокойтесь, мы познакомимся с ним позже.
  3. Транспортный уровень – играет важную роль в обеспечении доставки сообщений. Здесь возникает вопрос: как обеспечить надежную доставку данных? Для этого используются два основных протокола – UDP (User Datagram Protocol, протокол пользовательских датаграмм) и TCP (Transmission Control Protocol, протокол управления передачей данных). UDP предлагает не гарантированную доставку, в то время как TCP обеспечивает надежность передачи данных.
  4. Прикладной уровень – происходит обмен полезной информацией, который включает работу с почтовыми программами (SMTP, IMAP), веб-сайтами (HTTP), преобразованием доменных имен в IP-адреса (DNS) и другими процессами.

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

В ответ на ваш запрос веб-сервер отправит HTML-страницу. Эта страница будет упакована в пакеты и передана обратно по физическим каналам связи, таким как сетевой кабель или беспроводная сеть Wi-Fi. После доставки страница будет распакована на вашем компьютере, готовая к отображению и взаимодействию (см.рисунок).

Организация обмена данными в Интернете

Рассмотрение протоколов физического уровня выходит за рамки этого курса, так как этим занимаются сетевые администраторы. Как веб-разработчик, я, естественно, предполагаю, что Интернет будет работать надежно как на компьютере пользователя, так и на сервере с веб-сайтом. Однако для успешной разработки веб-сайтов нам необходимо иметь базовое представление о протоколах TCP/IP и более глубокое понимание прикладного протокола HTTP.

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

Семейство TCP/IP

На транспортном уровне Интернета обычно используются два протокола:

  • UDP (User Datagram Protocol) – используется для доставки информации в ситуациях, когда возможна потеря нескольких пакетов, например, в сетевых играх или при онлайн-вещании.
  • TCP (Transmission Control Protocol) – обеспечивает гарантированную доставку пакетов, где ни один байт не должен быть потерян, такие случаи включают обмен файлами и почтовыми сообщениями.

В рамках этого курса мы сосредоточимся на протоколе TCP, который является основным для веб-программирования. Нам не потребуется вмешательство в его работу, но важно понять его основные свойства:

  • Гарантированная корректная доставка данных до места назначения. Если связь не является полностью надежной, например, из-за помех или повреждений физической линии, потерянные фрагменты данных будут повторно отправляться, пока вся информация не будет полностью доставлена.
  • Передаваемая информация представлена в виде потока, подобно обмену файлами, что позволяет программам на разных компьютерах, подключенных к Интернету, обмениваться данными так же естественно, как если бы они находились на одном компьютере.
  • Протокол TCP/IP способен выбирать оптимальный путь для передачи данных между отправителем и получателем, учитывая статистическую информацию о работе сети и таблицы маршрутизации, даже при прохождении через множество промежуточных компьютеров.
  • При передаче данных они разбиваются на пакеты и доставляются по отдельности. Различные пакеты могут следовать разными маршрутами в Интернете, особенно если они проходят через множество серверов. Однако все пакеты гарантированно собираются в нужном порядке в месте назначения. В случае обнаружения потерянного пакета, принимающая сторона запрашивает повторную передачу от отправителя. Все это происходит автоматически без вмешательства программного обеспечения, использующего TCP.

На практике веб-программистам чаще всего приходится работать с протоколом IP.

Протокол IP

Сеть Интернет объединяет огромное количество компьютеров, и каждую секунду к ней подключаются новые. Для обмена информацией между компьютерами и их отличия друг от друга необходимо, чтобы каждый компьютер имел уникальный адрес в сети. За управление уникальными адресами в сети Интернет отвечает протокол IP, а сам адрес называется IP-адресом. Внешний вид IP-адреса представляет собой четыре числа, разделенные точками, каждое из которых является 8-разрядным числом (от 0 до 255).

Однако не все значения чисел допустимы в записи IP-адреса, так как некоторые из них используются для служебных целей. Например, адрес 127.0.0.1, который часто называют localhost, зарезервирован для обращения к локальной машине, то есть к самому компьютеру, с которого был произведен запрос. А число 255 соответствует широковещательной рассылке в пределах текущей подсети.

Теперь возникает вопрос: при наличии миллиардов компьютеров и устройств в Интернете (а ожидается, что их количество будет продолжать расти), как мы, обычные пользователи, в считанные секунды устанавливаем соединение с запрашиваемым компьютером? Как сеть Интернет определяет фактическое расположение компьютера, устанавливает связь и адекватно реагирует на неверный адрес? Ведь компьютер, с которым мы хотим связаться, может находиться за океаном, и путь к нему проходит через множество промежуточных серверов.

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

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

Каждый компьютер в окружении следует тому же плану. Он обращается к своим десяти соседям, спрашивая, слышали ли они что-нибудь о машине example.com. Этот процесс занимает еще 0,1 секунды. Таким образом, за 0,2 секунды мы уже проверяем 110 компьютеров (11 компьютеров умноженные на 10).

Однако это еще не все – процесс лавинообразно нарастает. Если мы учтем, что за примерно 1 секунду мы сможем “обратиться” к 11 × 10^9 компьютеров, то это будет в 11 раз больше, чем у нас есть на самом деле.

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

На самом деле, схема намного сложнее, чем представленная ранее. Отличия заключаются в том, что компьютеру не обязательно обращаться ко всем своим соседям. Ему достаточно связаться только с некоторыми из них. Для повышения скорости доступа, все IP-адреса делятся на четыре группы, известные как классы A, B, C и D подсетей. Однако, эти детали не представляют интереса для нас в данный момент, поэтому мы не будем останавливаться на них.

Доменное имя

Людям гораздо сложнее запоминать и оперировать числами, чем словами. Поэтому, вместо использования IP-адреса, такого как 178.248.232.209, при обращении к сайту используется символьное имя, которое гораздо проще запомнить, например, example.zxkill.ru. Это символьное обозначение для сайта называется доменным именем.

Для связи IP-адресов с доменными именами существует служба Интернета, называемая DNS (Domain Name System, система имен доменов). DNS является протоколом прикладного уровня, наряду с HTTP, о котором мы рассмотрим позже.

При использовании DNS каждый компьютер в сети может иметь не только IP-адрес, но и символическое имя. Символьное имя выглядит, например, как example.zxkill.ru. Это набор слов, разделенных точками (см. таблицу ниже). Каждое сочетание слов называется доменом N-го уровня, например, example.zxkill.ru является доменом третьего уровня.

3210
examplezxkillru.
Домены нулевого, первого, второго и третьего уровня

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

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

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

Как происходит поиск по DNS-адресу? Существуют специальные DNS-серверы, распределенные по всему миру, которые выполняют преобразование доменов в IP-адреса. Например, когда клиент запрашивает определение IP-адреса для машины www.zxkill.ru., запрос сначала направляется к корневому домену, который имеет имя “.”, точнее к программе DNS-сервера, запущенной на этом домене. Затем происходит аналогичный запрос к следующему уровню домена и так далее, пока не будет найден IP-адрес поддомена www в домене zxkill.ru.

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

Чтобы избежать перегрузки корневого домена “.”, практически все компьютеры в сети кешируют информацию о DNS-запросах и обращаются к корневому домену или доменам первого уровня только для обновления этого кеша. Например, если пользователь повторно обращается к www.zxkill.ru., сервер провайдера сразу же предоставит ему нужный IP-адрес, так как он сохранен в кеше запросов. Эта технология позволяет снизить нагрузку на DNS-серверы в Интернете. Однако она также имеет недостатки, включая возможность получения устаревших данных, особенно если хост zxkill.ru только что отключился или изменил свой IP-адрес. Поскольку кеш обновляется редко, такая ситуация может возникнуть.

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

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

Порт

Как я уже упоминал ранее, компьютер, который подключен к интернету (хост), обладает определенным IP-адресом, который может быть связан с доменным именем. Однако на таком компьютере может быть запущено несколько серверов, таких как веб-сервер для обработки запросов браузера и почтовый сервер для доставки электронной почты. Чтобы различать эти серверы, используется порт – уникальный идентификатор, который указывается при установке соединения с хостом.

Некоторые порты стандартизированы, например, порт 80 применяется для протокола HTTP (веб-сайты), а порт 22 – для SSH-сервера.

Порт указывается после IP-адреса или доменного имени, разделяя их двоеточием. Таким образом, вместо адреса zxkill.ru можно использовать https://zxkill.ru:80 или https://zxkill.ru:443. Порт 80 является стандартным для обмена данными с веб-сервером, а порт 443 – для защищенного SSL-соединения. В повседневной жизни, при использовании адресов, стандартные порты обычно не указываются, так как браузеры и другие сетевые клиенты автоматически назначают их. Однако, если сервер использует нестандартный порт (например, 4000), его нужно явно указать в адресе, например, http://localhost:4000.

Резюме

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

Подписывайтесь на мой телеграмм канал, чтобы оперативно узнавать о выходе новых уроков и не только https://t.me/SamuraisGoal

Заходите в чат для обсуждений https://t.me/SamuraisGoalChat

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *