【问题标题】:Applying network latency for every TCP packet为每个 TCP 数据包应用网络延迟
【发布时间】:2014-03-19 06:24:58
【问题描述】:

我在实现 TCP 数据包的各种延迟时遇到了问题。我想在 tcl 文件中使用这样的 Gamma 分布:

# Set gamma distribution
set gamma [new RandomVariable/Gamma]
$gamma set alpha_ $alpha
$gamma set beta_ $beta
set gamma2 [$gamma value]

如何使用 gamma2 值作为每个 TCP 数据包的新延迟?我想在发送这样的数据包之前应用这个延迟(但不确定它是否正确)

Agent/TCP instproc mysend {size} {
#change delay
$self change_del
$self send $size
}

谢谢你的回答

【问题讨论】:

    标签: tcl ns2


    【解决方案1】:

    您正在使用 NS2,这意味着您正在使用对象系统 OTcl(它建立在标准 Tcl 之上)。要安装 send 方法的覆盖以便您可以应用延迟,您需要使用 slightly 不同的语法。这一切都假设Agent/TCP 是定义send 的类的子类……

    Agent/TCP instproc send {size} {
        # Change the delay
        $self change_del
        # Chain to the superclass implementation
        $self next $size
    }
    

    next 方法在 OTcl 中相当神奇;它查找调用者的超类实现并使用提供给它的参数调用它。它类似于(但不完全相同)Java 中的 super 关键字和 C# 中的 base 关键字。


    如果Agent/TCP 是一个实例,则使用它来代替:

    Agent/TCP proc send {size} {
        # Change the delay
        $self change_del
        # Chain to the superclass implementation
        $self next $size
    }
    

    这看起来几乎相同,除了现在我们使用 proc 而不是 instproc。

    【讨论】:

    • Tcl 中的其他对象系统使用不同的方式来实现相同的事情(next 不是 TclOO 或 XOTcl 中的方法,两者都可以认为是从 OTcl 派生的,而是一个简单的命令)。
    • 我的change_del函数是这样的,对吗? Agent/TCP proc change_del {} { #从代理节点到节点 0 的链路更改延迟 global ns gamma BS W num_bs_nodes #get 代理所在节点 set mynode [$self set node_] set new_delay [$gamma value] for {set i 0 } {$i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2021-01-28
    • 2014-07-20
    • 2014-01-04
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多