Посмотр рубрик

Основные сетевые понятия

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

Сеть #

Сеть (Network, Net) - несколько устройств, соединённых для обмена данными по определённым правилам:

  • LAN (Local Area Network) - локальная сеть внутри квартиры, дома, офиса
  • WAN (Wide Area Network) - глобальная сеть, Интернет. Объединяет другие сети по всему миру, Интернет это буквально "сеть сетей"
  • VPN (Virtual Private Network) - виртуальная защищённая сеть, "туннель", проложенный через другую сеть. Например, сеть между двумя компьютерами через Интернет, а не просто по проводу: Hamachi или Radmin для игры по сети, своё облачное хранилище или просто доступ к домашней локальной сети из любой точки мира

WWW (World Wide Web) - "всемирная паутина", система веб-сайтов. Это не сам Интернет, а всего лишь его часть, отвечающая за открытие сайтов по "ссылкам"

Для соединения устройств используются:

  • Ethernet - самая распространённая технология для создания проводных сетей (витая пара, оптоволокно), которая определяет правила форматирования и передачи данных
  • WiFi (Wireless Fidelity) - технология беспроводной локальной сети на частотах 2.4, 5 и 6 ГГц

Роли #

В сети каждое устройство имеет свою роль:

  • Хост (Host) - любое устройство в сети, имеет свой адрес (IP), также может иметь hostname - человекочитаемое имя на латинице
  • Коммутатор (Switch) - соединяет устройства внутри локальной сети (квартира, офис)
  • Маршрутизатор, роутер (Router) - соединяет между собой сети, направляет трафик по оптимальному маршруту. Множество маршрутизаторов по всему миру и представляют собой Интернет: домашний роутер соединяет компьютеры и смартфоны в квартире, маршрутизатор в подъезде соединяет сети от квартир, маршрутизатор дома соединяет сети от подъездов и так далее
  • Шлюз (Gateway) - устройство, через которое одна сеть подключается к другой сети, причем может иметь другой протокол и тип трафика. Например, домашний роутер является шлюзом для соединения локальной сети с Интернет. Есть шлюзы для ZigBee устройств (стандарт беспроводной связи для умных устройств) - соединяют их с обычной домашней сетью
  • Точка доступа, AP (Access Point) - устройство, создающее сеть для WiFi устройств. К точке доступа можно подключиться, зная её имя - SSID (Service Set Identifier). Подключение может быть защищено паролем, здесь он называется PSK (Pre-Shared Key)
  • "Домашний" роутер - совмещает в себе коммутатор, маршрутизатор, шлюз и точку доступа, а также выполняет ряд других функций
  • Сервер (Server) - компьютер или программа, предоставляющая услуги другим устройствам в сети (общее определение). Более конкретные серверы: веб-сервер - по запросу отдаёт файлы сайта, которые затем отображаются в браузере, REST API сервер - принимает запросы в определенном формате и отвечает на них (Телеграм-бот, погодный сервис), отдельные типы серверов обслуживают электронную почту, файловые менеджеры, базы данных и многое другое
  • Клиент (Client) - приложение, которое подключается к серверу для запроса или отправки данных. Например, веб-браузер подключается к веб-серверу и запрашивает файл сайта

Параметры #

