STUN 原理理解「建议收藏」

STUN 原理理解「建议收藏」STUN原理理解STUN简介SimpleTraversalofUDPoverNATs,NAT的UDP的简单穿越,是一种网络协议。是客户机-服务器的一种协议,由RFC3489定义。该协议定义了一些消息格式,大体上分为Request/Response。这个协议主要作用就是可以用来在两个处于NAT路由器之后的主机之间建立UDP通信。它允许位于NAT后的客户端找出自己的公网地址,确定自己…

大家好,又见面了,我是你们的朋友全栈君。

STUN 原理理解

STUN简介

Simple Traversal of UDP over NATs, NAT的UDP的简单穿越,是一种网络协议。是客户机-服务器的一种协议,由RFC 3489 定义。该协议定义了一些消息格式,大体上分为Request/Response。这个协议主要作用就是可以用来在两个处于NAT路由器之后的主机之间建立UDP通信。它允许位于NAT后的客户端找出自己的公网地址,确定自己位于的NAT是哪种类型,以及NAT为这个客户端的本地端口所绑定的对外端口。

      譬如,一个软件包可能会包括一个STUN客户端A,这个客户端A会向STUN服务器发送请求,之后,服务器就会向STUN客户端A发送NAT路由器的公网IP地址以及NAT为这个客户端A开通的端口号,这个端口号是允许从别的客户端B传入流量传回到这个客户端A的。

为什么需要STUN?

      一般情况下,通信的两个客户端主机往往是位于NAT之后的,用传统的方法时无法建立连接的。

STUN主要功能

      STUN主要有3个功能,分别是检测是否位于NAT后面,检测NAT的类型,获取经过NAT转换后的地址和端口。

在内网安装一个STUN Client,在公网上安装一个STUN Server。client 向server 发送request,server 发送response给client。

(1)检测是否位于NAT后面

       Server 在收到client 发送的UDP包以后,Server 将接收该包的地址和端口利用UDP再传回给client,client把Server发送过来的地址和端口信息与本机的ip地址和端口进行比较,如果不同,说明在NAT后面;如果相同就说明client位于NAT前面,client也是公网。

(2)检测NAT的类型

       这个主要发送响应的时候使用不同IP地址和端口或者改变端口等等。这个检测是对NAT一般情况下有效,但是对防火墙就无能为力了,因为防火墙可能不会打开UDP端口。

       NAT 主要分为4种类型,即Full Cone、Restricted Cone、Port Restricted Cone和Symmetric。其中Full Cone、Restricted Cone、Port Restricted Cone可以统称为Cone NAT,它们有一个共同点就是,只要是从同一个内网的地址和端口出来的包,NAT转换后的公网地址和端口一定是相同的。Symmetric 是如果是同一个内网的地址和端口出来的包,到同一个外部目标地址和端口,那么NAT转换后的公网地址和端口号也是相同的,但是如果如果到不同的外部目标地址和端口,NAT会转换成不同的端口号(公网地址是不变的,因为只有一个)

1.Full Cone NAT

       从内网主机 in ipx和端口in portx发送的数据会映射为相同的公网ip x 和端口 port x。从其他机器上如果通过UDP发送数据到公网ip x和端口 port x上,最终数据都会被转发到内网主机上(in ipx :in portx)。 发送给内网的ip 和 port 都不受限。

2.Restricted Cone

       从内网主机 in ipx和端口in portx发送的数据会映射为相同的公网ip x 和端口 port x。外部机器主动请求通信的源IP地址必须和内部主机主动向这个外部机器发送请求时的外部机器接收ip地址一致。即ip地址受限,端口不限。内网能接收信息的外部机器必须是内网主动发送请求过的外部机器。

3.Port Restricted Cone

      从内网主机 in ipx和端口in portx发送的数据会映射为相同的公网ip x 和端口 port x。外部机器主动请求通信的源IP地址、端口必须和内部主机主动向这个外部机器发送请求时外部机器接收的ip地址、端口一致。即ip地址受限,端口都受限。内网能接收信息的外部机器必须是内网主动发送请求过的外部机器(ip相同),同时外网给内网发送数据包的端口还必须是接收内网数据包时所采用的端口号(端口相同)。

4.对称NAT

       发送包的目的ip和port 相同,那么NAT 映射的ip和port会相同。如果目的地址不同,即使同一台内网机器、同一个端口,mapping的端口也不同,但是ip还是相同(因为同一个公网ip)。所以只有它主动连的服务器才会知道它的端口。

例子:

A机器在内网(192.168.0.4)

NAT服务器    (210.21.12.140)

B机器在公网(210.15.27.166)

C机器在公网(210.15.27.140)

如果 A 连接过机器B,假设是如下:A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8000)-> B(210.15.27.166:2000)。A和C从来没有通讯过。

不同类型的NAT,分析:

1.Full Cone NAT

C 将数据发送到 210.21.12.140:8000,NAT 会将数据包送到A(192.168.0.4:5000)。因为NAT上已经有192.168.0.4:5000到210.21.12.140:8000的映射。也就是说只要机器A与任何公网上机器通讯过,其它任何公网上机器都能发送数据给A,通过发送数据包给NAT上转换后的ip和端口之后,NAT会自动将数据包送到机器A。NAT 对发送给A的数据包来者不拒,不过滤。

2.Restricted Cone

