Android網路優化 應用層策略

2021-09-10 14:18:02 字數 2940 閱讀 6026

網路效能指標:

1.建立連線的速度  2.傳輸速度  3.到達率(tcp/ip底層已經有錯誤重傳機制,但是並不是專門為移動端設計的)4.長連線的存活率

優化切入口:

1.dns優化(一般是優化的首選),使用httpdns替代localdns

dns是指根據網域名稱查出ip位址,是http協議的前提,所以網路優化的第一步就是dns優化。

dns優化主要體現在兩點:1.安全性:減少或避免由於dns劫持造成服務不可用。2.速度:解決由於dns排程不準確影響網路效能(1.dns排程不準確2.運營商如果修改dns的ttl會導致dns修改生效延時,不同運營商實現細節不同,難以保證dns解析的耗時)

httpdns:大部分標準dns都是基於udp與dns伺服器互動的,httpdns則是利用http協議與dns伺服器互動,繞開了運營商的local dns服務,有效防止了網域名稱劫持,提高網域名稱解析效率,下圖是httpdns的原理。

2.連線重用,避免重複握手:

http1.1的keep-alive。

如果之前已經連線過,會盡量重用之前的連線(15s好像)(不一定滿足所有場景,國內比較樂觀,國外)

客戶端擁塞演算法與服務端延時演算法(服務端維護乙個擁塞佇列等待客戶端ack)衝突

解決方法:截包,看是不是每個請求都延時一定時間,如果有這種情況,可以選擇關閉tcp delay的開關(傳送方)

http2.0的多路復用。

進一步提公升復用率,支援一條連線同時處理多個請求,h2支援同一網域名稱的復用。

缺點:1.一條連線只支援同一網域名稱

2.後端支援h2需要額外的改造

針對h2的這些缺點,我們有如下應對措施:

1.不改造後端實現h2:在統一接入層做改造,統一接入層實現將資料轉換到h1再由h1**到網域名稱對應伺服器。

如圖:

3.壓縮與加密

上面是連線過程的優化,接下來是傳送接收的優化。

傳送與接收的優化可以通過減少傳輸的資料量實現。也就是資料壓縮

http請求的資料報括三部分:url,請求header,請求body。

1.如果我們的協議採用是http/2,那麼資料本身就是支援頭部壓縮技術,所以壓縮主要體現在url和body的壓縮。

2.url一般會攜帶很多引數,其中大部分引數是不變的,這些不變的引數只需上傳一次即可,其他請求可以在接入層進行擴充套件

3.請求body,網路傳輸中最流行的兩種資料序列化方式:json和protocol buffers。protocol buffers使用起來會比較複雜(需考慮使用成本),但是在壓縮率和序列化反序列化的效率上都遠勝json

資料壓縮還可以通過壓縮演算法實現,比如gzip,google的brotli和facebook的z-standard等。其中,最常見的是gzip。

經典問題:1.優化與優化碰一起的錯誤。

客戶端:防止擁塞的演算法,把所有小請求壓縮到一起,一次發過去,這樣的好處是可以避免每乙個小請求都有請求頭。

但是兩個一起用,兩邊都會在等對方的下乙個請求,所有請求延遲40ms或者200ms。這是乙個很經典的問題。

如何處理,截包,看是否每個請求都是固定的delay,如果有,關閉tcp delay的開關。

rfc1122規定迭代時間不超過500ms就可以

nagle演算法規定同一時間只能有乙個佇列在堵住請求,客戶服務端不能同時有擁堵佇列

2.慢啟動,防止擁塞:

tcp能傳送的包有限,不要在一開始把所有請求在開機一開始全部做了。

網路優化的手段是需要應變的,沒有萬金油的。

內容內嵌,把(小圖不超過2 3k)變成base64,直接decode乙個二進位制的流(比如請求微博,頭像這種小圖,可以在json裡面直接搞,一次請求獲得大量資訊,以後直接用)。比如,減少請求次數,不要在後台去載入

https可以防止dns劫持,https加密本身並不會加大多少開銷,但是換了https之後你還是會覺得有卡頓。最影響效能的是https的證書鏈。1.確認證書鏈上每個證書不是廢棄狀態,可信任狀態(而且dns伺服器很難去優化)

2.中間證書的頒發機構如果比較小(便宜),可能延遲很久。用錢可以解決。而okhttp3.0以上,證書這一塊已經做好了介面,新增網域名稱和sha就可以,不過有一定安全性問題。

如果想跳過dns,可以選擇ip直連。mars在這一塊有好些網路優化策略

okhttp的最新版本3.10.0,2023年2月25日發布,特性如下:

gzip可通過***實現
http2在realconnection中,就缺省會查詢伺服器是否支援,支援就開啟http2.0優化:

優點:1)採用二進位制格式傳輸資料,而非http1.1文字格式,二進位制格式在協議的解析和優化擴充套件上帶來了跟多的優勢和可能

2)多路復用,相同host的請求可以共用乙個socket連線

3)壓縮頭資訊(對訊息頭採用hpack進行壓縮傳輸,能夠節省訊息頭占用的網路流量,

http1.1每次請求,都會攜帶大量冗餘的頭資訊,浪費了很多寬頻資源)

4)請求劃分優先順序

5)支援伺服器端主動推送 

6)保持與http 1.1語義的向後相容

長連線心跳的意義:不僅是告訴服務端連線還在   防止nat超時才是主要的

確認網路狀態

錯誤重傳:tcp指數推幣,get請求可以隨意重傳,可能修改資料的請求(post,delect)要謹慎重試

短連線:http請求資料是報文(類似字串一樣的東西)  長連線:二進位製流

網路基礎 應用層

應用層 解決如何使用 響應狀態碼 http常見header content type 資料型別 text html等 content length body的 長度 host 客戶端告知伺服器,所請求的資源是在哪個主機的哪個端 口上 user agent 宣告 使用者的作業系統和瀏覽器版本資訊 re...

網路協議 應用層

基於tcp ip的應用層協議 1.1.1 請求行 1.1.2 首部 就是請求頭,例如accept charset content type cache control if modified since 1.1.3 正文實體 正式的資料報文 1.1.4 http請求的傳送 客戶端傳送請求,應用層傳二...

診斷網路層和應用層互動 傳輸層 應用層

計算機1 計算機2 應用層 應用層 傳輸層 段 傳輸層 網路層 包 網路層 資料鏈路層 幀 資料鏈路層 物理層 物理層 位ethernet頭 ip頭 tcp頭 應用層的頭 應用層資料 那麼我們通過ip和mac找到了一台特定的主機,如何標識這台主機上的應用程式,答案就是埠,埠即應用程式與網絡卡關聯的編...