简介
stun,英文名为(Session Traversal Utilities for NAT),中文名为NAT会话穿越应用程序,是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于 NAT路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。目前RFC 3489协议已被RFC 5389协议所取代,新的协议中,将STUN定义为一个协助穿越NAT的工具,并不独立提供穿越的解决方案。
原理
一旦客户端得知了Internet端的UDP端口,通信就可以开始了。如果NAT是完全圆锥型的,那么双方中的任何一方都可以发起通信。如果NAT是受限圆锥型或端口受限圆锥型,双方必须一起开始传输。
需要注意的是,要使用STUN RFC中描述的技术并不一定需要使用STUN协议——还可以另外设计一个协议并把相同的功能集成到运行该协议的服务器上。
SIP之类的协议是使用UDP分组在Internet上传输音频和/或视频数据的。不幸的是,由于通信的两个末端往往位于NAT之后,因此用传统的方法是无法创建连接的。这也就是STUN发挥作用的地方。
STUN是一个客户机-服务器协议。一个VoIP电话或软件包可能会包括一个STUN客户端。这个客户端会向STUN服务器发送请求,之后,服务器就会向STUN客户端报告NAT路由器的公网IP地址以及NAT为允许传入流量传回内网而开通的端口。
以上的响应同时还使得STUN客户端能够确定正在使用的NAT类型——因为不同的NAT类型处理传入的UDP分组的方式是不同的。四种主要类型中有三种是可以使用的:完全圆锥型NAT、受限圆锥型NAT和端口受限圆锥型NAT——但大型公司网络中经常采用的对称型NAT(又称为双向NAT)则不能使用。
组成
STUN 的简单操作过程:
发送请求。请求分为两种
1.Binding Requests, sent over UDP,
用来发现NAT的公网地址,和MAPPING后的port
2. Binding Response,
server产生Binding Response。并把得到的MAPPINGIP 和port。返回到client, client比較MAPPING地址是否和本机地址同样。假设是说明是本机也是公网,否则推断NAT的类型(推断方法:client uses additional STUN Binding Requests)
3.Binding Error。
4.Shared Secret Requests, sent over TLS [2] over TCP.
这个请求要求server返回一暂时username和password。用来下一步的Binding Requests/ Response,用来验证信息的完整性
5.Shared Secret Response,
6 Shared Secret Error Response。
STUN 信息结构
STUN 由以后数据结构构成:STUN头+STUN有效载荷
STUN头结构例如以下: 存储的值都是以网络顺序存放
字段 类型
STUN message type Short int 消息类型
Length Short int 有效载荷长度,不包括头长度
transaction ID octet[16] 连接的ID值,检查Request,和Response
STUN的有效载荷
SHUN的有效载荷是一些STUN的属性构成,属性的类型由信息的类型来决定。
STUN的属性是定义好了的,属性列表(attribute)例如以下:
MAPPED-ADDRESS 必选 用在Binding Response,(添入MAPING IP 和PORT)
RESPONSEADDRESS 可选 用在Binding Request,指定Response,发送到哪里
假设没有指定。Response发送到MAPING IP 和 PORT
CHANGE-REQUEST 可选 用在Binding Request。用来决定。CLIENT的NAT类型是
制NAT,还是port限制NAT,(命令server从不同的源port/IP,Response请求)
CHANGED-ADDRESS 可选 用在Binding Responses告诉Client改变的port和IP
SOURCE-ADDRESS 必选 仅仅用在Binding Responses。标记信息的源PORT HE IP
USERNAME 可选 Shared Secret Response/ Binding Requests
PASSWORD, 必选 SharedSecret Response
ESSAGEINTEGRITY 可选 用在Binding Responses, Binding Request记录信息的完整性
ERROR-CODE Binding Error Response and Shared Secret Error Response.
UNKNOWN-ATTRIBUTES
REFLECTED-FROM Binding Responses.可追溯性和预防DDOS