Linux 中的网桥技术

原创 2016年02月24日 10:18:49

Linux Bridge

最经典的网桥实现,基本上参考一个传统硬件交换机的功能来实现,自学习转发表,支持 STP。

物理网卡可以绑定到 LB 上,通过混杂模式将所有包转发到 LB 上,LB 按照传统二层交换机功能进行转发。

LB 也支持 Vlan 隔离,以及常见封装协议。

MacVLan

首先,不要被名字误导,其实跟 vlan 没啥关系。

在一个物理网卡 ethX 上可虚拟出多个 MacVLan 设备,系统看到的是类似 xxx@ethX 命名格式的虚拟网卡。相对网桥来说更加轻量级。

每个 MacVLan 设备拥有不同的 mac 地址和 IP 地址,只有匹配到某个 MacVLan 设备的地址的流量才会发给该设备,模拟 vlan 隔离效果。

创建方式(忽略 mac 地址则会自动随机创建):

#  ip li add link eth0 macvlan0 address 9a:cb:eb:26:a7:8d type macvlan mode bridge

一共支持四种模式:VEPA、Private、Bridge 和 Passthrough。前三种都是参考 EVB 标准。

VEPA (Virtual Ethernet Port Aggregator)

默认模式,需要外部交换机支持 VEPA/802.1Qbg。多个虚拟机指定同一个接口(例如 eth0),通过该接口连接到外部的物理网络。本地之间的访问需要先绕到外部的物理(也可以配置为软交换机)交换机,然后由外部交换机进行转发,再绕回来。是 EVB标准的一种。

注:VEPA/802.1Qbg,即需要外部交换机支持 Reflective Relay,或者发夹(Hairpin)模式,即从一个接口发上来的流量还能扔回去。

Private

类似 VEPA,但本地几个 MacVLan 接口之间不能相互访问,即使外部交换机支持 Reflective Relay 也不成。除非虚机处在不同的子网,经过外面网关的转发再绕回来。要求源和目的都配置为 private 模式。这种模式是不是很眼熟?多租户的公有云里面应该用处挺大。

Bridge

通过一个虚拟的网桥来连通本地的多个 MacVLan 接口,本地通信不需要发送到外部交换机。这种情况下,虚拟网桥知道每个接口的 Mac 地址,不需要实现学习和 STP 功能,比传统网桥简单且高效。

当然,要求源和目的虚机都配置为 bridge 模式。

Passthrough

独占物理网卡,并配置为 promiscuous 模式。一般一个网卡上只允许绑定一个 MacVlan 设备。本地无法直接交换,得靠外面交换。

MacvTap

如果把 MacVLan 设备再关联上一个 tap 设备,从物理网卡到达的网包不交给内核网络栈处理,而直接发给 tap 文件,就叫做 MacVTap,方便用户态应用直接处理网络流量。

OpenvSwitch

除了拥有 LB 的传统二层交换机功能,OpenvSwitch 最强大的是对 SDN 的支持:独立的 ovsdb,复杂的流表控制,支持外部控制器,基于 Linux TC 实现的 QoS 等。

SR-IOV

硬件虚拟化,网卡支持 SR-IOV,则一个物理网卡 PF,可以直接虚拟为多个 VF。网卡内自带嵌入式交换机,功能简单,但性能高。通过 PCI-passthrough 可以直接把 VF 挂载到虚拟机中作为网卡,也可以通过 macvtap 的 passthrough 模式再加一层桥接。

转载请注明:http://blog.csdn.net/yeasy/article/details/50728243

【Linux】Linux中的网桥设置

常用网桥相关命令: brctl show 列出网桥信息 [root@node2 ~]# brctl show bridge name bridge id  STP enabled int...
  • fu_zk
  • fu_zk
  • 2014年12月12日 14:30
  • 1333

linux下brctl配置网桥

原文:http://zhumeng8337797.blog.163.com/blog/static/1007689142011643834429/ 先装好网卡,连上网线,这是废话,不用说了。 ...
  • X_Nazgul
  • X_Nazgul
  • 2014年03月01日 20:56
  • 11856

linux下的网桥介绍

网桥用来连接不同的网段。使不同的网段能够相互通信,看起来很像三层的路由。它能够有多个port,从而能够将数据帧从一个port复制到另一个port。  这里要注意一点,linux下的网桥只能用于以...
  • wangpengqi
  • wangpengqi
  • 2013年08月18日 10:45
  • 690

linux 网桥代码分析 三 网桥及网桥端口的添加与删除

1、网桥的添加及相关的函数     br_add_bridge,其函数实现以下功能: 1、调用new_bridge_dev创建并初始化一个网桥设备与网桥 2、调用register_netdevice注...
  • lickylin
  • lickylin
  • 2014年03月01日 23:32
  • 3486

Linux 网桥配置命令:brctl

http://fp-moon.iteye.com/blog/1468650 Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联: 思路其实很简单:就是将虚拟出一个bridge...
  • hshl1214
  • hshl1214
  • 2016年10月26日 17:06
  • 4695

Linux内核网桥的实现分析

Linux内核网桥的实现分析 Linux 内核分别在2.2 和 2.4内核中实现了网桥。但是2.2 内核和 2.4内核的实现有很大的区别,2.4中的实现几乎是全部重写了所有的实现代码。本文以2....
  • hzhsan
  • hzhsan
  • 2015年03月06日 13:18
  • 1627

linux 用brctl建立一个网桥

对网桥的概念文章看:http://blog.csdn.net/xiaoshengqdlg/article/details/22162365 有五台主机。其中一台主机装有linux ,安装...
  • xiaoshengqdlg
  • xiaoshengqdlg
  • 2014年03月26日 14:49
  • 1096

linux bridge网桥的工作原理

Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备...
  • u014027051
  • u014027051
  • 2016年12月28日 15:21
  • 5813

linux协议栈之网桥实现之一

网卡驱动的最后一个函数是netif_receive_skb.就从它说起。 为了简单起见,去掉了里面预编译代码 int netif_receive_skb(struct sk_buff *skb) ...
  • chengfangang
  • chengfangang
  • 2013年03月07日 10:36
  • 1154

linux虚拟网桥的构建和WAN的连接

系统环境编译环境:ubuntu 14.04 x86_64 运行平台:IMX6Q平台 说明:系统中所有#开头的字符行表示该行为linux命令行。工具链编译dhcp由于需要动态IP分配,因此在这里编...
  • pengrui18
  • pengrui18
  • 2016年05月24日 19:22
  • 1676
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux 中的网桥技术
举报原因:
原因补充:

(最多只允许输入30个字)