这里是接口的configuration:
#ifconfig virbr0
virbr0:flags = 4355 mtu 1500
inet 192.168.11.1networking掩码255.255.255.255广播255.255.255.255
ether 52:54:00:99:e3:0d txqueuelen 0(以太网)
RX数据包0字节0(0.0 B)
RX错误0丢弃0超限0帧0
TX分组0字节0(0.0 B)
TX错误0丢弃0超载0载波0碰撞0
#ip链接显示virbr0
13:virbr0 @ NONE:mtu 1500 qdisc noqueue状态LOWERLAYERDOWN模式DEFAULT
link / ether 52:54:00:99:e3:0d brd ff:ff:ff:ff:ff:ff
我能ping通,build立TCP连接等到192.168.11.1,但tcpdump报告
捕获0个数据包 filter收到的0个数据包 内核丢弃了0个数据包
UPDATE
我发现如果将地址分配给veth接口,将其放入networking名称空间,然后将veth对的另一端连接到virbr接口,所有数据包将显示在virbr接口上的tcpdump上。 但是原来的问题依然存在。
tcpdump通过打开数据包套接字[1]在链路级别运行。 它位于接口的正下方,因此拦截来自硬件的入站数据包和来自接口的出站数据包。 当你发送一个数据包到内核中的那个接口时,数据包已经到达目的地,不会通过接口发送出去。 好奇,这里是相关的代码[2]。
[1] http://man7.org/linux/man-pages/man7/packet.7.html
[2] https://github.com/the-tcpdump-group/libpcap/blob/master/pcap-linux.c#L3281