Linux Bridge和Tap关系详解

天翼云开发者社区
• 阅读 208

本文分享自天翼云开发者社区《Linux Bridge和Tap关系详解》,作者:x****n

Linux Bridge介绍 Bridge(桥)是Linux上用来做TCP/IP二层协议交换的设备,与现实世界中的交换机功能相似。Bridge设备实例可以和Linux上其他网络设备实例连接,既attach一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge会根据报文中的MAC信息进行广播、转发、丢弃处理。

Linux Bridge和Tap关系详解

如图所示,Bridge的功能主要在内核里实现。当一个从设备被attach到Bridge上时,相当于现实世界里交换机的端口被插入了一根连有终端的网线。这时在内核程序里,netdev_rx_handler_register()被调用,一个用于接受数据的回调函数被注册。以后每当这个从设备收到数据时都会调用这个函数可以把数据转发到Bridge上。当Bridge接收到此数据时,br_handle_frame()被调用,进行一个和现实世界中的交换机类似的处理过程:判断包的类别(广播/单点),查找内部MAC端口映射表,定位目标端口号,将数据转发到目标端口或丢弃,自动更新内部MAC端口映射表以自我学习。

Linux内核支持网口的桥接(目前只支持以太网接口)。但是与单纯的交换机不同,交换机只是一个二层设备,对于接收到的报文,要么转发、要么丢弃。小型的交换机里面只需要一块交换芯片即可,并不需要CPU。而运行着Linux内核的机器本身就是一台主机,有可能就是网络报文的目的地。其收到的报文除了转 发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己消化。

网桥的功能 概括来说,网桥实现最重要的两点: 1.MAC学习:学习MAC地址,起初,网桥是没有任何地址与端口的对应关系的,它发送数据,还是得想HUB一样,但是每发送一个数据,它都会关心数据包的来源MAC是从自己的哪个端口来的,由于学习,建立地址-端口的对照表(CAM表)。 2.报文转发:每发送一个数据包,网桥都会提取其目的MAC地址,从自己的地址-端口对照表(CAM表)中查找由哪个端口把数据包发送出去。

网桥配置ip Bridge可以设置IP地址,当一个bridge0拥有IP后,Linux便可以通过路由表或者IP表规则在三层定位bridge0,此时相当于Linux拥有了另外一个隐藏的虚拟网卡和Bridge的隐藏端口相连。当一个设备被attach到Bridge上时,那个设备的IP会变的无效,Linux不再使用那个IP在三层接受数据。 对于一个被attach到Bridge上的设备来说,只有它收到数据时,此包数据才会被转发到Bridge上,进而完成查表广播等后续操作。当请求是发送类型时,数据是不会被转发到Bridge上的,它会寻找下一个发送出口。

网桥处理包原则 网桥需要维护一个MAC地址-端口映射表(CAM),端口是指网桥自身提供的端口,而MAC地址是指与端口相连的另一端的MAC地址。

网桥处理包遵循以下几条原则: 1.在一个接口上接收的包不会再在那个接口上发送这个数据包; 2.每个接收到的数据包都要学习其源地址; 3.如果数据包是多播或广播包,则要在同一个网段中除了接收端口外的其他所有端口发送这个数据包,如果上层协议栈对多播包感兴趣,则需要把数据包提交给上层协议栈; 4.如果数据包的目的MAC地址不能再CAM表中找到,则要在同一个网段中除了接收端口外的其他所有端口发送这个数据包; 5.如果能够在CAM表中查询到目的MAC地址,则在特定的端口上发送这个数据包,如果发送端口和接收端口是同一端口则不发送。

Tap设备介绍 TAP设备是一种让用户态程序向内核协议栈注入数据的设备,工作在二层。做为虚拟网卡驱动,Tap驱动程序的数据接收和发送并不直接和真实网卡打交道,而是通过用户态来转交。Tap驱动是利用设备文件实现用户态和核心态的数据交互。 从结构上来说,Tap驱动并不单纯是实现网卡驱动,同时它还实现了字符设备驱动部分。以字符设备的方式连接用户态和核心态。下面是示意图:

Linux Bridge和Tap关系详解

Tap驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分。利用网卡驱动部分接收来自TCP/IP协议栈的网络分包并发送或者反过来将接收到的网络分包传给协议栈处理,而字符驱动部分则将网络分包在内核与用户态之间传送,模拟物理链路的数据接收和发送。Tap驱动很好的实现了两种驱动的结合。

Tap驱动处理流程

Linux Bridge和Tap关系详解

