zoukankan      html  css  js  c++  java
  • 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.

     

  • 相关阅读:
    CodeDeploy 应用程序规范文件
    Lambda 函数的最佳实践
    路由策略
    AWS CodeStar
    使用 Lambda@Edge 在边缘站点自定义内容
    Step Functions
    将应用程序部署到 AWS Elastic Beanstalk 环境
    DynamoDB 静态加密
    web数据安全——防篡改
    【Spring】spring全局异常处理即全局model数据写入
  • 原文地址:https://www.cnblogs.com/tanhangbo/p/7811067.html
Copyright © 2011-2022 走看看