stun技术原理与实现(一)——背景

原创 2015年07月07日 22:25:22

目前支持我们互联网的基石,IPv4网络地址最初定义于1981年,至今也没有什么变化。当时全世界的计算机不过几百台,IPv4毫无压力,但其32位的地址结构早已不足以支撑现在庞大的互联网。

虽然出现了解决这一问题的IPv6,但是很难平滑过度,而今解决时间上数十万终端连入互联网的,是NAT技术。NAT技术在缓解ipv4不足,以及带来安全性提升的好处的同时,也带来了一些问题。下面就来对NAT的原理、好处以及带来的问题做简略的介绍。


1.1. NAT的实现原理

NATNetwork Address Translation的简写,即网络地址转换,一般在网关设备上实现,比如我们家里常用的小路由器,其实里面就实现了NAT。其作用是将网关内部的私有ip地址与网关外部的共有ip地址进行映射,修改数据包中的源IP与目的IP。这样主机的IP地址就不会暴露在外网中,而是隐藏在网关的后面,网关就帮助内部主机阻挡住了大多数的网络攻击。

NAT的实现方式有三种:

1. 静态转换:将内部的一个私有IP固定的映射为外部的一个公有IP。这要求公网IP的数量足够映射内网的主机数量,同时要求网关设备上要配置静态NA映射,所以这种应用一般用在服务器端,用于网络隔离。

2. 动态转换:将内部的私有IP随机转换为一个外部公有IP,同时上网设备的数量仍然不能大于已有的公有IP数量。

端口多路复用(Port Address Translation, PAT):也叫网络端口地址转换(Network Address Port Translation),这是我们目前应用最多的一种NAT实现方式,家中的小路由器用的就是这种,这种实现方式可以将内部不同的私有IP转换为同一公有IP,从而实现了大家用一个公有IP共同上网,节约IP的作用。那么NAT设备怎么区分内部不同私有IP与外部连接的对应能,使用的是端口号。具体的映射过程见图1

1 NAT转换过程

图中,内部有两台PC,内部私有ip分别为Ai1Ai2,但是他们经过NAT设备访问外网的公有ip只有一个Ao2,于是NAT设备做了一个上面第三种实现所说的端口多路复用,过程如下:

nat内部终端经nat设备发送出去的数据包被nat设备替换了数据包的源ip和源端口号,在图1中,PC1发出的一个数据包源ip和源端口号Ai1 Pi1被替换为外网的一对源ip和源端口号Ao1 Po1,于是因特网上其他设备收到的PC1上发来的数据包就隐藏了PC1的身份,转而变成NAT设备发来的了。当网上的设备回复数据包给PC1时,其目的ip和目的端口号就成了Ao1Po1,于是NAT设备接到了这个数据包。NAT设备给句内部存储的映射关心,将该数据包的目的ip和目的端口号替换为Ai1Pi1,于是PC1收到了来自外网的数据包。同样的,来之内部另外一台终端PC2的数据包也会被映射为外网的ip和端口号Ao1Po2,公有ip相同,但是公有端口号不同,于是实现了内部不同私有ip通过同一公有ip访问外网。

在这一映射的过程中,一切内幕都掌握在NAT设备的手中,它在向外转发的过程中偷偷替换了源ip和端口号,在向内转发的过程中又根据记录下来的映射关系将目的ip和目的端口号替换回去。内网终端不知道这个过程,以为自己是直接与外网的服务器进行通信;外网的服务器也不知道有内部终端的存在,以为与自己通信的就是那台NAT设备。这时一个问题出现了,如果外网想要主动连接内网的设备怎么办。

这种应用时存在的,比如一台服务器要集中管理NAT下面的设备,比如现在流行的终端对终端的多媒体实时聊天,比如各种p2p应用,都需要跨越NAT访问内网。本文介绍其中比较古老的一种——STUNSimple Traversal of UDP Through NATsNatUDP简单穿越)。

1.2. NAT的四种类型

要想穿透NAT,还要了解NAT(后面我们提到NAT,专指端口多路复用这种实现方式)的几种类型。

NAT根据NAT处理UDP数据包的行为细分为四种类型分别是:完全圆锥形(Full Cone),受限圆锥形(Restricted Cone),端口受限圆锥形(Port Restricted Cone)和对称形(Symmetric)。他们的特性如下:

1. 完全圆锥形:

来自内部同一IP地址和端口号的所有请求都会映射为相同的外部IP地址和端口号,所有的外部主机都可以通过这个映射后的IP地址和端口号向内部主机发送数据包。

2. 受限圆锥形:

来自内部同一IP地址和端口号的所有请求都会映射为相同的外部IP地址和端口号,不同于完全圆锥形,一个外部主机(假设其IP地址为X),只有当内部主机已经向IP地址X发送过数据包了,该外部主机才能向内部主机发送数据包。

3. 端口受限圆锥形:

跟受限圆锥形相似,但是端口受限圆锥形还限制了外部主机的端口,即只有当内部主机向外部某一IP和端口发送过数据包后,该IP和端口才能向内部主机发送数据包。

4. 对称形:

从同一内部IP地址和端口发往一个特定目的的IP地址和端口号的请求映射为同一外部IP地址和端口。如果同一主机用同一地址和端口向不同的目的地址发送数据包,将使用一个不同的映射,而且,只有当外部主机收到一个来自内部的包时,才能向该内部主机发送数据包。

stun最早定义在2003年发布的RFC3489中,之后该协议被2008年发布的RFC5389所取代。但是鉴于仍有老的stun的应用场景,我们这里介绍老版stun,并把它称为classic stunclassic stun并不能完全满足上面四种,其中对称形NAT就无法使用classic stun进行穿透,所以,判断NAT类型是进行classic stun NAT穿透的重要部分。



版权声明:本文为博主原创文章,未经博主允许不得转载。

NAT穿越原理——STUN

STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在ANT穿透中占有一席之地。 STUN的探测过程需...
  • rudyn
  • rudyn
  • 2014年05月07日 17:23
  • 4064

p2p打洞stun的原理

我觉得以下这篇文章写得挺易懂的,但是好像不够全面吧。 原文:STUN在SIP中的工作原理及过程   STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口...

STUN和TURN技术浅析

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要...
  • yu_xiang
  • yu_xiang
  • 2013年07月02日 17:48
  • 34985

P2P通信标准协议(一)之STUN

前一段时间在P2P通信原理与实现中介绍了P2P打洞的基本原理和方法,我们可以根据其原理为自己的网络程序设计一套通信规则, 当然如果这套程序只有自己在使用是没什么问题的。可是在现实生活中,我们的程序往...

spring aop 实现原理简述——背景知识

简介搁我以前的理解,spring aop就是对现有方法的增强。其实,“增强”是不准确的,是完全替换了原有方法的执行,只不过替换后的方法包含了原有方法的逻辑。换句话说,如果替换后的方法没有包含原有方法的...

STUN和TURN技术浅析

转载自:http://blog.csdn.net/yu_xiang/article/details/9227023 目录(?)[+] 在现实Internet网络环境中,...

NAT穿透之STUN和TURN技术浅析

出自:http://blog.csdn.net/zqf_office/article/details/25338567 在现实Internet网络环境中,大多数计算机主机都位于防火墙...

STUN和TURN技术浅析

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stun技术原理与实现(一)——背景
举报原因:
原因补充:

(最多只允许输入30个字)