文章目錄標題
ESP8266 Wi-Fi
將ESP8266用作簡單的微控制器非常棒,但大多數人使用它的原因是其Wi-Fi功能。本章中,我們會探討網路協議的美好世界,例如Wi-Fi,TCP,UDP,HTTP,DNS……所有這些縮寫詞可能會嚇倒您,但這裏會盡力向您解釋它們,讓學習輕鬆進行。
有些段落用斜體表示。這些提供了一些額外的信息,但對於理解ESP的Wi-Fi功能並不是至關重要的,因此,如果您不了解某些內容,請不要感到沮喪。
在不讓事情複雜化的同時又保持簡短的前提下,很難給出清晰的解釋。如果您有任何反饋或意見,請務必發表評論以幫助改進本文。謝謝!
TCP / IP堆疊
大多數人稱為“互聯網”的系統不僅僅是一個協議:它是協議各個層次的完整堆疊,通常稱為TCP / IP堆疊。我們將介紹這些不同的層,因為我們需要了解ESP8266如何與網路上的其他設備通信。
Layer | Protocols |
---|---|
應用 | HTTP,FTP,mDNS,WebSocket,OSC … |
傳輸 | TCP,UDP |
Internet | IP |
Link | Ethernet,Wi-Fi … |
The Link layer
鏈接層包含兩個設備之間的物理鏈接,例如以太網電纜或Wi-Fi連接。這是最接近硬體的層。
要將ESP8266連接到網路,您必須建立一個Wi-Fi鏈接。這可以通過兩種不同的方式發生:
- ESP8266連接至無線存取點(WAP或簡稱AP)。例如,AP可以內建在modem或路由器中。
在這種構造中,ESP的作用就像一個無線站。 - ESP8266作為存取點,無線工作站點可以連接到它。這些工作站可以是您的筆電,智能手機,甚至可以是處於工作站模式的其他ESP。
建立Wi-Fi鏈接後,ESP8266將成為區域網(LAN)的一部分。LAN上的所有設備都可以相互通信。
大多數情況下,AP也連接到物理以太網,這意味著ESP8266還可以通過有線以太網連接與連接到AP(modem/路由器)的設備通信(桌上型電腦,遊戲機和機頂盒)。
如果ESP8266處於存取點(AP)模式,它可以與與其連接的任何工作站點通信,並且兩個工作站點(例如筆電和智能手機)也可以相互通信。
ESP可以設定為AP-only、station-only或AP + station模式下使用。
摘要
鏈路層是設備之間的物理鏈接:對於ESP8266,這是WiFi連接。ESP可以充當工作站並連接到存取點,也可以當存取點並讓其他設備連接到它。
互聯網或網絡層
雖然設備已經物理連接(通過實際的電線(以太網)或通過無線波(Wi-Fi)),但是它們實際上還無法相互通信,因為它們無法知道將消息發送到哪裡。 。
這就是Internet協議(IP)的來源。網絡上的每個設備都有一個個人IP地址。DHCP服務器(動態主機設定協議服務器)確保這些地址是唯一的。
這意味著您現在可以將郵件發送到特定的地址。
Internet協議有兩種版本:IPv4和IPv6。IPv6是IPv4的改進版本,其地址比IPv4多得多(因為設備數量多於可用的IPv4地址)。在本文中,我們將僅討論IPv4地址,因為大多數LAN仍在使用它們。
IP地址由4個數字組成,例如192.168.1.5是有效的IPv4地址。它實際上由兩部分組成:第一部分是192.168.1,這是本地網絡的地址。最後一位數字(在這種情況下為5)特定於設備。
通過使用IP地址,我們可以找到ESP8266在網路上並向其發送消息。如果ESP知道它們各自的IP地址,它也可以找到我們的電腦或手機。
子網路遮罩(Sub-net mask)(可選)
IP地址的細分由子網路遮罩確定,通常寫為255.255.255.0。您可以看到它由四個數字組成,就像IP地址一樣。如果子網路遮罩的一部分為255,則意味著IP地址的對應部分是網絡地址的一部分,如果為0,則對應的IP部分是特定地址的地址的一部分。與“ IP:192.168.1.5,子網路遮罩:255.255.255.0”不同的表示法是“ 192.168.1.5/24”,因為子網路遮罩的二進製表示為11111111.11111111.11111111.00000000,並且有24個。
如果您想了解有關子網路的更多信息,建議您閱讀Wikipedia文章。
(可以幫助您記住的快速提示:這稱為子網路遮罩,因為如果您對IP地址和子網路遮罩執行位元運算與運作(即,將子網路遮罩用作IP地址的遮罩, ),您將獲得子網的地址。)
下面的例子可以看出這三個IP跟子網路遮罩做AND計算後,前面兩個IP屬同一個子網路,第三個屬另一個子網路。
MAC地址和ARP (可選)
實際上,僅使用IP地址不可能直接將資料包發送到另一台計算機。要將資料包發送到LAN上的特定設備(Wi-Fi或以太網),您必須知道其MAC地址。MAC地址是每個網絡設備唯一的唯一編號,並且永遠不會更改,它已固定在網絡晶片中。這意味著每個ESP8266、每個網卡、智能手機……都擁有不同的MAC地址。
因此,例如在ESP可以將資料包發送到智能手機之前,它必須知道其MAC地址。它尚不知道,ESP僅知道智能手機的IP地址,例如192.168.1.6。為此,ESP發送一條廣播消息(即發給LAN上所有設備的消息),說“我正在尋找IP地址為192.168.1.6的設備的MAC地址”。ESP還將在消息中包括其自己的IP和MAC地址。當智能手機收到此廣播消息時,它會識別自己的IP地址,並通過發送自己的MAC地址來響應ESP。現在,ESP和電話都知道彼此的IP和MAC地址,並且可以使用IP地址進行通信。此方法稱為地址解析協議或ARP。
互聯網呢?
您可能已經注意到,我只談論了區域網,這些是您自己家裡的計算機。您可能會問,ESP8266如何與互聯網通信?嗯,“ Internet”涉及很多網絡基礎架構,並且它們都遵守IP規則,以確保您的大多數資料包到達目的地。當然,它並不是那麼簡單,例如路由器和網路地址轉換(NAT),但這不在本文的討論範圍之內,而且大多數人不必擔心。
摘要
Internet層使用IP地址來知道應該將資料發送到哪裡。意思是兩個設備可以通過Internet相互發送資料包。
傳輸層
網絡中的不同設備會盡力將這些IP資料包傳遞給收件人,但是,資料包丟失並不少見,因此它永遠不會到達。否則,資料包可能會在途中損壞:資料不再正確。IP也不能保證資料包以發送時的順序到達。
這意味著我們還不能僅通過鏈接和Internet層來可靠地發送消息,因為我們永遠無法知道資料包何時和是否到達,或者無法確定接收到的資料包是否正確。
我們需要在Internet層之上的第三層:傳輸層。
我們需要在Internet層之上的第三層:傳輸層。
第三層主要有兩個協定:傳輸控制協定(TCP)和用戶資料包協定(UDP)。
- TCP確保接收到所有資料包,這些資料包按順序排列,並且重新發送損壞的資料包。這意味著它可用於多個應用程序之間的通信,而不必擔心資料完整性或資料包丟失。這就是為什麼它用於諸如下載網頁,發送電子郵件,上傳文件等之類的原因。
- 另一方面,UDP不能保證每個資料包都到達目的地,但是它確實檢查錯誤,但是當發現一個資料包時,它只是破壞了資料包,而沒有重新發送它。這意味著它不像TCP那樣可靠,不過它更快而且延遲更低,因為它不需要像TCP那樣的開放連接來發送消息。這就是為什麼它用於語音和影像聊天,例如在線遊戲中的原因。
如果您想進一步了解TCP和UDP之間的區別,請觀看此視頻。
摘要
IP協定不可靠,並且沒有錯誤檢查。TCP通過重新發送丟失或損壞的程序包來解決此問題,並以錯誤的順序對收到的資料包進行排序。UDP還檢查損壞的程序包,但不會重新發送它們,因此它的延遲比TCP少。
應用層
現在,我們可以使用TCP進行可靠的通信,但是仍然存在一個問題。想像一下:您正在發送一封信,TCP保證它會到達目的地,但是如果接收方不理解所寫的語言,他將不知道該怎麼做。
換句話說,我們需要第四層協議,以便兩個程序能夠相互通信。
這裡有很多不同的協議,但是我們主要集中在Web服務器和瀏覽器的協定上。
超文本傳輸協議
超文本傳輸協議(HTTP)是Web服務器和Web客戶端為了進行通信而使用的協定。它使用文本執行從客戶端到服務器並再次返回的發送請求和響應。
例如,當您在網絡瀏覽器(客戶端)的地址欄中輸入http://www.google.com時,它將向Google網絡服務器發送HTTP GET請求。服務器理解了此HTTP請求,並將發送Google網頁作為響應。或者,當您將圖像上傳到Instagram時,瀏覽器會發送HTTP POST請求,並將您的自拍照附加到Instagram服務器。服務器理解請求,將圖像保存並添加到資料庫中,將新圖像的URL發送回瀏覽器,然後瀏覽器會將圖像加到網頁上。
如您所見,客戶端和服務器都不必擔心它們發送的消息的完整性,並且他們知道收件人理解他們的語言,並且知道如何處理特定的HTTP請求。
大多數現代網站使用小號 HTTP secure版本,稱為HTTPS。出於安全原因,此安全連接會加密資料。(例如,您不希望任何人從您的郵件服務器讀取資料包,或您發送到銀行的資料包。)
WebSocket
HTTP非常適合諸如下載網頁,上傳照片等之類的事情,但是它很慢:每次發送HTTP請求時,都必須啟動與服務器的新TCP連接,然後發送請求,等待服務器響應,並下載響應。如果我們不必每次都想發送一些資料時都必須打開一個新的連接,並且我們可以隨時隨地同時發送和接收資料,那不是很好嗎?這就是WebSocket解救的地方:您可以始終保持與服務器的TCP連接保持打開狀態,獲得完美的TCP可靠性,而且速度非常快。
打開聲音控制
HTTP和WebSocket都使用TCP連接。如果要降低延遲怎麼辦?好吧,Open Sound Control或OSC使用UDP發送小資料片段,例如int,float,短文本等……延遲非常低。它最初是為控制低延遲音頻應用而設計的,但是它是一種非常靈活的協議,因此它通常用於除音頻控制之外的低延遲任務。
域名系統(DNS)
如前所述,您只能在知道另一台計算機的IP地址的情況下將消息發送到另一台計算機。但是,當您瀏覽Internet時,您只會知道網站的域名(例如www.google.com)。您的計算機使用域名系統將該域名轉換為正確的IP地址。之後再詳細介紹。