Прежде чем начать погружаться в работу с сетью на 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:
- Физический (Physical) - уровень передачи электрических сигналов и битов данных, например USB, витая пара, оптоволокно, радио
- Канальный (Data Link) - уровень физической адресации и передачи блоков данных. Здесь работают Ethernet, MAC-адреса, сетевые карты
- Сетевой (Network) - уровень маршрутизации и передачи пакетов данных по IP адресам
- Транспортный (Transport) - уровень передачи данных между конечными точками, например TCP, UDP, шифрование
- Сеансовый (Session) - уровень, на котором устанавливается, поддерживается и завершается само соединение, например для передачи по TCP
- Представления (Presentation) - этот уровень отвечает за преобразование форматов и декодирование информации из соседних уровней, например перевод кодировок текста, распаковка сжатых HTML страниц
- Прикладной (Application) - этот уровень обеспечивает взаимодействие пользовательских приложений с сетью. Здесь работают протоколы HTTP, SMTP, FTP, DNS и прочие верхнего уровня
Пример запроса #
Давайте рассмотрим, как происходит банальное открытие сайта в браузере:
- Мы вводим в браузере доменное имя сайта, например
google.com - При помощи DNS получаем IP адрес сервера, на котором находится сайт
- Браузер формирует HTTP запрос и отправляет его на IP адрес сервера по TCP на 80 порт, запрос передаётся в роутер (шлюз). В запросе указан IP адрес компьютера или смартфона, как адрес отправителя
- Роутер использует технологию NAT (Network Address Translation) и заменяет адрес отправителя на свой адрес, который ему выдал маршрутизатор подъезда/дома, но запоминает старый адрес отправителя в NAT таблице
- Это повторяется по цепочке маршрутизаторов, пока не дойдет до одного из узлов, который сможет направить запрос на целевой IP адрес сервера
- Запрос попадает на сервер или в дата-центр. На одном адресе может быть несколько сайтов, но в запросе указан конкретный домен - запрос передаётся соответствующему приложению (веб-сервер буквально запущен на компьютере как программа), которое обслуживает этот сайт
- Веб-север выдаёт нужный ответ и отправляет его обратно - это может быть как готовый файл, так может и собираться сервером динамически из шаблонов и запросов к базе данных. Например, текст данного урока находится в базе данных - сервер обращается к ней и вставляет полученный текст в шаблон страницы урока
- Ответ проходит через всю цепочку маршрутизаторов в обратном порядке - каждый запомнил адрес отправителя и пересылает ему ответ
- Последний в этом списке - наш домашний роутер, он получает ответ и отправляет его на на компьютер, браузер получает файл сайта и отображает его
Точно так же происходит запрос к другим серверам в Интернете (почта, API), отличаются только порты и сам тип сервера.
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками

