route -n 在 Linux 中如何工作?

kri*_*itx 2 linux linux-kernel

我可以理解 的输出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
Run Code Online (Sandbox Code Playgroud)

编辑,经过更多研究:

似乎route 确实读取了/proc:下的文件,特别是/proc/net/route. 那么,路由信息是如何到达那里的呢?

Mat*_*ner 5

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

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