网桥 bridge:一种用于数据链路层实现中继,连接两个或多个局域网的网络互连设备。
交换机 switch:广义的来说,交换机指的是一种通信系统中完成信息交换的设备。这里工作在数据链路层的交换机指的是交换式集线器,其实质是一个多接口的网桥
特性 | 网桥 (Bridge) | 交换机 (Switch) |
---|---|---|
端口数量 | 通常较少,如 2 到 16 个 | 大量,可高达数百个 |
转发方式 | 基于软件实现的数据包转发 | 基于硬件(ASIC)实现的快速数据包转发 |
性能 | 相对较低 | 高性能,低延迟 |
生成树实例 | 只能支持一个生成树协议实例 | 支持多个生成树协议实例,提高网络冗余和效率 |
过滤机制 | 具备基本的帧过滤功能 | 具有更高级的帧过滤和管理功能 |
冲突域 | 通常整个设备构成一个冲突域 | 每个端口可以视为独立的冲突域 |
广播域 | 整个设备属于同一个广播域 | 同样,但可以通过 VLAN 技术分割成多个逻辑广播域 |
VLAN 支持 | 不支持或有限支持 | 广泛支持 VLAN,可以划分多个逻辑网络 |
管理功能 | 管理功能有限 | 提供丰富的管理功能,包括配置、监控和故障排除 |
Linux 网桥不仅能够简化命名空间间的连接配置,还能提供一种无缝的网络通信方式,使得处于不同命名空间的虚拟设备能够像连接到同一个物理网络一样进行数据交换。通过使用 Linux 网桥,我们可以构建一个更加灵活和可扩展的虚拟网络环境
以下是使用 bridge 实现 network namespace 之间通信的步骤:
# create network namespaceip netns add h1ip netns add h2ip netns add h3# create bridgebrctl addbr s1
brctl 命令来自于 bridge-utils
# create veth pairip link add veth1 type veth peer name br1ip link add veth2 type veth peer name br2ip link add veth3 type veth peer name br3# add interface to namespaceip link set veth1 netns h1ip link set veth2 netns h2ip link set veth3 netns h3# add interface to bridge(s1)brctl addif s1 br1brctl addif s1 br2brctl addif s1 br3# checkbrctl showbridge name bridge id STP enabled interfacess1 8000.82fcceb79d4c no br1 br2 br3
配置 Ip 地址,设置状态为 up
ip -n h1 addr add local 192.168.1.1/24 dev veth1ip -n h2 addr add local 192.168.1.2/24 dev veth2ip -n h3 addr add local 192.168.1.3/24 dev veth3ip link set s1 upip link set br1 upip link set br2 upip link set br3 upip -n h1 link set veth1 upip -n h2 link set veth2 upip -n h3 link set veth3 up
连接到桥上的 veth 接口通常不会配置 IP 地址,原因如下:
桥接设备(例如 br0)的作用是转发数据包,它相当于一个二层交换机,工作在链路层。数据包在桥上的转发不依赖于 IP 地址,而是基于 MAC 地址。
IP 地址既不是网卡的,也不是这个这个 PC 机的,是 OSI 第三层协议栈的
二层交换机工作在 OSI 模型的第二层,即数据链路层。二层交换机专注于局域网内的 MAC 地址学习和数据帧转发,不支持跨网络路由。
三层交换机结合了二层交换机和路由器的功能,工作在 OSI 模型的第三层,即网络层。可以进行路由选择,IP 地址的配置,以及 VLAN 间通信
ip netns exec h1 ping 192.168.1.2 -c 2PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.076 ms64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.080 ms--- 192.168.1.2 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1027msrtt min/avg/max/mdev = 0.076/0.078/0.080/0.002 ms
容器或命名空间内的进程可能需要与外部网络通信。这通常通过将容器网络接口连接到宿主机的网络接口或使用网络地址转换(NAT)来实现。
OpenStack Neutron 分析:Linux 虚拟网络知识
Linux Network Namespace