Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 506, comments - 13, trackbacks - 0, articles - 1

          本系列文章引用了騰訊技術(shù)專家樊華恒《海量之道系列文章之弱聯(lián)網(wǎng)優(yōu)化》的部分章節(jié),感謝原作者。


          1、前言


          隨著移動互聯(lián)網(wǎng)的高速發(fā)展,移動端IM以移動網(wǎng)絡(luò)作為物理通信載體早已深入人心,這其中的成功者就包括微信、手機(jī)QQ、支付寶(從即時通訊產(chǎn)品的角度來看,支付寶已經(jīng)算的上是半個IM了)等等,也為移動端即時通訊開發(fā)者帶來了各種可以參考的標(biāo)桿功能和理念:語音對講、具有移動端體驗(yàn)特性的圖片消息、全時在線的概念、真正突破物理體驗(yàn)的實(shí)時通知等。

          上述IM產(chǎn)品、功能和概念,在開發(fā)者間討論時,無一例外都會被打上“移動端”這個特性,從網(wǎng)絡(luò)通信的角度來說,這個特性的本質(zhì)可以認(rèn)為就是移動網(wǎng)絡(luò)的特性。

          以文件發(fā)送為例,傳統(tǒng)的PC端IM(可以簡單地理解為傳統(tǒng)有線網(wǎng)絡(luò)上的IM)可以直接實(shí)時點(diǎn)對點(diǎn)發(fā)送(理論上無需經(jīng)過服務(wù)器中轉(zhuǎn))。

          但在移動端IM里我們并不能這么干,原因是:

          • 1)3G/4G/5G網(wǎng)絡(luò)下P2P成功率并沒有那么高(因?yàn)槭菍ΨQ型NAT,詳見《通俗易懂:快速理解P2P技術(shù)中的NAT穿透原理》);
          • 2)移動網(wǎng)絡(luò)的信號跳變、抖動很難預(yù)測(甚至在你轉(zhuǎn)身的瞬間,信號可能會立馬由強(qiáng)變?nèi)酰?/li>
          • 3)移動網(wǎng)絡(luò)的延遲、丟包、重傳等導(dǎo)致通信體驗(yàn)很差(就像從國內(nèi)訪問國外的網(wǎng)站那種“慢”,體驗(yàn)上是相似的);
          • 4)延遲、丟包、重傳帶來的另一個后果就是電量消耗、流量消耗過大,這些都是不可接受的;
          • 5)智能手機(jī)(主要是Android、iOS)的系統(tǒng)省電策略,導(dǎo)致網(wǎng)絡(luò)可能被阻斷,甚至進(jìn)程被殺死,功能沒辦法在后臺繼續(xù)工作。

          所以,正是移動網(wǎng)絡(luò)的這些特性,使得原本在傳統(tǒng)PC端再普通不過的功能(比如上面說的文件發(fā)送),在移動端IM中卻不得不另想辦法:以文件發(fā)送為例——主流的移動端IM現(xiàn)在都是使用服務(wù)器中轉(zhuǎn)來搞定的。使用類似技術(shù)實(shí)現(xiàn)的功能,還有移動端IM里語音短消息的AMR音頻小文件、圖片消息的圖片文件等。

          那么回歸到本文的正題:移動網(wǎng)絡(luò)為什么會存在“弱”和“慢”這樣的特性?

          這個問題網(wǎng)絡(luò)工程師來回答最為合適,對但于應(yīng)用層的程序員來說,有關(guān)移動網(wǎng)絡(luò)的理論太生澀枯燥,太難理解了。而對于網(wǎng)絡(luò)工程師來說,他們也不理解“你們這些程序員到底在糾結(jié)移動網(wǎng)絡(luò)的什么鬼?”。

          就像黃品源的那首《那么愛你為什么》的歌曲里面莫文蔚的一段念白:“我講又講不清,你聽又聽不懂......”。這大概是應(yīng)用層程序員很難能找到通俗易懂的有關(guān)移動網(wǎng)絡(luò)資料的原因吧。

          所以本文的目的,就是希望以通俗易懂的語言,幫助移動端IM開發(fā)者更好地理解移動網(wǎng)絡(luò)的各種特性,使得開發(fā)出的功能能更好地適應(yīng)移動網(wǎng)絡(luò),給用戶帶來更好的使用體驗(yàn)。

          另外,《現(xiàn)代移動端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請求速度、弱網(wǎng)適應(yīng)、安全保障》這篇文章也提到了本文所闡述的相關(guān)內(nèi)容,強(qiáng)烈建議閱讀。

          學(xué)習(xí)交流:

          - 即時通訊開發(fā)交流3群:185926912[推薦]

          - 移動端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動端IM

          (本文同步發(fā)布于:http://www.52im.net/thread-1587-1-1.html


          2、系列文章


          ▼ 本文是《移動端IM開發(fā)者必讀》系列文章的第1篇:


          如果您是IM開發(fā)初學(xué)者,強(qiáng)烈建議首先閱讀《新手入門一篇就夠:從零開發(fā)移動端IM》。

          3、相關(guān)文章


          1)關(guān)于網(wǎng)絡(luò)通信的基礎(chǔ)文章:


          2)涉及移動端網(wǎng)絡(luò)特性的文章:


          4、正文引言


          移動互聯(lián)網(wǎng)顛覆著我們的生活方式,這個每時每刻伴隨著我們的網(wǎng)絡(luò)到底有哪些特點(diǎn),又是如何影響我們接入信息世界的體驗(yàn)?zāi)亍?/span>

          以下場景如似曾相識,敬請對號入座:

          1)上班路上收到朋友分享的一張美女圖片,縮略圖目測衣服用料相當(dāng)節(jié)儉,立馬興奮點(diǎn)開欲詳細(xì)鉆研,卻發(fā)現(xiàn)怎么脫也脫不下來,不對,是“拖”不是“脫”,仰望蒼天,欲哭無淚。

          2)進(jìn)電梯前收到女友一條消息:“你到底愛不愛我!”,當(dāng)然馬上回復(fù)“必須的必!”,電梯門關(guān)閉了,北風(fēng)那個吹,菊花那個轉(zhuǎn),等到春暖梯開,滿屏都是女友的問候“在嗎!”、“這都要想那么久!”、“跟哪個MM聊天呢!”、“我生氣了!”、“你是好人,再見!”,看著自己的回復(fù)剛剛發(fā)送成功,停在最后一行,整個互動信息一氣呵成,都是眼淚。

          3)和朋友聚餐,菜端上先拍照分享,再大快朵頤,明明坐在對面,偏偏還得用手機(jī)聊天,世界最遠(yuǎn)的距離,莫過于我們坐在一起,卻只能用手指切磋。

          有因有果,有道有術(shù),不入虎穴焉得虎子,不扯了,進(jìn)入正題。

          5、移動網(wǎng)絡(luò)的特點(diǎn)


          理論上說,我們看到移動網(wǎng)絡(luò)有如下三個典型特點(diǎn):

          • 1)移動狀態(tài)網(wǎng)絡(luò)信號不穩(wěn)定,高時延、易抖動丟包、通道狹窄;
          • 2)移動狀態(tài)網(wǎng)絡(luò)接入類型和接入點(diǎn)變化頻繁;
          • 3)移動狀態(tài)用戶使用高頻化、碎片化、非WIFI流量敏感。

          為什么?

          參考【圖一 無線網(wǎng)絡(luò)鏈路示意】,我們嘗試從物理上追根溯源:
          移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡(luò)的“弱”和“慢”_1.jpg 
          ▲ 圖一:無線網(wǎng)絡(luò)鏈路示意

          根據(jù)“圖一:無線網(wǎng)絡(luò)鏈路示意”所示內(nèi)容,我們可以得到以下信息。

          第一、直觀印象是通訊鏈路長而復(fù)雜:從(移動)終端設(shè)備到應(yīng)用服務(wù)器之間,相較有線互聯(lián)網(wǎng),要多經(jīng)過基站、核心網(wǎng)、WAP網(wǎng)關(guān)(好消息是WAP網(wǎng)關(guān)正在被依法取締)等環(huán)節(jié),這就像送快遞,中間環(huán)節(jié)越多就越慢,每個中轉(zhuǎn)站的服務(wù)質(zhì)量和服務(wù)效率不一,每次傳遞都要重新交接入庫和分派調(diào)度,一不小心還能把包裹給弄丟了。

          第二、這是個資源受限網(wǎng)絡(luò):移動設(shè)備接入基站空中信道數(shù)量非常有限,信道調(diào)度更是相當(dāng)復(fù)雜,如何復(fù)雜就不展開了,莫文蔚那首歌詞用在這里正合適:“我講又講不清,你聽又聽不懂......”,最最重要的是分配的業(yè)務(wù)信道單元如果1秒鐘不傳數(shù)據(jù)就會立馬被釋放回收,六親不認(rèn)童叟無欺。

          第三、這個鏈條前端(無線端)是高時延(除某些WIFI場景外)、低帶寬(除某些WIFI場景外)、易抖動的網(wǎng)絡(luò):無線各種制式網(wǎng)絡(luò)帶寬上限都比較低而傳輸時延比較大(參見【表一 運(yùn)營商移動信號制式帶寬標(biāo)準(zhǔn)】),并且,沒事就能丟個包裹玩玩,最最重要的是,距離基站的遠(yuǎn)近,把玩手機(jī)的角度、地下室的深度等等都能影響無線信號的質(zhì)量,讓包裹在空中飛一會,再飛一會......。這些因素也造成了移動互聯(lián)網(wǎng)網(wǎng)絡(luò)質(zhì)量穩(wěn)定性差、接入變化頻繁,與有線互聯(lián)網(wǎng)對比更是天上人間的差別,從【圖二 有線互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)網(wǎng)絡(luò)質(zhì)量差異】中可以有更直觀的感受。

          移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡(luò)的“弱”和“慢”_2.jpg 
          ▲ 圖二:有線互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)網(wǎng)絡(luò)質(zhì)量差異

          【表一 運(yùn)營商移動信號制式帶寬標(biāo)準(zhǔn)】數(shù)據(jù)來自互聯(lián)網(wǎng)各種百科,定性不定量,僅供參考;
          移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡(luò)的“弱”和“慢”_未標(biāo)題-1.gif 
           【表一-運(yùn)營商移動信號制式帶寬標(biāo)準(zhǔn)】-清晰圖.rar (252.64 KB , 下載次數(shù): 0 ) 

          第四、這是個局部封閉網(wǎng)絡(luò):空中信道接入后要做鑒權(quán)、計(jì)費(fèi)等預(yù)處理,WAP網(wǎng)絡(luò)甚至還要做數(shù)據(jù)過濾后再轉(zhuǎn)發(fā),在業(yè)務(wù)數(shù)據(jù)有效流動前太多中間代理人求參與,效率可想而知。產(chǎn)品研發(fā)為什么又慢又亂,廣大程序猿心里明鏡似的;最最重要的是,不同運(yùn)營商之間跨網(wǎng)傳輸既貴且慢又有諸多限制,聰明的運(yùn)營商便也用上了緩存技術(shù),催生了所謂網(wǎng)絡(luò)“劫持”的現(xiàn)象。

          如果我們再結(jié)合用戶在移動狀態(tài)下2G/3G/4G/WIFI的基站/AP之間,或者不同網(wǎng)絡(luò)制式之間頻繁的切換,情況就更加復(fù)雜了。

          6、移動網(wǎng)絡(luò)為什么“慢”


          我們在移動網(wǎng)絡(luò)的特點(diǎn)介紹中,很容易的得到了三個關(guān)鍵字:

          • 1)“高時延”;
          • 2)“易抖動”;
          • 3)“通道窄”。

          這些物理上的約束確實(shí)限制了我們移動沖浪時的速度體驗(yàn),那么,還有別的因素嗎。

          當(dāng)然有,汗牛充棟、罄竹難書:

          • 1)DNS解析,這個在有線互聯(lián)網(wǎng)上司空見慣的服務(wù),在移動互聯(lián)網(wǎng)上變成了一種負(fù)擔(dān),一個往復(fù)最少1s,還別提遇到移動運(yùn)營商DNS故障時的尷尬;
          • 2)鏈路建立成本暨TCP三次握手,在一個高時延易抖動的網(wǎng)絡(luò)環(huán)境,并且大部分業(yè)務(wù)數(shù)據(jù)交互限于一個HTTP的往返,建鏈成本尤其顯著;
          • 3)TCP協(xié)議層慢啟動、擁塞控制、超時重傳等機(jī)制在移動網(wǎng)絡(luò)下參數(shù)設(shè)定的不適宜;
          • 4)不好的產(chǎn)品需求規(guī)定或粗放的技術(shù)方案實(shí)現(xiàn),使得不受控的大數(shù)據(jù)包、頻繁的數(shù)據(jù)網(wǎng)絡(luò)交互等,在移動網(wǎng)絡(luò)側(cè)TCP鏈路上傳輸引起的負(fù)荷;
          • 5)不好的協(xié)議格式和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),使得協(xié)議封裝和解析計(jì)算耗時、耗內(nèi)存、耗帶寬,甚至協(xié)議格式臃腫冗余,使得網(wǎng)絡(luò)傳輸效能低下;
          • 6)不好的緩存設(shè)計(jì),使得數(shù)據(jù)的加載和渲染計(jì)算耗時、耗內(nèi)存、耗帶寬。

          現(xiàn)在終于知道時間都去哪了,太浪費(fèi)太奢侈,還讓不讓人愉快的玩手機(jī)了。天下武功,唯快不破,我們一起踏上“快”的探索之路吧。

          更多有關(guān)TCP的基礎(chǔ)理論性文章,可以看看下面的文章:


          7、針對移動網(wǎng)絡(luò)“弱”和“慢”的特點(diǎn),有優(yōu)化辦法嗎?


          答案是:有。

          在移動互聯(lián)網(wǎng)時代,對我們的產(chǎn)品和技術(shù)追求提出了更高的挑戰(zhàn),如何從容和優(yōu)雅的面對,需要先從精神上做好充分的準(zhǔn)備,用一套統(tǒng)一的思考和行動準(zhǔn)則武裝到牙齒。

          從來就沒有什么救世主,只有程序猿征服一切技術(shù)問題的夢想在空中飄蕩。屢敗屢戰(zhàn),把過往實(shí)踐中的經(jīng)驗(yàn)教訓(xùn)總結(jié)出來,共同研討。針對移動網(wǎng)絡(luò)的特點(diǎn),我們總結(jié)一些實(shí)用方法,請看下篇《移動端IM開發(fā)者必讀(二):針對移動弱網(wǎng)絡(luò)特性的優(yōu)化方法總結(jié)》。

          (意猶未盡?請看下篇:《移動端IM開發(fā)者必讀(二):史上最全移動弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)》 )

          附錄:更多計(jì)算機(jī)網(wǎng)絡(luò)方面的資料


          TCP/IP詳解 - 第11章·UDP:用戶數(shù)據(jù)報協(xié)議
          TCP/IP詳解 - 第17章·TCP:傳輸控制協(xié)議
          TCP/IP詳解 - 第18章·TCP連接的建立與終止
          TCP/IP詳解 - 第21章·TCP的超時與重傳
          技術(shù)往事:改變世界的TCP/IP協(xié)議(珍貴多圖、手機(jī)慎點(diǎn))
          通俗易懂-深入理解TCP協(xié)議(上):理論基礎(chǔ)
          通俗易懂-深入理解TCP協(xié)議(下):RTT、滑動窗口、擁塞處理
          理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過程詳解
          理論聯(lián)系實(shí)際:Wireshark抓包分析TCP 3次握手、4次揮手過程
          計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)
          UDP中一個包的大小最大能多大?
          P2P技術(shù)詳解(一):NAT詳解——詳細(xì)原理、P2P簡介
          P2P技術(shù)詳解(二):P2P中的NAT穿越(打洞)方案詳解
          P2P技術(shù)詳解(三):P2P技術(shù)之STUN、TURN、ICE詳解
          通俗易懂:快速理解P2P技術(shù)中的NAT穿透原理
          高性能網(wǎng)絡(luò)編程(一):單臺服務(wù)器并發(fā)TCP連接數(shù)到底可以有多少
          高性能網(wǎng)絡(luò)編程(二):上一個10年,著名的C10K并發(fā)連接問題
          高性能網(wǎng)絡(luò)編程(三):下一個10年,是時候考慮C10M并發(fā)問題了
          高性能網(wǎng)絡(luò)編程(四):從C10K到C10M高性能網(wǎng)絡(luò)應(yīng)用的理論探索
          不為人知的網(wǎng)絡(luò)編程(一):淺析TCP協(xié)議中的疑難雜癥(上篇)
          不為人知的網(wǎng)絡(luò)編程(二):淺析TCP協(xié)議中的疑難雜癥(下篇)
          不為人知的網(wǎng)絡(luò)編程(三):關(guān)閉TCP連接時為什么會TIME_WAIT、CLOSE_WAIT
          不為人知的網(wǎng)絡(luò)編程(四):深入研究分析TCP的異常關(guān)閉
          不為人知的網(wǎng)絡(luò)編程(五):UDP的連接性和負(fù)載均衡
          不為人知的網(wǎng)絡(luò)編程(六):深入地理解UDP協(xié)議并用好它
          不為人知的網(wǎng)絡(luò)編程(七):如何讓不可靠的UDP變的可靠?
          網(wǎng)絡(luò)編程懶人入門(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)
          網(wǎng)絡(luò)編程懶人入門(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)
          網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠
          網(wǎng)絡(luò)編程懶人入門(四):快速理解TCP和UDP的差異
          網(wǎng)絡(luò)編程懶人入門(五):快速理解為什么說UDP有時比TCP更有優(yōu)勢
          技術(shù)掃盲:新一代基于UDP的低延時網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解
          讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享
          現(xiàn)代移動端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請求速度、弱網(wǎng)適應(yīng)、安全保障
          聊聊iOS中網(wǎng)絡(luò)編程長連接的那些事
          移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡(luò)的“弱”和“慢”
          移動端IM開發(fā)者必讀(二):史上最全移動弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)
          >> 更多同類文章 ……
          (本文同步發(fā)布于:http://www.52im.net/thread-1587-1-1.html

          作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
          出處:http://www.52im.net/space-uid-1.html
          交流:歡迎加入即時通訊開發(fā)交流群 215891622
          討論:http://www.52im.net/
          Jack Jiang同時是【原創(chuàng)Java Swing外觀工程BeautyEye】【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
          本博文 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處(也可前往 我的52im.net 找到我)。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 桐庐县| 临沭县| 松滋市| 新巴尔虎右旗| 新竹市| 明水县| 喀什市| 大洼县| 台山市| 久治县| 泰和县| 潜山县| 佛冈县| 烟台市| 利津县| 屯昌县| 韶山市| 南木林县| 花莲市| 南投市| 雅江县| 堆龙德庆县| 泰安市| 安阳县| 寻乌县| 通榆县| 长汀县| 武安市| 都兰县| 诏安县| 蒙城县| 漾濞| 绍兴市| 和平区| 枝江市| 长寿区| 阿瓦提县| 老河口市| 沁水县| 浮山县| 蛟河市|