Чтобы устройства могли общаться в сети, у них и у сети есть набор параметров:

  • MAC адрес (Media Access Control) - уникальный идентификатор сетевого устройства - сетевой карты или WiFi чипа. Используется для низкоуровневой адресации и передачи данных внутри локальной сети. MAC кодируется 6 байтами, его принято записывать в HEX формате через двоеточие: A4:7B:1C:92:0F:8E
  • IP адрес (IP Address) - адрес устройства в сети, по которому к нему можно обратиться. Состоит из нескольких 8-бит чисел (0.. 255), одно число называется октетом. Бывает v4 и v6 - первый задаётся четырьмя октетами, второй - шестью. IPv4 принято записывать в десятичном виде через точку, например 192.168.1.3. IP адрес в локальной сети может выдаваться маршрутизатором автоматически при подключении устройства, такой адрес называется динамическим IP адресом. Также можно задать конкретный адрес в маршрутизаторе для этого устройства, это будет статический IP адрес. Сам маршрутизатор тоже имеет IP адрес, у домашнего роутера это обычно 192.168.x.x - по этому адресу можно зайти на сам роутер для его настройки через веб-интерфейс, по сути - обычный сайт, сервером которого является роутер. Адрес в локальной сети является приватным IP - по нему можно обратиться только из этой же сети. Публичные IP адреса доступны из Интернета, это адреса серверов сайтов, мессенджеров и прочих публичных сервисов. Ваш домашний роутер выходит в Интернет через адрес, который ему дал провайдер из своей сети. Обычно этот адрес относится к целому району города, т.е. это тоже приватный, "серый" IP адрес - к роутеру нельзя обратиться из интернета. За отдельную плату провайдер может выдать вам публичный, "белый" IP - тогда можно будет держать дома полноценный сервер
  • Маска подсети (Subnet Mask) определяет диапазон IP-адресов, относящихся к одной сети. Маска задаётся в роутере, узнать её можно только там. В IPv4 задаётся 4-мя октетами, например 255.255.255.0 (стандарт для домашнего роутера) означает, что в сети допустимы адреса x.x.x.0–255. Зная маску и любой IP адрес из сети можно вычислить диапазон адресов и широковещательный адрес этой сети
  • Порт (Port) - виртуальный "сетевой разъём", на который придут или с которого будут отправлены данные. Порт задаётся 16-битным числом (0.. 65535), одно устройство может иметь 65536 портов. Порты могут обслуживаться разными приложениями и работать на разных сетевых протоколах. Чтобы обратиться к конкретному приложению "на том конце" IP адреса, нужно знать также порт, который этим приложением обслуживается. Порт принято указывать в десятичном виде после IP адреса через двоеточие: 192.168.1.2:1234. Один сервер может держать несколько веб-сайтов, обслуживать онлайн-игры и другие сервисы (облачные хранилища, API серверы, базы данных и т.д.) и каждое такое приложение будет "сидеть" на своём порту. Примеры стандартных портов: HTTP - 80, HTTPS - 443, SSH - 22, сервер Minecraft - 25565

Технологии и протоколы #

Передача данных #

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

  • UDP (User Datagram Protocol) - самый простой протокол, в котором пакет данных просто отправляется получателю (IP адрес и порт) без гарантии доставки, соблюдения очередности пакетов, обратной связи и шифрования. Это делает UDP самым ненадёжным, но самым быстрым способом связи с минимальной задержкой, поэтому часто используется в онлайн-играх, звонках и стриминге. В то же время, поверх UDP можно организовать более сложные и надёжные протоколы с гарантией доставки и шифрованием, так например работает QUIC
  • TCP (Transmission Control Protocol) - самый распространенный способ передачи данных по сети, поверх него работает множество других протоколов. Сам TCP просто передаёт данные в том виде, в котором они есть - текстовые или бинарные, неважно. В TCP строгая топология - есть сервер, к которому подключается клиент. После успешного подключения они могут обмениваться данными, протокол гарантирует целостность данных, очерёдность доставки и обработку ошибок на всех этапах взаимодействия. TCP поддерживает шифрование - SSL или TLS
  • HTTP (HyperText Transfer Protocol) - текстовый протокол поверх TCP, на нём работают сайты и многие другие Интернет-сервисы: из браузера мы отправляем запрос на HTTP-сервер, который отвечает полотном текста, содержащим служебную информацию (заголовки) и код страницы сайта (тело), после чего сервер обычно отключает клиента - соединение завершается. Поддерживает шифрование - HTTPS
  • WebSocket, WS - лёгкий протокол поверх TCP, позволяющий серверу и клиенту обмениваться сообщениями в обе стороны в любом порядке и виде (текстом или бинарно), без переподключения и без лишних служебных данных. Используется в веб-сервисах, где нужно быстрое и частое обновление информации: браузерные игры, мессенджеры, торговые платформы. Поддерживает шифрование - WSS (WebSocket Secure)
  • MQTT (Message Queuing Telemetry Transport) - протокол связи, в котором устройства обмениваются данными через дополнительное звено - брокера. Работает поверх TCP или WS, в том числе с шифрованием. Брокер - сервер в локальной или глобальной сети, занимается хранением и пересылкой сообщений от клиентов. Если брокер подключен к глобальной сети, то устройства могут общаться через интернет. Например - умная розетка на даче подключена к интернету через 4G модем, а смартфон - в городе через домашний WiFi. MQTT используется в интернете вещей, т.к. он очень экономичный - постоянно в сети находится только брокер, а устройства могут иногда заходить в сеть и проверять, если ли для них "новые сообщения"
  • FTP (File Transfer Protocol) - сетевой протокол, предназначенный для передачи файлов между компьютерами в сети, работает как "файловый менеджер": можно просматривать папки и файлы, скачивать и загружать их
  • SSH (Secure Shell) - защищённый дистанционный командный интерфейс, "консоль". Служит для управления удалённым компьютером, в том числе для передачи файлов - SFTP
  • SMTP (Simple Mail Transfer Protocol) - отправка электронной почты
  • IMAP (Internet Message Access Protocol), POP3 (Post Office Protocol version 3) - получение электронной почты

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

