掌桥专利:专业的专利平台
掌桥专利
首页

基于Linux的IP报文和USLP帧双向高速协议转换方法及装置

文献发布时间:2024-04-18 19:59:31


基于Linux的IP报文和USLP帧双向高速协议转换方法及装置

技术领域

本发明涉及高速协议转换领域,特别涉及一种基于Linux系统并应用于星地通信的IP报文和USLP帧双向高速协议转换方法。

背景技术

CCSDS作为国际空间通信协议领域最权威的标准化机构,其发布的空间通信领域在全球范围内得到广泛应用,CCSDS的数据链路层协议尤为强大,对空间通信信道误码率高的特点进行了全方位考虑,其中USLP协议作为新的高效通信协议对现有的数据链路层通信协议进行了整合和优化。CCSDS已经考虑与地面互联网兼容,支持IP协议在CCSDS数据链路上传输,但是对于网络路由协议目前还没有提出各方广泛认可的解决方案。

以TCP/IP为核心的地面网络协议非常成熟,其中IPv6是当前公认的地面网络和未来天地一体化融合网络的核心网络协议,国内外开展了很多IPv6相关研究,旨在将地面网络的成功经验应用到空间网络,但是将TCP/IP协议直接应用到空间网络中会遇到很多问题,首先需要解决的问题就是两种不同网络如何互连互通。空间路由器作为天地一体化网路进行互联的一个核心设备,是未来天基信息网络建设的重要支撑。国内外研究的空间路由器通常以IPv6互联网体系结构为基础,基于多核CPU、FPGA、高宽带敏捷交换芯片和Linux操作系统,实现快速报文处理转发和路由协议。

上海航天测控通信研究所CN113612699A号专利公开了一种提高IP over CCSDS传输效率的方法,该方法在IP over CCSDS协议转换设备中进行网络分包和大容量固存集成,将外部延时网络数据的波动、突发数据传输转换为设备内部LVDS接口IP匀速传输。重庆大学CN103442017B号专利公开了一种IP over CCSDS协议转换的改进方法,在协议转换过程中,新增了一个CCSDS AOS缓存窗口,并设置了定时器控制功能,当大量IP包连续到达地面网关时,可以由CCSDS AOS缓存窗口溢出控制CCSDS AOS帧的发送,当数据量较少时,可由定时器定时控制CCSDS AOS帧的发送。

上述方法主要存在以下问题:

(1)上述方法均与定制嵌入式软硬件环境深度绑定,依赖特定软件设计或硬件FPGA,无法移植运行到成熟通用操作系统和开发环境,例如当前网络设备中使用最广泛的Linux操作系统;

(2)上述IP over CCSDS协议转换方法均针对CCSDS组织较早制定的AOS协议,USLP协议相对AOS做了大量的整合和优化,是一种全新的CCSDS数据链路层协议,而上述方法不支持USLP协议,导致未来应用场景受限;

(3)上述IP over CCSDS协议转换方法均为IP报文单向转为CCSDS AOS帧,不支持同时双向转换,而地面网络/空间网络的信息交互一般都是双向进行的,因此上述方法不能满足异构网络环境中的应用需求。

发明内容

鉴于此,本公开提出了一种基于Linux系统的IP报文和USLP帧双向高速协议转换方法,该方法对接收到的IPv6报文封装为标准USLP帧并输出,将接收到的USLP帧解封出其中的IPv6报文,从而实现地面IPv6网络数据与空间USLP链路数据之间格式互转,使地面网络和空间网络之间互联互通,可应用于天地一体化融合网络的路由器/网关等网络设备。

首先对本公开提供的协议转换方法给出如下相关说明:

(1)设定空间网络通信的协议规范,各层支持的协议为:数据链路层使用CCSDS统一空间数据链路协议(USLP),网络层使用IPv6协议,并通过IP over CCSDS协议、封装业务实现IPv6与USLP的连接。此外,数据链路层可兼容现在广泛使用的高级在轨系统(AOS)。空间网络协议从网络层自上而下的层次为IPv6->IP over CCSDS->封装业务->USLP->以太网帧。

(2)协议转换软件运行在Linux系统上,使用Linux内核中的TAP虚拟设备,该设备不同于内核的其它设备,其发送和接收数据包都在网络协议栈内部完成,发送的数据包不会离开协议栈进入到物理网络中,也不会接收到从物理网络中进入协议栈的数据包。

