区分公有地址(Public IP Addresses)和私有地址(Private IP Addresses)主要依据它们的分配、使用范围以及是否能在全球互联网上直接路由。 以下是一些关键区别: 分配和管理: 公有地址:由互联网地址分配机构(Internet Assigned Numbers Authority, IANA)管理和分配,确保全球唯一性。组织或个人需要向互联网服务提供商(ISP)申请获得公有地址,以便设备能够直接接入互联网并被全球其他设备识别和通信。 私有地址:由IANA预留的一系列地址,专门用于组织内部网络,无需向ISP申请,也不需全球唯一。这些地址不能直接在互联网上路由。 地址范围: 私有地址范围: Class A: 10.0.0.0 到 10.255.255.255 Class B: 172.16.0.0 到 172.31.255.255 Class C: 192.168.0.0 到 192.168.255.255 公有地址则涵盖了除上述私有地址范围之外的所有IPv4地址空间。 使用场景: 公有地址:通常分配给需要直接访问互联网的服务器、路由器出口等,或者任何需要从全球互联网上可直接访问的设备。 私有地址:用于企业内部网络、家庭网络等封闭环境,旨在节省公有IP地址资源,增加网络配置的灵活性,并提升安全性。 路由: 公有地址:可以直接在互联网上路由,全球唯一,可以被任何互联网上的设备直接访问。 私有地址:在互联网上不可路由,要使私有地址的设备能够访问互联网,通常需要通过网络地址转换(Network Address Translation, NAT)技术,将私有地址转换为一个或多个公有地址。 因此,判断一个IP地址是公有还是私有,最直接的方法是检查其是否落在上述私有地址的范围内。如果不在私有地址范围内,则该地址是公有地址。 以下是 golang 的检测是否是私有地址的实现: $GOROOT/src/net/ip.go
func (ip IP) IsPrivate() bool { if ip4 := ip.To4(); ip4 != nil { // Following RFC 1918, Section 3. Private Address Space which says: // The Internet Assigned Numbers Authority (IANA) has reserved the // following three blocks of the IP address space for private internets: // 10.0.0.0 - 10.255.255.255 (10/8 prefix) // 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) // 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) return ip4[0] == 10 || (ip4[0] == 172 && ip4[1]&0xf0 == 16) || (ip4[0] == 192 && ip4[1] == 168) } // Following RFC 4193, Section 8. IANA Considerations which says: // The IANA has assigned the FC00::/7 prefix to "Unique Local Unicast". return len(ip) == IPv6len && ip[0]&0xfe == 0xfc }
使用:
ipv4Private1 := net.ParseIP("10.255.0.0") fmt.Println(ipv4Private1.IsPrivate()) // true
Link:https://www.cnblogs.com/farwish/p/18280636 标签:私有,0.0,公有,golang,地址,互联网,ip4 From: https://www.cnblogs.com/farwish/p/18280636