问题描述
近日调试我那 pub/sub 系统仿真的时候,发现当 pub 发送的包速率快到一定程度之后,莫名其妙的收端就会丢包。调试了一整天,看各种 trace 和 log 终于发现问题出在发端 socket。
庖丁解牛
我们知道 TCP 协议是保障消息可靠性的,在 ns3 中基本上可以认为丢到 TCP 层的包是不会丢失的。
所以显而易见,问题要不就是出在收端应用层没有处理 TCP 递交的包,要不就是根本没有发出去。
二选一么,当然不能扔硬币。我们去看trace文件好了。ns3 提供的 AsciiTrace 可以详细记录每个网络层包的发送情况。使用方法大致长这样:
AsciiTraceHelper ascii;
Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("文件名");