我开发的ping实用程序类似于UnetStack1.3 (/samples/ping)中的ping示例,可以在多跳链路上对远程节点进行ping,但无法计算往返时间(RTT),因为在上层通知(DatagramNtf或DatagramDeliveryNtf或DatagramFailureNtf)中,没有时间信息可在上层通知(DatagramNtf或DatagramDeliveryNtf或DatagramFailureNtf)中使用路由代理使用添加到路由表中的静态路由信息发送ping数据包。
往返时间的计算是rxtime和txtime与TxFrameNtf和RxFrameNtf的区别,在fshrc.groovy中实现了这两种方法。
我也尝试过分析在UnetStack3中实现的ping实用程序,但是无法完成。请让我知道RTT是如何计算的。
发布于 2019-10-09 09:36:21
下面是ping命令在UnetStack3中实现的简化版本:
def ping(int n, int m = 3, long timeout = 30000) {
println "PING $n"
AgentID router = agentForService(Services.ROUTING)
int p = 0
m.times { count ->
def t0 = currentTimeMillis()
router << new DatagramReq(to: n, reliability: true)
def ntf = receive({
it instanceof DatagramDeliveryNtf || it instanceof DatagramFailureNtf
}, timeout)
def t = currentTimeMillis()-t0
if (ntf == null || ntf instanceof DatagramFailureNtf) {
println "Request timeout for seq $count"
} else {
p++
println "Response from $n: seq=$count rthops=2 time=$t ms"
}
delay(5000)
}
println "$m packets transmitted, $p packets received, ${Math.round(100*(m-p)/m)}% packet loss"
}https://stackoverflow.com/questions/58247561
复制相似问题