關於wifi網絡基本原理了解


   對於esp32,其wifi功能還是十分強大的,為了能夠良好的完成wifi的相關開發,這里需要計算機網絡的結構體系進行大致的了解。

一、網絡結構分層

  對於計算機網絡結構,大體上可以分為5層結構:

  物理層:電子設備要組網,第一件事就是要讓電子設備能通過電信號連接起來。這種連接可以通過實體的電線,網線,光纖進行也可以通過無線信號來實現。

  數據鏈路層:完成了信號傳輸,還需要對0和1的定義進行規定(類似低電平為0,高電平為1),同時在傳輸0,1之后還需要對01進行分組如8bit為一個字節多少字節為一個包之類。這就是鏈接層的功能。wifi的搭建和ethenet的鏈接就屬於這一層。

  網絡層:由於互聯網是一個巨大的網絡,如此多的設備,想同時進行互相連接是不可能的,所以需要一個專用的網絡層來進行相互的設備識別來找到需要通訊的設備,在一個小網絡中,以太網協議是通過MAC地址來尋址的,但在如此巨大的網絡中不可能每次尋找設備還需要給每個設備發送信息來匹配MAC地址,此時就產生“網址”的概念。於是,每一個網絡設備就有了2種地址,一個是MAC地址,一個IP網絡地址。(對於IP協議,后面會講到)。

  運輸層:有了MAC地址和IP地址,我們已經可以在互聯網上任意兩個設備上建立通信了。現在的問題是,當我使用不同設備時,應該選用什么樣的通訊方式進行通訊才能使不同設備之間的通訊方式能夠兼容呢?傳輸層的作用就是建立一條規范,使得兩台設備上多個任務之間的相互通信能夠正常進行,而不需要區分數據到底是來自於哪個設備和程序而能直接接收(這里就涉及到TCP協議和UDP協議了,同樣在后面將會詳細講到)。數據接收到后,不同的應用程序需要的數據不通過,通過對數據的解析在分配相對來說就會導致系統進程變慢,需要想到一個方法來字節完成通訊,簡化數據傳輸,實現的方法是新增一個參數(PORT),每個任務擁有自己單獨的端口,通過對自己PORT的監控,就可以完成對數據的區分了。

  應用層:前面四層搭建完成后,就是網絡數據的應用了,舉例來說,TCP協議可以為各種各樣的程序傳遞數據,比如DNS、Email、WWW、FTP等等。那么,必須有不同協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了"應用層"。

  總結來說:計算機網絡的結構可以大致用如下圖來表示:

圖片來源於:http://blog.csdn.net/zhoujn90/article/details/44955137

二、關於TCP/IP協議

  TCP/IP協議(Transmission Control Protocol/Internet Protocol)叫做傳輸控制/網際協議,又叫網絡通信協議。實際上,它包含上百個功能的協議,如ICMP(互聯網控制信息協議)、FTP(文件傳輸協議)、UDP(用戶數據包協議)、ARP(地址解析協議)等。TCP/IP負責發現傳輸的問題,一旦有問題就會發出重傳信號,直到所有數據安全正確的傳輸到目的地。

1、TCP/UDP協議

  包含端口號最簡單的實現就是UDP協議,他的格式幾乎就只是在數據前加上發送端口和接收端口而已。UDP協議的優點是比較簡單,容易實現,但是缺點是可靠性較差,一旦數據包發出,無法知道對方是否收到。

為了解決這個問題,提高網絡可靠性,TCP協議就誕生了。這個協議非常復雜,但可以近似認為,它就是有確認機制的UDP協議,每發出一個數據包都要求確認。如果有一個數據包遺失,就收不到確認,發出方就知道有必要重發這個數據包了。

因此,TCP協議能夠確保數據不會遺失。它的缺點是過程復雜、實現困難、消耗較多的資源。

TCP數據包和UDP數據包一樣,都是內嵌在IP數據包的"數據"部分。TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。

 

