目录
引言 1
实现流程 2
2.1设计原理 2
sk_buff 2
Netfilter 6
ptype_base 7
2.2设计方案 8
发送子模块 8
接收子模块 10
统计子模块 11
2.3软件实现 11
初始化 12
发送子模块 13
接收子模块 14
统计子模块 14
注销 15
测试方法与结果分析 15
3.1测试环境 15
3.2测试方法 16
3.3测试流程与结果分析 17
结束语 24
引言
如今,TCP/IP 协议栈已经普遍运行在了大多数的计算机设备之上。然而由于科研、生产 的特殊需求,在 TCP/IP 协议栈的基础之上添加定制特定功能的协议栈的需求也日渐流行。
在 Linux 系统中,TCP/IP 协议栈位于内核空间中[1]。因此若要在协议栈中添加新协议必须 对内核进行修改。然而, 由于 Linux 内核是一种宏内核, 不同协议功能之间相互耦合,内核 的可扩展性较差。为了克服上述缺点,Linux 引入了内核模块机制,其全称为动态可加载内 核模块(Loadable Kernel Module,LKM)[2]。通过动态加载或卸载外部模块, 开发者可以轻松地 在内核中添加或删除特定功能。 因此编写外部协议功能模块是在 Linux 系统上开发新协议的 有效手段之一。
本文的主要工作为实现了一个虚拟网络设备接口(Virtual Network Device Interface,VNI)模 块。其主要功能为在 IP 实体与 MAC 实体之间添加了一个 VNI 实体。发送方在 IP 包前封装一 个 VNI 头部, 并用 MAC 帧 (802.3 帧) 承载发送, 帧格式如图 1-1,其中 VNI 头部的 seq 字 段从零开始递增。接收方去掉 VNI 头部上交给 IP 模块。