CN101217464B - 一种udp数据包的传输方法 - Google Patents
一种udp数据包的传输方法 Download PDFInfo
- Publication number
- CN101217464B CN101217464B CN2007103045786A CN200710304578A CN101217464B CN 101217464 B CN101217464 B CN 101217464B CN 2007103045786 A CN2007103045786 A CN 2007103045786A CN 200710304578 A CN200710304578 A CN 200710304578A CN 101217464 B CN101217464 B CN 101217464B
- Authority
- CN
- China
- Prior art keywords
- socket
- packet
- layer
- message bag
- udp message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明的目的是提供一种UDP数据包的传输方法,该方法通过将非本地UDP数据包直接重定向到本地网络协议栈进行处理(不依赖于网络地址转换技术)、数据报套接字负载均衡、减少内核层和用户层之间的数据拷贝传递以及减少网络协议栈中执行数据包构建、协议封装、数据链路层或网络层转发信息查找等复杂操作的开销,提高了内核层内部各模块间传输和处理UDP数据包以及内核层与用户层业务程序之间传输数据的效率,实现了应用网关对UDP流量应用层数据的在线高速处理、UDP数据包的快速转发以及对大量并发UDP会话的支持,并保证了应用网关对于通信源端和目的端的透明性。
Description
技术领域
本发明属于计算机网络和数据通信技术领域,涉及一种UDP(User Datagram Protocol)数据包的传输方法,可用于应用网关的设备和软件中,以提高网关传输UDP数据包以及处理其应用层数据的效率,减少系统开销和网络延迟。
背景技术
应用网关通常采用透明代理技术,在客户机和服务器之间充当中间人的角色,接收流经的UDP数据包并重定向到内核层的本地网络协议栈中,由协议栈对数据包进行协议解析处理,还原提取出应用层数据,然后通过数据报套接字(Datagram Socket)将应用层数据从内核层拷贝到用户层,传送给用户层的业务程序(如病毒检测程序、关键词过滤程序等)进行各种处理和修改(如删除、替换);用户层业务程序将处理修改后的数据再通过数据报套接字从用户层拷贝到内核层,交给本地网络协议栈,并通知协议栈采用重定向前原始数据包的目的IP地址和目的端口来重新构建数据包并进行协议封装,然后发送出去。其中,流量重定向多采用网络地址转换技术(Network Address Translation,简称NAT),这主要是由于传统的套接字(如伯克利套接字,参见文献:W.R.Stevens,B.Fenner and A.M.Rodoff,“UNIX Network Programming,Volume 1:The Sockets Networking API”,AddisonWesley,2003;IEEE Std 1003.1)和网络协议栈的实现不能接收和处理非本地目的IP地址和目的端口的数据包,也不能发送非本地源IP地址和源端口的数据包。因此,应用网关对接收到的数据包要进行目的地址转换(DNAT),将其目的IP地址和目的端口改为网关的本地IP地址和本地端口,从而将其重定向传输到应用网关的本地网络协议栈中;对于待发送的数据包则要进行源地址转换(SNAT),将其源IP地址和源端口从网关的本地IP地址和本地端口改为DNAT前原始数据包的源IP地址和源端口。为了区分不同会话的数据包,需要对会话进行跟踪并在会话表中记录NAT操作前后的IP地址和端口信息。
上述技术存在如下几个主要缺陷,造成应用网关处理效率和容量的大幅下降,无法满足在高流量带宽以及存在大量并发会话的网络环境中的性能需求:(1)NAT技术对每一个数据包的IP地址和端口字段进行修改并需重新计算校验和,对系统性能造成一定影响;(2)NAT技术依赖于会话跟踪,需要建立会话表,为每一个UDP会话保存IP地址、端口等信息,而会话跟踪和会话表管理任务的时空间开销繁重,会严重影响系统的性能;(3)数据在内核层和用户层之间多次拷贝传递,以及在发送数据时需要重新进行数据包构建、协议封装、数据链路层或网络层转发信息查找等操作,也会严重降低系统性能。
发明内容
本发明的目的在于提供一种UDP数据包的传输方法,通过将非本地UDP数据包直接重定向到本地网络协议栈进行处理(不依赖于网络地址转换技术)、数据报套接字负载均衡、减少内核层和用户层之间的数据拷贝传递以及减少网络协议栈中执行数据包构建、协议封装、数据链路层或网络层转发信息查找等复杂操作的开销,提高了内核层内部各模块间传输和处理UDP数据包以及内核层与用户层业务程序之间传输数据的效率。
本发明的上述发明目的是通过如下的技术方案实现的:
一种UDP数据包的传输方法,其步骤如下,
1.将应用网关接收到的、目的IP地址为非本地IP地址的UDP数据包传输到内核层的数据包转发模块,数据包转发模块将数据包内核数据结构的bsepsocket字段置1;
2.用户层业务程序创建数据报套接字池,并调用套接字的系统调用函数setsockopt(),将其内核数据结构的sk_sepsocket字段置1;数据包转发模块根据负载均衡算法,从用户层业务程序创建的数据报套接字池中选出一个数据报套接字,将需要由业务程序处理的UDP数据包,分配给所述数据报套接字,所述数据报套接字包含三个数据包换从队列:接收队列、发送队列和深度处理队列;
3.将上述数据报套接字的本地监听端口、数据包转发模块的发送回调函数指针以及数据链路层或网络层转发的目的信息保存到数据包内核数据结构中;
4.数据包转发模块将UDP数据包重定向到内核层的本地网络协议栈的UDP输入处理模块;
5.UDP输入处理模块对UDP数据包的UDP包头进行解析处理,并根据数据包内核数据结构中保存的数据报套接字本地监听端口信息,找到数据包转发模块选出的数据报套接字,将上述数据包加入到该套接字的接收队列的队尾;
6.用户层的业务程序调用套接字的系统调用函数recv()、recvmsg()或recvfrom(),触发UDP输入处理模块从数据报套接字的接收队列的队首取出UDP数据包,还原提取出应用层数据并拷贝到业务程序提供的用户层缓冲区中,其中所述函数均兼容伯克利套接字;如果所述函数的参数flags中包含标识MSG_PREINSPECTING,则将数据包加入到数据报套接字的深度处理队列队尾;
7.业务程序解析处理用户层缓冲区中的数据,调用套接字的系统调用函数send()、sendmsg()或sendto(),并对函数的参数flags进行设置,执行对数据报套接字深度处理队列中的原始UDP数据包的不同处理操作,包括:丢弃;不做任何修改直接交由数据包转发模块发送出去;采用业务程序提供的新数据替换UDP数据包的内容后再交由数据包转发模块发送出去,其中所述系统调用函数均兼容伯克利套接字。
进一步,对函数的参数flags中设置的不同标识,执行对数据报套接字深度处理队列中的原始UDP数据包的处理步骤为:
1)若flags中不包含MSG_POSTINSPECTING标识,则将业务程序提供的应用层数据从用户层拷贝到内核层,UDP输出处理模块重新构建UDP数据包,并将其加入到数据报套接字发送队列队尾,交由本地网络协议栈完成协议封装、数据链路层或网络层转发信息查找等处理后,最终通过数据包转发模块发送出去;
2)若flags中包含MSG_POSTINSPECTING标识,将内核中的原始UDP数据包从数据报套接字的深度处理队列中移出;
3)若flags中包含MSG_POSTINSPECTING标识但不包含MSG_DROP标识和MSG_REPLACE标识,则从数据包内核数据结构中得到发送回调函数指针以及作为函数参数的数据链路层或网络层转发目的信息,然后调用该发送回调函数将UDP原始数据包交给数据包转发模块直接发送出去——对于系统调用sendto(),如果其参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致,则不能执行上述直接发送数据包的操作,而是要转到步骤6)进行处理;
4)若flags中包含MSG_POSTINSPECTING标识和MSG_DROP标识,则将原始UDP数据包丢弃;
5)若flags中包含MSG_POSTINSPECTING标识和MSG_REPLACE标识,则将业务程序提供的应用层数据从用户层拷贝到内核层,替换原始UDP数据包的内容;如果数据长度超过原始UDP数据包内容的长度,则拷贝新的UDP数据包来放置超长部分的数据;重新计算UDP数据包的校验和,然后从数据包内核数据结构中得到发送回调函数指针以及作为函数参数的数据链路层或网络层转发目的信息,调用该发送回调函数将UDP数据包交给数据包转发模块直接发送出去——对于系统调用sendto(),如果其参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致,则不能执行上述直接发送数据包的操作,而是转到步骤6)进行处理;
6)当系统调用sendto()的参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致时,用sockaddr中的地址信息填充UDP数据包的目的IP地址字段和目的端口字段,并重新计算数据包的校验和,然后判断套接字的sk_sepsocket字段是否为1,如果是,则置数据包内核数据结构中的bsepsocket字段为1后将数据包加入套接字的发送队列队尾,交由本地网络内核协议栈发送出去。
进一步,步骤2中所述的用户层的业务程序创建数据报套接字池的步骤为:
1)用户层的业务程序调用套接字的系统调用函数socket(),创建一个数据报套接字;
2)业务程序调用套接字的系统调用函数bind(),设置数据报套接字的本地监听端口;
3)将上述数据报套接字以本地监听端口为键值,加入内核中的数据报套接字散列表;
4)业务程序创建多个数据报套接字,形成一个数据报套接字池。
本发明的优点和积极效果如下:
1.本发明通过将非本地UDP数据包直接重定向到本地网络协议栈进行处理,以及通过数据包发送回调函数直接转发数据包,提高了内核层内部各模块间传输和处理UDP数据包的效率;
2.本发明通过设置套接字的数据包缓冲深度处理队列,以及根据系统调用参数flags中设置的不同标识对其中的原始UDP数据包执行处理,减少了在内核层和用户层之间多次拷贝传递数据以及在网络协议栈中执行数据包构建、协议封装、数据链路层或网络层转发信息查找等复杂操作的开销;
3.本发明通过上述技术手段以及数据报套接字负载均衡,实现了应用网关对UDP流量应用层数据的在线高速处理、UDP数据包的快速转发以及对大量并发UDP会话的支持。
4.本发明保证了应用网关对于通信源端和目的端的透明性。
附图说明
图1本发明实施例的系统结构图;
图2本发明实施例的创建数据报套接字的流程图;
图3本发明实施例的处理UDP数据包的流程图。
具体实施方式
以防病毒应用安全网关为例,参照附图对本发明的一种UDP数据包的传输方法进行详细说明。
图1为该实施例的系统结构图。
数据包的内核数据结构中包含一个非本地数据包标识字段bsepsocket,应用网关的本地网络协议栈根据该字段是否置1来区分非本地数据包(即目的IP地址和源IP地址均不为本地IP地址的数据包)和本地数据包。
数据包的内核数据结构中还包含一个该数据包所属套接字的本地监听端口字段sepsocket_listen_port,通过设置该字段将数据包分配给业务程序创建的一个数据报套接字进行处理,并实现不同数据报套接字间的负载均衡。
数据包的内核数据结构中包含一个回调函数指针字段sepsocket forward callback func和一个函数参数字段sepsocket_forward_callback_params,用以实现UDP数据包的直接发送。
应用网关的本地网络协议栈中包含一个数据报套接字散列表,用以保存所有通过套接字的系统调用socket()创建的数据报套接字,并实现对套接字的快速查找。
套接字的内核数据结构中包含一个标识字段sk_sepsocket,当该字段置1时允许数据报套接字处理非本地UDP数据包。同时为该标识字段增加一个对应的SOL_SOCKET级别的套接字选项SO_SEPSOCKET,使得业务程序可以通过套接字的系统调用setsockopt()对该标识字段进行设置。
每个数据报套接字包含三个数据包缓冲队列:接收队列sk_receive_queue、发送队列sk_write_queue和深度处理队列sk_inspect_queue,用于分别保存从本地网络协议栈接收到的数据包、准备通过本地网络协议栈发送的数据包和正在由业务程序进行处理的数据包。
如图2所示,用户层的业务程序创建数据报套接字的流程为:
(1)用户层的业务程序调用套接字的系统调用函数socket(),新建一个数据报套接字。socket()与伯克利套接字兼容,其调用形式如下:
int socketfd=socket(PF_INET,SOCK_DGRAM,IPPROTO_IP);
(2)业务程序调用套接字的系统调用函数setsockopt(),将该数据报套接字的sk_sepsocket字段置1,从而允许该数据报套接字处理非本地UDP数据包。sk_sepsocket字段对应的套接字选项为SO_SEPSOCKET,级别为SOL_SOCKET。setsockopt()与伯克利套接字兼容,其调用形式如下:
setsockopt(socketfd,SOL_SOCKET,SO_SEPSOCKET,1,sizeof(int));
(3)业务程序调用套接字的系统调用函数bind()——与伯克利套接字兼容,设置该数据报套接字的本地监听端口;
(4)系统调用bind()在获得业务程序给该数据报套接字分配的本地监听端口后,以监听端口为键值将该数据报套接字加入内核的数据报套接字散列表。
业务程序通常按照上述步骤创建多个数据报套接字,形成一个数据报套接字池,再通过并行和负载均衡将UDP会话分散到不同的数据报套接字进行处理,以提高UDP流量的吞吐量。
如图3所示,防病毒应用安全网关处理UDP数据包的流程为:
(1)对于防病毒应用安全网关接收到的、目的IP地址为非本地IP地址的UDP数据包,送入内核层的数据包转发模块进行处理,查找数据链路层或网络层转发目的信息并根据一定的规则判断数据包是否需要由用户层业务程序进行处理;
(2)如果不需要,则将数据包直接转发出去,结束;
(3)如果需要,则数据包转发模块将数据包内核数据结构的bsepsocket字段置1,标明其为非本地数据包;
(4)数据包转发模块根据负载均衡算法(参见文献:C.Kopparapu,“Load BalancingServers,Firewalls,and Caches”,Wiley,2002)从业务程序创建的数据报套接字池中选出一个数据报套接字,将该套接字的本地监听端口保存到数据包内核数据结构的sepsocket_listen_port字段中。负载均衡算法可采用简单轮询算法(round robin)算法,即:假设套接字池中有n个套接字,则当第1个UDP数据包到来时,将其分配给第1个套接字,后续到来的数据包顺序分配给第2、3、...直到第n个套接字,然后又重新从第1个套接字开始分配,如此循环反复;
(5)数据包转发模块将负责后续转发操作的函数作为数据包的发送回调函数,用于在完成对数据包的病毒检测处理后、重新发送数据包时进行调用。数据包转发模块将该函数的指针和参数(即该数据包的数据链路层或网络层转发目的信息)分别保存到数据包内核数据结构的sepsocket_forward_callback_func字段和sepsocket_forward_callback_params字段中;
(6)数据包转发模块将UDP数据包直接重定向到内核层的本地网络协议栈;
(7)本地网络协议栈的UDP输入处理模块得到bsepsocket字段置1的UDP数据包后,对数据包的UDP包头进行解析处理;
(8)UDP输入处理模块以数据包内核数据结构的sepsocket_listen_port字段为散列键值,在数据报套接字散列表中找到sk_sepsocket字段置1且本地监听端口与sepsocket_listen_port字段相同的数据报套接字;
(9)将数据包加入到该数据报套接字的sk_receive_queue队尾,等待用户层业务程序对其应用层数据进行防病毒检测过滤;
(10)用户层的业务程序调用套接字的系统调用函数recv()、recvmsg()或recvfrom()——与伯克利套接字兼容,调用形式如下:
int i=recv(socketfd,buf,len,MSG_PREINSPECTING);
int i=recvmsg(socketfd,msg,MSG_PREINSPECTING);
int i=recvfrom(socketfd,buf,len,MSG_PREINSPECTING,sockaddr,addrlen);
其中,函数参数flags置为MSG_PREINSPECTING;
(11)套接字的系统调用recv()、recvmsg()和recvfrom()触发UDP输入处理模块,从数据报套接字socketfd的sk_receive_queue队首取出UDP数据包,将其应用层数据还原提取出来后拷贝到业务程序提供的用户层缓冲区buf或msg中;
(12)由于上述函数的参数flags中包含标识MSG_PREINSPECTING,因此执行完上述操作后数据报套接字并不立即释放UDP数据包,而是将其加入到数据报套接字的sk_inspect_queue队尾,等待业务程序的处理结果;
(13)业务程序对buf或msg中的数据进行应用协议解析,提取出其中的数据进行病毒扫描检测,并针对不同的检测结果执行相应的处理,包括如下几种情况:检查通过,数据中不含病毒,将原始UDP数据包转发出去;未通过检查,数据中含有病毒,将原始UDP数据包丢弃;未通过检查,数据中含有病毒,将原始UDP数据包的内容进行替换后发送出去;
(14)用户层的业务程序调用套接字的系统调用函数send()、sendmsg()或sendto()——与伯克利套接字兼容,执行对原始UDP数据包的处理,调用形式如下:
int i=send(socketfd,buf,len,flags);
int i=sendmsg(socketfd,msg,flags);
int i=sendto(socketfd,buf,len,flags,sockaddr,addr_len);
其中,函数参数flags根据不同的处理要求进行设置:如果是通过检查、转发,则置为MSG_POSTINSPECTING;如果未通过检查、丢弃,则置为MSG_POSTINSPECTING和MSG_DROP;如果是未通过检查、替换内容后转发,则置为MSG_POSTINSPECTING和MSG_REPLACE;
(15)如果flags中不包含MSG_POSTINSPECTING标识,则套接字的系统调用send()、sendmsg()和sendto()将业务程序提供的缓冲区buf或msg中的应用层数据从用户层拷贝到内核层,并将其连同flags、socketaddr等交给本地网络协议栈的UDP输出处理模块。UDP输出处理模块基于此应用层数据重新构建UDP数据包,并判断套接字的sk_sepsocket字段是否为1,如果是,则置数据包内核数据结构的bsepsocket字段为1,然后将UDP数据包加入sk_write_queue队尾等待发送。sk_write_queue队列中的UDP数据包还要在本地网络协议栈中经协议封装、数据链路层或网络层转发信息查找等处理后,最后交由数据包转发模块发送出去。结束;
(16)如果flags中包含MSG_POSTINSPECTING标识,则将原始UDP数据包从套接字socketfd的sk_inspect_queue队列中移出;
(17)如果flags中包含MSG_POSTINSPECTING标识但不包含MSG_DROP标识和MSG_REPLACE标识,则无需拷贝buf和msg,只需调用数据包内核数据结构的sepsocket_forward_callback_func字段所指向的数据包发送回调函数,并以sepsocket_forward_callback_params字段中保存的数据链路层或网络层转发目的信息为函数参数,将原始UDP数据包交给数据包转发模块直接发送出去(即无需再经过本地网络协议栈进行协议封装、转发信息查找等处理)——对于sendto(),如果参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致,则不能执行上述直接发送数据包的操作,而是要转到步骤(20)进行特殊处理;
(18)如果flags中包含MSG_POSTINSPECTING标识和MSG_DROP标识,则将原始UDP数据包丢弃即可。结束;
(19)如果flags中包含MSG_POSTINSPECTING标识和MSG_REPLACE标识,则将buf或msg中的应用层数据从用户层拷贝到内核层,用此应用层数据替换原始UDP数据包的内容。如果数据的长度超过原始UDP数据包内容的长度,则拷贝若干新的UDP数据包来放置超长部分的数据。重新计算UDP数据包的校验和后,调用数据包内核数据结构中的sepsocket_forward_callback_func字段所指向的数据包发送回调函数,并以sepsocket_forward_callback_params字段中保存的数据链路层或网络层转发目的信息为函数参数,将UDP数据包交给数据包转发模块直接发送出去——对于sendto(),如果参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致,则不能执行上述直接发送数据包的操作,而是要转到步骤(20)进行特殊处理;
(20)当sendto()的参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致时,用sockaddr中的地址信息填充UDP数据包的目的IP地址字段和目的端口字段,并重新计算数据包的校验和,然后判断套接字socket的sk_sepsocket字段是否为1,如果是,则置数据包内核数据结构中的bsepsocket字段为1后将数据包加入sk_write_queue队尾,交由本地网络内核协议栈发送出去。
最后应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (3)
1.一种UDP数据包的传输方法,其步骤如下:
1)将应用网关接收到的、目的IP地址为非本地IP地址的UDP数据包传输到内核层的数据包转发模块,数据包转发模块将数据包内核数据结构的bsepsocket字段置1;
2)用户层业务程序创建数据报套接字池,并调用套接字的系统调用函数setsockopt(),将其内核数据结构的sk_sepsocket字段置1;数据包转发模块根据负载均衡算法,从用户层业务程序创建的数据报套接字池中选出一个数据报套接字,将需要由业务程序处理的UDP数据包,分配给所述数据报套接字,所述数据报套接字包含三个数据包缓冲队列:接收队列、发送队列和深度处理队列;
3)将上述数据报套接字的本地监听端口、数据包转发模块的发送回调函数指针以及数据链路层或网络层转发的目的信息保存到数据包内核数据结构中;
4)数据包转发模块将UDP数据包重定向到内核层的本地网络协议栈的UDP输入处理模块;
5)UDP输入处理模块对UDP数据包的UDP包头进行解析处理,并根据数据包内核数据结构中保存的数据报套接字本地监听端口信息,找到数据包转发模块选出的数据报套接字,将上述数据包加入到该套接字的接收队列的队尾;
6)用户层的业务程序调用套接字的系统调用函数recv()、recvmsg()或recvfrom(),触发UDP输入处理模块从数据报套接字的接收队列的队首取出UDP数据包,还原提取出应用层数据并拷贝到业务程序提供的用户层缓冲区中,其中所述函数均兼容伯克利套接字;如果所述函数的参数flags中包含标识MSG_PREINSPECTING,则将数据包加入到数据报套接字的深度处理队列队尾;
7)业务程序解析处理用户层缓冲区中的数据,调用套接字的系统调用函数send()、sendmsg()或sendto(),并对函数的参数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原始数据包交给数据包转发模块直接发送出去——对于系统调用sendto(),如果其参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致,则不能执行上述直接发送数据包的操作,而是要转到步骤6)进行处理;
4)若flags中包含MSG_POSTINSPECTING标识和MSG_DROP标识,则将原始UDP数据包丢弃;
5)若flags中包含MSG_POSTINSPECTING标识和MSG_REPLACE标识,则将业务程序提供的应用层数据从用户层拷贝到内核层,替换原始UDP数据包的内容;如果数据长度超过原始UDP数据包内容的长度,则拷贝新的UDP数据包来放置超长部分的数据;重新计算UDP数据包的校验和,然后从数据包内核数据结构中得到发送回调函数指针以及作为函数参数的数据链路层或网络层转发目的信息,调用该发送回调函数将UDP数据包交给数据包转发模块直接发送出去——对于系统调用sendto(),如果其参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致,则不能执行上述直接发送数据包的操作,而是转到步骤6)进行处理;
6)当系统调用sendto()的参数sockaddr不为空且其中的地址信息与数据包的目的IP地址和目的端口信息不一致时,用sockaddr中的地址信息填充UDP数据包的目的IP地址字段和目的端口字段,并重新计算数据包的校验和,然后判断套接字的sk_sepsocket字段是否为1,如果是,则置数据包内核数据结构中的bsepsocket字段为1后将数据包加入套接字的发送队列队尾,交由本地网络内核协议栈发送出去。
3.如权利要求1所述的一种UDP数据包的传输方法,其特征在于步骤2)中所述的数据报套接字池的创建方法如下:
1)用户层的业务程序调用套接字的系统调用函数socket(),创建一个数据报套接字;
2)业务程序调用套接字的系统调用函数bind(),设置数据报套接字的本地监听端口;
3)将上述数据报套接字以本地监听端口为键值,加入内核中的数据报套接字散列表;
4)业务程序创建多个数据报套接字,形成一个数据报套接字池。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007103045786A CN101217464B (zh) | 2007-12-28 | 2007-12-28 | 一种udp数据包的传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007103045786A CN101217464B (zh) | 2007-12-28 | 2007-12-28 | 一种udp数据包的传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101217464A CN101217464A (zh) | 2008-07-09 |
CN101217464B true CN101217464B (zh) | 2010-09-08 |
Family
ID=39623827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007103045786A Expired - Fee Related CN101217464B (zh) | 2007-12-28 | 2007-12-28 | 一种udp数据包的传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101217464B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101447925A (zh) * | 2008-12-17 | 2009-06-03 | 中兴通讯股份有限公司 | 一种发送多路数据包的方法及系统 |
WO2011116494A1 (en) * | 2010-03-24 | 2011-09-29 | Thomson Licensing | Method and apparatus for monitoring quality of service of network |
CN102833144A (zh) * | 2011-06-15 | 2012-12-19 | 鸿富锦精密工业(深圳)有限公司 | 网卡数据传输方法及系统 |
US8752063B2 (en) * | 2011-06-23 | 2014-06-10 | Microsoft Corporation | Programming interface for data communications |
CN102223307B (zh) * | 2011-06-29 | 2017-02-15 | 中兴通讯股份有限公司 | 一种处理套接字的方法、分组数据传输的方法及装置 |
CN102413455B (zh) * | 2011-12-22 | 2014-01-15 | 北京北方烽火科技有限公司 | 一种gtp-u数据转发方法 |
CN102695049B (zh) * | 2012-05-09 | 2015-06-10 | 浙江宇视科技有限公司 | 码流发送方法和装置 |
CN104811391B (zh) * | 2014-01-24 | 2020-04-21 | 中兴通讯股份有限公司 | 数据包的处理方法、装置及服务器 |
CN104811431B (zh) * | 2014-01-29 | 2018-01-16 | 华为技术有限公司 | 基于并行协议栈实例的数据包处理方法和装置 |
CN104601645B (zh) * | 2014-10-17 | 2018-01-26 | 新浪网技术(中国)有限公司 | 一种数据包处理方法及装置 |
WO2016045647A2 (zh) * | 2015-11-26 | 2016-03-31 | 华为技术有限公司 | 一种红包数据处理方法及终端 |
CN105827588B (zh) * | 2015-12-23 | 2019-03-15 | 广东亿迅科技有限公司 | 一种基于网络驱动层的流媒体数据分发系统 |
CN107872431B (zh) * | 2016-09-27 | 2021-11-12 | 中兴通讯股份有限公司 | 一种数据收发方法、装置及基站 |
CN108123877A (zh) * | 2016-11-28 | 2018-06-05 | 网宿科技股份有限公司 | 实现非本地网络流量获取的方法、系统及装置 |
CN108228366B (zh) * | 2017-12-29 | 2022-01-25 | 北京奇虎科技有限公司 | 一种数据流的处理方法和装置 |
CN108647104B (zh) * | 2018-05-15 | 2022-05-31 | 北京五八信息技术有限公司 | 请求处理方法、服务器及计算机可读存储介质 |
CN111107042B (zh) * | 2018-10-26 | 2021-03-09 | 广州汽车集团股份有限公司 | 报文解析方法、装置、计算机设备和存储介质 |
CN110166479B (zh) * | 2019-05-31 | 2022-02-01 | 深圳市瑞云科技有限公司 | 一种传输系统提升udp发送效率的方法 |
CN110798487A (zh) * | 2019-11-15 | 2020-02-14 | 广州健飞通信有限公司 | 用户数据报协议模块整合系统 |
CN112040266A (zh) * | 2020-09-10 | 2020-12-04 | 紫光云(南京)数字技术有限公司 | 基于内核转发的udp直播业务优化方法 |
CN113890789B (zh) * | 2021-09-29 | 2023-03-21 | 华云数据控股集团有限公司 | 适用于数据中心的udp隧道流量的分流方法、流量转发方法 |
CN114710570B (zh) * | 2022-03-16 | 2023-08-25 | 深圳市风云实业有限公司 | 一种基于内核态协议栈的udp数据零拷贝传输方法 |
CN114710529B (zh) * | 2022-03-25 | 2024-03-12 | 广州小鹏汽车科技有限公司 | 数据传输方法、装置、系统、车辆及存储介质 |
CN114785474B (zh) * | 2022-03-31 | 2024-02-20 | 上海赫千电子科技有限公司 | 基于tsn时间敏感网络的车内some/ip传输方法、装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1512377A (zh) * | 2002-12-31 | 2004-07-14 | 联想(北京)有限公司 | 基于内核中套接字对接的第七层负载均衡的方法 |
CN1551569A (zh) * | 2003-04-08 | 2004-12-01 | Adv通讯公司 | 网络传输多媒体数据的方法 |
CN1604540A (zh) * | 2004-10-29 | 2005-04-06 | 江苏南大苏富特软件股份有限公司 | 基于通用协议分析引擎的内核级透明代理方法 |
US20050086359A1 (en) * | 2003-10-16 | 2005-04-21 | International Business Machines Corporation | Monitoring thread usage to dynamically control a thread pool |
-
2007
- 2007-12-28 CN CN2007103045786A patent/CN101217464B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1512377A (zh) * | 2002-12-31 | 2004-07-14 | 联想(北京)有限公司 | 基于内核中套接字对接的第七层负载均衡的方法 |
CN1551569A (zh) * | 2003-04-08 | 2004-12-01 | Adv通讯公司 | 网络传输多媒体数据的方法 |
US20050086359A1 (en) * | 2003-10-16 | 2005-04-21 | International Business Machines Corporation | Monitoring thread usage to dynamically control a thread pool |
CN1604540A (zh) * | 2004-10-29 | 2005-04-06 | 江苏南大苏富特软件股份有限公司 | 基于通用协议分析引擎的内核级透明代理方法 |
Non-Patent Citations (2)
Title |
---|
周丽娟.基于UDP协议的Socket网络编程.电脑知识与技术4 7.2008,4(7),1867-1868. * |
唐玉波.基于WinSock的UDP数据转发.电脑编程技巧与维护 7.2005,(7),39-41. * |
Also Published As
Publication number | Publication date |
---|---|
CN101217464A (zh) | 2008-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101217464B (zh) | 一种udp数据包的传输方法 | |
CN101217493B (zh) | 一种tcp数据包的传输方法 | |
US10680951B2 (en) | System and method for processing and forwarding transmitted information | |
EP2940949B1 (en) | Method and device for packet handling | |
CN101047714B (zh) | 一种处理网络数据的方法及系统 | |
CN111614631B (zh) | 一种用户态流水线架构防火墙系统 | |
US8756270B2 (en) | Collective acceleration unit tree structure | |
CN110768994B (zh) | 一种基于dpdk技术的提高sip网关性能的方法 | |
CN104281493A (zh) | 一种提升应用交付通讯平台多进程程序性能的方法 | |
CN113986811B (zh) | 一种高性能内核态网络数据包加速方法 | |
CN112929264B (zh) | 业务流量传输方法、系统及网络设备 | |
CN110932992A (zh) | 一种基于隧道模式的负载均衡通信方法 | |
US10541842B2 (en) | Methods and apparatus for enhancing virtual switch capabilities in a direct-access configured network interface card | |
TWI442248B (zh) | 處理資料之處理器-伺服器混合系統 | |
CN107508828A (zh) | 一种超远程数据交互系统及方法 | |
WO2009053878A1 (en) | Methods and systems for offload processing | |
US11855898B1 (en) | Methods for traffic dependent direct memory access optimization and devices thereof | |
CN114556894A (zh) | 用于分组转发控制协议消息捆绑的方法、装置和计算机程序产品 | |
CN105791239A (zh) | 一种tcp中间人处理方法 | |
CN101699821B (zh) | 一种分布式多核网络系统中地址解析协议实现的方法 | |
CN108040132A (zh) | RapidIO转万兆网关协议实现的系统 | |
CN116089053A (zh) | 一种数据处理方法、装置以及存储介质 | |
KR20120012354A (ko) | 부하 절감형 toe 네트워크 장치 | |
CN1293726C (zh) | 在网络链路上实现快速传输桥接数据的方法 | |
CN102065028B (zh) | 一种网关设备以及报文处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100908 Termination date: 20141228 |
|
EXPY | Termination of patent right or utility model |