2、 IP協議和端口號

  定義網址的協議,叫做IP協議。所定義的地址也稱為IP地址。IP地址相對來說比較容易理解,指唯一標識了一台主機的某個網絡接口。

目前廣泛采用的是IPv4協議,這個協議規定,網址由32個bit組成,習慣上,我們用分成四段的十進制數表示IP地址,從0.0.0.0一直到255.255.255.255。互聯網上的每個設備,都會分配到一個IP地址。這個地址分成兩個部分,前一部分代表網絡,后一部分代表設備。比如,IP地址172.16.254.1,這是一個

32位的地址,假定它的網絡部分是前24位(172.16.254),那么主機部分就是后8位(最后的那個1)。處於同一個子網絡的電腦,它們IP地址的網絡部分必定是相同的,也就是說172.16.254.2應該與172.16.254.1處在同一個子網絡。

  但是,問題在於單單從IP地址,我們無法判斷網絡部分。還是以172.16.254.1為例,它的網絡部分,到底是前24位,還是前16位,甚至前28位,從IP地址上是看不出來的。那么,怎樣才能從IP地址,判斷兩台計算機是否屬於同一個子網絡呢?這就要用到另一個參數"子網掩碼"(subnet mask)

"子網掩碼",就是表示子網絡特征的一個參數。它在形式上類似IP地址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP地址172.16.254.1,如果已知網絡部分是前24位,主機部分是后8位,那么子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

  知道"子網掩碼",我們就能判斷,任意兩個IP地址是否處在同一個子網絡。方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0),然后比較結果是否相同,如果是的話,就表明它們在同一個子網絡中,否則就不是。比如,已知IP地址192.168.1.1和192.168.1.5

的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?兩者與子網掩碼分別進行AND運算,結果都是192.168.1.0,因此它們在同一個子網絡。

  最后總結一下,IP協議的作用主要有兩個,一個是為每一台計算機分配IP地址,另一個是確定哪些地址在同一個子網絡。

  端口的概念是將這個網絡接口分成不同的接口,供給系統的不同軟件來進行應用,在一台計算機中,通過端口來區分數據屬於哪個進程或線程。端口號是一個16位的整數,因此決定了端口號只能是0~65535,當編寫一個SOCKET的程序時,應該首先了解所運行的環境中哪些端口被占用了,這樣才能確定自己的程序可以使用哪些接口。通常來說,用戶的應用程序不應該使用0~1023的端口,因為這些端口已經被分配給一些其他的服務了,比如21是FTP服務器端口,80是WEB服務端口,盡管這些端口僅僅是實現了一種協議,不如FTP和WEB都是用TCP來實現的,從技術上講,如果用戶開發一個基於UDP協議的應用,也可以使用21、80這兩個端口,但是不建議使用這種作法,另外,小於1024的端口,往往需要ROOT權限。

 

 

3、 計算機網絡協議的報文封裝

  對於計算機網絡協議的報文封裝,這里就不進行詳細講解了,可以參考以下鏈接:http://blog.csdn.net/ljtyzhr/article/details/48208583?reload

同樣,http://blog.csdn.net/zh458042230/article/details/8796616也對計算機網絡相關知識進行了詳細的講解。

4、 關於Socket

  套接字(socket):在網絡中用來描述計算機中不同程序與其他計算機程序的通信方式。socket其實是一種特殊的IO借口,也是一種文件描述符。

套接字分為三類:

  流式socket(SOCK_STREAM):流式套接字提供可靠、面向連接的通信流;它使用TCP協議,從而保證了數據傳輸的正確性和順序性。

  數據報socket(SOCK_DGRAM):數據報套接字定義了一種無連接的服務,數據通過相互獨立的保溫進行傳輸,是無序的,並且不保證是可靠、無差錯的。它使用的數據報協議是UDP。

  原始socket:原始套接字允許對底層協議如IP或ICMP進行直接訪問,它功能強大但使用復雜,主要用於一些協議的開發。

  套接字由三個參數構成:IP地址,端口號,傳輸層協議。

  這三個參數用以區分不同應用程序進程間的網絡通信與連接。

  套接字的數據結構:C語言進行套接字編程時,常會使用到sockaddr數據類型和sockaddr_in數據類型,用於保存套接字信息。

