从电脑到互联网:IPv4 地址在真实通信中如何工作

文章目录

很多人第一次学习 IPv4 时,会记住公网 IP、私网 IP、回环地址和广播地址的定义,但真正开始配置网络、部署服务或排查故障时,仍然容易卡住。

例如:

复制代码
为什么我的电脑是 192.168.1.23,却可以访问互联网?
为什么我在浏览器输入 127.0.0.1,访问的是自己?
为什么局域网其他电脑能访问 NAS,但外网访问不了?
为什么电脑突然拿到了 169.254.x.x 地址后就不能上网?
为什么端口映射、NAT 和公网 IP 总是绑在一起出现?

这些问题并不是单独的知识点,而是一条完整的数据通信链路。

理解 IPv4 的关键,不是只会背地址范围,而是能把一台设备从"获得地址"到"访问局域网",再到"访问公网"的过程完整串起来。

一、一台电脑联网时,究竟拿到了哪些信息

当电脑连上家庭 Wi-Fi 或公司有线网络后,它通常会自动获得一组网络配置。

在 Windows 中可以执行:

复制代码
ipconfig /all

你通常会看到类似信息:

复制代码
IPv4 地址        : 192.168.1.23
子网掩码         : 255.255.255.0
默认网关         : 192.168.1.1
DNS 服务器       : 192.168.1.1

这四项共同决定了电脑如何进行通信。

IPv4 地址:

复制代码
192.168.1.23

表示电脑在局域网中的身份。

子网掩码:

复制代码
255.255.255.0

告诉电脑哪些设备属于"同一个局域网"。

默认网关:

复制代码
192.168.1.1

表示当目标不在本地网络时,数据应该交给谁。

DNS 服务器负责把域名转换成 IP 地址。例如:

复制代码
www.example.com

会被解析为某个公网 IPv4 地址。

可以把这四项理解为:

网络参数 作用
IPv4 地址 我是谁
子网掩码 谁和我在同一片网络
默认网关 外面的数据交给谁
DNS 域名对应哪个 IP

如果缺少其中任何一项,网络通信都会受到影响。

比如电脑有 IP 地址,却没有默认网关,它可能还能访问局域网中的打印机和 NAS,却无法正常访问互联网。

二、私网通信:两台设备怎样在同一局域网中找到彼此

假设家里有两台设备:

复制代码
笔记本:192.168.1.23
NAS:192.168.1.88

两者的子网掩码都是:

复制代码
255.255.255.0

这意味着它们都属于:

复制代码
192.168.1.0/24

这个网段可以粗略理解为:

复制代码
192.168.1.1 到 192.168.1.254

之间的设备,默认都处于同一个局域网。

当笔记本访问:

复制代码
192.168.1.88

系统首先会判断目标地址是否和自己处于同一个网段。

它会发现:

复制代码
192.168.1.23
192.168.1.88

前面三个数字相同,并且子网掩码是 /24,因此可以判断目标就在本地网络。

这时笔记本不会把数据交给默认网关,而是会直接寻找 NAS 的 MAC 地址。

这里会用到 ARP 协议。

笔记本会向局域网发送广播:

复制代码
谁是 192.168.1.88?
请告诉我你的 MAC 地址。

NAS 收到后回复:

复制代码
192.168.1.88 是我。
我的 MAC 地址是 XX-XX-XX-XX-XX-XX。

