free5gc
代码整体架构参考的是SBA 5GC架构
,如下所示,free5gc
涉及到的网元有AMF、SMF、UPF、AUSF、N3IWF、NRF、NSSF、PCF、UDM
,各网元功能可以参考文章末尾解释说明:
搭建run.sh
测试环境需要创建两个虚拟机,一台名称为UERANSIM
,作为(R)AN
和UE
,另外一台名称为free5GC
,作为5GC
核心网,用于部署free5gc
程序并启动run.sh
测试程序,具体IP
配置如下图和配置文件所示:
报文中的IP地址规划如下
网元 | 接口 | IP地址 | 端口号 |
---|---|---|---|
AMF | N2 | 192.168.135.101 | 38412 |
AMF | SBI | 127.0.0.18 | 8000 |
AUSF | SBI | 127.0.0.9 | 8000 |
NRF | SBI | 127.0.0.10 | 8000 |
NSSF | SBI | 127.0.0.31 | 8000 |
PCF | SBI | 127.0.0.7 | 8000 |
UDM | SBI | 127.0.0.3 | 8000 |
UDR | SBI | 127.0.0.4 | 8000 |
UDR | MongoDB | 127.0.0.1 | 27017 |
SMF | SBI | 127.0.0.2 | 8000 |
SMF | N4 | 127.0.0.1 | 8805 |
UPF | N4 | 127.0.0.8 | 8805 |
UPF | N3 | 192.168.135.101 | 2152 |
UPF | UE地址池 | 60.60.0.0/16 | N/A |
路径free5gc/config/amfcfg.yaml
info:
version: 1.0.2
description: AMF initial local configuration
configuration:
amfName: AMF # the name of this AMF
ngapIpList: # the IP list of N2 interfaces on this AMF
- 192.168.135.101 # 127.0.0.1
sbi: # Service-based interface information
scheme: http # the protocol for sbi (http or https)
registerIPv4: 127.0.0.18 # IP used to register to NRF
bindingIPv4: 127.0.0.18 # IP used to bind the service
port: 8000 # port used to bind the service
serviceNameList: # the SBI services provided by this AMF, refer to TS 29.518
- namf-comm # Namf_Communication service
- namf-evts # Namf_EventExposure service
- namf-mt # Namf_MT service
- namf-loc # Namf_Location service
- namf-oam # OAM service
servedGuamiList: # Guami (Globally Unique AMF ID) list supported by this AMF
# =
- plmnId: # Public Land Mobile Network ID, =
mcc: 208 # Mobile Country Code (3 digits string, digit: 0~9)
mnc: 93 # Mobile Network Code (2 or 3 digits string, digit: 0~9)
amfId: cafe00 # AMF identifier (3 bytes hex string, range: 000000~FFFFFF)
supportTaiList: # the TAI (Tracking Area Identifier) list supported by this AMF
- plmnId: # Public Land Mobile Network ID, =
mcc: 208 # Mobile Country Code (3 digits string, digit: 0~9)
mnc: 93 # Mobile Network Code (2 or 3 digits string, digit: 0~9)
tac: 1 # Tracking Area Code (uinteger, range: 0~16777215)
plmnSupportList: # the PLMNs (Public land mobile network) list supported by this AMF
- plmnId: # Public Land Mobile Network ID, =
mcc: 208 # Mobile Country Code (3 digits string, digit: 0~9)
mnc: 93 # Mobile Network Code (2 or 3 digits string, digit: 0~9)
snssaiList: # the S-NSSAI (Single Network Slice Selection Assistance Information) list supported by this AMF
- sst: 1 # Slice/Service Type (uinteger, range: 0~255)
sd: 010203 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
- sst: 1 # Slice/Service Type (uinteger, range: 0~255)
sd: 112233 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
supportDnnList: # the DNN (Data Network Name) list supported by this AMF
- internet
nrfUri: http://127.0.0.10:8000 # a valid URI of NRF
security: # NAS security parameters
integrityOrder: # the priority of integrity algorithms
- NIA2
# - NIA0
cipheringOrder: # the priority of ciphering algorithms
- NEA0
# - NEA2
networkName: # the name of this core network
full: free5GC
short: free
locality: area1 # Name of the location where a set of AMF, SMF and UPFs are located
networkFeatureSupport5GS: # 5gs Network Feature Support IE, refer to TS 24.501
enable: true # append this IE in Registration accept or not
imsVoPS: 0 # IMS voice over PS session indicator (uinteger, range: 0~1)
emc: 0 # Emergency service support indicator for 3GPP access (uinteger, range: 0~3)
emf: 0 # Emergency service fallback indicator for 3GPP access (uinteger, range: 0~3)
iwkN26: 0 # Interworking without N26 interface indicator (uinteger, range: 0~1)
mpsi: 0 # MPS indicator (uinteger, range: 0~1)
emcN3: 0 # Emergency service support indicator for Non-3GPP access (uinteger, range: 0~1)
mcsi: 0 # MCS indicator (uinteger, range: 0~1)
t3502Value: 720 # timer value (seconds) at UE side
t3512Value: 3600 # timer value (seconds) at UE side
non3gppDeregistrationTimerValue: 3240 # timer value (seconds) at UE side
# retransmission timer for paging message
t3513:
enable: true # true or false
expireTime: 6s # default is 6 seconds
maxRetryTimes: 4 # the max number of retransmission
# retransmission timer for NAS Deregistration Request message
t3522:
enable: true # true or false
expireTime: 6s # default is 6 seconds
maxRetryTimes: 4 # the max number of retransmission
# retransmission timer for NAS Registration Accept message
t3550:
enable: true # true or false
expireTime: 6s # default is 6 seconds
maxRetryTimes: 4 # the max number of retransmission
# retransmission timer for NAS Authentication Request/Security Mode Command message
t3560:
enable: true # true or false
expireTime: 6s # default is 6 seconds
maxRetryTimes: 4 # the max number of retransmission
# retransmission timer for NAS Notification message
t3565:
enable: true # true or false
expireTime: 6s # default is 6 seconds
maxRetryTimes: 4 # the max number of retransmission
# the kind of log output
# debugLevel: how detailed to output, value: trace, debug, info, warn, error, fatal, panic
# ReportCaller: enable the caller report or not, value: true or false
logger:
AMF:
debugLevel: info
ReportCaller: false
NAS:
debugLevel: info
ReportCaller: false
FSM:
debugLevel: info
ReportCaller: false
NGAP:
debugLevel: info
ReportCaller: false
Aper:
debugLevel: info
ReportCaller: false
PathUtil:
debugLevel: info
ReportCaller: false
OpenApi:
debugLevel: info
ReportCaller: false
路径free5gc/config/smfcfg.yaml
info:
version: 1.0.2
description: SMF initial local configuration
configuration:
smfName: SMF # the name of this SMF
sbi: # Service-based interface information
scheme: http # the protocol for sbi (http or https)
registerIPv4: 127.0.0.2 # IP used to register to NRF
bindingIPv4: 127.0.0.2 # IP used to bind the service
port: 8000 # Port used to bind the service
tls: # the local path of TLS key
key: free5gc/support/TLS/smf.key # SMF TLS Certificate
pem: free5gc/support/TLS/smf.pem # SMF TLS Private key
serviceNameList: # the SBI services provided by this SMF, refer to TS 29.502
- nsmf-pdusession # Nsmf_PDUSession service
- nsmf-event-exposure # Nsmf_EventExposure service
- nsmf-oam # OAM service
snssaiInfos: # the S-NSSAI (Single Network Slice Selection Assistance Information) list supported by this AMF
- sNssai: # S-NSSAI (Single Network Slice Selection Assistance Information)
sst: 1 # Slice/Service Type (uinteger, range: 0~255)
sd: 010203 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
dnnInfos: # DNN information list
- dnn: internet # Data Network Name
dns: # the IP address of DNS
ipv4: 8.8.8.8
- sNssai: # S-NSSAI (Single Network Slice Selection Assistance Information)
sst: 1 # Slice/Service Type (uinteger, range: 0~255)
sd: 112233 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
dnnInfos: # DNN information list
- dnn: internet # Data Network Name
dns: # the IP address of DNS
ipv4: 8.8.8.8
plmnList: # the list of PLMN IDs that this SMF belongs to (optional, remove this key when unnecessary)
- mcc: "208" # Mobile Country Code (3 digits string, digit: 0~9)
mnc: "93" # Mobile Network Code (2 or 3 digits string, digit: 0~9)
pfcp: # the IP address of N4 interface on this SMF (PFCP)
addr: 127.0.0.1
userplane_information: # list of userplane information
up_nodes: # information of userplane node (AN or UPF)
gNB1: # the name of the node
type: AN # the type of the node (AN or UPF)
UPF: # the name of the node
type: UPF # the type of the node (AN or UPF)
node_id: 127.0.0.8 # the IP/FQDN of N4 interface on this UPF (PFCP)
sNssaiUpfInfos: # S-NSSAI information list for this UPF
- sNssai: # S-NSSAI (Single Network Slice Selection Assistance Information)
sst: 1 # Slice/Service Type (uinteger, range: 0~255)
sd: 010203 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
dnnUpfInfoList: # DNN information list for this S-NSSAI
- dnn: internet
pools:
- cidr: 60.60.0.0/16
- sNssai: # S-NSSAI (Single Network Slice Selection Assistance Information)
sst: 1 # Slice/Service Type (uinteger, range: 0~255)
sd: 112233 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
dnnUpfInfoList: # DNN information list for this S-NSSAI
- dnn: internet
pools:
- cidr: 60.61.0.0/16
interfaces: # Interface list for this UPF
- interfaceType: N3 # the type of the interface (N3 or N9)
endpoints: # the IP address of this N3/N9 interface on this UPF
- 192.168.135.101 # 127.0.0.8
networkInstance: internet # Data Network Name (DNN)
links: # the topology graph of userplane, A and B represent the two nodes of each link
- A: gNB1
B: UPF
nrfUri: http://127.0.0.10:8000 # a valid URI of NRF
locality: area1 # Name of the location where a set of AMF, SMF and UPFs are located
# the kind of log output
# debugLevel: how detailed to output, value: trace, debug, info, warn, error, fatal, panic
# ReportCaller: enable the caller report or not, value: true or false
logger:
SMF:
debugLevel: info
ReportCaller: false
NAS:
debugLevel: info
ReportCaller: false
NGAP:
debugLevel: info
ReportCaller: false
Aper:
debugLevel: info
ReportCaller: false
PathUtil:
debugLevel: info
ReportCaller: false
OpenApi:
debugLevel: info
ReportCaller: false
PFCP:
debugLevel: info
ReportCaller: false
路径free5gc/NFs/upf/build/config/upfcfg.yaml
info:
version: 1.0.0
description: UPF configuration
configuration:
# the kind of log output
# debugLevel: how detailed to output, value: trace, debug, info, warn, error, fatal, panic
# ReportCaller: enable the caller report or not, value: true or false
debugLevel: info
ReportCaller: false
# The IP list of the N4 interface on this UPF (Can't set to 0.0.0.0)
pfcp:
- addr: 127.0.0.8
# The IP list of the N3/N9 interfaces on this UPF
# If there are multiple connection, set addr to 0.0.0.0 or list all the addresses
gtpu:
- addr: 192.168.135.101 # 127.0.0.8
# [optional] gtpu.name
# - name: upf.5gc.nctu.me
# [optional] gtpu.ifname
# - ifname: gtpif
# The DNN list supported by UPF
dnn_list:
- dnn: internet # Data Network Name
cidr: 60.60.0.0/24 # Classless Inter-Domain Routing for assigned IPv4 pool of UE
# [optional] dnn_list[*].natifname
# natifname: eth0
路径UERANSIM/config/free5gc-gnb.yaml
mcc: '208' # Mobile Country Code value
mnc: '93' # Mobile Network Code value (2 or 3 digits)
nci: '0x000000010' # NR Cell Identity (36-bit)
idLength: 32 # NR gNB ID length in bits [22...32]
tac: 1 # Tracking Area Code
linkIp: 127.0.0.1 # gNB's local IP address for Radio Link Simulation (Usually same with local IP)
ngapIp: 192.168.135.102 #127.0.0.1 # gNB's local IP address for N2 Interface (Usually same with local IP)
gtpIp: 192.168.135.102 #127.0.0.1 # gNB's local IP address for N3 Interface (Usually same with local IP)
# List of AMF address information
amfConfigs:
- address: 192.168.135.101 #127.0.0.1
port: 38412
# List of supported S-NSSAIs by this gNB
slices:
- sst: 0x1
sd: 0x010203
# Indicates whether or not SCTP stream number errors should be ignored.
ignoreStreamIds: true
路径UERANSIM/config/free5gc-ue.yaml
# IMSI number of the UE. IMSI = [MCC|MNC|MSISDN] (In total 15 or 16 digits)
supi: 'imsi-208930000000003'
# Mobile Country Code value
mcc: '208'
# Mobile Network Code value (2 or 3 digits)
mnc: '93'
# Permanent subscription key
key: '8baf473f2f8fd09487cccbd7097c6862'
# Operator code (OP or OPC) of the UE
op: '8e27b6af0e692e750f32667a3b14605d'
# This value specifies the OP type and it can be either 'OP' or 'OPC'
opType: 'OP'
# Authentication Management Field (AMF) value
amf: '8000'
# IMEI number of the device. It is used if no SUPI is provided
imei: '356938035643803'
# IMEISV number of the device. It is used if no SUPI and IMEI is provided
imeiSv: '4370816125816151'
# List of gNB IP addresses for Radio Link Simulation
gnbSearchList:
- 127.0.0.1
# Initial PDU sessions to be established
sessions:
- type: 'IPv4'
apn: 'internet'
slice:
sst: 0x01
sd: 0x010203
# List of requested S-NSSAIs by this UE
slices:
- sst: 0x01
sd: 0x010203
# Supported encryption and integrity algorithms by this UE
integrity:
IA1: true
IA2: true
IA3: true
ciphering:
EA1: true
EA2: true
EA3: true
1)、配置文件完成之后,首先在虚拟机free5GC
上启动测试程序run.sh
,如下:
会逐个启动核心网各个网元,然后等待(R)AN
的链接。
2)、然后在虚拟机ueransim
上执行(R)AN
连接到核心网,如下所示:
3)、然后在虚拟机ueransim
上执行UE
通过(R)AN
连接到核心网,如下所示:
虚拟机ueransim
上的(R)AN
日志信息:
虚拟机free5GC
上的日志信息:
4)、在ueransim
虚拟机上执行ifconfig
,如下:
其中uesimtun0
则是模拟出来的UE
,使用这个虚拟网卡测试能否连接互联网,如下:
至此,已经模拟出UE
连接到5gc
核心网,并且能够正常访问互联网的测试已经完成。
下面,通过抓包分析进一步了解run.sh
测试环境下各个网卡的关联关系。
1)、先禁用ueransim
虚拟机中的ens32
网卡,然后修改DNS
解析服务器ip
,再将ueransim
虚拟机中模拟出的uesimtun0
网卡设置为默认路由。(确保访问互联网的流量是通过虚拟网卡uesimtun0
传送出去的)
root@ubuntu:/home/ubuntu# sudo ifconfig ens32 down
root@ubuntu:/home/ubuntu# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.135.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
root@ubuntu:/home/ubuntu# vim /etc/resolv.conf
nameserver 114.114.114.114 #暂时将 nameserver IP 改成 114.114.114.11
root@ubuntu:/home/ubuntu# ip r add default dev uesimtun0
root@ubuntu:/home/ubuntu# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 uesimtun0
192.168.135.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
2)、使用tcpdum
命令同时抓取所有可能涉及到的网卡,如ueransim
虚拟机中的ens33
和uesimtun0
,以及free5GC
虚拟机中的ens32
和ens33
和upfgtp
网卡。
3)、通过模拟出的uesimtun0
这个网卡访问百度的首页
root@ubuntu:/home/ubuntu# wget baidu.com
--2021-11-19 06:18:46-- http://baidu.com/
Resolving baidu.com (baidu.com)... 220.181.38.148, 220.181.38.251
Connecting to baidu.com (baidu.com)|220.181.38.148|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 81 [text/html]
Saving to: ‘index.html’
index.html 100%[===================================================================================================================>] 81 --.-KB/s in 0s
2021-11-19 06:18:46 (7.35 MB/s) - ‘index.html’ saved [81/81]
4)、停止抓包,将抓取到的报文分别通过wireshark
打开,进行分析。
按照从 UE --> DN
的顺序分别查看报文
1)、ueransim
虚拟机中的uesimtun0
网卡报文对应图中红色方块1,如下:
可以得到用户UE IP
地址为60.60.0.2
,目的网址IP
为220.181.38.148
2)、ueransim
虚拟机中的ens33
网卡报文对应图中红色方块2,如下:
可以得到此时http
协议已经封装为gtp
协议,其中标记部分为(R)AN-U IP
以及UPF-U IP
.
3)、free5GC
虚拟机中的ens33
网卡报文对应图中红色方块3,如下:
可以看出内容和2)中报文一样。
4)、free5GC
虚拟机中的upfgtp
网卡对应
此时已经把GTP
层给去掉,剩余的UE IP
和 目的网址IP
5)、free5GC
虚拟机中的ens32
网卡报文, 如下:
此时源IP
已经为ens32
网卡IP
地址,目的网址ip
(R)AN
网元各个接口IP
地址在UERANSIM/config/free5gc-gnb.yaml
进行配置
UPF
网元各个接口IP
地址在free5gc/NFs/upf/build/config/upfcfg.yaml
进行配置
SMF
网元各个接口IP
地址在free5gc/config/smfcfg.yaml
进行配置
AMF
网元各个几口IP
地址在free5gc/config/amfcfg.yaml
进行配置
其他网元配置文件默认不改变
参考解释:
AMF:负 责 UE(User Equipment,用 户 终 端)的 注 册、连接、访问验证授权、移动性和可达性管理,在 UE 和 SMF(Session Management function,会话管理功能) 之间提供 SM(Session Management,会话管理)消息的 传 输,UE 和 SMSF(Short Message Service Function,短 消息服务功能)之间提供 SMS(Short Message Service, 短 信 息 服 务)消 息 的 传 输,提 供 UE 和 LMF(Location Management Function,定 位 管 理 功 能)之 间 以 及 RAN (Radio Access Network,无线局域网)和 LMF 之间的位 置服务消息的传输等。
AUSF
(Authentication Server Function,认证服务器 功能):负责对 3GPP 和非 3GPP 的 UE 的接入进行认证。
SMF:负责与分离的数据面交互,根据自身配置或与 PCF(Policy Control Function,策略控制功能)交互来制 定策略和流模板,为会话选择和控制 UPF 和 SSC(Session and Service Continuity,会话和服务连续性)模式,管理 会话的建立、更新和释放以及维护着 PDU(Protocol Data Unit,协议数据单元)会话状态、群组管理、控制和协调 UPF 的收费数据收集和流量控制等。负责 UE 的 IP 分配 管理,具备 DHCP、ARP 代理或 IPv6 邻居请求代理功能。
UPF:响应 SMF 请求,作为移动基础设施 RAN 和 DN 之间的互连点,PDU 会话锚点负责完成用户平面上 GTP-U 协议的封装和解封装、分组路由和转发、数据包 检查、QoS 流映射等网络用户面的处理。完成用户平 面部分策略规则实施,例如门控、重定向和流量转向。 为计费以及合法拦截提供用户流量收集接口以及流量 使用报告。
PCF
:负责用户的策略管理和实施,包括会话的策 略、移动性策略等。
UDM
(Unified Data Management,统一数据管理): 存储和管理用户数据和配置文件。
UDR
(Unified Data Repository,统一数据存储库): 支持 UDM 订阅数据、PCF 策略数据和应用程序数据等 的存储和检索。
UDSF
(Unstructured Data Storage Function,非 结 构 化数据存储功能):NF 可在 UDSF 中存储和检索其未在 3GPP 规范中定义其结构的非结构化数据。
NSSF
(Network Slice Selection Function,网 络 切 片 选择功能):选择服务于 UE 的网络切片实例的集合。
NRF
(Network Repository Function,网 络 功 能 注 册 功能):负责网络功能实例及配置文件的注册、更新、注 销,使各 NF 可以相互发现选择并通过 API 进行通信。
NEF
:作 为 外 部 用 户 接 入 的 API 网 关,负 责 将 5G 网络的能力开放给外部网元,同时网络内的 NF 可通过 NEF 向其他 NF 公开功能和事件,NEF 完成网络能力的 收集、分析和重组。
N3IWF(Non-3GPP InterWorking Function
,非 3GPP
互通功能):负责将不可信的非 3GPP
接入网(如 Wi-Fi
) 接入到 5G
核心网。UE
与 N3IWF
建立一个 IPsec
隧道, N3IWF
分别通过 N2
接口和 N3
接口接入 5G
核心网的 控制面和用户面。
UCMF
(UE radio Capability Management Function, UE 无线能力管理功能):存储 UE 无线功能 ID。AMF 可 以订阅 UCMF 获得分配的 UE 无线电功能 ID 的新值,并 在本地缓存它们。
CHF
(Charging Function,计费功能):负责用户计费、 配额授信等,也支持融合的在线和离线计费 。
LMF
:负责向 5GC 注册或访问的 UE 的定位所需资 源的整体调度和协调,还可以计算或验证最终位置、速度 和精度。5G 可基于无线、终端以及用户面等多种手段 提供定位能力,但定位方法因访问类型而异,定位精度也 很大一部分取决于接入网所作的增强。
SMSF
:用 于 提 供 NAS(non-access-stratum,非 接 入 层)短信服务。
5G-EIR
(5G-Equipment Identity Register,5G 设备身 份注册):检查 PEI(Permanent Equipment Identifier,永久 设备标识符)的状态,例如检查其是否未列入黑名单。
NWDAF
(Network Data Analytics Function,网 络 数 据分析功能):NWDAF 用人工智能技术从网络功能、 OAM(Operation Administration and Maintenance,运维管 理系统)和应用层获取的数据,进行分析,以生成需要的 数据结果。NF、OAM 或 AF 可以利用 NWDAF 的分析结果进行不同的优化操作。
SCP
(Service Communication Proxy,服务通信代理): 在间接通信模式下,业务功能和网络路由功能分离,NF 服务使用者通过用 SCP 使用请求的 NF。从而各 NF 可 专心于业务功能的实现,路由控制等功能统一由 SCP 来 实现。
手段 提供定位能力,但定位方法因访问类型而异,定位精度也 很大一部分取决于接入网所作的增强。
SMSF
:用 于 提 供 NAS(non-access-stratum,非 接 入 层)短信服务。
5G-EIR
(5G-Equipment Identity Register,5G 设备身 份注册):检查 PEI(Permanent Equipment Identifier,永久 设备标识符)的状态,例如检查其是否未列入黑名单。
NWDAF
(Network Data Analytics Function,网 络 数 据分析功能):NWDAF 用人工智能技术从网络功能、 OAM(Operation Administration and Maintenance,运维管 理系统)和应用层获取的数据,进行分析,以生成需要的 数据结果。NF、OAM 或 AF 可以利用 NWDAF 的分析结果进行不同的优化操作。
SCP
(Service Communication Proxy,服务通信代理): 在间接通信模式下,业务功能和网络路由功能分离,NF 服务使用者通过用 SCP 使用请求的 NF。从而各 NF 可 专心于业务功能的实现,路由控制等功能统一由 SCP 来 实现。
SEPP
(Security Edge Protection Proxy,安 全 边 缘 保 护代理):用于 5G 用户国际漫游,与他网运营商的 5G 互 通,负责 PLMN 间控制平面接口上的消息过滤和策略管理。