9.3. Кабель і кадр¶
Два нижніх рівні стека найлегше сприймати як належне на камері, оскільки все, що вони роблять, відбувається всередині чіпа, і камера обробляє їх без будь-якого коду Python. Вони все одно заслуговують на короткий огляд, адже пояснюють, що означає «локальна мережа» і де починається межа з рештою інфраструктури.
9.3.1. Фізичний рівень¶
Нижній рівень — це реальна передача сигналів: дроти, оптичні волокна або радіохвилі, що переносять біти між двома пристроями. Ethernet по кручений парі кодує кожен біт як перехід напруги з фіксованою швидкістю. Wi-Fi модулює ті самі біти на радіонесучу в діапазоні 2,4 ГГц або 5 ГГц. Обидва методи створюють потік двійкових цифр між двома апаратними засобами; обидва — це тип деталей, з якими кремній камери справляється без участі програмного забезпечення.
З точки зору скрипту Python фізичний рівень — це «з’єднання встановлено» або «з’єднання відсутнє». Модуль network повідомляє цей стан через метод isconnected() для Wi-Fi інтерфейсу та через статус з’єднання для дротового Ethernet інтерфейсу. Все інше, що робить цей рівень, приховано.
9.3.2. Канальний рівень¶
На один щабель вище знаходиться канальний рівень — правила для надсилання порції байт (кадру) між двома пристроями, які спільно використовують один фізичний сегмент. Канальний рівень додає дві речі поверх необробленої передачі сигналів:
Апаратна адресація. Кожен мережевий інтерфейс має унікальний 48-бітний ідентифікатор, який називається MAC-адресою (Media Access Control). В Ethernet вона прошита в чіп; у Wi-Fi — це такий самий ідентифікатор, прошитий у бездротовий модуль. MAC-адреси — це те, що комутатор — пристрій з кількома Ethernet портами, до яких підключаються сусідні пристрої — використовує для визначення, на який порт надіслати даний кадр. Точка доступу Wi-Fi виконує ту саму роль для бездротових пристроїв на своєму каналі.
Формування кадрів. Байти, які передаються з вищого рівня, упаковуються в кадр із невеликим заголовком, корисним навантаженням і контрольною сумою наприкінці. Заголовок містить MAC-адреси джерела та призначення; контрольна сума дозволяє отримувачу виявити кадр, байти якого були пошкоджені під час передачі. Кадри, що не пройшли перевірку, відкидаються без повідомлення — хто б не піклувався про надійність, має забезпечити її на вищому рівні.
Локальний сегмент — це будь-яка група пристроїв, яка може безпосередньо бачити кадри один одного: дротові порти одного комутатора, усі пристрої, підключені до однієї точки доступу Wi-Fi, або невелика сітка з’єднаних комутаторів. Канальний рівень не може вийти за межі цього сегмента. Щойно одержувач знаходиться в іншому сегменті, повідомлення має бути передане на рівень вище.
9.3.3. Що надає камера¶
Камера має MAC-адресу для кожного мережевого інтерфейсу — Wi-Fi, якщо камера підтримує бездротовий зв’язок, або Ethernet, якщо на платі є відповідний порт. Модуль network надає доступ до неї через network_interface.config("mac") на будь-якому об’єкті інтерфейсу, який використовує застосунок, коли потрібно прочитати адресу. Деяким застосункам це потрібно, наприклад, щоб зареєструвати пристрій у системі управління парком. В іншому випадку це єдиний параметр, який канальний рівень передає Python.
Все інше — формування кадрів, фактичний MAC-трафік по кабелю або в повітрі, переговори між камерою та точкою доступу щодо каналу та швидкості — відбувається повністю всередині бездротового або Ethernet обладнання. Наступна сторінка розглядає єдине місце, де скрипт Python дійсно має вплив на канальний рівень: вказує камері, до якої мережі підключитися.