内部和外部 IP 之间的流量如何分离?

Zom*_*ian 3 networking nat ip wan

如果我从我的家庭网络 ping 192.168.0.X 那么它将尝试在我的网络中查找该地址而不是外部 WAN IP。但是我可以 ping 74.125.224.163 并且它会 ping google.com。

我可以将我的内部网络设置为 74.125.224.X,然后如果我尝试 ping,它会再次只在我的网络内查看,但我想(我没有尝试更改它)我仍然可以与 Google 的服务器通信相同的 IP 地址。

这是在什么层次上分开的?数据包如何知道 IP 地址的目的地是去往 WAN 而不是 LAN?

use*_*686 11

数据包什么都不知道——它们只携带目标地址;所经过的路径由保存在您的计算机、路由器和 Internet 中的其他路由器中的路由表决定。

当数据包从您的计算机发送...

  1. 操作系统首先检查目标地址是否分配给您计算机中的任何网络接口。如果是,操作系统会自行使用它——数据包不会到达您的计算机之外的任何地方。

  2. 否则,它将在路由表中查找与目标地址匹配的所有路由。可能有几个——操作系统会选择匹配“前缀”最长的那个。

  3. 如果没有与目标地址匹配的路由,则数据包将被丢弃。

例如,如果您自己的地址是192.168.1.1...

  • 您计算机的路由表可能如下所示:

    • 10.11.12.0/24可以直接通过ppp0界面访问
    • 192.168.1.0/24可以直接通过eth0界面访问
    • 10.42.0.0/16 可以通过 10.11.12.50
    • 0.0.0.0/0 可以通过 192.168.1.254

    后面的数字表示/要比较的位数;请参阅CIDR 表示法。例如,如果是/16,则两个地址的前 16 位(从最左边的位开始)必须相等。如果是/0,则不进行任何比较,因此路由将匹配任何地址——这是“默认路由”。

    真正的路由表也有指标——例如,如果你通过以太网和 WiFi 将笔记本电脑连接到你的局域网,那么它会有两条相同的路由到同一个网络,但以太网路由的指标会更低,因为它比 WiFi 快. 为简单起见,我在这里省略了指标。

  • 如果您 p​​ing 192.168.1.5,操作系统将:

    1. 寻找路线 192.168.1.5
    2. 查找路线192.168.1.0/240.0.0.0/0
    3. 选择 route 192.168.1.0/24,因为它有一个更长的前缀 (24 > 0)
    4. 看到路由指向eth0接口
    5. 通过eth0电缆发送数据包

    数据包将通过以太网(或 WiFi 或...)直接到达目标计算机。

  • 如果您 p​​ing 74.125.224.163,操作系统将:

    1. 寻找路线 74.125.224.163
    2. 寻找路线 0.0.0.0/0
    3. 看到路由有网关 192.168.1.254
    4. 寻找192.168.1.254可以直接到达的路由(无需通过第二个网关)
    5. 寻找路线 192.168.1.0/24
    6. 看到路由指向eth0接口
    7. 通过eth0电缆发送数据包

    数据包将通过以太网(或 WiFi 或...)到达192.168.1.254(您的家庭路由器),然后使用自己的路由表重复相同的过程并将数据包发送到下一跳(您的 ISP 的路由器)。

(因此,如果您拥有与 Google 相同的网络,您将无法再访问 Google,因为将始终首先选择通往您自己网络的路线。)