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

网络代理方法及装置、存储介质及网络设备

文献发布时间:2024-04-18 19:58:30


网络代理方法及装置、存储介质及网络设备

技术领域

本发明涉及计算机网络技术领域,具体而言,涉及一种网络代理方法及装置、存储介质及网络设备。

背景技术

透明代理为代理服务器的一种工作模式,此种工作模式下的代理服务器可视为客户端与服务端之间的一个中间节点,该节点会拦截客户端的请求,代为转发给服务端,并接收服务端的响应,代为转发给客户端,客户端与服务端均感知不到代理服务器的存在。

透明接入是指在将设备接入网络的过程中,不改变网络原有的配置,代理服务器的透明接入通常意味着代理服务器将工作于透明代理模式。

桥接口包含网络设备上的两个物理接口,主要功能就是在这两个接口之间进行数据转发,桥接口的主要用途之一正是透明接入,通俗来说就是原来一根网线现在从中间剪断,两端分别接在桥接口的两个物理接口上。由于单纯的桥接口只是简单地转发数据,所以从外部看来还是和一根完整的网线没有区别。

然而在现有技术中,如果将代理服务器部署在桥接口上,通过桥接口透明地接入网络,则由于工作在透明代理模式的代理服务器会拦截接收到的数据包,进行某些处理后,再封装为新的数据包转发出去,因此会破坏桥接口本身的转发特性,导致桥接口对于外部而言并非是完全透明的,甚至引起某些外部网络设备的兼容性问题。

发明内容

本申请实施例的目的在于提供一种网络代理方法及装置、存储介质及网络设备,以改善上述技术问题。

为实现上述目的,本申请提供如下技术方案:

第一方面,本申请实施例提供一种网络代理方法,应用于部署有代理服务器程序的网络设备,所述方法包括:从所述网络设备的第一桥接口中的入接口接收第一数据包,所述第一数据包中携带有源MAC地址;将所述第一数据包提交给所述代理服务器程序处理,得到第二数据包;其中,所述第二数据包的源MAC地址与所述第一数据包的源MAC地址不同;将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包;从所述第一桥接口中的出接口发送所述替换后的第二数据包。

上述方法在对代理服务器程序处理第一数据包所得到的第二数据包进行转发之前,先将第二数据包的源MAC地址替换为第一数据包的源MAC地址,从而在替换后,外部感知不到代理服务器程序对第一数据包的处理,如同第一数据包直接通过桥接口转发一样。

即,该方法在实现代理服务器的桥接口透明接入的同时,未对外暴露桥接口的信息(例如,MAC地址),使得桥接口对于外部而言是完全透明的,避免了因在桥接口上部署代理服务器程序而导致的某些外部网络设备的兼容性问题。

在第一方面的一种实现方式中,所述代理服务器程序位于应用层,所述将所述第一数据包提交给所述代理服务器程序处理,得到第二数据包,包括:将所述第一数据包通过网络协议栈提交给位于应用层的所述代理服务器程序处理,得到待发送数据;将所述待发送数据通过所述网络协议栈进行封装,得到所述第二数据包。

在上述实现方式中,代理服务器程序位于应用层,因此第一数据包要提交给代理服务器程序处理,先要通过网络协议栈的引流到达应用层,同时第一数据包处理后得到的待发送数据属于应用层数据,因此待发送数据要对外转发,也要先经过网络协议栈的封装,形成第二数据包。

在第一方面的一种实现方式中,所述网络协议栈基于linux系统的netfilter框架实现,通过所述netfilter框架实现的网络协议栈的链路层具有broute表,网络层具有prenat表,所述将所述第一数据包通过所述网络设备的网络协议栈提交给位于应用层的所述代理服务器程序处理,包括:利用所述broute表中配置的针对所述第一数据包的引流策略,将所述第一数据包从所述链路层提交至所述网络层处理,所述第一数据包中携带有目的IP地址;利用所述pre nat表中配置的目的NAT策略,将所述第一数据包从所述网络层提交至位于应用层的所述代理服务器程序处理;其中,所述目的NAT策略包括将所述第一数据包的目的IP地址转换为所述网络设备的本机地址的策略。

在上述实现方式中,通过在broute表和pre nat表中增加引流策略,使得第一数据包可以被上送至应用层的代理服务器程序处理,而不会从链路层或网络层直接转发,导致代理服务器的既定功能无法实现。

在第一方面的一种实现方式中,所述网络协议栈基于linux系统的netfilter框架实现,通过所述netfilter框架实现的网络协议栈的链路层具有broute表,所述将所述第一数据包通过所述网络设备的网络协议栈提交给位于应用层的所述代理服务器程序处理,包括:利用所述broute表中配置的针对所述第一数据包的引流策略,将所述第一数据包从所述链路层提交至所述网络协议栈的网络层处理;基于源设备上的第一应用程序与所述代理服务器程序之间的第一socket连接的连接相关信息,将所述第一数据包从所述网络层提交至位于应用层的所述代理服务器程序处理;其中,所述第一数据包为所述第一应用程序产生的数据包,所述第一socket连接是在所述第一应用程序和所述代理服务器程序之间传输所述第一数据包之前创建的。

在上述实现方式中,在链路层,通过在broute表中增加引流策略,使得第一数据包可以被上送到网络层,而不会从链路层直接转发。而在网络层,则可以直接利用已有socket连接的连接相关信息将第一数据包上送至应用层的代理服务器程序处理,处理流程更加简单。

在第一方面的一种实现方式中,所述第一数据包还携带有目的MAC地址,所述将所述待发送数据通过所述网络协议栈进行封装,得到所述第二数据包,包括:基于虚拟的网络配置信息,通过所述网络协议栈将所述待发送数据封装为所述第二数据包;其中,所述第二数据包的目的MAC地址为虚拟的MAC地址;所述将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包,包括:将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,以及,将所述第二数据包的目的MAC地址替换为所述第一数据包的目的MAC地址,得到所述替换后的第二数据包。

在上述实现方式中,由于第二数据包的源MAC地址和目的MAC地址都被替换为和第一数据包相同,因此外部感知不到代理服务器程序对第一数据包的处理,如同第一数据包直接通过桥接口转发一样,从而使得桥接口对于外部而言是完全透明的,避免了因在桥接口上部署代理服务器程序而导致的某些外部网络设备的兼容性问题。

另外,网络协议栈基于虚拟的(而非真实的)网络配置信息来封装第二数据包,从而可以显著减轻用户的配置压力,用户无需或基本无需关注代理服务器所接入的实际网络环境,达到或者接近了代理服务器在桥接口上完全透明部署的效果。

