有人告诉我,没有相应子网掩码的公共 IP 地址是没有意义的,因为人们不知道如何将网络 ID 与主机 ID 分离,这对我来说完全有意义。
但是,大多数时候我看到的 ip 地址(DNS、findmyip.com 等)都只是 ip,没有 cidr 编号。例如,我只需向网站提供一个 ip 地址,它就会返回正确的域名。
我遗漏了什么?我猜想还有一些其他协议只能与 IP 地址一起使用,但我还没有听说过。
如果我的问题表明我对网络工作原理缺乏基本的了解,那么请提供资源。我是一名开发人员,正在自学所有这些知识,除了 5 分钟的教程或 1000 多本晦涩难懂的书籍(Hi TCP Illustrated),我找不到我想要的材料。
答案1
以上两个答案都是正确的 - 这是一个更详细的非技术性答案 -
计算机只需要知道 IP 地址是否属于直接连接到它的计算机(通过同一“局域网”中的集线器/交换机/ wifi 的计算机)被视为直接连接。
对于其他任何事情,计算机只需要知道下一步将数据包发送到哪里 - 即路由器的地址(路由器又知道下一步将数据包发送到哪里)。当您执行跟踪路由时,您会看到此路径。
子网掩码用于对直接连接的机器进行分组 - 因此对于非直接连接的机器,不需要子网掩码即可访问它们。
值得注意的是,防火墙或其他软件也可以使用子网掩码来指定以相同方式处理的一组 IP 地址 - 这就是为什么它们有时在 LAN 之外相关 - 但对于通常在 Internet 上进行通信而言并非必需。
答案2
所有使用 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
每次系统想要将流量发送到某个 IP 时,它都会搜索此表。如果它找到与子网掩码匹配且符合目标网络,它会将流量从由以下地址标识的网络适配器发送出去:我面对。
所有这些网络适配器都是“直接连接的”,这就是为什么您看到网关为 0.0.0.0。这意味着,如果系统想要将某些内容发送到 192.168.2.80,它可以通过接口 eth2 直接将其发送到 192.168.2.80。
但是由于子网掩码的原因,192.168.87.80 不会通过 eth2 出去,而是通过 vmnet1 出去。
如果一个 IP 可以容纳在两个条目中,则使用具有较大 CIDR 子网掩码的 IP(“更具体”)。如果有两个 IP 具有相同的子网掩码,则使用度量来打破平局,如果时间到了,系统可能会选择一个并坚持使用它或在它们之间进行负载平衡。
例如
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
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)。
这就是子网的作用。告诉系统哪个接口可以访问哪些网络。您的系统在发送流量时会使用它(以确定互联网和本地网络之间的差异),路由器会使用它来转发流量。
除了这些情况之外,子网掩码是不需要的。基本上,网络路由层之后就不需要子网掩码了。HTTP 是应用层。
答案3
子网掩码对于主机本身和路由设备都有用。
您的 PC 不需要知道远程设备的子网掩码,它只需要知道地址并与其进行比较自己的地址及其自己的子网掩码它将知道该地址是本地地址还是远程地址。
如果是本地的,那么数据包将被直接发送,如果是远程的,那么数据包将被发送到默认网关。