随后笔记本就可以把数据帧直接发送给 NAS。
NAS 192.168.1.88 局域网 笔记本 192.168.1.23 NAS 192.168.1.88 局域网 笔记本 192.168.1.23 #mermaid-svg-HC4clIWf9sCRTUGV{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HC4clIWf9sCRTUGV .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HC4clIWf9sCRTUGV .error-icon{fill:#552222;}#mermaid-svg-HC4clIWf9sCRTUGV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HC4clIWf9sCRTUGV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HC4clIWf9sCRTUGV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HC4clIWf9sCRTUGV .marker.cross{stroke:#333333;}#mermaid-svg-HC4clIWf9sCRTUGV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HC4clIWf9sCRTUGV p{margin:0;}#mermaid-svg-HC4clIWf9sCRTUGV .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-HC4clIWf9sCRTUGV text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-HC4clIWf9sCRTUGV .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-HC4clIWf9sCRTUGV .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-HC4clIWf9sCRTUGV .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-HC4clIWf9sCRTUGV .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-HC4clIWf9sCRTUGV #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-HC4clIWf9sCRTUGV .sequenceNumber{fill:white;}#mermaid-svg-HC4clIWf9sCRTUGV #sequencenumber{fill:#333;}#mermaid-svg-HC4clIWf9sCRTUGV #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-HC4clIWf9sCRTUGV .messageText{fill:#333;stroke:none;}#mermaid-svg-HC4clIWf9sCRTUGV .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-HC4clIWf9sCRTUGV .labelText,#mermaid-svg-HC4clIWf9sCRTUGV .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-HC4clIWf9sCRTUGV .loopText,#mermaid-svg-HC4clIWf9sCRTUGV .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-HC4clIWf9sCRTUGV .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-HC4clIWf9sCRTUGV .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-HC4clIWf9sCRTUGV .noteText,#mermaid-svg-HC4clIWf9sCRTUGV .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-HC4clIWf9sCRTUGV .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-HC4clIWf9sCRTUGV .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-HC4clIWf9sCRTUGV .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-HC4clIWf9sCRTUGV .actorPopupMenu{position:absolute;}#mermaid-svg-HC4clIWf9sCRTUGV .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-HC4clIWf9sCRTUGV .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-HC4clIWf9sCRTUGV .actor-man circle,#mermaid-svg-HC4clIWf9sCRTUGV line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-HC4clIWf9sCRTUGV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ARP 广播:谁是 192.168.1.88? 我是 192.168.1.88,这是我的 MAC 地址 发送文件、网页或共享服务请求

这个过程中,路由器可能只是提供 Wi-Fi 或交换功能,但并不真正参与三层路由转发。

因为两台设备本身就处于同一个网段。

这也是为什么在家里访问 NAS、打印机、摄像头时,速度通常比较快,流量不会经过公网,也不会消耗宽带出口速度。

三、访问公网:私网 IP 如何借助 NAT 走向互联网

现在假设笔记本要访问公网 DNS:

复制代码
8.8.8.8

笔记本本机地址是:

复制代码
192.168.1.23

目标地址是:

复制代码
8.8.8.8

电脑根据子网掩码判断后,会发现 8.8.8.8 不属于本地局域网。

于是它不会尝试直接寻找 8.8.8.8 的 MAC 地址,而是把数据交给默认网关:

复制代码
192.168.1.1

也就是家庭路由器。

但问题在于,公网互联网并不认识:

复制代码
192.168.1.23

因为这是私网地址,不能在互联网中路由。

此时,路由器会进行 NAT,也就是网络地址转换。

例如:

复制代码
内网电脑:192.168.1.23:52341
路由器公网IP:203.0.113.50:40001
目标服务器:8.8.8.8:53

路由器会在内部建立一条映射记录:

复制代码
192.168.1.23:52341
↓
203.0.113.50:40001

然后把数据包的源地址改写为公网地址:

复制代码
203.0.113.50:40001

目标服务器看到的并不是你电脑的私网 IP,而是路由器的公网 IP。

服务器回复数据时,会发送到:

复制代码
203.0.113.50:40001

路由器再根据 NAT 表,把数据转回:

复制代码
192.168.1.23:52341