在第一方面的一种实现方式中,所述虚拟的网络配置信息包括所述第一桥接口的IP地址、所述网络设备的路由表中包含的下一跳设备的路由及其IP地址、以及所述网络设备的ARP表中包含的所述下一跳设备的IP地址及其MAC地址;所述第二数据包的目的MAC地址为所述下一跳设备的MAC地址。

在上述实现方式中,第一桥接口的IP地址、下一跳设备的IP地址、MAC地址及路由均为虚拟信息,而非真实信息,配置这些信息的目的主要是为了使待发送数据可以正常通过网络协议栈的处理,完成第二数据包的封装,第二数据包中不合理的信息(例如,目的MAC地址)在转发前会被替换掉。

从而,在实现代理服务器的桥接口透明接入时,可以显著减轻用户的配置压力,用户无需或基本无需关注所接入的实际网络环境,从而达到或者接近了完全透明部署的效果。

在第一方面的一种实现方式中,所述第一数据包为发送给目的设备的数据包,在所述路由表中,所述下一跳设备的路由为默认路由,所述第一桥接口的IP地址和所述下一跳设备的IP地址为同一网络中的地址,且该网络与目的设备所在的网络为不同的网络。

按照上述实现方式中的规则进行虚拟信息的配置,可以确保通过路由表能够匹配到默认路由,从而查询到下一跳设备的IP地址以及第一桥接口。

在第一方面的一种实现方式中,所述将所述待发送数据通过所述网络协议栈进行封装,得到所述第二数据包,包括:基于所述代理服务器程序与目的设备上的第二应用程序之间的第二socket连接的连接相关信息,通过所述网络协议栈将所述待发送数据封装为所述第二数据包;其中,所述第二数据包为发送给所述第二应用程序的数据包,所述第二socket连接是在所述代理服务器程序和所述第二应用程序之间传输所述第二数据包之前创建的。

在上述实现方式中,可以直接利用已有socket连接的连接相关信息完成第二数据包的封装,无需再查询路由表及ARP表(因为所需的信息在建立socket连接时已经记录在连接相关信息里),处理流程更加简单。

在第一方面的一种实现方式中,将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包,包括:将所述第二数据包的MAC帧头部替换为所述第一数据包的MAC帧头部,得到所述替换后的第二数据包;其中,所述第二数据包的MAC帧头部包括所述第二数据包的源MAC地址,所述第一数据包的MAC帧头部包括所述第一数据包的源MAC地址。

在上述实现方式中,可以直接将第二数据包的整个MAC帧头部替换为第一数据包的MAC帧头部,这样不仅能将第二数据包的源MAC地址替换为第一数据包的源MAC地址,还能够将其他可能需要替换的信息项(如目的MAC地址、VLAN标签)一并替换,操作起来简单高效。

在第一方面的一种实现方式中,在所述从所述网络设备的第一桥接口中的入接口接收第一数据包之后,以及在所述将所述第一数据包提交给所述代理服务器程序处理之前,所述方法还包括:确定所述网络设备的信息映射表中存在包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项;其中,所述信息映射表中的每个表项包对应一个由IP地址标识的连接,表项的内容包括该连接中的数据包的IP地址、MAC帧头部以及桥接口中的出接口;所述第二数据包的IP地址和所述第一数据包的IP地址相同,所述将所述第二数据包的MAC帧头部替换为所述第一数据包的MAC帧头部,得到所述替换后的第二数据包,包括:从所述信息映射表中查询出与所述第二数据包的IP地址对应的表项,从该表项中获取所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口,并将所述第二数据包的MAC帧头部替换为所述第一数据包的MAC帧头部。

上述实现方式中,在将接收到的第一数据包提交给代理服务器程序进行处理之前,先确定信息映射表中保存了第一数据包的MAC帧头部,而在对通过网络协议栈封装好的第二数据包进行转发之前,先将其MAC帧头部替换为第一数据包的MAC帧头部,从而在替换后,第二数据包的MAC帧头部和第一数据包相同,IP地址也和第一数据包相同,因此外部感知不到代理服务器程序对第一数据包的处理,如同第一数据包直接通过桥接口转发一样。

即,在实现代理服务器的桥接口透明接入的同时,未对外暴露桥接口的信息(例如,IP地址、MAC地址),使得桥接口对于外部而言是完全透明的,避免了因在桥接口上部署代理服务器程序而导致的某些外部网络设备的兼容性问题。

在第一方面的一种实现方式中,所述确定所述网络设备的信息映射表中存在包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项,包括:若所述信息映射表中不存在包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项,则在所述信息映射表中新建一个包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项。

在上述实现方式中,若信息映射表中不存在与第一数据包对应的表项,则可以在信息映射表中新建一个与第一数据包对应的表项,以便后续的MAC帧头部替换的步骤可以正常执行。

第二方面,本申请实施例提供一种网络代理装置,配置于部署有代理服务器程序的网络设备,所述装置包括:数据包接收模块,用于从所述网络设备的第一桥接口中的入接口接收第一数据包,所述第一数据包中携带有源MAC地址;数据包处理模块,用于将所述第一数据包提交给所述代理服务器程序处理,得到第二数据包;其中,所述第二数据包的源MAC地址与所述第一数据包的源MAC地址不同;桥转发模块,用于将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包;数据包发送模块,用于从所述第一桥接口中的出接口发送所述替换后的第二数据包。

第三方面,本申请实施例提供一种计算机程序产品,包括计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种实现方式提供的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种实现方式提供的方法。

第五方面,本申请实施例提供一种网络设备,包括:存储器以及处理器,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器读取并运行时,执行第一方面或第一方面的任意一种实现方式提供的方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的网络代理方法可能适用的网络架构;

图2为数据包在网络设备内部可能的流转过程;

图3为本申请实施例提供的网络代理方法可能包含的流程;

图4为本申请实施例提供的网络代理装置可能包含的功能模块;

图5为本申请实施例提供的网络设备可能具有的结构。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

术语“第一”、“第二”等仅用于将一个实体或者操作与另一个实体或操作区分开来,而不能理解为指示或暗示相对重要性,也不能理解为要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

图1为本申请实施例提供的网络代理方法可能适用的网络架构。参照图1,该网络架构中包括客户端设备10、网络设备20以及服务器30。

其中,客户端设备10可以是用户使用的终端设备,例如PC机、手机等。客户端设备10上可以部署客户端程序11,例如浏览器、APP、游戏客户端、数据库客户端等。

