TCPの接続タイムアウトを試験する
通信プログラムの試験を行う際にやっかいなのが、TCPコネクションの接続タイムアウトを試験する場合。
タイムアウトの値を設定して、それが有効に機能しているかどうかを確認するには、実際にタイムアウトエラーを発生させて、設定したタイムアウト値通りの経過時間でエラーになったかをみないといけない。
普通に接続できないエラーを確認するには、サーバを止めておく方法でOK。タイムアウトでない場合の接続試験はこれでできる。
サーバプロセスを止めておけば、ICMPでport unreachableが返ってくる。port unreachableが戻れば、即時に接続エラーとなる。
しかし、即時にエラーなので、タイムアウトを再現できたことにはならない。
存在しないIPアドレスに接続してみる
そこで、LAN上の実働していないホストのIPアドレスを指定して接続させてみる。
Linuxマシンでは、arpが引けないので、即時に「No route to host」のエラーになってしまう。
やっぱり即時エラーなのでこの方法も使えない。
しょうもないなぁ、と思って、インターネット上の接続タイムアウトしそうなサーバにアクセスしてみようか、と思う。
しかし、そんなサーバってあるか?
これもダメか。
ケーブルを抜く
いろいろと考えた結果、ケーブルを抜けばいいんじゃない?と思った。
一度pingして、arpキャッシュに登録させておけば、ある程度の時間なら「No route to host」にならないのでは?
でもなぁ、あまり抜き差ししたくはないのよね。爪のところが壊れちゃうし。
やってみたが、arpキャッシュの有効期限が短く設定されているせいか、ケーブルを抜いたらキャッシュから割とすぐになくなってしまう模様。
サーバ側じゃなくて、クライアント側を抜いたので、そこでarpキャッシュが無効になるのかも。サーバ側は抜きたくないなぁ... 他でも使っているし。
ケーブルを抜く作戦もダメか。
Virtual PCの仮想ネットワークを切断する
Virtual Boxでは、ネットワークアダプタの脱着を動的に行うことができる。
うまくいくかに見えたが、Virtual PCのマシンに通信して得たURLにアクセスするようなプログラムなので、そもそもの通信ができなくなりこの方法でもダメ。
やるのなら、別のVirtual PCマシンを用意しないと。
ローカルに異なるネットワークを作成する
なんか、大掛かりになってきてしまった。
LANには192.168.0.0/24を割り当ててある。
もうひとつのセグメントを作って、192.168.100.0/24とかにする。
クライアントに経路を作ってやる。
route add -net 192.168.100.0/24 gw 192.168.0.2
これで、192.168.100.0/24行きのパケットは、192.168.0.2に転送されるはず。192.168.0.2でちゃんとルーティングすればちゃんと通信できるが、接続タイムアウトを試験したいので、192.168.0.2では何もしない。
192.168.100.0/24のネットワークも実際には存在しない。
接続先に、192.168.100.1とかを指定して、接続させてみる。
やってる、やってる。
タイムアウトは60秒に設定しているので...
60秒後にTCP接続タイムアウトになった。やったね!
接続タイムアウトを試験したい場合は、実在しないネットワークセグメントへの経路を作ってやれば、OKという話でした。
サイト内を検索
タイムアウトの値を設定して、それが有効に機能しているかどうかを確認するには、実際にタイムアウトエラーを発生させて、設定したタイムアウト値通りの経過時間でエラーになったかをみないといけない。
普通に接続できないエラーを確認するには、サーバを止めておく方法でOK。タイムアウトでない場合の接続試験はこれでできる。
サーバプロセスを止めておけば、ICMPでport unreachableが返ってくる。port unreachableが戻れば、即時に接続エラーとなる。
しかし、即時にエラーなので、タイムアウトを再現できたことにはならない。
存在しないIPアドレスに接続してみる
そこで、LAN上の実働していないホストのIPアドレスを指定して接続させてみる。
Linuxマシンでは、arpが引けないので、即時に「No route to host」のエラーになってしまう。
やっぱり即時エラーなのでこの方法も使えない。
しょうもないなぁ、と思って、インターネット上の接続タイムアウトしそうなサーバにアクセスしてみようか、と思う。
しかし、そんなサーバってあるか?
これもダメか。
ケーブルを抜く
いろいろと考えた結果、ケーブルを抜けばいいんじゃない?と思った。
一度pingして、arpキャッシュに登録させておけば、ある程度の時間なら「No route to host」にならないのでは?
でもなぁ、あまり抜き差ししたくはないのよね。爪のところが壊れちゃうし。
やってみたが、arpキャッシュの有効期限が短く設定されているせいか、ケーブルを抜いたらキャッシュから割とすぐになくなってしまう模様。
サーバ側じゃなくて、クライアント側を抜いたので、そこでarpキャッシュが無効になるのかも。サーバ側は抜きたくないなぁ... 他でも使っているし。
ケーブルを抜く作戦もダメか。
Virtual PCの仮想ネットワークを切断する
Virtual Boxでは、ネットワークアダプタの脱着を動的に行うことができる。
うまくいくかに見えたが、Virtual PCのマシンに通信して得たURLにアクセスするようなプログラムなので、そもそもの通信ができなくなりこの方法でもダメ。
やるのなら、別のVirtual PCマシンを用意しないと。
ローカルに異なるネットワークを作成する
なんか、大掛かりになってきてしまった。
LANには192.168.0.0/24を割り当ててある。
もうひとつのセグメントを作って、192.168.100.0/24とかにする。
クライアントに経路を作ってやる。
route add -net 192.168.100.0/24 gw 192.168.0.2
これで、192.168.100.0/24行きのパケットは、192.168.0.2に転送されるはず。192.168.0.2でちゃんとルーティングすればちゃんと通信できるが、接続タイムアウトを試験したいので、192.168.0.2では何もしない。
192.168.100.0/24のネットワークも実際には存在しない。
接続先に、192.168.100.1とかを指定して、接続させてみる。
やってる、やってる。
タイムアウトは60秒に設定しているので...
60秒後にTCP接続タイムアウトになった。やったね!
接続タイムアウトを試験したい場合は、実在しないネットワークセグメントへの経路を作ってやれば、OKという話でした。
サイト内を検索
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本
コメント 0