内网 IP
IANA 保留了三块只能用于专用互联网内部通信的 IP 地址空间:
前缀 | 最低地址 | 最高地址 |
---|---|---|
10/8(A 类) | 10.0.0.0 | 10.255.255.255 |
172.16/12(B 类) | 172.16.0.0 | 172.31.255.255 |
192.168/16(C 类) | 192.168.0.0 | 192.168.255.255 |
虚拟专用网络协议 VPN
如果一个机构由分散的多个网点构成,为了保证通信的私密性,可以采用“租用专线”的方法实现各网点之间的通信,但这种方式成本较高,因此更多的是采用 VPN 协议。 虚拟专用网络:利用公共网络(如 Internet)来构建的专用网络技术,保证了 VPN 中任何两台计算机之间的通信对外界是隐藏的。
搭建 VPN 网络的机构需要有两种地址:
-
本地地址:仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向因特网的管理机构申请
-
全球地址:全球惟一的 IP 地址,必须向因特网的管理机构申请
VPN 工作原理
VPN 的实现主要使用了两种基本技术:隧道传输和加密技术
-
VPN 定义了两个内部网络的路由器之间通过 Internet 建立的通信隧道,使用 IP-in-IP 封装后在隧道中转发数据报
-
为了保证保密性,隧道发送路由器把内网 IP 数据报加密后,封装为外网 IP 数据报的数据部分在外网中进行传输
-
隧道接收路由器收到数据报后,从外网数据报中取出数据部分,将数据报解密,还原成内网数据报,然后转发该数据报
这个过程表示如下:
图中的 X 和 Y 即为内网中的两台主机,它们发送和接收的都是内网 IP 数据报(即源 IP 为 10.1.0.1、目的 IP 为 10.2.0.3 或对换)。X 的内网 IP 数据报到达边缘路由器 R1 后,R1 将内网 IP 数据报进行加密,然后重新封装为外网 IP 数据报,此时的源 IP 为 125.1.2.3、目的 IP 为 194.4.5.6,外网 IP 数据报到达 R2 后,R2 从中取出数据部分并进行解密,还原出内网 IP 数据报,然后将其发送给 Y。
网络地址转换协议 NAT
大家都知道,我们的电脑使用的都是内网 IP,那这些本地编址的专用网络如何访问外网主机呢?
网络地址转换 NAT(Network Address Translation)就是用来解决本地编址的内部网络与外网通信的问题:
-
需要在内网与外网的边缘路由器上安装 NAT 软件,装有 NAT 软件的路由器叫做 NAT 路由器,它至少有一个有效的外部全球地址 IP
-
所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成全球地址 IP 才能和因特网连接
NAT 工作原理
NAT 的工作原理原理即进行数据包的地址转换
请求包地址转换:
响应包地址转换:
在以上这种转换模型中可以发现,如果两台内网主机 X 和 Y 同时请求百度的网站,对于从百度发回来响应,NAT 路由器无法确定是对 X 的响应还是对 Y 的相应,但它提供了一种地址转换思路,NAT 采用的是以下这种更复杂的地址转换方式:
请求包地址转换:
响应包地址转换:
需要说明的是,NAT 路由器转发出去的数据包的源端口是路由器生成的 NAT 端口,并不是内部主机发过来的内部端口(因为两台主机的端口可能一样),如果再有两台内部主机同时访问百度网站,NAT 根据响应包的目的端口(注意这里是 NAT 端口),并查询地址转换表,即可将响应组装成内部 IP 数据报,并转发到正确的主机。
PS:Nginx 的四层反向代理即使用的 NAT 协议
VPN 与 NAT 的区别
可以发现 VPN 协议和 NAT 协议都是通过重新构建一个 IP 首部来实现的,但他们的实现又有区别,VPN 是将内部 IP 数据报加密后打包成外部 IP 数据报的数据部分,它的主要目的是为了数据的保密性,而 NAT 是纯进行地址转换,它的目的是为了解决本地编址的内部网络与外网通信的问题。
参考
https://blog.csdn.net/qq_40843865/article/details/103995625