在这个程序中我们将对一个CAIDA的流量文件equinix-nyc.dirB.20180419-131800.UTC.anon.pcap进行分析. 这个流量文件中包含的数据包数为74940702个, 其中TCP和UDP数据包为70084416个, 数据包到达速率大约为1.25Mpps. 我们使用容量无限, 流出速率为12.5Mpps的先进先出队列对这个流量文件进行处理, 并计算在最坏情况下队列的长度 (即队列最拥塞的时候队列中的数据包数).
//解析.c
#include <pcap.h>
#include <net/ethernet.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <翻译包.h>
#include <网络.h>
#include <内存.h>
_类体_ _缓冲区_{
公共域:
_缓冲区_(_整数_ 缓冲区长度) {
本地->缓冲区 = 新建 _流标识符_[缓冲区长度];
本地->队首 = 0;
本地->队尾 = 0;
本地->缓冲区长度 = 缓冲区长度;
}
~_缓冲区_() {
删除[] 本地->缓冲区;
}
空返 入队(_流标识符_ 元数据) {
如果(本地->队首 != (本地->队尾 + 1)%本地->缓冲区长度) {
_复制内存((_字符_*)&本地->缓冲区[本地->队尾], \
(_字符_*)&元数据, _长度(_流标识符_));
本地->队尾 = (本地->队尾 + 1)%本地->缓冲区长度;
}
}
空返 出队(_流标识符_& 元数据)