谷歌quic协议自带网络仿真器代码分析(一)
2017-10-25 14:22
363 查看
谷歌的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
里面主要有这个几个抽象,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
相关文章推荐
- GA谷歌分析 设置网络跟踪代码
- 20145214 《网络对抗技术》 恶意代码分析
- 20144303石宇森 《网络对抗技术》 恶意代码分析
- GA谷歌分析 如何设置网络跟踪
- 如何验证跟踪代码 GA谷歌分析代码安装
- 20145235李涛《网络对抗技术》- 恶意代码分析
- 网络安全可视化系列谈:西电捷通基于安全协议分析的可视化
- Wireshark基本用法---分析网络协议报文
- [置顶] 恶意代码--样本分析学习资料整理网络地址
- 网络协议分析题库练习题(部分)
- 网络协议分析
- 网络协议分析软件Sniffer Pro 4.7.5 破解版
- netlink监听网络变化代码(转载)+流程分析(原创+转载)+数据结构以及相关宏的解析(原创)
- 使用WinPcap抓包分析网络协议
- 基于byte[]的HTTP协议头分析代码
- 20145302张薇 《网络对抗技术》 恶意代码分析
- Linux 网络协议栈开发代码分析篇之数据收发(一) —— netif_receive_skb()函数
- 通过改变网络拓扑使用Sniffer Pro监控、分析协议的示意图
- 网络分析与网络数据集Turn FeatureClass相关代码
- 网络协议分析软件