iOS 如何进行网络测速

作者: Joy___ | 来源:发表于2018-01-20 11:47 被阅读2096次

对于网络测速的需求还是比较常见的,比如常见的手机管家、360 Wi-Fi 等 App 都有网络测速的功能。近期由于业务需求也涉及到网络测速这块内容,同时自己好久没更新博客了,所以来写一下网络测速这块的一个简单总结。

什么是网络测速?

其实听到网络测速这个需求,第一个想到的就是 ping,在群里讨论的时候也有同学说到 ping 一下不就可以了吗?ping 和网速有什么关联和区别呢?

  • ping:它的全称是 Packet Internet Groper,用来测试网络是否连通,以及响应时间是多少,通常客户端也都有配置一个叫做网络诊断的功能,其实就是用到了这个 ping

  • 网速:顾名思义,也就是网络速度的意思。稍微专业来讲就是上传和下载时,每秒钟可传送的 最大数据量 ,数据量的大小一般用 KB、M来衡量。

看到上面的解释,其实就明白了。ping 测的是点到点的网络延迟,而网速指的是点到点之间单位时间内的传输数据量。这个数据又可以细分为上传数据和下载数据,理论上他们的速度是一致的,但是运营商会在其中做一些手脚,导致上行的宽带一般偏小于下行的宽带。

我们平时会使用 Shadowrocket 等利器来进行翻墙上网,这个软件会显示你 Wi-Fi 和 4G 的流量消耗,同时会显示你每秒钟你的上行和下行流量是多少。这个原理其实也很简单,可以直接调用系统的接口来获取网卡的流量数据。这里显示的每秒钟的上行和下行流量,只能代表此时的流量消耗,并不能代表当前的网速是多少,网速应该是充分利用带宽后,单位时间内可以传输的最大数据量

常见的网络测速方案

通过调研发现,目前常见的网络测速方案只有两种:

  • 方案1:通过上传和下载数据包,使用 TotalSize / TotalTime 来计算真实的上传和下载速率是多少

  • 方案2:通过读取网卡数据来计算,读取上一秒的整体流量消耗 T1,然后读取当前的流量消耗 T2,那么 T2 - T1 其实可以表示为当前的一个网速情况。同时这个流量数据是可以区分蜂窝网络、Wi-Fi的,也可以区分哪些是上行流量,那些是下行流量。

两种方案各有优劣,可以在合适的场合来选择对应的方案

  • 第一种方案感觉是比较准确,这个时候是真实的在下载或上传数据,比较充分的利用了当前的带宽,计算的网速也比较接近真实的网速值。但是蜂窝网络下,会消耗用户的少量流量。

  • 第二种方案在下载和上传东西时,计算的值和第一种方案比较接近。但是如果当前系统内没有 App 在被使用,处于静止状态的话,其实当前读取的流量值是比较小的,无法反映出网速情况,但是可以实时反映流量消耗状况。

对于两种方案,我写了一个简单的 Demo 放在了https://github.com/joy0304/Joy-Demo/tree/master/LDSpeedTest,这个只是一个很粗糙的 Demo,没有区分 Wi-Fi 和 蜂窝网络,同时也只计算了下行的网速,如果要在项目中使用,需要完善后才可以上线使用。

延伸

其实上面谈到的真实下载或上传数据来进行测速,这个只是单个 TCP 连接的情况,如果多个 TCP 连接的话,肯定对带宽的一个利用情况会比单个 TCP 连接更加高效,测出来的网速值也更加准确。

同时由于 TCP 和 UDP 协议本身特点的差异,TCP 测速和 UDP 测速的结果也会不同,可以根据业务的要求来选择恰当的方案。对于网络测速,业界已经有很多强大的工具,有兴趣的话可以体验下 iperf 等工具。

相关文章

  • iOS 如何进行网络测速

    iOS 如何进行网络测速

  • iOS 如何进行网络测速

    对于网络测速的需求还是比较常见的,比如常见的手机管家、360 Wi-Fi 等 App 都有网络测速的功能。近期由于...

  • iOS炫酷动画图案、多种选择器、网络测速、滑动卡片效果等源码

    iOS精选源码 对网络进行测速 自实现大标题,配合原生骨架屏demo 简单方便的pickerVIew记录数据 LZ...

  • Android网络测速

    Android 8.1系统新增网络测速功能自动对附近的WiFi进行测速测试,如果附近的无线网络处于加密状态,Goo...

  • 网络测速

    对于网络测速的需求还是比较常见的,比如常见的手机管家、360 Wi-Fi 等 App 都有网络测速的功能 ping...

  • iOS开发 获取wifi信息

    最近在做测速SDK开发,对iOS端wifi进行了调研,分享一下调研成果从 iOS 4.1 开始,Apple 就提供...

  • 网络测速插件speedtest

    当上网速度很慢的时候, 人们想到的第一件事就进行网络测速,在window上, 只要你安装了360全家桶, 测速功能...

  • 利用category定义一段宏代码

    近期在对 iOS 页面生命周期进行测速跟踪时,需要在 UIVIewController 的生命周期方法里加入打点代...

  • 测速工具还是专业无广告的用的爽!

    相信有很多网友都下载过网络测速软件来测试WiFi或者诊断网络,比较出名的像speedtest,是一个专业的网络测速...

  • iOS测速

    前言 最近遇到一个需求(其实是闲着无聊),需要在客户端上实时显示当前的上行速度和下行速度和网络类型。目前关于iOS...

网友评论

本文标题:iOS 如何进行网络测速

本文链接:https://www.haomeiwen.com/subject/ojozoxtx.html