使用socket進行TCP通信時,經常使用的函數有:

      圖片來自於:http://blog.csdn.net/lovekun1989/article/details/41042273

  

、關於WIFI的參數

  這里對wifi的一些基本術語進行說明,詳細了解可以到以下鏈接去查看:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27645048&id=5572925

    (*)LAN:即局域網,是路由和主機組成的內部局域網,一般為有線網絡。

        (*)WAN:即廣域網,是外部一個更大的局域網。

        (*)WLAN(Wireless LAN,即無線局域網):前面我們說過LAN是局域網,其實大多數指的是有線網絡中的局域網,無線網絡中的局域網,一般用WLAN。

        (*)AP(Access point的簡稱,即訪問點,接入點):是一個無線網絡中的特殊節點,通過這個節點,無線網絡中的其它類型節點可以和無線網絡外部以及內部進行通信。這里,AP和無線路由都在一台設備上(即Cisco E3000)。

        (*)Station(工作站):表示連接到無線網絡中的設備,這些設備通過AP,可以和內部其它設備或者無線網絡外部通信。

        (*)Assosiate:連接。如果一個Station想要加入到無線網絡中,需要和這個無線網絡中的AP關聯(即Assosiate)。

        (*)SSID:用來標識一個無線網絡,后面會詳細介紹,我們這里只需了解,每個無線網絡都有它自己的SSID。

        (*)BSSID:用來標識一個BSS,其格式和MAC地址一樣,是48位的地址格式。一般來說,它就是所處的無線接入點的MAC地址。某種程度來說,它的作用和SSID類似,但是SSID是網絡的名字,是給人看的,BSSID是給機器看的,BSSID類似MAC地址。

        (*)BSS(Basic Service Set):由一組相互通信的工作站組成,是802.11無線網絡的基本組件。主要有兩種類型的IBSS和基礎結構型網絡。IBSS又叫ADHOC,組網是臨時的,通信方式為Station<->Station,這里不關注這種組網方式;我們關注的基礎結構形網絡,其通信方式是Station<->AP<->Station,也就是所有無線網絡中的設備要想通信,都得經過AP。在無線網絡的基礎形網絡中,最重要的兩類設備:AP和Station。

        (*)DS(Distributed System):即分布式系統。分布式系統屬於802.11邏輯組件,負責將幀轉發至目的地址,802.11並未規定其技術細節,大多數商業產品以橋接引擎合分步式系統媒介共同構成分布式系統。分步式系統是接入點之間轉發幀的骨干網絡,一般是以太網。其實,骨干網絡並不是分步系統的全部,而是其媒介。主要有三點:骨干網(例如以太網)、橋接器(具有有線無線兩個網絡接口的接入點包含它)、屬於骨干網上的接入點所管轄的基礎性網絡的station通信(和外界或者BSS內部的station)必須經過DS、而外部路由只知道station的mac地址,所以也需要通過分布式系統才能知道station的具體位置並且正確送到。分步式系統中的接入點之間必須相互傳遞與之關聯的工作站的信息,這樣整個分步式系統才能知道哪個station和哪個ap關聯,保證分步式系統正常工作(即轉達給正確的station)。分步式系統也可以是使用無線媒介(WDS),不一定一定是以太網。總之,分步式系統骨干網絡(例如以太網)做為媒介,連接各個接入點,每個接入點與其內的station可構成BSS,各個接入點中的橋接控制器有到達骨干網絡和其內部BSS無線網的接口(類似兩個MAC地址),station通信需要通過分布式系統。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM