上一篇我们讲了交换机:主机靠 ARP 找 MAC,交换机靠 MAC 表找端口。今天开始进入网络层,聊一个所有人都见过、但很多人没真正想清楚的东西:IP 地址。
开场:IP 地址是不是电脑的"身份证"?
很多人刚学网络时,会听到一句话:
IP 地址就是电脑在网络里的身份证。
这句话不能说完全错。
但它很容易让人误会。
身份证通常比较稳定。
而 IP 地址经常会变。
- 你换个 Wi-Fi,IP 可能变
- 你重启路由器,公网 IP 可能变
- 你开个容器,里面又冒出一堆 IP
- 你上云之后,一台机器可能有私网 IP、公网 IP、弹性 IP、VIP、Pod IP、Service IP
身份证听了都想报警:
你们网络层身份管理是不是有点混乱?
所以更准确的说法是:
🔧 IP 地址是网络层用来标识主机或接口位置的地址。
再通俗一点:
IP 地址像互联网里的门牌号,用来告诉数据包要去哪里。
但这个"门牌号"不是永远固定的。
它可以被分配、回收、转换、隐藏、复用。
所以这一篇我们不只讲"IP 地址长什么样"。
更要讲清楚:
- IP 地址为什么存在?
- 它和 MAC 地址有什么区别?
- 公网 IP、私网 IP、回环地址分别是什么?
- 为什么
192.168.x.x到处都是? - 工程排查时看到 IP,应该怎么判断问题在哪?
先给结论:
MAC 负责当前链路的下一跳,IP 负责跨网络的最终目的地。
用前几篇的话串起来:
IP 管远方,MAC 管眼前。
这句话又来了。它不是水字数,它是网络基础里的高频考点,也是抓包时防止怀疑人生的护身符。
🔧 先看一张总览图:IP 和 MAC 的分工
假设你的电脑访问一台公网服务器。
text
你的电脑私网 IP:192.168.1.10
家庭网关 IP:192.168.1.1
公网服务器 IP:93.184.216.34
数据包的目标 IP 是公网服务器。
但第一跳以太网帧的目标 MAC 是网关。
#mermaid-svg-2sqhrtEiwRu9Azje{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-2sqhrtEiwRu9Azje .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2sqhrtEiwRu9Azje .error-icon{fill:#552222;}#mermaid-svg-2sqhrtEiwRu9Azje .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2sqhrtEiwRu9Azje .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2sqhrtEiwRu9Azje .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2sqhrtEiwRu9Azje .marker.cross{stroke:#333333;}#mermaid-svg-2sqhrtEiwRu9Azje svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2sqhrtEiwRu9Azje p{margin:0;}#mermaid-svg-2sqhrtEiwRu9Azje .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2sqhrtEiwRu9Azje .cluster-label text{fill:#333;}#mermaid-svg-2sqhrtEiwRu9Azje .cluster-label span{color:#333;}#mermaid-svg-2sqhrtEiwRu9Azje .cluster-label span p{background-color:transparent;}#mermaid-svg-2sqhrtEiwRu9Azje .label text,#mermaid-svg-2sqhrtEiwRu9Azje span{fill:#333;color:#333;}#mermaid-svg-2sqhrtEiwRu9Azje .node rect,#mermaid-svg-2sqhrtEiwRu9Azje .node circle,#mermaid-svg-2sqhrtEiwRu9Azje .node ellipse,#mermaid-svg-2sqhrtEiwRu9Azje .node polygon,#mermaid-svg-2sqhrtEiwRu9Azje .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2sqhrtEiwRu9Azje .rough-node .label text,#mermaid-svg-2sqhrtEiwRu9Azje .node .label text,#mermaid-svg-2sqhrtEiwRu9Azje .image-shape .label,#mermaid-svg-2sqhrtEiwRu9Azje .icon-shape .label{text-anchor:middle;}#mermaid-svg-2sqhrtEiwRu9Azje .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2sqhrtEiwRu9Azje .rough-node .label,#mermaid-svg-2sqhrtEiwRu9Azje .node .label,#mermaid-svg-2sqhrtEiwRu9Azje .image-shape .label,#mermaid-svg-2sqhrtEiwRu9Azje .icon-shape .label{text-align:center;}#mermaid-svg-2sqhrtEiwRu9Azje .node.clickable{cursor:pointer;}#mermaid-svg-2sqhrtEiwRu9Azje .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2sqhrtEiwRu9Azje .arrowheadPath{fill:#333333;}#mermaid-svg-2sqhrtEiwRu9Azje .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2sqhrtEiwRu9Azje .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2sqhrtEiwRu9Azje .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2sqhrtEiwRu9Azje .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2sqhrtEiwRu9Azje .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2sqhrtEiwRu9Azje .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2sqhrtEiwRu9Azje .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2sqhrtEiwRu9Azje .cluster text{fill:#333;}#mermaid-svg-2sqhrtEiwRu9Azje .cluster span{color:#333;}#mermaid-svg-2sqhrtEiwRu9Azje 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-2sqhrtEiwRu9Azje .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2sqhrtEiwRu9Azje rect.text{fill:none;stroke-width:0;}#mermaid-svg-2sqhrtEiwRu9Azje .icon-shape,#mermaid-svg-2sqhrtEiwRu9Azje .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2sqhrtEiwRu9Azje .icon-shape p,#mermaid-svg-2sqhrtEiwRu9Azje .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2sqhrtEiwRu9Azje .icon-shape .label rect,#mermaid-svg-2sqhrtEiwRu9Azje .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2sqhrtEiwRu9Azje .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2sqhrtEiwRu9Azje .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2sqhrtEiwRu9Azje :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 你的电脑
IP: 192.168.1.10
MAC: AA:AA
家庭网关
LAN IP: 192.168.1.1
MAC: GG:GG
互联网路由器
公网服务器
IP: 93.184.216.34
图上标注说明:
- IP 目标:公网服务器(93.184.216.34)
- 第一跳 MAC 目标:网关(GG:GG)
这里有两个层次:
| 层次 | 地址 | 作用 |
|---|---|---|
| 网络层 | IP 地址 | 标识最终目的地和路由方向 |
| 数据链路层 | MAC 地址 | 标识当前链路上的下一跳 |
用一句话说:
IP 决定"远方是谁",MAC 决定"下一步交给谁"。
这就是为什么你访问公网网站时,抓包看到:
text
目标 IP:公网服务器
目标 MAC:网关
这完全正常。不是包人格分裂,它只是分层工作。
IPv4 地址长什么样?
我们最常见的是 IPv4 地址。
它是 32 位,也就是 4 个字节。
通常写成点分十进制:
text
192.168.1.10
每一段是 8 位,取值范围是 0 到 255。
text
192 168 1 10
11000000 10101000 00000001 00001010
#mermaid-svg-hQ6uyQro8EF0iDKa{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-hQ6uyQro8EF0iDKa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hQ6uyQro8EF0iDKa .error-icon{fill:#552222;}#mermaid-svg-hQ6uyQro8EF0iDKa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hQ6uyQro8EF0iDKa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hQ6uyQro8EF0iDKa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hQ6uyQro8EF0iDKa .marker.cross{stroke:#333333;}#mermaid-svg-hQ6uyQro8EF0iDKa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hQ6uyQro8EF0iDKa p{margin:0;}#mermaid-svg-hQ6uyQro8EF0iDKa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa .cluster-label text{fill:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa .cluster-label span{color:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa .cluster-label span p{background-color:transparent;}#mermaid-svg-hQ6uyQro8EF0iDKa .label text,#mermaid-svg-hQ6uyQro8EF0iDKa span{fill:#333;color:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa .node rect,#mermaid-svg-hQ6uyQro8EF0iDKa .node circle,#mermaid-svg-hQ6uyQro8EF0iDKa .node ellipse,#mermaid-svg-hQ6uyQro8EF0iDKa .node polygon,#mermaid-svg-hQ6uyQro8EF0iDKa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hQ6uyQro8EF0iDKa .rough-node .label text,#mermaid-svg-hQ6uyQro8EF0iDKa .node .label text,#mermaid-svg-hQ6uyQro8EF0iDKa .image-shape .label,#mermaid-svg-hQ6uyQro8EF0iDKa .icon-shape .label{text-anchor:middle;}#mermaid-svg-hQ6uyQro8EF0iDKa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hQ6uyQro8EF0iDKa .rough-node .label,#mermaid-svg-hQ6uyQro8EF0iDKa .node .label,#mermaid-svg-hQ6uyQro8EF0iDKa .image-shape .label,#mermaid-svg-hQ6uyQro8EF0iDKa .icon-shape .label{text-align:center;}#mermaid-svg-hQ6uyQro8EF0iDKa .node.clickable{cursor:pointer;}#mermaid-svg-hQ6uyQro8EF0iDKa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hQ6uyQro8EF0iDKa .arrowheadPath{fill:#333333;}#mermaid-svg-hQ6uyQro8EF0iDKa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hQ6uyQro8EF0iDKa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hQ6uyQro8EF0iDKa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hQ6uyQro8EF0iDKa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hQ6uyQro8EF0iDKa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hQ6uyQro8EF0iDKa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hQ6uyQro8EF0iDKa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hQ6uyQro8EF0iDKa .cluster text{fill:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa .cluster span{color:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa 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-hQ6uyQro8EF0iDKa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hQ6uyQro8EF0iDKa rect.text{fill:none;stroke-width:0;}#mermaid-svg-hQ6uyQro8EF0iDKa .icon-shape,#mermaid-svg-hQ6uyQro8EF0iDKa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hQ6uyQro8EF0iDKa .icon-shape p,#mermaid-svg-hQ6uyQro8EF0iDKa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hQ6uyQro8EF0iDKa .icon-shape .label rect,#mermaid-svg-hQ6uyQro8EF0iDKa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hQ6uyQro8EF0iDKa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hQ6uyQro8EF0iDKa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hQ6uyQro8EF0iDKa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} IPv4 地址
32 位
8位
192
8位
168
8位
1
8位
10
所以 999.1.1.1 不是合法 IPv4 地址。
因为 999 超过了 8 位能表示的范围。
这就像门牌号写成"第 999999999 栋,第 -3 单元",物业看了也沉默。
IPv4 地址总数量:
text
2^32 = 4,294,967,296
大约 43 亿个。
听起来很多。
但放到全球互联网、手机、服务器、摄像头、路由器、虚拟机、容器、IoT 设备里,就不太够了。
所以后来才会有:
- 私网地址
- NAT
- IPv6
这些都不是凭空冒出来的复杂度。它们背后有一个很现实的问题:
IPv4 地址不够用了。
网络很多设计,归根到底都是资源和规模逼出来的。不是协议设计者喜欢给后人出题------虽然看起来确实有点像。
🔧 IP 地址不是一整块:网络部分和主机部分
一个 IP 地址不能孤立理解。
它通常要和子网掩码一起看。
比如:
text
192.168.1.10/24
这里 /24 表示前 24 位是网络部分,后 8 位是主机部分。
text
192.168.1.10/24
└───────┬──────┘
网络部分
└ 主机部分
更直观地看:
text
IP 地址: 192.168.1.10
掩码: 255.255.255.0
网络号: 192.168.1.0
主机号: 10
#mermaid-svg-Z1lqjQd5bbkDsaSJ{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-Z1lqjQd5bbkDsaSJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .error-icon{fill:#552222;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .marker.cross{stroke:#333333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ p{margin:0;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .cluster-label text{fill:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .cluster-label span{color:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .cluster-label span p{background-color:transparent;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .label text,#mermaid-svg-Z1lqjQd5bbkDsaSJ span{fill:#333;color:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .node rect,#mermaid-svg-Z1lqjQd5bbkDsaSJ .node circle,#mermaid-svg-Z1lqjQd5bbkDsaSJ .node ellipse,#mermaid-svg-Z1lqjQd5bbkDsaSJ .node polygon,#mermaid-svg-Z1lqjQd5bbkDsaSJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .rough-node .label text,#mermaid-svg-Z1lqjQd5bbkDsaSJ .node .label text,#mermaid-svg-Z1lqjQd5bbkDsaSJ .image-shape .label,#mermaid-svg-Z1lqjQd5bbkDsaSJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .rough-node .label,#mermaid-svg-Z1lqjQd5bbkDsaSJ .node .label,#mermaid-svg-Z1lqjQd5bbkDsaSJ .image-shape .label,#mermaid-svg-Z1lqjQd5bbkDsaSJ .icon-shape .label{text-align:center;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .node.clickable{cursor:pointer;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .arrowheadPath{fill:#333333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Z1lqjQd5bbkDsaSJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Z1lqjQd5bbkDsaSJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Z1lqjQd5bbkDsaSJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .cluster text{fill:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .cluster span{color:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ 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-Z1lqjQd5bbkDsaSJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Z1lqjQd5bbkDsaSJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .icon-shape,#mermaid-svg-Z1lqjQd5bbkDsaSJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .icon-shape p,#mermaid-svg-Z1lqjQd5bbkDsaSJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .icon-shape .label rect,#mermaid-svg-Z1lqjQd5bbkDsaSJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Z1lqjQd5bbkDsaSJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Z1lqjQd5bbkDsaSJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Z1lqjQd5bbkDsaSJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 192.168.1.10/24
网络部分
192.168.1
主机部分
10
这个网段是
192.168.1.0/24
为什么要区分网络部分和主机部分?
因为路由转发看的是网络。
它不可能给互联网里的每一台设备都单独记一条路由------那路由表会大到怀疑人生。
所以路由通常按网段汇总:
text
去 192.168.1.0/24 这个网段,走某个方向。
去 10.0.0.0/8 这个网段,走另一个方向。
这就像快递分拣:不会一开始就按每个人姓名分,先按省、市、区分,最后才到具体门牌。网络也是这样:先找网段,再找主机。
核心结论:
IP 地址必须结合掩码,才能判断它属于哪个网络。
只看 192.168.1.10,你知道它长什么样。结合 /24,你才知道它住在哪个"小区"。
公网 IP 和私网 IP
你可能经常看到这些地址:
text
192.168.1.1
192.168.0.1
10.0.0.1
172.16.0.1
它们大概率是私网 IP。
私网 IP 是保留给内部网络使用的地址,不直接在公网互联网中路由。
常见私网地址范围:
| 地址范围 | CIDR 表示 | 常见场景 |
|---|---|---|
| 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | 企业内网、云 VPC |
| 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | 企业网络、容器网络 |
| 192.168.0.0 - 192.168.255.255 | 192.168.0.0/16 | 家用路由器、小型网络 |
为什么家里的路由器经常是 192.168.1.1?
因为这个范围就是给内部网络用的。
你的电脑可能是 192.168.1.10,手机可能是 192.168.1.11,电视可能是 192.168.1.12。
但这些地址不能直接在公网里唯一标识你家设备。
因为隔壁家也可能有一台电脑叫 192.168.1.10,再隔壁也有,全国人民都可以有。
这就像每个小区里都可以有 1 号楼 101。但寄快递不能只写"1号楼101",你还得写城市、小区、街道。
公网 IP 则是公网互联网中可路由的地址,它更像全网意义上的地址。
家庭网络访问互联网时,通常会经过 NAT(网络地址转换):
#mermaid-svg-pdwPvVONm3YcrKFm{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-pdwPvVONm3YcrKFm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-pdwPvVONm3YcrKFm .error-icon{fill:#552222;}#mermaid-svg-pdwPvVONm3YcrKFm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pdwPvVONm3YcrKFm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pdwPvVONm3YcrKFm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pdwPvVONm3YcrKFm .marker.cross{stroke:#333333;}#mermaid-svg-pdwPvVONm3YcrKFm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pdwPvVONm3YcrKFm p{margin:0;}#mermaid-svg-pdwPvVONm3YcrKFm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pdwPvVONm3YcrKFm .cluster-label text{fill:#333;}#mermaid-svg-pdwPvVONm3YcrKFm .cluster-label span{color:#333;}#mermaid-svg-pdwPvVONm3YcrKFm .cluster-label span p{background-color:transparent;}#mermaid-svg-pdwPvVONm3YcrKFm .label text,#mermaid-svg-pdwPvVONm3YcrKFm span{fill:#333;color:#333;}#mermaid-svg-pdwPvVONm3YcrKFm .node rect,#mermaid-svg-pdwPvVONm3YcrKFm .node circle,#mermaid-svg-pdwPvVONm3YcrKFm .node ellipse,#mermaid-svg-pdwPvVONm3YcrKFm .node polygon,#mermaid-svg-pdwPvVONm3YcrKFm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pdwPvVONm3YcrKFm .rough-node .label text,#mermaid-svg-pdwPvVONm3YcrKFm .node .label text,#mermaid-svg-pdwPvVONm3YcrKFm .image-shape .label,#mermaid-svg-pdwPvVONm3YcrKFm .icon-shape .label{text-anchor:middle;}#mermaid-svg-pdwPvVONm3YcrKFm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-pdwPvVONm3YcrKFm .rough-node .label,#mermaid-svg-pdwPvVONm3YcrKFm .node .label,#mermaid-svg-pdwPvVONm3YcrKFm .image-shape .label,#mermaid-svg-pdwPvVONm3YcrKFm .icon-shape .label{text-align:center;}#mermaid-svg-pdwPvVONm3YcrKFm .node.clickable{cursor:pointer;}#mermaid-svg-pdwPvVONm3YcrKFm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-pdwPvVONm3YcrKFm .arrowheadPath{fill:#333333;}#mermaid-svg-pdwPvVONm3YcrKFm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pdwPvVONm3YcrKFm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pdwPvVONm3YcrKFm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pdwPvVONm3YcrKFm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-pdwPvVONm3YcrKFm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pdwPvVONm3YcrKFm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-pdwPvVONm3YcrKFm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pdwPvVONm3YcrKFm .cluster text{fill:#333;}#mermaid-svg-pdwPvVONm3YcrKFm .cluster span{color:#333;}#mermaid-svg-pdwPvVONm3YcrKFm 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-pdwPvVONm3YcrKFm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-pdwPvVONm3YcrKFm rect.text{fill:none;stroke-width:0;}#mermaid-svg-pdwPvVONm3YcrKFm .icon-shape,#mermaid-svg-pdwPvVONm3YcrKFm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pdwPvVONm3YcrKFm .icon-shape p,#mermaid-svg-pdwPvVONm3YcrKFm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-pdwPvVONm3YcrKFm .icon-shape .label rect,#mermaid-svg-pdwPvVONm3YcrKFm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pdwPvVONm3YcrKFm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-pdwPvVONm3YcrKFm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-pdwPvVONm3YcrKFm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 电脑
192.168.1.10
家用路由器
内网: 192.168.1.1
公网: 203.0.113.8
互联网
服务器
93.184.216.34
🔧 核心结论:私网 IP 可以重复出现在不同内网里,公网 IP 才在公网路由范围内有全局意义。
别看到自己电脑是 192.168.1.10,就以为全世界只有你叫这个。可能全世界有几亿台设备都这么叫。互联网没有混乱,是因为它们都躲在各自的小区里。
回环地址:127.0.0.1 是谁?
你一定见过:
text
127.0.0.1
localhost
它通常表示本机。
也叫回环地址。
当你访问:
bash
curl http://127.0.0.1:8080
意思是访问自己这台机器上的 8080 端口。
这个流量不会真的从网卡发到交换机再绕一圈回来,它在本机协议栈里就完成了。
#mermaid-svg-v5BneAZRJsTwoaBI{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-v5BneAZRJsTwoaBI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-v5BneAZRJsTwoaBI .error-icon{fill:#552222;}#mermaid-svg-v5BneAZRJsTwoaBI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-v5BneAZRJsTwoaBI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-v5BneAZRJsTwoaBI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-v5BneAZRJsTwoaBI .marker.cross{stroke:#333333;}#mermaid-svg-v5BneAZRJsTwoaBI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-v5BneAZRJsTwoaBI p{margin:0;}#mermaid-svg-v5BneAZRJsTwoaBI .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-v5BneAZRJsTwoaBI .cluster-label text{fill:#333;}#mermaid-svg-v5BneAZRJsTwoaBI .cluster-label span{color:#333;}#mermaid-svg-v5BneAZRJsTwoaBI .cluster-label span p{background-color:transparent;}#mermaid-svg-v5BneAZRJsTwoaBI .label text,#mermaid-svg-v5BneAZRJsTwoaBI span{fill:#333;color:#333;}#mermaid-svg-v5BneAZRJsTwoaBI .node rect,#mermaid-svg-v5BneAZRJsTwoaBI .node circle,#mermaid-svg-v5BneAZRJsTwoaBI .node ellipse,#mermaid-svg-v5BneAZRJsTwoaBI .node polygon,#mermaid-svg-v5BneAZRJsTwoaBI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-v5BneAZRJsTwoaBI .rough-node .label text,#mermaid-svg-v5BneAZRJsTwoaBI .node .label text,#mermaid-svg-v5BneAZRJsTwoaBI .image-shape .label,#mermaid-svg-v5BneAZRJsTwoaBI .icon-shape .label{text-anchor:middle;}#mermaid-svg-v5BneAZRJsTwoaBI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-v5BneAZRJsTwoaBI .rough-node .label,#mermaid-svg-v5BneAZRJsTwoaBI .node .label,#mermaid-svg-v5BneAZRJsTwoaBI .image-shape .label,#mermaid-svg-v5BneAZRJsTwoaBI .icon-shape .label{text-align:center;}#mermaid-svg-v5BneAZRJsTwoaBI .node.clickable{cursor:pointer;}#mermaid-svg-v5BneAZRJsTwoaBI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-v5BneAZRJsTwoaBI .arrowheadPath{fill:#333333;}#mermaid-svg-v5BneAZRJsTwoaBI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-v5BneAZRJsTwoaBI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-v5BneAZRJsTwoaBI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v5BneAZRJsTwoaBI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-v5BneAZRJsTwoaBI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v5BneAZRJsTwoaBI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-v5BneAZRJsTwoaBI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-v5BneAZRJsTwoaBI .cluster text{fill:#333;}#mermaid-svg-v5BneAZRJsTwoaBI .cluster span{color:#333;}#mermaid-svg-v5BneAZRJsTwoaBI 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-v5BneAZRJsTwoaBI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-v5BneAZRJsTwoaBI rect.text{fill:none;stroke-width:0;}#mermaid-svg-v5BneAZRJsTwoaBI .icon-shape,#mermaid-svg-v5BneAZRJsTwoaBI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v5BneAZRJsTwoaBI .icon-shape p,#mermaid-svg-v5BneAZRJsTwoaBI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-v5BneAZRJsTwoaBI .icon-shape .label rect,#mermaid-svg-v5BneAZRJsTwoaBI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v5BneAZRJsTwoaBI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-v5BneAZRJsTwoaBI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-v5BneAZRJsTwoaBI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不会经过物理网卡
应用程序
访问 127.0.0.1
本机 TCP/IP 协议栈
本机服务进程
外部网络
回环地址很适合本地开发和测试。
比如你启动一个 Web 服务:
bash
python3 -m http.server 8080
然后访问:
bash
curl http://127.0.0.1:8080
如果能访问,说明服务在本机可用。
但这不代表别人也能访问 ------因为它可能只监听在 127.0.0.1 上。
服务监听地址不同,可访问范围不同:
| 监听地址 | 含义 |
|---|---|
| 127.0.0.1 | 只允许本机访问 |
| 0.0.0.0 | 监听所有本机网卡地址 |
| 某个具体 IP | 只监听指定网卡地址 |
很多开发同学遇到过这种情况:"我本机 curl 明明通,为什么别人访问不通?"原因之一就是服务只绑定了
127.0.0.1。它相当于只在家里客厅开了个窗口,你在客厅能喊到,楼下的人听不到。
0.0.0.0 又是什么?
0.0.0.0 是一个容易让人困惑的地址。
它在不同场景里含义略有不同。
1. 服务监听时的 0.0.0.0
如果一个服务监听:
text
0.0.0.0:8080
通常表示:
监听本机所有 IPv4 地址上的 8080 端口。
比如你的机器有:
text
127.0.0.1
192.168.1.10
10.0.0.5
服务监听 0.0.0.0:8080,就意味着这些地址都可能访问到它。
当然,防火墙、安全组、路由还可能拦住。
网络世界没有一句"我监听了"就万事大吉。它像职场协作------你发了消息,不代表对方收到了。
2. 路由表里的 0.0.0.0/0
你在 Linux 上看路由:
bash
ip route
可能看到:
text
default via 192.168.1.1 dev eth0
或者:
text
0.0.0.0/0 via 192.168.1.1 dev eth0
0.0.0.0/0 表示默认路由。
也就是:
如果没有更具体的路由,就走这里。
#mermaid-svg-Lw2rx5Q69aUx9hUP{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-Lw2rx5Q69aUx9hUP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Lw2rx5Q69aUx9hUP .error-icon{fill:#552222;}#mermaid-svg-Lw2rx5Q69aUx9hUP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Lw2rx5Q69aUx9hUP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .marker.cross{stroke:#333333;}#mermaid-svg-Lw2rx5Q69aUx9hUP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Lw2rx5Q69aUx9hUP p{margin:0;}#mermaid-svg-Lw2rx5Q69aUx9hUP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .cluster-label text{fill:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .cluster-label span{color:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .cluster-label span p{background-color:transparent;}#mermaid-svg-Lw2rx5Q69aUx9hUP .label text,#mermaid-svg-Lw2rx5Q69aUx9hUP span{fill:#333;color:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .node rect,#mermaid-svg-Lw2rx5Q69aUx9hUP .node circle,#mermaid-svg-Lw2rx5Q69aUx9hUP .node ellipse,#mermaid-svg-Lw2rx5Q69aUx9hUP .node polygon,#mermaid-svg-Lw2rx5Q69aUx9hUP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .rough-node .label text,#mermaid-svg-Lw2rx5Q69aUx9hUP .node .label text,#mermaid-svg-Lw2rx5Q69aUx9hUP .image-shape .label,#mermaid-svg-Lw2rx5Q69aUx9hUP .icon-shape .label{text-anchor:middle;}#mermaid-svg-Lw2rx5Q69aUx9hUP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .rough-node .label,#mermaid-svg-Lw2rx5Q69aUx9hUP .node .label,#mermaid-svg-Lw2rx5Q69aUx9hUP .image-shape .label,#mermaid-svg-Lw2rx5Q69aUx9hUP .icon-shape .label{text-align:center;}#mermaid-svg-Lw2rx5Q69aUx9hUP .node.clickable{cursor:pointer;}#mermaid-svg-Lw2rx5Q69aUx9hUP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .arrowheadPath{fill:#333333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Lw2rx5Q69aUx9hUP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Lw2rx5Q69aUx9hUP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Lw2rx5Q69aUx9hUP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Lw2rx5Q69aUx9hUP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .cluster text{fill:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP .cluster span{color:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP 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-Lw2rx5Q69aUx9hUP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Lw2rx5Q69aUx9hUP rect.text{fill:none;stroke-width:0;}#mermaid-svg-Lw2rx5Q69aUx9hUP .icon-shape,#mermaid-svg-Lw2rx5Q69aUx9hUP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Lw2rx5Q69aUx9hUP .icon-shape p,#mermaid-svg-Lw2rx5Q69aUx9hUP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Lw2rx5Q69aUx9hUP .icon-shape .label rect,#mermaid-svg-Lw2rx5Q69aUx9hUP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Lw2rx5Q69aUx9hUP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Lw2rx5Q69aUx9hUP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Lw2rx5Q69aUx9hUP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 有
没有
目标 IP
路由表有更具体匹配吗?
走具体路由
走默认路由
0.0.0.0/0
网关
🔧 核心结论 :
0.0.0.0不是一个你平时拿来访问的网站地址。它更像一个特殊符号------在监听里表示"所有本机地址",在路由里表示"所有 IPv4 目的地"。同一个写法,不同上下文。网络就是这么讲究语境,像中文里的"行"------你说它到底读 háng 还是 xíng?得看场景。
IP 地址是分配给主机,还是分配给网卡?
严格说,IP 地址通常配置在网络接口上。
一台机器可以有多个网卡。
一个网卡也可以有多个 IP。
比如 Linux 上执行:
bash
ip addr
你可能看到:
text
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.1.10/24 scope global eth0
inet 192.168.1.20/24 scope global secondary eth0
这说明 eth0 上有多个 IPv4 地址。
也可能一台服务器有多块网卡:
text
eth0:10.0.0.10/24
eth1:172.16.0.10/24
#mermaid-svg-wvadOj1XEoRbezXR{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-wvadOj1XEoRbezXR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wvadOj1XEoRbezXR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wvadOj1XEoRbezXR .error-icon{fill:#552222;}#mermaid-svg-wvadOj1XEoRbezXR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wvadOj1XEoRbezXR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wvadOj1XEoRbezXR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wvadOj1XEoRbezXR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wvadOj1XEoRbezXR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wvadOj1XEoRbezXR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wvadOj1XEoRbezXR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wvadOj1XEoRbezXR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wvadOj1XEoRbezXR .marker.cross{stroke:#333333;}#mermaid-svg-wvadOj1XEoRbezXR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wvadOj1XEoRbezXR p{margin:0;}#mermaid-svg-wvadOj1XEoRbezXR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wvadOj1XEoRbezXR .cluster-label text{fill:#333;}#mermaid-svg-wvadOj1XEoRbezXR .cluster-label span{color:#333;}#mermaid-svg-wvadOj1XEoRbezXR .cluster-label span p{background-color:transparent;}#mermaid-svg-wvadOj1XEoRbezXR .label text,#mermaid-svg-wvadOj1XEoRbezXR span{fill:#333;color:#333;}#mermaid-svg-wvadOj1XEoRbezXR .node rect,#mermaid-svg-wvadOj1XEoRbezXR .node circle,#mermaid-svg-wvadOj1XEoRbezXR .node ellipse,#mermaid-svg-wvadOj1XEoRbezXR .node polygon,#mermaid-svg-wvadOj1XEoRbezXR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wvadOj1XEoRbezXR .rough-node .label text,#mermaid-svg-wvadOj1XEoRbezXR .node .label text,#mermaid-svg-wvadOj1XEoRbezXR .image-shape .label,#mermaid-svg-wvadOj1XEoRbezXR .icon-shape .label{text-anchor:middle;}#mermaid-svg-wvadOj1XEoRbezXR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wvadOj1XEoRbezXR .rough-node .label,#mermaid-svg-wvadOj1XEoRbezXR .node .label,#mermaid-svg-wvadOj1XEoRbezXR .image-shape .label,#mermaid-svg-wvadOj1XEoRbezXR .icon-shape .label{text-align:center;}#mermaid-svg-wvadOj1XEoRbezXR .node.clickable{cursor:pointer;}#mermaid-svg-wvadOj1XEoRbezXR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wvadOj1XEoRbezXR .arrowheadPath{fill:#333333;}#mermaid-svg-wvadOj1XEoRbezXR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wvadOj1XEoRbezXR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wvadOj1XEoRbezXR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wvadOj1XEoRbezXR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wvadOj1XEoRbezXR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wvadOj1XEoRbezXR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wvadOj1XEoRbezXR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wvadOj1XEoRbezXR .cluster text{fill:#333;}#mermaid-svg-wvadOj1XEoRbezXR .cluster span{color:#333;}#mermaid-svg-wvadOj1XEoRbezXR 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-wvadOj1XEoRbezXR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wvadOj1XEoRbezXR rect.text{fill:none;stroke-width:0;}#mermaid-svg-wvadOj1XEoRbezXR .icon-shape,#mermaid-svg-wvadOj1XEoRbezXR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wvadOj1XEoRbezXR .icon-shape p,#mermaid-svg-wvadOj1XEoRbezXR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wvadOj1XEoRbezXR .icon-shape .label rect,#mermaid-svg-wvadOj1XEoRbezXR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wvadOj1XEoRbezXR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wvadOj1XEoRbezXR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wvadOj1XEoRbezXR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 一台主机
eth0
10.0.0.10/24
eth1
172.16.0.10/24
lo
127.0.0.1/8
所以不要简单认为:
text
一台机器 = 一个 IP
现实里经常是:
text
一台机器 = 多个接口 = 多个 IP
在容器和 Kubernetes 里更明显:Pod 有 Pod IP,Service 有 ClusterIP,Node 有节点 IP,Ingress 还有入口 IP。
刚开始看会觉得:"怎么到处都是 IP?"
别慌。先问三个问题:
- 这个 IP 配在哪个接口或对象上?
- 它属于哪个网段?
- 谁能路由到它?
这三个问题比死背概念更有用。
🔧 IP 地址和 MAC 地址的区别再对比一次
我们前面已经讲过 MAC,现在可以把 IP 和 MAC 放在一起再看一遍。
| 对比项 | IP 地址 | MAC 地址 |
|---|---|---|
| 所在层次 | 网络层 | 数据链路层 |
| 主要作用 | 跨网络寻址和路由 | 当前链路转发 |
| 地址范围 | 依赖网络规划,可跨网段 | 当前二层链路内使用 |
| 是否会变 | 经常变化 | 通常相对稳定,但也可修改/随机化 |
| 谁使用 | 主机、路由器、三层设备 | 网卡、交换机、二层设备 |
| 典型问题 | 路由、网段、掩码、NAT | ARP、交换机转发、MAC 表 |
用快递系统类比:
| 快递系统 | 网络系统 |
|---|---|
| 省市区街道门牌 | IP 地址 |
| 当前快递站的交接人 | MAC 地址 |
| 分拣路线 | 路由表 |
| 小区内找人 | ARP |
| 门卫按楼栋转交 | 交换机 |
类比不能完全覆盖技术细节,但能帮你建立直觉。网络排障时,很多问题不是因为你不会命令,而是因为你脑子里没有这张地图。命令只是手电筒,地图才告诉你往哪照。
🧠 工程排查:看到 IP 问题时先看什么?
IP 地址相关问题非常常见。
下面几个命令要熟悉。
1. 查看本机 IP
bash
ip addr
重点看:
- 网卡是否 UP
- 有没有 IPv4 地址
- 掩码是否正确
- IP 是否配置在预期接口上
例如:
text
inet 192.168.1.10/24 scope global eth0
说明 eth0 上有 192.168.1.10/24。
2. 查看路由表
bash
ip route
重点看:
- 默认路由是否存在
- 默认网关是否正确
- 目标网段有没有更具体路由
例如:
text
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
这说明:
192.168.1.0/24是直连网段- 其他目标默认走
192.168.1.1
3. 查看邻居表(ARP 表)
bash
ip neigh
- 如果访问同网段目标不通,要看目标 IP 的 MAC 有没有解析出来
- 如果访问外网不通,要看网关 IP 的 MAC 有没有解析出来
4. ping 验证连通性
bash
ping 192.168.1.1
ping 8.8.8.8
⚠️ 注意:ping 不通不一定代表 IP 不通,可能是防火墙禁了 ICMP。所以 ping 是线索,不是最终判决书。
5. 抓包确认数据有没有出去
bash
sudo tcpdump -i eth0 -nn host 192.168.1.1
-nn 表示不要解析域名和服务名,排查时很有用------因为你想看原始 IP,不想让工具热心地帮你翻译。
工具太热心,有时候会制造误会,像某些自动纠错输入法。
常见误区
误区一:IP 地址唯一标识一台机器
❌ 不一定。
一台机器可以有多个 IP,一个 IP 也可能因为 NAT、负载均衡、VIP 等机制对应到不同后端。私网 IP 还可以在不同网络里重复使用。
所以"IP 等于一台机器"只是入门阶段的简化说法,工程现场要更谨慎。
误区二:192.168 开头的地址可以直接从公网访问
❌ 通常不行。
192.168.0.0/16 是私网地址范围,不直接在公网中路由。
如果你想从公网访问家里或公司内网服务,通常需要:
- 公网 IP
- NAT / 端口映射
- VPN
- 内网穿透
- 云上的公网入口
别把
http://192.168.1.10:8080发给外地朋友,然后问他为什么打不开。他打不开是正常的------除非他住你家路由器里面。
误区三:127.0.0.1 能让别人访问我的服务
❌ 不行。
127.0.0.1 是本机回环地址。
别人访问自己的 127.0.0.1,访问的是别人自己的机器,不是你的机器。
这句话很重要:每台机器的 127.0.0.1 都是它自己。
你说"访问我的 localhost",对方的电脑会认真访问"它自己的 localhost"。这不是对方不配合,是 localhost 太自我。
误区四:有 IP 就一定能通信
❌ 不一定。
通信还需要很多条件:
- 掩码正确
- 路由正确
- ARP 正常
- 网关可达
- 防火墙允许
- 对端服务监听
- 回程路由正常
IP 地址只是门牌号。有门牌,不代表路通,也不代表门没锁,更不代表屋里有人。
小结
这一篇我们讲了 IP 地址。
核心知识点:
- IPv4 地址是 32 位,常用点分十进制表示。
- IP 地址属于网络层,用于跨网络寻址和路由。
- MAC 负责当前链路下一跳,IP 负责最终目的地。
- IP 地址要结合子网掩码,才能判断属于哪个网段。
- 私网 IP 可以在不同内网重复使用,不直接在公网路由。
- 公网 IP 可以在公网互联网中路由。
127.0.0.1是本机回环地址,只能本机访问。0.0.0.0在监听和路由场景中有不同含义。- IP 通常配置在网络接口上,一台机器可以有多个 IP。
- 有 IP 不代表一定能通信,还要看路由、ARP、防火墙和服务监听。
一句话总结:
IP 地址告诉数据包要去哪个网络和哪台主机,但真正能不能到,还要看掩码、路由和下一跳。
和前几篇连起来:
IP 管远方,MAC 管眼前;ARP 找脸面,交换机找门牌。
网络层从 IP 地址开始,才刚刚打开门。
下一篇预告
下一篇我们继续讲:
第 9 篇:子网掩码------如何划分"小区"
为什么 192.168.1.10/24 和 192.168.1.20/24 算同网段?
为什么 192.168.1.10/24 和 192.168.2.10/24 通常不算同网段?
/24、/16、255.255.255.0 到底是什么关系?
下一篇,我们把 IP 地址后面那条"小尾巴"讲清楚。