メインコンテンツへ移動

イーサネット経由でIP通信を行うすべてのホストには、何らかの形でARPキャッシュが存在します。このキャッシュには、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コマンドの実行例を示しています。

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:\
 -delete:  いいえ\
 -set:     いいえ\
 mac_addr:
図2 – STCP arp コマンドの形式

そこで、これを実行するための簡単なマクロ(図3)を作成しました。このマクロは、`arp -all` の出力をプロセスディレクトリ内のファイルにリダイレクトし、そのファイルを解析してIPアドレスを抽出します。そして、各アドレスに対して`arp -delete`を実行します。処理が完了する頃には、一部のエントリが復活しているかもしれませんが、それらはすべて最新のマッピングで更新されているはずです。

& arp_flush.cm はここから開始します
&
& バージョン 1.00 2017年4月11日
& [email protected]
&
& このスクリプトは、各エントリを個別に削除することで ARP キャッシュをクリアします。
& 処理が完了する頃には、一部のエントリが再び表示されるようになります。
&
&
& 本ソフトウェアは「現状有姿」で提供され、いかなる保証も、またいかなる種類のサポートも提供されません。作者は、商品性および特定目的への適合性に関する黙示の保証を明示的に否認します。
& この免責事項は、作者またはその他の者によるいかなる口頭での表明があっても、適用されます。
&
&
&set_string FILE (process_dir)>arp_list
attach_default_output &FILE&
arp -all
detach_default_output
&set LINE 2
&label again
&set LINE (calc &LINE& + 1)
&set_string IP (substr (contents &FILE& &LINE& -hold) 1 16)
&if (end_of_file &FILE&) = 1 &then &return
&if (length X&IP&) = 1 &then &return
arp -delete &IP&
&goto again
&
& arp_flush.cm はここで終了します
図3 – arp_flush コマンドマクロ

図4は、ARPキャッシュの内容を確認するための「arp -all」コマンドの実行例を示しています。続いて「arp_flush」マクロを実行し、さらに「arp -all」を再度実行した結果です。2回目の「arp -all」では、すべての有効期限が10分になっていることに注目してください。スペースを節約するため、最初の「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.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-BC-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 コマンドマクロの実行

 

© 2024 Stratus Technologies.