Android wifi上网跟4G上网的区别

手机上网可以用Wifi,也可以用4G,这两者究竟有什么区别,Wifi模块跟4G无限通信模块用的是同一种上网媒介吗,一个4G手机是否两块网卡呢?手机的MAC地址说的是谁的呢,比如,当你通过系统API获取MAC地址的时候,获取的是哪种MAC地址呢?本文由MAC地址(作为设备唯一标识)问题引出,简单分析下两种上网方式的区别,扫盲,高手勿拍砖:

  • Wifi上网跟4G上网用的是同一块“网卡”吗
  • Wifi上网跟4G上网的“MAC”地址是同一个吗
  • 两者在实现方式上有什么不同呢(TCP/IP协议)

首先来看第一个问题,Wifi上网跟4G上网用的是同一块“网卡”吗,答案是否定的,一般而言,Wifi上网用的是以太网卡,拥有48位唯一的MAC地址,而4G上网则通过手机内部的基带模块来实现无线上网的目的。

手机Wifi上网跟4G上网硬件设施的区别

从硬件环境上来说,手机链接一个无线路由器,通过Wifi上网,走的还是以太网,在链路层,用的是以太网协议,也就是说,这种上网模式完全可以看做是手机连接了一根网线,所以其媒介仍可以看做传统意义上的网卡: 
这里写图片描述
而4G上网用的是蜂窝网络,信号以电磁波的形式在空气中进行传播,发送到距离最近的基站,基站通过交换机转发到覆盖目标设备的基站,并通知目标设备,回传结果,这种上网模式在链路层,用的一般是PPP(Point-to-Point Protocol)协议,而其上网媒介用的则是无线通信专用的无线基带通信模块: 
这里写图片描述
硬件上的不同,决定了其在软件系统上必定采取不同的适配方式。

Wifi上网跟4G上网在TCP/IP协议上的区别

Wifi上网可以看做是网卡设备上网,仍然遵循IEEE 802,链路层走的是以太网,支持ARP/RARP,同时在链路层采用以太网协议进行帧数据封装,前面分别是48位目标MAC地址跟源MAC地址 
这里写图片描述
而4G流量上网的时候,链路层走的是PPP协议,该协议下没有MAC地址的概念。 
这里写图片描述 
PPP协议数据帧格式

Wifi上网跟4G上网的“MAC”地址是同一个吗

答案很明显:不是,4G上网压根没有MAC地址的概念,相对应的每个无线通信模块都有IMEI(国际移动设备识别码(International Mobile Equipment Identity),来标识每一个无线通信模块。

总结

本文简单介绍下手机两种上网方式的区别,主要是理清MAC地址的概念,整个4G上网跟电话涉及到的是Android RIL框架的知识,将来有时间,再分析。

文章转自:https://juejin.im/post/5af42e676fb9a07aae1534c4

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要监控Android设备的4G网络状态,可以使用Android系统提供的ConnectivityManager类。该类提供了网络连接状态的查询和监听功能。以下是一个示例代码,可以实时监测4G网络状态的变化: ```java ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE && networkInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE) { // 4G网络已连接 } else { // 4G网络未连接 } // 监听网络连接状态变化 BroadcastReceiver connectivityReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE && networkInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE) { // 4G网络已连接 } else { // 4G网络未连接 } } }; IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(connectivityReceiver, filter); ``` 以上代码首先查询当前网络连接状态,如果当前网络类型为移动网络,并且子类型为LTE,则判定为4G网络已连接。然后注册一个广播接收器,用于监听网络连接状态变化事件,当网络状态变化时,重新查询当前网络连接状态,判断是否为4G网络。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值