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)协议,而其上网媒介用的则是无线通信专用的无线基带通信模块:

手机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协议下的令数据帧封装格式如下图:

PPP协议数据帧格式

由于PPP协议是点对点的,不需要太多信息,因此这里是没有48位MAC地址概念的,因此,PPP也就无所谓 ARP(地址解析协议)和RARP(逆地址解析协议),这两个是某些网络接口(如以太网和令牌环网)使用的特殊协议。

Android流量数据上网的实现

在Android系统中,应用访问网络时,会首先查看数据上网链路是否已经建立建立,如果已经建立,则直接使用已建立的网络接口进行通信,如果还未建立,则需要首先建立数据通路。PPP拨号上网配置十分复杂,需要一系列的协商、验证,为了开发方便,Linux对PPP数据链路的建立过程进行抽象,实现了pppd拨号应用程序,专门用于管理PPP数据链路的建立与关闭。不过,pppd其实只是负责建立数据链路,建立之后,数据上网不会依赖pppd服务,打个比方就是:pppd只负责修路,不负责运货,在整个手机无线通信中,pppd地位如下图:

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流量上网原理简析

仅供参考,欢迎指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249