网络设备20是位于客户端设备10与服务器30之间的通信链路上的设备,即客户端设备10与服务器30之间相互发送的数据包都会经过网络设备20转发。网络设备20可以是应用代理服务器、路由器等设备。网络设备20上可以部署代理服务器程序21,例如nginx。nginx通常可作为透明代理或反向代理使用,在本申请的方案中,主要是作为透明代理使用。

网络设备20还可以用于执行本申请实施例提供的网络代理方法,方法步骤详见后文阐述。

服务器30可以是用于向用户提供服务的设备,例如单台服务器、服务器集群、云服务器等。服务器30上可以部署服务端程序31,例如,Web后台服务、数据库后台服务、游戏后台服务等。

服务端程序31和客户端程序11可以是配套的,二者之间通过数据交互向用户提供完整的服务功能,例如网页浏览、数据查询、网络游戏等。

应当理解,图1中的网络架构仅为示例,实际网络中,客户端设备10和网络设备20之间的网络链路上还可能有其他设备,例如,路由器。类似的,网络设备20和服务器30之间的网络链路上也可能有其他设备。

图2为数据包在网络设备内部可能的流转过程,该网络设备可以是图1中的网络设备20。图3为本申请实施例提供的网络代理方法可能包含的流程,在介绍图3中的方法时,将主要结合图2进行阐述,下面先简要介绍图2的内容:

以网络设备上安装linux系统的情况为例,网络设备的网卡驱动(图中linuxdriver)在接收到其他设备发送的数据包后,先将其提交给桥转发模块(可以是一个软件模块),桥转发模块记录下数据包的某些转发信息后(如果桥转发模块已经有这些信息,也可以不用记录),将数据包提交给linux的网络协议栈处理。该网络协议栈可基于linux的netfilter框架实现,例如,图2中的网络协议栈包括链路层、网络层以及socket层。

网络协议栈对数据包的处理大体上可以分为三个支路:

第一个支路是直接通过链路层将数据包转发出去,即图2中in→broute→pre nat→filter foward→nat postroute→out这个支路,最后数据包又回到桥转发模块,并最终通过网卡驱动转发出去。

第二个支路是先将数据包提交至网络层,然后通过网络层将数据包转发出去,即图2中in→broute→pre nat→route→filter foward→nat postroute→out这个支路,最后数据包又回到桥转发模块,并最终通过网卡驱动转发出去。

第三个支路是先数据包提交至应用层,由应用层的代理服务器程序处理后,再将数据包通过网络协议栈送回到桥转发模块,即图2中in→broute→pre nat→route→filter input→nginx→route→nat output→filter output→out这个支路。桥转发模块在接收到数据包后,会基于之前记录的转发信息对数据包进行某些处理,并最终将处理后的数据包通过网卡驱动转发出去。

其中,本申请的方案主要涉及的是第三个支路,在此支路中,数据包会被代理服务器程序处理,实现相应的代理功能。

关于图2中的网络协议栈在处理数据包时用到的一些netfilter框架中的数据表等组件,简要解释如下:

in:收包节点。

broute:用于决定数据包是直接进行链路层桥接口转发,还是需要走网络层路由转发的数据表。

pre nat(broute上方):是一个NAT地址转换表,利用route(左侧)查询路由之前,可以利用该表进行一次NAT地址转换。

route(左侧):在网络层进行数据包转发所使用的路由表。

filter input:是一个数据包过滤表,用于决定哪些数据包允许通行,哪些数据包不允许通行,所有发送给本机的数据包(包括要上送给应用层的代理服务器程序的数据包)可以通过该表过滤。

route(右侧):本机向外发送的数据包(包括代理服务器程序处理后要对外发送的数据包)所使用的路由表。

nat output:是一个NAT地址转换表,本机向外发送的数据包可以利用该表进行一次NAT地址转换。

filter output:是一个数据包过滤表,本机向外发送的数据包可以通过该表过滤。

filter forward(网络层):是一个数据包过滤表,用于在网络层转发数据包时的过滤。图2中的filter forward(链路层)功能类似,不再重复说明。

nat postroute(网络层):是一个NAT地址转换表,利用route(左侧)查询路由之后,可以利用该表再进行一次NAT地址转换。图2中的nat postroute(链路层)功能类似,不再重复说明。

out:发包节点。

在图2中,网卡驱动、桥转发模块、网络协议栈的链路层以及网络层可以认为属于linux的内核空间,而应用层可以认为属于linux的用户空间,网络协议栈的socket层则部分属于内核空间,部分属于用户空间。

应当理解,图2仅为示例,网络协议栈也可以不基于netfilter框架实现。

图3中的网络代理方法可以应用于一网络设备上,例如图1中的网络设备20,该网络设备的内部结构可以参照图5。该网络设备配置有一个或多个桥接口,每个桥接口包括两个物理接口,在某次经由桥接口的数据转发过程中,有数据包流入的物理接口称为入接口,有数据包流出的物理接口称为出接口。每个桥接口可以有自己的IP地址(可以由用户配置)和MAC地址(可以由linux自动分配)。在桥接口的上层可以部署代理服务器程序,即利用桥接口将代理服务器透明接入到现有网络中,由于代理服务器程序是应用程序,所以其可以属于应用层,如图2所示。

参照图3,网络代理方法包括:

步骤S410:从网络设备的第一桥接口中的入接口接收第一数据包。

其中,第一数据包可以是源设备上的第一应用程序产生的、要发送给目的设备上的第二应用程序的数据包。例如,源设备可以是客户端设备,第一应用程序可以是客户端程序,目的设备可以是服务器,第二应用程序可以是服务端程序。又例如,源设备可以是服务器,第一应用程序可以是服务端程序,目的设备可以是客户端设备,第二应用程序可以是客户端程序。通常,会由客户端设备主动向服务器发起请求,服务器对请求进行响应,响应数据返回给客户端设备。

注意,其一,第一数据包在到达网络设备之前,相对于源设备上产生的原始数据包可能已经发生了某些改变,但仍然可以认为第一数据包来源于源设备;其二,真正到达目的设备的数据包相对于第一数据包可能已经发生了某些改变(比如,本申请方案中网络设备对外发送的是基于第一数据包产生的第二数据包),但仍然可以认为第一数据包是要发送给目的设备。

第一数据包可以是一个包含MAC帧头部和IP报文头部的数据包,还可以包含更上层(例如,应用层)的协议数据。

第一数据包的MAC帧头部可以包括第一数据包的源MAC地址、目的MAC地址、VLAN标签以及上层协议类型。如果源设备和网络设备之间的网络链路上没有路由器(类似图2那样),那么源MAC地址可以是源设备的MAC地址,如果源设备和网络设备之间的网络链路上有路由器,那么源MAC地址可以是上一跳路由器的MAC地址。如果网络设备和目的设备之间的网络链路上没有路由器(类似图2那样),那么目的MAC地址可以是目的设备的MAC地址,如果目的设备和网络设备之间的网络链路上有路由器,那么目的MAC地址可以是下一跳路由器的MAC地址。