整个过程可以表示为:
#mermaid-svg-q54eI9bD13i9wCKG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-q54eI9bD13i9wCKG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-q54eI9bD13i9wCKG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-q54eI9bD13i9wCKG .error-icon{fill:#552222;}#mermaid-svg-q54eI9bD13i9wCKG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-q54eI9bD13i9wCKG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-q54eI9bD13i9wCKG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-q54eI9bD13i9wCKG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-q54eI9bD13i9wCKG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-q54eI9bD13i9wCKG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-q54eI9bD13i9wCKG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-q54eI9bD13i9wCKG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-q54eI9bD13i9wCKG .marker.cross{stroke:#333333;}#mermaid-svg-q54eI9bD13i9wCKG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-q54eI9bD13i9wCKG p{margin:0;}#mermaid-svg-q54eI9bD13i9wCKG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-q54eI9bD13i9wCKG .cluster-label text{fill:#333;}#mermaid-svg-q54eI9bD13i9wCKG .cluster-label span{color:#333;}#mermaid-svg-q54eI9bD13i9wCKG .cluster-label span p{background-color:transparent;}#mermaid-svg-q54eI9bD13i9wCKG .label text,#mermaid-svg-q54eI9bD13i9wCKG span{fill:#333;color:#333;}#mermaid-svg-q54eI9bD13i9wCKG .node rect,#mermaid-svg-q54eI9bD13i9wCKG .node circle,#mermaid-svg-q54eI9bD13i9wCKG .node ellipse,#mermaid-svg-q54eI9bD13i9wCKG .node polygon,#mermaid-svg-q54eI9bD13i9wCKG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-q54eI9bD13i9wCKG .rough-node .label text,#mermaid-svg-q54eI9bD13i9wCKG .node .label text,#mermaid-svg-q54eI9bD13i9wCKG .image-shape .label,#mermaid-svg-q54eI9bD13i9wCKG .icon-shape .label{text-anchor:middle;}#mermaid-svg-q54eI9bD13i9wCKG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-q54eI9bD13i9wCKG .rough-node .label,#mermaid-svg-q54eI9bD13i9wCKG .node .label,#mermaid-svg-q54eI9bD13i9wCKG .image-shape .label,#mermaid-svg-q54eI9bD13i9wCKG .icon-shape .label{text-align:center;}#mermaid-svg-q54eI9bD13i9wCKG .node.clickable{cursor:pointer;}#mermaid-svg-q54eI9bD13i9wCKG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-q54eI9bD13i9wCKG .arrowheadPath{fill:#333333;}#mermaid-svg-q54eI9bD13i9wCKG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-q54eI9bD13i9wCKG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-q54eI9bD13i9wCKG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-q54eI9bD13i9wCKG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-q54eI9bD13i9wCKG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-q54eI9bD13i9wCKG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-q54eI9bD13i9wCKG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-q54eI9bD13i9wCKG .cluster text{fill:#333;}#mermaid-svg-q54eI9bD13i9wCKG .cluster span{color:#333;}#mermaid-svg-q54eI9bD13i9wCKG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-q54eI9bD13i9wCKG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-q54eI9bD13i9wCKG rect.text{fill:none;stroke-width:0;}#mermaid-svg-q54eI9bD13i9wCKG .icon-shape,#mermaid-svg-q54eI9bD13i9wCKG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-q54eI9bD13i9wCKG .icon-shape p,#mermaid-svg-q54eI9bD13i9wCKG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-q54eI9bD13i9wCKG .icon-shape .label rect,#mermaid-svg-q54eI9bD13i9wCKG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-q54eI9bD13i9wCKG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-q54eI9bD13i9wCKG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-q54eI9bD13i9wCKG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 笔记本

192.168.1.23
路由器 NAT
公网 IP

203.0.113.50
互联网服务器

8.8.8.8

这就是为什么一个家庭中的十几台设备,都可以共享一个公网 IPv4 地址上网。

手机、电脑、平板、电视、NAS 可能都使用:

复制代码
192.168.1.x

但对外看起来,它们都像是从同一个公网地址访问互联网。

四、为什么外网不能直接访问你的电脑

很多人第一次在家搭建网站或远程桌面时,会遇到一个现象:

复制代码
本机能访问
局域网能访问
外网却访问不了

例如你的电脑运行了一个 Web 服务:

复制代码
192.168.1.23:8080

局域网内的其他设备可以访问:

复制代码
http://192.168.1.23:8080

但外网用户无法通过你的宽带公网 IP 访问。

原因通常有两层。

第一层是 NAT。

外网用户访问的是:

复制代码
203.0.113.50:8080

但路由器并不知道这个请求应该转发给哪一台内网设备。

