route -n 在 Linux 中如何工作?

route -n 在 Linux 中如何工作?

我可以理解 的输出strace route -n,但route真的会读取 中的任何文件/proc来获取路由表吗?此外,如果路由和 IP 地址存储在 下/proc,为什么不strace显示正在访问的那些文件?

root@xxxx:/etc/postfix# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.21.58.0     0.0.0.0         255.255.254.0   U     0      0        0 eth0
0.0.0.0         10.21.58.1     0.0.0.0         UG    100    0        0 eth0

经过更多研究后进行编辑:

看起来route 读取 : 下的文件/proc,具体来说,/proc/net/route。那么,路由信息是如何到达那里的呢?

答案1

目录中文件的内容/proc(或者实际上任何proc挂载了文件系统的目录)都是动态生成的。各种文件系统相关的系统调用都指向 Linux 内核中的 VFS 层,然后指向 proc 代码,该代码从内核内存空间内的内存数据结构中获取信息,对其进行格式化,然后将其伪装成这些文件的内容。

这里是内核中负责打印出IPv4路由信息的文件。

答案2

是的,它确实使用了/proc,请查看输出的那部分strace route -n

open("/proc/net/route", O_RDONLY)       = 3

它从那里读取所有信息。信息来源是内核本身。内核通过 中的文件提供路由信息procfs

中的文件/proc通常由内核本身生成并填充(信息)。通过此接口,内核可以安全地向用户空间提供内部信息。在大多数情况下,这些信息甚至是人类可读的。

答案3

初始路由表在启动时从配置文件加载。稍后您可以使用route命令手动添加条目。此外,routedgated监听网络以获取路由信息并动态更新路由表。

相关内容