9.1. Навіщо потрібні мережі

Управління апаратним забезпеченням надало камері способи спілкування з конкретним іншим пристроєм на конкретному іншому дроті. UART між камерою та одним супутнім модулем. I2C між камерою та датчиками, підключеними до тієї ж короткої шини. CAN між невеликою кількістю модулів, що мають одну надійну шину. Кожен випадок відповідає одній і тій самій схемі: дві сторони (або невелика відома група), одне спільне середовище, домовленість між ними про те, що означають байти на цьому середовищі.

9.1.1. Ця схема перестає масштабуватися

Схема точка-точка працює, доки обидва кінці знаходяться поруч, обидва кінці відомі заздалегідь, і скрипт може обрати, по якому дроту говорити. Щойно будь-яке з цих обмежень порушується, лише дротів стає недостатньо.

  • Багато контрагентів. Мережа з п’ятдесяти камер, що звітують одному серверу, не може бути з’єднана один до одного; на сервері недостатньо UART, і прокладання кабелів було б неможливим.

  • Контрагенти не на одному дроті. Камера на заводі та панель керування в офісі в іншій частині міста не можуть мати спільний послідовний кабель. Між ними має існувати якийсь шлях через інфраструктуру, яка вже з’єднує ці два будинки.

  • Контрагенти, невідомі заздалегідь. Камера, що публікує результати в хмару, не обирає сервер у схемі підключення; адреса хмари – це те, що скрипт шукає під час виконання і куди маршрутизує дані.

  • Багато програм на одному кабелі. Ноутбук сьогодні запускає браузер, програму чату, відеодзвінок і резервне копіювання – усі вони одночасно спілкуються через один і той самий мережевий інтерфейс. Дріт не може бути «власністю» однієї розмови, як це буває з UART.

Кожен з цих збоїв є різним видом проблеми адресації. Вирішення їх усіх разом потребує більшого, ніж дріт і швидкість передачі (бод).

9.1.2. Що таке мережа

Мережа – це інфраструктура, що дозволяє будь-якому з великої кількості комп’ютерів обмінюватися повідомленнями з будь-яким іншим, не потребуючи для кожної пари власного виділеного з’єднання. Три властивості роблять мережу чимось більшим, ніж великий послідовний кабель:

  • Спільне середовище. Багато пристроїв підключаються до одного кабелю, комутатора або радіоканалу. Вони чергуються або мультиплексують, щоб більш ніж одна розмова могла розміститися на одному фізичному з’єднанні.

  • Логічні адреси. Кожен пристрій має номер, що ідентифікує його незалежно від того, до якого кабелю він підключений. Надіслати повідомлення означає написати цей номер на повідомленні, а не підключити конкретний дріт.

  • Маршрутизація. Коли відправник і отримувач не знаходяться в одному локальному сегменті, інфраструктура між ними переносить повідомлення крок за кроком. Кінцеві точки не знають маршруту; вони знають лише адреси одне одного.

Ноутбук у офісній Wi-Fi-мережі, що звертається до сервера у віддаленому центрі обробки даних, використовує всі три. З’єднання Wi-Fi – це спільне радіосередовище; ноутбук і сервер мають власні логічні адреси; повідомлення прокладає шлях через будь-яку інфраструктуру між ними, пересилаючись один крок за раз. Користувач клацає посилання, ноутбук надсилає пакет, а мережа робить усе інше.

9.1.3. А як щодо камери?

Камера виконує точно таку саму роль у мережі, як і ноутбук. Вона отримує логічну адресу при приєднанні до мережі, адресує вихідні повідомлення логічним адресам інших пристроїв і дозволяє інфраструктурі їх маршрутизувати.

Те, що змінюється порівняно з розділами про управління апаратним забезпеченням, – це інтерфейс. Замість відкриття екземпляра UART та запису байтів до нього, скрипт відкриває сокет і записує байти до нього. Сокет є кінцевою точкою в мережі так само, як екземпляр UART є кінцевою точкою у дроті. Частини між сокетом і дротом – кадри, пакети, таблиці маршрутизації, комутатори, радіостанції – всі знаходяться нижче і здебільшого невидимі для коду Python.

Наступні сторінки розкривають ці частини шар за шаром, щоб абстракція «відкрити сокет і надіслати байти» здавалася природною, а не магічною.