(3)Linux用户空间的设备节点/dev/net/tun用于读写TAP设备,内核中TAP设备在发送数据包时,将数据包发送到与/dev/net/tun文件描述符相关联的套接口,用户空间就可从设备节点读取数据。用户空间程序向/dev/net/tun文件描述符写入数据时,TUN/TAP驱动调用内核的数据包接收接口(如netif_rx)将接收到的数据包送入网络协议栈,该操作与从物理网络中接收数据包相同。

具体的,本公开提供的基于Linux系统的IP报文和USLP帧双向高速协议转换方法,主要包括以下步骤:

步骤一:将IP报文和USLP帧转换程序运行在Linux系统之上,转换程序所需的相关配置参数,通过XML配置文件的形式由该程序读取并传递到当前运行程序中;

步骤二:运行IP报文和USLP帧转换程序的计算机或路由器从地面网络端接收到IP报文后,Linux内核将接收到的IP报文通过TCP/IP协议栈转发至TAP网络设备,TAP接收到IP报文,将IP报文传递至运行在用户态的IP报文和USLP帧转换程序;IP报文和USLP帧转换程序依据协议规范将IP报文转换成USLP帧,转换成USLP帧之后将报文发送至TAP网络设备;TAP网络设备通过网桥将报文传递至空间网络端;

步骤三:运行IP报文和USLP帧转换程序的计算机或路由器从空间网络端接收到USLP帧后,Linux内核将接收到的USLP帧通过网桥传递给TAP网络设备;TAP接收到USLP帧,将USLP帧传递至运行在用户态的IP报文和USLP帧转换程序;IP报文和USLP帧转换程序依据协议规范将USLP帧转换成IP报文,转换成IP报文之后将报文发送至TAP网络设备;TAP网络设备将报文送入TCP/IP协议栈,由协议栈转发至地面网络端。

应用上述方法的基于Linux系统的IP报文和USLP帧双向高速协议转换装置,主要包括:基于CCSDS标准协议规范的IP报文到USLP帧转换模块和USLP帧到IP报文转换模块,这两个模块分别用于:利用用户态应用程序,将接收到IP报文封装为USLP帧,和将收到的USLP帧解封为IP报文。

进一步的,该装置利用Linux内核的TAP虚拟设备实现内核网络协议栈和用户态应用程序之间的数据传递。

进一步的,所述IP报文到USLP帧转换模块和所述USLP帧到IP报文转换模块可并发运行。

与现有技术相比,本公开的有益效果是:1)所述IP报文和USLP帧转换程序可运行在成熟且通用化的软硬件环境中,操作系统可使用开源的Linux操作系统,从而不必定制专门的嵌入式软硬件环境;

2)支持CCSDS机构制定的最新数据链路层ULSP协议与地面网络IPv6协议之间的数据转换,可满足未来空间网络应用场景的运行需求;

3)能够实现IPv6报文和ULSP帧之间的同时双向转换,突破了现有技术下CCSDS数据链路协议和IPv6报文数据单向转换的限制,从而在异构网络环境完成数据交互;

4)利用Linux内核的TAP虚拟设备实现内核网络协议栈和用户态应用程序之间的数据传递,使用Linux系统的设备节点/dev/net/tun读写TAP设备,从而实现用户态的应用程序根据配置文件对经过自身设备的数据进行封装和解封操作,在实现高效双向转换的同时,不必修改Linux内核网络协议栈。

附图说明

通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例方式中,相同的参考标号通常代表相同部件。

图1为基于Linux系统的IP报文和USLP帧转换实现原理;

图2为将IP报文封装为USLP帧过程;

图3为各协议封装字段长度关系。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本公开提供了一种基于Linux系统的IP报文和USLP帧双向高速协议转换方法及应用该方法的装置。该方法利用Linux操作系统内核中的虚拟网络设备(TAP),配合用户态应用程序,对网络设备两侧的空间网络接口(用于接收USLP帧)和地面网络接口(用于接收IPv6报文)接收到的数据进行格式转换,从而实现地面IPv6网络数据与空间网络链路数据之间格式互转,使地面网络和空间网络之间互联互通。实现原理如图1所示。

在一种示例性实施方式下,具体步骤说明如下:

1、IP报文和USLP帧转换程序运行在Linux系统用户态,程序启动后首先读取XML格式的接口配置文件,配置文件内容包括:虚拟网卡名称,以及将该虚拟网卡配置为空间网络接口端还是地面网络接口端的选项设置。之后,根据配置参数,创建TAP虚拟网卡并将其初始化。

2、IP报文和USLP帧转换程序使用设备节点/dev/net/tun读写TAP设备,内核中TAP设备在发送数据包时,将数据包发送到与/dev/net/tun文件描述符相关联的套接口,用户空间就可从设备节点读取数据。用户空间程序向/dev/net/tun文件描述符写入数据时,TUN/TAP驱动调用内核的数据包接收函数(如netif_rx)将接收到的数据包送入网络协议栈,就像数据包是从物理网络中接收的一样。

