[发明专利]一种TCP数据包的传输方法无效
申请号: | 200810055730.6 | 申请日: | 2008-01-08 |
公开(公告)号: | CN101217493A | 公开(公告)日: | 2008-07-09 |
发明(设计)人: | 张建宇;姚嘉;刘晓舟;廖唯棨;邹维 | 申请(专利权)人: | 北京大学 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L29/06 |
代理公司: | 北京君尚知识产权代理事务所 | 代理人: | 余长江 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 tcp 数据包 传输 方法 | ||
1.一种TCP数据包的传输方法,其步骤如下:
1)将应用网关接收到的、目的IP地址为非本地IP地址的TCP数据包传输到内核层的数据包转发模块;
2)数据包转发模块根据负载均衡算法从用户层业务程序创建的“监听”流套接字池中选出一个“监听”流套接字,将其本地监听端口保存到数据包的内核数据结构中;
3)所述“监听”流套接字响应新建TCP连接握手请求,并创建“数据”流套接字,所述流套接字包含三个数据包缓冲队列:接收队列、发送队列和深度处理队列;“监听”流套接字还包含一个监听队列和一个新建TCP连接队列;
4)数据包转发模块将TCP数据包重定向到内核层的本地网络协议栈;
5)本地网络协议栈的TCP输入处理模块对TCP数据包的TCP包头进行解析处理,在“数据”流套接字散列表中查找是否存在与数据包对应的“数据”流套接字;
6)若存在“数据”流套接字,则将数据包加入到“数据”流套接字的接收队列的队尾,并跳到步骤9;
7)若不存在“数据”流套接字,则在“监听”流套接字散列表中找到数据包转发模块选出的“监听”流套接字,将数据包加入到“监听”流套接字的监听队列的队尾;
8)TCP新建连接模块从监听队列队首取出TCP数据包,完成与客户机的新建TCP连接握手,创建与客户机进行通信的“数据”流套接字,将该流套接字加入到内核中的“数据”流套接字散列表以及“监听”流套接字的新建TCP连接队列队尾;
9)用户层的业务程序调用套接字的系统调用函数accept(),从“监听”流套接字的新建TCP连接队列队首取出“数据”流套接字并返回其信息给业务程序;调用套接字的系统调用函数socket(),创建与服务器通信的“数据”流套接字;调用套接字的系统调用函数connect(),建立应用网关与服务器间的TCP连接;
10)业务程序调用套接字的系统调用函数,触发TCP输入处理模块从“数据”流套接字的接收队列的队首取出TCP数据包,还原提取出应用层数据并拷贝到业务程序提供的用户层缓冲区中,如果所述函数的参数flags中包含标识MSG_PREINSPECTING,则将数据包加入到“数据”流套接字的深度处理队列队尾;
11)业务程序解析处理用户层缓冲区中的数据,调用套接字的系统调用函数,并根据所述函数的参数flags中设置的不同标识,执行对“数据”流套接字深度处理队列中的原始TCP数据包的处理操作,包括:丢弃;对TCP数据包的内容不做任何修改原样发送出去;采用业务程序提供的数据替换TCP数据包的内容后发送出去;其中上述步骤中所有系统调用函数均兼容伯克利套接字。
2.如权利要求1所述的一种TCP数据包的传输方法,其特征在于步骤2)中所述的“监听”流套接字池的创建方法如下:
1)用户层的业务程序调用套接字的系统调用函数socket(),创建一个流套接字;
2)业务程序调用套接字的系统调用函数bind(),设置流套接字的本地监听端口;
3)业务程序调用套接字的系统调用函数listen(),将流套接字设置为“监听”流套接字,并以本地监听端口为键值将其加入内核中的“监听”流套接字散列表;
4)业务程序创建多个“监听”流套接字,形成一个监听”流套接字池。
3.如权利要求1所述的一种TCP数据包的传输方法,其特征在于步骤2)中所述的负载均衡算法采用对源IP地址、源端口、目的IP地址和目的端口进行哈希的方法。
4.如权利要求1所述的一种TCP数据包的传输方法,其特征在于步骤5)中,TCP输入处理模块根据数据包的目的IP地址、目的端口、源IP地址和源端口信息查找是否存在对应的“数据”流套接字。
5.如权利要求1所述的一种TCP数据包的传输方法,其特征在于步骤7)中在TCP输入处理模块根据数据包内核数据结构中保存的“监听”流套接字的本地监听端口信息,找到数据包转发模块选出的“监听”流套接字。
6.如权利要求1所述的一种TCP数据包的传输方法,其特征在于步骤9)中所述信息包括目的IP地址、目的端口、源IP地址和源端口。
7.如权利要求1所述的一种TCP数据包的传输方法,其特征在于步骤10)中,所述的系统调用函数为recv()、recvmsg()或recvfrom()。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810055730.6/1.html,转载请声明来源钻瓜专利网。