Другие протоколы #

  • DHCP (Dynamic Host Configuration Protocol) - сетевой протокол, который автоматически назначает устройствам в сети IP адрес, маску подсети, шлюз по умолчанию и DNS-серверы. Когда вы подключаете смартфон к WiFi-роутеру, в статусе может быть написано "получение IP адреса" - здесь и работает DHCP
  • DNS (Domain Name System) - нужен для получения IP адреса по доменному имени сайта, например google.com на момент написания урока имел адрес 108.177.14.113 - можно открыть его в браузере и откроется Гугл. По сути это таблица, в которой хранятся IP адреса всех существующих сайтов - как в телефонной книге. Недавно посещённые адреса могут кешироваться в браузере, операционной системе или роутере, а так запрос отправляется к Интернет-провайдеру
  • mDNS (multicast Domain Name System) - система, позволяющая устройствам в локальной сети обращаться друг к другу не по IP адресу (который может меняться), а по имени хоста с доменом .local, например my-computer.local
  • SSDP (Simple Service Discovery Protocol) - сетевой протокол, который позволяет устройствам в локальной сети находить друг друга (т.н. сетевое обнаружение). Так компьютер находит принтер или сетевой накопитель, а умный телевизор - компьютер или домашний медиасервер для воспроизведения контента
  • NTP (Network Time Protocol) - сетевой протокол, используемый для синхронизации времени между устройствами, точное время получается через иерархию серверов от опорного источника - GPS или атомных часов

Языки #

  • API (Application Programming Interface) - программный интерфейс приложения, набор правил и способов, который позволяет разным программам общаться друг с другом и обмениваться данными. Другими словами, одно приложение отправляет данные другому приложению в специальном формате, этот формат и называется API
  • REST API (Representational State Transfer API) - набор принципов для создания программных интерфейсов (API), позволяющих приложениям взаимодействовать друг с другом через протокол HTTP. Другими словами, это как "сайт", только для приложений - при запросе выдаёт информацию в удобном для обработки программой виде, а также может принимать её. Например - сервис прогноза погоды или Телеграм-бот, с такими сервисами ESP может работать и это часто используется на практике
  • SQL (Structured Query Language) - язык структурированных запросов, используется для управления и взаимодействия с базами данных (БД) в системах управления базами данных (СУБД) - чтение, добавление, удаление, поиск, сортировка и прочее. В данном контексте ESP может обращаться к таким базам данных, либо сама обслуживать СУБД для внешних запросов
  • JSON (JavaScript Object Notation) - текстовый формат записи данных, позволяющий удобно передавать данные между приложениями, очень часто используется в REST API сервисах. Может содержать как одиночные именованные значения (цифры, текст, логика), так и массивы данных в любых сочетаниях, например: {"string": "hello", "int": 123, "array": [10, true, "text"]}
  • XML (eXtensible Markup Language) - текстовый язык разметки, часто используется в Интернете и "под капотом" в различных приложениях и форматах файлов. Состоит из тегов, которые могут иметь параметры и вкладываться друг в друга, образуя иерархию любой сложности: <parent name="Alex"> <child1 /> <child2 /> </parent>
  • HTML (HyperText Markup Language) - язык разметки на основе XML, используется для создания структуры и наполнения веб-страниц
  • CSS (Cascading Style Sheets) - язык стилей, используется для оформления веб-страниц: цвета, размеры, отступы, эффекты, анимации и т.д.
  • JavaScript, JS - язык программирования, который выполняется браузером и может менять код страницы и стили, делать запросы к серверам и многое другое, позволяет делать сложные динамичные сайты и веб-приложения

