打开电脑,用命令行敲一下ipconfig,看到自己的IP是192.168.1.100;再打开浏览器搜索“我的IP是多少”,结果却显示203.0.113.10。明明都是我的设备,为什么IP地址对不上?再翻一下路由器后台,WAN口和LAN口的IP又是两个完全不同的地址。这个现象背后,就是今天想聊透的话题:公共IP地址和私有IP地址的区别。
不夸张地讲,搞懂这两个概念,你的网络知识水平会直接上一个台阶。不管是排查家里WiFi莫名其妙断网,还是公司内部网段规划,或者纠结要不要向运营商申请公网IP,全都能从这对概念里找到答案。这篇文章我会从原理讲到实操,把“为什么会有公网和私网之分”“NAT到底做了什么”“怎么判断自己用的是哪种地址”“常见故障怎么排查”一次性说清楚,适合网络新手,也适合已经入行但一直没系统整理过这部分的从业者对照看看。
1. 是什么让同样的IP有了“公”与“私”之分
1.1 IP地址只是“门牌号”,但门牌号分级别
把IP地址理解成门牌号,是最直观的方式。公共IP地址相当于一个国家级标准地址,比如你把城市、街道、门牌号报出来,任何人按这个地址都能找到你。私有IP地址则像小区内部的楼栋号,“3号楼2单元501”,这个表述只在小区内部有意义,小区外面的人不可能靠它定位到你。
这个类比不是随便打的,它直接对应了IP地址的两个核心属性:唯一性和可路由性。公共IP地址在整个互联网范围内全局唯一,全球互联网上的路由器都认识它,看到目标地址是它,就知道该往哪个方向转发数据包。私有IP地址则只要求在本地网络内部唯一,互联网主干路由器根本不认这些地址,收到目标地址为私有IP的数据包,直接丢弃不转发。
1.2 为什么必须要有私有IP:IPv4真的不够分
说到根子上,私有IP的出现是因为IPv4地址资源太紧张了。IPv4用32位二进制表示地址,总数量是2的32次方,约42.9亿个。听起来不少,但你要知道,这40多亿个地址里还要扣除环回地址、保留地址、组播地址等特殊用途部分,实际能分配给全球设备使用的公共IP地址远没有这么多。
而今天全球联网的设备数量,早就远远超过42.9亿。手机、电脑、路由器、智能电视、摄像头、智能音箱,人手好几台设备,如果每台设备都要求一个全球唯一的公共IP,IPv4地址池早就爆了。私有IP就是在这种背景下出现的折中方案:内部网络使用私有地址,出口统一通过NAT映射成一个公共IP,这样整个家庭或者整个公司就只需要一个公共IP就能让所有设备上网。
1.3 公与私最本质的三个差异
把公共IP和私有IP放在一起对照,核心差异其实是三个维度:
- 唯一性:公共IP全球唯一,没有任何两台互联网设备能共用同一个公共IP;私有IP只要求在本地网段内唯一,两家公司内部完全可以用同一个
192.168.1.1,互不冲突。 - 可路由性:公共IP可以被全球互联网路由转发;私有IP默认不会被公网路由器转发,这也是“外网无法直接访问内网设备”的根本原因。
- 分配方式:公共IP需要向运营商申请,有成本,有配额限制;私有IP自己在路由器上就能分配,想怎么规划都行,成本为零。
理解了这三点,后面所有关于IP的实际问题,基本都能顺着这条线捋清楚。
2. 三大私有网段是怎么来的,怎么选
2.1 RFC 1918规定的三个保留段
私有IP并不是随便拿一段地址出来就能用的,它有一套明确的国际标准,最早定义在RFC 1918文档里。规定保留给私有网络使用的地址段一共有三个:
| 网段 | 地址范围 | CIDR表示 | 可用IP数(约) | 典型场景 |
|---|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | 1677万 | 大型企业、数据中心 |
| 172.16.0.0/12 | 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | 104万 | 中大型网络 |
| 192.168.0.0/16 | 192.168.0.0 - 192.168.255.255 | 192.168.0.0/16 | 65408 | 家庭、小型办公网络 |
注意,虽然三段地址都用于私有网络,但规模定位完全不同。从数量上就能看出来:10.0.0.0/8一个网段能容纳上千万台设备,适合大型企业做精细的子网划分;192.168.0.0/16相对最小,但足够家庭和小型办公室使用,这也是家用路由器默认都用192.168.1.1或者192.168.0.1的原因之一。
2.2 子网掩码到底在干什么
很多人看到192.168.1.0/24这个写法会懵,实际上这个/24说的是子网掩码。IPv4地址分为网络位和主机位,/24代表前24位是网络部分,后8位是主机部分。换算成十进制子网掩码就是255.255.255.0,意味着这个网段里面可以有254个可用主机地址(2的8次方减去网络地址和广播地址各一个)。
家用场景为什么普遍用/24?因为对于一个家庭或者一个小办公室来说,254个可用IP绰绰有余。而大型企业内部常采用10.0.0.0/8,不是因为需要一千多万台设备,而是因为大网段可以灵活切割:先切成若干个/16,每个部门分一个,部门内部再切成/24,每个楼层一个子网。这种层级化设计既方便管理,又能配合VLAN做隔离,这也是私有IP在地址规划上最大的价值之一。
2.3 补充:169.254.x.x和127.x.x.x不是私有IP
和私有IP容易混淆的还有两类特殊地址,需要特别区分。127.0.0.1是环回地址,代表设备自身,数据包不会真的发到网络上,一般用于本机自测。169.254.0.0/16是链路本地地址,设备通过DHCP拿不到IP时,操作系统会给自己自动分配一个169.254.x.x的地址,让设备至少能在本地链路上通信。
看到169.254.x.x的IP,是一个很典型的故障信号:说明这台设备的DHCP获取失败了。可能是网线没接好、路由器没开DHCP、或者DHCP地址池已经耗尽。我的建议是,遇到这种地址,别去纠结它是不是私有IP的问题,直接按DHCP故障排查就对了。
3. NAT:让私有IP与公共IP共存的翻译机制
3.1 一次上网请求的完整翻译过程
私有IP不能直接在互联网上路由,那内网设备是怎么上网的?靠的是 NAT,全称 Network Address Translation,网络地址转换。NAT的核心工作就是做“翻译”:把私有IP地址翻译成公共IP地址。
具体过程我用一个例子拆开讲。假设你家电脑的IP是192.168.1.100,路由器的公共IP是203.0.113.10,电脑要访问一个网站的服务器198.51.100.20:
- 电脑发出数据包,源地址是
192.168.1.100:12345,目标地址是198.51.100.20:443。 - 数据包到达路由器,路由器发现源地址是内网私有IP,不能直接发出去,于是把源地址改写成自己的公共IP
203.0.113.10,并把源端口改写成54321,同时在自己的NAT映射表里记一笔:203.0.113.10:54321 对应 192.168.1.100:12345。 - 网站服务器收到数据包,看到源地址是
203.0.113.10,处理后回包,目标地址写的是203.0.113.10:54321。 - 路由器收到回包,查NAT映射表,确认这个数据包原本对应的是
192.168.1.100:12345,于是把目标地址改回去,转发给家里的电脑。
这个过程中,网站服务器全程只知道你家的公共IP,完全不知道192.168.1.100的存在。NAT不仅解决了IP地址不够用的问题,还顺带隐藏了整个内网的拓扑结构。用个生活比喻,就像公司前台帮全体员工代收快递,外面的人只认识前台地址,前台收到后再按名字分发给具体的人。
3.2 出方向和入方向的不对称
NAT有一个非常重要的不对称特性:内网设备主动访问外网,几乎不需要额外配置;但外网设备想主动访问内网设备,就非常困难。
原因是这样的。出方向访问时,内网设备先发起连接,路由器可以在NAT映射表里动态创建一条记录,所以翻译过程畅通无阻。但入方向访问时,外部设备想主动连接内网设备,路由器手里没有对应的映射记录,不知道该把数据包转给谁,只能直接丢弃。
要让外网主动访问内网设备,就得靠端口映射,也叫端口转发。操作本质就是提前在NAT表里手动写一条固定的规则:公网IP的某个端口,固定映射到内网某台设备的某个IP和端口。比如把203.0.113.10:3389映射到192.168.1.100:3389,外网访问路由器的3389端口,路由器就会把数据包转给那台电脑。
这也是为什么“在家搭个网站”比“买云服务器搭网站”麻烦得多:你不仅要申请公网IP,还要在路由器上做端口映射,还要祈祷运营商没封常用端口。而云服务器天生就有公共IP,不需要NAT转发,直接就能被访问。
3.3 NAT的局限
虽然NAT解决了IPv4不够用的大问题,但它的副作用也很明显。
- 连接数受限:家用路由器做NAT时,实际上是靠端口来区分不同设备的连接,IPv4端口一共只有65535个,刨除一些保留端口,实际可用端口有限。当内网设备数量多、连接数大时,可能出现端口不够用的情况。
- P2P通信困难:如果两台设备都在NAT后面,彼此之间无法直接建立连接,因为两边都没有公网IP地址可以互相定位。这也是P2P下载、某些游戏联机、视频通话会卡在“无法连接”上的原因之一,必须借助第三方服务器做协助才能打通。
- 公共IP一旦异常影响全局:整个内网共享一个公共IP出口,如果这个IP被防火墙限制了或者被运营商临时封禁,所有内网设备全部跟着遭殃,排查起来也很头疼。
3.4 IPv6:摆脱NAT的最终方向
聊到NAT的局限性,就绕不开IPv6。IPv6的地址空间有多大?2的128次方,这个数字大到什么程度,相当于地球上每一粒沙子都可以分到好几万亿个IP地址。所以在IPv6的世界里,不需要再靠NAT做翻译,每个设备都可以直接拿到一个全球唯一的公共IPv6地址。
有了IPv6,设备之间可以实现真正的端到端通信,P2P、远程访问、物联网设备管理都会简单很多。但现实中IPv4和IPv6还要长期共存,而且NAT不会立刻消失。另外需要注意,拥有公共IPv6地址不等于可以裸奔,设备暴露在公网上之后,防火墙和访问控制策略反而更加重要,这一点后面实操部分还会提到。
4. 公共IP与私有IP的日常差异全景对比
4.1 一张表看清核心差异
前两章讲了很多底层原理,这里用一张总表把公共IP和私有IP的差异收拢到一起,方便你以后遇到实际问题时快速查阅。
| 对比维度 | 公共IP地址 | 私有IP地址 |
|---|---|---|
| 分配来源 | IANA到区域机构再到运营商逐级分配给最终用户 | 本地路由器或管理员自行分配 |
| 全局唯一性 | 全球唯一 | 仅本地网段唯一 |
| 路由范围 | 全球互联网可路由 | 仅在私有网络内部有效 |
| 外部主动访问 | 可以被外部直接访问(需放行防火墙) | 不能被外部直接访问,需NAT端口映射 |
| 数量与成本 | 数量有限,通常需要申请和付费 | 数量几乎无限,免费 |
| 典型出现位置 | 路由器WAN口、云服务器公网IP | 电脑网卡IP、路由器LAN口、手机WiFi IP |
| 地址形态 | 除特殊段外几乎任意公网段 | 10.x.x.x、172.16-31.x.x、192.168.x.x |
4.2 场景一:家庭网络里的两个IP
绝大多数家庭网络环境,公共IP和私有IP是同时存在的。光猫或者路由器的WAN口,从运营商那里获取的是公共IP(或者被运营商再做一层NAT后的共享地址);而路由器的LAN口,则向家里所有设备发放192.168.x.x的私有IP地址。
理解这个结构之后,很多让人困惑的现象都能得到解释。比如电脑查到的IP是192.168.1.100,但网上查到的IP是203.0.113.10,因为前者是路由器发你的私有IP,后者是你家出口的公共IP。再比如家里所有设备上网,实际上共享的是同一个公共IP出口,外界看到的你家就是那一个地址。
4.3 场景二:企业办公网络
企业网络的特点是设备多、部门多、安全性要求高,所以普遍采用10.x.x.x这类大网段做私有地址规划。你可以用一个/8大网段,然后按部门或按楼层切分成不同的/24子网。每个业务部门之间通过路由策略进行隔离,访问外网统一走公司防火墙和NAT设备出口。
这个方案的好处很明显:内部地址完全自主可控,后续扩容不用重新规划整个网段;同时可以在出口NAT设备上做统一的访问控制和安全审计,而不是对每一台设备单独管理。很多大型企业内部的主机,表面上看到的是10.20.30.40这种私有地址,但实际上它们可能横跨了多个地域,通过内部专线互联,这个和家用网络完全不是一个量级。
4.4 场景三:云服务器与VPC
云服务器的IP分配逻辑,很多人以为是单独的体系,实际上依然逃不出公网与私网这对概念。
在云厂商的VPC(虚拟私有云)里,云服务器默认拿到的也是私有IP,通常是10.x.x.x或172.16.x.x网段,用于云内网设备之间的通信。如果这台服务器需要被公网访问,需要再绑定一个弹性公共IP,通常显示为另一个独立地址。所以你登录云服务器后台,经常能看到一台机器同时有两个IP:内网地址用于云内网互通,公网地址用于对外提供服务。这种设计的本质,就是把NAT和路由交给了云平台来托管,用户不用关心底层实现,只管申请和绑定。
5. 实操:怎么判断你正在用的是哪种地址
5.1 先看本机IP
判断的第一步,是看你本机当前拿到的是什么地址。
Windows系统,打开命令提示符输入ipconfig,找到正在使用的网卡,看IPv4地址那一行。macOS或Linux系统,终端里输入ifconfig或者ip addr也能看到同样的信息。
只要看到IP地址是以192.168.、10.、172.16.到172.31.开头的,基本可以确定是私有IP。家用路由器发出来的地址,最常见的就是192.168.x.x,这个没什么悬念。
5.2 再查一次公网IP
查看公共IP更简单,打开浏览器,搜索“IP地址查询”,或者直接用一些在线网络工具网站,页面会直接显示你当前访问互联网所用的公共IP地址。
然后做一个对比:如果路由器WAN口显示的IP和网上查询到的IP一致,说明你家网络拿到的确实是独立的公共IPv4地址。如果两者对不上,那说明中间还有一层NAT,这个就是下面要讲的CGNAT场景。
顺便说一个操作技巧:查自己当前设备的IP,建议在电脑上查;查“我家的公共IP”,建议在路由器后台看WAN口状态。这两步配合起来,能快速定位你处在什么样的网络环境里。
5.3 100.64.x.x这个网段意味着什么
如果你在路由器WAN口看到的IP是100.64.x.x或100.65.x.x这种地址,需要特别注意:这不是普通的公共IP,也不是标准的私有IP。100.64.0.0/10这个网段被专门用于运营商级NAT,也就是CGNAT,属于“共享地址空间”。
CGNAT的意思是,运营商没有给你一个独立的公共IP,而是让一大片用户共享几个公共IP出口,你在路由器WAN口看到的100.64.x.x,只是运营商设备发给你的一层私有地址。这种情况下,外网主动访问你家设备会非常费劲:即使你在自己的路由器上做了端口映射,数据包也大概率会在运营商那一层NAT被卡住,因为运营商不会给你做对应的映射规则。
确认自己是不是处于CGNAT之后,如果确实需要公网访问,一般要找运营商申请,具体能不能申请到要看当地的网络环境和套餐政策。我不对某个具体运营商的规则做评价,但从技术角度讲,公网IPv4在目前的网络环境里确实是稀缺资源,申请结果因地区而异。
5.4 怎么确认自己有没有公网IPv6
IPv6环境下,判断方法稍微有点不同。IPv6地址以2001:、2400:、2408:等开头的,通常是全球单播地址,也就是具有“公共”性质的IPv6地址。而fe80:开头的是链路本地地址,类似IPv4里的169.254.x.x,只在本地链路有效;fd开头的是唯一本地地址,类似IPv4中的私有地址。
想知道自己有没有可用的公网IPv6,可以在路由器WAN口状态里看IPv6地址是否获取到了.240e:、2408:等全球单播前缀,或者直接用一些测试IPv6的网站检测。如果路由器已经拿到IPv6前缀,并且电脑上也显示有240e:或2408:开头的地址,那就说明你已经在使用公网IPv6了。这种情况下,如果你通过IPv6访问家里设备,本质上就是在用设备的公共IPv6地址直接通信。
6. 常见误区、典型故障与排查实录
6.1 误区一:私有IP不能上网
这个误区非常普遍。很多人一看到自己的电脑是192.168.x.x,就开始担心是不是没有公网IP就不能上网。答案很明确:私有IP完全可以通过NAT访问互联网,只是“被外部主动访问”这件事比较困难。
“能不能上网”和“能不能被外部找到”是两个完全不同的问题。前者靠出方向NAT就能解决,后者需要入方向映射。分清这两个方向,能解决一大半的网络理解问题。
6.2 误区二:所有192.168开头的IP都能互通
192.168.1.x和192.168.2.x虽然都是私有IP,但它们属于不同的子网。如果两台设备分别在192.168.1.x和192.168.2.x网段,它们之间是无法直接通信的,数据包必须经过路由器或者三层交换机转发才行。
这个误区在办公室场景里很常见。比如一台电脑连着WiFi,拿到的是192.168.1.100,另一台打印机接在交换机上,地址是192.168.2.20,电脑直接访问打印机IP是访问不了的,除非它们之间的网络设备配置了跨网段路由。
6.3 故障:同一个网段里的IP冲突
IP冲突是私网环境里最容易出现的故障之一。现象就是设备上着上着网突然掉线,或者网络时好时坏,ping同一台设备一会儿通一会儿不通。
原因是局域网里有两台设备被配置成了相同的IP地址。简单说,ARP表混乱了,交换机不知道该把数据包转发给哪台设备。排查方法也不复杂:先ping那个冲突的IP,如果能通但响应不稳定,再用arp -a查看ARP表里对应的MAC地址,去交换机或者路由器后台对比是谁在使用这个IP。要彻底解决,建议给关键设备设置静态IP,其余设备用DHCP统一分配,并确认DHCP地址池没有包含已经静态绑定的IP。
6.4 故障:端口映射不生效
端口映射不生效,是私有网络环境里非常经典的问题。很多人把家里的NAS和监控做了端口映射,以为外网能访问了,结果一点开还是失败。我总结了几类最常见的原因:
- 光猫路由模式导致“双重NAT”:光猫自己做了一层NAT,后面路由器虽然做了端口映射,但光猫并没有把端口转发给路由器。最直接的解法是找运营商把光猫改成桥接模式,用下面的路由器直接拨号。改不了的话,就要在光猫上再做一次端口映射,把端口的整个链路打通。
- 目标设备IP变了:家里的设备开了DHCP,内网IP动态变化,端口映射还指向旧的IP,数据包自然转不到你的设备上。这一条建议给目标设备设置静态IP(DHCP保留或者手动配置)。
- 运营商封禁常用端口:即使成功做了映射,部分运营商对公网IP的80、443等常用端口有限制,用于普通的Web服务经常失败。可以尝试改用非常规高位端口测试。
- 目标设备自带防火墙:就算端口转发到位了,设备本身的防火墙策略也会拦截外网流量。Windows的防火墙默认就会拦掉不少入站请求,测试时需要临时放行对应端口。
排查端口映射问题时,我的习惯是先分三段:第一步看路由器WAN口是不是公网IP(如果WAN口是192.168.x.x或者100.64.x.x,后面就不用测了);第二步在同一局域网内,用另一台设备直接访问目标的“内网IP+端口”,确认服务本身是通的;第三步才从外网访问测试。每一步都能定位出一个独立的问题,这个方法能省不少时间。
6.5 老设备确实被运营商CGNAT挡住时的替代思路
如果公共IPv4确实申请不下来,家里又有NAS、监控这类需要从外网访问的设备,还有一个非常值得考虑的方向:IPv6。如果你的宽带获得了IPv6前缀,那家里的设备就有机会拿到全球唯一的IPv6地址,外网访问时直接用IPv6地址加端口,就绕开了IPv4公网地址不够用的限制。
当然,启用IPv6后要注意防火墙配置。设备拿到公网IPv6地址后,等于直接暴露在公网环境下,路由器自带的IPv6防火墙要留着,只放行需要对外开放的端口,不要为了方便把所有端口都打开。安全问题任何时候都不能大意。
最后说一点个人实操心得。我做网络相关事情这些年来,遇到的所有IP类问题,最后几乎都归结到同一个逻辑:先分清你手里拿的是公共IP还是私有IP,再分清你想做的是“出方向访问”还是“入方向被访问”。这两个方向对了,80%的网络问题就已经解决了。另外在给家里或办公室做地址规划时,我建议普通场景用192.168.x.x/24就够了;如果公司规模会成长,可以考虑用10.x.x.x大网段,但一定要规划好子网划分,别图省事整个/8直接铺满,后续想隔离想管理都会很痛苦。还有一个小习惯可以分享:看到任何IP,先看前几段判断网段大小和类型,再决定下一步怎么处理,这个直觉养成了,排查效率会快很多。