预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于以太网交换机的Linux协议栈虚拟化技术基于以太网交换机的Linux协议栈虚拟化技术摘要:网络协议栈虚拟化的目标是在一台网络设备上虚拟出多个协议栈以实现网络设备的一虚多功能。由于Linux操作系统的网络协议栈本身是不支持这种网络协议栈虚拟化技术的,因此本文通过对Linux操作系统3.11.10版本IPV4网络协议栈进行改造以实现Linux网络协议栈的虚拟化,并在设备平台上验证了经过网络协议栈虚拟化改造后的以太网交换机对业务流的隔离功能。关键词:协议栈;虚拟化;网络设备1引言随着网络规模的不断扩大,业务种类的不断丰富,网络对业务的隔离以及安全性、可靠性等属性提出了越来越高的要求[1]。此外,随着硬件能力的迅速提升,多框、集群、分布式路由交换系统的成熟,单台物理网络设备的业务处理能力已经达到了一个新的高度[2]。为了将单台物理设备的强大业务处理能力充分利用,弹性的适应当前的业务需求和未来的发展,网络设备的一虚多(即将一台物理设备虚拟成多个逻辑设备)成为了网络与通信界追求的目标[3]。Linux操作系统因其具有的开源、安全和稳定等优点,受到网络设备制造商的青睐,被广泛应用到网络设备的嵌入式开发中。目前,国内外对Linux操作系统虚拟化的研究都着力于操作系统级的全局性资源隔离虚拟化,而缺少对网络协议栈虚拟化的深入研究。对于小规模以太网而言,全局性的资源隔离会对网络设备的进程资源造成不必要的浪费,增加了网络设备的负荷,影响网络数据包处理速率。因此,本文在以太网交换机设备上研究了Linux嵌入式操作系统中虚拟协议栈技术,以实现业务流的隔离,提高单个以太网交换机设备的资源利用率[4]。2Linux网络协议栈的层次结构网络协议栈是指TCP/IP协议栈,实现了一个网络中数据传输的过程:包括上层协议到底层协议,和由底层协议到上层协议。Linux网络协议栈的层次架构模型如图1所示,最上面一层为用户空间中的应用层,中间部分为内核空间中的网络协议栈部分,底层为物理设备[5]。在网络协议栈中用户空间和内核空间之间的数据通过套接字缓存(socketbuffer)来传递,相应的数据结构为sk_buffer。图1Linux网络协议栈层次架构Linux网络协议栈的最上层是系统调用接口,为用户空间中的应用程序提供一种访问内核网络协议栈的接口。通过网络协议栈进行通信都需要对套接字进行操作,网络协议栈提供了两种调用接口给用户进程。一种是在sys_socketcall中会根据网络系统调用号调用具体的功能,另一种是通过普通文件操作来访问网络协议栈,将套接口的输入、输出操作当成典型的文件读写操作来进行。套接字是一个与协议无关的接口层,它提供了一组通用接口来支持各种协议,它对用户层的应用程序屏蔽了与协议相关的实现细节,将应用程序发送的与协议无关的请求映射到与协议相关的实现。传输层负责数据的传输和数据的控制,提供端到端数据交换机制,传输层协议包括面向连接的TCP协议和面向无连接的UDP协议。网络层负责接收、发送或转发数据包,网络层的协议包括IP协议、ARP协议、RARP协议、ICMP协议和IGMP协议等。邻居子系统为三层协议地址与二层协议地址提供了的映射关系,此外还缓存了二层首部,以加速数据包的发送。在发送数据包的时候,先进行路由查找,如果找到对应的路由,再查看邻居表中是否存在相应的映射关系,如果不存在则新建对应的邻居项;然后再判断邻居项是否为可用状态,如果不可用则把数据报存至发送缓存队列后发送请求;在接收到请求应答后,将对应的邻居项置为可用,并将其缓存队列中的数据包发送出去;如果在指定时间内为收到响应包,则将对应邻居项置为无效状态。对于以太网交换机而言,邻居子系统提供了三层IP地址和二层MAC地址的映射,邻居表就是ARP表。网络协议栈底部是一个与硬件无关的网络设备接口层,它将网络层的不同协议与各种网络设备连接在一起。设备无关接口层提供了一组通用函数供底层网络设备驱动程序和上层协议栈调用。当输出数据时协议栈不必关心底层的网络设备,而当输入数据时网络设备驱动同样也不必关心上层的协议栈。协议栈向设备发送数据包时都需调用dev_queue_xmit函数。该函数对sk_buffer进行排队,最终由底层设备驱动程序进行传输。而接收报文通常是调用netif_rx函数实现的。当底层设备驱动程序收到一个报文时,就会通过调用netif_rx函数将报文的sk_buffer上传至网络层。以太网交换机设备上网络接口卡(NIC)的相关信息是由net_device结构来描述的,net_device包括了硬件信息成员变量、接口信息成员变量、设备操作接口变量和一些辅助成员变量。网络接口卡的IPv4地址等相关配置信息存放在in_device结构中,net_device中有一个指针指向in_device。每个