9.5. IP-címek

A hardvercím egy eszközt választ ki a többi közül ugyanazon a helyi kábelen vagy rádiócellán. Erre a feladatra megfelelő, de a helyi szegmensen túl használhatatlan: a szomszédos épületben lévő kapcsoló nem tud alapján útválasztást végezni, mert az a mechanizmus, amely lehetővé teszi, hogy egy kapcsoló megtanulja a MAC-címeket, csak egyetlen szegmensen belül működik.

A hálózati réteg ezt egy másfajta címmel oldja meg, amely független attól, hogy egy eszközt melyik kábelre csatlakoztattak. Ennek a fajta címnek a neve Internet Protocol-cím, vagyis IP-cím, és az „Internet Protocol” rész azoknak a szabályoknak a halmazát nevezi meg, amelyeket az interneten minden gazdagép követ, amikor ilyen csomagot küld vagy továbbít. A jelenlegi internet a címzési séma két verzióját használja párhuzamosan – az IPv4-et (a régebbi formát, amely a kis hálózatokon még uralkodó) és az IPv6-ot (az újabb formát, amely lassan leváltja).

9.5.1. Mi az az IP-cím

Az IP-cím elég nagy szám ahhoz, hogy az interneten minden eszközt egyedileg azonosítson. Ember által olvasható formában írjuk le, amelyet a szakasz további része is használ, de a csomag fejlécében csupán egy rögzített méretű egész szám.

  • Az IPv4-címek 32 bit hosszúak, és négy, pontokkal elválasztott decimális számként írjuk le őket, amelyek mindegyike egy bájt:

    192.168.1.42
    8.8.8.8
    10.0.0.1
    

    A harminckét bit nagyjából négymilliárd lehetséges címet ad, ami bőségesnek tűnt, amikor az IPv4-et az 1970-es években megtervezték, de a 2010-es évek elejére már nem volt elég.

  • Az IPv6-címek 128 bit hosszúak, és nyolc, kettősponttal elválasztott, négy hexadecimális számjegyből álló csoportként írjuk le őket:

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    A nullasorozatok :: alakra rövidíthetők, a csoportokon belüli vezető nullák pedig elhagyhatók, így a fenti cím szokásosan 2001:db8:85a3::8a2e:370:7334 formában szerepel.

A két címcsalád egyébként eltérő nyelv; egy IPv4-gazdagép átjáró segítsége nélkül nem tud közvetlenül csomagot küldeni egy IPv6-gazdagépnek. A kamera network és socket modulja mindkettőt támogatja. Ez az útmutató a példákban IPv4-et használ, mert a legtöbb helyi hálózat, amelyhez a kamera csatlakozik, még mindig csak IPv4-es, de minden, ami következik, pontosan ugyanígy működik IPv6-tal is, amint kicseréljük a címeket.

9.5.2. Mire való az IP-cím

Az IP-cím azt mondja meg, hogy az interneten melyik gazdagépnek szól a csomag. Egy útválasztó, amely nem tudja, hogyan érhet el közvetlenül egy célt, tudja, hogy valószínűleg valamelyik másik útválasztó tudja, és odatovábbítja a csomagot. A csomag útválasztóról útválasztóra ugrik, mindegyik egy kicsit közelebb a célhoz, amíg egy olyan útválasztó, amely valóban a cél helyi szegmensén van, kézbesíti az utolsó ugrást.

Ez az ugrásról ugrásra történő viselkedés teszi lehetővé, hogy az internet egyetlen nagy hálózatként működjön, sok kis sziget helyett. A következő oldal az ugrások kiválasztásáról szól; ez az oldal csak magáról a címről.

9.5.3. Hogyan kap a kamera IP-címet

Egy Wi-Fi-hálózathoz éppen csatlakozott kamerának IP-címre van szüksége, mielőtt bármivel kommunikálhatna. Erre két gyakori mód van.

