学校提供了免费的校园网络,但是其速度不佳(20Mbps),在使用人数过多的时候会降到2Mbps,且对视频、游戏等支持欠佳。
本文探讨了一些技术方案以改善极其糟糕的上网体验。

1. 上网方案的选择

在初到校园测试时,校园网负载极低,网络测试上下行均高达200Mbps。但在负载高峰时,速率则极差,故考虑办理校园宽带或流量卡上网。

移动数据测试

根据实地探访,校园内仅发现了两个中国移动的基站,一个位于校园西北角,一个位于东南角,距离宿舍均较远。

实际测试的情况来看,运营商移动数据测试较差。

  • 中国移动5G在宿舍内测试速率在160-180Mbps浮动,抖动20ms左右。
  • 中国电信5G在宿舍内测试速率在80-120Mbps浮动,抖动10ms左右。

故使用大流量卡上网/CPE上网方案不可行。

校园宽带测试

校园内仅中国移动提供了校园宽带服务,分300Mbps与1000Mbps两种套餐。但是其价格较贵,且覆盖范围较低。

同时校园宽带在使用上存在以下缺点:

  • 限制2台设备登入,对于多设备用户极其不友好。
  • Wi-Fi网络游戏体验均极差(体现为丢包80%,且波动极高)
  • 存在概率性无法登入网络的问题(无法连接至Wi-Fi,无法跳转出WEB认证页面)。
  • 使用一段时间后会自动掉线,需要重新认证。
  • 网页没有自动记住账号的功能。

总结

🏙️校园网 📶移动数据 🛜校园宽带
速度 较低(20Mbps),高峰期间不到1Mbps 一般(100Mbps左右),移动最佳,电信、联通较差 极佳(300Mbps/1000Mbps)
覆盖范围 楼体覆盖完善。 移动覆盖一般,电信、联通较差。 仅限教学主楼与宿舍楼,图书馆无信号。
体验 游戏、视频支持欠佳。 丢包严重,速度取决于运营商。 Wi-Fi连接稳定性差、波动较高。
连接设备 不限 1台,可通过热点提升数量。 2台
登入方式 WEB认证,有固定的访问认证地址。 无需认证 WEB认证,登入一段时间后需重新认证,无法记住密码,需要等待自动跳转。
价格 免费 取决于运营商价格,在30元/100G左右浮动。 49元/59元
其他 需要一台设备提供上网热点服务。 办理宽带同时包含了400G左右的省内流量

通过简单的对比与权衡,最终选择了校园宽带作为上网的方案。

2. 自动登入校园网络与宽带

登入校园宽带

中国移动的登入页面极为古老,感谢@Guang_Chen233通过抓包分析后开发了一个Python脚本,可以用于登入网络。

CMCC网络的登入在于向其验证页面明文POST账号密码即可通过验证,但在验证前需要保证url中包含的当前用户IP等参数正确。

登入校园网

校园网的登入极其简单,只需要向验证页面明文POST账号密码即可通过验证,无需其他参数。

3. 进阶-开发自动登入校园网与校园宽带的程序

在上文完成了对校园网与校园宽带的验证抓包分析后,通过Python开发了个简易的登入程序,将账号密码填入后可以自动登入两类网络。

技术原理

通过持续检测Wi-Fi的SSID信息判断当前所处的网络环境,选择合适的登入脚本,并直接向验证页面POST请求数据以达到登入网络的结果。

项目

项目已经上传至个人的Github账户中。

4. 解决校园宽带丢包、抖动过多的问题

分析原因

AP一般指无线接入点,是一个无线网络的接入点,俗称“热点”。主要有路由交换接入一体设备和纯接入点设备,一体设备执行接入和路由工作,纯接入设备只负责无线客户端的接入。纯接入设备通常作为无线网络扩展使用,与其他AP或者主AP连接,以扩大无线覆盖范围,而一体设备一般是无线网络的核心。

来自 百度百科

学校在每个宿舍室内均部署了一台AP,但经过实际测试,手机与电脑连接的AP并非本屋内的AP,经常连接至其他AP。

同样其他人也会连接到宿舍的AP,导致AP负载过高且网络波动较大。

亲爱的用户您好,这边为您做了初步的网络检测,发现您本地网络延迟抖动较大,至加速入口平均延迟为78.4ms / 至网关平均延迟为86.6ms、丢包率20%。

来自 网易UU加速器 客服测试

解决方案

简单来看,通过网线直接与AP设备连接是最佳的方案。同时经过测试,网络的丢包、抖动有了极大的改善。

但是如第三部分提到的,软件目前只可以检查Wi-Fi的SSID以进行设备的登入,在遇到网线的情况则没有办法自动登入,仍然需要手动认证,同时通过网线的连接WEB认证跳转更加的不稳定,很大概率无法自动跳转到认证页面。

这时我就想到了通过Openwrt软路由的方式进行自动登入,同时也可以满足手机、平板、电脑等多个设备的网络使用。

5. 通过软路由自动登入网络

本着能省就省的原则,从家里找到了一台老古董的小米路由器AC2100。同时由于宿舍22:30断电,配备了一台UPS使用。

参考教程:https://github.com/boxhg/openwrt-AC2100,这里就不进行详谈了。

在第三部分我们提到了开发了一个CMCC的登入脚本,最开始考虑使用cURL进行登入,但是总卡在了CMCC的EDU验证部分。

不得已情况下,只能考虑在Openwrt中安装Python执行脚本。

上文提到了CMCC的验证主要是需要确保用户IP等参数正确,故我们通过cURL获取www.baidu.com的内容,由于没有登入网络,其页面参数<NextURL> </NextURL>中间的便是WEB登入页面的链接。我对脚本进行了简单的修改,通过获取该链接中的用户IP等参数进行登入。(PS:这就很不符合常理,能获取到链接,但是访问就是跳转不过去)

部署自动登入与定时检查登入脚本

开机自登入

1
2
# 登入CMCC网络
/usr/bin/python3 /root/cmcc_openwrt.py &

定时任务

1
*/10 * * * * /usr/bin/python3 /root/cmcc_openwrt.py >> /tmp/cmcc.log 2>&1

后记

目前实践结果非常成功,但是仍然存在改进的空间。

  • 能否通过一线多拨叠加速率?
  • 目前路由器占用过高,能否通过更轻量化的方式降低占用?
  • 能否支持登入多个账号来实现速率的叠加?