在NS3协议设计中,数据包的发送和创建是基础, 熟悉了包的相关操作,进行后续协议就会简单很多。拿 wifi-example-apps应用设计代码中包创建为例。
- 调用packet类创建一个给定大小的包:
- 打上时间戳,接收机可用时间戳用来进行相关计算(时延,生存时间)
- 调用Socket套接字,里面有SendTo函数用来数据包发送。
- 如果发送的数据包没有到达设定数目,产生随机中断触发事件发送数据包。
void Sender::SendPacket (){ Ptr<Packet> packet = Create<Packet>(m_pktSize);//创建数据包
TimestampTag timestamp; //时间戳
timestamp.SetTimestamp (Simulator::Now ());
packet->AddByteTag (timestamp);//给数据包打上时间戳
m_socket->SendTo (packet, 0, InetSocketAddress (m_destAddr, m_destPort));//发送数据包,地址和端口
m_txTrace (packet); //记录trace
if (++m_count < m_numPkts) {
m_sendEvent = Simulator::Schedule (Seconds (m_interval->GetValue ()),
&Sender::SendPacket, this);//设计中断发送数据包
}
}