9.5. IP-адреси¶
Апаратна адреса вирізняє пристрій серед інших на тому самому локальному кабелі або радіосоті. Вона добре підходить для цього, але марна за межами локального сегмента: комутатор у сусідньому будинку не може маршрутизувати за нею, оскільки механізм, що дозволяє комутатору вивчати MAC-адреси, працює лише в межах одного сегмента.
Мережевий рівень вирішує це за допомогою іншого виду адреси, що не залежить від того, до якого кабелю підключено пристрій. Назва такого виду адреси – адреса інтернет-протоколу, або IP-адреса, а слова «інтернет-протокол» позначають набір правил, яких дотримується кожен хост в інтернеті під час надсилання або пересилання пакетів. Сучасний інтернет одночасно використовує дві версії схеми адресації – IPv4 (стара форма, досі домінуюча в малих мережах) та IPv6 (нова форма, що поступово замінює першу).
9.5.1. Що таке IP-адреса¶
IP-адреса – це число, достатньо велике для унікальної ідентифікації будь-якого пристрою в інтернеті. Вона записується у зрозумілому для людини форматі, який використовується у цьому розділі, але в заголовку пакета це просто ціле число фіксованого розміру.
Адреси IPv4 мають довжину 32 біти і записуються у вигляді чотирьох десяткових чисел, розділених крапками, де кожне число – це один байт:
192.168.1.42 8.8.8.8 10.0.0.1
Тридцять два біти дають приблизно чотири мільярди можливих адрес, що здавалося достатнім, коли IPv4 розроблявся у 1970-х роках, але виявилося недостатнім на початку 2010-х.
Адреси IPv6 мають довжину 128 біт і записуються у вигляді восьми груп з чотирьох шістнадцяткових цифр, розділених двокрапками:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Послідовності нулів можна скоротити до
::, а провідні нулі в групі можна опустити, тому наведена адреса зазвичай записується як2001:db8:85a3::8a2e:370:7334.
В іншому дві адресні сім’ї – це різні мови; хост IPv4 не може безпосередньо надіслати пакет хосту IPv6 без допомоги шлюзу. Модулі network та socket камери підтримують обидві. У цьому посібнику приклади використовують IPv4, оскільки більшість локальних мереж, до яких буде підключатися камера, досі є виключно IPv4, але все подальше однаково працює і для IPv6 після заміни адрес.
9.5.2. Для чого використовується IP-адреса¶
IP-адреса вказує, якому хосту в інтернеті призначений пакет. Маршрутизатор, який не знає, як напряму досягти пункту призначення, знає, що інший маршрутизатор, мабуть, знає, і пересилає пакет туди. Пакет переходить між маршрутизаторами, кожен з яких трохи ближчий до пункту призначення, доки маршрутизатор, який знаходиться в локальному сегменті призначення, не доставить останній перехід.
Ця поведінка «перехід за переходом» робить інтернет однією великою мережею, а не багатьма маленькими островами. На наступній сторінці описано, як вибираються переходи; ця присвячена лише адресам.
9.5.3. Як камера отримує адресу¶
Камера, яка щойно приєдналася до мережі Wi-Fi, потребує IP-адреси, перш ніж зможе з кимось спілкуватися. Для цього є два поширених способи.
Перший – автоматичне призначення. Камера запитує локальну мережу про адресу; пристрій, який її видає, – це маршрутизатор – коробка, що з’єднує локальну мережу з ширшим інтернетом. У більшості домашніх та невеликих офісних налаштувань та сама фізична коробка виконує функції комутатора для дротових пристроїв і точки доступу Wi-Fi для бездротових, тому «маршрутизатор», «комутатор» та «точка доступу» можуть бути одним і тим самим пристроєм. Маршрутизатор запускає невелику службу під назвою DHCP (протокол динамічного налаштування хостів), яка підтримує пул доступних адрес, вибирає одну для кожного нового пристрою та орендує її на фіксований час. Разом із цим маршрутизатор також надає камері ще кілька корисних параметрів конфігурації:
адресу для відправлення вихідного трафіку, коли пункт призначення знаходиться поза локальною мережею (шлюз за замовчуванням, що є власною адресою маршрутизатора); та
адреси одного або кількох серверів імен, які перетворюють зрозумілі для людини імена, як-от
example.com, на IP-адреси. Служба пошуку імен називається DNS, система доменних імен, і Імена та DNS описує її детально.
Все це відбувається автоматично під час встановлення з’єднання. Камері не потрібно явно запитувати про це; у момент, коли isconnected() повертає True у прикладі на попередній сторінці, камера вже має свою адресу, свій шлюз та свої сервери імен.
Другий варіант – статична конфігурація. У деяких розгортаннях потрібна відома адреса для камери, щоб інші пристрої могли звертатися до неї без попереднього пошуку. Метод ipconfig() встановлює адресу, шлюз та сервер імен вручну:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
Статична конфігурація є крихкою (два пристрої, що випадково отримали однакову адресу, конфліктуватимуть). Використовуйте DHCP за замовчуванням, якщо немає конкретної причини для перевизначення.
Як тільки камера отримає IP-адресу, вона приєднається до інтернету (або принаймні до частини локальної мережі). Інші пристрої тепер можуть адресувати пакети до неї за цією адресою, і вона може адресувати пакети до них.
9.5.4. Маска підмережі та /24¶
/24 в кінці адреси у статичному прикладі вище – це маска підмережі. Сама по собі IP-адреса не вказує, де закінчується локальна мережа – 192.168.1.50 може бути однією з кількох сотень адрес у невеликій домашній мережі або однією з тисяч у більшій. Маска підмережі вказує, яка частина адреси позначає мережу, а яка – хост всередині неї.
/24 означає «перші 24 з 32 біт позначають мережу; останні 8 позначають хост». Для 192.168.1.50/24 адреса ділиться на 192.168.1 для мережі та .50 для хоста, залишаючи місце приблизно для 254 пристроїв в одній локальній мережі. /16 залишив би більше бітів для хостової частини і вмістив би набагато більше пристроїв в одній мережі; /30 залишив би лише дві хостові адреси і підійшов би для з’єднання точка-точка.
Маска підмережі також зазвичай записується як чотирибайтове число в тому самому форматі з крапками, що й адреса. /24 еквівалентно 255.255.255.0 – кожен байт читається як «всі біти, що належать до мережевої половини». Два формати є взаємозамінними; зчитувач ipconfig() у наступному підрозділі повертає чотирибайтовий формат.
Чому взагалі важливий цей поділ – як пристрій використовує маску підмережі, щоб визначити, чи знаходиться пункт призначення в локальній мережі, чи потрібно направляти трафік через шлюз, та чому більшість домашніх мереж використовують /24 – описано на Приватні мережі та NAT.
9.5.5. Зчитування адреси¶
Метод ipconfig() без аргументів повертає активну конфігурацію. Представлення addr4 повертає IP-адресу та маску підмережі:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')