ARP キャッシュは、IP over Ethernet を介して通信を行うすべてのホスト上に、何らかの形で存在しています。キャッシュはIPアドレスとイーサネットメディアアクセスコントロール(MAC)アドレスの間のマッピングを保持している。SERVER-1という名前のホストのイーサネットアダプタを変更したり、SERVER-1を新しい/高速なハードウェアに交換したりすると、SERVER-1と通信するローカルイーサネットセグメント上のすべてのホストはARPキャッシュを更新する必要がある。SERVER-1は全てのホストを更新するためのARPパケットを送信するかもしれませんが、イーサネットなのでARPパケットが破損しているか、単にドロップされる可能性があるので、それに頼ることはできません。
OpenVOS上のSTCPスタック内のARPキャッシュエントリの有効期限は10分で、10分後に自動的に削除され、次にパケットを送信する必要があるときに追加されます。ARPキャッシュを表示すると、各エントリの残り時間が表示されます。最悪の場合、SERVER-1を変更した後、古い(正しくない)マッピングが期限切れになり、新しい(正しい)マッピングが追加されるまでに10分かかることになります。その間、SERVER-1との通信ができなくなる。
arp -delete コマンドを使用して、指定されたエントリを削除することができます。図 1 は、MAC アドレスとライフタイムを表示する arp コマンドのインスタンスを示しており、その後 arp -delete コマンドでエントリを削除し、別の arp コマンドではキャッシュにエントリが存在しないことを示しています。
アープ 192.168.50.5 インターネットアドレス MACアドレスの種類 寿命 192.168.50.5 00-04-96-1F-67-0C 温度 6 分 用意ができました 14:01:30 arp -delete 192.168.50.5 192.168.50.5のマッピングを削除 用意ができました 14:01:39 arp 192.168.50.5 arp: 192.168.50.5 のマッピングがありません。 用意ができました 14:01:44 |
図 1 - "arp" および "arp -delete" コマンド |
古い TCP_OS スタックには、ARP キャッシュ内のすべてのエントリを削除する arp -flush コマンドがありました。削除したいエントリが複数ある場合は、それらをすべて削除する方が簡単です (入力が少なくて済みます)。エントリは必要に応じて自動的に追加されるので、この場合の唯一の欠点は、ネットワーク上で数パケットが余分に追加されることと、最初のパケットを送信する際に余分な遅延が発生することです(ARPキャッシュが再補充されている間)。タイピストの観点からすると、このようなデメリットは全くありません。
STCP スタックにはフラッシュオプションがありません。
---------------------------------- arp --------------------------------- ホスト名を指定します。 -all: いいえ -network. -削除: いいえ -set: no mac_addr. |
図 2 - STCP arp コマンド形式 |
そこで、それを行うための短いマクロ(図3)を書きました。このマクロはarp -allの出力をプロセスディレクトリのファイルにリダイレクトし、そのファイルを解析してIPアドレスを抽出し、それぞれのアドレスでarp -deleteを呼び出します。それが完了するまでに、いくつかのエントリは戻ってきますが、それらはすべて現在のマッピングでリフレッシュされています。
ここからarp_flush.cmが始まります。 & & バージョン1.00 11-04-17 & [email protected] & このスクリプトは各エントリを個別に削除することでarpキャッシュをクリアします。 & これが終わる頃には、いくつかのエントリが戻っています。 & & 本ソフトウェアは「現状有姿」で提供されており、いかなる保証もなく、また、本ソフトウェアを使用していない場合は、本ソフトウェアを使用していないことになります。 また、いかなる種類のサポートも行いません。著者は、いかなる黙示のものであっても明示的に否認します。 また、商品性や特定目的への適合性の保証もありません。 & この免責事項は、いかなる口頭での表明にもかかわらず適用されます。 & kind provided by author or anyone else. & set_string FILE (process_dir)>arp_list attach_default_output &FILE& arp -all デフォールト出力 &set LINE 2 再度ラベルを貼る &set LINE (calc &LINE& + 1) set_string IP (substr (contents &FILE& &LINE& -hold) 1 16) if (end_of_file &FILE&) = 1 &then &return if (長さ X&IP&) = 1 &then &return arp -delete &IP& 再度行く & & arp_flush.cmはここで終了します。 |
図 3 - arp_flush コマンドマクロ |
図4は、arpキャッシュに何があるかを確認するためのarp -allコマンドのインスタンスを示し、その後にarp_flushマクロを実行し、別のarp -allのインスタンスを実行しています。必要なスペースを減らすために、最初のarp -allとarp_flush出力から多くの行を削除しました。
arp -all インターネットアドレス MACアドレスの種類 寿命 10.10.1.200 00-90-E8-1F-4B-EA 温度 8 分 192.168.50.1 00-04-96-19-0B-20 テンポラリ 10 分 192.168.50.4 00-04-96-35-3F-B5 テンポラリ 1 分 192.168.50.2 00-04-96-20-C7-EC テンポラリ 4 分 192.168.50.19 00-0C-29-6B-CA-AE テンポラリ 6 分 192.168.50.21 00-23-54-79-C5-81 テンポラリ 7 分 .. . . . 192.168.51.252 00-50-56-BB-4D-8C 温度 5 分. 192.168.51.253 00-0C-29-86-AD-CC 温度 3 分 準備完了 13:46:14 arp_flush 10.10.10.1.200のマッピングが削除されました。 192.168.50.1のマッピングを削除 192.168.50.4のマッピングを削除しました。 192.168.50.2のマッピングを削除しました。 192.168.50.19のマッピングを削除しました。 192.168.50.21のマッピングを削除しました。 .. . . . . . 192.168.51.252のマッピングを削除しました。 192.168.51.253のマッピングを削除しました。 準備ができました 13:46:23 arp -all インターネットアドレス MACアドレスの種類 寿命 192.168.50.2 00-04-96-20-C7-EC テンポラリ 10 分 192.168.51.4 00-04-FC-01-02-3E テンポラリ 10 分 192.168.51.11 00-00-A8-80-80-4A 温度 10 分 192.168.51.49 00-50-56-46-08-2C 温度 10 分 192.168.51.50 00-23-54-52-18-6E テンポラリ 10 分 192.168.51.76 00-23-54-52-1B-F5 温度 10 分 192.168.51.100 00-0C-29-A9-85-44 温度 10 分 192.168.51.128 00-00-A8-43-52-22 テンポラリ 10 分 192.168.51.158 00-26-B9-BBC-B7-37 温度 10 分 192.168.51.180 5C-26-0A-06-BD-29 テンポラリ 10 分 192.168.51.203 00-00-A8-C0-86-A1 温度 10 分 用意ができました 13:46:27 |
図 4 - arp_flush コマンドマクロの実行 |