9.2. Kerroksittaiset protokollat

Kehyksen lähettäminen kamerasta toisessa kaupungissa olevalle palvelimelle tarkoittaa useiden ongelmien ratkaisemista samanaikaisesti. Sähköisen signaalin on selvittävä ensimmäisen johdon yli. Kyseisen johdon tavujen on löydettävä tiensä paikallisen kytkimen läpi. Paikallisverkon on luovutettava viesti sille, mikä sijaitsee sen ja muun internetin välissä. Matkasta selvinneet paketit on koottava uudelleen oikeassa järjestyksessä. Vastaanottajan on tiedettävä, mille ohjelmalleen ne antaa. Ja itse tavujen on merkittävä jotain, mistä molemmat päät ovat yhtä mieltä.

Kaiken tämän ratkaiseminen yhdessä koodilohkossa olisi hallitsematonta. Vakiovastaus on jakaa työ kerroksiin. Kukin kerros ratkaisee yhden hyvin määritellyn ongelman ja tarjoaa yksinkertaisen palvelun yläpuolelleen. Ohjelma puhuu aina vain suoraan alapuolellaan olevalle kerrokselle; sen alapuolella olevat kerrokset ovat näkymättömiä.

Pystysuora pino viidestä laatikosta, jotka on merkitty alhaalta ylös: fyysinen, linkki, verkko, kuljetus, sovellus. Oikealla oleva nuoli osoittaa pinoa ylös merkinnällä "mitä rakennamme". Vasemmalla oleva nuoli osoittaa pinoa alas merkinnällä "mitä tarjotaan".

Kukin verkkopinon kerros ratkaisee yhden ongelman ja antaa puhtaan abstraktion seuraavalle ylöspäin.

9.2.1. Viisi kerrosta

Alla olevat nimet ovat ne, joita tämän osion loppuosa käyttää. Ne ovat peräisin vakiomallista, jonka ympärille verkot suunniteltiin. Kerrosten väliset tarkat rajat ovat toisinaan epäselviä, mutta kunkin rooli on vakaa.

Fyysinen kerros. Siirtää bittejä kahden saman johdon tai radion laitteen välillä. Jännitetasot, valopulssit, RF-modulaatio. Kameran tehtävä on tässä lähinnä kytkeä oikea kaapeli tai liittyä oikeaan langattomaan verkkoon; piisirut hoitavat loput.

Linkkikerros. Siirtää kehyksiä (pieniä tavupaloja) kahden saman paikallissegmentin jakavan laitteen välillä. Lisää laitteistotason osoitteet, jotta kukin kehys voidaan ohjata yhdelle tietylle naapurille. Ethernet ja Wi-Fi ovat ne kaksi linkkitekniikkaa, jotka kamera käytännössä kohtaa.

Verkkokerros. Siirtää paketteja minkä tahansa kahden internetin laitteen välillä, ei vain samalla paikallissegmentillä. Lisää ohjelmistotason osoitteen, joka tunnistaa isäntäkoneen riippumatta siitä, missä kaapelissa se on, sekä reititysmekanismin, joka hyppyyttää paketin paikallissegmentiltä seuraavalle, kunnes se saapuu perille. Tämä on ensimmäinen kerros, jossa kameran Python-koodilla alkaa olla sanansa sanottavana.

Kuljetuskerros. Sijaitsee pakettien päällä ja tarjoaa toimituksen kahden isännän ohjelmien välillä, ei vain isäntien itsensä. Kaksi muotoa on yleistä: toinen toimittaa yhdistetyn, järjestetyn tavuvirran (työjuhta useimmalle liikenteelle), toinen toimittaa itsenäisiä viestejä, jotka kulkevat toisistaan riippumatta (käytetään kun pieni yleisrasite on tärkeämpää kuin takeet). Lisää porttinumerot, jotta useat saman isännän ohjelmat voivat käydä keskusteluja rinnakkain.

Sovelluskerros. Kaikki kuljetuksen yläpuolella: protokollat, jotka antavat tavuille merkityksen. Ne, joita verkkoselain puhuu ladatakseen sivuja – ja ne lähes kaikkien muiden internetpalvelujen takana, joita lukija käyttää jo joka päivä – asuvat täällä. Opas käsittelee kuljetusta syvällisesti; tämä kerros saa oman jatko-osionsa.

9.2.2. Miten kerrokset pinoutuvat ajon aikana

Kun kamera lähettää tavuja verkon yli, kukin kerros lisää oman otsikkonsa datan eteen, kuten pesisi kirjekuoren toisen kirjekuoren sisään:

  • Sovelluksen tavut menevät ensin sisään.

  • Kuljetuskerros käärii ne pienellä otsikolla, joka kertoo mille ohjelmalle ne kuuluvat (porttinumero).

  • Verkkokerros käärii tuon otsikolla, joka kertoo mille isännälle ne on tarkoitettu (ohjelmistotason osoite).

  • Linkkikerros käärii tuon otsikolla, joka kertoo mille paikallissegmentin laitteelle ne luovutetaan seuraavaksi (laitteistotason osoite).

  • Fyysinen kerros muuttaa koko nipun biteiksi johdolla.

Toisessa päässä kukin kerros kuorii pois oman otsikkonsa ja antaa loput ylöspäin. Vastaanottava sovellus saa tavunsa takaisin tietämättä, että verkko-, linkki- ja fyysinen kerros olisivat koskaan olleet olemassa.

Tämä pesiytyminen on syy siihen, miksi opas etenee alhaalta ylös. Sen ymmärtäminen, mitä alapuolen kerros tekee, saa yläpuolen kerroksen tuntumaan väistämättömältä. Kaksi alinta kerrosta käsitellään kumpikin yhdellä sivulla, koska Pythonista ei ole juuri mitään konfiguroitavaa. Verkkokerroksesta ylöspäin tahti hidastuu, kun Pythonin rooli kasvaa.