ifconfig가 다른 IP 주소를 표시하는 이유

ifconfig가 다른 IP 주소를 표시하는 이유

이더넷 케이블을 통해 로컬 네트워크에 연결된 임베디드 Linux 장치가 있습니다. 서브넷의 로컬 IP 주소를 통해 각 장치에 액세스합니다. 192.168.34.0/24.예를 들어 한 장치에는 192.168.34.240.

ifconfig장치 내부의 터미널에서 실행하면 아래와 같이 169로 시작하는 다른 IP 주소가 나타납니다. 혼란스러워요. 왜 이런거야?

eth0      Link encap:Ethernet  HWaddr 00:D0:91:4B:45:C9
          inet addr:169.254.253.217  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:634513 errors:0 dropped:3 overruns:0 frame:0
          TX packets:1318475 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:78343668 (74.7 MiB)  TX bytes:399586128 (381.0 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:24085508 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24085508 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:11614050334 (10.8 GiB)  TX bytes:11614050334 (10.8 GiB)

답변1

20년 넘게 ioctl 기반으로 사용되어 온 Linux에서 ifconfig오래된 커널 API(ioctl 기반)를 사용했기 때문입니다.넷링크 소켓 메시지. 이전 API의 기타 제한사항은 다음과 같습니다.

  • 만 처리할 수 있다하나IPv4 주소(여러 IPv6 주소를 처리할 수 있음) 이 주소를 삭제하는 것조차 패치워크로 수행됩니다. 주소를 0.0.0.0으로 설정합니다.
  • 주소에 대한 네트워크 마스크는 설정할 때 제공되지 않습니다. 따라서 주소를 할당하려면 일반적으로 두 개의 시스템 호출이 필요합니다. 하나는 주소(호스트 부분)에 대한 호출이고 다른 하나는 해당 넷마스크를 수정하는 호출입니다.
  • 여러 IPv4 주소 처리도 패치워크를 통해 수행됩니다. 즉, 소위 별칭 인터페이스(실제로는 별도의 인터페이스가 아닌 주소의 레이블을 통해 구현됨)만 수행되고 ifconfig다른 부분(라우팅, 방화벽...)은 수행되지 않습니다.
  • OP에 표시된 대로 태그가 없는(따라서 최신 API 구성을 사용하는) 다른 IP 주소는 전혀 차단되지 않습니다 ifconfig.

분명히 주소 레이블이 없으면(이름이 올바르게 지정되면 별칭 인터페이스로 표시됨 ifconfig) 네트워크는 최신 netlink 기반 API를 사용하여 구성됩니다. 따라서 최신 도구를 사용하고 ifconfig완전히 제거하여 내장 공간을 절약할 수도 있습니다.

ip address

IPv4 주소가 두 개 이상인 경우 여러 IPv4 주소를 포함하여 모든 인터페이스에 할당된 모든 주소가 표시됩니다.

최신 API를 사용하여 다시 구현할 수 있지만 ifconfig(적어도 UL SE의 일반 사용자는 그렇습니다), 이 명령은 (천천히) 교체하기보다는 업그레이드(예: 다른 *NIX와의 호환성을 위해)가 필요한 것 같습니다. 대부분의 Linux 개발자 또는 배포판 관리자는 최신 도구에 관심이 없습니다.

따라서 Linux에서는 다음을 사용하는 것을 고려해야 합니다.ip link그리고ip address바꾸다 ifconfig. 마찬가지로 ip route교체하려면 route,bridge(제외 ip link) brctl다른 하위 명령 교체ip다양한 기타 명령을 대체합니다(VLAN, 터널, 결합된 인터페이스...).

이제 주소가 여러 개인 이유에 대해 이야기하겠습니다. 가능한 이유는 장치가넘쳐/제로 구성(Apple의 Bonjour 구현과 동일) LAN을 통해 통신하고 기능을 알립니다. 또한 표준 통신(인터넷 포함)을 위해 DHCP로 구성될 수도 있습니다. Zeroconf 사용(라우팅할 수 없음)IPv4LL주소는 DHCP를 사용하여 가져오는 일반적인 주소와 별개입니다.

관련 정보