導航:首頁 > 無線網路 > 網路類型SDK和WiFi

網路類型SDK和WiFi

發布時間:2023-08-19 23:52:25

A. 移動網路優化實踐

網路優化對於App產品的用戶體驗至關重要,與公司的運營和營收息息相關。這里列舉兩個公開的數據:

「 頁面載入超過3秒,57%的用戶會離開。 」

「 Amazon頁面載入延長1秒,一年就會減少16億美金營收。 」

首先是網路不可用的問題。主要由以下幾種原因導致:

GFW的攔截,原因你懂的。

DNS的劫持,埠的意外封禁等。

偏遠地區網路基礎設施比較差。

其次是網路載入時間長。原因包括: * 移動設備出於省電的目的,發出網路請求前需要先預熱通信晶元。 * 網路請求需要跨網路運營商,物理路徑長。 * HTTP請求是基於Socket設計的,請叢嫌求發起之前會經歷三次握手,斷開時又會進行四次揮手滲辯手。

最後是HTTP協議的數據安全問題。原因有: * HTTP協議的數據容易被抓包。Post包體數據經過加密能夠避免泄露,但協議中的URL和header部分還是會暴露給抓包軟體。HTTPS也面臨相似的問題。 * 運營商數據惡意篡改嚴重。如下圖中,App的網頁中就被運營商插入了廣告。

3

面對上述網路問題,我們首先在HTTP短連請求中進行了一些優化嘗試。

1. 告別 DNS,直接使用 IP 地址

如果是首次發送基於 HTTP 協議的網路服務,第一件事就是進行 DNS 域名解析,我們統計過 DNS 解析成功率只有 98%,剩下 2% 是解析失敗或者運營商 DNS 劫持(Local DNS 返回了非源站 IP 地址),同時 DNS 解析在 3G 下耗時 200 毫秒左右,4G 也有 100 毫秒左右,延遲明顯。我們基於 TCP 連接,直接跳過了 DNS 解析階段,使用內置 IP 列表的方式進行網路連接

 App 內置了一組 Server IP 列表,同時每個 IP 具備權重。每次建立新連接,會選擇權重最高的 IP 地址進行連接。App 啟動時,IP 列表的所有權重是相同的,此時會啟動一組 Ping 的操作,根據 Ping 值的延遲時間來計算 IP 的權重,這么做的原理是 Ping 值越小的 IP 地址,連接後的網路傳輸延遲也應該相對更小。業界也有使用 HTTP DNS 方式來解決 DNS 劫持問題,同時返回最合適用戶網路的 Server IP。然而 HTTP DNS 的開發和部署需要不小的開發成本,我們目前沒有使用。

內置 Server IP 列表也會被更新,每次 App 啟動後會有個 Mobile Config 服務(支持 TCP 和 HTTP 兩種網路類型服務)更新 Server IP 列表,同時支持不同產品線的 Server IP 列表更新。因此,傳統 DNS 解析能夠解決多 IDC 導流的功能也可以通過此方法解決。

2. Socket 連接優化,減少連灶則接時間

和 HTTP 協議中的 Keepalive 特性一樣,最直接減少網路服務時間的優化手段就是保持長連接。每次 TCP 三次握手連接需要耗費客戶端和服務端各一個 RTT(Round trip time)時間才能完成,就意味著 100-300 毫秒的延遲;TCP 協議自身應對網路擁塞的  Slow Start  機制也會影響新連接的傳輸性能。

App 使用了長連接池的方式來使用長連接,長連接池中維護了多個保持和服務端的 TCP 連接,每次網路服務發起後會從長連接池中獲取一個空閑長連接,完成網路服務後再將該 TCP 連接放回長連接池。我們沒有在單個 TCP 連接上實現 Pipeline 和 Multiplexing 機制,而是採用最簡單的 FIFO 機制,原因有二:

簡化 Mobile Gateway 的服務處理邏輯,減少開發成本;

在服務端同時返回多個響應時,如果某個響應報文非常大,使用多個長連接方式可以加快接收服務響應報文速度。

如果發起網路服務時長連接池中的 TCP 連接都正在被佔用,或者 TCP 長連接的網路服務失敗,則會發起一個 TCP 短連接實現網路服務。這里長連接和短連接的區別僅僅是服務完成後是否直接關閉這個 TCP 連接。

附: Pipeline 和 Multiplexing 是有區別的,如 HTTP/1.1 支持 Pipeline,客戶端能否同時發送多個請求,但是服務端返回響應時也要按照請求的發送次序來返回響應;SPDY 和 HTTP/2 協議支持 Multiplexing,即支持響應報文的亂序返回,發送請求和接收響應互不幹擾,因此避免了 HTTP/1.1 Pipeline 也沒能完全解決的 Head of line blocking 問題。

3. 弱網和網路抖動優化

App 引入了網路質量參數,通過網路類型和端到端 Ping 值進行計算,根據不同的網路質量改變網路服務策略:

調整長連接池個數:例如在 2G/2.5G Egde 網路下,會減少長連接池個數為 1(運營商會限制單個目標 IP 的 TCP 連接個數);WIFI 網路下可以增加長連接池個數等機制。

動態調整 TCP connection、write、read 的超時時間。

網路類型切換時,例如 WIFI 和移動網路、4G/3G 切換至 2G 時,客戶端 IP 地址會發生變化,已經連接上的 TCP Socket 註定已經失效(每個 Socket 對應一個四元組:源 IP、源 Port、目標 IP、目標 Port),此時會自動關閉所有空閑長連接,現有網路服務也會根據狀態自動重試。

4. 數據格式優化,減少數據傳輸量和序列化時間

傳輸數據量越小,在相同 TCP 連接上的傳輸時間越短。攜程 App 曾經使用自行設計的一套數據格式,後來和 Google ProtocolBuffer 對比後發現,特定數據類型下數據包大小會降低 20-30%,序列化和反序列化時間可以降低 10-20%,因此目前核心服務都在逐步遷移到到 ProtocolBuffer 格式。另外 Facebook 曾分享過他們使用  FlatBuffer 數據格式 提高性能的實踐,我們分析後不太適合攜程的業務場景因而沒有使用。

5. 引入重試機制,提升網路服務成功率

受 TCP 協議重傳機制來保證可靠傳輸的機制啟發,我們在應用層面也引入了重試機制來提高網路服務成功率。我們發現 90% 以上的的網路服務失敗都是由於網路連接失敗,此時再次重試是有機會連接成功並完成服務的;同時我們發現前面提到的網路服務生命周期處於 1 建立連接、序列化網路請求報文、發送網路請求這三個階段失敗時,都是可以自動重試的,因為我們可以確信請求還沒有達到服務端進行處理,不會產生冪等性問題(如果存在冪等性問題,會出現重復訂單等情況)。當網路服務需要重試時,會使用短連接進行補償,而不再使用長連接。

實現了上述機制後,攜程 App 網路服務成功率由原先的 95.3%+ 提升為如今的 99.5%+(這里的服務成功率是指端到端服務成功率,即客戶端採集的服務成功數除以請求總量計算的,並且不區分當前網路狀況),效果顯著。

6. 其他網路服務機制 & Tricks

攜程 App 也實現了其他一些網路服務機制方便業務開發,如網路服務優先順序機制,高優先順序服務優先使用長連接,低優先順序服務默認使用短連接;網路服務依賴機制,根據依賴關系自動發起或取消網路服務,例如主服務失敗時,子服務自動取消。

開發過程中我們也發現一些移動平台上的 TCP Socket 開發 tricks:

iOS 平台上的原生 Socket 介面創建連接並不會激活移動網路,這里原生 Socket 介面是指 POSIX Socket 介面,必須使用 CFSocket 或者再上層的網路介面嘗試網路連接時才會激活網路。因此攜程 App 啟動時會優先激活注冊一些第三方 SDK 以及發送 HTTP 請求來激活移動網路。

合理設置 Socket 的幾個參數:SO_KEEPALIVE 參數確保 TCP 連接保持(註:此 KeepAlive 是 TCP 中的屬性,和 HTTP 的 KeepAlive 是兩個場景概念),SO_NOSIGPIPE 參數關閉 SIGPIPE 事件,TCP_NODELAY 參數關閉 TCP Nagle 演算法的影響。

由於 iOS 要求支持 IPv6-Only 網路,因此使用原生 Socket 必須支持 IPv6。

如果使用 select 來處理 nonblocking IO 操作,確保正確處理不同的返回值和超時參數。

保持 TCP 長連接可用性的心跳機制:對於非 IM 類應用而言,心跳機制的作用不大,因為用戶會不斷觸發請求去使用 TCP 連接,尤其在攜程業務場景下,通過數據統計發現使用心跳與否對服務耗時和成功率影響極小,因此目前已經關閉心跳機制。原先的心跳機制是 TCP 長連接池中的空閑 TCP 連接每 60 秒發送一個心跳包到 Gateway,Gateway 返回一個心跳響應包,從而讓雙方確認 TCP 連接有效。

Hybrid 網路服務優化

攜程 App 中有相當比例的業務是使用 Hybrid 技術實現的,運行在 WebView 環境中,其中的所有網路服務(HTTP 請求)都是由系統控制的,我們無法掌控,也就無法進行優化,其端到端服務成功率也僅有 97% 左右(註:這里指頁面中業務邏輯發送的網路服務請求,而非靜態資源請求)。

我們採用了名為『TCP Tunnel for Hybrid』的技術方案來優化 Hybrid 網路服務,和傳統 HTTP 加速產品的方法不同,我們沒有採用攔截 HTTP 請求再轉發的方式,而是在攜程 Hybrid 框架中的網路服務層進行自動切換。

如圖所示,該技術方案的流程如下:

如果 App 支持 TCP Tunnel for Hybrid,Hybrid 業務在發網路服務時,會通過 Hybrid 介面轉發至 App Native 層的 TCP 網路通訊層,該模塊會封裝這個 HTTP 請求,作為 TCP 網路服務的 Payload 轉發到 TCP Gateway;

TCP Gateway 會根據服務號判斷出是 Hybrid 轉發服務,解包後將 Payload 直接轉發至 HTTP Gateway,此 HTTP 請求對 HTTP Gateway 是透明的,HTTP Gateway 無需區分是 App 直接發來的還是 TCP Gateway 轉發來的 HTTP 請求;

後端業務服務處理完成後,HTTP 響應會經 HTTP Gateway 返回給 TCP Gateway,TCP Gateway 將此 HTTP 響應作為 Payload 返回給 App 的 TCP 網路通訊層;

TCP 網路通訊層會再將該 Payload 反序列化後返回給 Hybrid 框架,最終非同步回調給 Hybrid 業務調用方。整個過程對於 Hybrid 業務調用方也是透明的,它並不知道 TCP Tunnel 的存在。

採用該技術方案後,攜程 App 中 Hybrid 業務的網路服務成功率提升至 99% 以上,平均耗時下降了 30%。

海外網路服務優化

攜程目前沒有部署海外 IDC,海外用戶在使用 App 時需要訪問位於國內的 IDC,服務平均耗時明顯高於國內用戶。我們採用了名為『TCP Bypass for Oversea』的技術方案來優化海外網路服務性能,主要是使用了 Akamai 的海外專屬網路通道,同時在攜程國內 IDC 部署了局端設備,使用專用加速通道的方式來提升海外用戶體驗。

海外用戶啟動 App 後先通過 Akamai 定製域名獲取 Server IP,所有網路服務優先走 Akamai 通道;如果 Akamai 通道的網路服務失敗並且重試機制生效時,會改走傳統 Internet 通道進行重試。相比只用傳統 Internet 通道,在保持網路服務成功率不變的情況下,使用 Akamai 通道 Bypass 技術後平均服務耗時下降了 33%。

其他網路協議探討

過去兩年我們的網路服務優化工作都是基於 TCP 協議實現的,基本達到了優化目標。不過這兩年來新的應用層網路協議 SPDY 和 HTTP/2 逐步邁入主流,基於 UDP 的 QUIC 協議看起來也非常有趣,值得跟進調研。

SPDY & HTTP/2

SPDY 是 Google 基於 TCP 開發的網路應用層協議,目前已經停止開發,轉向支持基於 SPDY 成果設計的 HTTP/2 協議,HTTP/2 協議的核心改進其實就是針對 HTTP/1.x 中影響延遲性能的痛點進行優化:

Header 壓縮:壓縮冗餘的 HTTP 請求和響應 Header。

支持 Multiplexing:支持一個 TCP 連接上同時實現多個請求和響應。

保持長連接(比 HTTP/1.x 更徹底):減少網路連接時間。

支持推送:可以由服務端主動推送數據到客戶端。

官方性能測試結果顯示使用 SPDY 或者 HTTP/2 的頁面載入時間減少 30% 左右,不過這是針對網頁的測試結果,對於 App 中的網路服務,具體優化效果我們還在進行內部測試,不過其優化手段看和目前我們使用 TCP 協議的優化手段類似,因此性能優化效果可能不會很顯著。

QUIC

QUIC 是 Google 基於 UDP 開發的應用層協議,UDP 協議無需連接,不存在重傳機制,因此應用層需要保證服務的可靠性。目前國內騰訊有針對弱網路嘗試過 QUIC 協議,我們也在進行測試,最終是否會採用還需要看測試的結果。

綜述

技術只是手段,最終還是要反映在業務效果上。我們已經實現除靜態資源等需要訪問 CDN 的網路請求外,其他 App 網路服務使用統一的 TCP 通道,從而具備更好的性能調優和業務監控能力。攜程目前基於 TCP 協議的各種 App 網路服務優化,也是各種技術方案的平衡,雖然目前 HTTP/2 等新協議逐步成熟,但是 TCP 協議自身的靈活性支持有針對性的性能優化,還是具備其特別的優勢,希望我們的實踐總結能對國內無線技術從業者有一些借鑒價值。

B. #iOS 物聯網Wifi網路配置原理

自從物聯網問世以來,如何使得 能夠或跡 聯網 有多種的方式,目前運用非常廣的Wifi,最近在山戚做這方面的SDK,下面講解一些配網的原理。

APP將要配置上的路由的wifi用戶名、密碼發送給智能硬體,目前基本採用逗團陵以下幾種方式

1)smartconfig

2)AP模式: APP 配置手機連接到智能硬體(WIFI晶元 的AP),構建成一個區域網,當然該區域網是不能上網的,但是在區域網內的各個設備的通信是OK

當前wifi應用的幾種主流加密方式都存在一個特點, 明文的長度和加密後的密文長度之間是線性關系

即: 密文長度 = 明文長度 + 演算法相關的常量C, 也就是說, 只要明文長度可控, 密文的長度即是可控的

這個特點是SmartConfig的核心原理

AP 是 (Wireless) AccessPoint 的縮寫,即 (無線) 訪問接入點。簡單來講就像是無線路由器一樣,設備打開後進入 AP 模式

AP模式比較不好的就是配置時間比smartconfig要長,手機連接的WIFI接入點會變化,如果配置不成功,手機就無法上網,需要在手動配置WIFI,手機才能上網。

1. http://www.tuicool.com/articles/E3a2myi

閱讀全文

與網路類型SDK和WiFi相關的資料

熱點內容
怎麼登錄邢台中考中招網路平台 瀏覽:426
移動網路關了還走流量 瀏覽:582
如何取消路由器隱藏網路 瀏覽:477
平板有流量為什麼沒網路 瀏覽:827
橋聯路由器網路容易斷網 瀏覽:976
京山網球賓館網路密碼 瀏覽:213
如何改為kfc網路 瀏覽:253
網路電視可以當作電腦顯示器嗎 瀏覽:892
部門落實網路安全情況匯報 瀏覽:475
網路測速跟路由器的差別 瀏覽:877
怎麼看網路帶貨 瀏覽:712
電腦網路代理什麼意思 瀏覽:785
計算機網路技術怎麼預習 瀏覽:564
人物標簽網路詞彙有哪些 瀏覽:317
劍俠情緣1網路版槍天和錘天哪個厲害 瀏覽:865
手機顯示微信連接不上網路 瀏覽:774
無線網路輸入端有哪些 瀏覽:973
多肉的網路促銷策略怎麼寫 瀏覽:619
網路沒有欠費電腦卻不能上網 瀏覽:78
網路安全與網路暴力的聯系 瀏覽:512

友情鏈接