记一次网络连接bug解决

bug背景

项目涉及到与硬件的交互,和硬件连接使用java中基于TCP/IP的两个长连接Socket连接同一端口,硬件仅支持两个连接的建立,一旦建立,除非重置硬件Wifi模块,否则不再接受新的连接。开发过程中指导IOS开发构建了同一套PTP/IP连接模块,结果IOS在进程被杀死后,硬件会重置Wifi等待重新连接,而Android端APP进程被杀死后,硬件没有重置Wifi,所以不能直接重新连接需要手动重启硬件。

As far as we know, 所有UNIX-LIKE的系统,在进程被杀死时都会释放资源,socket更是会先发送挥手包(FIN)及完成四次挥手,那么区别在哪里呢。

肯定不在前期指令执行上,所有指令IOS和Android都是一样的,那么只可能在资源释放的环节了。

寻找IOS端和Android端进程被杀死后Socket资源释放的区别

环境

Macbook Pro + wireshark + python
IPhone
Android + root + busybox(tcpdump)

实操

由于区别主要在于TCP断开连接的方式,抓包最好使用wireshark,通过IPhone连接电脑,执行

rvictl -s 193c851574d6e7225bd9447ae03f55c5b5195802

抓取IOS所有通过当前wifi网卡的数据包,发现进程被杀死时,一个Socket发送了FIN数据包后完成了四次挥手(client FIN->server ACK-> server FIN -> client ACK),而另一个Socket使用发送了RST给硬件。


IPhone资源释放.jpg

在Android中看看Socket是怎么断开连接的,root后装上busybox,执行

adb shell su -c  tcpdump

可以直接在终端看数据包,如果想要导入wireshark中可保存数据到文件再使用wireshark打开或直接使用管道,在此不再赘述。发现Android中进程被杀死后,两个Socket都以四次挥手方式断开了


Android默认资源释放.jpg

怀着兴奋地心情尝试调为一个用RST方式断开,一个以四次挥手断开,在Java中如果想要Socket以RST方式断开连接,需要Socket参数linger为true,于是乎在Android客户端对应的Socket建立连接后,设置linger为true

socketMain.setSoLinger(true, 0)

完成后尝试,发现没有什么卵用。苦闷。。。

在苦思无果后,在Mac上尝试用python和硬件建立连接,再杀死python进程,看看硬件什么反应,花了几分钟写好python,监听数据包,执行,杀死,发现硬件重置了Wifi模块,兴奋。。。看看数据包,发现两个Socket都以RST方式断开了连接。。。

再次在Android中调整,给两个Socket都设置linger为true,成了。

总结

此次bug解决在此叙述来很简单,但是总共耗时3天,期间尝试了无数弯路,总结一下呢,bug原因仍然不知道,Android端硬件的官方应用被杀死时,两个Socket断开也都是四次挥手的方式,但是反编译其代码发现其是使用的so库实现的,暂时只能猜测和语言抽象等级或执行环境有关。。C语言下使用FIN+FIN可行,OC下使用FIN+RST可行,python下和kotlin下使用RST+RST可行,感觉就像解释执行的代码,需要RST。。

虽然bug很奇葩,但是解决过程也重温了很多底层tcp/ip的知识,工具使用也更熟练了...有时间再做个整理吧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,476评论 2 59
  • 1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lso...
    北辰青阅读 9,197评论 0 11
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,266评论 0 13
  • 工作中事务繁杂琐屑,难免疏漏。补救措施就是多方寻求协助,在最短时间单位内把疏漏弥补。 总结~只有看见问题才能真正解...
    宁静致远05阅读 328评论 0 1