mul*_*sen 2 routing ip-address ipv4 macos
如果您netstat -rn在 Mac 上运行(我使用的是 Mojave 10.14.6,但我怀疑这适用于所有 MacOS),您将获得 IP 路由表,但某些 IP 地址不完整,并且网络掩码列不存在:
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.1.1 UGSc 192 0 en0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 1 248 lo0
169.254 link#5 UCS 1 0 en0 !
192.168.1 link#5 UCS 1 0 en0 !
192.168.1.1/32 link#5 UCS 1 0 en0 !
192.168.1.1 xx:xx:xx:xx:xx:xx UHLWIir 68 1450 en0 1144
192.168.1.101 yy:yy:yy:yy:yy:yy UHLWI 0 0 en0 1073
192.168.1.103/32 link#5 UCS 0 0 en0 !
224.0.0/4 link#5 UmCS 2 0 en0 !
224.0.0.251 z:z:zz:zz:z:zz UHmLWI 0 0 en0
239.255.255.250 1:1:11:11:11:11 UHmLWI 0 540 en0
255.255.255.255/32 link#5 UCS 0 0 en0 !
Run Code Online (Sandbox Code Playgroud)
我该如何解释不完整的IP地址?例如,什么是127?我应该将其解释为吗127.0.0.0?这是否始终是规则 - 假设丢失的八位字节为 0 并且 Mac 路由表中显示的八位字节是最重要的八位字节(即127is127.0.0.0和 not 0.0.0.127)?
此外,在 Windows ( route print) 和 Linux ( route -n) 上还有一个网络掩码/genmask 列。但由于 Mac 上没有这样的列,我猜测它被替换为“目标”列中的 CIDR 表示法(例如,192.168.1.1/32而不是192.168.1.1使用 的掩码255.255.255.255)。但并非所有路由的“目标”列中都有 CIDR 表示法 - 例如239.255.255.250上表中的示例。当目标列中的 IP 地址省略斜杠和后面的掩码时,我们是否假设掩码始终为0.0.0.0?
netstatmacOS(也许还有其他 BSD 派生的 UNIX?)附带的版本使用了一种有点特殊的速记方式来表示地址和网络掩码。正如您推断的,它在列中使用 CIDR 表示法destination,而不是具有单独的网络掩码列。但它使用了一些基于 CIDR 之前的“有类”寻址系统的缩写(感谢@grawity 指出了这一点并让我查看源代码来确认它)。
简短摘要:在旧的有类系统中,第一个八位字节所在的地址0- 127(保留 0 和 127)是“A 类”网络,其网络掩码为255.0.0.0(我们现在称之为/8)。128.x-191.x是“B 类”网络,网络掩码为255.255.0.0( /16)。192.x.x-223.x.x是“C 类”网络,网络掩码为255.255.255.0( /24)。其余地址空间是“D 类”(用于多播)和“E 类”(保留),具有未定义的网络掩码。该系统不灵活且效率低下,因此在 1993 年被无类别域间路由 (CIDR) 所取代(!),但它的痕迹仍然存在于各个地方,包括这里。
基本上,netstat所做的就是省略与有类系统下期望的内容相匹配的内容(因此可以从该系统中推断出)。好吧,除了它将 D 类和 E 类视为具有与 C 类相同的隐式网络掩码(即/24)。
0八位位组结尾,其中主机部分位于旧系统下,则它会忽略这些八位位组。例如,10/24是 的缩写10.0.0.0/24。但177.0.0.0/24只会缩短为177.0/24,因为这将是 B 类网络,因此第二个八位字节被假定为重要。169.254是 的缩写,169.254.0.0/16因为169属于 B 类范围。这有点复杂,但将其转换回完整列表很容易:如果它没有列出 CIDR 后缀,则它只是显式列出的八位字节数的 8 倍(或主机条目的 /32);如果没有列出 4 个八位字节,请根据需要在地址部分添加“.0”。例如,169.254-> 169.254/16-> 169.254.0.0/16。
| 归档时间: |
|
| 查看次数: |
1756 次 |
| 最近记录: |