[发明专利]一种TCP数据包的传输方法无效
申请号: | 200810055730.6 | 申请日: | 2008-01-08 |
公开(公告)号: | CN101217493A | 公开(公告)日: | 2008-07-09 |
发明(设计)人: | 张建宇;姚嘉;刘晓舟;廖唯棨;邹维 | 申请(专利权)人: | 北京大学 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L29/06 |
代理公司: | 北京君尚知识产权代理事务所 | 代理人: | 余长江 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明的目的在于提供一种TCP数据包的传输方法,该方法通过将非本地TCP数据包直接重定向到本地网络协议栈进行处理(不依赖于网络地址转换技术)、流套接字负载均衡、减少内核层和用户层之间的数据拷贝传递、在内核层的流套接字之间直接传递TCP数据包以及减少网络协议栈中执行数据包构建等复杂操作的开销,提高了内核层内部各模块间传输和处理TCP数据包以及内核层与用户层业务程序之间传输数据的效率,实现了应用网关对TCP流量应用层数据的在线高速处理、TCP数据包的快速转发以及对大量并发TCP会话的支持,并保证了应用网关对于通信源端和目的端的透明性。 | ||
搜索关键词: | 一种 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数据包的内容后发送出去;其中上述步骤中所有系统调用函数均兼容伯克利套接字。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200810055730.6/,转载请声明来源钻瓜专利网。