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
제가 알고 싶은 것은 inet과 inet6에 관한 것입니다.
정보를 살펴보니 IPv4와 IPv6이고 IP 주소(및 브로드캐스트 주소)와 범위가 나와 있습니다.
그러나 범위 정보 뒤에 오는 내용에 대한 문서를 찾을 수 없습니다. 예를 lo
들어 inet 127.0.0.1/8 scope host
.
예를 들어 추가 정보가 있을 수 있다는 것을 확인했습니다 dynamic
.
누구든지 해당 문서를 알고 있습니까?
(또한 inet 줄 끝에 인터페이스 이름이 표시되지만 inet6 줄에는 표시되지 않는 이유를 모르겠습니다.)
감사합니다!
답변1
man ip
명령에 대한 헤더 문서가 제공됩니다 ip
. 마지막으로 명령 ip-address
에 대해 ip address
자세히 알아볼 수 있는 상호 참조("참조")를 제공합니다 .
문서를 보면 man ip-address
해당 범위에 대한 참조를 찾을 수 있습니다. 예를 들면 다음과 같습니다.
IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label LABEL ] [ scope SCOPE-ID ] SCOPE-ID := [ host | link | global | NUMBER ]
동일한 매뉴얼 페이지를 추가로 검색하면 SCOPE
다음이 정의됩니다.
scope SCOPE_VALUE
이 주소가 유효한 지역입니다. 사용 가능한 범위는 파일에 나열되어 있습니다/etc/iproute2/rt_scopes
. 사전 정의된 범위 값은 다음과 같습니다.
global
- 이 주소는 전 세계적으로 유효합니다.site
- (IPv6만 해당, 더 이상 사용되지 않음) 주소는 사이트 로컬입니다. 즉, 주소가 사이트 내에서 유효합니다.link
- 주소는 링크-로컬 주소입니다. 즉, 이 장치에서만 유효합니다.host
- 이 주소는 이 호스트 내에서만 유효합니다.
질문의 두 번째 부분은 address 유형의 정의로 답변됩니다 link
.
답변2
IPv6 링크-로컬 주소의 특별한 점은 일반 작업의 일부로 모든 IPv6 링크에서 동일한 주소 범위가 사용된다는 것입니다. scope link
링크 로컬 주소는 fe80::215:5dff:fe4c:2618/64
호스트에서만 유효하며 eth0
다른 네트워크 인터페이스의 호스트에는 유효한 주소가 아니라는 점을 강조하는 부분입니다 . (실제로 주소가 일반적으로 MAC 주소를 기반으로 할당되는 방식을 고려할 때 이러한 경우는 드물지만 다른 링크의 다른 호스트에서 동일한 주소를 사용할 수 있습니다.)
이는 모든 링크와 인터페이스에서 유효한 전역 주소와는 다릅니다.
예를 들어 "주소 범위" 및 "범위 리터럴 IPv6 주소(영역 인덱스 포함)" 섹션을 참조하세요.Wikipedia 페이지 "IPv6 주소"
답변3
나는 당신이 묻는 몇 가지 질문에 대답하려고 노력할 것입니다:
"인터페이스 이름이 inet 줄 끝에 표시되지만 inet6 줄에는 표시되지 않는 이유를 모르겠습니다."
inet(또는 ipv4)은 역사적인 이유로 인터페이스 이름을 나열하는 것 같습니다. 이는 하나의 인터페이스에 여러 주소를 갖고 싶을 때 일반적으로 사용되는 "별칭" 인터페이스와 관련된 것으로 보입니다. Linux는 이제 앨리어싱 없이 단일 인터페이스에서 여러 IP 주소를 지원할 수 있지만 과거에는 그렇지 않았습니다. 이전 버전과의 호환성을 위해 인터페이스 별칭은 여전히 존재합니다.
inet6(또는 ipv6)은 해당(별칭) 정보를 사용하지 않습니다. 또는 더 정확하게는 Linux 커널 netlink 인터페이스가 인터페이스 inet6 주소 정보를 쿼리할 때 인터페이스 이름(IFA_LABEL)을 보고하지 않습니다.
귀하가 Ubuntu 배포판에서 Linux를 사용하고 있다고 가정하기 위해 귀하의 질문과 관련된 태그를 사용하고 있습니다. 명령 ip address show
(또는 ip a
당신이 말하는 것)은 다음에서 나옵니다.IP 경로 2팩. 이 명령은 netlink 기능을 통해 Linux 커널에서 네트워크 인터페이스 및 네트워크 주소 정보를 얻습니다.
다음 명령을 사용하십시오 man 7 rtnetlink
(또는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 IP 별칭 기능이 오래되었지만 이전 버전과의 호환성을 위해 여전히 존재한다고 설명합니다.
세부 사항을 더 자세히 알고 싶다면(UnixLinux보다 StackOverflow에 더 적합할 것임) ip 파일에서 "if (rta_tb[IFA_LABEL])"가 포함된 "ip 주소 표시"(iproute2) 줄을 찾아보세요. /ipaddress.c 소스 코드. 명령이 커널로부터 IFA_LABEL 메시지를 받으면 이를 명령의 출력으로 인쇄하는 것을 볼 수 있습니다.
다른 사람들이 지적했듯이 ip 및 ip-address에 대한 매뉴얼 페이지는 inet 및 inet6 이후의 출력에서 볼 수 있는 다른 값 중 일부에 대한 추가 정보를 제공할 수 있습니다.
이것이 어떻게 작동하는지에 대한 나의 이해이며, 다른 사람들은 더 많은/더 나은 정보를 가지고 있을 수 있습니다.