2017-08-27 73 views
0

我正在做一些实验。 我使用OnOffApplication生成流量。OnOffApplication with TCP retransmission

然而事情似乎并不正确。我使用 MaxBytes来发送我想要的流量。

而且交通很重。 所以会有一些数据包被丢弃。

看来OnOffApplication不关心丢弃的数据包。 (我不知道,这是我的猜测)

它只发送数据包,直到达到MaxBytes,并且不关心数据包是否被接收。

我的猜测是对的吗?

而且,如果我的猜测是正确的,那么是否有其他选择可以使用。 要生成每个流都具有一定大小的流量,并且必须重新传输,直到收到相同流中的所有数据包。

我的代码是在下面

OnOffHelper source ("ns3::TcpSocketFactory", Address (InetSocketAddress(r_ipaddr, port))); 
source.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1))); 
source.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0))); 
source.SetAttribute ("DataRate", DataRateValue (DataRate(linkBw))); 
source.SetAttribute("PacketSize",UintegerValue (packetSize)); 
source.SetAttribute ("MaxBytes", UintegerValue (tempsize*1000)); 

回答

0

从应用的角度看,开关机只是一个包发生器。它发送具有特定特性(速率,最大数量等)的数据包。它不会跟踪它们。这是设计。

如果你使用TCP虽然,然后套接字将跟踪和确保任何丢失的段重新传输。

应用程序将根据负载生成MaxBytes,但由于TCP(按设计)不尊重消息边界,因此在线路(或空中)上传输的实际数据包可能会有所不同,因为它是一种面向字节流的协议。所以它可以将数据分组绑定在一起,或者以分组的方式将数据分组绑定在一起。