美文网首页
从虚拟网桥聊聊网络基础命令。

从虚拟网桥聊聊网络基础命令。

作者: 倔强swj | 来源:发表于2018-11-15 10:59 被阅读19次

    桥接(Bridging),是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程,工作在OSI的第二层。一般的交换机,网桥就有桥接作用。——百度百科
    Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。

    echo 1 > /proc/sys/net/ipv4/ip_forward  
    

    数据链路层

    • 实现了网卡接口的驱动程序,用来处理数据在物理媒介上的传播。实现了IP地址和物理地址之间的转换。

    • 数据链路层协议有ARP和RARP协议。

    • 数据链路层封装的数据称为帧。

    • Linux 相关命令:

      • arp命令用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的ip地址与MAC地址对应关系。

        arp(选项)(参数)
        -a<主机>:显示arp缓冲区的所有条目;
        -H<地址类型>:指定arp指令使用的地址类型;
        -d<主机>:从arp缓冲区中删除指定主机的arp条目;
        -D:使用指定接口的硬件地址;
        -e:以Linux的显示风格显示arp缓冲区中的条目;
        -i<接口>:指定要操作arp缓冲区的网络接口;
        -s<主机><MAC地址>:设置指定的主机的IP地址与MAC地址的静态映射;
        -n:以数字方式显示arp缓冲区中的条目;
        -v:显示详细的arp缓冲区条目,包括缓冲区条目的统计信息;
        -f<文件>:设置主机的IP地址与MAC地址的静态映射
        

    桥接

    Linux bridge 根据收到的帧的目的 MAC 地址来决定其行为:

    • 如果帧的目的 MAC 地址是已知的在 bridge 的另一头(非local),会做 bridging (转发)
    • 如果帧的目的 MAC 地址是未知的,会做 flooding (泛洪)
    • 如果帧的目的 MAC 地址是 bridge 自身或者它的某个端口的 MAC 地址(local),则发往上层 IP 层
    • 如果目的 MAC 地址是已知的而且在 bridge 的源侧,则丢弃

    Linux bridge 是依据什么来进行转发的。我们可以通过命令来查看

    brctl showmacs <bridge>     show a list of mac addrs
    port no mac addr        is local?   ageing timer
      2 fa:16:3e:2e:37:e1   no         1.18
      3 fa:16:3e:35:4d:1a   no        20.19
      2 fa:16:3e:53:01:09   no       284.72
      6 fa:16:3e:6a:57:8d   no         1.13
      1 fa:16:3e:76:f5:88   no         0.02
      8 fa:16:3e:b4:cb:15   no        15.50
      9 fa:16:3e:f1:8a:ce   no         4.08
    

    关于网桥的详细原理介绍可以查看[2],讲解的相当的详细。

    桥接原理

    这里我简单的介绍桥接的命令:

    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
        hairpin     <bridge> <port> {on|off}    turn hairpin on/off
        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        [ <bridge> ]        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
    

    生成树协议工作原理:任意一交换机中如果到达根网桥有两条或者两条以上的链路.生成树协议都根据算法把其中一条切断,仅保留一条.从而保证任意两个交换机之间只有一条单一的活动链路.因为这种生成的这种拓扑结构.很像是以根交换机为树干的树形结构.故为生成树协议

    Tcpdump命令

    Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
            [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
            [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
            [ -Q in|out|inout ]
            [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
            [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
            [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
            [ -Z user ] [ expression ]
    

    表达式

    通过表达式可以对各种不同类型的网络流量进行过滤,以获取到需要的信息。这也是 tcpdump 强大功能的一个体现。
    主要有 3 种类型的表达式:

    • Type(类型)选项包括 hostnetport
    • Direction(方向)选项包括 srcdst 以及它们的组合
    • Proto(协议)包括 tcpudpICMPah

    只过滤icmp协议的命令行

    tcpdump -nni eth0 icmp
    

    [1]桥接原理:https://yuerblog.cc/2017/01/22/understand-bridge-and-dhcp/

    [2]详细:https://opengers.github.io/openstack/openstack-base-virtual-network-devices-bridge-and-vlan/

    [3] http://www.cnblogs.com/sammyliu/p/5763513.html

    相关文章

      网友评论

          本文标题:从虚拟网桥聊聊网络基础命令。

          本文链接:https://www.haomeiwen.com/subject/cdnefqtx.html