CN115665267A - 一种轻量级网络协议栈的实现方法及装置 - Google Patents
一种轻量级网络协议栈的实现方法及装置 Download PDFInfo
- Publication number
- CN115665267A CN115665267A CN202211285225.7A CN202211285225A CN115665267A CN 115665267 A CN115665267 A CN 115665267A CN 202211285225 A CN202211285225 A CN 202211285225A CN 115665267 A CN115665267 A CN 115665267A
- Authority
- CN
- China
- Prior art keywords
- protocol
- network
- layer
- protocol module
- 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.)
- Pending
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明公开了一种轻量级网络协议栈的实现方法及装置,将网络协议栈划分为网络层、传输层和应用层共三个协议层,网络层包括IP协议模块、APR协议模块和ICMF协议模块,传输层包括UDP协议模块和TCP协议模块,应用层包括PING协议模块和SNTP协议模块,从网络驱动获取网络协议报文,并将网络协议报文直接拷贝到内存缓冲区,控制网络层、传输层和应用层在内存缓冲区处理网络协议报文。本发明通过在网络协议栈初始化期间创建一个内存缓冲区,并将网络协议报文直接拷贝到内存缓冲区中,使三个协议层间统一在内存缓冲区中对网络协议报文进行处理,实现数据零拷贝,减少TCP/IP协议占用的资源,提高嵌入式设备的数据处理性能。
Description
技术领域
本发明涉及网络协议栈技术领域,更具体的说,涉及一种轻量级网络协议栈的实现方法及装置。
背景技术
目前,网络协议栈主要采用TCP(Transmission Control Protocol,传输控制协议)/IP(Internet Protocol,网络协议)协议,TCP/IP协议是由多个协议构成的协议簇,由于在TCP/IP协议中TCP协议和IP协议最具代表性,因此该协议簇被称为TCP/IP协议。
现有技术中,Internet网络上的通信实现方式大部分是基于TCP/IP协议,嵌入式设备若与Internet网络实现通信,需要支持TCP/IP网络协议。目前,Internet的各种网络协议对内存、CPU(Central Processing Unit,中央处理器)运算速度的要求较高,然而嵌入式设备存在内存容量小,CPU运算速度较低的问题,若嵌入式设备支持TCP/IP协议会占用大量资源,导致嵌入式设备的数据处理性能降低。
发明内容
有鉴于此,本发明公开一种轻量级网络协议栈的实现方法及装置,以实现在网络协议栈初始化期间创建一个内存缓冲区,并将从网络驱动获取的网络协议报文直接拷贝到内存缓冲区中,使得应用层、传输层和网络层三个协议层间统一在内存缓冲区中对网络协议报文进行处理,无需拷贝其他内存数据,从而实现数据的零拷贝,减少TCP/IP协议占用的资源,进而提高嵌入式设备的数据处理性能。
一种轻量级网络协议栈的实现方法,包括:
将网络协议栈划分为网络层、传输层和应用层共三个协议层,所述网络层包括:IP协议模块、APR协议模块和ICMF协议模块,所述传输层包括:UDP协议模块和TCP协议模块,所述应用层包括:PING协议模块和SNTP协议模块;
从网络驱动获取网络协议报文;
将所述网络协议报文直接拷贝到内存缓冲区,其中,所述内存缓冲区在所述网络协议栈初始化期间创建;
控制所述网络层、所述传输层和所述应用层在所述内存缓冲区处理所述网络协议报文。
可选的,所述内存缓冲区在所述网络协议栈初始化期间创建时,采用静态配置方法,且所述网络协议栈运行期间禁止动态内存空间的申请和释放。
可选的,所述IP协议模块的主要功能为:完成路由寻址和消息传递,解决网络互联问题,实现大规模和异构网络的互联互通。
可选的,所述IP协议模块用于:
在数据链路层有以太网数据报文时,通过数据链路层释放的IP协议模块接收任务信号量,接收任务内部调用数据链路层的接收函数,以直接获取数据链路层的以太网数据报文中的IP数据报文,并经过解析判断其是否符合IPv4协议,通过内部的UDP/TCP处理函数将UDP/TCP数据报文传送给所述传输层;
所述IP协议模块还用于:当传输层下发的UDP/TCP数据报文时,调用IP模块内部的发送函数,通过所述发送函数将UDP/TCP数据报文封装成IP数据报文,并调用数据链路层的发送函数将所述IP数据报文发送出去。
可选的,所述APR协议模块的主要功能为:将IP地址解析为物理地址,并在内部生成一个所述IP地址和所述物理地址的映射表。
可选的,所述APR协议模块用于:在查询ARP表项IP地址对应的物理地址失败后,调用内部的发送函数发送ARP请求数据报文至数据链路层,通过ARP应答处理函数接收所述数据链路层在接收到所述ARP请求数据报文后反馈的ARP应答数据报文,并根据所述ARP应答数据报文更新内部的ARP表项;
所述APR协议模块还用于:在接收到ARP请求数据报文后,调用内部的ARP请求处理函数,通过所述ARP请求处理函数直接调用内部的发送函数以向所述数据链路层发送ARP应答数据报文。
可选的,ICMF协议模块用于在IP主机和路由器之间传递控制消息。
可选的,UDP协议模块的主要功能为:实现无需建立连接即可发送封装的数据包。
可选的,UDP协议模块用于:
调用自身的发送函数,通过所述发送函数将应用层发送的应用数据报文封装成UDP数据报文,并通过调用的所述网络层的发送函数将所述UDP数据报文发送至所述网络层;
所述UDP协议模块还用于:当网络层接收到UDP数据报文的接收任务,将UDP数据报文放入相应的接收队列且释放所述UDP协议模块内部接收函数的信号量时,通过接收函数将所述UDP数据报文拆分为应用数据报文并发送至所述应用层。
可选的,所述TCP协议模块的主要功能为:完成对数据包的确认、流量控制和网络拥塞,自动检测数据包提供错误重发的功能,将多条路径传送的数据包按照原来的顺序进行排列,控制超时发送。
可选的,所述TCP协议模块用于:当接收到所述应用层发送的应用数据报文时,调用内部的发送函数,通过所述发送函数更新发送管理队列里未应答报文计数和将未应答报文插入所述发送管理队列里的发送未应答队列;通过所述网络层的发送函数将TCP数据报文发送至所述网络层,接收所述网络层发送的ACK应答报文,并根据所述ACK应答报文更新所述发送管理队列中的未应答报文计数,并将相应未应答队列数据报文删除;
所述TCP协议模块还用于:接收所述网络层释放的接收函数信号量,并从相应的接收队列中获取应用数据报文,并上报至所述应用层,并通过ACK发送函数向所述网络层发送ACK应答数据报文。
可选的,所述PING协议模块用于:向目的主机发送ICMP的ECHO请求报文,通过所述ECHO请求报文测试目的站是否可达并了解所述目的站有关状态。
可选的,所述SNTP协议模块用于:采用客户端/服务器的工作方式,并分为SNTP服务器和SNTP客户端;
所述SNTP服务器将接收的GPS信号或自带的原子钟作为系统时间基准;
所述SNTP客户端用于通过定期访问所述SNTP服务器获得准确时间信息,根据所述准确时间信息调整自身所在系统的时间,达到与所述SNTP服务器时间同步的目的。
一种轻量级网络协议栈的实现装置,包括:
划分单元,用于将网络协议栈划分为网络层、传输层和应用层共三个协议层,所述网络层包括:IP协议模块、APR协议模块和ICMF协议模块,所述传输层包括:UDP协议模块和TCP协议模块,所述应用层包括:PING协议模块和SNTP协议模块;
获取单元,用于从网络驱动获取网络协议报文;
拷贝单元,用于将所述网络协议报文直接拷贝到内存缓冲区,其中,所述内存缓冲区在所述网络协议栈初始化期间创建;
控制单元,用于控制所述网络层、所述传输层和所述应用层在所述内存缓冲区处理所述网络协议报文。
从上述的技术方案可知,本发明公开了一种轻量级网络协议栈的实现方法及装置,将网络协议栈划分为网络层、传输层和应用层共三个协议层,网络层包括:IP协议模块、APR协议模块和ICMF协议模块,传输层包括:UDP协议模块和TCP协议模块,应用层包括:PING协议模块和SNTP协议模块,从网络驱动获取网络协议报文,并将网络协议报文直接拷贝到内存缓冲区,控制网络层、传输层和应用层在内存缓冲区处理网络协议报文。本发明通过在网络协议栈初始化期间创建一个内存缓冲区,并将从网络驱动获取的网络协议报文直接拷贝到内存缓冲区中,使得应用层、传输层和网络层三个协议层间统一在内存缓冲区中对网络协议报文进行处理,无需拷贝其他内存数据,从而实现了数据的零拷贝,减少了TCP/IP协议占用的资源,进而提高了嵌入式设备的数据处理性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。
图1为本发明实施例公开的一种轻量级网络协议栈的实现方法流程图;
图2为本发明实施例公开的一种网络协议栈的总体架构图;
图3为本发明实施例公开的一种IP协议消息头的格式示意图;
图4为本发明实施例公开的一种IP协议模块的管理软件框架图;
图5为本发明实施例公开的一种APR协议的报文格式示意图;
图6为本发明实施例公开的一种APR协议模块的管理软件框架图;
图7为本发明实施例公开的一种ICMP报文格式示意图;
图8为本发明实施例公开的一种UDP报文格式示意图;
图9为本发明实施例公开的一种UDP协议模块的管理软件框架图;
图10为本发明实施例公开的一种TCP头部信息图;
图11为本发明实施例公开的一种TCP协议模块的管理软件框架图;
图12为本发明实施例公开的一种SNTP报文格式示意图;
图13为本发明实施例公开的一种轻量级网络协议栈的实现装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种轻量级网络协议栈的实现方法及装置,将网络协议栈划分为网络层、传输层和应用层共三个协议层,网络层包括:IP协议模块、APR协议模块和ICMF协议模块,传输层包括:UDP协议模块和TCP协议模块,应用层包括:PING协议模块和SNTP协议模块,从网络驱动获取网络协议报文,并将网络协议报文直接拷贝到内存缓冲区,控制网络层、传输层和应用层在内存缓冲区处理网络协议报文。本发明通过在网络协议栈初始化期间创建一个内存缓冲区,并将从网络驱动获取的网络协议报文直接拷贝到内存缓冲区中,使得应用层、传输层和网络层三个协议层间统一在内存缓冲区中对网络协议报文进行处理,无需拷贝其他内存数据,从而实现了数据的零拷贝,减少了TCP/IP协议占用的资源,进而提高了嵌入式设备的数据处理性能。
参见图1,本发明实施例公开的一种轻量级网络协议栈的实现方法流程图,该方法包括:
步骤S101、将网络协议栈划分为网络层、传输层和应用层共三个协议层。
其中,本实施例中的网络协议栈主要为SNP(Simple Network Protocol-stack,精简网络协议栈组件)网络协议栈。
详见图2所示的网络协议栈的总体架构图,其中:
网络层包括:IP协议模块、APR(Address Resolution Protocol,地址解析协议)协议模块和ICMF(Internet Control Message Protocol)协议模块。
IP协议模块主要功能是完成路由寻址和消息传递功能,解决网络互联问题,实现大规模、异构网络的互联互通。
APR协议模块主要功能是将IP地址解析为物理地址(MAC地址),内部生成一个IP地址和物理地址的映射表。
ICMF协议模块主要是用于在IP主机和路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等
传输层包括:UDP(User Datagram Protocol,用户数据报协议)协议模块和TCP(Transmission Control Protocol,传输控制协议)协议模块。
UDP协议模块的主要功能是实现无需建立连接即可发送封装的数据包,或者说,UDP协议模块的主要功能是提供了一种无需建立连接就可以发送封装的数据包的方法。
TCP协议模块的主要功能是完成对数据包的确认、流量控制和网络拥塞,自动检测数据包提供错误重发的功能,将多条路径传送的数据包按照原来的顺序进行排列,控制超时发送。
应用层包括:PING协议模块和SNTP(Simple Network Time Protocol,简单网络时间协议)协议模块。
步骤S102、从网络驱动获取网络协议报文。
步骤S103、将网络协议报文直接拷贝到内存缓冲区。
其中,内存缓冲区在网络协议栈初始化期间创建。
本实施例中内存缓冲区的结构体参数如表1所示:
表1
序号 | 参数 |
1 | 缓冲区总数 |
2 | 单个缓冲区数据空间大小 |
3 | 是否支持SACK |
4 | URG指针 |
5 | 滑动窗口大小单位值 |
6 | TCP滑动窗口大小 |
7 | TCP监听允许最大连接数 |
8 | TCP最大报文段 |
9 | TCP链接的哈希表大小 |
10 | ARP表数据发送任务posix优先级 |
11 | ARP表更新周期 |
步骤S104、控制网络层、传输层和应用层在内存缓冲区处理网络协议报文。
其中,对网络协议报文的处理操作包括但不限于报文校验、报文打包和报文解析等。
需要说明的是,通过控制网络层、传输层和应用层在内存缓冲区处理网络协议报文,可以使得网络层、传输层和应用层无需拷贝网络协议报文,对网络协议报文的所有操作全部在内存缓冲区中完成,从而减少了系统资源的消耗,提升了系统性能。
综上可知,本发明公开了一种轻量级网络协议栈的实现方法,将网络协议栈划分为网络层、传输层和应用层共三个协议层,网络层包括:IP协议模块、APR协议模块和ICMF协议模块,传输层包括:UDP协议模块和TCP协议模块,应用层包括:PING协议模块和SNTP协议模块,从网络驱动获取网络协议报文,并将网络协议报文直接拷贝到内存缓冲区,控制网络层、传输层和应用层在内存缓冲区处理网络协议报文。本发明通过在网络协议栈初始化期间创建一个内存缓冲区,并将从网络驱动获取的网络协议报文直接拷贝到内存缓冲区中,使得应用层、传输层和网络层三个协议层间统一在内存缓冲区中对网络协议报文进行处理,无需拷贝其他内存数据,从而实现了数据的零拷贝,减少了TCP/IP协议占用的资源,进而提高了嵌入式设备的数据处理性能。
另外,相对于传统方案中网络协议栈采用的TCP/IP协议较多,导致报文协议处理流程复杂,代码量较大而言,本发明减少了网络协议栈中各协议层中的协议数量,实现了对网络协议栈的精简,也即提供了一个轻量级协议栈,从而大大减少了代码量,进而便于测试验证和行业认证等。
为进一步优化上述实施例,在网络协议栈初始化期间采用静态配置方法创建内存缓冲区,在协议栈运行期间禁止动态内存空间的申请和释放,从而提高数据的确定性。
为便于理解本发明公开的网络协议栈,下面针对各个协议层的协议进行详细说明,如下:
(1)网络层
1、IP协议模块
IP协议模块支持IPV4协议,满足标准协议。一个完整的IP数据包主要包含:IP首部(即IP协议消息头)、TCP/UDP首部和应用数据。
其中,IP协议消息头的格式如图3所示,IP协议消息头包括:版本号(4位)、头部长度(4位)、服务类型TOS(8位)、总长度(16位)、标识(16位)、标志(3位)、位偏移(13位)、生存时间TTL(8位)、协议(8位)、头部校验和(16位)、源IP地址(32位)、目的IP地址(32位)以及选项(最多40字节)。
IP协议模块的管理软件框架图如图4所示,从图4中可知,IP协议模块的主要功能是IP数据报文的接收处理和IP数据报文的发送处理,下面分别对IP数据报文的接收处理流程和发送处理流程进行说明。
IP数据报文的接收处理流程:IP协议模块的接收任务在数据链路层没有以太网数据报文时,在任务信号量的作用下任务处于休眠状态;当数据链路层有以太网数据报文时,通过数据链路层释放的IP协议模块接收任务信号量,接收任务内部调用数据链路层的接收函数,以直接获取数据链路层的以太网数据报文中的IP数据报文,并经过解析判断其是否符合IPv4协议,通过内部的UDP/TCP处理函数将UDP/TCP数据报文传送给所述传输层。
IP数据报文的发送处理流程:当传输层下发的UDP/TCP数据报文时,调用IP模块内部的发送函数,通过所述发送函数将UDP/TCP数据报文封装成IP数据报文,并调用数据链路层的发送函数将所述IP数据报文发送出去。
2、APR协议模块
APR协议模块用于将IP地址解析为以太网的MAC地址(物理地址)的协议;在局域网中,主机或者其他网络设备发送数据给其他设备时,必须知道对方的IP地址,但仅仅有IP地址是不能将数据发送到某一台主机,需要一个从IP地址到物理地址的映射,ARP即为实现这个功能的协议。
APR协议的报文格式如图5所示,APR协议包括:硬件类型、上层协议类型、MAC(Multiple Access Control Protocol)地址长度、IP地址长度、操作类型、源MAC地址、源IP地址、目的MAC地址和目标IP地址。
APR协议模块的管理软件框架图如图6所示,从图中可以看出,APR协议模块的主要原理为实现ARP请求功能和ARP应答功能。
ARP请求功能:在网络层首次向目的IP地址的端口发送数据时,若ARP协议模块查询ARP表项IP地址对应的物理地址(MAC地址)失败,则ARP协议模块调用内部的发送函数发送ARP请求数据报文至数据链路层,数据链路层在接受到ARP请求数据报文后,发送ARP应答数据报文且将自身的物理地址写入ARP应答数据报文中,ARP协议模块的ARP应答处理函数收到ARP应答数据报文后更新内部的ARP表项。
ARP应答功能:ARP协议模块在接收到ARP请求数据报文后,调用内部的ARP请求处理函数,通过所述ARP请求处理函数直接调用内部的发送函数以向数据链路层发送ARP应答数据报文。
3、ICMP协议模块
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。ICMP协议是一个非常重要的协议,它对于网络安全具有极其重要的意义。ICMP协议属于网络层协议,主要用于在IP主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,ICMP协议模块会自动发送ICMP消息。
ICMP报文格式如图7所示,ICMP报文包括:类型、代码和校验和,ICMP数据部分长度取决于类型,通过上面的格式组成ICMP报文,ICMP报文是IP数据报文的数据部分,IP数据报文除了包括数据部分,还包括首部。
具体的,ICMP报文包含在IP数据报中,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
ICMP协议模块提供一致易懂的出错报告信息。发送的出错报文返回到发送设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
(2)传输层
1、UDP协议模块
UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是一个简单的面向数据报的传输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP不提供可靠的传输,它只是把应用数据传给IP层的数据报发出去,但是并不能保证他们能到达目的地。由于UDP在传输数据报前不用在客户端和服务器之间建立连接,且没有超时重发机制,故而传输速度快。
UDP的主要特点如下:
(1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延;
(2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维系复杂的连接状态表;
(3)UDP是面向报文的,发送方的UDP对应程序交付下来的报文,在添加首部后就向下交付给IP层;UDP对应用层交付下来的报文,既不合并,也不拆分,而是保留这些报文的边界;因此,应用程序必须选择合适大小的报文;
(4)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低;很多实时应用(如IP电话、实时视频会议)要求源主机以恒定的速率发送速度,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太多的时延;UDP正好符合这种要求;
(5)UDP支持一对一、一对多、多对一和多对多的交互通信;
(6)UDP的首部开销小,只有8个字节。
UDP报文分为首部和用户数据部分,UDP报文格式如图8所示,包括:16位源端口号(对应16位UDP长度)、16位目的端口号(对应16位UDP校验和)何数据。
UDP协议模块的管理软件框架图如图9所示,UDP协议主要分为:UDP发送处理流程和UDP接收处理流程。
UDP发送处理流程:当应用层发送应用数据报文时,UDP协议模块调用自身的发送函数,该发送函数做一些配置工作后将应用数据报文封装成UDP数据报文,然后调用网络层的发送函数将UDP数据报文发送至网络层。
UDP接收处理流程:首先在接受处理中应用层调用应用层的API函数,应用层的API函数最终调用UDP协议模块的接收函数并等待接收释放的信号量;当网络层接收到UDP数据报文的接收任务,将UDP数据报文放入相应的接收队列且释放UDP协议模块内部接收函数的信号量时,UDP协议模块内部通过接收函数将UDP数据报文拆分为应用数据报文并发送至应用层。
2、TCP协议模块
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP的主要特点如下:
(1)TCP是面向连接的;
(2)每一条TCP连接只能有两个端点,每一条连接只能是点对点的;
(3)TCP提供可靠交付的服务;通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
(4)TCP提供全双工通信;TCP允许通信双方的应用进程在任何时候都能发送数据;TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
(5)面向字节流,虽然应用程序的TCP的交互是一次一个数据块(大小不等),但是TCP把应用程序交下来的数据仅仅看成一连串的无结构的字节流。
TCP报文分为首部和应用数据,参见图10所示的TCP头部信息图,包括:16位源端口号、16位目的端口号、32位序列号、32位确认号、4位TCP头部大小、4位预留、CWR、ECE、URG、ACK、PST、SYN、FIN、16位窗口大小、16为校验值、16位紧急指针和32位TCP选项。
TCP协议模块的管理软件框架图如图11所示,TCP协议模块管理的核心分别是TCP发送处理流程和TCP接收处理流程。
TCP发送处理流程:当应用数据报文下发时调用TCP协议模块内部的发送函数;该发送函数的主要工作是更新发送管理队列里未应答报文计数和将未应答报文插入发送管理队列里的发送未应答队列,调用网络层的发送函数将TCP数据报文发送至网络层;网络层收到TCP数据报文发送ACK应答报文,TCP协议模块在接收到该ACK应答报文后更新发送管理队列中的未应答报文计数,并将相应未应答队列数据报文删除。
TCP接收处理流程:应用层在需要接收数据时调用API接收函数,API接收函数最终调用TCP协议模块内部的接收函数,开始时由于没有数据,所以TCP内部接收函数在信号量的作用下处于阻塞状态下,当网络层有TCP数据报文时,首先释放网络层的接收任务信号量,接收任务开始正常运行内部并把数据放入相应的接收队列中,最后释放TCP协议模块的接收函数信号量;TCP协议模块的接收函数信号量被释放后从相应的接收队列中将应用数据报文取出并将应用数据报文上报给应用层,并通过ACK发送函数向所述网络层发送ACK应答数据报文。
(3)应用层
1、PING协议模块
PING(Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。PING是工作在TCP/IP网络体系结构中应用层的一个服务命令,主要功能是向特定的目的主机发送ICMP(Internet Control Message Protocol,因特网报文控制协议)的ECHO请求报文,通过ECHO请求报文测试目的站是否可达及了解目的站有关状态;报文格式与实现原理和ICMP是一样的,是ICMP具体ECHO命令的一种应用,PING协议报文格式和实现原理可以参照ICMP章节。
2、SNTP协议模块
SNTP(Simple Network Time Protocol,简单网络时间协议)由NTP改编而来,主要用来同步因特网中的计算机时钟;可以分为SNTP服务器和SNTP客户端。
SNTP协议模块采用客户端/服务器的工作方式,可以采用单播(点对点)或者广播(一点对多点)模式操作。SNTP服务器将接收的GPS信号或自带的原子钟作为系统时间基准。单播模式下,SNTP客户端能够通过定期访问SNTP服务器获得准确时间信息,根据所述准确时间信息调整SNTP客户端自身所在系统的时间,达到与SNTP服务器时间同步的目的。
SNTP报文格式如图12所示,各个组成部分如下:
(1)LI_VN_MODE:这个由三个字段构成分别为LI、VN、MODE;LI:当前时间闰秒标志。字段长度为2位整数,只在服务器端有效。取值定义为:
LI=0:无警告;
LI=1:表示最后一分钟是61秒;
LI=2:最后一分钟是59秒;
LI=3:警告(时钟没有同步);
VN:表示版本号;
MODE:指示协议模式;字段长度为3位,取值定义为:
Mode=0:保留
Mode=1:对称主动;
Mode=2:对称被动;
Mode=3:客户;
Mode=4:服务器;
Mode=5:广播;
Mode=6:保留为NTP控制信息;
Mode=7:保留为用户定义;
(2)Stratum:指示服务器工作的级别,该字段只在服务器端有效,字段长度为8位整数。取值定义为:
Stratum=0:故障信息;
Stratum=1:一级服务器;
Stratum=2-15:二级服务器;
Stratum=16-255:保留;
(3)poll:指示数据包的最大时间间隔,以秒为单位,作为2的指数方的指数部分,该字段只在服务器端有效。
(4)precision:指示系统时钟的精确性,以秒为单位,作为2的指数方的指数部分,该字段只在服务器端有效。
(5)root_delay:指示与主时钟参考源的总共往返延迟,以秒为单位,该字段只在服务器端有效。字段长度为32位浮点数,小数部分在16位以后,取值范围从负几毫秒到正
(6)root_dispersion:指示与主时钟参考源的误差,以秒为单位,该字段只在服务器端有效。字段长度为32位浮点数,小数部分在16位以后,取值范围从零毫秒到正几百毫秒。
(7)reference_identifier:指示时钟参考源的标记,该字段只在服务器端有效。
(8)reference_timestamp:指示系统时钟最后一次校准的时间,该字段只在服务器端有效,以前面所述64位时间戳格式表示。
(9)Originate_timestamp:指示客户向服务器发起请求的时间,以前面所述64位时间戳格式表示。
(10)Transmit_timestamp:指示服务器向客户发时间戳的时间,以前面所述64位时间戳格式表示。
与上述方法实施例相对应,本发明还公开了一种轻量级网络协议栈的实现装置。
参见图13,本发明实施例公开的一种轻量级网络协议栈的实现装置的结构示意图,该装置包括:
划分单元201,用于将网络协议栈划分为网络层、传输层和应用层共三个协议层,所述网络层包括:IP协议模块、APR协议模块和ICMF协议模块,所述传输层包括:UDP协议模块和TCP协议模块,所述应用层包括:PING协议模块和SNTP协议模块;
获取单元202,用于从网络驱动获取网络协议报文;
拷贝单元203,用于将所述网络协议报文直接拷贝到内存缓冲区,其中,所述内存缓冲区在所述网络协议栈初始化期间创建;
控制单元204,用于控制所述网络层、所述传输层和所述应用层在所述内存缓冲区处理所述网络协议报文
综上可知,本发明公开了一种轻量级网络协议栈的实现装置,将网络协议栈划分为网络层、传输层和应用层共三个协议层,网络层包括:IP协议模块、APR协议模块和ICMF协议模块,传输层包括:UDP协议模块和TCP协议模块,应用层包括:PING协议模块和SNTP协议模块,从网络驱动获取网络协议报文,并将网络协议报文直接拷贝到内存缓冲区,控制网络层、传输层和应用层在内存缓冲区处理网络协议报文。本发明通过在网络协议栈初始化期间创建一个内存缓冲区,并将从网络驱动获取的网络协议报文直接拷贝到内存缓冲区中,使得应用层、传输层和网络层三个协议层间统一在内存缓冲区中对网络协议报文进行处理,无需拷贝其他内存数据,从而实现了数据的零拷贝,减少了TCP/IP协议占用的资源,进而提高了嵌入式设备的数据处理性能。
另外,相对于传统方案中网络协议栈采用的TCP/IP协议较多,导致报文协议处理流程复杂,代码量较大而言,本发明减少了网络协议栈中各协议层中的协议数量,实现了对网络协议栈的精简,也即提供了一个轻量级协议栈,从而大大减少了代码量,进而便于测试验证和行业认证等。
需要说明的是,装置实施例中各组成部分的具体工作原理,请参见方法实施例对应部分,此处不再赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (14)
1.一种轻量级网络协议栈的实现方法,其特征在于,包括:
将网络协议栈划分为网络层、传输层和应用层共三个协议层,所述网络层包括:IP协议模块、APR协议模块和ICMF协议模块,所述传输层包括:UDP协议模块和TCP协议模块,所述应用层包括:PING协议模块和SNTP协议模块;
从网络驱动获取网络协议报文;
将所述网络协议报文直接拷贝到内存缓冲区,其中,所述内存缓冲区在所述网络协议栈初始化期间创建;
控制所述网络层、所述传输层和所述应用层在所述内存缓冲区处理所述网络协议报文。
2.根据权利要求1所述的实现方法,其特征在于,所述内存缓冲区在所述网络协议栈初始化期间创建时,采用静态配置方法,且所述网络协议栈运行期间禁止动态内存空间的申请和释放。
3.根据权利要求1所述的实现方法,其特征在于,所述IP协议模块的主要功能为:完成路由寻址和消息传递,解决网络互联问题,实现大规模和异构网络的互联互通。
4.根据权利要求1所述的实现方法,其特征在于,所述IP协议模块用于:
在数据链路层有以太网数据报文时,通过数据链路层释放的IP协议模块接收任务信号量,接收任务内部调用数据链路层的接收函数,以直接获取数据链路层的以太网数据报文中的IP数据报文,并经过解析判断其是否符合IPv4协议,通过内部的UDP/TCP处理函数将UDP/TCP数据报文传送给所述传输层;
所述IP协议模块还用于:当传输层下发的UDP/TCP数据报文时,调用IP模块内部的发送函数,通过所述发送函数将UDP/TCP数据报文封装成IP数据报文,并调用数据链路层的发送函数将所述IP数据报文发送出去。
5.根据权利要求1所述的实现方法,其特征在于,所述APR协议模块的主要功能为:将IP地址解析为物理地址,并在内部生成一个所述IP地址和所述物理地址的映射表。
6.根据权利要求1所述的实现方法,其特征在于,所述APR协议模块用于:在查询ARP表项IP地址对应的物理地址失败后,调用内部的发送函数发送ARP请求数据报文至数据链路层,通过ARP应答处理函数接收所述数据链路层在接收到所述ARP请求数据报文后反馈的ARP应答数据报文,并根据所述ARP应答数据报文更新内部的ARP表项;
所述APR协议模块还用于:在接收到ARP请求数据报文后,调用内部的ARP请求处理函数,通过所述ARP请求处理函数直接调用内部的发送函数以向所述数据链路层发送ARP应答数据报文。
7.根据权利要求1所述的实现方法,其特征在于,ICMF协议模块用于在IP主机和路由器之间传递控制消息。
8.根据权利要求1所述的实现方法,其特征在于,UDP协议模块的主要功能为:实现无需建立连接即可发送封装的数据包。
9.根据权利要求1所述的实现方法,其特征在于,UDP协议模块用于:
调用自身的发送函数,通过所述发送函数将应用层发送的应用数据报文封装成UDP数据报文,并通过调用的所述网络层的发送函数将所述UDP数据报文发送至所述网络层;
所述UDP协议模块还用于:当网络层接收到UDP数据报文的接收任务,将UDP数据报文放入相应的接收队列且释放所述UDP协议模块内部接收函数的信号量时,通过接收函数将所述UDP数据报文拆分为应用数据报文并发送至所述应用层。
10.根据权利要求1所述的实现方法,其特征在于,所述TCP协议模块的主要功能为:完成对数据包的确认、流量控制和网络拥塞,自动检测数据包提供错误重发的功能,将多条路径传送的数据包按照原来的顺序进行排列,控制超时发送。
11.根据权利要求1所述的实现方法,其特征在于,所述TCP协议模块用于:当接收到所述应用层发送的应用数据报文时,调用内部的发送函数,通过所述发送函数更新发送管理队列里未应答报文计数和将未应答报文插入所述发送管理队列里的发送未应答队列;通过所述网络层的发送函数将TCP数据报文发送至所述网络层,接收所述网络层发送的ACK应答报文,并根据所述ACK应答报文更新所述发送管理队列中的未应答报文计数,并将相应未应答队列数据报文删除;
所述TCP协议模块还用于:接收所述网络层释放的接收函数信号量,并从相应的接收队列中获取应用数据报文,并上报至所述应用层,并通过ACK发送函数向所述网络层发送ACK应答数据报文。
12.根据权利要求1所述的实现方法,其特征在于,所述PING协议模块用于:向目的主机发送ICMP的ECHO请求报文,通过所述ECHO请求报文测试目的站是否可达并了解所述目的站有关状态。
13.根据权利要求1所述的实现方法,其特征在于,所述SNTP协议模块用于:采用客户端/服务器的工作方式,并分为SNTP服务器和SNTP客户端;
所述SNTP服务器将接收的GPS信号或自带的原子钟作为系统时间基准;
所述SNTP客户端用于通过定期访问所述SNTP服务器获得准确时间信息,根据所述准确时间信息调整自身所在系统的时间,达到与所述SNTP服务器时间同步的目的。
14.一种轻量级网络协议栈的实现装置,其特征在于,包括:
划分单元,用于将网络协议栈划分为网络层、传输层和应用层共三个协议层,所述网络层包括:IP协议模块、APR协议模块和ICMF协议模块,所述传输层包括:UDP协议模块和TCP协议模块,所述应用层包括:PING协议模块和SNTP协议模块;
获取单元,用于从网络驱动获取网络协议报文;
拷贝单元,用于将所述网络协议报文直接拷贝到内存缓冲区,其中,所述内存缓冲区在所述网络协议栈初始化期间创建;
控制单元,用于控制所述网络层、所述传输层和所述应用层在所述内存缓冲区处理所述网络协议报文。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211285225.7A CN115665267A (zh) | 2022-10-20 | 2022-10-20 | 一种轻量级网络协议栈的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211285225.7A CN115665267A (zh) | 2022-10-20 | 2022-10-20 | 一种轻量级网络协议栈的实现方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115665267A true CN115665267A (zh) | 2023-01-31 |
Family
ID=84988665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211285225.7A Pending CN115665267A (zh) | 2022-10-20 | 2022-10-20 | 一种轻量级网络协议栈的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115665267A (zh) |
-
2022
- 2022-10-20 CN CN202211285225.7A patent/CN115665267A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101939967B (zh) | 通信方法 | |
US6694471B1 (en) | System and method for periodic retransmission of messages | |
US10419329B2 (en) | Switch-based reliable multicast service | |
US20110142052A1 (en) | Method for transferring data packets in a communication network and switching device | |
US20110286469A1 (en) | Packet retransmission control system, method and program | |
JP2008524891A (ja) | データ破壊を避けることによる改善されたネットワーク性能のための方法、システム及び物品 | |
AU2011380292B2 (en) | Apparatus and method for transmitting a message to multiple receivers | |
US20100226384A1 (en) | Method for reliable transport in data networks | |
CN104025550B (zh) | 从数据项获得信息的方法及装置 | |
US10932159B2 (en) | Data transmission method, data receiving device, and data sending device | |
US20140250238A1 (en) | Network gateway for time-critical and mission-critical networks | |
JP2001177523A (ja) | マルチキャスト通信方法 | |
WO2019205756A1 (zh) | 数据发送保护方法、装置、系统及计算机可读存储介质 | |
US11055166B2 (en) | Covertly storing a payload of data within a network | |
US10334322B1 (en) | System and method for media delivery on broadcast video networks | |
US10461892B2 (en) | Low latency communications | |
KR20010035779A (ko) | 사용자 데이터그램 통신 규약 상에서 패킷 로스를 보상하는 방법 | |
WO2023109891A1 (zh) | 组播传输方法、装置和系统 | |
JP2002374302A (ja) | Rtt測定方法、及び、rtt測定システム | |
CN115665267A (zh) | 一种轻量级网络协议栈的实现方法及装置 | |
CN109417515A (zh) | 用于处理互联网协议分组的方法、装置和系统 | |
WO2020007278A1 (zh) | 数据发送方法及发送设备、数据接收方法及接收设备 | |
US20060031474A1 (en) | Maintaining reachability measures | |
US20090245254A1 (en) | Communication system | |
WO2022174672A1 (zh) | 时延测量方法、装置、设备和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |