拌合楼软件开发(31)备用5g/4g网络保障网络连通性 - 实践
需求分析:
项目过程中,由于过磅子程序需要通过VPN与数据服务器进行数据提交,并把过磅过程的图片上传到服务上,这个过程都需要连接互联网,由于上传图片每张都在2M左右,一次上传7张,大概14M左右的流量,为保障稳定性,而且现在网络已经很普及了,客户测都会有线网络。但是由于拌合站客户往往都不在城区,很多时候网络容易出现故障(包括内部也包括外部运营商的原因),如果出现网络故障影响到客户进出货,这个是客户所不希望的。客户提出能否网络有个备用的方案。
方案选择:
一、双线备份:
方案:跟运营商申请多一条线路,增加一个支持双线的路由器,可以自动一条线路中断切换到另外一条线路。
估计很多搞网络运维的人首先会提出这种方案,但是这种需要新增线路,那么客户肯定需要额外的网络费用支出,土豪客户会答应,显示我们遇到的拌合楼客户都是私人老板居多,有很多在费用支出方面可以说是锱铢必较。另外由于网络中断有很多可能是站点内部的因素,而站内往往不会养一个网络运维的专业人员解决问题,有个人在做也都是半吊子水平,很难快速响应和解决问题。
二、移动网络备份方案:
方案:增加一个移动wifi设备,主机可以连接到这个设备上网。需要一套检测机制,判断主网络设备故障后,主机要能够自动切换到移动wifi设备的网络。同时如果主网络设备提供网络回恢复后,需要能够切换回去。
有人可能会提问,为啥不直接就用4g/5g的网络,而且现在物联网卡很普及价格也不贵,很多大流量套餐的。作者在实际项目上,确实会有直接采用移动网络的,但这个场景仅限于客户侧实在是过于偏远,且不愿意拉线使用有线网络。作者第一个项目场景就是如此,拌合站在一个小山坳里面,离最近的村落有5公里左右,移动信号断断续续,电信信号还好,由于该地政策限制,物联网卡是无法使用的,还只能申请正常的电信套餐卡,前期项目勉强使用。后来由于客户还想要实时能够查看监控,客户才最终打印拉光纤线到站内,使用有线网络。

简而言之,移动网络可以用,但只能是没得选的情况下,如果有选择还是要选基于有线的网络。所以方案里面移动网络只是一个备份,当有线网络恢复正常后要能切换回去有线。
实现过程:
一、移动wifi设备的购置
这个不在本文中细说,京东上各种设备很多,建议选择大品牌的,如华为,中兴一类的,如果选择物联网卡,也最好是大品牌的,而且在官方旗舰店等渠道购买,不要贪图便宜。
二、程序的实现的需求分解
1. 判断主网络是否出现故障
这个方式方法比较多,通过ping检测,这里作者开始走了个弯路,做的是ping主网络的网关,最开始程序还正常,因为断网很多时候都是站内设备故障问题,直到有一次运营商故障,才发现不能ping网关,那么就改成ping百度即可。
2. 切换网络到移动wifi网络
这个问题作者花了很多时间,由于没有做过c的开发,对于windows的api使用也就是在百度的水平,一直没有找到通过windows的api调用来实现切换网关的功能。最后的方案那就是通过调用命令提示符执行route 命令。
(1) 删除默认网关的命令
route delete 0.0.0.0
(2)增加默认网关
route add 0.0.0.0 mask 0.0.0.0 192.168.1.254
注意以上命令的执行需要有管理员权限,也就是我们的程序运行的时候一定要设置使用管理员身份运行。否则是执行不成功的。整个切换的代码如下
private static void SetDefaultGateway(string gateway)
{
Process process = new Process
{
StartInfo =
{
FileName = "cmd.exe",
Arguments = $"/C route delete 0.0.0.0 && route add 0.0.0.0 mask 0.0.0.0 {gateway}",
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
process.WaitForExit();
}
3. 如何判断主网络恢复正常
作者开发这个功能的时候一直忽视了这个问题,主机的默认网关已经切换到了移动wifi网络,那么怎么去检测主网络还是正常的。最开始作者想是不是采用定时任务,比如每10分钟,切换回去原有的主网络,让后ping百度来判断。这个思路是可行的,但稳定不好,会导致网络中断,vpn要恢复连接有个时间过程,如果恰巧这个时候有过磅数据需要提交,就会导致故障。
那么换另外一种思路,我们默认移动网络是通畅正常的,需要检测连通性只有主网络,那么我们是不是可以设置一条路由到百度的,是通过主网络的,也就是所有ping百度的都是走主网络。当网关切换到移动网络后,ping百度就可以直接检测到主网络的连通性。 这个都不需要再代码中实现,直接cmd给主机增加一条永久性路由即可。
route add -p 183.240.99.169 mask 255.255.255.0 192.168.1.1
为啥ping 183.240.99.169这个IP,因为作者网络ping www.baidu.com,给解析出来的ip就是这个,根据实际项目所在网络来定解析出来的IP就可以了。那mask又是怎么确定的,这个没有太多的关系,只要把ip给包进去就行,用子网23 24 或者32 都行。
总结:
本文主要讲述了实际项目如何通过程序实现主备网络的切换,其中一个小的技巧就是检测主网络是否通畅,可以采用设置一条固定的路由使用主网络ping百度。

浙公网安备 33010602011771号