CN111478855B - 基于LwIP协议栈的网络设备快速转发的方法及*** - Google Patents
基于LwIP协议栈的网络设备快速转发的方法及*** Download PDFInfo
- Publication number
- CN111478855B CN111478855B CN202010577957.8A CN202010577957A CN111478855B CN 111478855 B CN111478855 B CN 111478855B CN 202010577957 A CN202010577957 A CN 202010577957A CN 111478855 B CN111478855 B CN 111478855B
- Authority
- CN
- China
- Prior art keywords
- data packet
- nat
- uplink
- forwarding data
- hash table
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000012545 processing Methods 0.000 claims abstract description 58
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 12
- 101000652292 Homo sapiens Serotonin N-acetyltransferase Proteins 0.000 claims abstract 8
- 102100030547 Serotonin N-acetyltransferase Human genes 0.000 claims abstract 8
- 238000006243 chemical reaction Methods 0.000 claims description 13
- 230000006870 function Effects 0.000 claims description 13
- 238000013519 translation Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 15
- 238000010586 diagram Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
- H04L61/255—Maintenance or indexing of mapping tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种快速转发数据包的方法,对于上行转发数据包的处理包括如下步骤。步骤S10:从LAN接口接收上行转发数据包,根据端口计算索引查找是否存在有效NAT Hash表。步骤S20:比较该上行转发数据包和有效NAT Hash表的TCP/IP协议五元组信息是否完全一致。如果完全一致,则将该上行转发数据包从LAN口发送到WAN口。步骤S30:为该上行转发数据包设置pbuf数据来源比特标识位。步骤S40:该上行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点。步骤S50:检测该上行转发数据包中的pbuf数据来源比特标识位,根据是否需要做SNAT处理对上行转发数据包分别处理。本申请实现了上下行转发数据包的快速接口转发,跳过了中间的处理过程,节省了处理时间。
Description
技术领域
本申请涉及一种嵌入式网络设备处理转发数据包的方法。
背景技术
嵌入式网络设备出于成本和功耗的考虑,一般采用RTOS***(Real-timeoperating system,实时操作***),配合嵌入式***专用的TCP/IP协议栈实现。lwIP(lightweight IP,轻量IP)是一个开源的TCP/IP协议栈,以更友好的开源协议、完善的协议栈功能、较小的RAM(Random Access Memory,随机存取存储器)和ROM(Read-Only Memory,只读存储器)存储空间需求以及不断更新的社区维护,在嵌入式***中得到广泛的应用。LwIP作为一个通用的嵌入式TCPIP协议栈,目前的设计和实现中并没有针对路由设备转发这一块做特殊的处理。
请参阅图1,这是嵌入式网络设备使用的RTOS***的典型实现框图。嵌入式网络设备中一般具有多个LAN(Local Area Network,局域网)接口以及至少一个WAN(Wide AreaNetwork,广域网)接口。LAN接口简称为LAN口,WAN接口简称为WAN口。这些LAN口通过RTOS***中的报文处理主线程共享单个或多个WAN接口接入Internet网络。每个LAN口可用于连接一台接入设备。
请参阅图2,结合TCP/IP内核的网络Hook(钩子函数)位置点,分析网络数据包的流向。从LAN口到WAN口,数据包的流向是:LAN接口-> PREROUTING(路由前)的Hook位置点->路由判断的Hook位置点-> FORWARD(转发)的Hook位置点-> POSTROUTING(路由后)的Hook位置点->WAN接口。从WAN口到LAN口,数据包的流向是:WAN接口-> PREROUTING的Hook位置点->路由判断的Hook位置点-> FORWARD的Hook位置点-> POSTROUTING的Hook位置点->LAN接口。这是LwIP协议栈常规的网络数据包处理流程。对于网络设备来说,如果能尽可能地缩短网络数据包的处理时延,那么就能提高设备的吞吐率。
发明内容
本申请所要解决的技术问题是对LwIP协议栈进行了优化设计,提升了数据报文的转发效率。
为解决上述技术问题,本申请提出了一种基于LwIP协议栈的网络设备快速转发数据包的方法,对于上行转发数据包的处理包括如下步骤。步骤S10:从LAN接口接收上行转发数据包,在PREROUTING的Hook位置点使用该上行转发数据包的源端口和目的端口作为索引值,查找是否存在具有相同索引值的NAT Hash表的缓存;如果有,称其为有效NAT Hash表,进入步骤S20;否则对该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后进入步骤S30。步骤S20:比较该上行转发数据包的TCP/IP协议五元组信息和有效NAT Hash表的TCP/IP协议五元组信息是否完全一致;如果是,则根据所匹配的有效NATHash表中所记录的netif_wan接口参数,调用netif_wan接口的输出函数,将该上行转发数据包从LAN口发送到WAN口;否则,对该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表,随后进入步骤S30。步骤S30:在PREROUTING的Hook位置点为该上行转发数据包设置pbuf数据来源比特标识位,用来标记该上行转发数据包来自哪个LAN接口。步骤S40:该上行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点。步骤S50:检测该上行转发数据包中的pbuf数据来源比特标识位,获知该上行转发数据包来自哪个LAN接口。步骤S62:对于需要做SNAT处理的上行转发数据包,对该上行转发数据包进行SNAT转换,并更新NAT Hash表,最后将该上行转发数据包从WAN接口发送出去。所述更新NAT Hash表是指在NAT Hash表中除了记录TCP/IP协议五元组和SNAT信息外,还通过改造NAT Hash表来增加记录netif_lan接口以及路由确定的netif_wan接口,还同时记录到由tcp或udp的源端口和目的端口索引的NAT Hash表的缓存。所述netif_lan接口表示某个上行转发数据包进入设备的LAN接口;所述netif_wan接口表示某个上行转发数据包离开设备的WAN接口。步骤S64:对于不需要做SNAT处理的上行转发数据包,直接将该上行转发数据包从WAN接口发送出去。上述方法通过扩展LwIP协议栈中pbuf和NAT Hash表的数据结构,结合设计的数据源标记方法,以及NAT Hash表的缓存机制,实现了上行转发数据包的快速接口转发,跳过了中间的处理过程,节省了处理时间。
进一步地,所述NAT Hash表是IPV4数据包进行NAT转换的时候根据TCP/IP五元组计算的HASH值记录的NAT转换记录的表。这是NAT Hash表的含义说明。
进一步地,所述NAT Hash表的缓存是对查找NAT Hash表的历史结果的缓存,并利用tcp或udp的源端口和目的端口作为索引以供查找。这是NAT Hash表的缓存的含义说明。
进一步地,所述NATHash表的缓存包括一个TCP NAT cache数组和一个UDP NATcache数组,分别存储TCP NAT Hash表和UDP NAT Hash表的查询历史结果;这两个数组本身则使用每个NATHash表的SNAT处理前的数据包的源端口和目的端口进行索引。这是NATHash表的缓存的示例。
进一步地,所述索引的计算规则是使用该上行转发数据包的源端口和目的端口异或的结果取8位二进制数,生成一个0至255之间的十进制数作为索引值。这是如何根据上行转发数据包的源端口和目的端口进行索引的示例性说明。
进一步地,所述NAT Hash表、所述NAT Hash表的缓存都保存在设备的内部存储器中。这是NAT Hash表、NAT Hash表的缓存的存储位置说明。
进一步地,所述步骤S30中,所述pbuf数据来源比特标识位是在pbuf数据结构中增加一个用来标记上行转发数据包的来源的数据域,新增的数据域的不同取值用来标识每个上行转发数据包来自于哪一个LAN接口或者来自模块自身应用的数据。这是pbuf数据来源比特标识位的示例。
进一步地,对于下行转发数据包的处理包括如下步骤。步骤D10:从WAN接口接收下行转发数据包,在PREROUTING的Hook位置点对下行转发数据包进行DNAT处理,转换目标地址为内网地址,然后查找是否存在对应的NAT Hash表。如果是,进入步骤D20。如果否,进入步骤D30。步骤D20:直接使用NAT Hash表中记录的netif_lan接口参数,调用netif_lan接口的输出函数,将该下行转发数据包从WAN口发送到LAN口。步骤D30:该下行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点,从LAN接口发送出去。上述方法实现了下行转发数据包的快速接口转发,跳过了中间的处理过程,节省了处理时间。
本申请还提出了一种基于LwIP协议栈的网络设备快速转发数据包的***,对上行转发数据包的处理包括缓存查找单元、上行快速转发单元、标记单元和上行常规转发单元。所述缓存查找单元从LAN接口接收上行转发数据包,并使用该上行转发数据包的源端口和目的端口作为索引查找是否存在具有相同索引值的NAT Hash表的缓存;如果存在,称其为有效NAT Hash表,将该上行转发数据包及有效NAT Hash表一起送往上行快速转发单元;否则将该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后送往标记单元。所述上行快速转发单元比较该上行转发数据包的TCP/IP协议五元组信息和有效NATHash表的TCP/IP协议五元组信息是否完全一致;如果完全一致,则将该上行转发数据包根据所匹配的有效NAT Hash表中所记录的netif_wan接口参数,调用netif_wan接口的输出函数,将该上行转发数据包从LAN口发送到WAN口;如果不完全一致,则将该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后送往标记单元。所述标记单元为该上行转发数据包设置pbuf数据来源比特标识位,用来标记该上行转发数据包来自哪个LAN接口,将标记好的该上行转发数据包送往上行常规转发单元。所述上行常规转发单元检测标记好的该上行转发数据包中的pbuf数据来源比特标识位,获知该上行转发数据包来自哪个LAN接口;对于需要做SNAT处理的上行转发数据包,对该上行转发数据包进行SNAT转换,并更新NAT Hash表,最后将该上行转发数据包从WAN接口发送出去;对于不需要做SNAT处理的上行转发数据包,直接将该上行转发数据包从WAN接口发送出去。上述***实现了上行转发数据包的快速接口转发,跳过了中间的处理过程,节省了处理时间。
进一步地,对下行转发数据包的处理包括下行快速转发单元和下行常规转发单元。所述下行快速转发单元从WAN接口接收下行转发数据包,对下行转发数据包进行DNAT处理,转换目标地址为内网地址,然后查找是否存在对应的NAT Hash表;如果存在,直接使用NAT Hash表中记录的netif_lan接口参数,调用netif_lan接口的输出函数,将该下行转发数据包从WAN口发送到LAN口;如果不存在,将该下行转发数据包送往下行常规转发单元。所述下行常规转发单元将下行转发数据包从LAN接口发送出去。上述***实现了上行转发数据包的快速接口转发,跳过了中间的处理过程,节省了处理时间。
本申请取得的技术效果是:加速了FORWARD包(转发数据包)的处理过程,基于LwIP协议栈实现FORWARD包的快速转发,提升路由器等网络设备的吞吐率。本申请是基于现有LwIP协议栈实现上的优化修改,对现有数据结构的基础上做的优化改造,实施简单,对现有协议流程兼容。同时本申请缩短了转发数据包处理路径,有效地提高了数据包的处理速度,从而提高整个***的吞吐率。
附图说明
图1是嵌入式网络设备使用的RTOS***的典型实现框图。
图2是LwIP协议栈处理网络数据包的数据流向示意图。
图3是本申请提供的基于LwIP协议栈的网络设备快速转发数据包的方法的流程图一,适用于上行转发数据包的处理。
图4是图3对应的示意图。
图5是本申请提供的基于LwIP协议栈的网络设备快速转发数据包的方法的流程图二,适用于下行转发数据包的处理。
图6是图5对应的示意图。
图7是本申请提供的快速转发数据包的***的示意图一,适用于对上行转发数据包的处理。
图8是本申请提供的快速转发数据包的***的示意图二,适用于对下行转发数据包的处理。
图中附图标记说明:10为缓存查找单元;20为上行快速转发单元;30为标记单元;40为上行常规转发单元;50为下行快速转发单元;60为下行常规转发单元。
具体实施方式
请参阅图3和图4,对于上行FORWARD包(上行转发数据包)数据通道,结合Hook位置点,本申请提供的快速转发数据包的方法包括如下步骤。
步骤S10:从LAN接口接收上行转发数据包,在PREROUTING的Hook位置点使用该上行转发数据包的源端口和目的端口作为索引值,查找是否存在具有相同索引值的NAT Hash表的缓存(cache),如果存在与该上行转发数据包具有相同索引值的NAT Hash表的缓存,称其为有效NAT Hash表,进入步骤S20;否则根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后进入步骤S30。
NAT Hash表是IPV4数据包进行NAT(network address translation,网络地址转换)转换的时候根据TCP/IP五元组(源IP地址、源端口、目的IP地址、目的端口、传输层协议)计算的HASH值记录的NAT转换记录的表。一般过程中,IPv4的数据包会计算HASH值查找NATHash表,完成NAT转换然后发往网络接口。在TCP或UDP数据传输过程中,每次都查一次NATHash表没有必要,所以本申请做了一个优化,把查找的历史结果缓存起来,存储NAT Hash表的缓存并利用tcp或udp的源端口和目的端口作为索引值作为索引(index)值以供查找。如果查找NAT Hash表的缓存失败,再进行NAT Hash表的计算与查找。
优选地,所述索引的计算规则是使用该上行转发数据包的源端口和目的端口异或的结果取8位二进制数,生成一个0至255之间的十进制数作为索引值。
步骤S20:比较该上行转发数据包的TCP/IP协议五元组信息和有效NAT Hash表的TCP/IP协议五元组信息是否完全一致。
如果完全一致,则将该上行转发数据包根据所匹配的有效NAT Hash表中所记录的netif_wan接口参数,调用netif_wan接口的输出函数,将该上行转发数据包从LAN口发送到WAN口;随后进入步骤S30。这样就跳过了中间的过程,大大节省了上行转发数据包处理的时间。
如果不完全一致,根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后进入步骤S30。
步骤S30:在PREROUTING的Hook位置点为该上行转发数据包设置pbuf数据来源比特标识位,用来标记该上行转发数据包来自哪个LAN接口。
步骤S40:该上行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点。
步骤S50:检测该上行转发数据包中的pbuf数据来源比特标识位,获知该上行转发数据包来自哪个LAN接口。
上行转发数据包是从LAN接口发往WAN接口,由WAN接口对外发出。但是WAN口对外发送的数据除了上行转发数据包以外,还有模块自己的应用生成的数据,这些数据就不需要做SNAT(Sourcenetwork address translation,源网络地址转换)处理。
步骤S62:对于需要做SNAT处理的上行转发数据包,对该上行转发数据包进行SNAT转换,并更新NAT Hash表,最后将该上行转发数据包从WAN接口发送出去。
所述更新NAT Hash表是指在NAT Hash表中除了记录TCP/IP协议五元组和SNAT信息外,还通过改造NAT Hash表来增加记录netif_lan接口以及路由确定的netif_wan接口,还同时记录由tcp或udp的源端口和目的端口索引的NAT Hash表的缓存。网络数据包进行NAT转换后会在NAT Hash表中记录源端口,同时使用新的源端口生成更新后的网络数据包。SNAT处理会将源端口和内网IP地址修改为新的源端口和公网IP地址。生成的新的源端口可以采用基于NAT Hash表的索引的计算规则生成,方便接收到下行数据包做DNAT(Destination network address translation,目标网络地址转换)的时候,直接使用目的端口简单计算后反查出NAT Hash表,加速处理。
所述NAT Hash表的缓存例如包括一个TCP NAT cache数组和一个UDP NAT cache数组,存储NAT Hash表的历史结果。这两个数组本身则使用每个SNAT前的数据包的源端口和目的端口进行索引。这样在步骤S10中就可以通过每个上行转发数据包的源端口和目的端口作为索引值,在PREROTING的Hook位置点快速查找NAT Hash表的缓存,判断是否存在有效NAT Hash表。然后在步骤S20中继续比对该上行转发数据包与有效NAT Hash表的TCP/IP协议五元组是否完全匹配。
所述netif_lan接口表示某个上行转发数据包进入设备的LAN接口。所述netif_wan接口表示某个上行转发数据包离开设备的WAN接口。NAT Hash表及其缓存都保存在设备的内部存储器中。
步骤S64:对于不需要做SNAT处理的上行转发数据包,直接将该上行转发数据包从WAN接口发送出去。
进一步地,所述步骤S30中,所述pbuf数据来源比特标识位例如采用如下方式进行设置。LwIP协议栈中管理数据包的是pbuf数据结构。本申请扩展的pbuf数据结构简单描述如下,其中/*到*/之间的内容为注释说明。
struct pbuf {
struct pbuf *next; /*pbuf chain(数据链)中下一个pbuf指针*/
void *payload; /*当前pbuf指示的TCP/IP 数据payload(有效载荷)的指针*/
u16_t tot_len; /*pbuf chain指示的TCP/IP数据payload的总长度*/
u16_t len; /*当前pbuf指示的TCP/IP 数据payload的长度*/
...
u32_t flags; /*当前pbuf标志位设置*/
}
上述pbuf数据结构中,flags数据域是本申请新增加的pbuf数据来源比特标识位,用来标记上行转发数据包的来源。所述pbuf数据来源比特标识位的不同取值用来标识每个上行转发数据包来自于哪一个LAN接口或者来自模块自身应用的数据。
上述对上行转发数据包的处理,归纳起来主要包括对上行转发数据包标记LAN口来源、以及更新和改造NAT Hash表、增加NAT Hash表的缓存,其目的是实现对应上下行FORWARD包(上下行转发数据包)的快速转发。
请参阅图5和图6,对于下行转发数据包的数据通道,结合Hook位置点,本申请提供的快速转发数据包的方法包括如下步骤。
步骤D10:从WAN接口接收下行转发数据包,在PREROUTING的Hook位置点对下行转发数据包进行DNAT处理,转换目标地址为内网地址,然后查找是否存在对应的NAT Hash表。
上行转发数据包在进行SNAT转换时,新的源端口和NAT Hash表的索引有简单的计算关联。处理下行转发数据包时,正好利用这种简单计算关联,直接根据源端口回查NATHash表。
如果是,进入步骤D20。
如果否,进入步骤D30。
步骤D20:直接使用NAT Hash表中记录的netif_lan接口参数,调用netif_lan接口的输出函数,将该下行转发数据包从WAN口发送到LAN口。这样就跳过了中间的过程,大大节省了下行转发数据包处理的时间。
步骤D30:该下行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点,从LAN接口发送出去。
请参阅图7,本申请提供的快速转发数据包的***对上行转发数据包的处理包括缓存查找单元10、上行快速转发单元20、标记单元30、上行常规转发单元40。
所述缓存查找单元10从LAN接口接收上行转发数据包,并使用该上行转发数据包的源端口和目的端口作为索引值查找是否存在具有相同索引值的NAT Hash表的缓存,如果存在与该上行转发数据包具有相同索引值的NAT Hash表的缓存,称其为有效NAT Hash表,将该上行转发数据包及有效NAT Hash表一起送往上行快速转发单元20;否则将该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表,随后送往标记单元30。
所述上行快速转发单元20比较该上行转发数据包的TCP/IP协议五元组信息和有效NAT Hash表的TCP/IP协议五元组信息是否完全一致。如果完全一致,则将该上行转发数据包根据所匹配的有效NAT Hash表中所记录的netif_wan接口参数,调用netif_wan接口的输出函数,将该上行转发数据包从LAN口发送到WAN口。如果不完全一致,则将该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表,随后送往标记单元30。
所述标记单元30为该上行转发数据包设置pbuf数据来源比特标识位,用来标记该上行转发数据包来自哪个LAN接口,将标记好的该上行转发数据包送往上行常规转发单元40。
所述上行常规转发单元40检测标记好的该上行转发数据包中的pbuf数据来源比特标识位,获知该上行转发数据包来自哪个LAN接口。对于需要做SNAT处理的上行转发数据包,对该上行转发数据包进行SNAT转换,并更新NAT Hash表,最后将该上行转发数据包从WAN接口发送出去。对于不需要做SNAT处理的上行转发数据包,直接将该上行转发数据包从WAN接口发送出去。
请参阅图8,本申请提供的快速转发数据包的***对下行转发数据包的处理包括下行快速转发单元50和下行常规转发单元60。
所述下行快速转发单元50从WAN接口接收下行转发数据包,对下行转发数据包进行DNAT处理,转换目标地址为内网地址,然后查找是否存在对应的NAT Hash表。如果存在,直接使用NAT Hash表中记录的netif_lan接口参数,调用netif_lan接口的输出函数,将该下行转发数据包从WAN口发送到LAN口。如果不存在,将该下行转发数据包送往下行常规转发单元60。
所述下行常规转发单元60将下行转发数据包从LAN接口发送出去。
本申请提出的基于LwIP协议栈的网络设备快速转发数据包的方法及***具有如下有益效果。
第一,在处理上行数据转发通道时,通过建立NAT Hash表的缓存,减少重复的NATHash表的建立和查找过程,快速确认匹配的NAT Hash表,利用匹配到的NAT Hash表中的netif_wan接口对上行转发数据包做快速转发。
第二,在处理下行数据转发通道时,可以利用NAT Hash表中的netif_lan接口对下行转发数据包做快速转发。
以上仅为本申请的优选实施例,并不用于限定本申请。对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种基于LwIP协议栈的网络设备快速转发的方法,其特征是,对于上行转发数据包的处理包括如下步骤;
步骤S10:从LAN接口接收上行转发数据包,在PREROUTING的Hook位置点使用该上行转发数据包的源端口和目的端口作为索引值,查找是否存在具有相同索引值的NAT Hash表的缓存;如果有,称其为有效NAT Hash表,进入步骤S20;否则对该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后进入步骤S30;
步骤S20:比较该上行转发数据包的TCP/IP协议五元组信息和有效NAT Hash表的TCP/IP协议五元组信息是否完全一致;如果是,则根据所匹配的有效NAT Hash表中所记录的netif_wan接口参数,调用netif_wan接口的输出函数,将该上行转发数据包从LAN口发送到WAN口;否则,对该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表,随后进入步骤S30;
步骤S30:在PREROUTING的Hook位置点为该上行转发数据包设置pbuf数据来源比特标识位,用来标记该上行转发数据包来自哪个LAN接口;
步骤S40:该上行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点;
步骤S50:检测该上行转发数据包中的pbuf数据来源比特标识位,获知该上行转发数据包来自哪个LAN接口;
步骤S62:对于需要做SNAT处理的上行转发数据包,对该上行转发数据包进行SNAT转换,并更新NAT Hash表,最后将该上行转发数据包从WAN接口发送出去;
所述更新NAT Hash表是指在NAT Hash表中除了记录TCP/IP协议五元组和SNAT信息外,还通过改造NAT Hash表来增加记录netif_lan接口以及路由确定的netif_wan接口,还同时记录由tcp或udp的源端口和目的端口索引的NAT Hash表的缓存;
步骤S64:对于不需要做SNAT处理的上行转发数据包,直接将该上行转发数据包从WAN接口发送出去。
2. 根据权利要求1所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,所述NAT Hash表是IPV4数据包进行NAT转换的时候根据TCP/IP五元组计算的HASH值记录的NAT转换记录的表。
3.根据权利要求2所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,所述NAT Hash表的缓存是对查找NAT Hash表的历史结果的缓存,并利用tcp或udp的源端口和目的端口作为索引以供查找。
4.根据权利要求3所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,所述NAT Hash表的缓存包括一个TCP NAT cache数组和一个UDP NAT cache数组,分别存储TCPNAT Hash表和UDP NAT Hash表的查询历史结果。
5.根据权利要求3所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,所述索引的计算规则是使用该上行转发数据包的源端口和目的端口异或的结果取8位二进制数,生成一个0至255之间的十进制数作为索引值。
6.根据权利要求1所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,所述NAT Hash表、所述NAT Hash表的缓存都保存在设备的内部存储器中。
7.根据权利要求1所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,所述步骤S30中,所述pbuf数据来源比特标识位是在pbuf数据结构中增加一个用来标记上行转发数据包的来源的数据域,新增的数据域的不同取值用来标识每个上行转发数据包来自于哪一个LAN接口或者来自模块自身应用的数据。
8.根据权利要求1所述的基于LwIP协议栈的网络设备快速转发的方法,其特征是,对于下行转发数据包的处理包括如下步骤;
步骤D10:从WAN接口接收下行转发数据包,在PREROUTING的Hook位置点对下行转发数据包进行DNAT处理,转换目标地址为内网地址,然后查找是否存在对应的NAT Hash表;
如果是,进入步骤D20;
如果否,进入步骤D30;
步骤D20:直接使用NAT Hash表中记录的netif_lan接口参数,调用netif_lan接口的输出函数,将该下行转发数据包从WAN口发送到LAN口;
步骤D30:该下行转发数据包依次经过路由判断的Hook位置点、FORWARD的Hook位置点、最终到达POSTROUTING的Hook位置点,从LAN接口发送出去。
9.一种基于LwIP协议栈的网络设备快速转发的***,其特征是,对上行转发数据包的处理包括缓存查找单元、上行快速转发单元、标记单元和上行常规转发单元;
所述缓存查找单元从LAN接口接收上行转发数据包,并使用该上行转发数据包的源端口和目的端口作为索引查找是否存在具有相同索引值的NAT Hash表的缓存;如果存在,称其为有效NAT Hash表,将该上行转发数据包及有效NAT Hash表一起送往上行快速转发单元;否则将该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后送往标记单元;
所述上行快速转发单元比较该上行转发数据包的TCP/IP协议五元组信息和有效NATHash表的TCP/IP协议五元组信息是否完全一致;如果完全一致,则根据所匹配的有效NATHash表中所记录的netif_wan接口参数,调用netif_wan接口的输出函数,将该上行转发数据包从LAN口发送到WAN口;如果不完全一致,则将该上行转发数据包根据TCP/IP五元组计算HASH值,并新建NAT Hash表;随后送往标记单元;
所述标记单元为该上行转发数据包设置pbuf数据来源比特标识位,用来标记该上行转发数据包来自哪个LAN接口,将标记好的该上行转发数据包送往上行常规转发单元;
所述上行常规转发单元检测标记好的该上行转发数据包中的pbuf数据来源比特标识位,获知该上行转发数据包来自哪个LAN接口;对于需要做SNAT处理的上行转发数据包,对该上行转发数据包进行SNAT转换,并更新NAT Hash表,最后将该上行转发数据包从WAN接口发送出去;对于不需要做SNAT处理的上行转发数据包,直接将该上行转发数据包从WAN接口发送出去。
10.根据权利要求9所述的基于LwIP协议栈的网络设备快速转发的***,其特征是,对下行转发数据包的处理包括下行快速转发单元和下行常规转发单元;
所述下行快速转发单元从WAN接口接收下行转发数据包,对下行转发数据包进行DNAT处理,转换目标地址为内网地址,然后查找是否存在对应的NAT Hash表;如果存在,直接使用NAT Hash表中记录的netif_lan接口参数,调用netif_lan接口的输出函数,将该下行转发数据包从WAN口发送到LAN口;如果不存在,将该下行转发数据包送往下行常规转发单元;
所述下行常规转发单元将下行转发数据包从LAN接口发送出去。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010577957.8A CN111478855B (zh) | 2020-06-23 | 2020-06-23 | 基于LwIP协议栈的网络设备快速转发的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010577957.8A CN111478855B (zh) | 2020-06-23 | 2020-06-23 | 基于LwIP协议栈的网络设备快速转发的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111478855A CN111478855A (zh) | 2020-07-31 |
CN111478855B true CN111478855B (zh) | 2020-09-18 |
Family
ID=71763944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010577957.8A Active CN111478855B (zh) | 2020-06-23 | 2020-06-23 | 基于LwIP协议栈的网络设备快速转发的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111478855B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506541B (zh) * | 2020-06-30 | 2020-09-22 | 翱捷科技(上海)有限公司 | 一种嵌入式网络设备中加速网络数据包处理的方法及*** |
CN113132242B (zh) * | 2021-03-19 | 2022-11-15 | 翱捷科技股份有限公司 | 一种网络设备及其共享发送和接收缓存的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190045421A1 (en) * | 2018-06-22 | 2019-02-07 | Intel Corporation | Receive-side scaling for wireless communication devices |
CN110086707A (zh) * | 2019-03-18 | 2019-08-02 | 普联技术有限公司 | 一种基于双协议栈的网关*** |
CN110798538A (zh) * | 2019-10-16 | 2020-02-14 | 中盈优创资讯科技有限公司 | Nat地址分配方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7269663B2 (en) * | 2001-09-28 | 2007-09-11 | Intel Corporation | Tagging packets with a lookup key to facilitate usage of a unified packet forwarding cache |
CN101409732B (zh) * | 2008-11-19 | 2011-09-14 | 福建星网锐捷网络有限公司 | 一种网络地址转换信息管理***及方法 |
US9473298B2 (en) * | 2013-08-15 | 2016-10-18 | Blue Cedar Networks, Inc. | Simplifying IKE process in a gateway to enable datapath scaling using a two tier cache configuration |
CN110505248B (zh) * | 2019-09-29 | 2022-05-24 | 国家计算机网络与信息安全管理中心 | 一种内网nat流量的定位方法及*** |
-
2020
- 2020-06-23 CN CN202010577957.8A patent/CN111478855B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190045421A1 (en) * | 2018-06-22 | 2019-02-07 | Intel Corporation | Receive-side scaling for wireless communication devices |
CN110086707A (zh) * | 2019-03-18 | 2019-08-02 | 普联技术有限公司 | 一种基于双协议栈的网关*** |
CN110798538A (zh) * | 2019-10-16 | 2020-02-14 | 中盈优创资讯科技有限公司 | Nat地址分配方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111478855A (zh) | 2020-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10158568B2 (en) | Method and apparatus for service function forwarding in a service domain | |
US7039018B2 (en) | Technique to improve network routing using best-match and exact-match techniques | |
US11627016B2 (en) | Packet communications providing packet processing efficiencies in a network including using a segment routing and tunnel exchange | |
CN108989209B (zh) | Bier mpls网络设备、及其报文转发方法和介质 | |
US8290934B2 (en) | Method and system for processing access control lists using a hashing scheme | |
CN111478855B (zh) | 基于LwIP协议栈的网络设备快速转发的方法及*** | |
EP2869536B1 (en) | System and method for hash-based forwarding of packets with hierarchically structured variable-length identifiers | |
US20040085953A1 (en) | Longest prefix matching (LPM) using a fixed comparison hash table | |
US10791051B2 (en) | System and method to bypass the forwarding information base (FIB) for interest packet forwarding in an information-centric networking (ICN) environment | |
CN113519144B (zh) | 用于网络设备的精确匹配和三元内容可寻址存储器(tcam)混合查找 | |
CN103457803B (zh) | 一种点对点流量识别装置和方法 | |
CN112929281B (zh) | 基于fpga的网络设备的报文处理方法、装置及设备 | |
US9270593B2 (en) | Prediction based methods for fast routing of IP flows using communication/network processors | |
US7487255B2 (en) | Routing cache management with route fragmentation | |
CN111988266A (zh) | 一种处理报文的方法 | |
CN112653622B (zh) | 一种SRv6 uSID转发方法及装置 | |
EP4060949A1 (en) | Method for reducing routing loops, apparatus and system | |
CN108777654B (zh) | 报文转发方法及路由设备 | |
US7664873B1 (en) | Generating path-centric traffic information for analysis using an association of packet-centric information to path-centric information | |
CN115842671A (zh) | 一种规则处理方法、设备和存储介质 | |
EP1355472B1 (en) | Method and system to determine the most appropriate software layer after reception of a packet | |
US10764182B2 (en) | Combining prefix lengths into a hash table | |
CN108737287B (zh) | 重复分组识别方法、装置及汇聚分流设备 | |
CN107204926B (zh) | 预处理cache的路由快速查找方法 | |
CN113315708B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 201203 Floor 9, building 10, No. 399, Keyuan Road, China (Shanghai) free trade pilot zone, Pudong New Area, Shanghai Patentee after: Aojie Technology Co., Ltd Address before: 201203 No. 399, Keyuan Road, Zhangjiang High-tech Park, Pudong New Area, Shanghai Patentee before: Aojie Technology (Shanghai) Co.,Ltd. |