双向解耦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来分析抓包结果。
- 双向解耦TCP协议开发(一)
- 双向解耦TCP协议开发(二)
- TCP(一 协议)
- TCP协议详解(一)
- TCP/IP协议(一)
- TCP-IP协议(一)
- TCP协议详解(一)
- 关于TCP协议(一)
- TCP IP协议详解一:协议 第一章(一)
- 传输控制协议TCP(一)
- TCP/IP协议 FAQ (一)
- 传输控制协议TCP学习(一)
- TCP/IP协议入门(一)--阮一峰
- TCP/IP协议学习笔记(一)
- TCP/IP协议入门(一)--阮一峰
- TCP/IP协议族(一)
- TCP/IP协议入门(一)--阮一峰
- TCP/IP协议入门(一)--阮一峰
- JS高级表单中几种常用的正则表达式
- 面向对象程序设计上机练习九(对象指针)
- [FJOI2007]轮状病毒
- 随感录
- python的引用和浅拷贝和p深拷贝
- 双向解耦TCP协议开发(一)
- Java之美[从菜鸟到高手演变]之字符串
- linux进程创造 - 内核进程初始化及创建
- poj3261 Milk Patterns
- java中excel表格批量导入
- 根据内核Oops 定位代码工具使用— addr2line 、gdb、objdump
- 【c#】C#中的哈希表(HashTable)详解
- 通过多线程模拟实现Master-Worker模式
- Python爬虫之自动登录与验证码识别