Модель OSI #

Open Systems Interconnection model - сетевая модель, которая объединяет перечисленные выше технологии и протоколы взаимодействия систем по уровням - OSI Layers:

  1. Физический (Physical) - уровень передачи электрических сигналов и битов данных, например USB, витая пара, оптоволокно, радио
  2. Канальный (Data Link) - уровень физической адресации и передачи блоков данных. Здесь работают Ethernet, MAC-адреса, сетевые карты
  3. Сетевой (Network) - уровень маршрутизации и передачи пакетов данных по IP адресам
  4. Транспортный (Transport) - уровень передачи данных между конечными точками, например TCP, UDP, шифрование
  5. Сеансовый (Session) - уровень, на котором устанавливается, поддерживается и завершается само соединение, например для передачи по TCP
  6. Представления (Presentation) - этот уровень отвечает за преобразование форматов и декодирование информации из соседних уровней, например перевод кодировок текста, распаковка сжатых HTML страниц
  7. Прикладной (Application) - этот уровень обеспечивает взаимодействие пользовательских приложений с сетью. Здесь работают протоколы HTTP, SMTP, FTP, DNS и прочие верхнего уровня

Пример запроса #

Давайте рассмотрим, как происходит банальное открытие сайта в браузере:

  • Мы вводим в браузере доменное имя сайта, например google.com
  • При помощи DNS получаем IP адрес сервера, на котором находится сайт
  • Браузер формирует HTTP запрос и отправляет его на IP адрес сервера по TCP на 80 порт, запрос передаётся в роутер (шлюз). В запросе указан IP адрес компьютера или смартфона, как адрес отправителя
  • Роутер использует технологию NAT (Network Address Translation) и заменяет адрес отправителя на свой адрес, который ему выдал маршрутизатор подъезда/дома, но запоминает старый адрес отправителя в NAT таблице
  • Это повторяется по цепочке маршрутизаторов, пока не дойдет до одного из узлов, который сможет направить запрос на целевой IP адрес сервера
  • Запрос попадает на сервер или в дата-центр. На одном адресе может быть несколько сайтов, но в запросе указан конкретный домен - запрос передаётся соответствующему приложению (веб-сервер буквально запущен на компьютере как программа), которое обслуживает этот сайт
  • Веб-север выдаёт нужный ответ и отправляет его обратно - это может быть как готовый файл, так может и собираться сервером динамически из шаблонов и запросов к базе данных. Например, текст данного урока находится в базе данных - сервер обращается к ней и вставляет полученный текст в шаблон страницы урока
  • Ответ проходит через всю цепочку маршрутизаторов в обратном порядке - каждый запомнил адрес отправителя и пересылает ему ответ
  • Последний в этом списке - наш домашний роутер, он получает ответ и отправляет его на на компьютер, браузер получает файл сайта и отображает его

Точно так же происходит запрос к другим серверам в Интернете (почта, API), отличаются только порты и сам тип сервера.

Полезные страницы #

(5 голосов)
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх