我试图理解ip a命令的输出。
例如,我们可以从它获得这个输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:4c:26:18 brd ff:ff:ff:ff:ff:ff
inet 172.21.254.173/20 brd 172.21.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe4c:2618/64 scope link
valid_lft forever preferred_lft forever我想了解的是关于互联网和inet6的信息。
我研究过它们是IPv4和IPv6的信息,然后它说IP地址(和广播地址)和范围。
但是在范围信息之后我找不到内容的文档。例如,lo在inet 127.0.0.1/8 scope host之后。
我已经看到它可能有像dynamic这样的附加信息。
有人知道关于他们的文件吗?
(此外,我不知道为什么inet6的末尾写的是接口名,而inet6行则不是)
谢谢!
发布于 2022-01-11 15:49:56
man ip将为您提供一个关于ip命令的标题文档。最后,它给出了交叉引用(“也请参阅”),例如ip-address,以了解更多关于ip address命令的信息。
如果您使用man ip-address查看该文档,您将发现对该范围的引用,如以下所示:
IFADDR :=前缀IFADDR对等前缀广播ADDR 标签标签作用域-ID := 主机链接全域电话号码
在同一手册页下进一步搜索将定义SCOPE,如下所示
scope SCOPE_VALUE此地址有效的区域的范围。可用的作用域列在文件/etc/iproute2/rt_scopes中。预定义的范围值是:
global -地址是全局有效的。site -(仅限IPv6,不推荐)该地址是站点本地的,即该地址在此站点内有效。link -地址是本地链接,也就是说它只在这个设备上有效。host -该地址仅在此主机内有效。您问题的第二部分由link类型地址的定义来回答。
发布于 2022-01-15 16:45:01
我将试图回答你所提问题的一部分,即:
“我不知道为什么inet6的末尾写的是接口名,而inet6行却没有”
由于历史原因,inet (或ipv4)似乎列出了接口名称。这似乎与“别名”接口有关,当您希望一个接口上有多个地址时,就会使用别名接口。Linux现在可以在一个没有别名的单一接口上支持多个IP地址,但在过去并非如此。为了实现向后兼容性,接口别名仍然存在。
inet6 (或ipv6)不使用该(别名)信息。或者更准确地说,当查询接口IFA_LABEL地址信息时,接口不报告接口名称( inet6 )。
请注意,我使用与您的问题相关的标记来假设您使用的是来自Ubuntu发行版的Linux。命令ip address show (或您所说的ip a )来自iproute2包。该命令通过netlink特性从Linux内核获取网络接口和网络地址信息。
使用命令man 7 rtnetlink (或ref https://man7.org/linux/man-pages/man7/rtnetlink.7.html)将提供一些有关netlink接口的信息,以及IFA_LABEL适合的位置。
“理解Linux内部”一书对ifa_label做了如下介绍:“一个字符串主要用于向后兼容2.0.x内核,该内核允许别名接口,名称为eth0:1”。
下面的链接(https://www.kernel.org/doc/html/latest/networking/alias.html)还描述了Linux混叠特性具有历史意义,但为了向后兼容仍然存在。
如果您想更深入地了解细节(这可能更适合于StackOverflow而不是UnixLinux),您可以从"ip地址显示“(iproute2)的源代码中查找文件ip/ipaddress.c中有"if (rta_tbIFA_标签)”的行。您将看到,如果命令从内核接收到IFA_LABEL信息,那么它将将其打印为命令的输出。
正如其他人所指出的,ip和ip地址的手册页可以提供其他一些值的附加信息,这些信息可以在inet和inet6后面的输出中看到。
这是我对此如何工作的理解,其他人可能有更多/更好的信息。
https://unix.stackexchange.com/questions/685922
复制相似问题