双向解耦TCP协议开发(一)

来源:互联网 发布:南京java培训评论 编辑:程序博客网 时间:2024/05/17 00:08

最近实验室安排了一个新的任务,是要做双向解耦的TCP协议开发。这个任务我是花了一个月时间,到现在基本做完了。接下来写一下博客来总结一下这个工作。

一. 什么叫双向解耦TCP?

大家都知道TCP协议是一个双向传输的协议,需要三步握手来建立连接、需要四次挥手来断开连接等等。现在的BSD TCP/IP协议栈实际上都是在两个IP地址(或者说两个网卡)之间建立TCP连接。不同节点的两个网卡构成一条路径,也就是说,TCP两个方向的数据包是通过同一路径(path)传输。但是在一些特殊的环境下,特定path上两个传输方向经常具有明显的非对称性。对于网络中的两个节点A和B,A到B可能通过path1传输快,但是B到A方向则通过path2快。我们期望能将TCP两个方向的数据流通过两个不同的path传输,从而最大程度提高网络中链路资源的利用率。我们称这种特殊的TCP协议栈为双向解耦TCP。

二. 这项工作的技术路线如何?

所谓技术路线,指的是实现目标的具体步骤和可能方法。双向解耦TCP这项工作是linux内核开发,而我以前做过的工作都是应用层面的开发,并没怎么做过内核层的开发。甚至连如何调试内核代码都不知道。所以前期花了不少时间调研,思考如何部署测试环境、如何调试TCP/IP协议栈。经过多方调研,最后定下来的技术路线是这样的:

       1. 利用虚拟化技术搭建双机器双网卡的测试环境。

利用VMWARE可以在一台电脑里面装两个ubuntu虚拟机,而在每个ubuntu里面又可以借助QEMU虚拟出一个双网卡、linux、i386的环境。我们在ubuntu的环境编译linux内核和制作文件系统,然后在QEMU虚拟出的环境跑起来内核+文件系统,这样就可以搭建双机器双网卡的测试环境了。

2. 阅读TCP/IP协议栈源码

这块没啥好说的,就是直接看代码。尤其是理清楚socket接口、TCP与IP层的接口这些问题,然后才能有针对性的按照自己的需要去改代码。

3. 部署测试

修改内核源码,部署在测试环境下。因为是测试网络协议栈,所以可以借助wireshark来分析抓包结果。



0 0
原创粉丝点击