5G网络的基本架构如下图所示

5G的网络架构相对于4G发生了较大的变化。首先是在接入网络,4G LTE的接入网络由enB和Ue组成,在5G中,接入网变成了由AAU,DU,CU组成的新的接入网NR(New Radio)。4G的核心网由MME,SGW ,PGW ,PCRF,HSS构成,而5G将原来的4G EPC分解成了5GC 和MEC。5GC基于SBA的架构,基本网元有上图组成。为了测试5G网络的基本性能,本文在NS3仿真环境中搭建5G的基本网络。
首先,我们搭建核心网络部分。
Virtual5gcHelper virtual5gcHelper; //定义一个5G核心网的Helper对象
virtual5gcHelper.SetFileType(format);
virtual5gcHelper.SetTopoFile(topoInput);
virtual5gcHelper.SetInputFile(vmInput);
Ptr<Virt5gc> virtual5gcHelper = virtual5gcHelper.GetVirt5gc();
virt5gcHelper->Read();
//配置标准设备
virt5gcHelper->DynamicLoadInit(10.0);
//配置可扩展时延
virt5gcHelper->SetAllocationDelay(0.02);
virt5gcHelper->SetMigrationRate(0.0,0.5);
//连接NR和5GC
Ptr<NrHelper> nrHelper = virt5gcHelper->GetNrHelper();
Ptr<PointToPointNgcHelper> ngcHelper = virt5gcHelper->HetNgcHelper();
Ptr<Node> pgw = ngcHelper->GetUpfNode();
//配置远程的服务器
NodeContainer remoteHostContainer;
remoteHostContainer.Create(1);
Ptr<Node> remoteHost = remoteHostContainer.Get(0);
InternetStackHelper internet;
internet.Install(remoteHostContainer);
// 将远程服务器和pgw相连
PointToPointHelper p2ph;
p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
Ipv4AddressHelper ipv4h;
ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
// interface 0 is localhost, 1 is the p2p device
//Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
Ipv4StaticRoutingHelper ipv4RoutingHelper;
Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
借下来,我们配置接入网络部分
NodeContainer ueNodes;
NodeContainer enbNodes;
ueNodes = virt5gcHelper->GetUeNodes();
enbNodes = virt5gcHelper->GetEnbNodes();
numberOfNodes = ueNodes.GetN();
totalNodeN = ueNodes.GetN() + enbNodes.GetN();
//安装NR设备
NetDeviceContainer enbNrDevs = virt5gcHelper->GetEnbDevs();
NetDeviceContainer uwNrDevs = virt5gcHelper->GetUwbDevs();
//安装协议栈
internet.Install (ueNodes);
Ipv4InterfaceContainer ueIpIface;
ueIpIface = ngcHelper->AssignUeIpv4Address (NetDeviceContainer (ueNrDevs));
// Assign IP address to UEs, and install applications
for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
{
Ptr<Node> ueNode = ueNodes.Get (u);
// Set the default gateway for the UE
Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
ueStaticRouting->SetDefaultRoute (ngcHelper->GetUeDefaultGatewayAddress (), 1);
}
//用户附着基站
nrHelper-<Attach (ueNrDevs.Get(0), enbNrDevs.Get(0));
nrHelper-<Attach (ueNrDevs.Get(1), enbNrDevs.Get(1));
//定义下行传输链路
uint16_t dlPort = 3000;
std::list<ApplicationContainer> applist;
ApplicationContainer clientApps;
ApplicationContainer serverApps;
for (uint32_t u=0; u < numberOfNodes; u++) {
PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get(u)));
Ptr<MyApp> app = CreateObject<MyApp> ();
Ptr<Socket> ns3UdpSocket = Socket::CreateSocket (remoteHost, UdpSocketFactory::GetTypeId ());
Addres