APP下载

基于Linux虚拟网卡测试平台的系统设计

2016-10-22张洪吴钦章杜春蕾

电子设计工程 2016年17期
关键词:网络设备网卡内核

张洪,吴钦章,杜春蕾

(中科院重庆绿色智能技术研究院重庆404100)

基于Linux虚拟网卡测试平台的系统设计

张洪,吴钦章,杜春蕾

(中科院重庆绿色智能技术研究院重庆404100)

为了实现网络通信算法能够在单主机平台获得验证分析,提出基于Linux虚拟网卡的测试系统设计方案。并完成了系统软件设计。分析了Linux网络驱动框架原理,完成Linux虚拟网卡的创建与注册,通过搭建虚拟路由建立多张虚拟网卡的通信,使用Netfilter框架对虚拟网卡接收和发送的数据进行流量分析。具备了对数据可靠性的检测和实时流量监测。通过TCP通信算法在虚拟网卡中的验证,能够有效的完成对算法的测试,达到设计要求。

虚拟网卡;测试;路由;监测

随着嵌入式设备对网络需求的增长,物联网技术通过传感器获取大量数据,这些数据通过嵌入式网关进行处理,这就涉及到各种网络通信算法。但是通常嵌入式软硬件开发时间是不均衡的。如果网络通信算法已经完成,而硬件仍然处于调试状态,导致网络通信算法不能够及时验证,则开发效率降低。虚拟网卡测试平台提供了不需要具体硬件参与,就能完成多网卡设备的通信算法验证。降低了软件开发周期。并且通过分析虚拟网卡接收和发送的数据包,进而对算法的准确性和性能进行测试。

1Linux网络驱动框架分析

Linux应用程序通过调用套接字socket建立与内核通信的接口。当数据通过socket交付给内核时,内核中的网络子系统将数据传送到网卡设备中。Linux网络设备驱动框架分为4层。结构图如图一所示。分别是网络协议接口层,网络设备接口层,设备驱动功能层,网络设备与媒介层。

网络协议接口层的主要作用在数据链路层通过调用dev_ queue_xmit()函数接收网络层的数据,通过调用netif_rx()将数据发送到网络层,实现对上层网络的抽象收发数据。要传输的数据是以sk_buff结构体的形式存在的。Linux内核驱动模块中通过双链表的形式将独立的sk_buff连接在一起。sk_buff提供head,tail,end,data 4个指针可以快速地定位协议头位置;sk_buff结构体中保留了关键的报文信息(如上层所使用的协议,网络设备),以便协议层灵活调用应用网络设备接口层[1]。

网络设备接口层主要通过net_device结构体来抽象的具体的网络接口卡,来实现各种类型的硬件在软件层次上的统一。net_device结构体在内核中指代一种网络设备,网络驱动程序仅仅需要填充net_device结构体的具体成员,并注册将net_device注册进内核,就能实现具体网络设备与内核的挂接。net_device结构体存储网络接口重要参数,是网络驱动程序的核心。

设备驱动功能层是具体对网络设备操作函数的具体实现,比如在用户空间执行ifconifg eth0 up命令时,设备操作函数open将执行,对发送队列进行初始化,并注册中断。

网络设备与媒介层是直接对应实际的硬件设备,接收和发送数据的物理实体,对网卡设备的物理配置一般定义一组宏和一组访问设备内部寄存器的函数,具体的宏和函数与特定的硬件紧密相关。

图1Linux网络驱动框架图

2 虚拟网卡原理和实现

2.1虚拟网卡初始化

为了实现多张网卡并行发送和接收数据。测试系统将在Linux系统中搭建要多张虚拟网卡。通过alloc_netdev函数分配网络设备。分配网络设备后,Linux网络驱动程序将自动调用该设备的初始化函数,初始化设备的私有结构,保存一些设备一些私有数据设置,并对设备的许多成员函数指针赋值。如果使用NAPI中断方式接收数据,设置接收缓冲池[2]。最后通过register_netdev将网络设备注册到Linux内核中。register_netdev首先检查设备名是否已确定,若没确定则会以eth%d形式存在。此时内核会调用函数dev_alloc_name来完成该名称,此函数会把%d换成设备类型中头一个未分派的数字。

2.2虚拟网卡数据发送

网络设备驱动程序通过分析网络层协议传递的sk_buff结构体,获得所接收的有效数据和实际长度,将有效的数据存入临时缓存区。如果是以太网数据,则需要判断是否小于最小量。如果小于发送最小要求数量,不足的地方则补0。最后将数据通过虚拟路由函数进行发送。

2.3虚拟网卡数据接收

1)常规方式,网络设备接收数据的主要方法是由中断引发设备的中断处理函数,中断处理函数判断中断类型,如果为接收中断,则读取接收到的数据,分配sk_buff数据结构和数据缓冲区,将接收到的数据拷入数据缓冲区,并调用netif_rx()将sk_buff传递给上层协议[3]。

2)NAPI中断方式,与常规接收中断接收方式不同,NAPI以轮询的方式接收数据包,当发生一次中断后,在中断处理函数中就关闭接收中断,直到通过轮询方式完成接收队列中的数据包之后,打开中断使能。NAPI这种方式在高负载的情况可以发挥更好的性能,避免每接收一个数据包都要发生中断。

