这是作者大学时期在家里遇到的一个非常奇怪的网络问题,作者的父亲是一名经验丰富的网络工程师,他们家里使用了一个复杂的网络设置,通过 Wi-Fi 桥接的方式,将父亲公司的高速商业网络连接到家中。但是有一天,作者发现家里的 Wi-Fi 只有在下雨时才能正常工作。。。

事情发生在十多年前,那时我还是个愣头青大学生。有一次放暑假,我兴冲冲赶回家准备和父母共度几周美好时光。毕竟一年没回来了,而且学校在大海的另一边,回来一趟不容易。

我的父亲是一名工程师,在我出生之前就已经开始潜心研究网络设备。他创办的公司为全国各地的机构设计和部署了各种复杂的网络系统——从办公楼的千兆以太网,到城际间的视距微波链路,无所不包。

我刚回到家,父亲就一本正经地告诉我:Wi-Fi 只有下雨天才能用

“什么?” 我惊讶地长大了嘴巴。

“Wi-Fi 只有在下雨的时候才能用,” 他耐心地重复道,“几周前开始的,我还没来得及查。”

“这不可能,” 我说。常识告诉我,雨只会让无线信号质量变差,而不是变好。怎么可能因雨而好转呢!

我要在家住两周啊!两个星期都不能上网?这绝对不可以!

否认现实

随即我打开笔记本电脑,开始检查网络。

结果发现 Ping 任何网站都有高达 98% 的丢包率。网页根本打不开!

这可咋整呢,几个月前我刚和大洋彼岸的一个妹子谈着异地恋,她现在在地球的另一端,我总不能跟人家说我不能跟你打电话是因为家里没下雨?这也太特么扯淡了吧。。。

那时候移动数据的价格极其昂贵,昂贵到我家里的手机都不敢开通数据套餐。当时是没法法像现在这样直接用手机的数据套餐来解决问题的。

我在房间里烦躁地踱来踱去,急得像热锅上的蚂蚁。

就在此时,窗外突然下起了雨。

求雨心切

雨水落下不到 5 分钟,奇迹出现了——丢包率降到了 0%!

我简直不敢相信自己的眼睛!生怕连接随时会中断,我打开浏览器,迅速打开了无数个标签页……

雨下了一个小时,家里的网也稳如老狗一个小时。

然而好景不长,雨停约 15 分钟后,丢包率又飙升到 90% 以上。网络再次陷入瘫痪,就像魔法突然失效了一样。

我现在只想天天下雨,老天啊,只要你能下雨,让我干啥都行。我开始密切关注天气预报,祈祷未来几天能有下更多的雨。

万幸的是接下来几天都是阴天,不停地上演这样的戏码:

雨一开始下,网络连接就在几分钟内恢复畅通。

雨一停,网络连接就在 15 分钟内再次瘫痪。

尽管内心有多么不愿承认,但铁证如山——Wi-Fi 确实像是被施了魔法,只有下雨时才能正常工作!

此时此刻,我面临一个抉择:

我是该继续消沉下去,闷闷不乐,相信玄学,根据天气预报来安排和女友的约会。

还是该挣脱消极情绪的桎梏,以工程师的理性思维,去追寻问题的真相?

去他妈的玄学!老子可是个讲逻辑和理性的工程师!” 我暗暗给自己打气。

决心已下。我要解开这个谜团,我绝不会坐以待毙。

定位问题

在展开调查之前,先给大家介绍一下我家的网络状况。

由于我父亲在网络解决方案领域经验丰富,所以他在家中也搞了一套顶级的网络设置——过去 10 年来,它一直完美运行,从未出过问题!

父亲办公室的网络是商业级的,速度很快。而家里的网络则没有这么好的选择!但我们家向来不愿将就,除非别无选择。

好在父亲的办公室和我们的公寓只隔着几个街区的一个小山,而我们二楼的公寓则占据了街区的制高点。亲想方设法在办公室和公寓之间架设了一条视距 Wi-Fi 桥接——两端各有一个高增益定向 Wi-Fi 天线,相互紧紧对准。如此一来,我们在家里也能分享到高速的商业级网络体验!

我开始排查网络,看看连接到底是在哪里中断的。

家中的 Wi-Fi 路由器一切正常——0% 丢包率。Wi-Fi 桥接的本地端也毫无问题。

但当我 Ping Wi-Fi 桥接的远端时,丢包率却高达 90% 以上——连接其后的任何网络设备,Ping 测试的丢包率也一样。问题的根源显然在于 Wi-Fi 桥接!

但是问题究竟出在哪里?为什么偏偏在这个时候出现,要知道这套系统已经完美运行了将近 10 年,不管外面是刮风还是下雨!

一场雨怎么可能奇迹般地修复一个 Wi-Fi 桥接,这到底是怎么一回事?

重重谜团等着我去揭开。是时候去寻找答案了!

刨根问底

作为一名经验丰富的工程师,我率先尝试了最简单最牛逼的方法——关机重启。但很遗憾,这招现在不灵了。

