网络数据包的发送方法及装置的制造方法

文档序号:8398091阅读:655来源:国知局
网络数据包的发送方法及装置的制造方法
【技术领域】
[0001] 本发明涉及通信领域,具体而言,涉及一种网络数据包的发送方法及装置。
【背景技术】
[0002] 在基于Linux操作系统的流媒体服务器应用中,需要将大量的流媒体文件传递到 IP网络上。流媒体报文传输需要很高的平稳性,需要很高的时间精度。现有传输方式下, 对于每一路音频流,都需要使用网络套接字,用户进程将音频文件打包成RTP(Real-time TransportProtocol,实时传送协议)数据包后,调用UDP(UserDatagramProtocol,用户 数据包协议)数据包发送接口,将数据包发送出去。
[0003] UDP数据包的定时发送是通过用户态的定时器实现,由于用户态的线程较多,W及 复杂的业务流程,用户态定时器的高精度很难实现。数据包之间的时间间隔抖动较大,严重 影响了流媒体报文的DF参数。
[0004] 而且,用户进程每发送一个音频数据包,就需要使用一次发送系统调用,每次系统 调用需要先从用户态切换到内核态,系统调用返回后,再从内核态切换到用户态。在流媒体 服务器负荷较重的情况下,会触发大量的数据拷贝和上下文切换操作,极大地消耗系统的 CPU资源,降低系统的处理能力。可W参照图1,图1是根据相关技术的流媒体文件传递流 程示意图。
[0005] 由此可见,由于用户态的定时调用无法达到较高的时间进度,同时业务线程之间 的调用切换也会影响到定时器的精度,每个数据包调用一次系统调用发送会导致频繁的系 统调用,从而极大地消耗CPU资源,导致降低了整个系统性能和整个流媒体服务质量。
[0006] 针对相关技术中流媒体文件传递方法容易降低整个系统性能和整个流媒体服务 质量的问题,目前尚未提出有效的解决方案。

【发明内容】