3 虚拟路由原理和实现

路由器作为一种网络设备,配备了多个网络接口卡,能够利用它的网络配置正确转发入口流量,决定进入的封包应当是转发所需要的信息还是送给本地主机,以及在转发时正确转发封包所需要的信息,都存储在被称为转发信息库的数据库中,它通常被简称为路由表[4]。

通过虚拟网卡的搭建,在Linux系统中虚拟出多张虚拟网卡。这几张网卡都具有接收和发送数据包的能力。需要通过虚拟路由将这几张网卡建立连接。通过在数据包函数中的IP地址转换和MAC地址转换。实现虚拟路由表的功能。虚拟路由的功能如图2所示。

图2 虚拟路由实现原理图

3.1IP地址的转换

虚拟网卡驱动模块的关键部分对于IP地址的转换,Linux终端虚拟多个接口,对这些接口进行IP地址分配。数据包在这些接口中传递不是简单的环回,而是通过虚拟路由,将发送的数据包根据IP地址发送到指定的接口中。使得看起来是系统中有多个网卡接口卡,但实际上是计算机内部自行处理数据包。如何仅仅是通过IP地址来实现接口间数据传输,Linux内核会通过环回通道而不是虚拟网卡。对发送端的IP地址进行转换,是虚拟路由的主要功能。

3.2MAC地址转换

在发送网络数据包的时候,需要进行以太网头部的封装,因为虚拟网卡不存在一个真实的MAC地址。无法使用ARP协议获得IP地址和MAC地址的映射[5]。虚拟路由要实现这一功能,就必须自己建立一种映射关系,实现远端虚拟主机的IP地址和MAC地址的联系。接着为虚拟网卡设置MAC地址,远端虚拟主机的MAC地址和本机的虚拟网卡MAC存在对应关系。在封装以太网头部时对MAC地址进行转换。

两张虚拟网卡的MAC地址转换关键代码:

4 虚拟网卡流量控制

实现虚拟网卡间的流量控制就要利用Linux下的Netfilter框架[6],通过提供钩子函数,实时高效地采集需要检测的原始数据包,并通过数据包分析模块进行处理。利用基于Linux内核的Netfilter框架完成流量采集工作。主要对钩子函数从虚拟网卡中接收到原始数据包进行分析,判断数据包的类型并分析原始数据包的特征参数。并在采集中设置定时模块,每隔一段时间调用一次流量采集模块,从流量采集模块中获得相应流量指标信息,如单位时间虚拟网卡接口内接收和发送的总字节数。通过Netfilter框架对虚拟网卡的流量进行检测和控制,判断网络通信代码的可靠性。

5 结论

该虚拟网卡测试系统通过充分的分析和实验验证,采用Linux内核编程思想,实现了虚拟网卡之间的通信,验证了网络系统的可靠性,为嵌入式平台提供网络测试工具。该系统已经在66AK2H14评估版中通过测试。实验应用表明,该虚拟网卡测试平台具有不丢包、稳定可靠,可通过需求进行虚拟路由测试,多点网络通信测试。达到设计要求。

[1]Alessandro Rubini,Jonathan corbet[J].Linux Device Drivers,2006:22-31.

[2]常锋,孟传良.基于ARM-Linux的网络驱动程序设计[J].通信技术,2012,45(6):32-35.

[3]鲍娟基于嵌入式Linux的网络流量监测系统[D].武汉:武汉科技大学,2009.

[4]徐鹏,苏媛.基于Linux嵌入式系统以太网接口的设计与实现[J].西安邮电学院学报,2008,13(5):111-115.

[5]李方军,金炜东.嵌入式Linux网络驱动程序的研究与实现[J].现代电子技术,2005(16)90-112.

[6]KlausWehrle,FrankPahlke,etc.Thelinuxnetworking Architecture:design and implementation of network Protocols in the Linux Kernel[C].2004.

System design of testing platform based on Linux virtual network

ZHANG Hong,WU Qin-zhang,DU Chun-lei
(Chongqing Institute of Green and Intelligent Technology,Chinese Academy of Sciences,Chongqing 404100,China)

In order to achieve network communication algorithm in single-host platform to obtain verification of the proposed test system based on Linux virtual network design.And complete system software design.Analysis of the Linux network driver framework in principle,complete Linux virtual NIC is created and registered,by building a virtual routing to construct multiple virtual network communication,using the Netfilter framework for the virtual network adapter to receive and send data traffic analysis.With data reliability detection and real-time traffic monitoring.Communicate via TCP algorithm and validation in virtual network adapter,can effectively complete algorithm testing and achieve the design requirements.

virtual network adapter;test;router;monitor

TP393

A

1674-6236(2016)17-0096-02

2015-07-02稿件编号:201507009

张洪(1980—),男,四川富顺人,博士研究生。研究方向:嵌入式操作系统。

猜你喜欢

网络设备网卡内核
多内核操作系统综述①
网络设备的安装与调试课程思政整体设计
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
一种基于C# 的网络设备自动化登录工具的研制
部署Linux虚拟机出现的网络故障
Server 2016网卡组合模式
Linux内核mmap保护机制研究
防范加固SNMP团体名漏洞
挑战Killer网卡Realtek网游专用Dragon网卡