谷歌quic协议自带网络仿真器代码分析(一)

    谷歌的quic代码中带有一个离散时间仿真器,十分短小精悍,易于理解。对于开源的网络离散仿真器,omnet++,ns2(to name a few),自成体系,规模庞大,难以理解。所以本篇文章分析下quic中的simulator,它山之石,可以攻玉。其他的仿真器也可以按照这样的流程理解。

    里面主要有这个几个抽象,Actor,Simulator,Queue,Port,Link,EndPoint。其中Simulator负责总的数据包的传输仿真,负责回调注册到队列的中的Actor。基本模型就是,链路上模拟时延,交换机上模拟队列,队列可以设置长度。Sender与Receiver中的队列可以理解为网卡中的发送队列。

    数据的发送流程,发送端将数据包发送到网卡队列中,网卡队列将数据包发送到链路上(要等待上次数据包产生的发送时延,这里模拟的是网卡的处理能力),l链路模拟传输时延和发送时延(数据包长度/发送带宽),交换机负责数据包的转发,转发数据到接收链路(发送时延+传输时延,调度时间在上次数据包的传输时延之后)

    Sender(Queue)<-----(Link 10Mbps 2ms)----->Switch(Port Queue)<--------(Link 4Mbps  30ms )------->Receiver(Queue)

    交换机中的Port中存在队列,在例子中设置为4*BDP(为什么是这样一个大小,需要后续研究,这个好像与谷歌提出的拥塞控制算法BBR相关)。在交换机中,如果队列长度大于队列容量,则将数据包丢弃。发生丢包时,就是交换机中数据包的接收速度高于发送速度,比如上图所示,发送端按照10M的速度发包,导致交换机在4M链路上来不及处理数据包,就会出现排队现象。

    经过四天的努力,终于把simulator中的代码摘取了出来。下载地址[2]。采用codeblocks的ide,使用了PRId64,编译程序需要定义宏-D__STDC_FORMAT_MACROS[3]。

 

 

[1]quic代码中simulator的位置

[2]代码下载

[3]C++中正确使用PRId64

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值