Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
191 changes: 158 additions & 33 deletions guide/aboutp2p.md
Original file line number Diff line number Diff line change
@@ -1,201 +1,294 @@
# 什么是 P2P ?
## 什么是 P2P ?

P2P( Peer-to-Peer), 也称点对点或对等网络,在 Easytier 中指直连(直接连接)。

传统网络架构:客户端-服务端,在 Easytier 中指中转/中继(relay)。

对等网络架构:只有节点,节点可以是服务端也可以是客户端。

相较于传统网络架构,P2P 的优势是什么
相较于传统网络架构,以下为 P2P 的优势

1.成本低:无需购买额外的服务器,大幅度节约联机成本。
**成本低**:无需购买额外的服务器,大幅度节约联机成本。

2.延迟低:不过经过服务器转发数据,有效降低联机延迟。
**延迟低**:不过经过服务器转发数据,有效降低联机延迟。

3.带宽高:网络带宽取决于节点的上限。
**带宽高**:网络带宽取决于节点的上限。

# P2P 和 NAT 有什么关系,具体有什么影响?
::: danger 警告
以上优势仅在所有节点网络质量良好的状况下才能体现!!!
:::

NAT 类型决定了你是否可以和其他用户建立 P2P 连接,建立 P2P 连接之后,通常可以有效的降低网络延迟,网络带宽较高。
## P2P 和 NAT 有什么关系,具体有什么影响?

当然即使无法建立 P2P 连接,您依然可以通过 Easytier 的 中转/中继/relay 功能进行联机,通常网络延迟较高,网络带宽较低
NAT 类型决定了你是否可以和其他用户建立 P2P 连接,建立 P2P 连接之后,通常情况下可以降低网络延迟,网络带宽较高

## 建立 P2P 连接难度表
当然即使无法建立 P2P 连接,您依然可以通过 Easytier 的 中转/中继/relay 功能进行联机,通常情况下网络延迟较高,网络带宽较低。

::: warning 注意
IPv4 和 IPv6 都可以建立 P2P 连接,但双方必须拥有相同的协议才可建立 P2P 连接!
:::

**建立 P2P 连接难度表**

| NAT 类型 | 开放型互联网 | 对称型防火墙 | 完全圆锥型 NAT | 受限圆锥型 NAT | 端口受限圆锥型 NAT | 对称型递增 NAT | 对称型 NAT |
| :--------------------: | :----------: | :----------: | :------------: | :------------: | :----------------: | :------------: | :--------: |
| **开放型互联网** | 容易 | 容易 | 容易 | 容易 | 容易 | 容易 | 容易 |
| **对称型防火墙** | 容易 | 简单 | 简单 | 简单 | 简单 | 简单 | 简单 |
| **完全圆锥型 NAT** | 容易 | 简单 | 简单 | 简单 | 简单 | 简单 | 简单 |
| **受限圆锥型 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 中等 | 中等 |
| **端口受限圆锥型 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 中等 | 中等 |
| **对称型递增 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 困难 | 困难 |
| **对称型 NAT** | 容易 | 简单 | 容易 | 中等 | 中等 | 困难 | 极难 |

说明:NAT 类型仅决定了 P2P 的难度,无法保证 P2P 连接的网络质量,此外无论是哪种类型都无法 100% 保证可以建立 P2P 连接!
| **受限圆锥型 NAT** | 容易 | 简单 | 简单 | 中等 | 中等 | 中等 | 中等 |
| **端口受限圆锥型 NAT** | 容易 | 简单 | 简单 | 中等 | 中等 | 中等 | 中等 |
| **对称型递增 NAT** | 容易 | 简单 | 简单 | 中等 | 中等 | 困难 | 困难 |
| **对称型 NAT** | 容易 | 简单 | 简单 | 中等 | 中等 | 困难 | 极难 |

注:家用宽带的绝大多数 NAT 类型为:端口受限圆锥型 NAT、对称型递增 NAT、对称型 NAT 和对称型防火墙(仅IPv6)。
::: tip 说明
NAT 类型仅决定了建立 P2P 连接的难度,无法保证 P2P 连接的网络质量,此外无论是哪种类型都无法 100% 保证可以建立 P2P 连接!
:::

