首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnetStack中Ping实用程序实现中往返时间的计算

UnetStack中Ping实用程序实现中往返时间的计算
EN

Stack Overflow用户
提问于 2019-10-05 10:46:11
回答 1查看 320关注 0票数 2

我开发的ping实用程序类似于UnetStack1.3 (/samples/ping)中的ping示例,可以在多跳链路上对远程节点进行ping,但无法计算往返时间(RTT),因为在上层通知(DatagramNtfDatagramDeliveryNtfDatagramFailureNtf)中,没有时间信息可在上层通知(DatagramNtfDatagramDeliveryNtfDatagramFailureNtf)中使用路由代理使用添加到路由表中的静态路由信息发送ping数据包。

往返时间的计算是rxtimetxtimeTxFrameNtfRxFrameNtf的区别,在fshrc.groovy中实现了这两种方法。

我也尝试过分析在UnetStack3中实现的ping实用程序,但是无法完成。请让我知道RTT是如何计算的

EN

回答 1

Stack Overflow用户

发布于 2019-10-09 09:36:21

下面是ping命令在UnetStack3中实现的简化版本:

代码语言:javascript
复制
  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"
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58247561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档