首页 » Web前端 » php打洞udp技巧_NAT基本事理及UDP打洞技能

php打洞udp技巧_NAT基本事理及UDP打洞技能

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

1.内网的用户可以访问内网做事器吗?

可以,在一个局域网,都有私有IP,可以直接通信。

php打洞udp技巧_NAT基本事理及UDP打洞技能

2.外网用户可以直接访问内网做事器吗?

php打洞udp技巧_NAT基本事理及UDP打洞技能
(图片来自网络侵删)

不可以,须要做静态NAT,把外网路由至内网地址上。

3.内网用户可以直接访问外网吗?

不可以,须要做动态NAT,将内网用户私有IP转换成公网IP。
由于公网IP只有一个,而内网用户IP很多,为了辨别内网用户session,须要利用内网IP+端口号组合的办法。

4.内网用户可以访问公网IP的内网做事器吗?

不可以,在目前的NAT实现机制上,是无法访问的。
如果要实现互通就须要NAT穿透,普通的讲便是打洞技能。

什么是NAT

NAT(Network Address Translation,网络地址转换), 用来将内网地址和端口号转换成合法的公网地址和端口号,建立一个会话,与公网主机进行通信。
NAT的利用是为理解决公网IP有限及局域网安全性的问题。

NAT分类

NAT事情事理网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经由NAT网关;网络访问只能先由私网侧发起,公网无法主动访问私网主机;NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息更换,入方向做目的信息更换;NAT网关的存在对通信双方是保持透明的;NAT网关为了实现双向翻译的功能,须要掩护一张关联表,把会话的信息保存下来。

从上面的特色来看,NAT将内部网络的信息隐蔽和转换,如果要实现隐蔽在NAT下的设备之间通信(对等网络传输),则必须穿透NAT;NAT网关实际上并不能实现对通信双方的全透明,由于用户可以在传输的数据包中携带ip和port信息(而不是在IP header中)。

NAT穿透实现事理

通过对NAT的先容,可以看到NAT只是实现私网和公网之间的通信转换,但是两个私网内的要实现通信就须要NAT穿透技能了。

如图所示,客户端A和客户端B要实现通信,要通过以下过程:

首先要启动一个做事器S.客户端A,B要通过各自的NAT向做事器注册各自的公网IP客户端A向做事端S要求与客户端B进行通信,做事端S关照客户端B。
做事端S把客户端B的外网IP发给客户端A,把客户端A的外网IP发给客户端B。
客户端B向客户端A的方向打洞,并关照做事器S。
做事器S关照客户端A与客户端B建立连接。
客户端A和客户B可直接通过NAT进行通信。
TCP打洞与UDP打洞

TCP打洞和UDP打洞的流程基本是同等,为什么一提到打洞技能便是UDP打洞呢?这是由于标准socket的API造成的。
UDP的socket许可一个socket创建多个会话,而TCP的只许可一个socket创建一个会话。
比如A和B要连接到S,肯定首先A和B双方都会在本地创建一个socket,去连接S上的socket。
创建一个socket一定会绑定一个本地端口,假设为6666,这样A和B才分别建立了到S的通信信道。
接下来开始打洞,打洞则须要A和B分别发送数据包到对方的公网IP。
由于NAT设备是根据端口号来确定session,如果是UDP的socket,A和B只用把数据直接发送到对方的IP和端口就可以了,这样打洞就成功了。
但是如果是TCP的socket,因当前socket已绑定了与做事器通信,以是只能再新创建socket进行通信,增加了资源开销。

并不是所有的NAT都能支持打洞的,看下面表格:

客户端A

客户端B

是否可以打洞

全锥型

全锥型

全锥型

受限锥型

全锥型

端口受限锥型

全锥型

对称型

受限锥型

受限锥型

受限锥型

端口受限锥型

受限锥型

对称型

端口受限锥型

端口受限锥型

端口受限锥型

对称型

一样平常否

对称型

对称型

一样平常否

标签:

相关文章