Прежде чем начать погружаться в работу с сетью на ESP, предлагаю коротко ознакомиться с основными понятиями и механизмами этой самой сети. Некоторые из них разберём более подробно в следующих уроках, а также они могут встретиться в тексте других статей и примеров.
Сеть #
Несколько устройств (ПК, смартфон, принтер, роутер), соединённых для обмена данными по определённым правилам, образуют сеть (Network, Net):
- LAN (Local Area Network) - локальная сеть внутри квартиры, дома, офиса
- WAN (Wide Area Network) - глобальная сеть, Интернет. Объединяет другие сети по всему миру, Интернет это буквально "сеть сетей"
- VPN (Virtual Private Network) - виртуальная защищённая сеть, "туннель", проложенный через другую сеть. Например, сеть между двумя компьютерами через Интернет, а не просто по проводу: Hamachi или Radmin для игры по сети, своё облачное хранилище или просто доступ к домашней локальной сети из любой точки мира
WWW (World Wide Web) - "всемирная паутина", система веб-сайтов. Это не сам Интернет, а всего лишь его часть, отвечающая за открытие сайтов по "ссылкам"
Для соединения устройств используются:
- Ethernet - самая распространённая технология для создания проводных сетей (витая пара, оптоволокно), которая определяет правила форматирования и передачи данных
- WiFi (Wi-Fi) - технология беспроводной локальной сети семейства IEEE 802.11, обычно на частотах 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) - идентификатор сетевого интерфейса, который используется для адресации внутри канального сегмента сети. Обычно имеет длину 6 байт и записывается в HEX-формате через двоеточие:
A4:7B:1C:92:0F:8E. Заводской MAC должен быть уникальным, но адрес также может назначаться программно или временно рандомизироваться, поэтому считать его абсолютно неизменным нельзя - IP адрес (IP Address) - адрес сетевого интерфейса, по которому к нему можно обратиться. IPv4 задаётся четырьмя октетами от 0 до 255, например
192.168.1.3. IPv6 имеет длину 128 бит и обычно записывается восемью группами по четыре шестнадцатеричные цифры, причём нулевые группы можно сокращать. Адрес в локальной сети часто выдаётся DHCP-сервером автоматически, такой адрес называют динамическим. Постоянный адрес можно настроить на самом устройстве или закрепить за ним на DHCP-сервере роутера. Частные IPv4-адреса используются внутри локальных сетей и сами по себе не маршрутизируются через Интернет. Для входящих подключений нужен публичный адрес и соответствующая настройка роутера, а у многих провайдеров используется CGNAT - общий публичный адрес сразу для нескольких абонентов - Маска подсети (Subnet Mask) определяет, какая часть IPv4-адреса относится к сети, а какая - к устройству. Она входит в сетевые настройки устройства и часто выдаётся вместе с адресом по DHCP. Например, адрес
192.168.1.3с маской255.255.255.0, она же/24, относится к сети192.168.1.0/24: адрес.0обозначает саму сеть,.255обычно является широковещательным, а устройства используют адреса.1..254 - Порт (Port) - 16-битный номер от 0 до 65535, который вместе с IP-адресом и транспортным протоколом указывает на конкретную сетевую службу или соединение. Порты могут обслуживаться разными приложениями. Адрес с портом часто записывают через двоеточие:
192.168.1.2:1234. Один сервер может держать несколько веб-сайтов, онлайн-игры и другие сервисы, причём несколько сайтов могут делить один порт благодаря протоколу верхнего уровня. Примеры стандартных портов: HTTP - 80, HTTPS - 443, SSH - 22, сервер Minecraft - 25565
У TCP и UDP отдельные пространства портов: один и тот же номер TCP-порта и UDP-порта может одновременно использоваться разными службами.
Технологии и протоколы #
Передача данных #
Общее назначение сети - обмен данными между устройствами, для этого используются различные сетевые протоколы, т.е. данные передаются в определённом виде согласно своей спецификации:
- UDP (User Datagram Protocol) - простой протокол, в котором датаграмма отправляется получателю без гарантии доставки, соблюдения очерёдности, обратной связи и шифрования. У UDP меньше служебных расходов и нет установки соединения, поэтому он хорошо подходит для онлайн-игр, звонков, стриминга и собственных протоколов с минимальной задержкой. Поверх UDP можно организовать более сложный протокол с гарантией доставки и шифрованием, так, например, работает QUIC
- TCP (Transmission Control Protocol) - самый распространенный способ передачи данных по сети, поверх него работает множество других протоколов. TCP передаёт непрерывный поток байтов, гарантирует их целостность и очерёдность, повторяет потерянные сегменты и управляет скоростью передачи. Границы отдельных сообщений TCP не сохраняет, их должен задавать протокол верхнего уровня. TCP поддерживает шифрование - SSL или TLS
- HTTP (HyperText Transfer Protocol) - протокол запросов и ответов, на нём работают сайты и многие другие Интернет-сервисы. Ответ содержит служебные заголовки и тело с текстовыми или бинарными данными. Современный HTTP обычно сохраняет соединение для следующих запросов, а HTTP/2 умеет вести несколько обменов одновременно. Поддерживает шифрование - HTTPS
- WebSocket, WS - лёгкий протокол поверх TCP, позволяющий серверу и клиенту обмениваться сообщениями в обе стороны в любом порядке и виде (текстом или бинарно), без переподключения и без лишних служебных данных. Используется в веб-сервисах, где нужно быстрое и частое обновление информации: браузерные игры, мессенджеры, торговые платформы. Поддерживает шифрование - WSS (WebSocket Secure)
- MQTT (Message Queuing Telemetry Transport) - протокол связи, в котором клиенты публикуют сообщения в темы и подписываются на нужные темы через дополнительное звено - брокера. Обычно работает поверх TCP, может использовать TLS и WebSocket. Брокер пересылает сообщения активным подписчикам, а хранение последнего сообщения, очередей для отключённых клиентов и гарантии доставки зависят от настроек QoS, retained-сообщений и сессии. 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-адресов сайта. Один домен может иметь несколько IPv4- и IPv6-адресов, а один IP может обслуживать много доменов. Ответы кешируются на заданное время, а запрос обычно отправляется настроенному DNS-резолверу - провайдера, роутера или публичного сервиса
- 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:
- Физический (Physical) - уровень передачи электрических сигналов и битов данных, например USB, витая пара, оптоволокно, радио
- Канальный (Data Link) - уровень физической адресации и передачи блоков данных. Здесь работают Ethernet, MAC-адреса, сетевые карты
- Сетевой (Network) - уровень маршрутизации и передачи пакетов данных по IP адресам
- Транспортный (Transport) - уровень передачи данных между конечными точками, например TCP и UDP
- Сеансовый (Session) - уровень управления сеансом обмена. В реальном стеке TCP/IP его функции обычно распределены между транспортным протоколом и приложением
- Представления (Presentation) - этот уровень отвечает за преобразование форматов и декодирование информации из соседних уровней, например перевод кодировок текста, распаковка сжатых HTML страниц
- Прикладной (Application) - этот уровень обеспечивает взаимодействие пользовательских приложений с сетью. Здесь работают протоколы HTTP, SMTP, FTP, DNS и прочие верхнего уровня
Пример запроса #
Давайте рассмотрим, как происходит банальное открытие сайта в браузере:
- Мы вводим в браузере доменное имя сайта, например
google.com - При помощи DNS получаем IP адрес сервера, на котором находится сайт
- Браузер устанавливает защищённое TCP-соединение с сервером, обычно на порт 443, выполняет обмен TLS и отправляет HTTP-запрос. IP-адрес отправителя находится не внутри HTTP-запроса, а в заголовке IP-пакета
- Домашний роутер обычно использует NAT (Network Address Translation): заменяет частный адрес и порт отправителя на свой внешний адрес и запоминает соответствие в таблице
- Дальше обычные маршрутизаторы передают пакеты к следующему узлу по таблицам маршрутизации. Они не обязаны выполнять NAT и не запоминают путь каждого запроса
- Запрос попадает на сервер или в дата-центр. На одном адресе может быть несколько сайтов, но в запросе указан конкретный домен - запрос передаётся соответствующему приложению (веб-сервер буквально запущен на компьютере как программа), которое обслуживает этот сайт
- Веб-север выдаёт нужный ответ и отправляет его обратно - это может быть как готовый файл, так может и собираться сервером динамически из шаблонов и запросов к базе данных. Например, текст данного урока находится в базе данных - сервер обращается к ней и вставляет полученный текст в шаблон страницы урока
- Ответ маршрутизируется обратно к внешнему адресу роутера, причём конкретный путь может отличаться от пути запроса
- Домашний роутер находит запись в таблице NAT и отправляет ответ нужному устройству, а браузер обрабатывает полученные данные и при необходимости запрашивает остальные ресурсы страницы
Точно так же происходит запрос к другим серверам в Интернете (почта, API), отличаются только порты и сам тип сервера.
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)
- Поддержать автора за работу над уроками


