为什么公共 IP 地址不总是与其子网掩码一起显示?

Rad*_*eve 3 networking ip-address ip subnet netmask

有人告诉我,没有相应子网掩码的公共 IP 地址毫无意义,因为人们不知道如何将网络 ID 与主机 ID 分开,这对我来说完全有意义。

然而,大多数时候我看到的 ip 地址(DNS、findmyip.com 等)只是关于 ip 而没有 cidr 号码。例如,我只是给一个网站提供了一个 ip 地址,它给了我正确的域名。

我错过了什么?我猜还有一些其他协议只能使用 ip 地址,但我还没有听说过这些协议。

如果我的问题表明对网络如何工作缺乏基本的了解,那么非常感谢资源。我是一名自学所有这些东西的开发人员,除了 5 分钟长的教程或 1000 多本晦涩难懂的书籍(Hi TCP Illustrated),我找不到我正在寻找的材料。

jcb*_*rmu 5

子网掩码对于主机本身和路由设备很有用。

您的PC不需要知道远程设备的子网掩码,它只需要知道地址,并将其自己的地址自己的子网掩码进行比较,就可以知道该地址是本地还是远程。

如果是本地,则数据包将直接发送,如果是远程,数据包将发送到默认网关。


Law*_*ceC 5

所有使用 TCP/IP 与其他系统通信的系统都会查询本地“转发信息库”或由系统维护的本地路由表。

路由表条目基本上如下所示:

目标网络/网关/目标子网掩码/指标

这是我当前的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 eth2
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 eth2
172.16.160.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 eth2
192.168.87.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
Run Code Online (Sandbox Code Playgroud)

每次系统想要将流量发送到 IP 时,它都会搜索此表。如果它找到匹配并适合子网掩码的目标网络,它会将流量从Iface标识的网络适配器发送出去。

所有这些网络适配器都是“直接连接的” - 这就是为什么您看到网关为 0.0.0.0 的原因。这意味着如果系统想要发送一些东西到 192.168.2.80,例如,它可以直接通过接口 eth2 发送到 192.168.2.80。

但是,由于子网掩码的原因,192.168.87.80 不会通过 eth2 出去,而是通过 vmnet1 出去。

如果一个 IP 适合两个条目,则使用具有较大 CIDR 子网掩码的一个(“更具体的一个”)。如果有两个具有相同子网掩码,则使用度量来打破平局,如果到了时间,系统可能会选择一个并坚持使用它或在它们之间进行负载平衡。

例如

192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 eth2
192.168.2.0     0.0.0.0         255.255.255.240 U     100    0        0 ethX
Run Code Online (Sandbox Code Playgroud)

255.255.255.240 是 CIDR /28,而 255.255.255.0 是 CIDR /24。因此,如果这两个条目存在,则去往 192.168.2.1 的某些内容会从接口 ethX 出去,但去往 192.168.2.241 的某些东西会从接口 eth2 出去。

如果没有匹配怎么办?然后使用默认网关。请注意,它的“最低”子网掩码为 0.0.0.0(这是一个斜杠 /0)。

这就是子网的用途。告诉系统可以通过哪个接口访问哪些网络。您的系统在发送流量时使用它(以确定 Internet 和本地网络之间的差异),路由器使用它来转发流量。

在这些情况之外,不需要子网掩码。基本上不需要经过网络路由层。HTTP 是应用层。