AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1419608
Accepted
ispiro
ispiro
Asked: 2019-04-01 05:41:46 +0800 CST2019-04-01 05:41:46 +0800 CST 2019-04-01 05:41:46 +0800 CST

NAT 后面的 NAT 如何工作(路由器的 NAT 和 ISP 的 NAT)?

  • 772

我正在使用调制解调器路由器,在某些情况下也在 ISP NAT 后面。NAT(ISP 的 NAT)后面的 NAT(路由器的 NAT)如何工作?

据我所知,NAT 是这样工作的:计算机 A 和 B 获得内部 IPinternal1和internal2. 然后 NAT 为它们提供相同 IP 上的端口,以便面向公众的它们位于后面someIP:1和someIP:2.

但是,如果路由器这样做,然后 ISP 再次这样做,则 IP 的形式将是someIP:1:100,someIP:2:101这是不可能的,因为端口没有二级端口。

那么这是如何工作的呢?

networking router port-forwarding
  • 2 2 个回答
  • 3922 Views

2 个回答

  • Voted
  1. Best Answer
    Bob
    2019-04-01T06:08:27+08:002019-04-01T06:08:27+08:00

    让我们尝试一个简单的例子。

    在“正常”的 NAT 家庭网络中,192.168.1.2:11223映射到“公共”地址:端口对203.0.113.5:22334。所以最终的目标主机认为它收到了一个数据包203.0.113.5:22334并且不知道它背后的“私有”网络。


    现在,让我们将其扩展为具有两级 NAT 的双 NAT 网络。

    在离主机最近的路由器上,192.168.1.2:11223映射到“公共”地址:端口对10.0.0.8:22334。现在,10.0.0.8仍然是私有地址,只是在不同的网络中。就此路由器而言,它的工作已经完成。

    在作为第一个路由器所在的 LAN 的网关的下一个路由器上,10.0.0.8:22334映射到其自己的公共接口上的另一个地址:端口对203.0.113.5:12345。

    最终目标主机认为它收到了来自 的数据包203.0.113.5:12345。它和整个公共互联网都不知道这里涉及的任何10.0.0.0/8子网192.168.0.0/16。它将向该地址发回一个响应,该地址必须依次由每个路由器转换回来。

                                  Different address:port pairs for
                                  thesame endpoint in one connection!
    +------------------------+    -----------------------------------
    |Host                    |
    |192.168.1.2             |
    +------------------------+    192.168.1.2:11223 <--- Host sees
                                                         this pair
    
    +------------------------+    192.168.1.2:11223 <--- Router 1 sees
    |Router 1                |                           req from this
    |internal 192.168.1.1/24 |
    |external 10.0.0.8       |
    +------------------------+    10.0.0.8:22334 <------ Router 1 sends
                                                         req from this
    
    +------------------------+    10.0.0.8:22334 <------ Router 2 sees
    |Router 2                |                           req from this
    |internal 10.0.0.1/24    |
    |external 203.0.113.5    |
    +------------------------+    203.0.113.5:12345 <--- Router 2 sends
                                                         req from this
    
    +------------------------+    203.0.113.5:12345 <--- Public internet
    |Public internet         |                           sees this pair
    +------------------------+
    

    CGN(“ISP NAT”)的工作方式大致相同。唯一的区别是它不为其内部主机提供 RFC1918 私有地址,因为这可能会与业务网络发生冲突。相反,100.64.0.0/10范围 (RFC6598) 中的地址由上图中的“路由器 2”分发。就客户自己的路由器而言,其“公共”地址来自该范围 - 但实际上无法在公共互联网上访问!

    • 7
  2. user1686
    2019-04-01T06:26:26+08:002019-04-01T06:26:26+08:00

    据我所知,NAT 是这样工作的:计算机 A 和 B 获得内部 IP internal1 和 internal2。然后 NAT 为它们提供相同 IP 上的端口,以便面向公众的它们位于 someIP:1 和 someIP:2 之后。

    不。端口不是主机地址的一部分——在 IP 层没有端口这样的东西,无论是否使用 NAT。主机的 IP 地址始终只是地址;它没有“二级”端口,也没有“一级”端口。[1]

    相反,端口属于主机在 IP 之上建立的每个单独的 TCP/UDP连接。(好吧,严格来说它们是每个数据包的一部分,同一连接中的所有数据包都使用相同的端口。)

    因此,当您看到一个写为 的地址时12.34.56.78:123,整件事并不是主机的 IP 地址——那是IP 地址仍然是 的主机上端口 123的TCP 连接端点12.34.56.78。

    这些端口不是由 NAT 添加的——它们一直都在那里;每个 TCP 或 UDP 数据包都有两个端口(一个“源”端口和一个“目标”端口)。执行 NAT 的路由器只是将它们转换为不同的值。无论您拥有多少层 NAT,该数据包仍将具有两个端口。


    [1]这意味着当你有两个主机在一个公共地址后面进行 NAT 转换时,IP 层实际上无法区分它们——当一个来自外部的 IP 数据包被发送到someIP它时,它无法指定它想要哪个主机;NAT 路由器必须从 TCP 层推断这一点。这就是为什么您必须配置“端口转发”规则才能接收入站连接。

    • 3

相关问题

  • Win10 1803:如何让移动热点成为专用网络?

  • nc如何识别服务名称

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve