Android 3G/4G流量上網原理簡析

手機通常會提供兩種上網方式:Wifi或者3G/4G上網,Wifi上網其實就是利用網卡經過以太網上網;3G/4G則是經過基帶,利用蜂窩網絡進行上網,以前已經簡單的闡述了**Wifi上網跟3G上網的區別**,本文主要簡述Android 3G/4G上網的流程及原理。網絡

  • 無線上網硬件模型
  • 3G/4G上網協議ppp
  • 3G/4G上網流程-ppp如何創建
  • socket如何經過基帶模塊發送數據、接收數據

Android流量數據上網概述(硬件平臺及環境)

手機通常有兩塊網卡,只是不一樣時使用,Wifi的那種以太網卡,還有就是3G/4G的無線Modem型網卡(基帶模塊),3G/4G上網用的是蜂窩網絡,信號以電磁波的形式在空氣中進行傳播,發送到距離最近的基站,基站經過交換機轉發到覆蓋目標設備的基站,並通知目標設備,回傳結果,這種上網模式在鏈路層,用的通常是PPP(Point-to-Point Protocol)協議,而其上網媒介用的則是無線通訊專用的無線基帶通訊模塊:socket

手機4G上網模型.png

Android流量數據上網採用的協議-PPP(Point-to-Point Protocol)

同以太網不一樣,移動端上網的方式是經過蜂窩網絡進行上網,二者最大的區別是在鏈路層,Android 3G/4G無線上網的網絡協議模型以下:函數

Android 無線流量上網模型.jpg

在數據鏈路層,PPP(Point-to-Point Protocol)協議提供了一種標準點對點的傳輸方式,爲各類主機、網橋和路由器通訊提供通用鏈接方案。PPP協議主要包括如下三個部分:加密

  • 令數據幀封裝格式:基於HDLC(High Level Data Control,高層數據控制鏈路)標準,爲串行數據鏈路上傳輸的數據包定義封裝格式。
  • 鏈路控制協議LCP(Link Control Protocol):用於封裝格式選項的自動協商、鏈路的創建和終止、探測鏈路錯誤和配置錯誤。
  • 認證協議,最經常使用的包括口令驗證協議PAP(Password Authentication Protocol)和挑戰握手驗證協議CHAP(Challenge-Handshake Authentication Protocol)。
  • 網絡控制協議NCP(Network Control Protocol):PPP協議針對每一種網絡層協議都有相應的網絡控制協議,並經過它們完成點對點通訊時網絡層參數的配置,如IP地址、DNS的動態協商。

其中上面的大部分都是在創建數據鏈路的時候用的,數據鏈路創建後,其實主要用關心的是令數據幀封裝,PPP協議下的令數據幀封裝格式以下圖:.net

PPP協議數據幀格式

因爲PPP協議是點對點的,不須要太多信息,所以這裏是沒有48位MAC地址概念的,所以,PPP也就無所謂 ARP(地址解析協議)和RARP(逆地址解析協議),這兩個是某些網絡接口(如以太網和令牌環網)使用的特殊協議。cdn

Android流量數據上網的實現

在Android系統中,應用訪問網絡時,會首先查看數據上網鏈路是否已經創建創建,若是已經創建,則直接使用已創建的網絡接口進行通訊,若是還未創建,則須要首先創建數據通路。PPP撥號上網配置十分複雜,須要一系列的協商、驗證,爲了開發方便,Linux對PPP數據鏈路的創建過程進行抽象,實現了pppd撥號應用程序,專門用於管理PPP數據鏈路的創建與關閉。不過,pppd其實只是負責創建數據鏈路,創建以後,數據上網不會依賴pppd服務,打個比方就是:pppd只負責修路,不負責運貨,在整個手機無線通訊中,pppd地位以下圖:blog

image.png

pppd是一個後臺服務進程(daemon),實現了全部鑑權、壓縮/解壓和加密/解密等擴展功能的控制協議,負責把要發送的數據包傳遞給PPP協議處理模塊,設置PPP協議的參數,用來創建/關閉鏈接。接口

PPP數據鏈路創建流程

