For yahoo(p2p 内网穿透)

p2p 内网穿透

Cone NAT 与Symmetric NAT

从内网主机发出报文访问外网目标时,可用四元组[源IP,源端口,目标IP,目标端口]来表示会话:

[私有源地址,私有源端口,全局目标地址,全局目标端口]

     ↓NAT

[全局源地址,全局源端口,全局目标地址,全局目标端口]

   NAT在对不同的私有源地址进行转换的时候,可能转换成同一全局源地址,也可能转换成不同的全局源地址(如果NAT地址池配置有多个全局地址)。

 

完全Cone NAT 无论目标地址和端口怎样,每次都把该私有源IP地址/端口映射到同一个全局源地址/端口;外网的任何主机都可以发送报文到该映射的全局地址而访问到该内部主机。路由器的静态地址映射就是属于这种。

限制Cone NAT 地址/端口映射的情况同完全Cone NAT的,但外网的主机要访问内网主机,该内网主机必须先发送过报文给该外网主机的地址。

端口限制Cone NAT 地址/端口映射情况同完全Cone NAT的,但外网主机要访问内网主机,该内网主机必须先发送过报文给该外网主机的地址和端口。大多数路由器的NAPT就是属于这种情况。本文后面论及的Cone NAT也是指这种情况。

Symmetric NAT 对不同的目标地址/端口,源私有地址映射到源全局地址不变,但是映射的全局端口会改变。外网主机必须先收到过内网主机的报文,才能访问到该内网主机。一些路由器和防火墙产品的NAT就是属于这种情况。

 

Hole Punching方法过程

现在主机A欲与B直接进行UDP通信,A发送请求信息给Server S请求帮助连接B, S把B的全局和私有插口发送给A,也把A的全局和私有插口发送给B。A和B知道对方的插口后,就会尝试直接发送UDP报文给对方,既向全局插口发送,也向私有插口发送。私有地址不能被路由,故发送不会成功。下面讨论发向全局插口的UDP报文。

A发送的第一个UDP报文以B的全局插口[202.1.1.1:3600]为目标插口,建立了一个新的UDP会话Session A-B,在A的内网由插口对[192.168.1.1:4321, 202.1.1.1:3600]标识,在Internet上则由插口对[201.1.1.1:6200, 202.1.1.1:3600]标识。

这时B的第一个报文也发送给A的全局插口[201.1.1.1:6200],过程与上面对A的第一个报文的描述一样,也建立了一个新的UDP会话Session B-A。

 

如果A的第一个报文,在B的第一个报文通过B的NAT之前到达了B的NAT,而B以A作为访问目标的会话还未建立(B的NAT洞还未开出),B的NAT对不请自来的A的报文会丢弃之;这时A的NAT洞已经开出,故B的第一个报文会顺利通过A的NAT传送到A。在B的第一个报文从NAT发出后,自己的NAT洞也开好了。这样,A、B双方NAT的洞都开好了,UDP通信就能够在二者之间直接进行而不再需服务器S的参与。

 

Symmetric NAT

Hole Punching方法采用准随机猜测方法与算法,映射全局端口变化只在一个小范围内,所以通过猜测变化值k来实现内网穿透。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值