NS3中的OnOffApplication

本文详细介绍了OnOffApplication类中m_onTime与m_offTime的作用,解释了如何通过这两个参数设置发送与停止发送数据的周期,并阐述了m_pktSize与m_cbrRate之间的关系及其对数据发送的影响。
OnOffApplication类中的 m_onTimem_offTime分别为发送持续的时间和不发送持续的时间。如果在脚本中这样写:
onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
表示一直处于发送状态。如果这样写:
onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (1)));
表示发送1s,然后停歇1s,一般是先发送后停歇( 未验证)。


OnOffApplication类中的 m_pktSize成员变量用来设置发送的数据包的大小。 m_cbrRate成员变量用来设置发送的速率。
m_pktSizem_cbrRate之间的关系:
如果 m_pktSize设置为1024bytes,而 m_cbrRate为1kbps,而发送和不发送的持续时间设置为:onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
则每个1s调用一次void OnOffApplication::StartSending ()表示需要发送1* m_cbrRatebit个数据。当累计要发送的数据量达到一个数据包的大小( m_pktSize)时,调用void OnOffApplication::SendPacket ()进行数据包的发送。
### ns-3 中 CBR 配置与使用实例 #### 创建 CBR 流量发生器对象 为了创建一个 CBR流量发生器,在ns-3中通常会涉及到`OnOffApplication`类,尽管严格来说这不是CBR应用,但在实际操作中经常被用来模拟恒定比特率的行为。对于更精确的CBR行为,可以考虑使用`PacketSink`配合特定参数来实现。 ```cpp Ptr<Socket> socket = Socket::CreateSocket (node, UdpSocketFactory::GetTypeId ()); InetSocketAddress remote = InetSocketAddress (Ipv4Address ("10.1.1.2"), port); socket->Bind (); socket->Connect (remote); // 设置发送速率和其他属性 Config::Set ("/NodeList/$ nodeId/ApplicationList/*/Attribute/DataRate", StringValue ("500kbps")); ``` #### 使用 OnOffHelper 来简化配置过程 通过 `OnOffHelper` 可以更加方便地设定应用程序的各种特性,包括但不限于启动时间、停止时间和数据包大小等。 ```cpp OnOffHelper onoff ("ns3::UdpSocketFactory", Address (InetSocketAddress (ipv4Addr, port))); onoff.SetAttribute ("DataRate", DataRateValue (DataRate ("500kbps"))); onoff.SetAttribute ("PacketSize", UintegerValue (200)); ApplicationContainer apps = onoff.Install (nodes.Get (i)); apps.Start (Seconds (1.0)); apps.Stop (Seconds (10.0)); ``` #### 结合 PacketSink 接收端处理 为了让上述发送方有一个对应的接收者,还需要部署相应的接受组件即 `PacketSink` 应用程序。 ```cpp PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), port)); ApplicationContainer apps = sink.Install (receiverNode); apps.Start (Seconds (0.0)); apps.Stop (Seconds (10.0)); ``` 以上代码片段展示了如何利用ns-3框架中的工具构建简单的CBR流传输环境[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值