Android系統若是想要利用PPP協議進行數據通訊,必須首先按照PPP協議創建數據通訊鏈路。基帶模塊正確加載以後會映射多個ttyUSB設備文件,有的ttyUSB用於AT命令發送,有的用做數據通訊,底層經過串口多路複用機制,實現了USB串口的多路複用。在使用ttyUSB創建數據鏈路的時候,首先經過發送AT命令,打開無線上網模塊,隨後利用pppd撥號程序創建數據鏈路。撥號連接過程遵循PPP通訊協議,手機同蜂窩網絡基站雙方動態協商,配置鏈路參數、IP地址等,撥號成功後,Android系統會爲基帶模塊映射一個虛擬網絡接口名字多是ppp0,或者rmnetxxx等,以後,Android系統即可利用該接口進行網絡通訊了,該接口的使用方式同wlan0相似,IP層對鏈路層徹底無感知。進程

PPP數據鏈路的創建須要完成三個步驟,包括鏈路層配置、鏈路認證以及網絡層配置,這個過程當中,通訊雙方必須經過協商,肯定數據包格式、IP地址等鏈路參數,才能正確創建PPP數據鏈路。在實際操做中,PPP數據鏈路的創建可分如下幾個階段:路由

  • (1) 鏈路不可用階段(Link Dead Phase):PPP鏈路從這個階段開始和結束,在該階段,整條鏈路處於不可用狀態,當通訊雙方檢測到物理線路激活時,會從該階段轉入鏈路創建階段。
  • (2) 鏈路創建階段 (Link Establishment Phase):在此階段,PPP鏈路將經過LCP進行協商,肯定工做方式、認證方式、鏈路壓縮等。若是LCP協商成功,則轉入Opened狀態,表示底層鏈路已經正確創建,若是鏈路協商失敗,則會返回到第一階段。鏈路創建成功後,若是配置了PPP認證,則會進入認證階段,若是沒有配置,則直接轉入網絡層協議階段。
  • (3) 認證階段 (Authentication Phase):在此階段,PPP將進行用戶認證工做,經過PAP或者CHAP驗證用戶名、密碼等身份信息,若是認證失敗,PPP鏈路進入鏈路終止階段,拆除鏈路,若是認證成功則轉入網絡層協議階段。
  • (4) 網絡層協議階段 (Network-Layer Protocol Phase);在此階段,每種網絡層協議會經過相應網絡控制協議進行配置,本課題經過IPCP協商雙方IP地址、DNS等,協商成功後,PPP鏈路即可基於TCP/IP發送或接收報文。
  • (5) 鏈路終止階段 (Link Termination Phase):PPP能在任什麼時候候終止鏈路,如認證失敗、載波丟失等狀況均會致使鏈路終止,PPP協議經過交換LCP報文來關閉鏈路,並通知網絡層與物理層強制關閉鏈路,返回鏈路不可用階段。鏈路創建流程如圖3.19所示:

鏈路創建流程

通訊鏈路創建後,pppd會建立一個網絡接口(如ppp0),內核中的PPP協議模塊也會登記該網絡接口,對上層應用而言,該虛擬網絡接口ppp0或者或者rmnetxxx,就是無線上網須要調用的接口,而且該接口建立之初就已經從3G網絡得到了動態分配的IP地址,對上層應用而言能夠看作一塊真實的,而且已經激活的網卡設備,能夠像使用以太網卡同樣,進行TCP/IP網絡通訊,pppd服務創建鏈路的流程圖:

pppd撥號創建鏈路示意圖.jpg

數據的發送流程

應用程序經過socket發送TCP/IP數據包時候,內核經過IP地址和路由表找到對應的網絡接口(ppp0或者rmnetxxx),而後調用ppp協議相應的實現函數,經PPP協議封裝,發送數據,最終經過串口將數據發送到基帶模塊,並經射頻模塊將信息傳輸到附近的基站。

ppp數據發送流程.jpg

數據的接收流程

數據接收流程能夠看作是發送的逆向,不過這裏稍微有些區別,那就是接收方,在數據鏈路創建的時候,接收方是pppd撥號進程,創建以後,普通的上網數據,接收方就是通常的用戶進程:

數據接收流程.jpg

總結

  • 手機上網走的是PPP協議
  • PPP協議沒有MAC地址的概念
  • pppd主要用來鋪路(創建鏈路),不負責運貨
  • 鏈路創建後,對IP層而言,數據通訊流程同以太網沒有區別

做者:看書的小蝸牛 Android 3G/4G流量上網原理簡析

僅供參考,歡迎指正

相關文章
相關標籤/搜索