我使用原始套接字发送 IP/UDP 帧,目标 IP 地址在 127/8 范围内 - 例如 127.0.0.6。因此,数据包已通过网络正常发送(使用目标设备上的 tcpdump 检查)。
但在目标 Linux PC 上,此类帧不会被处理,即不会发送到 UDP 套接字服务器(绑定到 0.0.0.0)。如果目标 IP 是 eth1 接口的地址 - 数据包会被正确处理。
为什么 Linux 不想处理带有本地主机 IP 的数据包?这是内核 Bug 吗?
我需要地址 127.xxx,因为 LSP Ping 使用这个地址(RFC 4379)。
答案1
这是设计使然,整个 127.XXX 地址范围保留用于环回,如 RFC1700 中所定义:
http://www.ietf.org/rfc/rfc1700.txt
这里对此进行了更深入的讨论:
为什么环回 IP 地址从 127.0.0.1 变为 127.255.255.254?
仅仅因为 MPLS 在内部使用它(无论出于何种原因),并不意味着目标服务器可以监听它并使用该范围。