​ 移动网络(手机卡/移动数据)的绝大多数 NAT 类型为:对称型 NAT 和对称型防火墙(仅IPv6)。
::: warning 注意
对于 Easytier 来说目前仅探测了 IPv4 的 NAT 类型,绝大多数情况下 IPV6 的类型为对称型防火墙。家用宽带的绝大多数 NAT 类型为:端口受限圆锥型 NAT、对称型递增 NAT、对称型 NAT 和对称型防火墙(仅IPv6)。移动网络(手机卡/移动数据)的绝大多数 NAT 类型为:对称型 NAT 和对称型防火墙(仅IPv6)。
:::

# 什么是 NAT 和 NAPT ?
## 什么是 NAT 和 NAPT ?

NAT(Network Address Translation)网络地址转换,主要用于实现位于内部网络的主机访问外部网络的功能。当局域网内的主机需要访问外部网络时,通过 NAT 技术可以将其私网地址转为公网地址,并且多个私网用户可以共用一个公网地址,这样既可保证网络互通,又节省了公网地址。

NAPT(Network Address Port Translation)也称为 NAT-PT 或 PAT,网络地址端口转换,允许多个私网地址映射到同一个公网地址的不同端口;通常是企业,家庭上网的默认方式
NAPT(Network Address Port Translation)也称为 NAT-PT 或 PAT,网络地址端口转换,允许多个私网地址映射到同一个公网地址的不同端口。

::: tip 说明
绝大多数情况下,IPv4 使用的是 NAPT,即:网络地址和网络端口都转换;IPv6 不使用 NAT 和 NAPT,即公网 IP。
:::

# 什么是 NAT 类型?NAT 类型有哪些,它们有什么区别?
NAT 的类型决定了外部主机如何与内部主机建立连接,以下为所有的 NAT 类型极其特点:
## 什么是 NAT 类型?NAT 类型有哪些,它们有什么区别?
NAT 的类型是外部主机与内部主机建立连接方式,以下为所有的 NAT 类型极其特点:

**Open Internet(开放型互联网/公网/直接映射+端点无关过滤)**
::: tip 说明
192.168.1.1(IPv4)和 fd00::1(IPv6)为内网地址。
:::

### Open Internet(开放型互联网/公网/直接映射+端点无关过滤)

该类型不使用 NAT,地址为公网 IP,可以直接被其他用户连接,例如:

IPv4

120.120.120.120:25565 ← 111.111.111.111:x(x代表任意端口)

120.120.120.120:25565 ← 222.222.222.222:x(x代表任意端口)

120.120.120.120:25565 ← 333.333.333.333:x(x代表任意端口)

120.120.120.120:25565 ← 444.444.444.444:x(x代表任意端口)

IPv6

[240e:3fd8:256a:3367::1]:25565 ← [240e::1]:x(x代表任意端口)

[240e:3fd8:256a:3367::1]:25565 ← [240e::2]:x(x代表任意端口)

[240e:3fd8:256a:3367::1]:25565 ← [240e::3]:x(x代表任意端口)

[240e:3fd8:256a:3367::1]:25565 ← [240e::4]:x(x代表任意端口)

该类型常见于防火墙放行的公网 IP 或者无防火墙的公网IP。

**Symmetric Firewall(对称型防火墙/直接映射+地址和端口相关过滤)**
### Symmetric Firewall(对称型防火墙/直接映射+地址和端口相关过滤)

该类型和 Open Internet 相同,但其所在的设备有防火墙对入站进行过滤,此时其他用户无法直接连接该端口,例如:

IPv4
120.120.120.120:25565 ↚ 111.111.111.111:x(x代表任意端口)

120.120.120.120:25565 ↚ 222.222.222.222:x(x代表任意端口)

120.120.120.120:25565 ↚ 333.333.333.333:x(x代表任意端口)

120.120.120.120:25565 ↚ 444.444.444.444:x(x代表任意端口)

