假设我有一个路由表
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.2 30
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.0.0 255.255.255.0 On-link 192.168.0.2 286
192.168.0.2 255.255.255.255 On-link 192.168.0.2 286
192.168.0.255 255.255.255.255 On-link 192.168.0.2 286
===========================================================================
并且我想要发送 ping 请求到192.168.0.3
。
192.168.0.3
网络上出现了一个新创建的数据包,其目标为(源为 127.0.0.1?)。它将命中192.168.0.0/24
接口为 的规则192.168.0.2
。数据包的源更改为192.168.0.2
(基于这个答案)。它没有命中第一条规则,因此目前无法使用网关,但数据包却以某种方式离开了。
此案的下一步措施是什么以及为什么?
答案1
数据包不是以源 127.0.0.1 开头,而是可能以源 *(又名 0.0.0.0)或 192.168.0.2 开头,这应该是本地主机的 IP。
- 如果 IP 不是 192.168.0.0/24,它将前往默认路由(第一条规则),
- 为了到达默认路由目标,它将通过接口 192.168.0.2 使用路由 192.168.0.0/24(如果不是以这种方式启动,它将替换 * 作为源)。
- 这可以进一步路由,但不能路由到互联网,因为 192.168.0.0/16 是保留地址。据推测,192.168.0.1 是 NAT 路由器,它会将本地地址+端口转换为自己的 WAN IP 和不同的(连接唯一)源端口,并重新转换回复。
由于目标 192.168.0.3 与 192.168.0.0/24 匹配,因此它将通过上述相同的规则 2 直接进入该网络,并且路由将停止,以太网接管(大概)。以太网将发送针对 192.168.0.3 的 arp 请求(假设它尚未在 arp 缓存中),当它收到回复时,将数据包直接发送到具有 192.168.0.2+本地 mac --> 192.168.0.3+回复 mac 的目的地。
地址 127.0.0.0/8 是不可路由的,如果源以此地址开头,数据包将永远不会离开本地计算机。源 IP 由应用程序控制;它可以绑定特定的源 IP,通常是主机的接口 IP 之一,但通常源 IP 不受应用程序绑定,并且默认为 * 和一些(半)随机端口。