赞,谢谢分享 |
赞,谢谢分享 |
由于在openstack的网络中用到了Linux网桥,上面解释的还不够清楚,这里进一步补充: 桥接就是把一台机器上的若干个网络接口“连接”起来。 更多 其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。 那么什么是报文: 报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。 报文传输的过程,也是不断包装的过程 于是交换机就是将若干个网口桥接起来, linux的桥接实现 linux内核支持网口的桥接(目前只支持以太网接口)。但是与单纯的交换机不同,交换机只是一个二层设备,对于接收到的报文,要么转发、要么丢弃。小型的交换机里面只需要一块交换芯片即可,并不需要CPU。而运行着linux内核的机器本身就是一台主机,有可能就是网络报文的目的地。其收到的报文除了转 发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己消化。 网桥的功能 概括来说,网桥实现最重要的两点: 1. MAC学习:学习MAC地址,起初,网桥是没有任何地址与端口的对应关系的,它发送数据,还是得想HUB一样,但是每发送一个数据,它都会关心数据包的来源MAC是从自己的哪个端口来的,由于学习,建立地址-端口的对照表(CAM表)。 2. 报文转发:每发送一个数据包,网桥都会提取其目的MAC地址,从自己的地址-端口对照表(CAM表)中查找由哪个端口把数据包发送出去。 3 网桥的配置 在Linux里面使用网桥非常简单,仅需要做两件事情就可以配置了。其一是在编译内核里把CONFIG_BRIDGE或CONDIG_BRIDGE_MODULE编译选项打开;其二是安装brctl工具。第一步是使内核协议栈支持网桥,第二步是安装用户空间工具,通过一系列的ioctl调用来配置网桥。下面以一个相对简单的实例来贯穿全文,以便分析代码。 Linux机器有4个网卡,分别是eth0~eth4,其中eth0用于连接外网,而eth1, eth2, eth3都连接到一台PC机,用于配置网桥。只需要用下面的命令就可以完成网桥的配置: Brctl addbr br0 (建立一个网桥br0, 同时在Linux内核里面创建虚拟网卡br0)[这就是为什么网桥能有ip的原因] Brctl addif br0 eth1 Brctl addif br0 eth2 Brctl addif br0 eth3 (分别为网桥br0添加接口eth1, eth2和eth3) 其中br0作为一个网桥,同时也是虚拟的网络设备,它即可以用作网桥的管理端口,也可作为网桥所连接局域网的网关,具体情况视你的需求而定。要使用br0接口时,必需为它分配IP地址。为正常工作,PC1, PC2,PC3和br0的IP地址分配在同一个网段。 MAC地址过期清理 桥建立时设置一个定时器,循环检测,如果发现有过期的MAC,则清除对应的数据项,MAC地址过期清除由函数br_fdb_cleanup实现: 1,网关,通过字面意思解释就是网络的关口。从技术角度来解释,就是连接两个不同网络的接口。 比如局域网的共享上网服务器就是局域网和广域网的接口。 网关工作在第三层,并且有不可逆性。也就是说,局域网用户可以通过网关直接访问广域网;而广域网用户却无法通过该网关来直接访问局域网用户,如果想访问,必须另行采用其它技术。 2,网桥,即网络的桥接。也是用来连接两个网络的,但是网桥有一个特点,就是网桥有自己独立的IP地址。既然这样那么它就可以达到路由的作用。也就是说,通过网桥的连接(在设置正确的情况下),可是使两个网络的互相访问是对等的。 |
谢谢楼主分享。 |
谢谢楼主分享。 |