9.3. 纜線與訊框

在相機上,堆疊中最底層的兩層最容易被視為理所當然,因為它們所做的一切都發生在晶片內部,而且相機會自行處理它們,完全不需要任何 Python 程式碼參與。不過它們仍然值得簡短地走一遍,因為它們能說明「區域網路」是什麼意思,以及與其餘基礎設施之間的邊界從哪裡開始。

9.3.1. 實體層

最底層是實際的訊號傳遞——也就是承載位元在兩個裝置之間傳輸的電線、光纖或無線電波。乙太網路透過雙絞線纜線,以固定速率將每個位元編碼為電壓的轉變。Wi-Fi 則將同樣的位元調變到 2.4 GHz 或 5 GHz 頻段的無線電載波上。兩者都會在兩件硬體之間產生一連串的二進位數字;兩者也都屬於相機晶片會自行處理、軟體無需操心的那類細節。

從 Python 指令碼的角度來看,實體層就是「連線已建立」或「連線已斷開」。network 模組會透過 Wi-Fi 介面上的 isconnected() 方法、以及有線乙太網路介面上的連線狀態來回報這個狀態。除此之外,這一層所做的其他一切都是隱藏起來的。

9.3.3. 相機所開放的部分

相機為它所擁有的每個網路介面都各有一個 MAC 位址——若相機支援無線功能就有一個 Wi-Fi 的、若主機板有對應的埠就有一個乙太網路的。當應用程式需要讀取位址時,network 模組會透過應用程式正在使用的介面物件上的 network_interface.config("mac") 來提供存取。某些應用程式確實有此需求,例如要將裝置註冊到機群管理系統中。除此之外,這是連結層交給 Python 控制的唯一一個旋鈕。

其他的一切——訊框封裝、電線或空氣中實際的 MAC 流量、相機與存取點之間關於使用哪個通道與速率的協商——全都發生在無線或乙太網路硬體內部。下一頁 會介紹 Python 指令碼在連結層中唯一有發言權的地方:告訴相機要加入哪個網路。