iOS 如何进行网络测速
點擊上方“程序員大咖”,選擇“置頂公眾號”
關(guān)鍵時刻,第一時間送達!
對于網(wǎng)絡(luò)測速的需求還是比較常見的,比如常見的手機管家、360 Wi-Fi 等 App 都有網(wǎng)絡(luò)測速的功能。近期由于業(yè)務(wù)需求也涉及到網(wǎng)絡(luò)測速這塊內(nèi)容,同時自己好久沒更新博客了,所以來寫一下網(wǎng)絡(luò)測速這塊的一個簡單總結(jié)。
什么是網(wǎng)絡(luò)測速?
其實聽到網(wǎng)絡(luò)測速這個需求,第一個想到的就是 ping,在群里討論的時候也有同學說到 ping 一下不就可以了嗎?ping 和網(wǎng)速有什么關(guān)聯(lián)和區(qū)別呢?
ping:它的全稱是 Packet Internet Groper,用來測試網(wǎng)絡(luò)是否連通,以及響應(yīng)時間是多少,通常客戶端也都有配置一個叫做網(wǎng)絡(luò)診斷的功能,其實就是用到了這個 ping
網(wǎng)速:顧名思義,也就是網(wǎng)絡(luò)速度的意思。稍微專業(yè)來講就是上傳和下載時,每秒鐘可傳送的 最大數(shù)據(jù)量 ,數(shù)據(jù)量的大小一般用 KB、M來衡量。
看到上面的解釋,其實就明白了。ping 測的是點到點的網(wǎng)絡(luò)延遲,而網(wǎng)速指的是點到點之間單位時間內(nèi)的傳輸數(shù)據(jù)量。這個數(shù)據(jù)又可以細分為上傳數(shù)據(jù)和下載數(shù)據(jù),理論上他們的速度是一致的,但是運營商會在其中做一些手腳,導(dǎo)致上行的寬帶一般偏小于下行的寬帶。
我們平時會使用 Shadowrocket 等利器來進行翻墻上網(wǎng),這個軟件會顯示你 Wi-Fi 和 4G 的流量消耗,同時會顯示你每秒鐘你的上行和下行流量是多少。這個原理其實也很簡單,可以直接調(diào)用系統(tǒng)的接口來獲取網(wǎng)卡的流量數(shù)據(jù)。這里顯示的每秒鐘的上行和下行流量,只能代表此時的流量消耗,并不能代表當前的網(wǎng)速是多少,網(wǎng)速應(yīng)該是充分利用帶寬后,單位時間內(nèi)可以傳輸?shù)?strong>最大數(shù)據(jù)量
常見的網(wǎng)絡(luò)測速方案
通過調(diào)研發(fā)現(xiàn),目前常見的網(wǎng)絡(luò)測速方案只有兩種:
方案1:通過上傳和下載數(shù)據(jù)包,使用 TotalSize / TotalTime 來計算真實的上傳和下載速率是多少
方案2:通過讀取網(wǎng)卡數(shù)據(jù)來計算,讀取上一秒的整體流量消耗 T1,然后讀取當前的流量消耗 T2,那么 T2 - T1 其實可以表示為當前的一個網(wǎng)速情況。同時這個流量數(shù)據(jù)是可以區(qū)分蜂窩網(wǎng)絡(luò)、Wi-Fi的,也可以區(qū)分哪些是上行流量,那些是下行流量。
兩種方案各有優(yōu)劣,可以在合適的場合來選擇對應(yīng)的方案
第一種方案感覺是比較準確,這個時候是真實的在下載或上傳數(shù)據(jù),比較充分的利用了當前的帶寬,計算的網(wǎng)速也比較接近真實的網(wǎng)速值。但是蜂窩網(wǎng)絡(luò)下,會消耗用戶的少量流量。
第二種方案在下載和上傳東西時,計算的值和第一種方案比較接近。但是如果當前系統(tǒng)內(nèi)沒有 App 在被使用,處于靜止狀態(tài)的話,其實當前讀取的流量值是比較小的,無法反映出網(wǎng)速情況,但是可以實時反映流量消耗狀況。
對于兩種方案,我寫了一個簡單的 Demo 放在了https://github.com/joy0304/Joy-Demo/tree/master/LDSpeedTest,這個只是一個很粗糙的 Demo,沒有區(qū)分 Wi-Fi 和 蜂窩網(wǎng)絡(luò),同時也只計算了下行的網(wǎng)速,如果要在項目中使用,需要完善后才可以上線使用。
延伸
其實上面談到的真實下載或上傳數(shù)據(jù)來進行測速,這個只是單個 TCP 連接的情況,如果多個 TCP 連接的話,肯定對帶寬的一個利用情況會比單個 TCP 連接更加高效,測出來的網(wǎng)速值也更加準確。
同時由于 TCP 和 UDP 協(xié)議本身特點的差異,TCP 測速和 UDP 測速的結(jié)果也會不同,可以根據(jù)業(yè)務(wù)的要求來選擇恰當?shù)姆桨浮τ诰W(wǎng)絡(luò)測速,業(yè)界已經(jīng)有很多強大的工具,有興趣的話可以體驗下 iperf 等工具。
嗨,遇見你真
作者:Joy___
https://www.jianshu.com/p/9f67b7716b9d
程序員大咖整理發(fā)布,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)
【點擊成為Python大神】
總結(jié)
以上是生活随笔為你收集整理的iOS 如何进行网络测速的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat集群测试
- 下一篇: S50非接触式IC卡 学习笔记