Linux 上的基础网络设备详解 网络虚拟化是 Clou d 中的一个重要部分。作为基础知识,本文详细讲述 Linu x 抽象出来的各种网络设备的原理、用法、数据流向。使读者知道如何使用 Linu x 的基础网络设备进行配置以达到特定的目的,分析出 Linu x 可能的网络故障原因。 Linux 抽象网络设备简介 和磁盘设备类似,Linu x 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linu x 为我们抽象出来的设备,既通用的 Linu x 网络设备来完成。一个常见的情况是,系统里装有一个硬件网卡,Linu x 会在系统里为其生成一个网络设备实例,如 eth0, 用户需要对 eth0 发出命令以配置或使用它了。更多的硬件会带来更多的设备实例,虚拟的硬件也会带来更多的设备实例。随着网络技术,虚拟化技术的发展,更多的高级网络设备被 加入了到了 Linu x 中,使得情况变得更加复杂。在以下章节中,将一一分析在虚拟化技术中经常使用的几种 Linu x 网络设备抽象类型:Bridge、 802.1.q VLAN dev ice、VETH、 TAP,详细解释如何用它们配合 Linu x 中的 Rou te table、 IP table 简单的创建出本地虚拟网络。 相关网络设备工作原理 Bridge Bridge(桥)是 Linu x 上用来做 TCP/IP 二层协议交换的设备,与现实世界中的交换机功能相似。Bridge 设备实例可以和 Linu x 上其他网络设备实例连接,既 attach 一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge 会根据报文中的 MAC 信息进行广播、转发、丢弃处理。 图 1. Bridge 设备工作过程 如图所示,Bridge 的功能主要在内核里实现。当一个从设备被 attach 到 Bridge 上时,相当于现实世界里交换机的端口被插入了一根连有终端的网线。这时在内核程序里,netdev _rx _handler_register()被调用, 一个用于接受数据的回调函数被注册。以后每当这个从设备收到数据时都会调用这个函数可以把数据转发到 Bridge 上。当 Bridge 接收到此数据时,br_handle_frame()被调用,进行一个和现实世界中的交换机类似的处理过程:判断包的类别(广播/单点),查找内部 MAC 端口映射表,定位目标端口号,将数据转发到目标端口或丢弃,自动更新内部 MAC 端口映射表以自我学习。 Bridge 和现实世界中的二层交换机有一个区别,图中左侧画出了这种情况:数据被直接发到 Bridge 上...