本文部分圖片來自:緩存
http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/網絡
https://wiki.openwrt.org/doc/howto/clientmodeless
MAT(MAC Address Translation)也叫作ARP-NAT,和IP網絡中的NAT原理是差很少的。下面簡稱MAT。spa
NAT的存在就是爲了讓內網的多臺機器共享一個公網的IP地址。相似的,MAT可讓Ethernet中多臺機器共享一個MAC地址。可是這個共享是一個結果,而不是目的。設計
這是WiFi網絡中僅有的現象。WiFi網絡最多見的AP的設計就是爲了透傳Ethernet包。它在Ethernet的(DA,SA)基礎上加入了WiFi專用的MAC地址,也就是WiFi的MAC地址包裹在Ethernet地址以外。3d
對於AP來講,包裹了AP的MAC地址BSSID,也就是在無線網絡中的AP收發的802.11包是(DA,SA,BSSID)的形式。blog
對於WDS來講,包裹了兩個WDS設備的MAC地址(TA,RA),也就是造成了(DA,SA,TA,RA)的形式。接口
那麼對於WiFi網絡中STA的包,只是加入了BSSID而已,並無加入它自身的WiFi設備地址,最終結果來看它並無WiFi的MAC地址,而是將本身的Ethernet地址拿來使用作爲WiFi的地址了。圖片
因此爲了透傳Ethernet包,在僅有鏈路層工做的狀況下(不使用NAT),下面的組網方式就行不通了,而須要MAT的幫助。get
MAT的基本原理:
l 不影響IP層,也就是數據包的IP地址不會變化
l MAT對於內部設備在MAC層上的通信是透明的。也就是是否有MAT設備存在,內部設備所收發的數據包的地址沒有什麼不一樣。
l MAT對於外部設備來講,屏蔽了全部內部設備,以它自身來替代。也就是內部設備發出的包的源MAC會被替代成MAT設備的MAC。隨之而來的,就是MAT收到的數據包的目標MAC會被替換成對應內部設備的MAC。
MAT的主要問題:
l ARP-NAT緩存可能超時,這樣會致使網絡鏈接馬上被中斷
l ARP-NAT緩存可能會溢出,這樣會致使網絡鏈接出現問題
l 其餘未知問題
如圖設備A做爲STA,鏈接到AP,電腦鏈接到設備A。設備A內部對STA接口Ethernet接口作驅動級別的處理轉發。實際上若是設備A再放出一個WiFi AP,電腦的無線網卡連上它,原理也是同樣的。
電腦發出DHCP discover,設備A更改SA,AP返回offer包以後,設備A更改DA返回給電腦。這裏MAT可能要在DHCP包出去以前將broadcast flag給置上,否則AP可能會根據幀體的MAC地址直接單播數據包給電腦,這樣會行不通,由於電腦沒有和AP鏈接。因此這裏AP回覆的是廣播的DHCP offer,MAT只要轉發廣播,沒有必要修改DA。
由於DHCP流程中電腦尚未IP地址,因此在設備A端的MAT依據是DHCP包內部的MAC地址信息來轉發。MAT不會修改DHCP包幀體裏面的數據。
DHCP結束以後,MAT的驅動應該已經記住了IP-MAC的對應關係。
ARP的包體裏面會攜帶IP地址和MAC地址,MAT除了在發送的時候改變SA,接收的時候改變DA以外,
它同時會在發送的時候改變ARP幀體的SA,接收的時候改變ARP幀體的DA。對於MAT設備來講,根據ARP幀體的IP地址來判斷哪一個設備就能夠了。
另外抓包發現電腦還會廣播「免費」ARP,告訴別人本身的MAC地址和IP地址的對應關係。MAT也堅決果斷地將它的SA和幀體的SA替換成本身的MAC地址。
因此這最終的效果就是MAT設備擁有多個IP地址,雖然這不是真的。
數據包的流程很簡單,就是MAT設備修改電腦數據包包的SA發出去給AP,AP回來的發修改DA再轉發給電腦。
基本流程以下圖所示,其中MAT將SA替換成SA1,將DA替換回DA1.