热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nat内网穿透相关研究

首先测试端口库复用技术。就是一个socket同时进行listen和connect是否可行。答案是可以的。而且此socket还需要bind同一个本机ipport,同时
首先测试端口库复用技术。

就是一个socket 同时进行listen和  connect 是否可行。答案是可以的。而且此socket还需要bind同一个本机ip  port,同时,需要进行设置:
    setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (void *) &value, sizeof (value));

 

测试tcp穿透。

遇到的问题:公网服务器读到我的内网客户端发来的请求时,发现映射地址值改变了ip。即nat没有映射我的port,只映射了ip。。并且打洞失败,两个内网客户端无法连接。

 

测试UDP穿透。

测试UDP穿透有两个原因 一个是简单 一个是技术应该已经比较成熟了。但是不幸的是 我还是失败了,两个内网客户端互相发送公网请求,无法收到对方的数据。

 

于是我开始研究为什么会失败,首先怀疑是硬件不支持。

nat类型检测

网上下了检测工具,检测 是对称型nat,而且还提示UDP BLOCK。所以就失败了,原因是我这种方式无法穿透对称型nat。手动检测,客户端不断连接公网服务器,结果端口是递增+2的,证实了是对称型。

我查资料,网上说对称型nat很少,大部分都是锥型的nat,但是万万没想到,我这里就是个特殊的,比较麻烦。

 

于是我寻找别的方法。

STUN

1、接受客户端的请求,并且把客户端的公网IP、Port封装到ICE Candidate中。

2、通过一个复杂的机制,得到客户端的NAT类型。

这就是STUN做的事情,和我手动写的程序是一样的。同样,STUN只支持UDP,但是最新的资料显示好像也是支持TCP了,但是同理的,STUN是无法穿透对称型nat的(或者说可能性较低、比较麻烦)()

TURN

TURN Server也主做了两件事:

1为NAT打洞:

如果A和B要互相通信,那么TURN Server,会命令A和B互相发一条信息,这样各自的NAT就留下了对方的洞,下次他们就可以之间进行通信了。

2为对称NAT提供消息转发:

当A或者B其中一方是对称NAT时,那么给这一方发信息,就只能通过TURN Server来转发了。

 

最后补充一下,为什么对称NAT无法打洞:

假如A、B进行通信,而B处于对称NAT之下,那么A与B通信,STUN拿到A,B的公网地址和端口号都为10000,然后去协调TURN打洞,那么TURN去命令A发信息给B,则A就在NAT打了个B的洞,但是这个B的洞是端口号为10000的洞,但是下次B如果给A发信息,因为B是对称NAT,它给每个新的IP发送信息时,都重新对应一个公网端口,所以给A发送请求可能是公网10001端口,但是A只有B的10000端口被打洞过,所以B的请求就被丢弃了。
显然Server是无法协调客户端打洞的,因为协调客户端打得洞仅仅是上次对端为Server发送端口的洞,并不适用于另一个请求。

最后的最后再补充一点,就是NAT打的洞也是具有时效性的,如果NAT超时了,那么还是需要重新打洞的。

 

资料显示 还有一种方式,叫做ICE

ICE

ICE还在研究中。初步的了解来看,就是整合了上面两种方式,自动判断用哪一种(STUN或者TURN),不需要判断NAT类型,并将中转方式的优先级置为最低。

https://wenku.baidu.com/view/298aff020740be1e650e9a89.html

https://www.cnblogs.com/rayfloyd/p/7206815.html

https://blog.csdn.net/u010810750/article/details/55048385

https://blog.csdn.net/voipmaker/article/details/8453702

https://wenku.baidu.com/view/6cdda27e5acfa1c7aa00cc90.html?sxts=1562919825198

 

 

总结

无论是那种穿透方式,都是需要一个公网服务器的。即让客户端可以直接连接的服务器,只不过通过TCP/UDP直连穿透的(STUN)方式,对服务器压力小,只需要转发映射的公网ip port即可,但是不能穿透对称型NAT,通过中继中转方式(TURN)方式的,需要进行转发操作,对服务器压力大,但是可以穿透对称型NAT。总之,到目前为止,穿透对称型NAT是一个难点,我觉得QQ这类的可能也是转发,毕竟大部分的路由器都是锥型,只有公司之类的安全严格型对称型比较少吧。

此外,穿透对称型NAT还有一种基于端口预测的方法,

https://blog.csdn.net/bd_zengxinxin/article/details/80991689

这种方法从安全的角度来说是利用了目前路由器实现对称NAT的方法中存在端口可以预测的漏洞,利用这个漏洞来实现打洞。加上一次发送大量的包,来增加命中的概率。

但是也有不成功的可能性。

资料截图:

 

相关:

VOIP/SIP


1、VOIP:是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信。VoIP可用于包括VoIP电话、智能手机、个人计算机在内的诸多互联网接入设备,通过蜂窝网络、Wi-Fi进行通话及发送短信。

2、SIP:是一个应用层的信令控制协议。用于和一个或多个参与者创建、修改和终止会话。SIP的结构与HTTP(客户-服务器协议)相似。客户机发出请求,并发送给服务器,服务器处理这些请求后给客户机发送一个响应,该请求与响应形成一次事务。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。 [1] 会。


推荐阅读
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • UDP千兆以太网FPGA_verilog实现(四、代码前期准备UDP和IP协议构建)
    UDP:userDatagramprotocol用户数据报协议无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC76 ... [详细]
author-avatar
我跟孔子一个姓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有