从虚拟网桥聊聊网络基础命令。
桥接(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(类型)选项包括
host
、net
和port
-
Direction(方向)选项包括
src
和dst
以及它们的组合 -
Proto(协议)包括
tcp
、udp
、ICMP
和ah
等
只过滤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/