于是我开始逐一排查网络中的设备:

  • 会不会是某个设备日久失修,年久失修?我用笔记本连上每台设备的本地以太网接口,运行诊断程序,做 ping 测试,结果一切正常。
  • 会不会是哪根网线松脱或脱落?我仔细检查了每根电缆,发现它们都连接得很牢固。
  • 会不会是电源适配器老化失效?我测试了每个电源模块,电压输出都很稳定。
  • 会不会是自动固件更新意外中断,导致系统崩溃?我核对了每台设备的固件版本,确认都已是最新版本。
  • 会不会是户外天线接头经历了风吹日晒,已经锈迹斑斑?我爬上梯子仔细检查,发现接头完好如初。

不得不承认,相比软件调试,硬件排查实在是个苦差事!我就像个不怕死的猴子一样,上房揭瓦,爬梯子,满小区乱窜,检查从调制解调器到网线再到天线的每一个组件。

来来回回折腾了 N 次之后,我突然意识到,这些年小区里发生了多大的变化。

上大学之前,我曾在一所寄宿高中度过了四年的时光。我还加入了国家数学和信息学竞赛队,征战 IMOIOI,即便是暑假,大部分时间也都耗在了集训营和赛场上。如今再看,不少小区的店铺已然换了新主,不少房屋也都焕然一新,就连那些昔日的小树苗,也已然长成参天大树,郁郁葱葱

就在此时,我恍然大悟!

发现真相

我飞奔回家,三步并作两步爬上 Wi-Fi 桥接器支架,紧紧攀附栏杆,悬在两层楼高的半空中,摇摇欲坠。

现在回想起来,当时应该系上安全带才对……不过为了网络,这点代价算得了什么!更何况,还有个异地恋女友在线等着我呢,我可不是为了看 Netflix 或刷 Twitter 才这么拼命的。

我眺望山脚下,搜寻 Wi-Fi 桥接器另一端的天线。

不,准确地说,是朝天线理应在的方向望去,却看不见它的身影!我的视线被邻居家一棵参天大树遮挡,最顶端的枝桠正巧在两个天线之间悠然地摇曳着

问题的根源昭然若揭!

问题剖析与解决方案

事情的来龙去脉是这样的。

多年前,我们安装了这套 Wi-Fi 桥接器。一开始,一切运转正常,堪称完美。

但随着时间的推移,邻居家的那棵树越长越高。就在我暑假回家前不久,它顶端的新枝嫩叶终于长到足以干扰 Wi-Fi 信号的高度。

不过话说回来,它也只是勉强能够到而已,千钧一发。

每当下雨时,雨水便会在树叶枝桠间汇集,沉甸甸地把它们压弯,恰好避开了 Wi-Fi 信号的必经之路。

有趣的是,即便不在天线的视线范围内,天线旁边的物体也会对信号造成干扰。要想获得最佳信号质量,天线之间的菲涅耳区最好是一马平川,畅通无阻。当然实际中很难做到尽善尽美,所以像 Wi-Fi 这样的无线设备通常会采用纠错编码等技术,使其在菲涅耳区略有遮挡的情况下,依然能保持稳定工作。

一旦雨过天晴,雨珠便会持续从树梢滚落。大约十五分钟后,树冠渐轻,慢慢舒展开来,又不偏不倚地探进了我们的数据通道。于是,Wi-Fi 就开始 “罢工” 了。

问题的解决方案其实很简单:设备升级呗!我们把老旧的 802.11g 设备换成了崭新的 802.11n 设备。新设备运用了一些前沿的数学和物理学原理,令信号的抗干扰能力大幅提升。

比如 802.11n 引入了一项新技术,名为 “波束成形”——通过巧妙调制多个相同频率的发射天线,在扩大覆盖范围的同时,还能优化信号品质。现代 Wi-Fi 设备虽然天线单元不多,却已能通过波束成形技术,灵活调制信号的传播方向。如果我们进一步增加天线数量,便可打造一个更为强大的相控阵天线。你有没有想过,为什么 Starlink 天线是平的,而不像旧的卫星电视天线那样是个大 “碟子”?奥妙就在于相控阵技术的运用。通过灵活调制每个天线单元的相位,它无需任何机械转动,就能实时锁定天际掠过的 Starlink 卫星群。这是魔法吗?不!这是物理的力量!

几天后,新设备到了,我迫不及待地爬上脚手架,安装好新天线。

我将几颗螺丝拧紧,理顺连接线,然后 Wi-Fi 的 “已建立连接” 指示灯再次亮起了熟悉的绿光。

而这一次,晴空万里,阳光灿烂

家里的网络重焕生机,皆大欢喜。

原文链接 :https://predr.ag/blog/wifi-only-works-when-its-raining/