需要注意的是,在不同的实现方式中,MAC帧的头部可能和上面实施例中的不同,例如某些MAC帧的头部可能没有VLAN标签这个字段,但源MAC地址和目的MAC地址这两个字段肯定是包含在MAC帧的头部的。

第一数据包的IP报文头部包括第一数据包的IP地址,第一数据包的IP地址包括第一数据包的源IP地址以及目的IP地址。源IP地址即为源设备的IP地址,目的IP地址即为目的设备的IP地址。

第一桥接口可以是网络设备上配置的桥接口之一。在执行步骤S410之前,网络设备已经配置好第一桥接口,即第一桥接口下属的两个物理接口是明确的。第一数据包流入的物理接口即为第一桥接口的入接口,另一个物理接口则为第一桥接口的出接口。

对应到图2,步骤S410可由网络设备的网卡驱动执行,网卡驱动将接收到的第一数据包提交给桥转发模块进一步处理。

步骤S420:将第一数据包提交给代理服务器程序处理,得到第二数据包。

例如,若代理服务器程序位于应用层,则步骤S420可以进一步包括:

步骤(1):将第一数据包通过网络协议栈提交给位于应用层的代理服务器程序处理,得到待发送数据。

例如,参照图2,第一数据包可以沿着路径“桥转发模块→in→broute→pre nat→route→filter input→socket→nginx”到达应用层的nginx,nginx可以根据预配置的代理策略对第一数据包进行相应的处理,得到处理后的数据,即要发送给目的设备的待发送数据,待发送数据可以认为是应用层数据。

为了避免第一数据包从图2中的第一个支路或第二个支路被转发走(从而没有被代理服务器程序处理),可以对网络协议栈中的某些数据表进行适当的配置,从而将数据引流到应用层,详见后文阐述。

代理服务器程序的代理策略可以包括需要代理的服务器的IP地址、服务器的网页路径参数等,通俗解释,配置这些代理策略的目的就是要告诉nginx对于哪些服务器的哪些网页和数据需要进行代理、如何代理等。代理策略对图2中的filter input存在影响,例如无需代理的数据包可能会被过滤掉。

代理策略中还包括代理服务器发包所使用的IP地址的策略,应当将此策略配置为采用源设备的IP地址发包,如此在步骤S440中得到的第二数据包的源IP地址可以是源设备的IP地址,这也是代理服务器程序作为透明代理的要求。

代理服务器程序对第一数据包进行的处理可以包括应用层的数据解密、数据还原、检测、缓存、数据替换、拦截等一项或多项处理。例如,对于客户端程序发送给服务端程序的文件(表现为若干数据包),代理服务器程序可以将其先缓存起来,扫描发现无风险后,再重新发给服务端程序。

步骤(2):将待发送数据通过网络协议栈进行封装,得到第二数据包。

由于待发送数据是应用层数据,要将应用程的数据转发出去,需要通过网络协议栈将其封装为数据包,称为第二数据包。第二数据包虽然是基于第一数据包产生的,但其携带的应用层数据可能已经和第一数据包不同。

为了使第二数据包在封装过程中能够正常通过网络协议栈的校验,避免其被丢弃或者未从第一桥接口的出接口转发,可以进行一些配置,详见后文阐述。

由于第一数据包是源设备发送给目的设备的数据包,所以第二数据包也是发送给目的设备的数据包。第二数据包的源IP地址和目的IP地址都和第一数据包相同,第二数据包的源MAC地址和第一数据包的源MAC地址不同,例如可以是第一桥接口的MAC地址(可由操作系统自动分配,无需用户配置)。在不同的实现方式中,第二数据包的目的MAC地址可以和第一数据包的目的MAC地址相同,也可以和第一数据包的MAC地址不同(例如可以是一个虚拟的MAC地址,此虚拟的MAC地址只是为了通过网络协议栈的校验,使得第二数据包能够顺利完成封装并抵达桥转发模块)。

步骤S430:将第二数据包的源MAC地址替换为第一数据包的源MAC地址,得到替换后的第二数据包。

对应到图2,步骤S430可由桥转发模块执行。

在接收到第一数据包后,桥转发模块可以解析第一数据包的MAC帧头部,并将第一数据包的源MAC地址保存起来(例如,此操作可于步骤S410和S420之间执行),从而可以在步骤S430中完成对第二数据包的源MAC地址的替换。由于第二数据包的源IP地址和目的IP地址可以和第一数据包相同,而在某些实现方式中,第二数据包的目的MAC地址也是和第一数据包相同的,因此在完成对第二数据包的源MAC地址的替换后,替换后的第二数据包的IP地址、MAC地址都和第一数据包相同,如同直接经过桥接口转发,而未经过应用层处理一样。

可选的,若第二数据包的目的MAC地址也是和第一数据包不同(例如,是桥接口的MAC地址),则在步骤S430中还可以将第二数据包的目的MAC地址也替换为第一数据包的目的MAC地址,以使替换后的第二数据包的IP地址、MAC地址都和第一数据包相同。为实现此种替换,桥转发模块还需要提前保存好第一数据包的目的MAC地址。

可选的,在步骤S430中还可以将第二数据包的MAC帧头部替换为第一数据包的MAC帧头部,得到替换后的第二数据包。这样,无论是第二数据包的源MAC地址还是目的MAC地址都得到了替换,并且,如果还有其他需要替换信息项(例如,VLAN标签),也一并得到了替换,操作起来简单高效。为实现此种替换,桥转发模块需要提前保存好第一数据包的MAC帧头部。另外,若第二数据包的MAC帧头部中的某些字段和第一数据包的MAC帧头部中的对应字段是相同的,也不排除在替换MAC帧头部时跳过这些字段。例如,若所有数据包的MAC帧头部中的上层协议类型固定为IPv4,则在对第二数据包的MAC帧头部进行替换时,可以跳过上层协议类型字段。

步骤S440:从第一桥接口中的出接口发送替换后的第二数据包。

第一桥接口中的出接口就是第一桥接口中除入接口以外的另一个接口,可以将替换后的第二数据包从此出接口转发出去。

对应到图2,步骤S440可由网络设备的网卡驱动执行,网卡驱动从桥转发模块接收替换后的第二数据包,并将其从第一桥接口的出接口转发。

简单总结图3中的方法,该方法在对代理服务器程序处理第一数据包所得到的第二数据包进行转发之前,先至少将第二数据包的源MAC地址替换为第一数据包的源MAC地址,从而在替换后,外部感知不到代理服务器程序对第一数据包的处理,如同第一数据包直接通过桥接口转发一样。

即,该方法在实现代理服务器的桥接口透明接入的同时,未对外暴露桥接口的信息(例如,桥接口自身的IP地址、MAC地址),使得桥接口对于外部而言是完全透明的,避免了因在桥接口上部署代理服务器程序而导致的某些外部网络设备的兼容性问题。

在一种实现方式中,若步骤S430中采用的是MAC帧头部的整体替换,则在步骤S410之后,以及在步骤S420之前,网络代理方法包括:

确定网络设备的信息映射表中存在包括第一数据包的IP地址、第一数据包的MAC帧头部以及第一桥接口中的出接口的表项。

信息映射表是桥转发模块所维护的一个数据表。此表中的每个表项对应一个由源IP地址和目的IP地址所标识的连接,每个表项的内容包括属于该连接中的数据包的IP地址、MAC帧头部以及转发数据包用的桥接口中的出接口,这三项信息的含义可以参考第一数据包的IP地址、MAC帧头部以及第一桥接口的出接口,不再重复阐述。可选的,表项中还可以包含其他信息,例如桥接口的入接口等。

桥转发模块在接收到第一数据包后,可以根据第一数据包查询信息映射表,如果信息映射表中存在与第一数据包对应的表项,则继续执行步骤S420。

查询的方法可以是:用第一数据包的源IP地址和目的IP地址的组合(可以是原始状态的源IP地址和目的IP地址的组合,亦可以是进行某种运算后的源IP地址和目的IP地址的组合)去匹配每个表项中的源IP地址和目的IP地址的组合,匹配成功的表项则为与第一数据包对应的表项(默认该表项的其他信息和第一数据包的对应信息也是匹配的),或者说第一数据包为该表项对应的连接中的一个数据包。可选的,IP地址的组合匹配成功以后,还可以进一步验证匹配到的表项中的其他信息是否与第一数据包的对应信息匹配,若全部匹配成功,才认为此表项是与第一数据包对应的表项,否则不认为此表项是与第一数据包对应的表项。

如果信息映射表中不存在与第一数据包对应的表项,则可以在信息映射表中新建一个与第一数据包对应的表项,此表项的内容至少包括第一数据包的IP地址、第一数据包的MAC帧头部以及第一桥接口中的出接口。例如,第一数据包中的源IP地址为IP1,目的IP地址为IP2,源MAC地址为MAC1,目的MAC地址为MAC2,VLAN标签为VLAN1,上层协议类型为IPv4,第一桥接口的入接口为eth1,出接口为eth2,则信息映射表中与第一数据包对应的表项可以表示为:

(IP1,IP2,MAC1,MAC2,VLAN1,IPv4,eth1,eth2)

总之,在执行完上面的步骤后,可以确保信息映射表中存在一个与第一数据包对应的表项,如此才能够保证步骤S430的正常执行。

对于第二数据包的IP地址和第一数据包的IP地址相同的情况,此时步骤S430可以包括:从信息映射表中查询出与第二数据包的IP地址对应的表项,从该表项中获取第一数据包的MAC帧头部以及第一桥接口中的出接口,并将第二数据包的MAC帧头部替换为第一数据包的MAC帧头部,第一桥接口中的出接口则可以在步骤S440中使用。

对应到图2,由于第二数据包的IP地址和第一数据包的IP地址是相同的,从而桥转发模块在接收到第二数据包后,利用第二数据包的IP地址就可以从数据映射表中查询出与第一数据包对应的表项,进而可以获得此表项中记录的第一数据包的MAC帧头部以及第一桥接口中的出接口。

接着,桥转发模块会将第二数据包的MAC帧头部替换为第一数据包的MAC帧头部,替换后,第二数据包的IP地址和MAC帧头部都和第一数据包相同,如同直接经过桥接口转发,而未经过应用层处理一样。

对于在步骤S430中并不需要对MAC帧头部的整体进行替换的情况(例如,只需要替换第二数据包的源MAC地址,或者只需要替换第二数据包的源MAC地址和目的MAC地址),也可以参照上面的方式实现,只是此时信息映射表中可以不用保存第一数据包中完整的MAC帧头部,可以只保存需要替换的那些信息项。

在一种实现方式中,若网络协议栈基于linux系统的netfilter框架实现,则步骤S430可以进一步包括:

步骤A:利用网络协议栈的链路层的broute表中配置的针对第一数据包的引流策略,将第一数据包从链路层提交至网络协议栈的网络层处理。

broute表的功能前文已经介绍。该引流策略可以针对第一数据包的目的IP地址配置,例如,对于源设备是客户端设备,目的设备是服务器的情况,若服务器的IP地址为1.1.1.1,则可以在broute表中增加一个目的IP地址为1.1.1.1的broute策略,意思是发送到1.1.1.1的数据包不直接进行桥接口转发,而是要上送至网络层进一步处理。从而在处理到目的IP地址为1.1.1.1的第一数据包时,根据broute表中的这条策略,会将其提交给网络层进一步处理。

步骤B:利用网络协议栈的网络层的pre nat表中配置的目的NAT策略,将第一数据包从网络层提交至位于应用层的代理服务器程序处理。其中,目的NAT策略包括将第一数据包的目的IP地址转换为网络设备的本机地址的策略。

pre nat表可用于将数据包的源IP地址或目的IP地址转换为所需的IP地址,prenat表中针对源IP地址的转换策略称为源NAT策略,针对目的IP地址的转换策略称为目的NAT策略。

在步骤B中要配置的是目的NAT策略,沿用步骤A中的例子,该目的NAT策略可以是将服务器的IP地址1.1.1.1转换为网络设备的本机地址127.0.0.1的策略,从而在处理到目的IP地址为1.1.1.1的第一数据包时,根据pre nat表中的这条策略,会将第一数据包的目的IP地址转换为本机地址127.0.0.1,即表明第一数据包是本机要接收的,应该上送到应用层去处理,而不应该查询路由表后直接转发出去。

在上述实现方式中,通过在broute表和pre nat表中增加引流策略,使得第一数据包可以被上送至应用层的代理服务器程序处理,而不会从链路层或网络层直接转发,导致代理服务器的既定功能无法实现。

在一种实现方式中,步骤(2)可以进一步包括,基于虚拟的网络配置信息,通过网络协议栈将待发送数据封装为第二数据包。其中,第二数据包的目的MAC地址为一个虚拟的MAC地址,在步骤S430中会将此MAC地址替换为第一数据包的目的MAC地址。

