Skip to content

Commit 0f0a4f0

Browse files
添加关于 P2P 页面 (#192)
1 parent 596c3aa commit 0f0a4f0

File tree

5 files changed

+221
-0
lines changed

5 files changed

+221
-0
lines changed

.vitepress/config/cn.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export const cn = defineConfig({
6262
},
6363
{
6464
items: [
65+
{ text: '关于 P2P', link: '/guide/aboutp2p' },
6566
{ text: '性能测试', link: '/guide/perf' },
6667
{ text: '路线图', link: '/guide/roadmap' },
6768
{ text: '社区和贡献', link: '/guide/community-and-contribution' },

assets/cn/aboutp2p1.png

42.9 KB
Loading

assets/cn/aboutp2p2.png

53.9 KB
Loading

assets/cn/aboutp2p3.png

39.3 KB
Loading

guide/aboutp2p.md

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
# 什么是 P2P ?
2+
3+
P2P( Peer-to-Peer), 也称点对点或对等网络,在 Easytier 中指直连(直接连接)。
4+
5+
传统网络架构:客户端-服务端,在 Easytier 中指中转/中继(relay)。
6+
7+
对等网络架构:只有节点,节点可以是服务端也可以是客户端。
8+
9+
相较于传统网络架构,P2P 的优势是什么:
10+
11+
1.成本低:无需购买额外的服务器,大幅度节约联机成本。
12+
13+
2.延迟低:不过经过服务器转发数据,有效降低联机延迟。
14+
15+
3.带宽高:网络带宽取决于节点的上限。
16+
17+
# P2P 和 NAT 有什么关系,具体有什么影响?
18+
19+
NAT 类型决定了你是否可以和其他用户建立 P2P 连接,建立 P2P 连接之后,通常可以有效的降低网络延迟,网络带宽较高。
20+
21+
当然即使无法建立 P2P 连接,您依然可以通过 Easytier 的 中转/中继/relay 功能进行联机,通常网络延迟较高,网络带宽较低。
22+
23+
## 建立 P2P 连接难度表
24+
25+
| NAT 类型 | 开放型互联网 | 对称型防火墙 | 完全圆锥型 NAT | 受限圆锥型 NAT | 端口受限圆锥型 NAT | 对称型递增 NAT | 对称型 NAT |
26+
| :--------------------: | :----------: | :----------: | :------------: | :------------: | :----------------: | :------------: | :--------: |
27+
| **开放型互联网** | 容易 | 容易 | 容易 | 容易 | 容易 | 容易 | 容易 |
28+
| **对称型防火墙** | 容易 | 简单 | 简单 | 简单 | 简单 | 简单 | 简单 |
29+
| **完全圆锥型 NAT** | 容易 | 简单 | 简单 | 简单 | 简单 | 简单 | 简单 |
30+
| **受限圆锥型 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 中等 | 中等 |
31+
| **端口受限圆锥型 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 中等 | 中等 |
32+
| **对称型递增 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 困难 | 困难 |
33+
| **对称型 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 困难 | 极难 |
34+
35+
说明:NAT 类型仅决定了 P2P 的难度,无法保证 P2P 连接的网络质量,此外无论是哪种类型都无法 100% 保证可以建立 P2P 连接!
36+
37+
注:家用宽带的绝大多数 NAT 类型为:端口受限圆锥型 NAT、对称型递增 NAT、对称型 NAT 和对称型防火墙(仅IPv6)。
38+
39+
​ 移动网络(手机卡/移动数据)的绝大多数 NAT 类型为:对称型 NAT 和对称型防火墙(仅IPv6)。
40+
41+
# 什么是 NAT 和 NAPT ?
42+
43+
NAT(Network Address Translation)网络地址转换,主要用于实现位于内部网络的主机访问外部网络的功能。当局域网内的主机需要访问外部网络时,通过 NAT 技术可以将其私网地址转为公网地址,并且多个私网用户可以共用一个公网地址,这样既可保证网络互通,又节省了公网地址。
44+
45+
NAPT(Network Address Port Translation)也称为 NAT-PT 或 PAT,网络地址端口转换,允许多个私网地址映射到同一个公网地址的不同端口;通常是企业,家庭上网的默认方式。
46+
47+
48+
# 什么是 NAT 类型?NAT 类型有哪些,它们有什么区别?
49+
NAT 的类型决定了外部主机如何与内部主机建立连接,以下为所有的 NAT 类型极其特点:
50+
51+
**Open Internet(开放型互联网/公网/直接映射+端点无关过滤)**
52+
53+
该类型不使用 NAT,地址为公网 IP,可以直接被其他用户连接,例如:
54+
IPv4
55+
120.120.120.120:25565 ← 111.111.111.111:x(x代表任意端口)
56+
120.120.120.120:25565 ← 222.222.222.222:x(x代表任意端口)
57+
120.120.120.120:25565 ← 333.333.333.333:x(x代表任意端口)
58+
120.120.120.120:25565 ← 444.444.444.444:x(x代表任意端口)
59+
60+
IPv6
61+
[240e:3fd8:256a:3367::1]:25565 ← [240e::1]:x(x代表任意端口)
62+
[240e:3fd8:256a:3367::1]:25565 ← [240e::2]:x(x代表任意端口)
63+
[240e:3fd8:256a:3367::1]:25565 ← [240e::3]:x(x代表任意端口)
64+
[240e:3fd8:256a:3367::1]:25565 ← [240e::4]:x(x代表任意端口)
65+
66+
该类型常见于防火墙放行的公网 IP 或者无防火墙的公网IP。
67+
68+
**Symmetric Firewall(对称型防火墙/直接映射+地址和端口相关过滤)**
69+
70+
该类型和 Open Internet 相同,但其所在的设备有防火墙对入站进行过滤,此时其他用户无法直接连接该端口,例如:
71+
IPv4
72+
120.120.120.120:25565 ↚ 111.111.111.111:x(x代表任意端口)
73+
120.120.120.120:25565 ↚ 222.222.222.222:x(x代表任意端口)
74+
120.120.120.120:25565 ↚ 333.333.333.333:x(x代表任意端口)
75+
120.120.120.120:25565 ↚ 444.444.444.444:x(x代表任意端口)
76+
77+
IPv6
78+
[240e:3fd8:256a:3367::1]:25565 ↚ [240e::1]:x(x代表任意端口)
79+
[240e:3fd8:256a:3367::1]:25565 ↚ [240e::2]:x(x代表任意端口)
80+
[240e:3fd8:256a:3367::1]:25565 ↚ [240e::3]:x(x代表任意端口)
81+
[240e:3fd8:256a:3367::1]:25565 ↚ [240e::4]:x(x代表任意端口)
82+
83+
该类型常见于有防火墙的公网 IP,但可以通过打洞进行连接,能否直连取决于防火墙的策略。
84+
85+
**No Pat NAT(Basic NAT/基础 NAT/端点无关映射+端点无关过滤)**
86+
87+
该类型只进行地址转换,端口保持一致,例如:
88+
IPv4
89+
192.168.1.1:25565 ← 120.120.120.120:25565 ← 111.111.111.111:x(x代表任意端口)
90+
192.168.1.1:25565 ← 120.120.120.120:25565 ← 222.222.222.222:x(x代表任意端口)
91+
192.168.1.1:25565 ← 120.120.120.120:25565 ← 333.333.333.333:x(x代表任意端口)
92+
192.168.1.1:25565 ← 120.120.120.120:25565 ← 444.444.444.444:x(x代表任意端口)
93+
94+
IPv6
95+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::1]:x(x代表任意端口)
96+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::2]:x(x代表任意端口)
97+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::3]:x(x代表任意端口)
98+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::4]:x(x代表任意端口)
99+
100+
**Full Cone NAT(完全圆锥型 NAT/端点无关映射+端点无关过滤/NAT1)**
101+
102+
该类型会将地址和端口都进行转换,例如:
103+
IPv4
104+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:x(x代表任意端口)
105+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 222.222.222.222:x(x代表任意端口)
106+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 333.333.333.333:x(x代表任意端口)
107+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 444.444.444.444:x(x代表任意端口)
108+
109+
IPv6
110+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:x(x代表任意端口)
111+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::2]:x(x代表任意端口)
112+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::3]:x(x代表任意端口)
113+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::4]:x(x代表任意端口)
114+
115+
该类型的策略是:我在内网中开放了25565这个端口,任何用户都可以通过转换后的公网端口35565连接进来。
116+
117+
**Restricted Cone NAT(受限圆锥型 NAT/端点无关映射+地址有关过滤/NAT2)**
118+
119+
该类型在 Full Cone NAT 基础上限制了其他用户的 IP 地址,例如:
120+
IPv4
121+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:x(x代表任意端口)
122+
192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 222.222.222.222:x(x代表任意端口)
123+
192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 333.333.333.333:x(x代表任意端口)
124+
192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 444.444.444.444:x(x代表任意端口)
125+
126+
IPv6
127+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:x(x代表任意端口)
128+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::2]:x(x代表任意端口)
129+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::3]:x(x代表任意端口)
130+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::4]:x(x代表任意端口)
131+
132+
该类型的策略是:我在内网中开放了25565这个端口,只有我指定的 IP 地址 才可以通过转换后的公网端口35565连接进来。
133+
其中(111.111.111.111和240e::1)为我指定的 IP 地址。
134+
135+
**Port Restricted Cone NAT(端口受限圆锥型 NAT/端点无关映射+地址和端口有关过滤/NAT3)**
136+
137+
该类型在 Restricted Cone NAT 基础上限制了其他用户的端口号,例如:
138+
IPv4
139+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:11010
140+
192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 111.111.111.111:22020
141+
192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 222.222.222.222:x(x代表任意端口)
142+
192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 333.333.333.333:x(x代表任意端口)
143+
144+
IPv6
145+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:11010
146+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::1]:22020
147+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::2]:x(x代表任意端口)
148+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::3]:x(x代表任意端口)
149+
150+
该类型的策略是:我在内网中开放了25565这个端口,只有我指定的 IP 地址+端口号 才可以通过转换后的公网端口35565连接进来。
151+
其中(111.111.111.111:11010和[240e::1]:11010)为我指定的 IP 地址+端口号。
152+
153+
**Symmetric Easy Increase NAT(对称型递增 NAT/地址和端口相关映射+地址和端口有关过滤/NAT4E)**
154+
155+
该类型在 Port Restricted Cone NAT 基础上限制了映射行为,但映射的端口是有规律的,例如:
156+
IPv4
157+
192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:11010
158+
192.168.1.1:25565 ← 120.120.120.120:35566 ← 222.222.222.222:22020
159+
192.168.1.1:25565 ← 120.120.120.120:35567 ↚ 111.111.111.111:33030
160+
192.168.1.1:25565 ← 120.120.120.120:35568 ↚ 333.333.333.333:x(x代表任意端口)
161+
162+
IPv6
163+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:11010
164+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35567 ← [240e::2]:22020
165+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35569 ↚ [240e::1]:33030
166+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35571 ↚ [240e::3]:x(x代表任意端口)
167+
168+
其中(111.111.111.111:11010、222.222.222.222:11010、[240e::1]:11010、[240e::2]:22020)为我指定的 IP 地址+端口号。
169+
170+
**Symmetric NAT(对称型 NAT/地址和端口相关映射+地址和端口有关过滤/NAT4)**
171+
172+
该类型在 Symmetric Easy Increase NAT 基础上限制了映射的端口,该端口随机,例如:
173+
IPv4
174+
192.168.1.1:25565 ← 120.120.120.120:66534 ← 111.111.111.111:11010
175+
192.168.1.1:25565 ← 120.120.120.120:32768 ← 222.222.222.222:22020
176+
192.168.1.1:25565 ← 120.120.120.120:26984 ↚ 111.111.111.111:33030
177+
192.168.1.1:25565 ← 120.120.120.120:16489 ↚ 333.333.333.333:x(x代表任意端口)
178+
179+
IPv6
180+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:55645 ← [240e::1]:11010
181+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:32478 ← [240e::2]:22020
182+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:43269 ↚ [240e::1]:33030
183+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:11443 ↚ [240e::3]:x(x代表任意端口)
184+
185+
其中(111.111.111.111:11010、222.222.222.222:11010、[240e::1]:11010、[240e::2]:22020)为我指定的 IP 地址+端口号。
186+
187+
**Blocked(阻止型)**
188+
189+
该类型的防火墙非常严格,任何用户都无法连接,例如:
190+
IPv4
191+
192.168.1.1:25565 ← 120.120.120.120:66534 ↚ 任意 IP +任意端口
192+
193+
IPv6
194+
[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:55645 ↚ 任意 IP +任意端口
195+
196+
# 什么是打洞?
197+
198+
**首先我们要理解有状态防火墙:**
199+
200+
我们都知道防火墙可以入站和出站,但连接和“方向”是协议设计者想象的产物。
201+
202+
在实际操作中,每个连接最终都是双向的;所有数据包都会来回传输。
203+
204+
那防火墙如何知道什么是入站,什么是出站呢?
205+
206+
这就是状态部分的作用,有状态防火墙的核心是维护一个“状态表”(State Table),记录所有经过的连接的状态信息。当数据包到达时,防火墙不仅检查数据包的头部信息(如源/目的IP、端口、协议),还会检查这个数据包是否属于一个已经建立的、受信任的连接。
207+
208+
绝大多数情况下,NAT 设备都会包含一个有状态防火墙,例如上面提到的**对称型防火墙**,对于绝大多数的防火墙的规则来说,当 A 向 B 的 IP+指定端口发送数据后,即使 B 的防火墙丢弃了该数据包,但只要 B 通过该 IP+端口发送数据回应 A 的请求,那么 B 的数据就可以通过 A 的防火墙,如下图所示:
209+
210+
![A向B发送数据](/assets/cn/aboutp2p1.png)
211+
212+
![B向A发送回应](/assets/cn/aboutp2p2.png)
213+
214+
![通过防火墙后](/assets/cn/aboutp2p3.png)
215+
216+
我们可以看到 A 和 B 之间在防火墙之间建立了一个连接,而防火墙上面出现了一个“洞”,这就是打洞的由来。
217+
218+
# 为什么我无法建立 P2P 连接?
219+
220+
通过对 NAT 和打洞的了解,在仅有 NAT 的情况下,建立 P2P 的几率几乎为100%,但我们都知道几乎所有设备都有防火墙,只要运营商将其防火墙的规则设置严格一些,那我们就无法建立 P2P 连接。

0 commit comments

Comments
 (0)