C无法和A进行通信,因为A从来没有和C通信过,NAT会拒绝C试图与A连接的动作,但是B可以通过发送数据到210.21.12.140:8000和A的192.168.0.4:5000通信,这里机器B自己可以使用任何端口和A通信,譬如210.15.27.166:2001 -> 210.21.12.140:8000,NAT会将数据送到A的5000端口上。注意这里B使用的端口是2001 不是初始A连接B时,B接收A数据使用的端口2000。即只能是通信过的机器才能够进行通信,但是再通信时端口不需要固定。

3.Port Restricted Cone

C无法和A进行通信,因为A从来没有和C通信过,NAT会拒绝C试图与A连接的动作,而且机器B只能用它的210.15.27.166:2000与A的192.168.0.4:5000通信。即只有曾经收到内网地址A发送过数据包的公网机器,才能通过NAT映射后的地址向内网机制发送UDP包。

4.Symmetric NAT

如果A机器还想连接C机器,则NAT上产生一个新的映射,对应的转换可能为A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8001)-> C(210.15.27.140:2000)。

B与A通信:B(210.15.27.166:2000)-> NAT(转换后210.21.12.140:8000)-> C(192.168.0.4:5000)。

C与A通信:B(210.15.27.140:2000)-> NAT(转换后210.21.12.140:8001)-> C(192.168.0.4:5000)。

stun 的NAT 类型探测流程

STUN 原理理解「建议收藏」

参考资料

stun 

https://baike.baidu.com/item/stun/3131387?fr=aladdin

STUN

https://en.wikipedia.org/wiki/STUN

https://upload.wikimedia.org/wikipedia/commons/6/63/STUN_Algorithm3.svg

STUN解决的过程

https://blog.csdn.net/carry1314lele/article/details/2420494

STUN简介

https://www.cnblogs.com/idignew/p/7357731.html

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

https://www.cnblogs.com/pannengzhi/p/5041546.html

STUN服务器

https://baike.baidu.com/item/STUN服务器/2173892

STUN详解

https://segmentfault.com/a/1190000008056434

XMAPP

https://baike.baidu.com/item/XMPP/3430617

xmpp协议详解一:xmpp基本概念

https://www.jianshu.com/p/a94749385755

HTTP协议和XMPP协议

https://blog.csdn.net/southernriver/article/details/52038607

xmpp学习

https://blog.csdn.net/CHIHUN_LOVE/article/details/51860406

XMPP

https://blog.csdn.net/wwh19940131/article/details/51188693

XMPP协议的原理介绍

https://blog.csdn.net/wbw1985/article/details/5502272


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160548.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LAMP配置详解

    LAMP配置详解LAMP就是linux+apache+mysql+php用来web开发的经济实惠的东东,完全开源,很值得期待!,配置这个东西花了我多半天的时间,非常郁闷,总结一下,,时间就是浪费在对垃圾信息的尝试下,搜索引擎提供给我们海量的东西,因此就需要我们去筛选信息,得到,,,,适合自己的,准确的信息,从而去解决问题。。。有些不负责任的网站为了增加流量很多信息纯copy的,,,,而在这个过程中有多少信息丢失歪曲,,,,真是让我恨之入骨啊,,,最后得出一条经验:去专业网站上搜索(省时又准确),或者在百度上打

    2022年6月3日
    49
  • Xcode卸载7.3后重装7.2新建playground报错:Unable to find execution service for selected run destination….

    Xcode卸载7.3后重装7.2新建playground报错:Unable to find execution service for selected run destination….

    2021年9月13日
    45
  • IDEA 将项目打包war包[通俗易懂]

    IDEA 将项目打包war包[通俗易懂]IntelliJIDEA将项目打包war包1、准备工作IntelliJIDEA开发工具可以正常运行的Java项目2、打包war包流程使用快捷键Ctrl+Alt+Shift+s或者鼠标点击选中项目名按F4打开ProjectStructure界面选择Artifacts,点击右边+,依次选择WebApplication:Archive和For’myP…

    2025年5月28日
    5
  • 安装phpMyAdmin图文教程-学习(转载)

    安装phpMyAdmin图文教程-学习(转载)phpmyadmin的安装配置已经是老生常谈的话题了,网络上到处都可以找到相关的配置教程。但是,那些大多都是手动配置的,稍不留神,容易出错。因此站长今天在这里介绍的是,被很多phpmyadmin用户所忽略的phpmyadmin自带的安装程序,下面我们就开始一步一步来安装phpmyadmin。1、…

    2022年5月6日
    118
  • python和pycharm以及anaconda的安装顺序_简述信息消息信号三者的区别与联系

    python和pycharm以及anaconda的安装顺序_简述信息消息信号三者的区别与联系1、致欢迎词我将详细讲述在学Python初期的各种手忙脚乱的问题的解决,通过这些步骤的操作,让你的注意力集中在Python的语法上以及后面利用Python所解决的项目问题上。而我自己作为小白,很不幸的没有错过任何的坑,都跳了进去,所以在这里写下经验贴,一方面希望能给后来的学者能够高效的避开这些坑,另一方面也算是自己的总结与警告。2、内容大纲2.1安装顺序能够使用Python的安装…

    2022年8月26日
    5
  • solidworks常用快捷键命令大全_solidworks怎么设置快捷键

    solidworks常用快捷键命令大全_solidworks怎么设置快捷键为了更好的节约大家的设计时间,小编花了一番功夫为大家整理出了一份SolidWorks的快捷键大全,希望可以帮助到大家。

    2022年9月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号