9.1. Навіщо потрібні мережі¶
Управління апаратним забезпеченням надало камері способи спілкування з конкретним іншим пристроєм на конкретному іншому дроті. UART між камерою та одним супутнім модулем. I2C між камерою та датчиками, підключеними до тієї ж короткої шини. CAN між невеликою кількістю модулів, що мають одну надійну шину. Кожен випадок відповідає одній і тій самій схемі: дві сторони (або невелика відома група), одне спільне середовище, домовленість між ними про те, що означають байти на цьому середовищі.
9.1.1. Ця схема перестає масштабуватися¶
Схема точка-точка працює, доки обидва кінці знаходяться поруч, обидва кінці відомі заздалегідь, і скрипт може обрати, по якому дроту говорити. Щойно будь-яке з цих обмежень порушується, лише дротів стає недостатньо.
Багато контрагентів. Мережа з п’ятдесяти камер, що звітують одному серверу, не може бути з’єднана один до одного; на сервері недостатньо UART, і прокладання кабелів було б неможливим.
Контрагенти не на одному дроті. Камера на заводі та панель керування в офісі в іншій частині міста не можуть мати спільний послідовний кабель. Між ними має існувати якийсь шлях через інфраструктуру, яка вже з’єднує ці два будинки.
Контрагенти, невідомі заздалегідь. Камера, що публікує результати в хмару, не обирає сервер у схемі підключення; адреса хмари – це те, що скрипт шукає під час виконання і куди маршрутизує дані.
Багато програм на одному кабелі. Ноутбук сьогодні запускає браузер, програму чату, відеодзвінок і резервне копіювання – усі вони одночасно спілкуються через один і той самий мережевий інтерфейс. Дріт не може бути «власністю» однієї розмови, як це буває з UART.
Кожен з цих збоїв є різним видом проблеми адресації. Вирішення їх усіх разом потребує більшого, ніж дріт і швидкість передачі (бод).
9.1.2. Що таке мережа¶
Мережа – це інфраструктура, що дозволяє будь-якому з великої кількості комп’ютерів обмінюватися повідомленнями з будь-яким іншим, не потребуючи для кожної пари власного виділеного з’єднання. Три властивості роблять мережу чимось більшим, ніж великий послідовний кабель:
Спільне середовище. Багато пристроїв підключаються до одного кабелю, комутатора або радіоканалу. Вони чергуються або мультиплексують, щоб більш ніж одна розмова могла розміститися на одному фізичному з’єднанні.
Логічні адреси. Кожен пристрій має номер, що ідентифікує його незалежно від того, до якого кабелю він підключений. Надіслати повідомлення означає написати цей номер на повідомленні, а не підключити конкретний дріт.
Маршрутизація. Коли відправник і отримувач не знаходяться в одному локальному сегменті, інфраструктура між ними переносить повідомлення крок за кроком. Кінцеві точки не знають маршруту; вони знають лише адреси одне одного.
Ноутбук у офісній Wi-Fi-мережі, що звертається до сервера у віддаленому центрі обробки даних, використовує всі три. З’єднання Wi-Fi – це спільне радіосередовище; ноутбук і сервер мають власні логічні адреси; повідомлення прокладає шлях через будь-яку інфраструктуру між ними, пересилаючись один крок за раз. Користувач клацає посилання, ноутбук надсилає пакет, а мережа робить усе інше.
9.1.3. А як щодо камери?¶
Камера виконує точно таку саму роль у мережі, як і ноутбук. Вона отримує логічну адресу при приєднанні до мережі, адресує вихідні повідомлення логічним адресам інших пристроїв і дозволяє інфраструктурі їх маршрутизувати.
Те, що змінюється порівняно з розділами про управління апаратним забезпеченням, – це інтерфейс. Замість відкриття екземпляра UART та запису байтів до нього, скрипт відкриває сокет і записує байти до нього. Сокет є кінцевою точкою в мережі так само, як екземпляр UART є кінцевою точкою у дроті. Частини між сокетом і дротом – кадри, пакети, таблиці маршрутизації, комутатори, радіостанції – всі знаходяться нижче і здебільшого невидимі для коду Python.
Наступні сторінки розкривають ці частини шар за шаром, щоб абстракція «відкрити сокет і надіслати байти» здавалася природною, а не магічною.