见鬼了!我家的 WiFi 只有下雨天才能正常使用...的更多相关文章

  1. APIJSON,让接口见鬼去吧!

    我: APIJSON,让接口见鬼去吧! https://github.com/TommyLemon/APIJSON 服务端: 什么鬼? 客户端: APIJSON是啥? 我: APIJSON是一种JSO ...

  2. APIJSON,让接口和文档见鬼去吧!

    我: APIJSON,让接口和文档见鬼去吧! https://github.com/TommyLemon/APIJSON 服务端: 什么鬼? 客户端: APIJSON是啥? 我: APIJSON是一种 ...

  3. 【转】APIJSON,让接口见鬼去吧!

    我: APIJSON,让接口和文档见鬼去吧! https://github.com/TommyLemon/APIJSON 服务端: 什么鬼? 客户端: APIJSON是啥? 我: APIJSON是一种 ...

  4. 让你熟知jquery见鬼去吧

    $是jquery最具代表的符号,当然php也是,但是二者不能同日而语;不得不说jquery的选择器是大家赞不绝口的,在它1.x版本中对ie兼容性是最好的,这要归功于$选择器; 现在呢,html5的降临 ...

  5. 见鬼了,swiper

    1.今天不知怎么swiper的onInit函数不起作用,怎么弄都不行: 把以前能行的案例的包都导进去还是不行,但是onSlideChangeEnd可以触发,晕死了.... 不,它触发了一次onInit ...

  6. 让<未将对象引用到实例>见鬼去吧!

    未将对象引用到实例,即NullReferenceException异常,我相信这是c#编程中最常见的错误之一,至少我在做项目的过程中,有很多时候都会抛出这个异常.每当这个异常出现的时候,我都会头皮一紧 ...

  7. poj3225 线段树区间操作 (见鬼)

    细节处理实在太重要了. #include<cstdio> #include<cstring> #define MT 65533*4 #define Maxn MT*4 int ...

  8. android程序获取WIFI的IP地址和MAC地址

    转自:http://my.oschina.net/chenj/blog/68680 近日在鼓捣这玩意,拿出来大家分享一下,代码比较简单,如果有不懂的再问 <Button android:id=& ...

  9. 物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004

    自从物联网 问世以来,如何使得物  能够联网 有了很多的方式,目前运用非常广的WIFI,今天就总结下自这个方面,也对于有需要的盆友 也希望有抛砖引玉之效果. 物联网:  智能硬件+APP+云 APP ...

  10. 一封来自恶魔的挑战邀请函,那些你见过或者没见过的C语言指针都在这里了

    前言 相信大多数的同学都是第一门能接触到语言是C/C++,其中的指针也是比较让人头疼的部分了,因为光是指针都能专门出一本叫<C和指针>的书籍,足见指针的强大.但如果不慎误用指针,这些指针很 ...

随机推荐

  1. WPF之属性

    目录 属性 依赖属性(Dependency Property) 依赖属性对内存的使用方式 声明和使用依赖属性 声明依赖属性 使用依赖属性 依赖属性的"属性" 依赖属性的" ...

  2. C++中fopen的句柄返回NULL

    我们在使用fopen打开文件的时候有时会出现失败返回null情况,但是我们不能直接通过log具体是什么原因导致的,所以这时我们可以通过errno和strerror获取错误码和错误信息. 我遇到的是错误 ...

  3. 掌握python的dataclass,让你的代码更简洁优雅

    dataclass是从Python3.7版本开始,作为标准库中的模块被引入.随着Python版本的不断更新,dataclass也逐步发展和完善,为Python开发者提供了更加便捷的数据类创建和管理方式 ...

  4. 记录--vue3函数式弹窗

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 最近接到一个需求,需要在一些敏感操作进行前要求输入账号和密码,然后将输入的账号和密码加到接口请求的header里面.如果每个页面都去 ...

  5. 记录--JavaScript 中有趣的 9 个常用编码套路

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1️⃣ set对象:数组快速去重 常规情况下,我们想要筛选唯一值,一般会想到遍历数组然后逐个对比,或者使用成熟的库比如lodash之类的. ...

  6. .net core WPF关于进程打开网页链接报错"文件找不到"

    System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = " ...

  7. 【UE插件DTRabbitMQ】 虚幻引擎蓝图连接RabbitMQ服务器使用插件说明

    本插件可以使用蓝图连接 RabbitMQ服务器,并推送或者监听消息. 下载地址地址在文章最后. 1. 节点说明 Create RabbitMQ Client - 创建RabbitMQ客户端对象 创建一 ...

  8. KingbaseES V8R3 集群运维案例 -- cluster.log无日志输出问题诊断

    案例说明: KingbaseES V8R3集群正常运行期间,现场发现cluster.log日志无任何信息输出,针对这一问题做了复现及提出解决方案.后现场检查发现,cluster.log文件曾被删除: ...

  9. kingbaseES V8R3集群运维案例之---集群部署前后ssh端口修改

    kingbaseES V8R3集群运维案例之---集群部署前后ssh端口修改 案例说明: kingbaseES V8R3集群部署读写分离的集群是使用ssh的默认端口(22)部署,当改为非默认端口时,在 ...

  10. KingbaseESV8R6等待事件之LWLock buffer_mapping

    等待事件含义 当会话将数据块与共享缓冲池中的缓冲区关联时,会发生此等待事件. 类似Oracle cbc闩锁的是一种Kingbase的轻量级锁lwlock,这个锁的名字在不同数据库版本中可能有所不同,我 ...