• 网桥bridge


    1. 网桥基础

    什么是网桥

    网桥将多个网络在数据链路层连接起来。
    网桥的前身是集线器或中继器。网桥和集线器的区别:集线器上各端口都是共享同一条背板总线的,网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域。

    Linux下的bridge,工作于数据链路层,对下层而言是一个桥设备,进行数据的转发;对上层而言,它就像普通的ethernet设备一样,有自己的IP和MAC地址,上层可以把它加入路由系统,并利用它发送接收数据。
    当把一个网络接口加入到Bridge中,Bridge成为该接口的主设备,该接口成为Bridge的从设备。当把一个网络接口加入到Bridge中,实际上是Bridge接管了该接口首发包的过程。(设置dev->prive_flags加上IFF_BRIDGE_PORT,这样它就不能再作为其他br的从设备了;并设置dev->rx_handler为br_handler_frame())
    发包:Bridge调用从设备dev->ops->ndo_start_xmit(skb,dev))发包;
    收包:接收接口通过netif_receive_skb(skb)函数调用dev->rx_handler也就是br_handler_frame()交给Bridge处理包。

    2. 网桥应用

    Linux 网桥配置命令brctl

    在Linux中配置网络一般使用 brctl命令,使用此命令首先要安装:bridge-utils软件包。

    [inbi@debian~]#apt-get install bridge-utils
    [inbi@debian~]#modprobe bridge
    [inbi@debian~]#echo "1">/proc/sys/net/ipv4/ip_forward
    #安装bridge-utils软件包,并加载bridge模块和开启内核转发。
    [inbi@debian~]#brctl
    #直接输入brctl命令将显示帮助信息!
    Usage: brctl [commands]
    commands:
    addbr    <bridge>    add bridge
    delbr    <bridge>    delete bridge
    addif    <bridge> <device>    add interface to bridge
    delif    <bridge> <device>    delete interface from bridge
    setageing    <bridge> <time>    set ageing time
    setbridgeprio    <bridge> <prio>    set bridge priority
    setfd    <bridge> <time>    set bridge forward delay
    sethello    <bridge> <time>    set hello time
    setmaxage    <bridge> <time>    set max message age
    setpathcost    <bridge> <port> <cost>    set path cost
    setportprio    <bridge> <port> <prio>    set port priority
    show    show a list of bridges
    showmacs    <bridge>    show a list of mac addrs
    showstp    <bridge>    show bridge stp info
    stp    <bridge> {on|off}    turn stp on/off

    增加网桥
    [inbi@debian~]#brctl addbr br0
    #增加一个网桥
    [inbi@debian~]#ifconfig eth0 0.0.0.0 promisc
    [inbi@debian~]#ifconfig eth1 0.0.0.0 promisc
    [inbi@debian~]#brctl addif br0 eth0 eth1
    #将两块已有的网卡添加到网桥,此时这两个网卡工作于混杂模式,所以不需要IP了,因为网桥是工作在链路层的。
    [inbi@debian~]#brctl show
    #查看已有网桥

    你也可以为 br0 设置一个IP,已访问这台机器。
    [inbi@debian~]#ifconfig br0 10.10.1.1 netmask 255.255.0.0 up
    删除网桥
    [inbi@debian~]#brctl delif br0 eth0 eth1
    #增加网桥中的接口
    [inbi@debian~]#brctl delbr br0
    #删除网桥
    关闭生成树
    [inbi@debian~]#brctl stp br0 off
    #关闭生成树协议,减少数据包污染,因为我这里只有一个路由器哦!
    配置桥开机激活
    [inbi@debian~]#echo "modprobe bridge">>/etc/rc.local
    #开机加载 bridge 模块,或者echo "bridge">>/etc/modules
    [inbi@debian~]#cp /etc/network/interfaces /etc/network/interfaces.default
    #备份下,方便以后使用啊!

    [inbi@debian~]#vim /etc/network/interfaces
    auto lo eth0 eth1 br0
    iface lo inet loopback
    iface br0 inet static
    address 10.10.10.1
    netmask 255.255.0.0
    gateway 10.10.10.254
    pre-up ip link set eth0 promisc on
    pre-up ip link set eth1 promisc on
    pre-up echo "1">/proc/sys/net/ipv4/ip_forward
    bridge_ports eth0 eth1

    #配置eth0 eth1 br0开机启动,eth0,eth1未设置IP信息,在启动br0网卡时,开启了eth0,eth1的混杂模式,并桥接了它们。

    参考:http://fp-moon.iteye.com/blog/1468650

  • 相关阅读:
    Android MediaScanner 详尽分析
    你要清楚的东西
    Centos下搭建Apache+mysql+php
    Centos 安装MySQL全过程
    sdk platform tools is missing please user the sdk manager to install it
    尚书令
    文字
    ubuntu下mysql配置
    学习Android开发,配置环境,
    Sphinx全文索引安装教程
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/7887716.html
Copyright © 2020-2023  润新知