IPv6

[240e:3fd8:256a:3367::1]:25565 ↚ [240e::1]:x(x代表任意端口)

[240e:3fd8:256a:3367::1]:25565 ↚ [240e::2]:x(x代表任意端口)

[240e:3fd8:256a:3367::1]:25565 ↚ [240e::3]:x(x代表任意端口)

[240e:3fd8:256a:3367::1]:25565 ↚ [240e::4]:x(x代表任意端口)

该类型常见于有防火墙的公网 IP,但可以通过打洞进行连接,能否直连取决于防火墙的策略。

**No Pat NAT(Basic NAT/基础 NAT/端点无关映射+端点无关过滤)**
### No Pat NAT(Basic NAT/基础 NAT/端点无关映射+端点无关过滤)

该类型只进行地址转换,端口保持一致,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:25565 ← 111.111.111.111:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:25565 ← 222.222.222.222:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:25565 ← 333.333.333.333:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:25565 ← 444.444.444.444:x(x代表任意端口)

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::1]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::2]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::3]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:25565 ← [240e::4]:x(x代表任意端口)

**Full Cone NAT(完全圆锥型 NAT/端点无关映射+端点无关过滤/NAT1)**
### Full Cone NAT(完全圆锥型 NAT/端点无关映射+端点无关过滤/NAT1)

该类型会将地址和端口都进行转换,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ← 222.222.222.222:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ← 333.333.333.333:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ← 444.444.444.444:x(x代表任意端口)

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::2]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::3]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::4]:x(x代表任意端口)

该类型的策略是:我在内网中开放了25565这个端口,任何用户都可以通过转换后的公网端口35565连接进来。

**Restricted Cone NAT(受限圆锥型 NAT/端点无关映射+地址有关过滤/NAT2)**
### Restricted Cone NAT(受限圆锥型 NAT/端点无关映射+地址有关过滤/NAT2)

该类型在 Full Cone NAT 基础上限制了其他用户的 IP 地址,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 222.222.222.222:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 333.333.333.333:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 444.444.444.444:x(x代表任意端口)

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::2]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::3]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::4]:x(x代表任意端口)

该类型的策略是:我在内网中开放了25565这个端口,只有我指定的 IP 地址 才可以通过转换后的公网端口35565连接进来。

其中(111.111.111.111和240e::1)为我指定的 IP 地址。

**Port Restricted Cone NAT(端口受限圆锥型 NAT/端点无关映射+地址和端口有关过滤/NAT3)**
### Port Restricted Cone NAT(端口受限圆锥型 NAT/端点无关映射+地址和端口有关过滤/NAT3)

该类型在 Restricted Cone NAT 基础上限制了其他用户的端口号,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:11010

192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 111.111.111.111:22020

192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 222.222.222.222:x(x代表任意端口)

192.168.1.1:25565 ← 120.120.120.120:35565 ↚ 333.333.333.333:x(x代表任意端口)

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:11010

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::1]:22020

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::2]:x(x代表任意端口)

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ↚ [240e::3]:x(x代表任意端口)

该类型的策略是:我在内网中开放了25565这个端口,只有我指定的 IP 地址+端口号 才可以通过转换后的公网端口35565连接进来。

其中(111.111.111.111:11010和[240e::1]:11010)为我指定的 IP 地址+端口号。

**Symmetric Easy Increase NAT(对称型递增 NAT/地址和端口相关映射+地址和端口有关过滤/NAT4E)**
### Symmetric Easy Increase NAT(对称型递增 NAT/地址和端口相关映射+地址和端口有关过滤/NAT4E)

该类型在 Port Restricted Cone NAT 基础上限制了映射行为,但映射的端口是有规律的,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:35565 ← 111.111.111.111:11010

192.168.1.1:25565 ← 120.120.120.120:35566 ← 222.222.222.222:22020

192.168.1.1:25565 ← 120.120.120.120:35567 ↚ 111.111.111.111:33030

