STUN简介

STUN
:简介
Simple Traversal of User Datagram Protocol (UDP) Through Network
Address Translators (NATs) (STUN)
STUN ,是为了实现透明的穿透 NAT ,而定义的一套协议。他使本地的内网的机器,具有取得,能够得知他的 NAT 网关的 IP NAT 类型的能力。
为什么需要 STUN
因为 NAT 虽然解决了 IP 地址稀少的问题,但是也带来了很多的问题。比如所有 P2P 应用,像文件 SHARE ,多媒体,和在线游戏等等 .
为了解决这个问题,有人将 Application Layer Gateways (ALGs) 放到了 NAT 中,
. ALGs 也有严重的问题,比如跟不上速度太块的 CLIENT ,每一个应用都需要单独的实现。
跟不上应用的发展。
为了克服 ALGS 的问题,又提出了 the Middlebox Communications (MIDCOM) protocol
中间合协议。可是 MIDBOX 协议使,一些 CLIENT 可以控制 NAT/ 防火墙的行为,通过这个
把应用协议和 NAT 部分分开,把 ALGS 从基本 NAT 里面处理开。不过因为要处理 MIDBOX ,那么
所有的 NAT 或者防火墙都要升级,
因为上面种种原因:
The protocol described here, Simple Traversal of UDP Through NAT
(STUN), allows entities behind a NAT to first discover the presence
of a NAT and the type of NAT, and then to learn the addresses
bindings allocated by the NAT. STUN requires no changes to NATs, and
works with an arbitrary( 任意 ) number of NATs in tandem between the
application entity and the public Internet.
要想穿透 NAT ,首先知道 NAT 的一些特性:
NAT 分为 4 种:
1. 完全透明 NAT(Full Cone NAT):
从相同内部主机 (IN IPX) + 端口 (IN PORTX) 发送的数据 MAPING 为相同的 IP(OUT IP X) 和端口 (OUT PORT X) 发送带外网 .
并且从另一个服务器 (Y) ,如果直连到 MAPING IP(OUT IP X) 和端口 (OUT PORT X ) 上,数据将会被转发到内部主机上 . (IN IPX), (IN PORTX).
// 也就是说进内部网的数据包的 SPORT SPORT 不受限制
2 .受限 NAT(Restricted Cone),
从相同内部主机 IN IPX) + 端口 ((IN PORTX)) 发送的数据 MAPING 为相同的 IP X )和端口发送带外网 .
和完全 NAT 不同的是,只有当为 X 时,外部机器的的请求就被转发到主机 IN IPX) + 端口 ((IN PORTX)
也就是说进内部网的数据包的, SPORT 不受限制, SIP 受限制,只能为 NAT MAP 数据的 IP
3 ,端口受限 NAT(Port Restricted Cone:)
和受限 NAT 不同的是,只有当外部主动请求的的源 IP 和端口,等于内部网发送的请求的目的 IP 和端口。
4 .对称 NAT(Symmetric
如果发送的包的目的 IP AND PORT ,那么 MAPPING IP AND PORT ,将相同。
内部网同一台机器,同一个端口如果目的地址不同,那么 MAPPING 的端口也不同,
所以只有他主动连的服务器才可能知道他的 MAPPING 后端口,别的服务器如果想
连他只能靠猜测端口
总结:
前面 3 NAT MAPING PORT IP ,是根据发送包的的内部网的 IP 和端口决定的。
如果数据的内网 IP 和端口相同,那么 MAPPING 后的端口和地址是固定。
这个功能为我们的穿越提供了很好条件。
4 NAT ,打洞后的 MAPPING 地址和端口将变地不可靠。很难穿越。
注意 SERVERA ,和 SERVERB 是两个公网地址,而不是两台机器,
STUN 的简单操作过程:
发送请求。请求分为两种
1     Binding Requests, sent over UDP,
用来发现是否 NAT ,用来发现 NAT 的公网地址,和 MAPPING 后的端口
2.Binding Response,
服务器产生 Binding Response ,并把得到的 MAPPINGIP 和端口,返回到客户端,客户端比较 MAPPING 地址是否和本机地址相同,如果是说明是本机也是公网,否则
判断 NAT 的类型 ( 判断方法: client uses additional STUN Binding Requests)
3.Binding Error
4.Shared Secret Requests, sent over TLS [2] over TCP.
这个请求要求服务器返回一临时用户名和密码,用来下一步的 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 ,还是端口限制 NAT ,(命令服务器从不同的源端口 /IP Response 请求)
CHANGED-ADDRESS     可选用在 Binding Responses 告诉 Client 改变的端口和 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值