首页 > 编程知识 正文

linux虚拟网桥原理(linux)

时间:2023-05-06 19:08:43 阅读:96618 作者:1680

概述

在讲Linux桥之前,先介绍几个概念,有助于我们对桥的功能和实现有更深的理解。

交换网络的逻辑图;

1.冲突域

冲突域由可以看到相同冲突或参与冲突的所有设备组成。以太网采用C S M A/C D(带冲突检测的载波侦听多路访问)技术,保证冲突域内只有一个节点可以同时传输数据。或交换机,形成了冲突域的边界。默认情况下,网桥中的每个端口实际上都是冲突域的端点。

2.广播域

广播域由能够看到广播数据包的所有设备组成。形成广播域边界的路由器。网桥可以扩展到的最大范围是广播域。默认情况下,网桥或交换机的所有端口都在同一个广播域中。VLAN技术可以将交换机或网桥的不同端口划分为不同的广播域。通常,广播域代表一个逻辑网段。

3.桥上的凸轮工作台

像交换机一样,网桥保留许多(媒体访问控制、端口)项,以便转发数据包。所有这些项目组成了一个名为CAM表的表。每个项目都有超时机制。如果在一定时间内没有收到以该媒体访问控制地址为源媒体访问控制地址的数据包,该项目将被删除。

00-1010网桥工作在数据链路层,其功能是减少冲突域。它根据媒体访问控制帧的目的地址转发和过滤接收到的帧。当网桥收到帧时,它首先检查帧的目的地媒体访问控制地址,而不是将帧转发到所有接口。然后决定将帧转发到哪个接口,或者丢弃它。

网桥依靠内部转发表转发媒体访问控制帧。它可以连接两个总线型网络,不仅可以减缓冲突域,还可以在主机之间进行通信(或者通过广播发送数据)。与集线器相比,网桥有点智能,它在内部维护一个转发表,也称为转发数据库或路由目录。该内部表可以自动学习或手动生成。内部表显示哪些主机连接到端口1,哪些主机连接到端口2。如下图:

这样,当a主机向b主机发送信息时,就是广播,所以b主机会收到信息。网桥的1号接口也会收到这个广播信息,然后会检查内部表,会发现1号接口中存在目标地址,所以不会转发到另一个总线网络,从而减少冲突域。如果A发送到C桥,发现C在2号门,就会广播信息。

虽然桥梁的出现带来了一些好处,如减少碰撞域、扩大物理范围、提高可靠性等。但是该桥也有一些缺点,比如:一对接收到的帧在转发前必须存储和查找转发表,转发前必须实施CSMA/CD算法,避免碰撞,增加了时延。第二,用户数量不要太多,否则会因为过度广播而造成网络堵塞,这也叫广播风暴。

网桥工作机制

Linux内核已经在2.2中实现了网桥的功能,但是需要安装bridge-utils工具来配置网桥。

$ yum安装桥接实用程序

常见的操作命令有:

#创建桥br0

$ brctl addbr br0

#观桥;

$ brctl显示

网桥名称网桥id STP启用接口

br0 8000.000000000000否

#向网桥添加网卡可以理解为向网桥添加接口;

$ brctl addif br0 eth0

#检查媒体访问控制地址;

$ brctl showmacs br0

#从网桥上卸下网卡;

$ brctl delif br0 eth0

#开启或关闭网桥STP生成树协议;

$ brctl stp br0 on

$ brctl stp br0关闭

00-1010比如下面有这样一个场景:

有五个主机。其中一台主机配备了Linux、一个桥接模块和四个物理网卡,它们连接到同一网段中的其他主机。我们希望它成为其他四台主机的网桥(IP分别为192.168.1.2、192.168.1.3、192.168.1.4、19

2.168.1.5) 之间转发数据包。同时,为了方便管理,希望网桥能够有一个IP(192.168.1.1),那样管理员就可以在192.168.1.0/24网段内的主机上telnet到网桥,对其进行配置,实现远程管理。

网桥在同一个逻辑网段转发数据包。针对上面的拓扑,这个逻辑网段就是192.168.1.0/24网段。我们为这个逻辑网段一个名称,br_192。首先需要配置这样一个逻辑网段。

$ brctl addbr br_192

实际上,我们可以把逻辑网段192.168.1.0/24看作使一个VLAN ,而br_192则是这个VLAN的名称。

建立一个逻辑网段之后,我们还需要为这个网段分配特定的端口。在Linux中,一个端口实际上就是一个物理网卡。而每个物理网卡的名称则分别为eth0,eth1,eth2,eth3。我们需要把每个网卡一一和br_192这个网段联系起来,作为br_192中的一个端口。

$ brctl addif br_192 eth0 $ brctl addif br_192 eth1 $ brctl addif br_192 eth2 $ brctl addif br_192 eth3

网桥的每个物理网卡作为一个端口,运行于混杂模式,而且是在链路层工作,所以就不需要IP了。

$ ifconfig eth0 0.0.0.0 $ ifconfig eth1 0.0.0.0 $ ifconfig eth2 0.0.0.0 $ ifconfig eth3 0.0.0.0

然后给br_192的虚拟网卡配置IP:192.168.1.1,那样就能远程管理网桥。

$ ifconfig br_192 192.168.1.1

给br_192配置了IP之后,网桥就能够工作了。192.168.1.0/24网段内的主机都可以telnet到网桥上对其进行配置。以上配置的是一个逻辑网段,实际上Linux网桥也能配置成多个逻辑网段(相当于交换机中划分多个VLAN)。


总之,网桥实现最重要的两点:

1. MAC学习:学习MAC地址,起初,网桥是没有任何地址与端口的对应关系的,它发送数据,还是得想HUB一样,但是每发送一个数据,它都会关心数据包的来源MAC是从自己的哪个端口来的,由于学习,建立地址-端口的对照表(CAM表)。

2. 报文转发:每发送一个数据包,网桥都会提取其目的MAC地址,从自己的地址-端口对照表(CAM表)中查找由哪个端口把数据包发送出去。

后面会分享更多Linux方面的内容,感兴趣的朋友可以关注一下~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。