由于这超出了范围网络工程,让我在这里再次问这个问题,因为这与linux网络堆栈有关。
我有以下设置/情况:
---------------------
| Gateway |
| 10.1.0.1 |
| aa:bb:cc:00:00:01 |
---------------------
|
--------------------- |
| Host 1 |---|
| 10.1.0.91 | |
| aa:bb:cc:00:00:91 | |
--------------------- |
|
--------------------- |
| Host 2 |----
| 10.1.0.92 |
| aa:bb:cc:00:00:92 |
---------------------
子网掩码是255.255.240.0
. Host1和Host2是Linux/Ubuntu节点。
如果我现在从 Host1 向 Host2 发送一个数据报,我希望它会直接发送到那里:对 10.1.0.92 的 ARP 请求以获取 Host2 的 MAC 地址,填充数据报并发送到线路。
有趣的是,我观察到不同的行为:数据报被网关的 MAC 地址填充,这不是我所期望的。
这是主机 1 的路由表:
Host1 > ip route -n
default via 10.1.0.1 dev enp130s0 proto dhcp src 10.1.0.91 metric 100
1.1.1.1 via 10.1.0.1 dev enp130s0 proto dhcp src 10.1.0.91 metric 100
9.9.9.9 via 10.1.0.1 dev enp130s0 proto dhcp src 10.1.0.91 metric 100
10.1.0.0/20 dev enp130s0 proto kernel scope link src 10.1.0.91 metric 100
10.1.0.1 dev enp130s0 proto dhcp scope link src 10.1.0.91 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
这是 Host1 的 tcpdump 输出,我们在其中看到数据报被发送到网关:
Host1 > tcpdump -en -i enp130s0 udp and port 12345
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp130s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
07:22:10.249224 aa:bb:cc:00:00:91 > aa:bb:cc:00:00:01, ethertype IPv4 (0x0800), length 60: 10.1.0.91.42518 > 10.1.0.92.12345: 18533 updateMA [b2&3=0x6c6c] [8277a] [28460q] [17488n] [8275au] [|domain]
从主机 1 对主机 2 进行 Arping 也可以正常工作:
Host1 > arping 10.1.0.92
ARPING 10.1.0.92
60 bytes from aa:bb:cc:00:00:92 (10.1.0.92): index=0 time=104.200 usec
60 bytes from aa:bb:cc:00:00:92 (10.1.0.92): index=1 time=133.023 usec
60 bytes from aa:bb:cc:00:00:92 (10.1.0.92): index=2 time=108.228 usec
我想知道我缺少什么,或者 Linux 网络堆栈的哪个组件决定,东西被发送到网关而不是直接发送到主机。
任何指示/帮助将不胜感激。