ARP-NAT(MAC Address Translation)的原理

本文部分图片来自:

http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/

https://wiki.openwrt.org/doc/howto/clientmode

MAT的原理

MAT(MAC Address Translation)也叫做ARP-NAT,和IP网络中的NAT原理是差不多的。下面简称MAT。

NAT的存在就是为了让内网的多台机器共享一个公网的IP地址。类似的,MAT可以让Ethernet中多台机器共享一个MAC地址。但是这个共享是一个结果,而不是目的。

为什么要使用MAT

这是WiFi网络中仅有的现象。WiFi网络最常见的AP的设计就是为了透传Ethernet。它在Ethernet的(DA,SA)基础上加入了WiFi专用的MAC地址,也就是WiFi的MAC地址包裹在Ethernet地址之外。

对于AP来说,包裹了AP的MAC地址BSSID,也就是在无线网络中的AP收发的802.11包是(DA,SA,BSSID)的形式。

对于WDS来说,包裹了两个WDS设备的MAC地址(TA,RA),也就是形成了(DA,SA,TA,RA)的形式。

那么对于WiFi网络中STA的包,只是加入了BSSID而已,并没有加入它自身的WiFi设备地址,最终结果来看它并没有WiFi的MAC地址,而是将自己的Ethernet地址拿来使用做为WiFi的地址了。

所以为了透传Ethernet,在仅有链路层工作的情况下(不使用NAT),下面的组网方式就行不通了,而需要MAT的帮助。

MAT的原理

MAT的基本原理:

l  不影响IP层,也就是数据包的IP地址不会变化

l  MAT对于内部设备在MAC层上的通讯是透明的。也就是是否有MAT设备存在,内部设备所收发的数据包的地址没有什么不同。

l  MAT对于外部设备来说,屏蔽了所有内部设备,以它自身来替代。也就是内部设备发出的包的源MAC会被替代成MAT设备的MAC。随之而来的,就是MAT收到的数据包的目标MAC会被替换成对应内部设备的MAC。

MAT的主要问题:

l  ARP-NAT缓存可能超时,这样会导致网络连接立刻被中断

l  ARP-NAT缓存可能会溢出,这样会导致网络连接出现问题

l  其他未知问题

MAT的工作流程

如图设备A作为STA,连接到AP,电脑连接到设备A。设备A内部对STA接口Ethernet接口做驱动级别的处理转发。实际上如果设备A再放出一个WiFi AP,电脑的无线网卡连上它,原理也是一样的。

DHCP流程

电脑发出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流程

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.

时间: 2024-10-16 03:28:22

ARP-NAT(MAC Address Translation)的原理的相关文章

NAT (Network Address Translation)

NAT Introduction NAT: Provides the translation of private address to public address. ? NAT has many uses, but its primary use is to conserve public IPv4 addresses. It does this by allowing networks to use private IPv4 addresses internally and providi

关于获得本机Mac Address的方法

网络上有讲获得Mac address的方法有如下: 1. 发送ARP命令,利用返回的Mac Address缓冲区得到 2. 用NetworkInterface.GetAllNetworkInterfaces()获得所有网卡(包括虚拟网卡),从而获得相应的Mac address 3. 还有是从本机的注册表中获得: ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher("SELECT * FR

ARP表 MAC表 路由表

ARP表是一个动态表,存储在计算机当中,目的是做一个ip地址与mac地址的对应.假设在同一子网段,计算机A与计算机B通信计算机A的ip地址192.168.0.1 MAC地址AA-AA-AA-AA-AA-AA计算机B的ip地址已知192.168.0.2 MAC地址未知那么计算机A就要发起一个ARP查询,“谁能告诉我,192.168.0.2的MAC地址是多少?”很显然通过交换机的时候,交换机并不能看懂ip地址,所以要广播这个信息,就把这个查询信息发到除发送端的其它所有端口.(当然,交换机还要记住19

Network Address Translation(转载)

Network Address Translation  来源:http://alexanderlaw.blog.hexun.com/9791596_d.html       地址转换用来改变源/目的地址/端口,是netfilter的一部分,也是通过hook点上注册相应的结构来工作       Nat注册的hook点和conntrack相同,只是优先级不同,数据包进入netfilter之后先经过conntrack,再经过nat.而在数据包离开netfilter之前先经过nat,再经过conntr

NAT-netwrok address translation(网络地址转化)帮你快速通俗的理解

为什么要学习网络地址转化呢? 比如上图左边白色方框为你们公司内部网络,白色右边只匡了半个路由器,那个路由器就是你们公司的边界路由,(边界路由概念不懂的话可以单独问我,我后面也会讲). 那右边粉红色的区域就是运营商的服务器和连向公有网络的路由器. 正常看到这个图想实现两边路由器互通的话,就是一个路由器写一个静态路由,就可以实现两边互通,但现实情况就是右边是服务器,人家并不知道你的IP地址,那么多私有地址也不可能一个一个写你家IP地址进路由对吧. 所以左侧的PC机比如你想访问百度,你一个网制www.

H3CS10510报Invalid MAC address处理

公司新购的H3CS10510交换机,配置微软NLB虚拟IP时报"Invalid MAC address".联系H3C官网,因为新款设备V7版本,开启了MAC检查功能,默认时开启的,关闭后即可以绑定.在系统视图下,先执行undo arp check enable后,再执行arp static进行绑定操作即可忽略检查,配置静态arp成功. 原文地址:https://blog.51cto.com/3267244/2419220

【网络补习】Port Address Translation (PAT)

来源:https://searchnetworking.techtarget.com/definition/Port-Address-Translation-PAT PAT is an extension to network address translation (NAT) that permits multiple devices on a local area network (LAN) to be mapped to a single public IP address. The go

【小错误】Device eth2 has different MAC address than expected, ignoring.

今天在搭建rac配置IP的时候报错显示如下: Device eth2 has different MAC address than expected, ignoring.[FAILED] 百度了下,问题解决. 问题原因: 配置文件里的MAC地址和真实的MAC不一样. 含有MAC信息的配置文件是/etc/sysconfig/network-scripts/ifcfg-eth0. 查看本机实际MAC的命令是 ifconfig eth0 解决办法: 查看配置文件/etc/sysconfig/netwo

Ubuntu 下,修改 Mac address

ifconfig    //    check Mac address sudo ifconfig eth0 down sudo ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx sudo ifconfig eth0 up ifconfig    //    check Mac address where is active 這方法重開機之後,會恢復原來的 Mac address