下定决心投入到网络子系统中,最近在学习TCP栈,基本的流程已经摸清了,但也有不少细节难以理解,
看来得实验了。但有没有什么方便又接近真实场景的实验方案呢?
我研究了包括ns-2和使用kvm等几种方案,最后觉得还是使用uml+cloonix最实用:
uml(user mode linux),可以在用户空间运行Linux内核,当然也包括协议栈了。
cloonix,一个开源的网络模拟平台,可以用图形化的方式构造网络拓扑,可以设置链路的延迟和丢包率。
cloonix可以使用uml,也可以使用kvm/lxc等方式,因为uml调试最方便,我就用uml了。
但cloonix也不是没有缺点:性能不好,虚拟机(包括KVM等)只能是32位的。因为我只想研究TCP
协议的行为,性能不好,好吧,我从了。32位的虚拟机确实不太方便,我必须得编译出个32位的Linux内
核,折腾了一阵没搞定如何在RHEL6上安装32bits gcc的RPM,最后装了32bits的虚拟机编译搞定。
对于我来说,cloonix有一个不足之处是它不能让包乱序,而协议栈中许多代码是处理乱序的情况。
哈,这时cloonix的源代码就有用场了,花了些时间改改,现在可以设置“乱序百分率”了,哈哈~
哈哈,现在可以很方便地debug协议栈了,实在是COOL!
阅读(6612) | 评论(2) | 转发(0) |