侧边栏壁纸
博主头像
CyberWEI博主等级

We are the history

  • Wrote 28 Articles
  • Made 9 Tags
  • Got 16 Comments

OutlineCONTENT

Outline

【马一龙的黑科技】Starlink星链体验记【这是一篇来自太空的博客】

CyberWEI
2024-04-04 / 2 Comments / 3 Likes / 232 Views / 2,840 Words

前言

诸君好久不见啊!
回想上次更新博客还是上次(

最近因为电子幽灵界开始了AI大普及
本幽灵就被抓壮丁去电子打灰了

天之声:(这不是咕咕的借口!!)

好吧不找借口
这几个月其实攒了不少大活,
但奈何直接把博客这件事忘干净了

但别急
在整理在整理了
大活会陆陆续续放
这不第一个大活就来了

Starlink是个啥

想必在国内(大陆)的大伙一定没玩过这东西
天天看马斯克发大火箭,搞二级回收
好大一部分发出去的火箭都是为了构建星链系统

低成本将大量的相控阵通信卫星发射到近地低轨道
直接把地球用星链网包裹起来
快速实现全球无死角互联网

短短几年,星链卫星的总数就已经占到了所有人造卫星的一半以上
(不过都在相对好发射的近地轨道上)

2024/03/17时点卫星数量

堆成一摞的星链大军

随着星链数量逐渐增多
其覆盖/服务范围也在快速扩张
目前已经对63个国家*(2024/04/04时点)*的一般家用开放
此外其成本也在不断下降

在本赛博幽灵生活的赛博霓虹
星链已经达到了和家用光纤几乎相同的每月价格
对于一些光纤安装困难的房子或者地区
只要能看见完整的天空(虽然这并不是一个十分容易的条件)就可以使用星链作为光纤的完美平替

当然本幽灵不可能是因为家里没网才去安装星链(10Gbps光纤入户爽到飞

“那为什么你要装星链?”

“因为天空就在那里。”

价格

刚才说到在赛博霓虹的星链价格和一般光纤相当
但针对高需求,高自由度的商用卫星宽带依然有着比较高的价格
不过相比较于传统的卫星上网
应该也算是降维打击了

高需求宽带参考价格(2024/04/04时点,100JPY≈5RMB)

当然对于一般家用需求
最多只需要标准方案/移动方案就可以了
移动方案可以在全国范围内自由更改连接点位置
特殊针对野营等户外需求
这两个方案月费都没有超过10000日元
对于赛博霓虹的收入可以说是十分亲民了

本幽灵暂时并没有野营需求
再加上订阅是可以随时更改的
就先订阅了最廉价的标准方案

此外为了可以在地面接收到卫星讯号
我们还需要购买一台专用的相控阵天线
其价格大概和一台PS5相当
相控阵这么黑科技的东西几千块卖你简直就是白给好吧

订阅以及设备价格(2024/04/04时点,100JPY≈5RMB)

这次的评测也仅代表在赛博霓虹/标准方案/文章发布时点的体验结果
星链卫星扩容的速度如此之快
可能等到明年的这个时候
甚至都不需要地面卫星锅直接实现手机联网了

天线拆箱

在SpaceX官网登录付款后大概一周天线到货
一个巨大的箱子,体感大概七八公斤重

低调简约

快递面单可以看到是从加州直接发货到大阪的
日本段由佐川急便负责,似乎是和DHL的合作
从付款到收快递只需要一个星期
可以说效率很高了

快递面单

打开包装可以看到平面相控阵天线趴在箱子里

orz 姿势

只需要拿出来将天线支柱插在X型底座上
一步组装完成

没有多余的缓冲材料

此外还带有一个室内终端(WiFi路由)
自带的天线连接线很长
基本的安装需求都可以满足
(大概有15米)

全家福

可以发现设备上有几个小彩蛋:

  • 路由器表面上的圆形图案是火星探测器从地球
    变轨到火星时最常采用的霍曼轨道

  • 赠送的小贴纸有五只猫猫坐在相控阵天线上
    这里neta了屏蔽网线规格标准CAT5
    也可能是天线暖和所以蹲在锅上面

室内终端

路由器上有着电源和天线连接线接口
电源连接器是标准的米奇鼠插座
天线连接线是一个奇怪的看起来像是巨大化的MicroUSB接口

接口下端都有双层密封橡胶圈
看起来不仅是室外天线
室内路由器也安排了防水性能

连接线

欸等一下啊
这不是上网用的路由器吗?
我网线接口呢?

老马啊
这网线接口另卖您是想干啥
都学小米汽车是吧
只支持WiFi的路由器
这还是第一次见

🚀To The Stars🚀

接下来该带上我的数据们上天了
不过在那之前还得先给天线找个合适的位置

在一开始的时候也说过
星链天线运行需要完整的看到头顶的天空
其实房顶是最合适的

但毕竟我也不是那么需要稳定的性能(要稳定有光纤
这次就不专门爬房顶了
以后长期实装的话会考虑在地面打个柱子支起来

先放地上妥协一下

然后是拉线
想把天线连接线无损/不卡窗框拉到室内还是有点挑战的
经过一番头脑风暴
最终决定暂时借用没有用到的空调孔

拆拆拆

总之先凑合一下

室内就有点惨不忍睹

找好位子插上电
天线突然开始自己转起来了

原来你会动啊

手机下载管理软件可以看到显示正在搜索卫星
过了几分钟连接成功
傻瓜式操作没有任何难度

搜星过程

总所周知新技术最大的用途就是跑测速
看何同学看的
那就先来看个测速?

。。。。

等下。。
我天这是不是有点快
这可是卫星通讯
已经比传统同轴网络的理论速度要快了

再试试

好吧确实很快

当然光纤肯定是比不了
但作为一种普通用户触手可得的卫星通讯手段
可以说是无敌了

深度体验

IP

通过卫星上网的终端如何获得IP?
IP属地会显示【宇宙】吗?

其实根据星链的原理我们可以知道
天线发射给卫星的信号其实是就近传回地面的接收局的
而不会绕半个地球回到美国总部

这也就意味着IP属地依然是JP

比如在日本目前就有(石狩・秋田・阿字ヶ浦・山口)四个地面基站

地面基站

是巨大的圆球

不过这并不意味着星链没有能力将数据绕半个地球传输回美国总部
这只是最大化利用率,减少延迟以及负载均衡的手段

示意图

在大阪同时大概有9颗可见

此外,Starlink的基础方案是没有提供公网IPV4地址的
需要公网IPV4只能订阅商务方案

通过IP查询网站我们可以发现供应商提示为Starlink
很帅

IP查询

即使数据会被卫星就近传回本地的供应商基站
一些版权审查严格的视频网站还是会判断为境外地址

星链看不了芙莉莲TAT

稳定性

天线在连接到卫星之后
会自动开始尝试绘制出自己可以接收信号的范围
随着时间可以绘制出一个干扰地图

干扰地图

可以看到因为我把天线放在了地上
不可避免的出现了被房檐挡住的部分
似乎天线会根据自己绘制的地图智能调整卫星的接收范围
避免在遮挡区域丢失信号
(一开始提示会有信号中断但最终绘制完成时警告消失)

接下来来尝试一下长时间 Ping 连通性
简单写了一个每5秒ping一下谷歌服务器(8.8.8.8)的脚本
运行数十小时检查网络的稳定性
测试代码放在文章最后面

连通性测试1

连通性测试2

经过两段测试
可以发现存在一些非周期性的连接失败
看来虽然星链客户端并没有提示存在干扰
但大概率由于房檐的遮挡
还是出现了一些无法访问的时刻

不过可以看出异常时刻总体上小于1%
除了实时游戏这样对延迟敏感的需求外
即使有部分遮挡也是完全可以胜任的

不过长期稳定使用还是要考虑将其尽量安装到高处

像这样子

对于无干扰时的延迟
平均延迟仅有30ms
已经可以说达到电竞水平了

这一周的统计

到手体验的这一周
我尝试将家里除了服务器以外的设备全部切换到了星链上网
可以说从10Gbps光纤专线切换到星链
体感没有障碍
无缝切换
当然也是因为几乎不打线上游戏

当然随着老马继续发射更多卫星入轨
希望可以改善更多极端遮挡情况下的连通性

星链数量变化

Reference

[1] https://zh.wikipedia.org/wiki/星链
[2] https://www.reddit.com/r/Starlink/comments/1bguwhv/starlink_approaching_60_of_all_satellites/
[3] https://twitter.com/bazar55/status/1592871337445691392
[4] https://eng-blog.iij.ad.jp/archives/17689
[5] https://eng-blog.iij.ad.jp/archives/20593
[6] https://starlink.sx/
[7] https://satellitemap.space/
[8] https://www.starlink.com/map
[9] https://www.google.com/maps
[10] https://www.amazon.com/Starlink-Features-Durable-Diameter-Included/dp/B0CT8PWBLZ/

Appendix

连通性测试代码

import subprocess
import time
import re

def ping_and_log(ip_address, log_file, ping_interval=5, duration=86400):
    start_time = time.time()
    with open(log_file, 'w') as file:
        file.write("Timestamp,Status,Latency(ms)\n")
        while time.time() - start_time < duration:
            response = subprocess.run(['ping', '-c', '1', ip_address], capture_output=True, text=True)
            if response.returncode == 0:
                match = re.search(r'time=(\d+.\d+)', response.stdout)
                if match:
                    latency = match.group(1)
                    file.write(f"{time.time()},Success,{latency}\n")
                    print(f"Success: {latency} ms")
                else:
                    file.write(f"{time.time()},Success,N/A\n")
                    print("Success: N/A")
            else:
                file.write(f"{time.time()},Failure,N/A\n")
                print("Failure")
            file.flush()  
            time.sleep(ping_interval)
            
ping_and_log('8.8.8.8', 'ping_log.csv')
3

Comment