Az első az automatikus kiosztás. A kamera címet kér a helyi hálózattól; az eszköz, amely címet ad ki, az útválasztó – a doboz, amely összeköti a helyi hálózatot a tágabb internettel. A legtöbb otthoni és kisirodai elrendezésben ugyanaz a fizikai doboz egyben a kapcsoló is, amelyhez a vezetékes eszközök csatlakoznak, valamint a Wi-Fi hozzáférési pont is, amelyhez a vezeték nélküli eszközök kapcsolódnak, így „az útválasztó”, „a kapcsoló” és „a hozzáférési pont” akár ugyanaz a hardver is lehet. Az útválasztó egy kis szolgáltatást futtat, a DHCP-t (Dynamic Host Configuration Protocol), amely fenntart egy poolt a rendelkezésre álló címekből, minden újonnan érkezett eszköznek kiválaszt egyet, és bérbe adja azt egy rögzített időre. Eközben az útválasztó néhány egyéb hasznos beállítást is átad a kamerának:

  • azt a címet, amelyre a kimenő forgalmat kell küldeni, ha a cél a helyi hálózaton kívül van (az alapértelmezett átjárót, amely az útválasztó saját címe); és

  • egy vagy több névkiszolgáló címét, amelyek az olyan ember által olvasható neveket, mint az example.com, IP-címekké alakítják. A névfeloldó szolgáltatás neve DNS, a Domain Name System, és a Nevek és DNS részletesen foglalkozik vele.

Mindez automatikusan történik, miközben a kapcsolat épül. A kamerának egyik elemet sem kell külön kérnie; abban a pillanatban, amikor az előző oldal példájában a isconnected() True értékkel tér vissza, a kameranak már megvan a címe, az átjárója és a névkiszolgálói.

A második lehetőség a statikus konfiguráció. Egyes telepítések ismert címet szeretnének a kamerának, hogy más eszközök előzetes feloldás nélkül elérhessék. A ipconfig() metódus kézzel állítja be a címet, az átjárót és a névkiszolgálót:

wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")

A statikus konfiguráció törékeny (két, véletlenül azonos címet kapott eszköz ütközik). Maradj a DHCP alapértelmezésnél, hacsak nincs konkrét ok a felülbírálására.

Amint a kamerának van IP-címe, csatlakozott az internethez (vagy legalábbis a helyi hálózat egy darabjához). Más eszközök mostantól ezen a címen küldhetnek neki címzett csomagokat, ő pedig nekik.

9.5.4. A hálózati maszk és a /24

A fenti statikus példában a cím végén lévő /24 a hálózati maszk. Egy IP-cím önmagában nem mondja meg, hol végződik a helyi hálózat – a 192.168.1.50 lehet egy kis otthoni hálózat néhány száz címének egyike, vagy egy nagyobbnak több ezer címe közül egy. A hálózati maszk megmondja, hogy a cím mekkora része nevezi meg a hálózatot, és mekkora része a benne lévő gazdagépet.

A /24 azt jelenti: „a 32 bitből az első 24 nevezi meg a hálózatot; az utolsó 8 a gazdagépet”. A 192.168.1.50/24 esetében ez a címet 192.168.1 hálózati részre és .50 gazdagéprészre osztja, így körülbelül 254 eszköznek marad hely ugyanazon a helyi hálózaton. A /16 több bitet hagyna a gazdagép-félnek, és sokkal több eszköz férne el egy hálózaton; a /30 mindössze két gazdagépcímet hagyna, és egy pont-pont kapcsolatnak felelne meg.

A hálózati maszkot gyakran a címmel megegyező, pontokkal tagolt négybájtos számként is írják. A /24 egyenértékű a 255.255.255.0 értékkel – olvasd minden bájtot úgy, hogy „az összes bit, amely a hálózati félhez tartozik”. A két forma felcserélhető; a következő alfejezetben a ipconfig() olvasó történetesen a négybájtos formát adja vissza.

Hogy miért is számít egyáltalán a felosztás – hogyan használja egy eszköz a hálózati maszkot annak eldöntésére, hogy egy cél a helyi hálózaton van-e, vagy az átjárón keresztül kell kimennie, és miért lesz a legtöbb otthoni hálózat /24 – arról a Privát hálózatok és NAT szól.

9.5.5. A cím visszaolvasása

A ipconfig() metódus argumentumok nélkül az aktív konfigurációt adja vissza. Az addr4 nézet az IP-címet és a hálózati maszkot adja vissza:

>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')