SoftEther.co.jp トップページ / PacketiX VPN 2.0 Web サイト  
ご注意 この Web ページは、ソフトイーサ株式会社の古いバージョンの VPN ソフトウェアである「SoftEther 1.0」に関する情報が書かれたものであり、技術的な参考資料として Web サーバー上に残しているものです。したがって、この Web ページに記載されている内容は現在では正しくない場合があります。最新の情報については、SoftEther.co.jp のトップページ からご覧ください。この Web ページに記載されている事項については、現在は無効である場合があります。予めご了承の上ご覧ください。本 Web ページ内の特定の項目の内容が技術的または法的に現在有効かどうかは、ソフトイーサ株式会社までお問い合わせください。
SoftEther.co.jp トップページ
SoftEther 1.0 トップページ
ニュースリリース
PacketiX VPN 2.0 のページ
SoftEther 1.0 の概要
SE 1.0 マニュアル
SE 1.0 活用方法・導入事例
SE 1.0 Linux 版の使い方ガイド
SoftEther 1.0 公式解説サイト
SE 1.0 よくある質問と回答
SE 1.0 現段階での制限事項
SE 1.0 ダウンロード
SoftEther Alert
SoftEther Block
著作権・使用条件
お問い合わせ先
掲載記事等の一覧
メーリングリストのご案内
開発者について
SoftEther 開発日記

 

SoftEther VPN はセキュアな情報通信システムが必要とされる企業内ネットワークに必須の VPN ソフトウェアです。

 

SoftEther トップ > SoftEther 開発日記


SoftEther 開発日記
トンネリング通信の実験をしてみる (2003年7月21日)

カーネルモードの LAN カードドライバができたので、デスクトップ PC と ThinkPad の間でトンネリング通信をするプログラムを書いて見た。最初の実験なので仮想 HUB のようなものはなく、P2P で接続できるようにしてみた。

処理内容は単純で、片方の LAN カードで送信すべきデータをデバイスドライバがカプセル化して TCP パケットにしてもう片方の LAN カードに送信し、そこでカプセル化を解除して OS に通知する。

Windows のデバイスドライバは、完全にイベントドリブンで駆動している。だから 上の層 (tcpip.sys) のドライバがパケットを投げてきたら、それをカプセル化する処理を NDIS のディスパッチハンドラで記述すればよい。

ここで注意することは、ほとんどの NDIS からコールされるディスパッチハンドラは IRQL (割り込み要求レベル) が 2 以上で実行されるということである。つまり Win32 で動作している IRQL=1 の各スレッドは、IRQL=2 の処理をカーネルがやっている時は絶対に実行されない。そのため IRQL=2 のときに時間のかかる処理をやってしまうとシステム全体が遅くなってしまう。

トンネリング通信の結果、いくつかの問題が出てきた。

  • トンネリングされた仮想 LAN 上で TCP を使用して通信してみると、遅すぎる。100Mbps の LAN で 500kbps くらいしか出ていない。
     
  • 仮想 LAN で ping を送って見ると、10ミリ秒 ~ 500ミリ秒 のようなに、なぜか戻ってくる時間がバラバラである。
     

一つ目の問題が発生する原因が、よくわからない。SoftEther ではフレームは TCP パケットにカプセル化して送受信される。この方式に問題があるような気がしてきた。

早速 Web で検索すると、Why TCP Over TCP Is A Bad Idea という論文(?) が見つかった。どうやら仮想 LAN で TCP over TCP を実装するということには、大変な問題があるらしい。「TCP over TCP は使い物にならない」と書かれていた Web ページも見つけた。

やはり、TCP over TCP は無理なのだろうか、と思った。しかし SoftEther の売りである、「ファイアウォールを通過できる仮想 LAN」を実現するためには、絶対に送受信は TCP セッションを使う必要がある。したがって、TCP over TCP の動作時にいかにパフォーマンスを稼ぐかということが重要であることがわかった。

2 つ目の問題については、最初は原因がよくわからなかった。これでは絶対に実用にならないことはよくわかっていた。これもよく調べて見ると、どうやら TCP スタックが実装している「Nagle アルゴリズム」(小さいパケットを送信しようとしても、いくつかのパケットが貯まるまでしばらく待ってみて、それらをまとめて送信するアルゴリズム) が原因らしいことがわかった。

 

トンネリング通信そのものには成功したが、パフォーマンスは全然出なかった。このままでは SoftEther は使い物にならない VPN ソフトウェアとなってしまうので、何とかして解決しようと思った。

 

戻る

 
 お問い合わせ先 | 使用条件
 Copyright © 2004-2006 SoftEther Corporation. All Rights Reserved. SoftEther.co.jp