首页 新闻 会员 周边

Ping程序所采用的ICMP询问报文用来测网速准确吗?

0
悬赏园豆:10 [已解决问题] 解决于 2015-12-04 16:14

要实现一个功能,每间隔时间(大概1s或2s)测试一次网速,每次发送小字节数据(32B),程序要一直跑,所以不能发送太多的字节,但又想测出即时网速,所以打算选择看看ping实现所采用的协议。

之前写过一个客户-服务端的程序,客户端在规定的实现内任其发送数据到服务端,通过计算在规定的时间内已发送的数据量得出即时的网络速率,但被否掉了!

所以寻求另外的方法以满足上面第一段提到的需求,但不知道用ICMP测出来合不合理,或者园友有更好的方法?

以上,谢谢!

Gifur的主页 Gifur | 初学一级 | 园豆:73
提问于:2015-12-02 15:44
< >
分享
最佳答案
0

ICMP 测不了,数据量太小。这只是检测网络连通性的方法。

网速分为上行和下行,一般都是以下行为准,采用的方法就是下载一个较大的文件。

如果你是在一个终端程序中额外增加的网速监控功能,你可以通过统计终端程序运行时所有的上行和下行数据量来统计速率。

收获园豆:10
Launcher | 高人七级 |园豆:45045 | 2015-12-02 16:57

主要是为了判断运行程序的终端当前的网络状况,我试过直接提取操作系统(windows)的网卡的即时上传和下载速率,这个简单点直接调用系统的库就可以做到,但不知道这样能不能达到效果,我程序如果没运行的话是不是就测不出来当前的网络状况了,@Launcher有没有更合适的方法呢?新手摸石头过河的效率太低了,希望能够提供点建议,谢谢。

Gifur | 园豆:73 (初学一级) | 2015-12-02 17:37

“采用的方法就是下载一个较大的文件” 其实方法我用代码实现过了,而且可以测上传跟下载速率,但是需要随时监控到当前的网络状况,而不是主动发大量数据去测,并且是在3G4G的网络下,所以要考虑到流量费用的问题...

Gifur | 园豆:73 (初学一级) | 2015-12-02 17:41

@scau_Joseph: 你是要测试到你们的服务的网速,还是任意的?

Launcher | 园豆:45045 (高人七级) | 2015-12-02 17:43

@scau_Joseph: 单纯测速就只能从目标网站下载文件,如果只是想了解程序运行时的网络状态,可以通过统计到目标网站的上行和下行数据量来实现。

Launcher | 园豆:45045 (高人七级) | 2015-12-02 17:46

@Launcher: 到服务器的,“可以通过统计到目标网站的上行和下行数据量来实现” == “统计终端程序运行时所有的上行和下行数据量” ?

Gifur | 园豆:73 (初学一级) | 2015-12-02 18:43

@scau_Joseph: 这就好办了啊!你在你的终端程序中增加一个性能计数器,统计每秒 socket send 和 recv 的字节数,实时更新,这样既能真实反映网络状况,又不增加额外的流量。

Launcher | 园豆:45045 (高人七级) | 2015-12-03 10:07

@Launcher: 如果我的终端程序在没工作的状态那么我就不能监测到当前的网络状况了。

谢谢一如既往的回答@Launcher

Gifur | 园豆:73 (初学一级) | 2015-12-03 10:18

@scau_Joseph: 如果你的程序关闭后,你还想监测当前的网络状态,那么你就需要再写一个程序,此程序可以作为服务或普通进程一直驻留在系统中,在你的应用程序开启时,它可以通过应用程序来获取速率;当你的应用程序关闭后,它就必须自己选择测试的方式,比如发送和接收少量的数据包。

Launcher | 园豆:45045 (高人七级) | 2015-12-03 10:26

又回到原谅的问题了,“发送和接收少量的数据包” 这个用ICMP请求回应报文实现不可以麽?同样是发少量的字节,就看少量是少到多少了,如果我用之前写的服务-客户端形式,还得再服务器上放一个服务端线程。

Gifur | 园豆:73 (初学一级) | 2015-12-03 14:54

@scau_Joseph: 你用什么协议,发多少数据,我都没意见。我只是告诉你单纯的测速,都是通过一个较大的数据量和较长的时间来实现的,这样才比较准确。以具有四个通道的高速收费站为例,如果只有一辆车通过,你一秒统计一次,就是 1 辆每秒;如果有四辆车通过,你一秒统计一次,就是 4 辆每秒。你认为哪个结果最接近真实值?

 

网速统计,在小数据量上的误差非常大,因为传输 1 个字节的耗时不是传输 1000 个字节的耗时的 1/1000。通常小数量会得到非常大的速率,而实际上不是这样。同时,字节数太少,API 调用耗时占比就会增大,测试结果就更不能反映实际的速率。

Launcher | 园豆:45045 (高人七级) | 2015-12-03 16:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册