Jack Jiang

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

          本系列文章引用了騰訊技術專家樊華恒《海量之道系列文章之弱聯網優化》的部分章節,感謝原作者。


          1、前言


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

          上述IM產品、功能和概念,在開發者間討論時,無一例外都會被打上“移動端”這個特性,從網絡通信的角度來說,這個特性的本質可以認為就是移動網絡的特性。

          以文件發送為例,傳統的PC端IM(可以簡單地理解為傳統有線網絡上的IM)可以直接實時點對點發送(理論上無需經過服務器中轉)。

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

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

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

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

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

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

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

          另外,《現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障》這篇文章也提到了本文所闡述的相關內容,強烈建議閱讀。

          學習交流:

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

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

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


          2、系列文章


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


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

          3、相關文章


          1)關于網絡通信的基礎文章:


          2)涉及移動端網絡特性的文章:


          4、正文引言


          移動互聯網顛覆著我們的生活方式,這個每時每刻伴隨著我們的網絡到底有哪些特點,又是如何影響我們接入信息世界的體驗呢。

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

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

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

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

          有因有果,有道有術,不入虎穴焉得虎子,不扯了,進入正題。

          5、移動網絡的特點


          理論上說,我們看到移動網絡有如下三個典型特點:

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

          為什么?

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

          根據“圖一:無線網絡鏈路示意”所示內容,我們可以得到以下信息。

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

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

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

          移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”_2.jpg 
          ▲ 圖二:有線互聯網和移動互聯網網絡質量差異

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

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

          如果我們再結合用戶在移動狀態下2G/3G/4G/WIFI的基站/AP之間,或者不同網絡制式之間頻繁的切換,情況就更加復雜了。

          6、移動網絡為什么“慢”


          我們在移動網絡的特點介紹中,很容易的得到了三個關鍵字:

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

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

          當然有,汗牛充棟、罄竹難書:

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

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

          更多有關TCP的基礎理論性文章,可以看看下面的文章:


          7、針對移動網絡“弱”和“慢”的特點,有優化辦法嗎?


          答案是:有。

          在移動互聯網時代,對我們的產品和技術追求提出了更高的挑戰,如何從容和優雅的面對,需要先從精神上做好充分的準備,用一套統一的思考和行動準則武裝到牙齒。

          從來就沒有什么救世主,只有程序猿征服一切技術問題的夢想在空中飄蕩。屢敗屢戰,把過往實踐中的經驗教訓總結出來,共同研討。針對移動網絡的特點,我們總結一些實用方法,請看下篇《移動端IM開發者必讀(二):針對移動弱網絡特性的優化方法總結》。

          (意猶未盡?請看下篇:《移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結》 )

          附錄:更多計算機網絡方面的資料


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

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


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


          網站導航:
           
          Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 门头沟区| 榆树市| 上高县| 姚安县| 涿鹿县| 隆尧县| 湟源县| 灌云县| 北票市| 郸城县| 五寨县| 延长县| 宝清县| 大余县| 措美县| 姚安县| 固阳县| 怀仁县| 页游| 大连市| 嘉定区| 益阳市| 福鼎市| 望江县| 社会| 临海市| 山丹县| 康乐县| 沈丘县| 大石桥市| 蓝田县| 江川县| 延寿县| 环江| 嘉鱼县| 房产| 福建省| 老河口市| 清水河县| 尼木县| 富宁县|