ip a에 의한 inet/inet6 라인 출력

ip a에 의한 inet/inet6 라인 출력

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 이후의 출력에서 ​​볼 수 있는 다른 값 중 일부에 대한 추가 정보를 제공할 수 있습니다.

이것이 어떻게 작동하는지에 대한 나의 이해이며, 다른 사람들은 더 많은/더 나은 정보를 가지고 있을 수 있습니다.

관련 정보