admin管理员组

文章数量:1565768

2024年5月21日发(作者:)

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

最近公司的ESP8266网关在项目现场出现一个很奇怪的问题,偶尔会出现设备连接

不上网络,没有数据上报到云端。由于项目是使用在一些高档豪宅上面,现场还在施工,

网络也是临时搭建的,特别不稳定,经常出现一段时间没有网络,之前跑过几次现场,排

查的问题都是没有网络,或者网速很差导致连接不上服务器,所以没有放在心上,但是由

于有好几个设备间都是出现了手机连接路由器的网络上网不错,但是网关就是连接不上网,

后台看不到数据(同事描述),负责测试的同事一直督促着说老板的玻璃心快碎了,快点

解决,没办法,又戴上安全帽,去了一趟现场,查看了下log信息,傻眼了,做网关那么

多年,第一次看到DNS解析的服务器IP都错误了,log如下:

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

dhcp

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:相差太远了,于是查看了下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

Free memory

new local port is 31543

mqtt connect to :1883

TCP: Reconnect to: :1883

MQTT: Connected to broker :1883

client->connState=14

client->connState=14

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

client->connState-----14

MQTT: Connected to :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是一款性价比不错的芯片,不过也

是有些问题,只要绕过去,还是不错的选择,好久没听到同事说老板玻璃心快碎了,快去

现场解决,我的世界又可以安静一段时间了

本文标签: 问题服务器解析连接同事