C语言实现基于高效率IP路由查找的内容

基于高效率 IP 路由查找的内容

实验内容

实验内容一

实现最基本的前缀树查找

实验内容二

调研并实现某种 IP 前缀查找方案

测试与验证

  • 基于 forwarding-table.txt 数据集(Network, Prefix Length, Port)

  • 本实验只考虑静态数据集,不考虑表的添加或更新

  • 以前缀树查找结果为基准,检查所实现的 IP 前缀查找是否正确

    • 可以将 forwarding-table.txt 中的 IP 地址作为查找的输入
  • 对比基本前缀树和所实现 IP 前缀查找的性能

    • 内存开销、平均单次查找时间

设计思路

最基本的前缀树查找

RouterEntry* line_parser (char * line) 函数

负责将 txt 文件中读取的每一行字符串,转换成路由表项,返回 RouterEntry*,每一个路由表项结构包括三个变量,分别是网络号,掩码长度以及转发端口号。

int net_parser(char * s) 函数

负责将网络号从字符串类型,转换成一个 int 类型。

TreeNode * init_tree() 函数

初始化树结构,即建立一个树的根节点,并返回根节点。

int add_node (RouterEntry* entry) 函数

结果验证

基本前缀树实验结果

实验结果如下:

在这里插入图片描述

上图可知,实现基本前缀树所消耗的内存为 65863400 字节。所需要的查找时间(除去从 txt 中解析字符串的时间)为 118ns。

Leaf Pushing 实验结果

实验结果如下:

在这里插入图片描述

上图可知,实现基本前缀树所消耗的内存为 39518040 字节。所需要的查找时间(除去从 txt 中解析字符串的时间)为 117ns。

两者对比发现 Leaf Pushing 在存在很多路由表项插入的情况下,内存消耗减少 40%。但是时间减小的并不明显。这是因为存在很多路由表项来构建前缀树时,前缀树趋于完全,因此可以减少查询的次数不多。相较于通过算法进行改进,通过编译优化进行速度提升效果更高。

Leaf Pushing 开启 O2 编译优化的的结果如下:

在这里插入图片描述

可以看到此时通过对控制流和指令排布调度等方面的优化,查找的处理速度提高了一个数量级。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值