微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 关于ESP8266 DNS域名解析异常问题及其解决办法

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

时间:10-02 整理:3721RD 点击:

关于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 ip 10.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 ip 10.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 ip 123.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是一款性价比不错的芯片,不过也是有些问题,只要绕过去,还是不错的选择,好久没听到同事说老板玻璃心快碎了,快去现场解决,我的世界又可以安静一段时间了。


干货 嘿嘿

转换一下解决问题的切入点,曲线救国

我发现要仔细看你写的帖子。。。。。。

为什么要仔细看我的帖子呢?有些问题,和环境关系很大,有些人可能做技术几十年都未必会看到这种奇葩现象

这个网关我维护了好几年了,可以说常见的问题和一些奇葩的问题,我都遇到过,之前我公司外包找了两家专门做WIFI的公司也没做稳定,还是在网络一般的情况下,如果是换作我现在那种弱网环境,怎么死的都不知道,我现在做的网关,目前只有一种情况可能会出现没数据上报,那就是没网,其他外部干扰,我都已经做了各种case方案解决了。

我发现你写的帖子 只有坐下来仔细琢磨,才知道你写的东西

很多问题不都是这样玩嘛?

因为我从来不写入门帖子,就是随性遇到了问题就记录下来,所以只有这个行业内,做过或者遇到的还会明白,才会产生共鸣,我发现我好多帖子都13年前都有翻出来看,产生共鸣,可惜此时我自己已经无法产生共鸣了,已经改行了。

好的,别的不多说,向您看齐了大哥

和机智云合作的ESP8266WiFi模块是吗?

什么意思?

ESP8266是不是那个机智云平台的乐鑫wifi模块

是乐鑫的芯片,不过是安信可的模块

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top