公佈這份代碼的目的是但願有人來改進這項技術,由於目前所知wifi組播配網在部分路由器上仍有問題。可是,無論怎樣,這項技術能爲咱們在將來的物聯網生活中帶來便利,對於咱們使用的大部分路由是兼容的,我選擇公佈它,但願更多的人能夠了解這項技術、使用這項技術、並完善它。git
1、組播。算法
組播,英文名Multicast,這裏有必要同時提下Broadcast和Unicast,翻譯成中文分別是廣播和單播,顧名思義,廣播就是單臺主機向網絡中全部主機發送消息,單播是兩臺主機之間進行對話,而組播則是單臺主機向特定的一組主機發送消息。在以太網數據幀頭中會須要指定發送以及接受設備的MAC地址,以肯定該數據包的來源與去向,廣播時接收方的MAC地址爲0xFFFFFFFFFFFF,單播時接收方的MAC地址爲對端MAC地址,而組播時,接收方的MAC地址則與組地址之間有一個映射關係,而WiFi組播配網正是利用了這個組地址與MAC地址的映射。安全
用過網絡抓包工具的確定知道,抓包時會發現電腦常常與一些奇怪的ip地址進行UDP通信,例如224.0.0.251,224.0.0.1,224.0.0.22,這些地址表明了一組特定的主機,路由器會將這些UDP包發送到加入該組的主機。關於組播技術的具體細節能夠查閱相關文檔瞭解,本文將再也不贅述。ieee將224.0.0.0 ~ 239.255.255.255劃定爲組播保留地址,在以太網中,目的IP地址爲組播保留地址的數據包,目的MAC地址須要作一個映射。具體作法是,MAC地址的3個高字節固定爲01:00:5E,後三個字節依次爲組地址的從高字節起的第二字節取低7位、組地址的第三字節和第四字節,例如組地址225.215.145.230對應的MAC地址爲01:00:5E:57:91:E6,這裏須要瞭解的是,雖然咱們看到的組播MAC地址大多都爲01:00:5E開頭,但並非只有以01:00:5E開頭的MAC地址纔是組播MAC地址,MAC地址的前24bit叫作organization unique identifier(OUI),01:00:5E是ieee的OUI,習慣性的被大多數廠商和文獻使用,判斷一個MAC是否爲組播MAC的依據是MAC地址的第一個字節的bit0是否爲1。網絡
2、WiFi數據幀頭結構ide
在介紹WiFi幀頭結構以前,咱們先了解下WiFi通訊的一些基本原理。WiFi工做於2.4GHz與5.8GHz兩個頻段,爲簡單起見,5.8GHz頻段暫時忽略。WiFi在2.4G頻段共有14個信道,分別是1-14信道,其中14信道只有日本在使用,這些信道的中心頻率依次是2.412GHz /2.417GHZ /2.422GHz /2.427GHz /2.432GHz /2.437GHz /2.442GHz /2.447GHz /2.452GHz /2.457GHz /2.462 GHz / 2.467GHz /2.472 GHz /2.484 GHz,第14信道與第13信道中心頻率相差12MHz, 其餘各相鄰信道的中心頻率相差5MHz。使用時,路由器工做在一個固定信道,wifi網卡會循環在1-13信道掃描wifi熱點,最終用戶選擇的熱點在哪一個信道wifi網卡就會跳到該信道去鏈接這個熱點。工具
下面是一個常見的802.11MAC幀,在802.11的MAC幀會標明目的MAC地址/源MAC地址/BSSID分別表示這個wifi數據幀發給哪一個設備,來自哪一個設備,從哪一個路由器發出來的,wifi網卡須要根據目的MAC地址來區分哪些數據包是發給本身的應對處理,哪些數據包不是發給本身的須要丟棄。編碼
802.11 MAC幀加密
2 bytespa |
2 byte翻譯 |
6 byte |
6 byte |
6 byte |
2 byte |
6 byte |
0-2312 byte |
6 byte |
Frame Control |
Duration /ID |
Addr1 |
Addr2 |
Addr3 |
Seq-ctrl |
Addr4 |
Frame body |
FCS |
3、WiFi組播配網
wifi組播配網正是利用了以前所說的組地址與組播MAC地址之間的映射及wifi數據幀頭中的MAC地址信息來傳輸配網信息。
在發送端,將須要傳輸的數據以2個字節爲單位經過組播傳輸出去,爲保證數據前後順序的正確性,須要爲這些數據編上號,爲了便於接收端區分wifi組播數據幀是配網,雙方約定使用一個同步頭來做爲前導,此外爲保證傳輸的有效性還須要將校驗值、數據長度、協議和版本號告訴接受端,若是消息超出了一次分包消息的長度,須要將數據分紅多個數據包來傳輸,爲了確保數據的安全性,採用AES加密算法將ssid/passphrase/pmk加密,爲了確保不會出現0結尾的組地址,採用base64編碼算法對密文進行編碼。
監聽端,使wifi網卡循環在1-13信道監聽組播wifi數據幀,以約定的組播MAC地址爲同步頭,當監聽到同步頭以後,進入接收模式,只接收來自該MAC地址的組播wifi數據幀,在接收完包頭信息及數據以後進行解析,依次將base64編碼還原成aes密文,再使用以前約定的密鑰解密,獲得ssid/passphrase/pmk,完成配網。
代碼託管在開源中國碼雲,連接:https://gitee.com/shoowing/wifiZuBoPeiWang。