我在这里查看了Golang源代码和net包下的DefaultMask((,我不明白的是为什么这个函数不是一个包函数(没有接收器(,所以从我的垂直、正确的调用应该是:
ip := net.ParseIP("192.168.1.1")
i := ip.Mask(net.DefaultMask()) // <----
而不是:
ip := net.ParseIP("192.168.1.1")
i := ip.Mask(ip.DefaultMask()) <----
IPv4默认掩码与经典的IPv4分配有关,这主要是历史事件。
A类IP从0.0.0.0上升到127..255.255.255,B类上升到191.255.255.255C类上升到223.255.255.255.255。因此,可以简单地通过查看IP地址的第一段来确定类掩码。这就是DefaultMask()
获取IP地址的原因。
例如,IP 192.168.1.1是C类,因此它的默认子网掩码是255.255.255.0。
类掩码在互联网上是不相关的,因为它只使用CIDR(和IPv6(。
如果查看源代码,您可以了解原因。它需要知道类:
switch {
case ip[0] < 0x80:
return classAMask
case ip[0] < 0xC0:
return classBMask
default:
return classCMask
}