> For the complete documentation index, see [llms.txt](https://docs.ipcheck.ing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ipcheck.ing/knowledge-base/zh/concepts/public-private-cgnat.md).

# 公网、私网与 CGNAT 地址

你的路由器显示你的地址是 `192.168.1.14`。网站显示它是 `203.0.113.42`。那个才是真实的？

两者都是。它们是不同层级的地址，理解它们之间的区别就能很好地解释家庭互联网是如何工作的。

## 两种地址

想象一栋办公楼。大楼有一个邮政系统知道的街道地址。大楼内部，每个桌位都有一个只在楼内有意义的房间号。

IP 地址的工作方式也是如此。

* 一个 **公有地址** 在整个互联网中都是唯一的。网站看到的就是它。
* 一个 **私有地址** 只在一个本地网络内部有意义。成千上万的家庭可以在同一时间使用完全相同的私有地址，这没问题，因为这些地址永远不会穿过互联网。

某些 IPv4 地址段保留用于私有用途。它们在一份名为 RFC 1918 的文档中定义，你会认出它们：

| 范围                                | 写作               | 你通常会在以下场景看到它   |
| --------------------------------- | ---------------- | -------------- |
| `10.0.0.0` – `10.255.255.255`     | `10.0.0.0/8`     | 更大的家庭、办公室和校园网络 |
| `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` | 几乎每个家用路由器      |

还有一些其他地址段也很特殊。 `127.0.0.1` 始终表示“这台设备本身”。以 `169.254` 开头的地址表示你的设备没有成功获取到一个正确的地址，于是自己编了一个。

如果你电脑上的地址以这些地址之一开头，那它就是私有地址。它不能直接从互联网接收流量。

## NAT：前台接待

如果你的笔记本电脑有一个互联网无法访问的私有地址，网页又是怎么回到你这里的呢？

你的路由器会执行 **网络地址转换**，简称 NAT。

当你的笔记本电脑发出请求时，路由器会把发送方地址从私有地址改写成路由器自己的公有地址，并记录该请求来自哪台内部设备。等回复到达时，路由器查阅记录，把回复转发给正确的设备。

它的行为就像那栋办公楼里的前台接待。寄出的邮件会带着大楼的街道地址离开。收到的邮件到达前台后，接待员知道该把它送到哪个房间——因为他们记下了最初那封信是谁发出的。

```mermaid
flowchart LR
    A["笔记本电脑<br/>192.168.1.14"] --> R
    B["手机<br/>192.168.1.22"] --> R
    C["电视<br/>192.168.1.31"] --> R
    R["家用路由器<br/>NAT"] --> I["互联网<br/>看到 203.0.113.42"]
```

这就是为什么你家里的每台设备在网站看来都只是同一个地址。

NAT 并不是为了安全而发明的，但它有一个类似安全机制的副作用：由于路由器的记录本里没有针对无人请求的流量的记录，未经请求的入站连接无处可去，只能被丢弃。

## CGNAT：第二个前台接待

现在再加上 [IPv4 与 IPv6](/knowledge-base/zh/concepts/ipv4-vs-ipv6.md)中的 IPv4 短缺。可供每个用户拥有的公网地址不够。

所以许多运营商会在自己的网络里再做一次 NAT。你的路由器仍然会把家中设备转换到一个地址上——但那个地址本身也不是公网地址。它是另一个共享地址，运营商的设备会再次把它转换成一个与许多其他客户共享的公网地址。

这就是 **运营商级 NAT**，通常简称 CGNAT。

```mermaid
flowchart LR
    D["你的设备<br/>192.168.x.x"] --> R["家用路由器"]
    R --> C["运营商地址<br/>100.64.x.x"]
    C --> G["运营商 NAT"]
    G --> P["公网地址<br/>与其他客户共享"]
    P --> I["互联网"]
```

中间层有一个专门的地址段： **`100.64.0.0/10`**，覆盖 `100.64.0.0` 到 `100.127.255.255`。它专门为运营商级 NAT 保留，所以如果你路由器自己的“WAN”或“internet”地址落在这个范围内，就说明你处于 CGNAT 之后。有些运营商会改用其他地址段，所以反过来并不能证明什么。

## 运营商为什么这么做

* IPv4 地址稀缺且昂贵。在几十或几百名客户之间共享一个公网地址，可以节省大量成本。
* 移动网络多年来一直使用这种方法，因为它们的用户数量庞大，而地址却很少。
* 对于普通上网而言，这几乎是看不见的，所以大多数客户从未注意到。

## CGNAT 会给你带来什么代价

对于读新闻和看视频来说，没什么影响。对于任何需要让外部世界能够到达 *在*里面，这就很重要。

* **端口转发不起作用。** 你不能在家用路由器上打开某个端口，并指望它能被访问到，因为上层还有运营商的 NAT，它并不知道你的规则。
* **自己托管很难。** 家庭服务器、你想远程查看的安防摄像头、个人文件共享——这些都会变得很困难。
* **有些游戏和点对点应用会变差。** 它们仍能工作，但连接可能会退回到中继服务器，这会增加延迟。通常这会被报告为“严格”或“中等”的 NAT 类型。
* **你共享同一个声誉。** 如果另一个位于同一公网地址之后的客户行为不端，验证码或封禁也可能落到你头上。
* **你的表观位置可能会漂移。** 运营商的出口点可能与你所在的城市不同。参见 [为什么我的 IP 位置不正确？](/knowledge-base/zh/diagnose/why-is-my-ip-location-wrong.md).

通常的解决办法是向你的运营商申请一个公网 IPv4 地址（有时免费，有时收费），或者使用 IPv6，因为 IPv6 的地址足够多，不需要 CGNAT。

## 常见误解

**"私有地址意味着我可以匿名。"** 不对。网站根本看不到你的私有地址；它们看到的是公网地址。你的私有地址不是伪装，只是一个房间号。

**"我的路由器显示 192.168.1.1，所以我不在 CGNAT 后面。"** 那是你路由器在 *内部*的地址。真正重要的是它面向互联网一侧的地址。

**"NAT 就是防火墙。"** 它会顺带阻挡未经请求的入站连接，这确实很有用，但它不是安全产品，对出站流量也无能为力，对已经进入你网络的任何东西也不起作用。

**"CGNAT 意味着我的连接很慢。"** 并不直接如此。它会增加少量处理开销，但可见的影响是可达性，而不是速度。

{% hint style="info" %}
**在 MyIP 上亲自看看**

不确定自己处于哪一边？走一遍 [我是否位于 CGNAT 后面？](/knowledge-base/zh/diagnose/am-i-behind-cgnat.md)，它会比较你的路由器报告的地址和 MyIP 看到的公网地址，并告诉你一个 `100.64.x.x` 地址在实际中意味着什么。
{% endhint %}

## 相关概念

* [IPv4 与 IPv6](/knowledge-base/zh/concepts/ipv4-vs-ipv6.md) —— 为什么地址一开始就会不够用
* [什么是 WebRTC？](/knowledge-base/zh/concepts/what-is-webrtc.md) —— 应用如何绕过 NAT 直接建立连接
* [GeoIP：IP 定位如何工作](/knowledge-base/zh/concepts/geoip-explained.md) —— 为什么共享出口会改变你的表观位置
* [为什么网站看到的 IP 不同？](/knowledge-base/zh/diagnose/why-do-sites-see-a-different-ip.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ipcheck.ing/knowledge-base/zh/concepts/public-private-cgnat.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
