对内核网络协议栈的学习,验证和深度研究
packetdrill 将大事化小
本文是学习和研究内核网络协议栈的一个文笔记录,主要围绕的是一款能帮助大家深入理解内核网络协议栈的工具——packetdrill。packetdrill工具并不能真实的将复杂的内核系统变得更简单,它所做的是让使用者将对象聚焦于一点。换句话说,它构建了一个定量研究某个特定事物的方法。在其他特性保持一致的状态下,不一致的因素成为全局影响因素的导火索。可以说,packetdrill通过另一种形式将大事化小。
深入packetdrill
packetdrill 现支持TCP、UDP、ICMP协议的网络协议栈测试,虽然不多,但已经足够!
QUIC 也可以用packetdrill来测试了。QUIC-mapped-packetdrill
packetdrill 模拟包和验证包
packetdrill是一个测试工具
简洁明了的说,packetdrill工具是通过自定义脚本的形式,探测网络中包传输的实际过程。这里的网络中包传输实际过程指的是真实网络场景下,端在内核协议有变化的前提收到的真实包的信息。而用户自定义脚本的意义在于,使用者管控不同的内核网络协议栈状态的变化,任意注入不同格式的数据包和对应预期接收的数据包信息。
这些是深入理解内核网络协议栈的利器。
使用者可以学习和验证内核网络协议栈的某个模块对网络传输的意义。并且深入研究和优化内核网络协议栈的爱好者可以利用packetdrill测试自己的成果是否accept,和对已有的内核网络协议栈bugfix。
packetdrill不算简单,但掌握绝对有意义。
packetdrill 设计
这里并不是必要内容,跳过也不影响本文的阅读和对packetdrill的使用。 但如果你有时间,我希望你能学习一下这个章节,在这里你能得到packetdrill的一些内幕,这对你使用packetdrill绝对是一笔划算的买卖。
网上对packetdrill引擎描述的图很多,我就不贴了!
- 执行模块
这个模块是对自定义脚本的执行,关联的分析器和解释器会将packetdrill格式的脚本变成计算机可读的机器码。 - 本地和远端测试
本地模块是测试在本机网卡和本机构建的一个虚拟网卡之间的交互。本地不是涉及到网络中链路等因素的影响。
远端模块是测试在两台物理存在的计算机间的交互。packetdrill能测试真实网络中,内核网络协议栈变化的结果。 - 时间模块
脚本是按照时间顺序进行的,每一行脚本语句都会打上时间戳,以被执行模块的解释器翻译成真实时间下的执行动作。