目录
王者荣耀网络检测
这个功能大家可再熟悉不过了,毕竟weber开的都是404的玩笑,小年轻么可是460。第一次看到的时候就特别好奇,这几个数据是怎么来的呢?
什么鬼路由器延迟,社区延迟。互联网延迟就好理解了,就到王者服务器的延迟呗。在摘星掉星的日子中,这点好奇就被遗忘在脑后了。直到今天,我写了篇小文章php traceroute by socket,似乎就理解了这到底是怎么回事。
路由跟踪(traceroute)
路由跟踪,之前只是用来查看我的网络是怎么走的,目前用的网上用法最多的莫过于是去检测海外vps的往返路由,也就是关心的是过程。久而久之,也就把它当成了一个路由检测工具,即便是很早就意识到这是都ping的差错包构成的。但直到我慢慢的把traceroute用php码出来的时候,我才意识到,王者荣耀网络检测中路由器延迟和社区延迟到底是咋回事。
路由跟踪例子
这是我本地打印处理的信息
-
路由器的延迟
-
社区延迟
- 192.168.1.1 我电信猫的网关
- 100.64.0.1 电信交换机网关
-
电信分配的公网ip
-
互联网延迟
- 随后就是各种网关跳转至目标服务器
具体以那部分作为互联网延迟则得看王者中是怎么定义的。
个人猜测大概率应该是以到王者服务器的延迟作为互联网延迟。
局域网设备数量
目前不太清楚具体怎么做到的。大概猜下:
ping
ping 一波咯,也就是255个。在 fping中,ping段子网速度还是挺快的,还是局域网的。虽然这方法有点low
arp
地址解析协议是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。ARP最初在1982年的RFC 826中提出并纳入互联网标准STD 37。ARP也可能指是在多数操作系统中管理其相关地址的一个进程。 ARP是通过网络地址来定位MAC地址 (from wiki)
在win中:
arp -a
接口: 192.168.2.215 --- 0xf
Internet 地址 物理地址 类型
192.168.2.1 68-db-54-44-c4-5b 动态
192.168.2.50 9c-a6-15-d8-5b-4e 动态
192.168.2.240 f8-8c-21-0b-97-17 动态
192.168.2.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
不过在移动端怎么实现就不清楚了。不过在知乎上有人提问了王者荣耀如何检查局域网内有几台WiFi设备的?,题主提到没找到arp的包,但这点我却有答案。按照arp原理的话,拥有ARP缓存表加之老化机制,查次arp没有包也是可能的。
UDP 包广播
这个思路来自php traceroute by socket 大概能找到的资料中第一个项目研究的过程中看到的,另外一个线索来自微信小程序的接口。具体能否实现我就不知道了,没去试,有时间去搞搞再来反馈。
- UDPSocket.send
向指定的 IP 和 port 发送消息。基础库 2.9.0 起支持广播 (指定地址为 255.255.255.255)。
arp 原理
在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。
主机名称 IP地址 MAC地址
A 192.168.38.10 00-AA-00-62-D2-02
B 192.168.38.11 00-BB-00-62-C2-02
C 192.168.38.12 00-CC-00-62-C2-02
D 192.168.38.13 00-DD-00-62-C2-02
E 192.168.38.14 00-EE-00-62-C2-02
… … …
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。
当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。
如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”
网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP高速缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。
ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可减少缓存表的长度,加快查询速度。
免费ARP(gratuitous ARP),他是指主机发送ARP查询(广播)自己的IP地址,当ARP功能被开启或者是端口初始配置完成,主机向网络发送免费ARP来查询自己的IP地址确认地址唯一可用。作用:
确定网络中是否有其他主机使用了IP地址,如果有应答则产生错误消息。
免费ARP可以做更新ARP缓存用,网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与IP地址相关的条目都会强制更新,如果存在旧条目则会将MAC更新为广播包中的MAC。(wiki)
结语
本文猜测局限个人水平,如有错误请见谅了。
补充
经过几天学习,很大可能是 UDP 广播后,查arp。小程序部分有测试,发现权限太低,收不到TCP和UDP以外的包(包括差错包),但可以广播成功。
参考
地址解析协议