如图所示,当一个TAP设备被创建时,在Linux设备文件目录下将会生成一个对应char设备,用户程序可以像打开普通文件一样打开这个文件进行读写;Linux protocol statck是Linux内核的tcp/ip协议栈。当执行write()操作时,数据进入TAP设备,此时对于Linux网络层来说,相当于TAP设备收到了一包数据,请求内核接受它,如同普通的物理网卡从外界收到一包数据一样,不同的是其实数据来自Linux上的一个用户程序。Linux收到此数据后将根据网络配置进行后续处理,从而完成了用户程序向Linux内核网络层注入数据的功能。当用户程序执行read()请求时,相当于向内核查询TAP设备上是否有需要被发送出去的数据,有的话取出到用户程序里,完成TAP设备的发送数据功能。针对TAP设备的一个形象的比喻是:使用TAP设备的应用程序相当于另外一台计算机,TAP设备是本机的一个网卡,他们之间相互连接。应用程序通过read()/write()操作,和本机网络核心进行通讯。

点赞
收藏
评论区
推荐文章
特处士 特处士
1年前
交换机功能及分类介绍
交换机(Switch)表示“开关”。它是一种用于转发电(光)信号的网络设备。它可以为连接到交换机(https://www.ruijie.com.cn/cp/jh/)的任意两个网络节点提供专用的电信号路径。最常见的交换机是以太网交换机。其他常见的有
特处士 特处士
1年前
工业交换机有哪些功能?
工业交换机(工业交换机),也称工业以太网交换机,是工作在OSI第二层(数据链路层,见广域网的定义)的网络设备,基于MAC(网卡的媒体访问控制地址)进行识别,能够完成封装和转发数据包的功能。那么,工业交换机(https://www.ruijie.co
交换机的概念以及工作原理
交换机的概念以及工作原理什么是交换机?Switch意为“交换机”,是一种用于转发电(光)信号的网络设备。它可以为访问交换机的任意两个网络节点提供专用的电信号路径。非常常见的交换机(https://www.ruijie.com.cn/cp/jh/
工业交换机具体功能作用是什么
工业交换机也称工业以太网交换机,是工作在OSI第二层(数据链路层,见WAN的定义)的网络设备,基于MAC(网卡的媒体访问控制地址)进行识别,能够完成封装和转发数据包的功能。那么,工业交换机有哪些功能作用呢?接下来,让我们一起去了解更多吧!工业交换机
陆石六 陆石六
1年前
【优化工具】让你的Mac SSH连接更快——试试Termius
TermiusforMac是一款SSH和Telnet客户端应用程序,其帮助用户更加轻松地管理跨平台设备,例如Windows、Linux、macOS、iOS和Android设备等。该软件的主要特点是与其他SSH客户端相比具有更高的安全性和强大的功能,帮助用户在SSH和Telnet协议中更加快速、可靠地建立连接。
Stella981 Stella981
3年前
Linux Bridge 详解
LinuxBridge详解LinuxBridge(网桥)是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换,MAC地址学习等。因此我们可以把tun/tap,vethpair等设备绑定到网桥上,就像是把设备连接到物理交换机上一样。此外它和vethpair、tun/tap一样,也是一种虚拟网络设备,
Stella981 Stella981
3年前
Linux之lldptool命令
1\.描述当我们想在操作系统里面查看网口和交换机连接的状态信息,我们可以使用lldptool这个工具。2.LLDP协议LLDP是一个数据链路层发现协议,LLDP协议使得接入网络的一台设备可以将其主要的能力,管理地址,设备标识,接口标识等信息发送给接入同一个局域网络的其它设备。lldptool工具采用的是LLDP协
Stella981 Stella981
3年前
Linux 创建Bridge
安装Bridge工具软件包Linux可以工作在网桥模式,必须安装网桥工具bridgeutils,运行命令:  yuminstallbridgeutils或aptgetinstallbridgeutilsLinuxKVMBridge逻辑结构图!(https://oscimg.oschina.net/o
Wesley13 Wesley13
3年前
vlan,trunk,DHCP,以太网通道
Vlan的划分1.1问题VLAN(虚拟局域网)是对连接到的第二层交换机端口的网络用户的逻辑分段,不受网络用户的物理位置限制而根据用户需求进行网络分段。一个VLAN可以在一个交换机或者跨交换机实现。VLAN可以根据网络用户的位置、作用、部门或者根据网络用户所使用的应用程序和协议来进行分组。基于交换机的虚拟局域网能够为局域网
Stella981 Stella981
3年前
FreeBSD网桥if_bridge实现性能提高5倍
FreeBSD在企业网络基础架构中的性能很好,但是网络桥接设备内核代码if\_bridge处会遇到性能瓶颈(if\_bridge可以有效地将FreeBSD机器变成交换机)。!(https://oscimg.oschina.net/oscnet/c8e604faa221976ffa7aa6a8095d38b448f.png)开发人员研究
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
693
粉丝
15
获赞
40