因为家庭中可能有多台电脑:

复制代码
192.168.1.10
192.168.1.23
192.168.1.50
192.168.1.88

如果没有额外规则,路由器无法判断端口 8080 应该给谁。

这时就需要配置端口映射。

例如:

复制代码
公网 8080
↓
192.168.1.23:8080

路由器收到外部连接后,就会把请求转发给指定电脑。

第二层是运营商网络。

很多家庭宽带实际上并没有独立公网 IP,而是处于运营商的大型 NAT 网络之中,也叫 CGNAT。

此时,你家的路由器表面上可能获得一个地址,但这个地址并不是真正可从公网访问的独立公网 IP。

例如路由器 WAN 口地址可能是:

复制代码
100.64.x.x
10.x.x.x
172.16.x.x
192.168.x.x

这些地址往往意味着你仍然处于私网或运营商共享地址空间中。

即使配置了端口映射,也可能无法被外部互联网访问。

因此,家庭部署服务时,需要先确认:

复制代码
路由器 WAN 口地址是什么?
通过网页查询到的公网 IP 是什么?
二者是否一致?

如果不一致,通常意味着存在上级 NAT。

五、回环、广播与自动地址:排查网络故障时最常见的线索

网络出现问题时,很多 IPv4 地址本身就是重要线索。

127.0.0.1:先测试本机协议栈

执行:

复制代码
ping 127.0.0.1

如果能正常返回,通常说明本机 TCP/IP 协议栈基本正常。

它并不能证明网线、Wi-Fi、路由器或互联网正常,只能说明:

电脑至少可以通过回环接口和自己通信。

如果本机开发服务打不开,可以先检查:

复制代码
http://127.0.0.1:端口号

若能打开,说明服务可能正常运行;如果局域网其他设备打不开,则更可能是监听地址、防火墙或端口开放问题。

169.254.x.x:往往意味着 DHCP 获取失败

如果电脑突然显示:

复制代码
169.254.20.55

通常说明它没有从 DHCP 服务器获得正常地址。

这时常见原因包括:

  • Wi-Fi 已连接但路由器 DHCP 异常;
  • 网线连接正常但交换机或路由器故障;
  • 网卡驱动出现问题;
  • DHCP 地址池耗尽;
  • 企业网络需要认证但认证未完成。

这种地址通常只能用于非常有限的链路本地通信,无法正常访问互联网。

排查时可以尝试重新获取地址:

复制代码
ipconfig /release
ipconfig /renew

也可以检查路由器是否正常分配地址。

广播地址:局域网发现与自动配置的重要基础

广播地址虽然平时不容易被用户直接看到,但它参与了大量自动化网络过程。

例如 DHCP 获取地址时,电脑刚启动可能连自己的 IP 都不知道。它会向局域网广播请求:

复制代码
有没有 DHCP 服务器?
请给我分配一个可用地址。

DHCP 服务器回应后,电脑才获得:

复制代码
IPv4 地址
子网掩码
默认网关
DNS 服务器

广播让设备在"不知道对方是谁"的情况下,仍然可以先发出全网范围的询问。

不过广播只在局域网内有效。

路由器通常不会把普通广播带到互联网另一端,因为广播包一旦无限扩散,会造成巨大网络负担。

结语:IPv4 地址的真正价值,是让通信知道该往哪里走

IPv4 地址并不是静态标签,而是网络通信中的导航信息。

私网地址决定设备在局域网中的身份;默认网关负责把外部流量送向路由器;NAT 让多个私网设备共享公网地址;回环地址帮助程序和本机通信;广播地址支撑局域网中的自动发现与地址分配。

当你以后遇到网络问题时,可以按这个顺序思考:

复制代码
本机有没有 IPv4 地址?
地址是否属于正常私网范围?
有没有默认网关?
能否 ping 127.0.0.1?
能否 ping 网关?
能否 ping 公网 IP?
域名是否能正常解析?

这套排查路径,本质上就是沿着 IPv4 数据通信的路线,一层层确认问题到底出现在电脑、局域网、路由器、运营商网络还是 DNS 环节。