[0007] 本发明提供了一种网络数据包的发送方法及装置,W至少解决上述问题。
[0008] 根据本发明的一个方面,提供了一种网络数据包的发送方法,包括;Linux操作系 统的内核空间接收用户进程发送的大的网络数据包,其中,大的网络数据包的大小大于或 等于内核空间能够发送的网络数据包的大小;内核空间将大的网络数据包拆分成多个小的 网络数据包,其中,每个小的网络数据包的大小小于或等于内核空间能够发送的网络数据 包的大小;内核空间利用内核空间的定时器发送多个小的网络数据包。
[0009] 优选地,Linux操作系统的内核空间接收用户进程发送的大的网络数据包包括: 内核空间的协议找接收大的网络数据包,并向内核空间的网卡驱动层发送大的网络数据 包;内核空间将大的网络数据包拆分成多个小的网络数据包包括:网卡驱动层将大的网络 数据包拆分成多个小的网络数据包;内核空间利用内核空间的定时器发送多个小的网络数 据包包括:网卡驱动层利用定时器发送多个小的网络数据包。
[0010] 优选地,在Linux操作系统的内核空间接收用户进程发送的大的网络数据包之 前,还包括:设置内核空间,w使内核空间能够接收大的网络数据包。
[0011] 优选地,在内核空间的协议找接收大的网络数据包之前,还包括:设置协议找层, W使协议找层接收大的网络数据包并向网卡驱动层发送接收到的大的网络数据包。
[0012] 优选地,设置协议找层包括:打开Linux操作系统的UF0/GS0功能,通过UF0/GS0 功能使得协议找层接收网络数据包并向网卡驱动层发送接收到的数据包。
[0013] 优选地,网卡驱动层将大的网络数据包拆分成多个小的网络数据包包括;网卡驱 动层根据大的网络数据包中的IP选项头携带的时间信息,将大的网络数据包拆分成多个 小的网络数据包,其中,时间信息包括:预定时间间隔和包发送时间。
[0014] 优选地,网卡驱动层利用定时器发送多个小的网络数据包包括:网卡驱动层将多 个小的网络数据包分别挂接到包发送时间的时间槽中;网卡驱动层每间隔一个预定时间间 隔,按照挂接到时间槽中的顺序发送多个小的网络数据包。
[0015] 优选地,在内核空间将网络数据包拆分成多个小的网络数据包之前,包括;申请预 定数量的套接字缓存S邸用于存储多个小的网络数据包。
[0016] 优选地,在系统的CPU为多核CPU的情况下,包括;为多核CPU的每个内核分配一 个percpu变量和一个专用队列。
[0017] 优选地,定时器为高精度定时器。
[0018] 根据本发明的另一方面,提供了一种网络数据包的发送装置,位于Linux操作系 统的内核空间,包括:接收模块,用于接收用户进程发送的大的网络数据包,其中,大的网络 数据包的大小大于或等于内核空间能够发送的网络数据包的大小;拆分模块,用于将大的 网络数据包拆分成多个小的网络数据包,其中,每个小的网络数据包的大小小于或等于内 核空间能够发送的网络数据包的大小;发送模块,用于利用内核空间的定时器发送多个小 的网络数据包。
[0019] 通过本发明,采用Linux操作系统的内核空间将从用户进程接收到的大的网络数 据包分成多个小的网络数据包,并利用内核空间的定时器发送多个小的网络数据包的方 式,解决了相关技术中流媒体文件传递方法容易降低整个系统性能和整个流媒体服务质量 的问题,可W大大降低系统调用的次数,进而达到了降低系统CPU的消耗、提高整个发包的 性能的效果。
【附图说明】
[0020] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0021] 图1是根据相关技术的流媒体文件传递流程示意图;
[0022] 图2是根据本发明实施例的网络数据包的发送方法流程图;
[0023] 图3是根据本发明实施例的网络数据包的发送装置的结构框图;
[0024] 图4是根据本发明优选实施例的数据包的组织和处理流程示意图;
[0025] 图5是根据本发明优选实施例的高精度时间槽位的实现流程示意图。
【具体实施方式】
[0026] 下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的 情况下,本申请中的实施例及实施例中的特征可w相互组合。
[0027] 本发明实施例涉及计算机应用领域的网络通信领域,主要提供一种网络数据包的 发送方法及装置。当然,在实际应用中,该方法同样可W适用于类似的计算机应用领域。
[0028] 本发明实施例提供了一种网络数据包的发送方法。图2是根据本发明实施例的 网络数据包的发送方法流程图,如图2所示,该方法主要包括W下步骤(步骤S202-步骤 S206):
[0029] 步骤S202,Linux操作系统的内核空间接收用户进程发送的大的网络数据包,其 中,大的网络数据包的大小大于或等于内核空间能够发送的网络数据包的大小;
[0030] 步骤S204,内核空间将大的网络数据包拆分成多个小的网络数据包,其中,每个小 的网络数据包的大小小于或等于内核空间能够发送的网络数据包的大小;
[0031] 步骤S206,内核空间利用内核空间的定时器发送多个小的网络数据包。
[0032] 通过上述各个步骤,Linux操作系统的内核空间可W将从用户进程接收到的大的 网络数据包分成多个小的网络数据包,并利用内核空间的定时器发送多个小的网络数据 包,可W大大降低系统调用的次数,进而降低系统CPU的消耗,提高了整个发包的性能。
[0033] 在本实施例中,步骤S202可W通过该样的方式实现;内核空间的协议找接收大的 网络数据包,并向内核空间的网卡驱动层发送大的网络数据包;步骤S204可W通过该样的 方式实现;网卡驱动层将大的网络数据包拆分成多个小的网络数据包;步骤S206可W通过 该样的方式实现:网卡驱动层利用定时器发送多个小的网络数据包。
[0034] 在本实施例的一个优选实施方式中,在内核空间的协议找接收大的网络数据包之 前,还可W先设置协议找层,W使协议找层接收大的网络数据包并向网卡驱动层发送接收 到的大的网络数据包。具体地,设置协议找层可该样的方式实现:打开Linux操作系统 的UF0/GS0功能,通过UF0/GS0功能使得协议找层接收网络数据包并向网卡驱动层发送接 收到的数据包。
[00巧]在本实施例的一个优选实施方式中,网卡驱动层将大的网络数据包拆分成多个小 的网络数据包包括;网卡驱动层根据大的网络数据包中的IP选项头携带的时间信息,将大 的网络数据包拆分成多个小的网络数据包,其中,时间信息包括;预定时间间隔和包发送时 间。
[0036] 优选地,网卡驱动层利用定时器发送多个小的网络数据包包括:网卡驱动层将多 个小的网络数据包分别挂接到包发送时间的时间槽中;网卡驱动层每间隔一个预定时间间 隔,按照挂接到时间槽中的顺序发送多个小的网络数据包。
[0037] 在本实施例中,在执行步骤S202之前,还可W设置内核空间,W使内核空间能够 接收大的网络数据包。
[0038] 在本实施例中,在执行步骤S204之前,还可W申请预定数量的套接字缓存S邸用 于存储多个小的网络数据包。
[0039] 在本实施例中,在系统的CPU为多核CPU的情况下,可W为多核CPU的每个内核分 配一个percpu变量和一个专用队列。
[0040] 在本实施例中,定时器为高精度定时器,当然,高精度定时器的选择仅仅是作为一 个较佳的实施方式,在实际应用中,内核空间的定时器还可W是精度较低的定时器
[0041] 本发明实施例还提供了一种网络
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1