设计师都上什么网站,用哪个网站做首页比较好,制作网页的基本代码,建设工程造价管理基础知识NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的. 例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) - NAT(202.1… NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的. 例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) - NAT(202.100.100.100 : 8000) - C(292.88.88.88:2000) 任何发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000) 2) Restricted Cone 这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口.然后C可以用任何端口和A通信.其他的外网机器不行. 例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) - NAT(202.100.100.100 : 8000) - C(292.88.88.88:2000) 任何从C发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000) 3) Port Restricted Cone 这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口.然后C可以用原来的端口和A通信.其他的外网机器不行. 例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) - NAT(202.100.100.100 : 8000) - C(292.88.88.88:2000) C(202.88.88.88:2000)发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000) 以上三种NAT通称Cone NAT.我们只能用这种NAT进行UDP打洞. 4) Symmetic 对于这种NAT.连接不同的外部目标.原来NAT打开的端口会变化.而Cone NAT不会.虽然可以用端口猜测.但是成功的概率很小.因此放弃这种NAT的UDP打洞. 我们看看不同NAT之间的NAT打洞。NAT打洞需要Server配合需要2种Server1. 类似WebRTC中的信令服务器作用是帮助客户机沟通IP和PORT信息2. STUN Server用来让客户机判断自己所在的NAT环境。现在假设客户端和Server的通讯都没问题客户端知道自己所处环境并且将自己的信息通过服务器发送给了另一方客户端它们可能的打洞情况如下1. Full Cone NAT 与 Full Cone NAT通讯很容易各自通过STUN Server获取外部IP和Port后通过信令服务器通知另一方即可通讯。2. Full Cone NAT 与 Restricted Cone NAT或Port Restricted Cone NAT在互相告知IP和Port后如果由Full Cone NAT端先发送数据包会失败必须由Restricted Cone NAT或Port Restricted Cone NAT端先发送数据包给Full Cone NAT之后双方即可互相通讯。3. Full Cone NAT 与 Symmetric NAT通讯时必须先由Symmetric NAT端发送数据包给Full Cone NAT端Full Cone NAT端通过发来的数据包获得目标的新端口号之后通过这个新端口号完成互相通讯。4. Restricted Cone NAT 与 Restricted Cone NAT、Restricted Cone NAT 与 Port Restricted Cone NAT、Port Restricted Cone NAT 与 Port Restricted Cone NAT之间通讯时先发送数据包的一方会失败之后另一方发送数据包成功后可互相通讯。5. Restricted Cone NAT 与 Symmetric NAT通讯时先由Restricted Cone NAT发送数据包给Symmetric NAT发送数据会失败只是为了下次能接收从Symmetric NAT端发送过来的数据包。然后由Symmetric NAT发送数据包到Restricted Cone NAT端Restricted Cone NAT端会收到数据包并且将新的端口号记下使用新的端口号可与Symmetric NAT端通讯。6. Port Restricted Cone NAT 与 Symmetric NAT通讯时由于Port Restricted Cone NAT会对IP:PORT对进行限制所以当Symmetric NAT端使用新PORT发来数据包时Port Restricted Cone NAT端收不到它们之间无法通讯。7. Symmetric NAT 与 Symmetric NAT也无法通讯 。NAT类型定义 1. Full Cone NAT所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外当X-Y的转换关系建立之后任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口向内部主机发送UDP报文由于对外部请求的来源无任何限制因此这种方式虽然足够简单但却不那么安全 2. Restricted Cone NAT 它是Full Cone的受限版本所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y这与Full Cone相同但不同的是只有当内部主机曾经发送过报文给外部主机假设其IP地址为Z后外部主机才能以Y中的信息作为目标地址和目标端口向内部 主机发送UDP请求报文这意味着NAT设备只向内转发目标地址/端口转换那些来自于当前已知的外部主机的UDP报文从而保障了外部请求来源的安 全性 3. Port Restricted Cone NAT它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机假设其IP地址为Z且端口为P之后外部主机才能以Y中的信息作为目标地址和目标端 口向内部主机发送UDP报文同时其请求报文的源端口必须为P这一要求进一步强化了对外部报文请求来源的限制从而较Restrictd Cone更具安全性 4. Symmetric NAT这是一种比所有Cone NAT都要更为灵活的转换方式在Cone NAT中内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的即与目标Tuple无关 在Symmetric NAT中目标Tuple则成为了NAT设备建立转换关系的一个重要考量只有来自于同一个内部Tuple 、且针对同一目标Tuple的请求才被NAT转换至同一个外部Tuple否则的话NAT将为之分配一个新的外部Tuple打个比方当内部主机以相 同的内部Tuple对2个不同的目标Tuple发送UDP报文时此时NAT将会为内部主机分配两个不同的外部Tuple并且建立起两个不同的内、外部 Tuple转换关系。与此同时只有接收到了内部主机所发送的数据包的外部主机才能向内部主机返回UDP报文这里对外部返回报文来源的限制是与Port Restricted Cone一致的。不难看出如果说Full Cone是要求最宽松NAT UDP转换方式那么Symmetric NAT则是要求最严格的NAT方式其不仅体现在转换关系的建立上而且还体现在对外部报文来源的限制方面。 NAT类型检测 前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。 第一步检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包要设定socket Timeout300ms防止无限堵塞. 重复这个过程若干次。如果每次都超时无法接受到服务器的回应则说明客户端无法进行UDP通信可能是防火墙或NAT阻止UDP通信这样的客户端也就 不能P2P了检测停止。 当客户端能够接收到服务器的回应时需要把服务器返回的客户端IP,Port和这个客户端socket的 LocalIPLocalPort比较。如果完全相同则客户端不在NAT后这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信检 测停止。否则客户端在NAT后要做进一步的NAT类型检测(继续)。 第二步检测客户端NAT是否是Full Cone NAT 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回 发一个数据包,客户端发送请求后立即开始接受数据包要设定socket Timeout300ms防止无限堵塞. 重复这个过程若干次。如果每次都超时无法接受到服务器的回应则说明客户端的NAT不是一个Full Cone NAT具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包则说明客户端是一个Full Cone NAT这样的客户端能够进行UDP-P2P通信检测停止。 第三步检测客户端NAT是否是Symmetric NAT 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包要设定socket Timeout300ms防止无限堵塞. 重复这个过程直到收到回应一定能够收到因为第一步保证了这个客户端可以进行UDP通信。 用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。 比 较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT这样的客户端无法进行UDP-P2P通信检测停止。否则是Restricted Cone NAT是否为Port Restricted Cone NAT有待检测(继续)。 第四步检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT 客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包要设定socket Timeout300ms防止无限堵塞. 重复这个过程若干次。如果每次都超时无法接受到服务器的回应则说明客户端是一个Port Restricted Cone NAT如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。 注以上检测过程中只说明了可否进行UDP-P2P的打洞通信具体怎么通信一般要借助于Rendezvous Server。另外对于Symmetric NAT不是说完全不能进行UDP-P2P达洞通信可以进行端口预测打洞不过不能保证成功。