5G网络中最基本的功能就是手机上网业务,为了实现手机上网,手机必须有一个IP地址,那么5G网络是如何给手机分配IP地址的呢?
一般来说,有下面4种方式:
1、在5G核心网中配置IP地址池,手机通过信令与核心网交互得到一个动态的IP地址,这个IP地址在手机不需要的时候,可以释放,这样,网络侧可以分配给其他手机继续使用。
2、通过DHCP方式来实现,就是手机与部署在网络中的DHCP服务器交互,得到一个IP地址,每次交互得到的IP地址是不同的。
3、通过外部的RADIUS 服务器得到地址,就是5G核心网与RADIUS服务器交互,得到IP地址后,再通过信令通知到手机。RADIUS可以分配动态地址或者静态地址。
4、通过UDM签约方式来实现,这个时候,就是采用静态地址方式,就是给某个手机分配固定的IP地址,用于特殊目的才会使用静态地址。
在实际部署中,方式一是最常用的,也是最简单的。
如果某个终端必须采用静态地址,则可以采用方式3与方式4。这种情况下,终端用户与IP地址是绑定的。
方式1与方式2都是分配动态地址,就是IP地址与终端用户不是绑定的。
检测5G网络的具体实现:使用TelephonyManager的监听方法
private fun getNetworkType(){ val tManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
tManager.listen(object : PhoneStateListener() { @RequiresApi(Build.VERSION_CODES.R)
override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) { if (ActivityCompat.checkSelfPermission(this@Android11Test2Activity, android.Manifest.permission.READ_PHONE_STATE) != android.content.pm.PackageManager.PERMISSION_GRANTED) { return
}
super.onDisplayInfoChanged(telephonyDisplayInfo)
when(telephonyDisplayInfo.networkType) { TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> showToast("高级专业版 LTE (5Ge)")
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> showToast("NR (5G) - 5G Sub-6 网络")
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> showToast("5G /5G UW - 5G mmWave 网络")
else -> showToast("other")
}
}
}, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
}