我可以理解 的输出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
命令手动添加条目。此外,routed
或gated
监听网络以获取路由信息并动态更新路由表。