NAT原理
网络地址转换(NAT,Network Address Translation)
属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。下面介绍两类不同方式实现的NAT:
1 | 在客户机时 192.168.0.8:4000——6.7.8.9:8000 |
NAPT(Network Address/Port Translators)
:其实这种才是我们常说的 NATNAPT的特点是在网关时,会使用网关的 IP,但端口会选择一个和临时会话对应的临时端口。如下图:
1
2
3
4
5在客户机时 192.168.0.8:4000——6.7.8.9:8000
在网关时 1.2.3.4:62000——6.7.8.9:8000
服务器C 6.7.8.9:8000
网关上建立保持了一个1.2.3.4:62000的会话,用于192.168.0.8:4000与6.7.8.9:8000之间的通讯。
对于NAPT,又分了两个大的类型,差别在于,当两个内网用户同时与8000端口通信的处理方式不同:
2.1、 Symmetric
NAT型 (对称型)
1 | 在客户机时 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000 |
2.2、Cone NAT型(圆锥型)
1 | 在客户机时 192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000 |
Cone NAT又分了3种类型:
1 | a)Full Cone NAT(完全圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000 ,192.168.0.8可以收到任意外部主机发到1.2.3.4:62000的数据报。 |
NAT穿透
1 | A1在客户机时 192.168.0.8:4000——6.7.8.9:8000 |
两内网用户要实现通过各自网关的直接呼叫,需要以下过程:
1 | 1、 客户机A1、B1顺利通过格子网关访问服务器C ,均没有问题(类似于登录) |
UDP和TCP打洞
TCP和UDP在打洞上是不同的,这是因为伯克利socket(标准socket规范)的API造成的。
- UDP的socket允许多个socket绑定到同一个本地端口,而TCP的socket则不允许
注:TCP
按CS
方式工作,一个端口只能用来connect
或listen
,所以需要使用端口重用,才能利用本地NAT的端口映射关系。要设置SO_REUSEADDR
、SO_REUSEPORT
这两个参数,需要系统支持SO_REUSEPORT
。
内网IP段
1 | 192.168.0.0 - 192.168.255.255 |