|
| 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 | + |
| 211 | + |
| 212 | + |
| 213 | + |
| 214 | + |
| 215 | + |
| 216 | +我们可以看到 A 和 B 之间在防火墙之间建立了一个连接,而防火墙上面出现了一个“洞”,这就是打洞的由来。 |
| 217 | + |
| 218 | +# 为什么我无法建立 P2P 连接? |
| 219 | + |
| 220 | +通过对 NAT 和打洞的了解,在仅有 NAT 的情况下,建立 P2P 的几率几乎为100%,但我们都知道几乎所有设备都有防火墙,只要运营商将其防火墙的规则设置严格一些,那我们就无法建立 P2P 连接。 |
0 commit comments