关于ESP8266 DNS域名解析异常问题及其解决办法

来源:本站
导读:目前正在解读《关于ESP8266 DNS域名解析异常问题及其解决办法》的相关信息,《关于ESP8266 DNS域名解析异常问题及其解决办法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《关于ESP8266 DNS域名解析异常问题及其解决办法》的详细说明。

最近公司的ESP8266网关在项目现场出现一个很奇怪的问题,偶尔会出现设备连接不上网络,没有数据上报到云端。由于项目是使用在一些高档豪宅上面,现场还在施工,网络也是临时搭建的,特别不稳定,经常出现一段时间没有网络,之前跑过几次现场,排查的问题都是没有网络,或者网速很差导致连接不上服务器,所以没有放在心上,但是由于有好几个设备间都是出现了手机连接路由器的网络上网不错,但是网关就是连接不上网,后台看不到数据(同事描述),负责测试的同事一直督促着说老板的玻璃心快碎了,快点解决,没办法,又戴上安全帽,去了一趟现场,查看了下log信息,傻眼了,做网关那么多年,第一次看到DNS解析的服务器IP都错误了,log如下:

connected with 303303, channel 6(有所修改,删除了些没用的log)

dhcp client start...

ip:192.168.1.103,mask:255.255.255.0,gw:192.168.1.1

portlen=4dns m2m ip=10.0.0.1new local port is 34182

mqtt connect to ip10.0.0.1:1883

client->connState=10

TCP: Reconnect to 10.0.0.1:1883

TCP_RECONNECT_REQ errType=-9

看到这个log,我都傻眼了,DNS解析出来的服务器IP怎么是那个样子呢,和我们的服务器IP:123.56.xxx.xxx相差太远了,于是查看了下DNS那部分代码,我设置了一个2s定时器,如果解析不能OK,也就是没有返回值的话,那么就一直运行,这个导致造成了DNS域名攻击,有些DNS服务器返回错误的IP给网关,把这个问题反馈给了乐鑫,可惜官方也没遇到过,要我提交测试场景,晕,我自己都没遇到过,也就是那种奇葩的环境第一次遇到过,这个问题就卡在这里了,可以说和官方沟通也没结果,后来我自己想了一种折中的办法,有效的解决了。

因为网络也不是一直出现这种问题,绝大部分时间是没什么问题的,这个通过我们后台监控的数据绘制的曲线连贯性可以看出来。

对于DNS域名解析返回错误IP的解决办法:

模块第一次使用,DNS解析OK,连接服务器OK,那么服务器IP保存到FLASH,第二次出现DNS解析时,如果DNS解析OK,连接服务器FAIL,那么我接下来就拿保存到FLASH的IP连接服务器;

如果出现了DNS解析OK,连接服务器IP OK,如果是DNS解析的IP和保存的IP不同,那么我就更新FLASH里面的IP成最新的(说明服务器IP更换了)。

这个方法这段时间在施工现场测试后,目前没发现之前的问题,我自己用软件模拟也可以很好的解决DNS解析服务器IP错误的问题。

以下是测试后的log(已经修改过得):

mqtt connect to ip10.0.0.1:1883

client->connState=10

TCP: Reconnect to 10.0.0.1:1883

TCP_RECONNECT_REQ errType=-9

strore ip 123,56,xxx,xxx

client ip 10.0.0.1

client ip update 123.56.xxx.xxx

Free memory

new local port is 31543

mqtt connect to ip123.56.xxx.xxx:1883

TCP: Reconnect to: 123.56.xxx.xxx:1883

MQTT: Connected to broker 123.56.xxx.xxx:1883

client->connState=14

client->connState=14

receive data----4----------

client->connState-----14

MQTT: Connected to 123.56.xxx.xxx:1883

MQTT: queue subscribe, topic"xxx/xxxx", id: 1

pubserver_connect_ok

MQTT: queue subscribe, topic"xxx/xxxx", id: 2

server_save_ip 123,56,xxx,xxxx

MQTT: Sending, type: 8, id: 0001

receive data----5----------

client->connState-----17

MQTT: Subscribe successful,1

MQTT: Sending, type: 8, id: 0002

receive data----5----------

client->connState-----17

MQTT: Subscribe successful,2

总结:解决一个问题,不一定要从源头解决,如果从DNS解析错误那块死扣,我觉得很难有所突破,但是我上面那种方法就可以很好的解决掉上面那个问题,换个思考方式,说不定山重水复疑无路,柳暗花明又一村!ESP8266是一款性价比不错的芯片,不过也是有些问题,只要绕过去,还是不错的选择,好久没听到同事说老板玻璃心快碎了,快去现场解决,我的世界又可以安静一段时间了

提醒:《关于ESP8266 DNS域名解析异常问题及其解决办法》最后刷新时间 2024-03-14 00:53:51,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《关于ESP8266 DNS域名解析异常问题及其解决办法》该内容的真实性请自行鉴别。