在现有网络协议栈的处理逻辑中,为了完成数据包的封装及转发,一种可能的流程为:首先需要利用数据包的目的IP地址查询路由表(对应图2中左侧的route表),得到网络设备的下一跳设备的IP地址以及用于转发数据包的桥接口,然后再根据下一跳设备的IP地址查询网络设备的ARP表,得到下一跳设备的MAC地址,此MAC地址作为目的MAC地址被写入到数据包的MAC帧头部,最后利用下一跳设备的MAC地址查询网络设备的CAM表,得到桥接口下的出接口,然后通过此出接口转发封装好的数据包。

对于本申请方案中的第二数据包来说,上述流程中查表得到的下一跳设备的MAC地址以及出接口信息并没有什么用处,因为这些信息都可以记录在桥转发模块的中(例如,前面提到的信息映射表中),并不需要通过网络协议栈处理获得。

但是,网络协议栈的上述处理流程是无法绕开的,因此可以配置虚拟的网络配置信息对网络协议栈进行“欺骗”,使得第二数据包能够顺利完成上面的流程并抵达桥转发模块,从桥转发模块中获取正确的转发信息并完成转发。

可选的,上述虚拟的网络配置信息可以包括第一桥接口的IP地址、网络设备的路由表中包含的下一跳设备的路由及其IP地址、以及网络设备的ARP表中包含的下一跳设备的IP地址及其MAC地址。所谓“虚拟”的含义是这些信息是非真实的,用户无需去了解这些信息的真实值是什么,从而也就没有配置上的额外负担。

例如,第一桥接口的IP地址配置为192.168.250.250,路由表中下一跳设备的路由配置为0.0.0.0/0(默认路由),下一跳设备的IP地址配置为192.168.250.251,ARP表中下一跳设备的IP地址配置为192.168.250.251,对应的下一跳设备的MAC地址配置为00:01:02:03:04:05。

如此,网络协议栈在处理第二数据包时,先根据第二数据包的目的IP地址1.1.1.1查询路由表,得到下一跳设备的IP地址192.168.250.251以及用于转发第二数据包的第一桥接口,然后再根据下一跳设备的IP地址192.168.250.251查询ARP表,得到下一跳设备的MAC地址00:01:02:03:04:05,并将此MAC地址作为目的MAC地址写入到第二数据包的MAC帧头部(源MAC地址为第一桥接口自动分配的MAC地址),最后利用下一跳设备的MAC地址00:01:02:03:04:05查询网络设备的CAM表,由于未配置CAM表,因此查询失败,默认会向网络设备的所有的物理接口转发第二数据包,但实际上并不会真的向所有接口转发,因为第二数据包在到达桥转发模块以后,可以通过查询信息映射表获得真正的出接口,只向真正的出接口转发就可以了。

虚拟信息在配置上虽然比较自由,但也可以具有一些配置规则,例如:在路由表中,下一跳设备的路由采用默认路由,第一桥接口的IP地址和下一跳设备的IP地址为同一网络中的地址,且该网络与目的设备所在的网络为不同的网络。

下面通过举例简单分析此规则的意义:配置了第一桥接口的IP地址192.168.250.250以后,路由表中会自动生成一条对应的直连路由,对应下表中的第二行:

其中,ens1表示第一桥接口,网络掩码255.255.255.0作用于第一桥接口的IP地址,可以得到目的网络192.168.250.0,直连路由由于是直接从本桥接口转发,因此没有下一跳设备,故其IP地址为0.0.0.0。

该表中的第一行就是IP地址为192.168.250.251的下一跳设备对应的默认路由,默认路由可以简写为0.0.0.0/0,斜杠之前的0.0.0.0表示目的网络,斜杠之后的0表示网络掩码。

注意,第一桥接口的IP地址192.168.250.250和下一跳设备的IP地址192.168.250.251都是网络192.168.250.0中的地址,否则默认路由是无效的,无法找到用于转发数据包的桥接口。

在利用第二数据包的目的IP地址1.1.1.1进行路由匹配时,基于最长匹配原则,会先和路由表中的直连路由进行匹配,但直连路由并不是所需的路由,因为它是没有下一跳设备的。为了使直连路由不会被匹配上,就要使得直连路由的目的网络192.168.250.0和服务器所在的网络不是同一个网络,由于服务器的IP地址为1.1.1.1,因此该要求是满足的。进一步的,由于目的网络192.168.250.0实际上和第一桥接口配置的IP地址有关,所以在配置第一桥接口的IP地址的时候要尽量避免和公网中的IP地址冲突,例如可使用内网中不常用的IP地址。

一旦直连路由匹配不上,那么必然会匹配上默认路由,这样就成功获得了下一跳设备的IP地址以及第一桥接口的信息,从而可以继续执行查询ARP表等流程。

应当理解,针对下一跳设备,也可以配置非默认路由,只要保证第二数据包的目的IP地址能够匹配上所配置的路由就好。

在上述实现方式中,第一桥接口的IP地址、下一跳设备的IP地址、MAC地址及路由均为虚拟信息,而非真实信息,配置这些信息的目的主要是为了使待发送数据可以正常通过网络协议栈的处理,完成第二数据包的封装,后续可以利用第一数据包将第二数据包中不合理的信息替换掉(例如,根据信息映射表中记录的信息进行替换)。从而,在实现代理服务器的桥接口透明接入时,可以显著减轻用户的配置压力,用户无需或基本无需关注所接入的实际网络环境,从而达到或者接近了完全透明部署的效果。

socket是一种网络进程之间的通信机制,对应到图2就是网络协议栈中的socket层。例如,源设备上的第一应用程序和网络设备上的代理服务器程序之间可以建立socket连接进行通信(称为第一socket连接),网络设备上的代理服务器程序和目的设备上的第二应用程序之间也可以建立socket连接进行通信(称为第二socket连接)。

在考虑socket的情况下,网络协议栈处理数据包的过程可以得到一定的简化。下面通过步骤(1)和(2)进行说明:

对于步骤(1),可以采用以下方式实现:

步骤C:利用网络协议栈的链路层的broute表中配置的针对第一数据包的引流策略,将第一数据包从链路层提交至网络协议栈的网络层处理。

步骤C和步骤A相同,不再重复阐述。

步骤D:基于源设备上的第一应用程序与代理服务器程序之间的第一socket连接的连接相关信息,将第一数据包从网络层提交至位于应用层的代理服务器程序处理。

