linux bridge
1. 创建一个bridge和veth pair并将veth pair一端连在bridge上
ip link add name br0 type bridge
ip link set br0 up
ip link add veth0 type veth peer name veth1
ip addr add 172.31.1.139/20 dev veth0
ip addr add 172.31.1.140/20 dev veth1
ip link set veth0 up
ip link set veth1 up
ip link set dev veth0 master br0
2. 测试从veth0 ping veth1
~# ping -c 1 -I veth0 172.31.1.140
PING 172.31.1.140 (172.31.1.140) from 172.31.1.139 veth0: 56(84) bytes of data.
From 172.31.1.139 icmp_seq=1 Destination Host Unreachable
--- 172.31.1.140 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
包的去和回流都没有问题,问题在于veth0收到的应答包未给到协议栈,而是给了br0,于是协议栈得不到veth1的mac地址,导致通信失败
3. 将ip让给bridge
~# ip addr del 172.31.1.139/20 dev veth0
~# ip addr add 172.31.1.139/20 dev br0