В ранние дни телефонной системы каждый телефон был подключен физическим проводом к центральной телефонной станции. Если вы хотели позвонить другу, находящемуся поблизости, вы поднимали трубку, просили оператора станции соединить вас, и оператор физически создавал (с помощью штекеров и розеток) выделенное соединение между вашим телефоном и телефоном вашего друга.
Сегодня, вместо того чтобы совершать телефонный звонок по временному выделенному соединению, мы можем совершить видеозвонок из нашего дома в любую точку мира по постоянной сети проводов. Провод не указывает данным, куда идти — данные сами направляют себя в процессе, называемом пакетной коммутацией. Хотя множество технологий со временем внесли свой вклад в то, что мы называем «интернетом», пакетная коммутация — это технология, которая одна начала это всё.
В сети с пакетной коммутацией сообщение, которое нужно отправить, делится на отдельные упорядоченные пакеты, каждый с собственным адресом отправителя и получателя. Эти пакеты направляются динамически в любую точку сети на основе этого адреса. Вместо того чтобы быть вынужденным слепо следовать по единственному выделенному соединению от приёмника к отправителю, пакеты могут принимать любой путь, который выбирает сеть. Фактически, пакеты в одной передаче сообщения могут принимать разные маршруты через сеть и быть переупорядочены компьютером-получателем при их прибытии.
Если старые телефонные сети были похожи на канатную дорогу, перевозящую пассажиров с одного конкретного места на вершине холма в одно конкретное место внизу, то сети с пакетной коммутацией похожи на систему автомагистралей, где автомобили, двигающиеся в разные пункты назначения, могут использовать одни и те же дороги.
Современная сеть с пакетной коммутацией обычно описывается с помощью модели взаимодействия открытых систем (OSI), которая состоит из семи слоёв маршрутизации, кодирования и обработки ошибок:
- Физический уровень (Physical layer)
- Канальный уровень (Data link layer)
- Сетевой уровень (Network layer)
- Транспортный уровень (Transport layer)
- Сеансовый уровень (Session layer)
- Уровень представления (Presentation layer)
- Прикладной уровень (Application layer)
Большинство разработчиков веб-приложений проводят свои дни полностью на 7-м уровне, прикладном уровне. Однако важно иметь хотя бы концептуальные знания о других слоях при скрапинге веба. Например, метод обнаружения веб-скрапинга TLS fingerprinting, вовлекает транспортный уровень.
Кроме того, знание обо всех уровнях инкапсуляции и передачи данных может помочь устранять ошибки в ваших веб-приложениях и веб-скраперах.
Сетевое взаимодействие и модель OSI
- Физический уровень (Physical layer): Этот уровень занимается передачей битов данных через физические средства — кабели, оптоволокно, беспроводные каналы. Здесь данные ещё не имеют структуры пакетов, они передаются как электрические, оптические или радио сигналы.
- Канальный уровень (Data link layer): На этом уровне данные организуются в кадры. Этот уровень обеспечивает надёжную передачу данных между двумя устройствами, например, между вашим компьютером и роутером. Примеры протоколов: Ethernet, Wi-Fi.
- Сетевой уровень (Network layer): Здесь данные упаковываются в пакеты, и задаётся маршрутизация — выбор пути, по которому данные будут переданы от отправителя к получателю. Протокол IP (Internet Protocol) работает на этом уровне.
- Транспортный уровень (Transport layer): Этот уровень контролирует качество передачи данных между двумя хостами. Протоколы как TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) обеспечивают, соответственно, надёжную и ненадёжную доставку данных.
- Сеансовый уровень (Session layer): Управляет сессиями связи между приложениями на разных хостах, например, устанавливает, управляет и завершает соединения.
- Уровень представления (Presentation layer): Обеспечивает независимость данных приложения от различий в представлении данных (синтаксисе). Примеры задач: преобразование данных, сжатие и шифрование.
- Прикладной уровень (Application layer): Это уровень, на котором работают приложения, с которыми вы взаимодействуете напрямую, как веб-браузеры, почтовые клиенты, системы мгновенного обмена сообщениями. Протоколы веб: HTTP, HTTPS, FTP.
Физический уровень
Физический уровень определяет, как информация физически передаётся с использованием электричества по Ethernet-проводу в вашем доме (или в любой локальной сети). Этот уровень определяет такие параметры, как уровни напряжения, которые кодируют биты 1 и 0, и скорость, с которой эти напряжения могут быть изменены (импульсированы). Также на этом уровне определяется, как интерпретируются радиоволны в Bluetooth и WiFi.
На этом уровне не используются программирование или цифровые инструкции, поскольку он полностью основан на физике и электрических стандартах.
Физический уровень — это самый нижний уровень модели OSI, и он занимается передачей необработанных битов данных через физическое устройство. Этот уровень включает в себя всё, что связано с непосредственной физической передачей данных:
- Передача данных через кабели (например, Ethernet):
- Сигналы и биты: На физическом уровне данные представляются последовательностями электрических сигналов. В случае Ethernet-кабеля, например, биты (0 и 1) кодируются изменениями напряжения в проводе.
- Уровни напряжения: Различные стандарты Ethernet используют разные методы для определения того, как биты представлены физическими сигналами. Например, некоторые стандарты определяют ‘1’ как высокий уровень напряжения, а ‘0’ — как низкий.
- Беспроводная передача (например, WiFi и Bluetooth):
- Радиоволны: Вместо использования электрических сигналов по проводам, беспроводные технологии используют радиоволны для передачи данных. Эти волны кодируют данные изменениями в амплитуде, частоте или фазе волн.
- Интерпретация сигналов: Устройства в беспроводной сети интерпретируют эти волны, преобразуя их обратно в электронные сигналы, которые затем обрабатываются на более высоких уровнях.
- Стандарты и спецификации:
- Ethernet: Для проводных сетей стандарты Ethernet определяют не только физические характеристики кабелей, но и то, как сигналы передаются по этим кабелям.
- Wi-Fi: Для беспроводных сетей стандарты, такие как IEEE 802.11, определяют параметры радиоволн, способы их модуляции и другие ключевые характеристики передачи данных.
Значение физического уровня в веб-скрапинге
Хотя физический уровень кажется далёким от веб-скрапинга, понимание этого уровня помогает осознать, как данные фактически передаются между вашим скрапером и веб-сервером. Все запросы и ответы, которые вы отправляете и получаете, в конечном итоге проходят через этот фундаментальный уровень:
- Прямое влияние: Физический уровень влияет на скорость и надежность вашего интернет-соединения. Низкое качество сигнала или плохое физическое соединение может привести к медленной или ошибочной передаче данных.
- Отладка и устранение неполадок: Если ваш веб-скрапер сталкивается с проблемами сетевой задержки или потерей пакетов, понимание физического уровня может помочь в диагностике. Например, проблемы с Ethernet-кабелем или Wi-Fi сигналом могут быть причиной.
Понимание физического уровня даёт полную картину того, как работает сеть, и помогает в разработке более эффективных и надежных веб-скраперов, учитывая все аспекты передачи данных.
Канальный уровень
Канальный уровень (Data Link Layer) определяет, как информация передается между двумя узлами в локальной сети, например, между вашим компьютером и роутером. Он определяет начало и конец одной передачи данных и обеспечивает коррекцию ошибок, если передача была потеряна или искажена.
На этом уровне пакеты оборачиваются в дополнительный «цифровой конверт», содержащий информацию о маршрутизации, и называются кадрами (frames). Когда информация в кадре больше не нужна, она извлекается из кадра и отправляется по сети в виде пакета.
Важно отметить, что на канальном уровне все устройства в сети получают одни и те же данные одновременно — на самом деле нет «коммутации» или контроля над тем, куда идут данные. Однако устройства, которым данные не адресованы, обычно игнорируют эти данные и ждут, пока им придет что-то, предназначенное для них.
Канальный уровень — это второй уровень модели OSI, и он занимается передачей данных между двумя устройствами, которые находятся в одной и той же сети. Он обеспечивает точную передачу данных от одного узла к другому и управляет ошибками передачи:
- Кадры (Frames):
- Формирование кадров: На канальном уровне пакеты данных из сетевого уровня упаковываются в кадры. Каждый кадр содержит полезные данные (payload), а также служебные данные, такие как адреса отправителя и получателя в пределах локальной сети, и информацию для проверки ошибок.
- Обработка ошибок: Кадры содержат также проверочные суммы (например, CRC — Cyclic Redundancy Check), которые используются для обнаружения ошибок в данных. Если ошибка обнаружена, данные могут быть запросены заново.
- Адресация на канальном уровне:
- MAC-адреса (Media Access Control): Каждое устройство в локальной сети имеет уникальный MAC-адрес, который используется на канальном уровне для идентификации отправителя и получателя данных внутри сети.
- Типы канального уровня:
- Ethernet: Наиболее распространенная технология канального уровня для проводных сетей.
- Wi-Fi: Используется для беспроводных локальных сетей; работает на канальном уровне с аналогичными принципами, что и Ethernet, но в беспроводной среде.
- Протоколы канального уровня:
- IEEE 802.3 (Ethernet): Стандарт для проводных сетей.
- IEEE 802.11 (Wi-Fi): Стандарт для беспроводных сетей.
Значение канального уровня в веб-скрапинге
Хотя канальный уровень может показаться отдаленным от задач веб-скрапинга, он играет ключевую роль в обеспечении надежной и эффективной передачи данных между вашим скрапером и веб-сервером:
- Надежность передачи данных: Канальный уровень обеспечивает основу для надежной передачи данных в локальной сети. Ошибки, обнаруженные на этом уровне, могут быть исправлены без повторной передачи данных по всему Интернету, что уменьшает задержки и повышает производительность.
- Сетевая отладка: Понимание канального уровня помогает диагностировать и устранять проблемы сетевой передачи данных, такие как коллизии в сети Ethernet или проблемы с сигналом Wi-Fi.
- Масштабирование скраперов: Понимание того, как работает канальный уровень, важно для масштабирования веб-скраперов, особенно когда они работают в распределенных сетях или кластерах.
Понимание канального уровня помогает в разработке более надежных и эффективных веб-скраперов, учитывая все ключевые аспекты передачи данных в локальной сети.
Сетевой уровень
Сетевой уровень — это место, где происходит коммутация пакетов, а следовательно, и работа «интернета». Это уровень, который позволяет пакетам от вашего компьютера быть перенаправленными роутером и достичь устройств, находящихся за пределами их непосредственной сети.
Сетевой уровень включает в себя часть «Internet Protocol» (IP) протокола «Transmission Control Protocol/Internet Protocol» (TCP/IP). Именно в IP мы получаем IP-адреса. Например, мой IP-адрес в глобальном интернете в настоящее время — 46.191.191.87. Это позволяет любому компьютеру в мире отправлять данные мне, а мне — отправлять данные на любой другой адрес с моего собственного адреса.
Сетевой уровень — это третий уровень модели OSI, и он играет ключевую роль в доставке пакетов данных из одной сети в другую через процесс, называемый маршрутизацией. Основной протокол на этом уровне — IP (Internet Protocol).
- IP-адреса:
- Глобальная уникальность: Каждое устройство, подключенное к интернету, имеет уникальный IP-адрес, который используется для идентификации устройства в глобальной сети. IP-адреса бывают двух версий — IPv4 и IPv6.
- IPv4: Состоит из 4 байтов (например, 192.168.1.1), общее количество адресов ограничено.
- IPv6: Состоит из 16 байтов (например, 2001:0db8:85a3:0000:0000:8a2e:0370:7334), предоставляет практически неограниченное количество уникальных адресов.
- Маршрутизация:
- Функция маршрутизации: Сетевой уровень управляет маршрутами, по которым пакеты данных отправляются из одной сети в другую. Роутеры — основные устройства, работающие на сетевом уровне, определяют наилучший путь для каждого пакета.
- Таблицы маршрутизации: Роутеры используют таблицы маршрутизации для определения, куда следует отправить пакет дальше на его пути к конечному получателю.
- Протоколы сетевого уровня:
- IP (Internet Protocol): Основной протокол, который отвечает за доставку пакетов от отправителя к получателю, используя IP-адреса.
- ICMP (Internet Control Message Protocol): Используется для отправки сообщений об ошибках и операционной информации (например, при использовании команды
ping
).
- Фрагментация и сборка пакетов:
- Фрагментация: Если пакет слишком велик для передачи через какой-то сегмент сети, он может быть разбит на более мелкие фрагменты на сетевом уровне. Эти фрагменты пересылаются отдельно и собираются в исходный пакет на стороне получателя.
- Сборка: Процесс восстановления оригинального пакета из его фрагментов на стороне получателя.
Значение сетевого уровня в веб-скрапинге
Сетевой уровень крайне важен для веб-скрапинга, поскольку именно здесь определяется, как данные достигают целевого веб-сервера и возвращаются обратно:
- Глобальная доступность: Понимание IP-адресации помогает в организации запросов к веб-серверам со всего мира и управлении IP-адресами скраперов (например, при использовании прокси-серверов для изменения IP-адреса скрапера).
- Обработка сетевых задержек и потерь: Понимание маршрутизации и потенциальных проблем на сетевом уровне позволяет оптимизировать скраперы для работы в условиях нестабильной сети, минимизируя потери данных и задержки.
- Масштабирование и распределение: Знание сетевого уровня полезно при масштабировании веб-скраперов для работы в распределенных системах, где маршрутизация и эффективное использование сети могут значительно повысить производительность.
Это понимание сетевого уровня дает веб-скраперам возможность эффективно обращаться с данными на глобальном уровне, используя маршрутизацию и IP-адресацию для обеспечения надежной и эффективной передачи данных.
Транспортный Уровень
Уровень 4, транспортный уровень, занимается установлением соединения между конкретными сервисами или приложениями, работающими на разных компьютерах. Он не просто соединяет сами компьютеры, но и обеспечивает связь между конкретными приложениями. Этот уровень также отвечает за исправление ошибок и повторные попытки отправки данных, если это необходимо.
Например, протокол TCP очень требователен: он будет запрашивать повторную отправку любых недостающих пакетов данных, пока все они не будут корректно получены. TCP часто используется для передачи файлов, где важно, чтобы все части файла были получены в правильном порядке, иначе файл будет неработоспособным.
В отличие от TCP, протокол UDP (пользовательский дейтаграммный протокол) не столь строг и может пропускать недостающие пакеты данных, чтобы не прерывать поток данных. Это часто используется в видео- и аудиоконференциях, где временное снижение качества передачи данных предпочтительнее, чем задержки в разговоре.
Поскольку разные приложения на вашем компьютере могут одновременно иметь разные требования к надежности данных (например, вы можете одновременно совершать телефонный звонок и скачивать файл), транспортный уровень также использует понятие номера порта. Операционная система назначает каждому приложению или сервису, работающему на вашем компьютере, определённый порт, через который это приложение отправляет и принимает данные.
Этот порт обычно указывается в виде числа после IP-адреса, разделённого двоеточием. Например, запись 71.245.238.173:8080
означает, что приложение, которому операционная система назначила порт 8080, работает на компьютере с IP-адресом 71.245.238.173
.
Такие механизмы позволяют точно и гибко управлять передачей данных между разными приложениями и обеспечивать их корректное взаимодействие в сети.
Уровень Сессии
Уровень сессий отвечает за открытие и закрытие сессии между двумя приложениями. Эта сессия позволяет сохранять информацию о состоянии, включая данные о том, какая информация была отправлена, а какая ещё нет, а также данные о том, с каким компьютером происходит общение. Сессия обычно остаётся открытой столько, сколько требуется для завершения запроса данных, после чего закрывается.
Уровень сессий также позволяет повторно попытаться передать данные в случае кратковременного сбоя или разрыва соединения.
Сессии против Сессий
Сессии на уровне сессий в модели OSI отличаются от сессий и данных сессий, о которых обычно говорят веб-разработчики.
Переменные сессии в веб-приложении — это концепция на уровне приложений, которую реализует программное обеспечение веб-браузера. Эти переменные сессии в браузере остаются доступными столько времени, сколько это необходимо, или пока пользователь не закроет окно браузера.
В то же время, на уровне сессий в модели OSI сессия обычно продолжается только в течение времени, необходимого для передачи одного файла!
Это различие важно понимать, чтобы не путать долгосрочное хранение пользовательских данных в веб-приложениях с краткосрочными сессиями передачи данных, которые управляются на уровне сессий в модели OSI.
Уровень представления
Уровень представления отвечает за преобразование входящих данных из последовательности символов в формат, который может понять и с которым может работать приложение. Этот уровень также занимается кодированием символов и сжатием данных. Уровень представления определяет тип входящих данных: например, являются ли они изображением в формате PNG или веб-страницей в формате HTML, и соответствующим образом передаёт эти данные на уровень приложения.
На этом уровне происходят важные процессы, которые обеспечивают корректное отображение и использование данных:
- Преобразование данных: Уровень представления может преобразовывать данные из одного формата в другой, чтобы упростить их обработку приложениями. Например, он может преобразовать данные из бинарного формата в текстовый (или наоборот), что важно при работе с различными мультимедийными файлами и документами.
- Кодирование символов: Этот уровень управляет процессом кодирования символов, например, преобразованием текста из кодировки UTF-8 в UTF-16. Это обеспечивает корректное отображение текста на разных устройствах и в разных приложениях, учитывая особенности локальных настроек и языков.
- Сжатие данных: Уровень представления может сжимать данные перед их отправкой для уменьшения объёма передаваемой информации, что особенно актуально при передаче больших файлов, таких как видео, аудио или большие наборы данных. Сжатие помогает ускорить передачу данных и сократить использование сетевых ресурсов.
- Распознавание формата: Он определяет, в каком формате представлены данные (PNG, HTML, PDF и др.), что позволяет приложению корректно обработать полученную информацию. Это как раз то, что нужно для правильной работы веб-браузеров, текстовых редакторов и других приложений, работающих с разнообразными форматами данных.
Таким образом, уровень представления играет ключевую роль в подготовке данных к дальнейшей обработке на уровне приложения, обеспечивая необходимые преобразования и оптимизации. Это облегчает разработку приложений, позволяя разработчикам сосредоточиться на логике приложений, не углубляясь в детали передачи и представления данных на нижних уровнях.
Уровень приложения
Уровень приложения интерпретирует данные, закодированные уровнем представления, и использует их соответствующим образом для нужд приложения. Можно сказать, что уровень представления занимается преобразованием и идентификацией данных, в то время как уровень приложения занимается непосредственным «выполнением» действий с этими данными. Например, HTTP со своими методами и статусами является протоколом уровня приложения. В то же время более привычные JSON и HTML (поскольку это форматы файлов, определяющие способ кодирования данных) относятся к протоколам уровня представления.
На уровне приложения происходят следующие ключевые процессы:
- Интерпретация данных: Уровень приложения анализирует данные, полученные от уровня представления, и преобразует их в формат, с которым могут работать приложения. Это может включать разбор структурированных данных (например, JSON или XML) для использования в базах данных, веб-сервисах или пользовательских интерфейсах.
- Взаимодействие с пользователем: Этот уровень обеспечивает механизмы для взаимодействия с пользователем через графические интерфейсы, API или командные строки. Это позволяет пользователям управлять приложениями и получать необходимую информацию в удобной форме.
- Использование сетевых сервисов: Уровень приложения использует различные сетевые протоколы (например, HTTP, FTP, SMTP) для обмена данными с другими приложениями через сеть Интернет или локальные сети. Это включает в себя отправку запросов, получение ответов, обработку ошибок сетевого взаимодействия и т.д.
- Обработка и выполнение задач: Уровень приложения отвечает за выполнение конкретных задач, которые требуются от приложения, включая обработку бизнес-логики, выполнение расчётов, управление данными и многое другое.
- Работа с протоколами: Несмотря на то что JSON и HTML определяют способы кодирования данных, HTTP и другие подобные протоколы определяют «правила игры» для приложений, указывая, как данные должны быть отправлены, приняты, какие действия следует предпринять в ответ на различные сценарии и как сообщать о своём состоянии.
Примеры использования уровня приложения:
- Веб-браузеры используют HTTP для запроса веб-страниц, которые они затем отображают пользователям, интерпретируя HTML и применяя стили CSS.
- Почтовые клиенты используют протоколы SMTP, IMAP или POP3 для отправки и получения электронной почты.
- Файловые передачи могут использовать FTP или SFTP для загрузки и скачивания файлов через сеть.
Таким образом, уровень приложения является тем местом, где данные превращаются в информацию и функциональность, доступную пользователю, что делает его критически важным для создания эффективных и удобных компьютерных приложений и сервисов.