又见到传说中的抓包机:简单记录帮某厂865旗舰手机解BUG的全过程
前言
笔者在电子制造行业内有多年的从业经验,有不少可以分享的内容。关于手机或是电脑等产品,之前也在站内也发表过几十篇相关的文章。在文章里笔者经常提到的一个观点是:由于产品的开发周期限制与竞争对手的压力,目前上市的手机、电脑、主板等消费类电子产品,大规模量产和上市并不意味着产品不存在bug,只是bug的数量在可接受的范围内而已。在上市后的半年时间内,厂家还会持续不断地修正产品的问题,直至产品退市。这条定律对于行业头部的厂商来说同样适用。
比如联想在PC行业的出货量可以说是老大了,同样也会出现驱动的问题。当然,头部厂商的优势体现在对于bug的迅速修复。比如笔者当时在群里看到联想电脑的休眠问题后,马上将这个问题反馈给了联想的产品经理。联想也非常重视这个问题,第一时间就安排了售后部门跟进解决:
笔者这次要在文章里分享的,就是某个头部手机厂商解BUG的案例。包含了从发现问题,到寻求原因,再到完全修正的完整的过程。厂家在整个过程中,解决问题的效率还是很高的,也可以看出头部的手机厂商对于用户体验非常重视,行业的竞争也相当激烈。
文章将按照时间线,分几个方面来来展现整个过程。
发现问题
其实手机一上手,先发现的是在隐藏SSID网络并且开启MAC白名单过滤的情况下,因为系统引入了Android 8开始采用的随机MAC扫描和Android 9开始引入的随机MAC连接机制,而白名单又是固定的,所以手机很难连入Wi-Fi网络。需要先关闭路由器的过滤功能,连接成功一次MAC才会固定下来。这其实是一个很好的安全机制,可以防止出现去年315晚会中提到的那种公共AP通过MAC地址搜索到个人信息,进而侵犯个人隐私的情况出现。只是使用的体验上需要少许的优化,这个问题后来也和厂家的工程师说了,后续说是会有改进。其实这个问题别家也存在,绿厂也有同样的问题,小米处理得相对较好一些。
后来在使用中才发现微博发消息特别慢的情况,接着又试了微博搜索和观看bilibili直播,也有卡顿断流的现象。下图是微博搜索功能的对比,采用1.5倍速播放,差别还是很明显的。
上图中还是比较好的情况,经常发生的是搜索着就直接断流了,不再弹出搜索的结果。比如下图这样的情况,两倍速的动图,微博搜索后直接不返回结果:
观看B站直播的体验同样不太好,每隔一两分钟就会卡住,需要手动重新连接。
搜索与复现
发现问题后,首先笔者在网上搜索了一下相关情况。发现贴吧上有不少用户也遇到了类似的问题:
看来不是个案。笔者接着又换了两台路由器和网络,尝试复现问题。发现笔者使用的小米路由器和电信自带的一款路由器会发生这种情况,而一款TP-LINK的低端路由器环境下反而是正常的。这说明这个问题不是100%出现的,与路由器的适配也有一定的关联。
接下来的问题就是如何解决了。百度贴吧上的用户帖子后,厂家的客服很快就跟进了,只是抓log的步骤有些复杂,用户到这一步就不再往下操作了。
提交日志
笔者是通过微博联络了厂家的客服,然后厂家客服发来的步骤基本是一样的,除了抓log和录屏,还要提供一些配置参数:
于是第一时间提交了log和录屏,log大约是300MB,录屏文件大约1GB,通过邮箱发送给了客服。与此同时,厂家的工程师也尝试在他们自己的实验室里复现这个问题,然而由于网络环境的复杂性,并未能复现成功。
抓包
发送的log和录屏只能确认问题的确是存在的,进行简单的分析,然而并不能找出背后的原因。要找到root cause,还是需要通过抓取通信的包来分析。对于抓包笔者并不陌生,之前研究Wi-Fi安全时就接触过。厂家的工作人员也非常重视,由研发工程师团队第一时间组成了一个微信群,协助解决问题。工程师提出需要抓包,我这边则提出了我的一些疑虑。抓包的话会把cookie等一并抓走,所以为了安全考量,最好所有应用都处于未登录的状态:
其实我家里的电脑连接无线网卡就能作为一个嗅探器了,不过厂家的工程师还是提出要给我寄一个抓包机。据厂家工程师说,他们遇到这种情况会直接派工程师到用户家里抓包,现在由于众所周知的原因,工程师不便上门,所以就直接把抓包机发给我了,抓完包后再还给他们就行。
其实厂家所说的抓包机,就是一个能够嗅探的手机。与普通手机的差别,就在于网卡的驱动支持注入。笔者之前用过的N900就带有这种驱动,可以改造为一台抓包机。而这次收到的抓包机,其实就是一台SDM710版本的NEX一代:
不同之处在于手机的系统是特别的嗅探器(Sniffer)版,显然就是带有特殊网卡驱动的系统:
输入代码进入工程模式后,可以看到WiFi-Sniffer选项,而普通版的系统是不带这个选项的:
用抓包机的好处是可以很方便地选择信道和带宽进行抓包,可以看到笔者为了测试也是抓了不少包:
花了周末两天时间,总计大约抓了近1GB的pcap包,和2GB左右的录屏文件。
发现问题
前面提到,单靠log文件只能初步定位问题,但不能找到root cause。而分析网络空口包,更有助于发现问题所在。抓包时使用的主要测试的形式是播放bilibili直播,因为观看直播时是大段的数据流,一旦发生卡顿很容易发现中间的断点。
对于抓取到的pcap包,笔者也用wireshark进行了简单的判读。可以发现紫色的部分,当中停了整整4秒,没有收到服务器的包,正是中间这几秒没包才导致出现了卡顿的现象。而黄色的箭头部分,是问题的关键:网卡仅用了54毫秒就进入了休眠,这个时间有点太短了。
与厂家的工程师沟通后得知,高通在SM8250平台想把WiFi做得更为省电,对比其他手机更快进入休眠。因而才导致了这个问题。后续厂家应该是修正了一个类似qcom_rx_wakelock这样的休眠锁的参数,使得网卡在接收到数据包以后一段时间内不进入休眠。也就是说,将手机网卡进入休眠的速度,调整到和之前的其他高通处理器手机一样的速度。高通原本是想牺牲性能来换取低功耗,但是显然已经影响到了部分用户的体验。因而厂家这次也只能提高功耗,来换回性能了。
更新解BUG
发现原因后,就是通过OTA更新来修正问题了。原先的1.13.12版本存在这个问题,大约一周后,官方推送了1.13.16版本,相关的说明也证明了这次更新主要是优化了Wi-Fi的连接性能:
笔者直接更新到了1.13.18版本,再次和友商的SDM865机型对比,也是1.5倍速播放。
可以看到虽然右边友商的机型还是略快一些,但是相比更新前已经改善了太多了。
竞争优化更新
和厂家的工程师沟通后得知,厂家后续还会继续改善这部分。后续的系统会和同网段的机器竞争网络资源,更新后速度会更快。不由感叹,现在的手机厂家都好拼。
问题解决后,厂家的研发经理也对笔者的技术水平提出了高度的赞扬。可能是由于笔者的技术水平已经超出了一般用户的层级,所以厂家的研发经理甚至还一度怀疑笔者是搞路由器研发的。
笔者并不是搞路由器硬件的,不过业余时间比较喜欢研究Wi-Fi安全相关的一些内容倒是真的。
另外值得一提的是,一旦确认了问题所在,厂家会给用户丰厚的奖励。厂家一般的标准是会给一套快充套装,价值大约不到200元。笔者这次由于比较配合,所以也获得了一些奖励。在此也鼓励大家积极上报手机的bug,丰厚的奖励等着你。
总结
首先要说明一下,这是一个偶发问题,针对特定的路由器会出现这种情况。其次,发现问题并不奇怪,发现问题后厂家的态度才是关键,比较可喜的是目前国内的头部厂家都非常重视系统这一块。国内HOVM这前几大厂家,软硬件的稳定性和解bug的能力其实都差不多。笔者在上文用作对比的绿厂机型,Wi-Fi这一块从一出厂开始,应该就是通过功耗来换性能的,所以表现比较稳定。
尽管对于华为的一些做法不太认可,但不得不承认华为量产机的整体的体验还是比较稳的。
之后的MOV这三家基本处于一个水准。小米手机在前两个月,曾经推出过一个智能场景省电功能。举个例子,就是你前一天睡得晚了,手机利用人工智能发现后,会在白天把你的Wi-Fi给自动断了,可能是为了保证用户充足的睡眠?还是为了省电?然后别人联系上你的唯一方式就是电话(仅保留Telephony模块正常工作)。笔者也曾经吐槽过这个功能,然后不知道为什么,这个功能在后续的更新中被小米悄悄地移除了:
Meizu这边系统里不会有什么大的bug,不过小的bug还是有的,修正的速度明显慢于MOV一个等级,不过也就一两个月,整体可以接受:
再往后的厂商,系统的应用商店直接不提示更新。这样的bug用了几个月才修复,如果放到HOVM这几家的话,那影响的可能是几亿用户,负责软件部门的总监可能会引咎辞职:
说了那么多,都是为了大家能够买到更合适的手机。文末我想说的是,手机这个行业竞争真的非常激烈。和笔者沟通的工程师,白天的工作也非常忙,还要抽空和笔者联系,解决问题。经常和笔者讨论一个问题,从晚上10点就说到了第二天凌晨一两点,非常不容易。我对这个行业和其中的从业者都是充满敬畏的,中国的手机行业能够在国际上保持领先,也离不开这些工程师们的努力。
最后来个彩蛋,原本给家里老人用的手机,用的是极简桌面。为了防止误操作打开数据流量,是直接从运营商处关闭数据网络的。但是这样操作后,手机只能使用GSM网络,经常会造成电话打不通。其实完全可以开启4G流量功能,同时在手机的流量管理中做一定的限制。毕竟流量管理一般位于手机管家中,是手机比较底层的应用,不会随Launcher的切换而变更设置。算是个小技巧,最近才刚想到的。
相对于单品的测评,这种综合性的文章写作的难度和投入的精力都要多出好几倍。要想写成这样一篇文章,从构思酝酿,到资料搜集,再到真正成文发表,没有几个月的时间是很难完成的,所以还请大家多多关注,后续会有持续的硬核好文呈现,如果能评论或点赞收藏一波就更好了。这么长篇的文章,感谢大家有耐心读到这里,我的这类文章写作的主要目的是和今日头条的读者们分享讨论,欢迎大家在文章后评论交流。