イーサネットケーブルを介してローカルネットワークに接続された組み込みLinuxデバイスがあります。サブネットのローカルIPアドレスを介して各デバイスにアクセスします。192.168.34.0/24.
たとえば、1つのデバイスに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に設定します。
- アドレスのネットワークマスクは設定時に提供されません。したがって、アドレスを割り当てるには通常、2つのシステムコールが必要です。 1つはアドレス(ホスト部分)への呼び出し、もう1つはそのネットマスクを変更する呼び出しです。
- 複数の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を使用して取得する一般的なアドレスとは別のものです。