192.168.1.1:25565 ← 120.120.120.120:35568 ↚ 333.333.333.333:x(x代表任意端口)

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35565 ← [240e::1]:11010

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35567 ← [240e::2]:22020

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35569 ↚ [240e::1]:33030

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:35571 ↚ [240e::3]:x(x代表任意端口)

其中(111.111.111.111:11010、222.222.222.222:11010、[240e::1]:11010、[240e::2]:22020)为我指定的 IP 地址+端口号。

**Symmetric NAT(对称型 NAT/地址和端口相关映射+地址和端口有关过滤/NAT4)**
### Symmetric NAT(对称型 NAT/地址和端口相关映射+地址和端口有关过滤/NAT4)

该类型在 Symmetric Easy Increase NAT 基础上限制了映射的端口,该端口随机,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:66534 ← 111.111.111.111:11010

192.168.1.1:25565 ← 120.120.120.120:32768 ← 222.222.222.222:22020

192.168.1.1:25565 ← 120.120.120.120:26984 ↚ 111.111.111.111:33030

192.168.1.1:25565 ← 120.120.120.120:16489 ↚ 333.333.333.333:x(x代表任意端口)

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:55645 ← [240e::1]:11010

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:32478 ← [240e::2]:22020

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:43269 ↚ [240e::1]:33030

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:11443 ↚ [240e::3]:x(x代表任意端口)

其中(111.111.111.111:11010、222.222.222.222:11010、[240e::1]:11010、[240e::2]:22020)为我指定的 IP 地址+端口号。

**Blocked(阻止型)**
### Blocked(阻止型)

该类型的防火墙非常严格,任何用户都无法连接,例如:

IPv4

192.168.1.1:25565 ← 120.120.120.120:66534 ↚ 任意 IP +任意端口

IPv6

[fd00::1]:25565 ← [240e:3fd8:256a:3367::1]:55645 ↚ 任意 IP +任意端口

# 什么是打洞?
## 什么是打洞?

**首先我们要理解有状态防火墙:**
首先我们要理解有**状态防火墙**:

我们都知道防火墙可以入站和出站,但连接和“方向”是协议设计者想象的产物。

Expand All @@ -215,6 +308,38 @@ IPv6

我们可以看到 A 和 B 之间在防火墙之间建立了一个连接,而防火墙上面出现了一个“洞”,这就是打洞的由来。

# 为什么我无法建立 P2P 连接?
## 为什么我无法建立 P2P 连接?

通过对 NAT 和打洞的了解,在仅有 NAT 的情况下,建立 P2P 的几率几乎为100%,但我们都知道几乎所有设备都有防火墙,只要运营商将其防火墙的规则设置严格一些,那我们就无法建立 P2P 连接。

## 如何提高 P2P 成功的几率呢?

### 调整防火墙规则

放行 Easytier 的端口可极大地提高 P2p 成功的几率,可能需要调整多个设备才能生效。

::: warning 注意
该方法要求 NAT 类型为 **Symmetric Firewall(对称型防火墙/直接映射+地址和端口相关过滤)**
:::

### 开启 IPv6

绝大多数情况下,IPv6 为公网IP,P2P 成功的几率几乎为 100%,但需要所有节点拥有 IPv6。

### 修改 NAT 类型

尽量将 IPv4 的 NAT 类型修改为 **Full Cone NAT(完全圆锥型 NAT/端点无关映射+端点无关过滤/NAT1)**或者规则更加宽松的类型,具体方法可参考百度。

关闭 NATv6 或将 IPv6 的 NAT 类型修改为为 **Full Cone NAT(完全圆锥型 NAT/端点无关映射+端点无关过滤/NAT1)**或者规则更加宽松的类型,具体方法可参考百度。

::: warning 注意
部分地区会限制用户修改 NAT 类型,请自行联系运营商!
:::

### 开启路由器的 UPNP 功能

UPNP 会自动配置转发规则,可能会提高 P2P 成功几率。

### 向运营商购买公网IPv4的套餐

由于一些原因其他节点无法拥有 IPv6 地址,可向运营商购买公网 IPv4 地址,该方法建立 P2P 连接的几率几乎为 100%。