Linux bridge及其配置

Linux bridge及其配置

1. Linux下Bridge原理

1.1 Linux Bridge配置

Kernel要支持Bridge功能,需要打开802.1d Ethernet Bridging:

Networking support

->Networking options ->802.1d Ethernet Bridging

1.2 Linux Bridge原理

OSI七层模型,说明以及每层的常见协议:

OSI模型和Linux下TCP/IP协议对应关系如下:

应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了有TELNET协议。应用层还能加密、解密、格式化数据。应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。运输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。且在运输层中,TCP和UDP也同样起到了中流砥柱的作用网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路

Bridge工作在OSI的二层(即数据链路层)设备。根据MAC地址转发数据包。为Bridge配置IP地址后,也可工作在三层网络,工作原理类似于三层交换机。Bridge一端连接着内核协议栈,另一端可以连接多个网络设备。

创建一个bridge后(br0),可以把其他的网络设备(比如eth0)attach到br0上,eth0称作br0的从设备。需要注意的是,eth0 attach到br0上,不是对应的将eth0插接到“交换机”br0上,而是eth0变成了br0的一个端口(网线插口)。

从设备(eth0)被attach到br上之后,它的IP及MAC都不再可用了(退化为一个端口了)且它们被设置为接收任何包(工作在链路层,且是混杂模式,不需要ip),最终由bridge设备来决定数据包的去向:接收到本机、转发、丢弃。

STP(Spanning Tree Protocol)是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路。用于确保以太网中无环路的逻辑拓扑结构。从而避免了广播风暴,大量占用交换机的资源。

FDB(Forwarding Database)用于保存二层设备中MAC地址和端口的关联关系,就像交换机中的MAC地址表一样。

MDB(Multicast group database)用于保存IP或L2组播地址表。

更多参考《linux网桥简单理解和持久化配置》

1.3 代码分析

br_init()是网桥模块的初始化入口:

br_init ->stp_proto_register--STP(Spanning Tree Protocol) ->br_fdb_init--创建bridge_fdb_cache缓存。 ->register_pernet_subsys--注册一个创建network namespace子系统的函数。 ->br_nf_core_init ->register_netdevice_notifier--注册网络事件到netdev_chain的通知回调函数br_device_notifier。 ->register_switchdev_notifier--注册到switchdev_notif_chain的通知回调函数br_switchdev_notifier。 ->br_netlink_init ->br_mdb_init ->rtnl_af_register--注册bridge Router Netlink的Address Family的操作函数br_af_ops。 ->rtnl_link_register--注册bridge Router Netlink的link操作函数br_link_ops。 ->brioctl_set--设置br_ioctl_hook为br_ioctl_deviceless_stub。

待完善,更多参考《浅析linux内核网络协议栈--linux bridge(一)》。

2 Linux Bridge配置工具

2.1 以太网桥管理工具:brctl

在Buildroot中打开brctl:

Target packages ->Network applications ->bridge-utils

brctl配置网桥

addbr --添加一个网桥。

delbr --删除一个网桥。

addif --将一个网络接口加入到网桥中。

delif --将一个网络接口从网桥中删除。

hairpin {on|off} turn hairpin on/off

setageing

setbridgeprio set bridge priority

setfd

sethello

setmaxage

setpathcost set path cost

setportprio set port priority

show [ ] show a list of bridges

showmacs show a list of mac addrs

showstp --显示网桥的STP信息。

stp {on|off}--设置网桥是否参与STP。

《networking:bridge》

2.2 iproute2: ip link和bridge

在Buildroot中打开iproute2:

Target packages

->Networking applications

->iproute2

ip用于显示或管理Linux网络的路由、网络设备、网络接口和隧道。

Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }

ip [ -force ] -batch filename

where OBJECT := { address | addrlabel | amt | fou | help | ila | ioam | l2tp |

link | macsec | maddress | monitor | mptcp | mroute | mrule |

neighbor | neighbour | netconf | netns | nexthop | ntable |

ntbl | route | rule | sr | tap | tcpmetrics |

token | tunnel | tuntap | vrf | xfrm }

OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |

-h[uman-readable] | -iec | -j[son] | -p[retty] |

-f[amily] { inet | inet6 | mpls | bridge | link } |

-4 | -6 | -M | -B | -0 |

-l[oops] { maximum-addr-flush-attempts } | -br[ief] |

-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |

-rc[vbuf] [size] | -n[etns] name | -N[umeric] | -a[ll] |

-c[olor]}

关于ip详细使用说明参考《ip(8) - Linux manual page》。

bridge用于显示或管理网桥的连接、FDB/MDB/VLAN,以及对设备和地址的监控功能。

Usage: bridge [ OPTIONS ] OBJECT { COMMAND | help }

bridge [ -force ] -batch filename

where OBJECT := { link | fdb | mdb | vlan | monitor }

OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] |

-o[neline] | -t[imestamp] | -n[etns] name |

-c[ompressvlans] -color -p[retty] -j[son] }

关于bridge的详细使用说明参考《bridge(8) - Linux manual page》。

《An introduction to Linux bridging commands and features》:介绍了网桥处理的两个命令ip和bridge,以及对STP、VLAN filter、VLAN tunnel mapping、Multicast、Switchdev、Netfilter、Ageing time等配置。

《Introduction to Linux interfaces for virtual networking》:介绍了Bridge的使用,以及其他Linux下虚拟网络。包括Bonded interface,Team interface,VLAN,VXLAN,IPVLAN等等。

相关推荐

2017年世界击剑锦标赛
o365邮箱登录

2017年世界击剑锦标赛

📅 07-12 👁️ 8593
散打(中国传统武术)
o365邮箱登录

散打(中国传统武术)

📅 07-15 👁️ 8193
【热身赛】斯特林传射 英格兰3比0胜10人科特迪瓦
365bet体育在线15

【热身赛】斯特林传射 英格兰3比0胜10人科特迪瓦

📅 07-11 👁️ 4393
恐龙手游排行榜
365直播电视

恐龙手游排行榜

📅 07-06 👁️ 7637
什么是hard模式(开启hard模式啥意思)
o365邮箱登录

什么是hard模式(开启hard模式啥意思)

📅 07-08 👁️ 2128
筠泽名字含义:
o365邮箱登录

筠泽名字含义:

📅 07-15 👁️ 3420