其中,第一应用程序与代理服务器程序之间的第一socket连接可以是在第一应用程序和代理服务器程序之间传输第一数据包之前建立的。第一应用程序在与代理服务器程序建立第一socket连接时,已经记录下一些关于此连接下的数据包应该如何处理的信息,称为连接相关信息。例如,第一数据包若是第一socket连接下的数据包,按照连接相关信息应该直接提交给代理服务器程序处理,这样就不用再利用pre nat表进行IP地址转换了,数据包的处理过程得到简化。

例如,若源设备为客户端设备,第一应用程序为客户端程序,目的设备为服务器,第二应用程序为服务端程序,则对于客户端程序给服务端程序发送首个数据包,网络设备在处理该数据包时,会查询pre nat表并进行IP地址转换。这之后代理服务器程序与客户端程序之间建立好了第一socket连接,连接相关信息也已经被记录,从而网络设备再收到客户端程序给服务端程序发送后续数据包时,就可以直接按照步骤D描述的,根据第一socket连接的连接相关信息将数据包提交给代理服务器程序处理。

又例如,若源设备为服务器,第一应用程序为服务端程序,目的设备为客户端设备,第二应用程序为客户端程序,则由于服务端程序通常只是响应客户端程序的请求,因此当服务端程序给客户端程序发送数据包时,服务端程序与代理服务器程序之间的第一socket连接已经建立好了,连接相关信息也已经被记录,从而网络设备在收到服务端程序给客户端程序发送的数据包时,就可以直接按照步骤D描述的,根据第一socket连接的连接相关信息将数据包提交给代理服务器程序处理。

对于步骤(2),可以采用以下方式实现:

步骤E:基于代理服务器程序与目的设备上的第二应用程序之间的第二socket连接的连接相关信息,通过网络协议栈将待发送数据封装为第二数据包。

其中,代理服务器程序与第二应用程序之间的第二socket连接可以是在代理服务器程序和第二应用程序之间传输第二数据包之前建立的。第二应用程序在与代理服务器程序建立第二socket连接时,已经记录下一些关于此连接下的数据包应该如何处理的信息,称为连接相关信息。例如,第二数据包若是第二socket连接下的数据包,则在封装第二数据包时,要写入MAC帧头部的目的MAC地址(可以是虚拟MAC地址)是已经被记录在连接相关信息中的,直接读取即可,无需再查询路由表及ARP表获得,数据包的处理过程得到简化。

例如,若源设备为客户端设备,第一应用程序为客户端程序,目的设备为服务器,第二应用程序为服务端程序,则对于代理服务器程序给服务端程序发送首个数据包(此数据包可由客户端程序给服务端程序发送的首个数据包触发产生),网络设备在封装该数据包时,会查询路由表及ARP表,获得下一跳设备的MAC地址,并将其写入到此数据包的MAC帧头部,这之后代理服务器程序与服务端程序之间建立好了第二socket连接,连接相关信息也已经被记录,从而代理服务器再给服务端程序发送后续数据包时(这些数据包可由客户端程序给服务端程序发送的后续数据包触发产生),就可以直接按照步骤E描述的,根据第二socket连接的连接相关信息完成数据包的封装。

又例如,若源设备为服务器,第一应用程序为服务端程序,目的设备为客户端设备,第二应用程序为客户端程序,则由于服务端程序通常只是响应客户端程序的请求,因此当服务端程序给客户端程序发送数据包时,客户端程序与代理服务器程序之间的第二socket连接已经建立好了,连接相关信息也已经被记录,从而代理服务器程序在给客户端程序发送数据包时(这些数据包可由服务端程序给客户端程序发送的数据包触发产生),就可以直接按照步骤E描述的,根据第二socket连接的连接相关信息完成数据包的封装。

简单总结,就理论上而言,只有客户端程序发送给服务端程序的首个数据包在上送至代理服务器程序的过程中、以及重新封装的过程中,不使用socket连接的连接相关信息,后续的数据包,无论是客户端程序发送给服务端程序的,还是服务端程序发送给客户端程序的,在上送至代理服务器程序的过程中、以及重新封装的过程中,都可以使用socket连接的连接相关信息,以加快处理速度。

图4为本申请实施例提供的网络代理装置可能包含的功能模块,该网络代理装置可配置于部署有代理服务器程序的网络设备。参照图4,网络代理装置500包括:

数据包接收模块510,用于从所述网络设备的第一桥接口中的入接口接收第一数据包,所述第一数据包中携带有源MAC地址;

数据包处理模块520,用于将所述第一数据包提交给所述代理服务器程序处理,得到第二数据包;其中,所述第二数据包的源MAC地址与所述第一数据包的源MAC地址不同;

桥转发模块530,用于将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包;

数据包发送模块540,用于从所述第一桥接口中的出接口发送所述替换后的第二数据包。

在网络代理装置500的一种实现方式中,所述代理服务器程序位于应用层,数据包处理模块520将所述第一数据包提交给所述代理服务器程序处理,得到第二数据包,包括:将所述第一数据包通过网络协议栈提交给位于应用层的所述代理服务器程序处理,得到待发送数据;将所述待发送数据通过所述网络协议栈进行封装,得到所述第二数据包。

在网络代理装置500的一种实现方式中,所述网络协议栈基于linux系统的netfilter框架实现,通过所述netfilter框架实现的网络协议栈的链路层具有broute表,网络层具有pre nat表,数据包处理模块520将所述第一数据包通过所述网络设备的网络协议栈提交给位于应用层的所述代理服务器程序处理,包括:利用所述broute表中配置的针对所述第一数据包的引流策略,将所述第一数据包从所述链路层提交至所述网络层处理,所述第一数据包中携带有目的IP地址;利用所述pre nat表中配置的目的NAT策略,将所述第一数据包从所述网络层提交至位于应用层的所述代理服务器程序处理;其中,所述目的NAT策略包括将所述第一数据包的目的IP地址转换为所述网络设备的本机地址的策略。

在网络代理装置500的一种实现方式中,所述网络协议栈基于linux系统的netfilter框架实现,通过所述netfilter框架实现的网络协议栈的链路层具有broute表,数据包处理模块520将所述第一数据包通过所述网络设备的网络协议栈提交给位于应用层的所述代理服务器程序处理,包括:利用所述broute表中配置的针对所述第一数据包的引流策略,将所述第一数据包从所述链路层提交至所述网络协议栈的网络层处理;基于源设备上的第一应用程序与所述代理服务器程序之间的第一socket连接的连接相关信息,将所述第一数据包从所述网络层提交至位于应用层的所述代理服务器程序处理;其中,所述第一数据包为所述第一应用程序产生的数据包,所述第一socket连接是在所述第一应用程序和所述代理服务器程序之间传输所述第一数据包之前创建的。