IP报文和USLP帧转换程序创建两个线程,分别为线程A和线程B。线程A负责从地面网络端口接收IP报文,将其封装为USLP帧并输出到空间网络端口,线程B负责从空间网络端口接收USLP帧,解析出其中的IP报文并输出到地面网络端口。线程A和线程B并发执行。

线程A的工作流程为:

(1)线程A循环读取地面网络端物理端口,若此过程中物理网卡收到IP报文,则Linux内核将IP报文通过TCP/IP协议栈转发至TAP网络设备,TAP网络设备接收到IP报文后,将IP报文传递至线程A中的IP报文->USLP帧转换模块。IP报文->USLP帧转换模块创建一个缓存区,将接收到的IP报文保存到缓存区起始地址+固定偏移量的位置,缓存区不小于为太网帧Data段最大值1500字节,固定偏移量的值为USLP帧头长度+封装包头长度+IPE头长度。

(2)IP报文->USLP帧转换模块依据图2所示封装过程,将IP报文封装为USLP帧封装的层次关系依次为IPv6报文->IP over CCSDS头->封装业务头->USLP帧。

(3)封装过程的操作为:在IP报文前封装IPE头和封装包头,并将封装之后的数据封装USLP帧头和USLP帧尾,封装格式符合CCSDS标准协议规范,典型的按照以太网帧Data段1500字节算,IP报文之外的各字段长度如图3所示。

(4)IP报文转换成USLP帧之后,线程A将USLP帧发送至空间网络端TAP网络设备,空间网络端TAP网络设备通过网桥将报文传递至空间网络端物理端口,最终通过以太网帧的格式发送到物理链路上传输。

线程B的工作流程为:

(1)线程B循环读取空间网络端物理端口,若此过程中物理网卡接收到USLP帧,则Linux内核将USLP帧通过网桥传递给TAP网络设备,TAP网络设备接收到USLP帧后,将USLP帧传递至线程B中的USLP帧->IP报文转换模块。USLP帧->IP报文转换模块创建一个缓存区,保存接收到的USLP帧,缓存区不小于为太网帧Data段最大值1500字节。

(2)USLP帧->IP报文转换模块依据图2所示反过程完成解封操作,将USLP帧解封的层次关系依次为:USLP帧->封装业务头->IP over CCSDS头->IPv6报文。

(3)解封装过程涉及的数据格式符合CCSDS标准协议规范,USLP帧->IP报文转换模块通过指针偏移的方式校验和处理缓存区中USLP帧,获取其中正确的IP报文。

(4)USLP帧转换成IP报文之后,线程B将IP报文发送至地面网络端TAP网络设备,TAP网络设备将报文送入TCP/IP协议栈,报文由协议栈转发至地面网络端物理端口,最终通过以太网帧的格式发送到物理链路上传输。

上述实施步骤中的各协议封装字段长度,为一种示例格式,但该发明并非仅限于这种格式,各字段长度取值如以太网帧Data段1500字节、USLP帧头、封装包头和IPE头的长度为选取协议典型设计值时所算,任何符合CCSDS通信协议规范的USLP帧格式、封装包格式以及IPoC包格式均可基于本发明中的思路,采取类似的步骤执行IPv6报文和USLP帧之间的封装和解封操作。

可见,本公开提供的协议转换方法利用Linux内核的TAP虚拟设备实现内核网络协议栈和用户态应用程序之间的数据传递,使用Linux系统的设备节点/dev/net/tun读写TAP设备,从而实现用户态的应用程序根据配置文件对经过自身设备的数据进行封装和解封操作,在实现高效双向转换的同时,不必修改Linux内核网络协议栈;

用户态的IP报文和USLP帧转换程序根据CCSDS标准规范的设计,为IP报文和USLP帧预留固定缓存空间,IP报文保存在缓存区起始地址+固定偏移量的位置,通过指针偏移操作的方式实现封装和解封操作,避免移动拷贝之类的耗时操作;

依据CCSDS标准规范设计了IP报文和USLP帧转换涉及的协议层次关系,将IP报文封装为USLP帧时的层次关系依次为IPv6报文->IP over CCSDS头->封装业务头->USLP帧,将USLP帧解封为IPv6报文时的层次关系依次为:USLP帧->封装业务头->IP over CCSDS头->IPv6报文。

上述技术方案只是本发明的示例性实施例,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施例所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。

技术分类

06120116524318