ns3网络仿真_基于NS3的5G网络仿真

本文介绍了5G网络相对于4G的变化,包括接入网从enB+Ue变为AAU+DU+CU的NR结构,以及4G EPC到5GC+MEC的演进。在NS3仿真环境中,文章详细展示了如何搭建5G网络的基本架构,包括核心网络和接入网络的配置。
摘要由CSDN通过智能技术生成

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

fbb60175bc92dda6cda094db7bce05b5.png

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
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值