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