在网络代理装置500的一种实现方式中,所述第一数据包还携带有目的MAC地址,数据包处理模块520将所述待发送数据通过所述网络协议栈进行封装,得到所述第二数据包,包括:基于虚拟的网络配置信息,通过所述网络协议栈将所述待发送数据封装为所述第二数据包;其中,所述第二数据包的目的MAC地址为虚拟的MAC地址;所述将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包,包括:将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,以及,将所述第二数据包的目的MAC地址替换为所述第一数据包的目的MAC地址,得到所述替换后的第二数据包。

在网络代理装置500的一种实现方式中,所述虚拟的网络配置信息包括所述第一桥接口的IP地址、所述网络设备的路由表中包含的下一跳设备的路由及其IP地址、以及所述网络设备的ARP表中包含的所述下一跳设备的IP地址及其MAC地址;所述第二数据包的目的MAC地址为所述下一跳设备的MAC地址。

在网络代理装置500的一种实现方式中,所述第一数据包为发送给目的设备的数据包,在所述路由表中,所述下一跳设备的路由为默认路由,所述第一桥接口的IP地址和所述下一跳设备的IP地址为同一网络中的地址,且该网络与目的设备所在的网络为不同的网络。

在网络代理装置500的一种实现方式中,数据包处理模块520将所述待发送数据通过所述网络协议栈进行封装,得到所述第二数据包,包括:基于所述代理服务器程序与目的设备上的第二应用程序之间的第二socket连接的连接相关信息,通过所述网络协议栈将所述待发送数据封装为所述第二数据包;其中,所述第二数据包为发送给所述第二应用程序的数据包,所述第二socket连接是在所述代理服务器程序和所述第二应用程序之间传输所述第二数据包之前创建的。

在网络代理装置500的一种实现方式中,桥转发模块530将所述第二数据包的源MAC地址替换为所述第一数据包的源MAC地址,得到替换后的第二数据包,包括:将所述第二数据包的MAC帧头部替换为所述第一数据包的MAC帧头部,得到所述替换后的第二数据包;其中,所述第二数据包的MAC帧头部包括所述第二数据包的源MAC地址,所述第一数据包的MAC帧头部包括所述第一数据包的源MAC地址。

在网络代理装置500的一种实现方式中,桥转发模块530还用于:在数据包接收模块510从所述网络设备的第一桥接口中的入接口接收第一数据包之后,以及在数据包处理模块520将所述第一数据包提交给所述代理服务器程序处理之前,确定所述网络设备的信息映射表中存在包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项;其中,所述信息映射表中的每个表项包对应一个由IP地址标识的连接,表项的内容包括该连接中的数据包的IP地址、MAC帧头部以及桥接口中的出接口;所述第二数据包的IP地址和所述第一数据包的IP地址相同,桥转发模块530将所述第二数据包的MAC帧头部替换为所述第一数据包的MAC帧头部,得到所述替换后的第二数据包,包括:从所述信息映射表中查询出与所述第二数据包的IP地址对应的表项,从该表项中获取所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口,并将所述第二数据包的MAC帧头部替换为所述第一数据包的MAC帧头部。

在网络代理装置500的一种实现方式中,桥转发模块530确定所述网络设备的信息映射表中存在包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项,包括:若所述信息映射表中不存在包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项,则在所述信息映射表中新建一个包括所述第一数据包的IP地址、所述第一数据包的MAC帧头部以及所述第一桥接口中的出接口的表项。

本申请实施例提供的网络代理装置500可用于执行本申请实施例提供的网络代理方法,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法实施例中相应内容。

图5为本申请实施例提供的网络设备可能具有的结构。参照图5,网络设备600包括:处理器610、存储器620以及通信单元630,这些组件通过通信总线640和/或其他形式的连接机构(未示出)互连并相互通讯。

其中,处理器610包括一个或多个(图中仅示出一个),其可以是一种集成电路芯片,具有信号的处理能力。上述的处理器910可以是通用处理器,包括中央处理器(CentralProcessing Unit,简称CPU)、微控制单元(Micro Controller Unit,简称MCU)、网络处理器(Network Processor,简称NP)或者其他常规处理器;还可以是专用处理器,包括神经网络处理器(Neural-network Processing Unit,简称NPU)、图形处理器(Graphics ProcessingUnit,简称GPU)、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuits,简称ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。并且,在处理器610为多个时,其中的一部分可以是通用处理器,另一部分可以是专用处理器。

存储器620包括一个或多个(图中仅示出一个),其可以是,但不限于,随机存取存储器(Random Access Memory,简称RAM),只读存储器(Read Only Memory,简称ROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),电可擦除可编程只读存储器(Electric Erasable Programmable Read-Only Memory,简称EEPROM)等。处理器610以及其他可能的组件可对存储器620进行访问,读和/或写其中的数据。

特别地,在存储器620中可以存储一个或多个计算机程序指令,处理器610可以读取并运行这些计算机程序指令,以实现本申请实施例提供的网络代理方法。

通信单元630包括一个或多个(图中仅示出一个),可以用于和其他设备(例如,客户端设备、服务器、路由器)进行直接或间接地通信,以便进行数据的交互。通信单元630可以包括进行有线和/或无线通信的器件。

可以理解的,图5所示的结构仅为示意,网络设备600还可以包括比图5中所示更多或者更少的组件,或者具有与图5所示不同的结构。图5中所示的各组件可以采用硬件、软件或其组合实现。网络设备600可能是实体设备,例如交换机、路由器、服务器、PC机等,也可能是虚拟设备,例如虚拟机、虚拟化容器等。并且,网络设备600也不限于单台设备,也可以是多台设备的组合或者大量设备构成的集群。

本申请实施例还提供一种计算机程序产品,该产品包括计算机程序指令,这些计算机程序指令被一电子设备(例如,网络设备600)的处理器读取并运行时,执行本申请实施例提供的网络代理方法。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令,这些计算机程序指令被一电子设备(例如,网络设备600)的处理器读取并运行时,执行本申请实施例提供的网络代理方法。例如,计算机可读存储介质可以实现为图5中网络设备600中的存储器620。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、方案组合、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 反向代理方法、装置及存储介质、分布式系统
  • 网络设备系统、网络设备系统的实现方法以及计算机可读存储介质
  • 一种带宽调整方法、装置、存储介质和网络设备
  • 解调参考信号传输方法、网络设备及计算机可读存储介质
  • 频点切换处理方法、网络设备、终端和计算机存储介质
  • 网络设备配置恢复方法、装置、网络设备及存储介质
  • 网络设备功耗优化方法、装置、网络设备和存储介质
技术分类

06120116499298