分享

开发人员必读openstack网络基础6:什么是Tap/Tun、网桥

pig2 发表于 2014-10-24 19:24:44 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 5 95132
本帖最后由 pig2 于 2014-10-25 12:02 编辑
问题导读
1.什么是什么是Tap/Tun?
2.网桥的作用是什么?







什么是Tap/Tun

在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。
服务器如果拥有TUN/TAP模块,就可以开启VPN代理功能。
虚拟网卡TUN/TAP 驱动程序设计原理:
1.jpg


什么是网桥
网桥工作在数据链路层,将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。它可以有效地联接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于联接数量不多的、同一类型的网段。



相关帖子:

开发人员必读openstack网络基础1:什么是L2、L3

开发人员必读openstack网络基础2:交换机、路由器、DHCP


开发人员必读openstack网络基础3: iptables详解


开发人员必读openstack网络基础4:Dnsmasq、网络混杂模式


开发人员必读openstack网络基础5:网络叠加模式VLAN、VxLAN、GRE


开发人员必读openstack网络基础7:到底什么是Open vSwitch





已有(5)人评论

跳转到指定楼层
韩克拉玛寒 发表于 2014-10-25 09:32:51
谢谢楼主分享。
回复

使用道具 举报

hb1984 发表于 2014-10-26 10:41:43
谢谢楼主分享。
回复

使用道具 举报

pig2 发表于 2015-1-20 16:50:35
由于在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地址。既然这样那么它就可以达到路由的作用。也就是说,通过网桥的连接(在设置正确的情况下),可是使两个网络的互相访问是对等的。


















回复

使用道具 举报

迷糊云 发表于 2015-11-18 16:41:11
赞,谢谢分享
回复

使用道具 举报

rogerw 发表于 2015-11-23 17:04:07
赞,谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条