既然知道了内网穿透原理,下面来了解一下NAT穿透!
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
NAT穿透原理详解NAT( 在讲解NAT穿透之前我们先来想想为什么需要NAT呢? 要想回答这个问题就不得不了解IPv4与IPv6的区别了。IPv4中规定IP地址长度为32,即有2^32-1个地址,而IPv6中IP地址的长度为128,即有2^128-1个地址。夸张点说,如果IPv6被广泛应用以后,全世界的每一粒尘埃都分配一个IP地址都够用。回到我们的问题,答案应该清楚了,那就是为了解决IP地址不够而诞生的。通过公网IP地址与端口映射到私网机器的IP地址与端口。这样就能通过少量的公有IP地址来代表较多的私有IP地址,有助于减缓IPv4地址的耗尽问题。放张图大家来直观地了解下。 1.NAT如何实现穿透?两台客户端通过网关穿透总共有16种情况,但我们只需要考虑3种情况即可。
1.1 穿透完全锥形NAT在穿透过程中,两端私网机器都是在NAT路由器之下的。两端NAT只要有一方为完全锥型NAT的时候,就是可以穿透的。完全锥形NAT穿透流程如下图所示,NAT1为完全锥形NAT,NAT2为任意NAT。 1):私网机器1(192.168.1.3:2341)发送报文给服务器(180.93.45.46:8888)。服务器获取到私网机器1的公网IP地址与端口(112.93.14.56:43891)。 2):服务器收到报文信息后,通知私网机器2(192.168.2.6:6583),通知信息内包含有私网机器1的公网IP地址与端口(112.93.14.56:43891)。 3):私网机器2(192.168.2.6:6583)收到通知信息后直接发送数据给私网机器1的公网IP地址与端口(112.93.14.56:43891),此时私网机器1就能收到私网机器2发送的报文数据,并且能获取到私网机器2的公网IP地址与端口(iAddr:iPort)。 4):私网机器1回发报文信息给私网机器2的公网IP地址与端口(iAddr:iPort),此时私网机器2也能收到私网机器1回发的报文数据,穿透结束。 1.2穿透限制锥形NAT限制锥型NAT的特点是限制了其他公网机器报文数据传输。如果这里采用上边穿透完全锥型NAT的穿透步骤来穿透限制锥型NAT,那么在步骤3时私网机器1不能收到私网机器2发送的报文数据,穿透失败。下边来讲限制锥形NAT的穿透,穿透流程如下图所示。 1):私网机器1(192.168.1.3:2341)发送报文给服务器(180.93.45.46:8888),服务器获取到私网机器的公网IP地址(112.93.14.56:43891)。 2):然后服务器发送通知报文给私网机器2(192.168.2.6:6583),通知报文中包含私网机器1的公网IP地址(112.93.14.56:43891)。 3):私网机器2发送报文数据到私网机器1的公网IP地址(112.93.14.56:43891)。由于NAT1是限制锥型NAT,此时私网机器1不能收到报文数据。 4):私网机器2进行完步骤3以后,立即发送报文给服务器(180.93.45.46:8888),要求私网机器1发送数据给私网机器2的公网IP地址。 5):服务器通知私网机器1,通知信息中包含私网机器2的公网IP地址(180.20.198.42.9681)。 6):私网机器1接到服务器通知后发送报文数据给私网机器2的公网IP地址。由于步骤3中私网机器2给私网机器1的公网IP地址发送过报文,此份报文此时会被NAT2的路由器认为是上述步骤3的回复,所以此步骤会被允许通过,此时穿透NAT2成功。 7):私网机器2回发报文给私网机器1,此时穿透了NAT1。穿透结束。 1.3穿透对称NAT对称NAT的特点是每一个不同公网机器的通信,都会被分配不同的映射端口(NAT会产生两条记录),如果参照限制锥型NAT的穿透流程,则不能准确地知道步骤3所产生的公网IP地址与端口,不知道通知对方的公网IP与端口,那就基本靠技术性的猜测了。对称穿透流程如下图所示,NAT1为限制锥型NAT,NAT2为对称NAT。 1):私网机器1(192.168.1.3:2341)发送报文数据给服务器(180.93.45.46:8888),请求与私网机器2进行透传。 2):服务器(180.93.45.46:8888)发送通知信息给私网机器2。通知信息内含私网机器1的公网IP地址(112.93.14.56:43891)。 3):私网机器2收到通知信息,发送报文数据给私网机器1的公网IP地址。此时由于NAT1为限制锥形NAT,数据是不被允许进入私网的。同时由于NAT2为对称NAT,所以会在此次报文发送过程中,会被产生新的映射记录,分配新的公网地址与端口(iAddr:iPort)。 4):私网机器2进行完步骤3以后,发送报文信息给服务器的另一个端口8889,此步骤也会在路由器上产生一条新的映射记录,分配公网地址与端口(mAddr:mPort)。服务器同时也获取到新的公网地址与端口(mAddr:mPort)。 5):服务器(180.93.45.46:8889)发送通知信息给私网机器1。通知信息内包含步骤4产生的新记录公网地址与端口(mAddr:mPort)。此时可以根据iPort与mPort产生的时间间隔很短来判断iPort的值,即需要穿透的端口。为了判断的准确性,可以在产生mPort之前也加上一次新记录,即在步骤3以前让NAT路由器产生一条记录,这样会大大地提升穿透的概率。 6):根据mPort的值,来猜测iPort的值,发送报文信息给私网机器2的公网地址与端口(mAddr:mPort)。如果是准确的mPort值,则能够穿透NAT2。 7):收到穿透报文信息后,回复报文信息,穿透结束。 该文章在 2026/1/9 11:20:22 编辑过 |
关键字查询
相关文章
正在查询... |