9.3. Kabeln och bildrutan¶
De två lägsta lagren i stacken är lättast att ta för givna på kameran, eftersom allt de gör sker inuti chippet och kameran hanterar dem utan att någon Python-kod är inblandad. De är ändå värda en kort genomgång, eftersom de förklarar vad ”lokalt nätverk” betyder och var gränsen mot resten av infrastrukturen börjar.
9.3.1. Det fysiska lagret¶
Det understa lagret är själva signaleringen – ledningarna, optiska fibrer eller radiovågor som bär bitar mellan två enheter. Ethernet över partvinnade kablar kodar varje bit som en spänningsövergång med fast hastighet. Wi-Fi modulerar samma bitar på en radiobärvåg i 2,4 GHz- eller 5 GHz-bandet. Båda producerar en ström av binära siffror mellan två maskinvaror; båda är den sortens detalj som kamerans kisel hanterar utan att programvaran behöver tänka på det.
Ur ett Python-skripts perspektiv är det fysiska lagret ”länken är uppe” eller ”länken är nere”. Modulen network rapporterar det tillståndet genom sin metod isconnected() på Wi-Fi-gränssnittet och genom länkstatusen på ett trådbundet Ethernet-gränssnitt. Utöver det är allt annat som detta lager gör dolt.
9.3.2. Länklagret¶
Ett steg upp sitter länklagret – reglerna för att skicka en bunt byte (en bildruta) mellan två enheter som delar samma fysiska segment. Länklagret lägger till två saker ovanpå den råa signaleringen:
Maskinvaruadressering. Varje nätverksgränssnitt har en unik 48-bitars identifierare som kallas MAC-adress (Media Access Control). På Ethernet är den inbränd i chippet; på Wi-Fi är det samma sorts identifierare inbränd i den trådlösa modulen. MAC-adresser är vad en switch – lådan med flera Ethernet-portar som närliggande enheter ansluts till – använder för att avgöra vilken port en viss bildruta ska skickas ut på. En Wi-Fi-accesspunkt spelar samma roll för trådlösa enheter på sin kanal.
Inramning. De byte som ett högre lager lämnar ned paketeras i en bildruta med ett litet huvud, nyttolasten och en kontrollsumma i slutet. Huvudet bär käll- och destinations-MAC-adresserna; kontrollsumman låter mottagaren upptäcka en bildruta vars byte blev förvanskade under överföringen. Bildrutor som inte klarar kontrollen kastas tyst – den som bryr sig om tillförlitlighet får återinföra den i ett högre lager.
Ett lokalt segment är vilken grupp av enheter som helst som direkt kan se varandras bildrutor – de trådbundna portarna på en switch, alla enheter som är knutna till en Wi-Fi-accesspunkt, eller ett litet nät av sammankopplade switchar. Länklagret kan inte nå utanför det segmentet. Så snart destinationen sitter på ett annat segment måste meddelandet lämnas över till lagret ovanför.
9.3.3. Vad kameran exponerar¶
Kameran har en MAC-adress för varje nätverksgränssnitt den har – en Wi-Fi-adress om kameran har trådlöst stöd, en Ethernet-adress om kortet har motsvarande port. Modulen network ger åtkomst till den via network_interface.config("mac") på det gränssnittsobjekt som applikationen använder, när den behöver läsa adressen. Vissa applikationer behöver det, till exempel för att registrera enheten i ett flotthanteringssystem. I övrigt är detta den enda ratt som länklagret överlämnar till Python.
Allt annat – inramningen, själva MAC-trafiken på ledningen eller i luften, förhandlingen mellan kameran och accesspunkten om vilken kanal och hastighet som ska användas – sker helt och hållet inuti den trådlösa maskinvaran eller Ethernet-maskinvaran. Nästa sida täcker det enda ställe där ett Python-skript faktiskt har ett ord med i laget i länklagret: att tala om för kameran vilket nätverk den ska ansluta till.