http://michankong.blog.51cto.com/1464983/761270
可能有点乱,下面以故事的形式叙述一下这个情景。
人物:A(男) NAT_A(A家接线员) B(女) NAT_B (B家接线员) S
场景介绍:A想认识B,但是不知道B的电话,S跟A、B都是朋友,并且知道A和B的电话。接线员的职责:对往外转接的电话不做询问,对往内转接的电话则要过滤以免有骚扰电话。过滤规则:在一定时间内没有拨打过的号码就过滤。
首先A给S打电话:
A说:我想认识你朋友B,你把她电话给我呗。
S说:行,她的电话是PublicIP_B,我让她先给你打个电话,要不她家接线员不帮你转接。
A说:好。
S跟B打电话:
S说:我有一个朋友A,人挺好的,他想认识你,你给他打个电话,他的电话号码是PublicIP_A。
B说:行,打完告诉你。
S说:好的。
B打电话到A家,B家接线员NET_B看到女主人想往PublicIP_A打电话就转接到A家了,同时把号码PublicIP_A记录下来,A家接线员NAT_A一看号码是个近期没打过的号,就给挂断了。
B给S打电话:
B说:我打完电话了
S说:好,等着吧,一会他就给你打进来了。
S给A打电话:
S说:他给你打完电话了,你快点给她打。
A打电话到B家, A家接线员NET_A看到男主人想往PublicIP_B打电话就转接到B家了,B家接线员NET_B看到是刚刚拨过的PublicIP_A号码打过来的,就转接给B了,A和B的电话也就打通了。
A和B通话:
A说:电话终于打通了,想认识你挺困难的。
B说:是啊。
∶
∶
以上虽然和实际不太一样,但穿透的整体过程基本就是这样。A往B发送数据的唯一阻碍就是NET_B,所以想要成功发送数据,必须把NET_B穿一个洞,A
是无法完成这项工作的,所以就得让B完成这个打洞操作,也就是让B往A发送数据,这样NET_B就会误以为A发送的数据是上次会话的一部分从而不予阻拦。
但是,由于NAT的类型没有一个统一的标准,所以NAT穿透使用的技术有很多种,穿透的成功率也不一样。还有些NAT类型的内网之间几乎无法穿透。下面我们用实例详细分析一下各种NAT类型穿透的可行性。