声明:原创作品,涉及的开源程序代码学习和研究,严禁用于商业目的。 如有任何问题,欢迎和我交流:408797506@qq.com(微信:408797506)
参考:
http://www.cnblogs.com/myblesh/p/6259765.html
http://www.cnblogs.com/myblesh/p/6225651.html
开篇我就计划stun的高级部分,现在终于理清楚实现的原理和CPE侧代码实现。要做一个言而有信的人。
一. 协议规范
TR069 TR111
二. 执行流程
在TR111中,CPE设备穿透NAT的策略是STUN,但是STUN是基于UDP的,而TR069中CPE和ACS之间建立的连接是TCP的,那么ACS是如何主动发起连接的呢?实际上ACS主动发起的并不是TCP连接,而是可以不需要响应的无连接的。ACS能够自动检测到位于NAT设备或者gateway后面的设备(与STUN bind成功),然后发送UDP connection Request到STUN server,通过STUN server进行转发到与STUN server关联的内部CPE设备,进而CPE发起tr069规范中定义的6 connection request事件(TCP连接成功),在tcp连接超时时间范围内可进行设备管理操作。如果超时,ACS再次主动发送UDP connection Request,然后对设备进行管理操作。
三. CPE侧实现
下面的流程图是目前CPE侧实现的stun功能,如需高清PDF版,请留言邮箱地址。或者到csdn下载:http://download.csdn.net/detail/eryunyong/9809748
四. 接入公网ACS测试
测试环境:
设备wan口地址是:192.168.0.113,
acs公网ip地址是:81.68.141.224。或者(注册acs云网址:http://39.106.195.193:9090/acscloud)
部分截图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/667c4d467a90f38feee3718cd2e1fadd.png)
五. 日志与抓包分析