[第1の実施の形態]
本発明の第1の実施の形態は、図33に示すように、SSLセッションを確立させる際、セッション中継装置10内のCPU100のTCPと中間ドライバのTCPとの間でTCPセッションを確立させ、更にゲートウェイ装置20のTCPと中間ドライバのTCPとの間でTCPセッションを確立させ、セッション中継装置10とゲートウェイ装置20との間でTCPにおける輻輳制御を行わないようにしている。同様に、セッション中継装置10内のCPU100のTCPと中間ドライバのTCPとの間でTCPセッションを確立させ、更にゲートウェイ装置30内のCPU200のTCPと中間ドライバのTCPとの間でTCPセッションを確立させ、セッション中継装置10とゲートウェイ装置20との間でTCPにおける輻輳制御を行わないようにしている。また、同様に、ゲートウェイ装置10内のCPUのTCPと中間ドライバのTCPとの間でTCPセッションを確立させ、セッション中継装置10とゲートウェイ装置10との間でTCPにおける輻輳制御を行わないようにしている。尚、本発明において、CPU内のTCPと中間ドライバのTCPとの間でTCPセッションを確立させることをTCPのセッションを終端させるという。
更に、ゲートウェイ装置20内のNIC(Network
Interface Card)201に高速化エンジンを備えている。これらにより、ゲートウェイ装置20におけるカプセル化処理や、暗号化/復号化処理を高速化する他、TCP over TCP問題を回避し、更に、暗号化/復号化処理とカプセル化処理を同一箇所で実現し、又、NIC内の比較的安価なインタフェース上に実装することで、低価格化を実現する。
第1の実施の形態のネットワーク構成は、図1に示す従来技術1と同様である。
しかしながら、ゲートウェイ装置20と、セッション中継装置10の内部構成が、従来技術に対して異なっている。
[構成の説明]
図5は、第1の実施の形態におけるセッション中継装置10の構成を詳細に示したブロック図である。
セッション中継装置10は、CPU100と、NIC101と、メモリ102と、HDD103と、キーボード104と、マウス105と、グラフィック106により構成される。
CPU100は、中央演算装置と呼ばれ、HDD103に記録されているソフトウェア(プログラム)を読み込み、メモリ102を用いてプログラムに記載された処理を実行するハードウェアである。この処理に際しては、キーボード104や、マウス105から、ユーザによる命令を受ける他、結果をグラフィック106に出力することがある。又、NIC101からデータを受信し、若しくはNIC101に対してデータを出力することもある。
NIC101は、ネットワークインタフェースカード(Network Interface Card)と呼ばれ、イーサネット等のネットワーク用ケーブルを接続する為に、コンピュータに挿入するハードウェアである。ネットワーク(イーサネットケーブル等のケーブル)からフレーム(データ)を受信し、バス等のインタフェースを経由してCPU100に送る他、逆に、CPU100からバス等のインタフェースを経由してフレーム(データ)を受け取りネットワークに適した形に変換してネットワーク(イーサネットケーブル等のケーブル)に送出する。
メモリ102は、CPU100がソフトウェアを処理実行する際に利用される揮発性記憶装置である。又、CPU100から書き込み命令と共に送られたデータを指定されたアドレスに保存する。そして、CPU100からの読み出し命令を受けると、指定されたアドレスからデータが読み出され、CPUに送付される。通常は、電源が切れると、記憶内容が失われる揮発性になっている。
HDD103は、ハードディスクドライブと呼ばれ、ソフトウェア(プログラム)を記憶する為の不揮発性記憶装置である。CPU100から書き込み命令と共に送られたデータを指定されたアドレスに保存する。そして、CPU100からの読み出し命令を受けると、指定されたアドレスからデータが読み出され、CPUに送付される。不揮発性記憶装置は、電源が切れても、記憶内容が失われない記憶装置であり、本実施の形態では、不揮発性記憶装置を代表してHDDを用いて説明する。尚、HDD以外の不揮発性記憶装置(フラッシュメモリ、フロッピーディスク:登録商標、磁気テープ等)を用いても、同様の動作を実現できる。
キーボード104は、ユーザからのキー押下による命令を、電気信号に変換し、CPU100に伝達する入力装置である。
マウス105は、ユーザからのマウス105の移動による命令を、電気信号に変換し、CPU100に伝達する入力装置である。
グラフィック106は、CPU100からの描画命令を受け、ブラウン管や液晶画面などの表示装置に適した信号に変換する為に、コンピュータに挿入もしくはメイン基板上に実装されるハードウェアである。
図6は、図5におけるCPU100内で動作するソフトウェアの構成を示したブロック図である。
CPU100内で動作するソフトウェアは、中継アプリケーション1001、SSL1002、TCP1003、SSL1004、TCP1005、IPルーティング1006、IPスタック1007、中間ドライバ1008、ドライバ1009により構成される。
図6に挙げたソフトウェアの中、TCP1003、TCP1005、IPルーティング1006、IPスタック1007は、通常はWindows(登録商標)、Linux、BSD等のOS(オペレーティングシステム)に含まれるソフトウェアである。特に、Windowsの場合は、一般的には、ユーザがこのソフトウェアのプログラムを書き換えることは出来ない。
CPU100内では、実際には、図6に示したソフトウェア以外にも多くのソフトウェアが動作しているが、図6においては、本発明に無関係なソフトウェアは省略されている。
中継アプリケーション1001は、図9におけるHUB11内のブリッジ114と同様の動作をソフトウェアにより実現する、フレーム転送ソフトウェアである。従来技術1においては仮想HUBと呼ばれる。
中継アプリケーション1001は、SSL1002もしくはSSL1004からデータ(フレーム)を受信して宛先MACアドレス(MAC DA)を参照して転送先のSSLを選択し、適切なSSL(SSL1002もしくはSSL1004)に受信したフレームをそのまま転送する。更に、フレーム受信時に、送信元MACアドレス(MAC SA)を参照し、MACアドレスの学習を行い、どのMACアドレスをもつ端末が、どのSSL側に接続されているのかを記録する機能を有する。仮に、フレーム受信時に、宛先MACアドレスを参照しても、MACアドレスを学習していない場合は、フレームを、フレームが入力されたSSL以外の全てのSSLにブロードキャストする機能を有する。
中継アプリケーション1001は、又、中間ドライバ1008内の設定管理部1008Lに対して、SSLセッションの対向となる機器のIPアドレス(図1においてゲートウェイ装置20と、ゲートウェイ装置30)や、SSLセッションの送信元ポート番号および宛先ポート番号を通知する。この通知は、セッションの確立時、切断時の他にも、定期的に行われる。
SSL1002は、中継アプリケーション1001からデータ(フレーム)を受け取り、暗号化を行って、TCP1003にデータを送り、又はTCP1003からデータを受け取り、復号化を行って、中継アプリケーション1001にデータを送る機能、及び暗号化に用いる証明書や公開鍵、秘密鍵および共通鍵等の情報を交換する機能を有する。SSLを使用するか否かは、中継アプリケーション1001からの設定により決定され、SSLを使用しない場合は、中継アプリケーション1001からのデータを暗号化せず、そのままTCP1003に送り、又、TCP1003からのデータを復号化せず、そのまま中継アプリケーション1001に送る機能を有する。
本実施の形態においては、通常は暗号化を行う設定とする。
TCP1003は、以下の(1)〜(4)に示すような通常のTCP処理によりデータを一定形式のフォーマットに整えてパケット化し、又はパケットからデータを復元する機能を有する。
(1) SSL1002から、若しくはSSL1002を使用しない場合は中継アプリケーション1001から、データを受け取り、このデータにパケットの欠落や順序逆転を検知する為のTCPヘッダを付加して、IPルーティング1006に送る。ここで、大きなデータの場合は、分割(フラグメントとも言う)処理を行う。
(2) IPルーティング1006からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を検知する。そして、順序逆転も欠落も発生していない場合は、パケットからTCPヘッダを外してSSL1002に、SSL1002を使用していない場合は、中継アプリケーション1001に送る。この際、パケットが届いたことを知らせる受信確認パケット(ACKパケット)を、パケットの送信元を宛先に設定して返信する。
(3) (2)において、仮に、パケットの欠落が発生している場合は、再送要求パケットを送信する。又、順序逆転やフラグメントが発生している場合には、後から届くパケットを待って、データを復元する。
(4) TCPセッションを確立させる際にTCPセッション確立要求(SYNパケット)を送信し、これに応答して送信されたACKパケットを受け取り、(1)におけるパケットの送信速度を調整して輻輳制御する。
SSL1004は、SSL1002と同様の動作を行う。
TCP1005は、TCP1003と同様の動作を行う。
IPルーティング1006は、TCP1003、TCP1005、若しくはIPスタック1007からパケットを受け取り、宛先IPアドレスと宛先ポート番号を参照して、IPスタック1007、TCP1003、若しくはTCP1005に、パケットを転送する機能を有する。
IPスタック1007は、以下に示す機能を有する。
(1) IPルーティング1006からパケットを受け取り、MACアドレス等のEthernetヘッダを付加してフレームを生成して中間ドライバ1008に渡す。
(2) 中間ドライバ1008から受信したフレームよりMACヘッダを削除して、IPルーティング1006に渡す。
(3) (1)において付加するMACアドレス等を決定する為、ARPプロトコルを送受信する。
(4) DHCPプロトコル若しくは手動設定によりIPアドレス、デフォルトルート、ネットマスクなどIP通信に必要な設定を受け、これを管理する。
中間ドライバ1008は、以下に挙げる4つの機能を有する。尚、構成の詳細については後述する。
(1) TCP処理機能を有し、TCP1003、又はTCP1005とのTCP処理を終端する。尚、TCP処理を終端させるとは、TCP1003、又はTCP1005と、中間ドライバ1008内のTCPとの間でTCPセッションを確立させるための一連の処理を行うということである。
(2) フラグメント処理機能(フラグメント分割処理、フラグメント組立処理)を有し、ドライバ1009側に流れるフレームのサイズが大きな場合は分割し、又、ドライバ1009側から到着するフレームが予め分割されている場合は、組立処理を行う。
(3) カプセル化およびカプセル化解除機能を有し、IPスタック1007側から送られてくるパケットに適切なヘッダを付加もしくは適切な値にヘッダを修正し、ドライバ1009側に転送する。又、ドライバ1009側から送られて来るフレームからヘッダを削除、若しくは適切な値にヘッダを修正し、IPスタック1007側に転送する。
(4) 上記(1)〜(3)の処理対象となるフレームの識別に必要な情報を、中継アプリケーション1001より受け取る。
(5) アプリケーションからの要求に基づき、制御フレームを作成して、ドライバ1009に送信する。又、ドライバ1009より到着した制御フレームを受信し、アプリケーションに通知する。
ドライバ1009は、NIC101と、CPU100内で動作する各種ソフトウェアとの間の仲介をするソフトウェアであり、NIC101からフレームを受け取り、中間ドライバ1008若しくはIPスタック1007に送る機能を有し、更に、中間ドライバ1008若しくはIPスタック1007からフレームを受け取り、NIC101に送る機能を有する。
図7は、図6における中間ドライバ1008の内部構成を詳細に記したブロック図である。
中間ドライバ1008は、TCP1008Aとフラグメント分割1008Bと、フラグメント組立1008Cと、再カプセル化1008Dと、再カプセル化1008Eと、カプセル化解除1008Fと、カプセル化解除1008Gと、フレーム解析1008Hと、フレーム解析1008Iと、マルチプレクサ1008Jと、マルチプレクサ1008Kとで構成される。
中間ドライバ1008の構成要素の中、TCP1008Aとフラグメント分割1008Bと、フラグメント組立1008Cと、再カプセル化1008Dと、再カプセル化1008Eと、カプセル化解除1008Fと、カプセル化解除1008Gとの各部位は、TCPセッションを確立する処理の高速化を行うTCPセッションの数と同じ数だけ複数設置する場合がある。例えば、セッション中継装置10において、TCP1003とTCP1005との双方の高速化を行う場合は、中間ドライバ1008の各構成要素を2組用意する必要がある。例えば、TCP1003のみ高速化を行い、TCP1005は従来通りの転送をする場合、中間ドライバ1008の各構成要素は、一組のみで良い。
TCP1008Aは、TCP1003と同様の動作、つまり以下に挙げる四つの機能を有する。
(1) フラグメント組立1008Cからデータを受け取り、このデータにパケットの欠落や順序逆転を検知する為のTCPヘッダを付加して、再カプセル化1008Eに送る。ここで、大きなデータの場合は、分割(フラグメント分割処理とも言う)処理を行う。
(2) カプセル化解除1008Fからパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからTCPヘッダを外し、フラグメント分割1008Bに送る。この際、パケットが届いたことを知らせるACKパケットをパケットの送信元、即ち、TCP1003若しくはTCP1005に、再カプセル化1008Eを経由して返信する。
(3) (2)において、仮に、パケットの欠落が発生している場合は、再送要求パケットをTCP1003若しくはTCP1005に対して、再カプセル化1008Eを経由して送信する。又、順序逆転やフラグメント分割が発生している場合には、後から届くパケットを待ってデータを復元し(再送待機処理、フラグメント結合処理)、フラグメント分割1008Bに転送する。
(4) TCP1003若しくはTCP1005によって送信されるTCP規格に沿ったパケットを受け取り、(1)におけるパケットの送信速度を調整する。TCP1008Aは、TCPセッション確立要求(SYNパケット)を受け取ると、接続要求パケットを生成する。また、TCP1008Aは、TCPセッション確立要求に対する応答パケット(SYN+ACKパケット)を受信すると、これに対してACKパケットを返答し、接続完了通知パケットを生成する。尚、この接続要求パケット及び接続完了通知パケットは、TCP規格に沿ったパケットではなく、本発明の通信システムにおける独自のパケットである。
フラグメント分割1008Bは、TCP1008Aからパケットを受け取り、再カプセル化1008Dに転送する。この時、仮に、パケットのサイズが予め設定された大きさよりも大きい場合は、パケットを分割(フラグメント分割処理)してから、再カプセル化1008Dに転送する。
フラグメント組立1008Cは、カプセル化解除1008Gからパケットを受け取り、TCP1008Aに転送する。この時、仮に、パケットに分割を示すフラグが付加されていた場合は、パケットを一旦保存し、後から届くパケットを待ってパケットを結合し、TCP1008Aに転送する。この処理をフラグメント組立処理と呼ぶ。
再カプセル化1008Dは、フラグメント分割1008Bより送られてくるデータ(図3におけるF14)に、INET MAC F11、INET IP F12、INET TCP F13の各ヘッダを付加し、マルチプレクサ1008Kに転送する。付加するF11〜F13の各ヘッダの値は、カプセル化解除1008Fより通知を受ける。尚、設定によりINET TCP F13の位置に、TCPヘッダではなく、UDPヘッダを設定することも出来る。
再カプセル化1008Dにおいて、TCPヘッダF13を付加するのは、通信経路上に存在するFirewallや、NATルータ等(図1の例ではFirewall23)で、パケットが遮断されることを防ぐ為である。F13にUDPヘッダを設定した場合は、通信経路上にFirewallやNATルータ等が存在する場合に、通信が遮断される可能性が有る。再カプセル化1008Dにおいて付加したTCPヘッダは、フレームフォーマットはTCPの形式を有するが、実際には、TCPは付加したヘッダでは無いので、輻輳制御や再送制御には用いられない。ここで付加するヘッダF13は、厭くまで、FirewallやNATを通過する為のものであり、実際の輻輳制御や再送制御は、端末21やサーバ31内に存在するTCP(図3のフレームフォーマットF10におけるF23のTCPヘッダ部分)によって行われる。
再カプセル化1008Eは、TCP1008Aより送られてくるデータ(F12,F13,F14)に、INET MAC ヘッダF11を付加してマルチプレクサ1008Jに渡す。付加するヘッダ(F11)の値は、カプセル化解除1008Gより通知を受ける。
カプセル化解除1008Fは、フレーム解析1008Hから送られてくるパケット(Ether over SSLフレームフォーマットF10形式)から、INET MAC F11ヘッダを削除し、TCP1008Aに転送する。この時、削除したヘッダF11の内容、及びヘッダF12、ヘッダF13の各ヘッダの内容を、再カプセル化1008Dに通知する。
カプセル化解除1008Gは、フレーム解析1008Iから送られてくるパケット(Ether over SSLフレームフォーマットF10形式)から、INET MAC F11、INET IP F12、INET TCP F13の各ヘッダを削除し、フラグメント組立1008Cに転送する。この時、削除したF11〜F13の各のヘッダの内容を、再カプセル化1008Eに通知する。尚、設定によりINET TCP F13の位置に、TCPヘッダではなくUDPヘッダが設定されている場合は、このUDPヘッダの内容を、再カプセル化1008Eに通知する。
フレーム解析1008Hは、IPスタック1007からフレームを受信し、フレームが高速化処理に関係するフレームか否かを、MACアドレス、IPアドレス、TCPヘッダ、UDPヘッダ等を基に判別し、TCPセッションの確立処理の高速化に関係するフレームであれば、カプセル化解除1008Fに転送し、その他のフレームであれば、マルチプレクサ1008Kに転送する。フレームの判定に必要な情報は、中継アプリケーション1001より設定管理部1008Lを通じて通知を受ける。
フレーム解析1008Iは、ドライバ1009からフレームを受信し、フレームがTCPセッションの高速化処理に関係するフレームか否かを、MACアドレス、IPアドレス、TCPヘッダ、UDPヘッダ等を基に判別し、高速化処理に関係するフレームであれば、カプセル化解除1008Gに転送し、その他のフレームであれば、マルチプレクサ1008Jに転送する。フレームの判定に必要な情報は、中継アプリケーション1001より設定管理部1008Lを通じて通知を受ける。
更に、フレーム解析1008Iは、ドライバ1009からフレームを受信し、フレームが機器や高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)である場合は、この制御フレームを制御フレーム送受信部1008Mに転送する。特殊フレームであるか否かは、通常は、MAC DAとMAC SAにより判断する。MAC DA又はMAC SAの何れかに、予め、規定したアドレス範囲のMACアドレス(制御用MACアドレスと呼ぶ。例えば00004C0000xx)が記載されている場合は、このフレームを制御フレームと判断する。
マルチプレクサ1008Jは、フレーム解析1008Iと、再カプセル化1008Eからフレームを受信し、IPスタック1007に転送する。この際、フレームの同時到着により、欠落が発生しないようバッファ動作を行う。
マルチプレクサ1008Kは、フレーム解析1008Hと、再カプセル化1008Dからフレームを受信し、ドライバ1009に転送する。この際、フレームの同時到着により、欠落が発生しないようバッファ動作を行う。
設定管理部1008Mは、中継アプリケーション1001より、高速化処理に関連するセッションの情報(IPアドレス、ポート番号等)の通知を受け、フレーム解析1008H及びフレーム解析1008Iの設定を行う。
制御フレーム送受信部1008Lは、マルチプレクサ1008Kに機器や高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)を送り、又、フレーム解析1008Iより制御フレームを受信する。制御フレームは、高速化エンジン制御2001等のアプリケーションからの要求により送信される。又、受信した制御フレームは、適切なアプリケーションに転送される。
上記を纏めると、中間ドライバで1008は、フラグメントに関連する処理を2カ所で行っている。一つ目は、TCP1008Aで、ここでは、TCP1003やTCP1005との間でフラグメント処理を行う。二つ目は、フラグメント分割1008Bとフラグメント組立1008Cで、ここでは、高速化エンジン2014との間でフラグメント処理を行う。
ここで、中間ドライバ1008、高速化エンジン2014、TCP1003、更にTCP1004によるフラグメント処理は、出来れば発生させないことが望ましい。可能であれば、端末21内のTCP2102において最大フレーム長を小さく設定することで、箇所におけるフラグメント処理の発生を防止する。特に、高速化エンジン2014におけるフラグメント組立処理は、ハードウェア構成が複雑になる為、これを出来るだけ行わないように、端末21やサーバ31内のTCP最大フレーム長を設定する。
図8は、図5におけるNIC101の構成を詳細に示したブロック図である。
NIC101は、MAC1011、PHY1012、及びポート1013により構成される。
MAC1011は、CPU100とPCIバス等の高速なインタフェースで接続され、PHY1012とMII等のインタフェースで接続され、これら両インタフェースの間の仲介を行うハードウェアである。MAC1011は、CPU100側からデータ(フレーム)を受け取ると、送信元MACアドレス(MAC SA)の付加などの制御を行い、受け取ったフレームをPHY1012側に転送する。逆に、PHY1012側からフレームを受け取り、宛先MACアドレス(MAC DA)により自ノード宛か否かを判断し、自ノード宛もしくはブロードキャスト・マルチキャストのフレームであれば、CPU100側に転送する。
PHY1012は、MAC1011とMII等のインタフェースで接続され、ポート1013とIEEE802.3規格(10BASE−T、100BASE−TX、1000BASE−T、1000BASE−SX等)のインタフェースで接続され、これら両インタフェースの仲介を行うハードウェアである。PHY1012は、MAC1011側からデータ(フレーム)を受け取ると、ポート1013側に適した信号(電気信号もしくは光信号)に変換し、ポート1013を通してケーブルに送信する。又、ポート1013側から信号(電気信号もしくは光信号)を受信し、MAC1011側のインタフェース(MII等)に適した信号に変換し、MAC1011側にデータ(フレーム)を送信する。
ポート1013は、イーサネットケーブル(UTPや光ファイバなど)を接続する接続口である。
図9は、第1の実施の形態におけるHUB11の構成を詳細に示したブロック図である。
HUB11は、ポート111と、ポート112と、ポート113と、ブリッジ114により構成される。
ポート111は、図8のNIC101におけるポート1013と同様に、イーサネットケーブル(UTPや光ファイバなど)を接続する接続口である。
ポート112は、ポート111と同様である。
ポート113は、ポート111と同様である。
ブリッジ114は、ポート111〜ポート113よりフレームを受け取り、宛先MACアドレスを参照して、ポート111〜ポート113の何れかにフレームを転送する機能を有する。更に、フレーム受信時に、送信元MACアドレスを参照し、MACアドレスの学習を行い、どのMACアドレスをもつ端末が、どのポートに接続されているのかを記録する機能を有する。仮に、フレーム受信時に、宛先MACアドレスを参照しても、MACアドレスを学習していない場合は、フレームを、フレームが入力されたポート以外のポートにブロードキャストする機能を有する。
ブリッジ114は、ハードウェアで構成される場合と、CPU上で動作するソフトウェアにより構成される場合との両方の場合が存在する。仮に、ソフトウェアで構成される場合は、CPU内ではブリッジソフトウェアの他、ドライバ等の関連するソフトウェアも動作する。
図9においては、図8に記載のNICに相当する部分を省略して記載している。つまり、図8におけるMACは、ブリッジ114の一部機能としてブリッジ114に内蔵されるか、若しくはポート111〜113の一部機能としてポート111〜113に内蔵される。同様に、PHYも、ブリッジ114の一部機能としてブリッジ114に内蔵されるか、若しくはポート111〜113の一部機能としてポート111〜113に内蔵される。
図10は、第1の実施の形態におけるゲートウェイ装置20内に存在する、CPU200内で動作するソフトウェア構成を詳細に示したブロック図である。
CPU200内で動作するソフトウェアは、高速化エンジン制御2001,SSL2002,TCP2003,IPルーティング2004,IPスタック2005、中間ドライバ2006、ドライバ2007で構成される。
尚、ゲートウェイ装置20は、図5に示すセッション中継装置10と同様のハードウェア構成を有するが、図5におけるCPU100がCPU200となり、NIC101がNIC201になる点等、付番において異なる。
図10に挙げたソフトウェアの中、TCP2003、IPルーティング2004、IPスタック2005は、通常は、Windows、Linux、BSD等のOS(オペレーティングシステム)に含まれるソフトウェアである。特に、Windowsの場合は、一般的には、ユーザがこのソフトウェアのプログラムを書き換えることは出来ない。
CPU200内では、実際には、図10に示したソフトウェア以外にも多くのソフトウェアが動作しているが、図10においては本発明に無関係なソフトウェアは省略している。
高速化エンジン制御2001は、以下に挙げる動作を行う。
(1) セッション中継装置10内の中継アプリケーション1001との間のSSLセッションの接続および切断に必要な設定を、SSL2002に対して行う。
(2) SSLセッションの相手方機器(セッション中継装置10)のIPアドレスや宛先ポート、及び自ノード(ゲートウェイ装置20)側のSSLセッションの送信元ポート番号や送信元IPアドレス、更にはSSLセッションの相手方機器(セッション中継装置10)のIPアドレスに対してARP問い合わせを行った結果、得られる宛先MACアドレスと自ノードの送信元MACアドレスとを、中間ドライバ2006を経由して、高速化エンジン2014に通知する。中間ドライバ2006から高速化エンジン2014の間は、制御フレームを用いてアドレス等を転送する。
(3) SSL2002からSSLセッションの相手方(セッション1001内のSSL1002)の認証完了通知を受けると、高速化処理開始命令と、相手方の公開鍵と自身の秘密鍵、さらには共通鍵を、中間ドライバ2006を経由して、高速化エンジン2014に転送する。中間ドライバ2006から高速化エンジン2014の間は、制御フレームを用いて公開鍵、秘密鍵および共通鍵を転送する。尚、本実施の形態における高速化処理開始命令は、相手方の公開鍵と自身の秘密鍵と共通鍵とを、中間ドライバ2006を経由して高速化エンジン2014に転送する構成を用いて説明するが、相手方の公開鍵と自身の秘密鍵と共通鍵とを総合して高速化処理開始命令としても良い。
(4) SSLセッションの設定完了時、及び切断時に、中間ドライバ2006を経由して、高速化エンジン2014に、暗号化処理の開始、及び終了を命令する。この時、中間ドライバ2006から高速化エンジン2014の間は、制御フレームを用いて暗号化処理の開始、及び終了の命令を転送する
(5) 高速化エンジン2014より中間ドライバ2006を経由して通知されるSSLセッションの切断要求を受信し、SSL2002に対して切断要求を行う。
SSL2002は、暗号化に用いる証明書や公開鍵、秘密鍵および共通鍵等の情報を交換する機能を有する。本実施の形態においては、SSL2002はSSL1002との間で証明書(公開鍵)を交換する。そして、PKI等の方式に従って証明書の署名確認等を行い、認証された場合には、高速化エンジン制御2001に認証完了を通知する。
通常、SSLは暗号化および複号化の処理も併せて行うが、本実施の形態においては、ゲートウェイ装置20では暗号化および複号化の処理を行わず、高速化エンジン2014において暗号化および復号化を行っている。本実施の形態において、セッション中継装置10では、SSL1002及びSSL1004において、暗号化および復号化を行う。
TCP2003は、以下の(1)〜(4)に示すような通常のTCP処理によりデータを一定形式のフォーマットに整えてパケット化し、又はパケットからデータを復元するの機能を有する。
(1) SSL2002から、若しくはSSL2002を使用しない場合は高速化エンジン制御2001から、データを受け取り、受け取ったデータにパケットの欠落や順序逆転を検知する為のTCPヘッダを付加して、IPルーティング2004に送る。ここで、大きなデータの場合は、分割(フラグメントとも言う)処理を行う。
(2) IPルーティング2004からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからTCPヘッダを外し、SSL2002に、若しくはSSL2002を使用していない場合は、カプセル化アプリケーション2001に送る。この際、パケットが届いたことを知らせるACKパケットをパケットの送信元に返信する。
(3) (2)において、仮に、パケットの欠落が発生している場合は、再送要求パケットを送信する。又、順序逆転やフラグメントが発生している場合には、後から届くパケットを待って、データを復元する。
(4) TCPセッションを確立させる際にTCPセッション確立要求パケット(SYNパケット)を送信する。ACKパケットを受け取り、(1)におけるパケットの送信速度を調整して輻輳制御する。
IPルーティング2004は、TCP2003、若しくはIPスタック2005からパケットを受け取り、宛先IPアドレスと宛先ポート番号を参照して、IPスタック2005、若しくはTCP2003に、パケットを転送する機能を有する。
IPスタック2005は、以下に示す機能を有する。
(1) IPルーティング2004からパケットを受け取り、MACアドレス等のEthernetヘッダを付加してブリッジ2006に渡す。
(2) ブリッジ2006から受信したパケットよりMACヘッダを削除して、IPルーティング2004に渡す。
(3) (1)において付加するMACアドレス等を決定する為、ARPプロトコルを送受信する。
(4) DHCPプロトコル若しくは手動設定により、IPアドレス、デフォルトルート、ネットマスク等のIP通信に必要な設定を受け、これを管理する。
中間ドライバ2006は、図7に示す中間ドライバ1008と同様の中間ドライバである。中間ドライバ2006は、以下に挙げる5つの機能を有する。尚、中間ドライバ2006の詳細については、中間ドライバ1008と同様であるため省略する。
(1) TCP処理機能を有し、TCP2003を終端する。
(2) フラグメント処理機能(フラグメント分割処理、フラグメント組立処理)を有し、ドライバ2007側に流れるフレームのサイズが大きな場合は分割し、又、ドライバ2007側から到着するフレームが予め分割されている場合は、組立処理を行う。
(3) カプセル化およびカプセル化解除機能を有し、IPスタック2005側から送られて来るパケットに適切なヘッダを付加、削除、若しくは修正し、ドライバ2007側に転送する。又、ドライバ2007側から送られてくるパケットのヘッダを削除、付加、若しくは修正し、IPスタック2005側に転送する。
(4) 上記(1)〜(3)の処理対象となるフレームの識別に必要な情報を、高速化エンジン制御2001より受け取る。
(5) 高速化エンジン制御2001からの要求に基づき、制御フレームを作成して、ドライバ2007に送信する。又、ドライバ2007より到着した制御フレームを受信し、高速化エンジン2001に通知する。
ドライバ2007は、NIC201と、CPU200内で動作するソフトウェアとの間の仲介をするソフトウェアであり、NIC201からパケットを受け取り中間ドライバ2006に送る機能を有し、更に、中間ドライバ2006からフレームを受け取り、NIC201に送る機能を有する
図11は、第1の実施の形態におけるゲートウェイ装置20内に存在する、NIC201の構成を詳細に示したブロック図である。
NIC201は、MAC2011,PHY2012、ポート2013、及び高速化エンジン2014により構成される。
MAC2011は、図8におけるMAC1011と同様の動作を行う。
PHY2012は、図8におけるPHY1012と同様の動作を行う。
ポート2013は、イーサネットケーブル(UTPや光ファイバなど)を接続する接続口である。
高速化エンジン2014は、MAC2011とPHY2012との間のインタフェース(MII等)に割り込む形で実装され、SSLセッションを用いて通信する際の暗号化、復号化、カプセル化、カプセル化解除、フラグメント分割、フラグメント組立の各処理を行うハードウェアである。又、高速化エンジン2014の動作に必要な設定情報を送受信する為に、制御フレームの送受信を行う。通常は、FPGAやASIC等の集積回路により高速化エンジン2014実現される。
高速化エンジン2014の詳細について説明する。
図12は、図11における高速化エンジン2014の構成を詳細に示したブロック図である。
高速化エンジン2014は、インタフェース2014A、フレーム解析2014B、インタフェース2014C、制御フレーム解析2014D、マルチプレクサ2014E、マルチプレクサ2014F、暗号化2014G、フラグメント分割2014H、カプセル化2014I、カプセル化解除2014J、フラグメント解除2014K、復号化2014L、制御フレーム送受信部2014Mにより構成される。
インタフェース2014Aは、PHY2012と接続されたバス(MII)等と高速化エンジンの仲介をする部分である。PHY2012側から到着したフレームを、高速化エンジンの動作に適した信号に変換してフレーム解析2014Bに転送する。又、高速化エンジン側、即ち、マルチプレクサ2014FからPHY2012側に送信するフレームを、PHY2012と接続されたバス(MII)等に適した信号に変換する。
フレーム解析2014Bは、インタフェース2014Aからフレームを受信し、以下に示す(1)〜(4)の順序で宛先を決定して転送する。
(1) 自ノード宛て、かつ、予め設定されたSSLセッションのフレームであれば(セッション中継装置10によって暗号化されたフレームであれば)、このフレームをカプセル化解除2014Jに転送する。
(2) (1)以外の自ノード宛てフレームであれば、受信したフレームをマルチプレクサ2014Eに転送する。
(3) MAC DAにブロードキャストMAC、若しくはブロードキャストMACが付加されたブロードキャストフレーム、又はマルチキャストフレームであれば、マルチプレクサ2014Eと暗号化2014Gとに、このフレームをコピーして転送する。
(4) (1)〜(3)以外のフレームであれば、暗号化2014Gに転送する。
インタフェース2014Cは、MAC2011と接続されたバス(MII)等と高速化エンジンとの仲介をする部分である。MAC2011側から到着したフレームを、高速化エンジンの動作に適した信号に変換し、制御フレーム解析2014Dに転送する。又、高速化エンジン側、即ち、マルチプレクサ2014EからMAC2011側に送信するフレームを、MAC2011と接続されたバス(MII)等に適した信号に変換する。
制御フレーム解析2014Dは、インタフェース2014Cからフレームを受信し、このフレームが高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)である場合は、フレームを制御フレーム送受信部2014Mに転送する。特殊フレームで無い場合は、マルチプレクサ2014Fに転送する。特殊フレームであるか否かは、通常は、MAC DAとMAC SAにより判断する。MAC DA若しくはMAC SAの何れかに、予め規定したアドレス範囲のMACアドレス(制御用MACアドレスと呼ぶ。例えば00004C000000〜FF)が記載されている場合は、フレームを制御フレームと判断する。
マルチプレクサ2014Eは、フレーム解析2014Bおよび制御フレーム送受信部2014Mよりフレームを受信し、必要であれば、キューに保存して送信タイミングを調整し、インタフェース2014Cに送信する。キューに保存するのは、フレーム解析2014B側から到着するフレームと、制御フレーム送受信部2014M側から到着するフレームの衝突を避ける為である。
マルチプレクサ2014Fは、制御フレーム解析2014D及びカプセル化2014I、更に復号化2014Lよりフレームを受信し、必要であれば、キューに保存して送信タイミングを調整し、インタフェース2014Aに送信する。キューに保存するのは、制御フレーム解析2014D、カプセル化2014I、更に復号化2014Lの各々から到着するフレームの衝突を避ける為である。
暗号化2014Gは、フレーム解析2014Bよりフレームを受信し、3DES等の方法で暗号化を行い、フラグメント分割2014Hに転送する。暗号化に用いる公開鍵と共通鍵は、制御フレーム送受信部2014Mより通知を受けたものを利用する。
フラグメント分割2014Hは、図7に示す中間ドライバ1008内のフラグメント分割1008Bと同様の動作を行う。すなわち、暗号化2014Gからパケットを受け取り、カプセル化2014Iに転送する。この時、仮に、パケットのサイズが予め設定された大きさよりも大きい場合は、パケットを分割(フラグメント分割処理)してから、カプセル化2014Iに転送する。
カプセル化2014Iは、図7に示す中間ドライバ1008内の再カプセル化1008Dと同様の動作を行う。すなわち、フラグメント分割2014Hより送られて来るデータ(図3におけるF14)に、INET MAC F11、INET IP F12、INET TCP F13の各ヘッダを付加し、マルチプレクサ2014Fに転送する。付加するF11〜F13の各ヘッダの値は、制御フレーム送受信部2014Mより通知を受ける。尚、設定により、INET TCP F13の位置に、TCPヘッダでは無く、UDPヘッダを設定することも出来る。
カプセル化2014Iにおいて、TCPヘッダF13を付加するのは、通信経路上に存在するFirewallやNATルータ等(図1の例ではFirewall23)でパケットが遮断されることを防ぐ為である。F13にUDPヘッダを設定した場合は、通信経路上にFirewallやNATルータ等が存在する場合に、通信が遮断される可能性がある。カプセル化2014Iにおいて付加したTCPヘッダは、フレームフォーマットはTCPの形式を有するが、実際には、TCPは付加したヘッダでは無いので、輻輳制御や再送制御には用いられない。ここで付加するヘッダF13は、厭くまで、FirewallやNATを通過する為のものであり、実際の輻輳制御や再送制御は、端末21やサーバ31内に存在するTCP(図3のフレームフォーマットF10におけるF23のTCPヘッダ部分)によって行われる。
カプセル化解除2014Jは、図7に示す中間ドライバ1008内のカプセル化解除1008Gと同様の動作を行う。カプセル化解除2014Jは、フレーム解析2014Bから送られて来るパケット(Ether over SSLフレームフォーマットF10形式)から、INET MAC F11、INET IP F12、INET TCP F13の各ヘッダを削除し、フラグメント解除2014Kに転送する。尚、設定により、INET TCP F13の位置に、TCPヘッダでは無く、UDPヘッダが設定されている場合も、TCPヘッダの場合と同様の処理を行う。
フラグメント解除2014Kは、図7に示す中間ドライバ1008内のフラグメント組立1008Cと同様の動作を行う。フラグメント解除2014Kは、カプセル化解除2014Jからパケットを受け取り、復号化2014Lに転送する。この時、仮に、パケットに分割を示すフラグが付加されていた場合は、パケットを一旦保存し、後から届くパケットを待ってパケットを結合し、復号化2014Lに転送する。この処理をフラグメント組立処理と呼ぶ。
復号化2014Lは、フラグメント解除2014Kよりフレームを受信し、3DES等の方法で復号化を行い、マルチプレクサ2014Fに転送する。復号化に用いる秘密鍵と共通鍵は、制御フレーム送受信部2014Mより通知を受けたものを利用する。
制御フレーム送受信部2014Mは、図7に示す中間ドライバ1008内の制御フレーム送受信部1008Mとの間で、制御フレームの送受信を行う。制御フレーム送受信部2014Mは、マルチプレクサ2014Eに高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)を送り、又、制御フレーム解析2014Dより制御フレームを受信する。制御フレームで公開鍵を受け取った場合は、暗号化2014Gに通知する。制御フレームで秘密鍵を受け取った場合は、復号化2014Lに通知する。制御フレームで共通鍵を受け取った場合は、暗号化2014Gと復号化2014Lに通知する。制御フレームで、SSLセッションの相手方機器(セッション中継装置10)のIPアドレスや宛先ポート、及び自ノード(ゲートウェイ装置20)側のSSLセッションの送信元ポート番号や送信元IPアドレス、更には宛先MACアドレスと、自ノードの送信元MACアドレスを受け取った場合、フレーム解析2014Bに通知する。更に、制御フレームで暗号化処理の開始、及び終了の命令を受け取った場合、フレーム解析2014Bに通知する。
以上のように、高速化エンジン2014は、中間ドライバ2006や、中間ドライバ1008と対になって処理を行う。
図13は、第1の実施の形態における端末21内に存在する、CPU210内で動作するソフトウェア構成を詳細に示したブロック図である。
CPU210内で動作するソフトウェアは、アプリケーション2101、TCP2102、IPルーティング2103、IPスタック2104、及びドライバ2105で構成される。
尚、端末21は、図5に示すセッション中継装置10と同様のハードウェア構成を有するが、図5におけるCPU100がCPU210となり、NIC101がNIC211になる点において異なる。
図13に挙げたソフトウェアの中、TCP2102、IPルーティング2103、IPスタック2104は、通常は、Windows、Linux、BSD等のOS(オペレーティングシステム)に含まれるソフトウェアである。特に、Windowsの場合は、一般的には、ユーザがプログラムを書き換えることは出来ない。
CPU210内では、実際には、図13に示したソフトウェア以外にも多くのソフトウェアが動作しているが、図13においては、本発明に無関係なソフトウェアは省略している。
アプリケーション2101は、サーバ31内のアプリケーション3101と双方向の通信を行うアプリケーションである。アプリケーション2101は、代表的には、WEBブラウザソフトが適用されるが、この場合、サーバ31内のアプリケーション3101は、WEBサーバアプリケーションが適用される。アプリケーション2101は、WEBブラウザソフトの他、TELNETクライアントソフト、FTPクライアントソフト、会計クライアントソフト、ファイル共有クライアントソフト、データベースクライアントソフト等、各種のアプリケーションが適用可能である。
この場合、サーバ31内のアプリケーション3101も、アプリケーション2101に対応し、TELNETサーバソフト、FTPサーバソフト、会計サーバソフト、ファイル共有サーバソフト、データベースサーバソフト等が適用される。
TCP2102は、図10に示すTCP2003や、図6に示すTCP1003、及びTCP1005と同様の動作を行う。すなわち、TCP2102は、以下の(1)〜(4)の処理により、データを一定形式のフォーマットに整えてパケット化し又はパケットからデータを復元する機能を有する。
(1) アプリケーション2101からデータを受け取り、このデータにパケットの欠落や順序逆転を検知する為のTCPヘッダを付加して、IPルーティング2103に送る。ここで、大きなデータの場合は、分割(フラグメントとも言う)処理を行う。
(2) IPルーティング2103からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからTCPヘッダを外し、アプリケーション2101に送る。この際、パケットが届いたことを知らせるACKパケットをパケットの送信元に返信する。
(3) (2)において、仮に、パケットの欠落が発生している場合は、再送要求パケットを送信する。又、順序逆転やフラグメントが発生している場合には、後から届くパケットを待って、データを復元する。
(4) ACKパケットを受け取り、(1)におけるパケットの送信速度を調整する。
ここで、TCP2102においては、最大フレーム長を小さく設定する。これは、中間ドライバ1008、高速化エンジン2014、TCP1003、更にはTCP1004によるフラグメント処理を防止する為である。
IPルーティング2103は、図10に示すIPルーティング2004や、図6に示すIPルーティング1006と同様の動作を行う。すなわち、IPルーティング2103は、TCP2102、若しくはIPスタック2104からパケットを受け取り、宛先IPアドレスと宛先ポート番号を参照して、IPスタック2104、若しくはTCP2102に、パケットを転送する機能を有する。
IPスタック2104は、図10に示すIPスタック2005や、図6に示すIPスタック1007と同様の動作を行う。すなわち、IPスタック2104は、以下に示す機能を有する。
(1) IPルーティング2103からパケットを受け取り、MACアドレス等のEthernetヘッダを付加してドライバ2105に渡す。
(2) ドライバ2105から受信したパケットよりMACヘッダを削除して、IPルーティング2103に渡す。
(3) (1)において付加するMACアドレス等を決定する為、ARPプロトコルを送受信する。
(4) DHCPプロトコル若しくは手動設定により、IPアドレス、デフォルトルート、ネットマスクなどIP通信に必要な設定を受け、これを管理する。
ドライバ2105は、図10に示すドライバ2007や、図6に示すIPスタック1007と同様の動作を行う。すなわち、ドライバ2105は、NIC211と、CPU210内で動作するソフトウェアとの間の仲介をするソフトウェアであり、NIC211からパケットを受け取り、IPスタック2104に送る機能を有し、更に、IPスタック2104からパケットを受け取り、NIC211に送る機能を有する。
図14は、第1の実施の形態におけるFirewall23の構成を詳細に示したブロック図である。
Firewall23は、図5に示すセッション中継装置10に、NIC232を追加した構成のコンピュータである。Firewall23は、CPU230と、NIC231と、NIC232と、メモリ233と、HDD234と、キーボード235と、マウス236と、グラフィック237により構成されるが、キーボード、マウス、グラフィックは接続されない場合もある。
CPU230は、図5におけるCPU100と同様である。
NIC231は、図5におけるNIC101と同様である。
NIC232は、図5におけるNIC101と同様である。
メモリ233と、HDD234と、キーボード235と、マウス236と、グラフィック237についても、各々、図5におけるメモリ102と、HDD103と、キーボード104と、マウス105と、グラフィック106と同様である。
図15は、第1の実施の形態におけるFirewall23内に存在する、CPU230内で動作するソフトウェア構成を詳細に示したブロック図である。
CPU230内で動作するソフトウェアは、IPルーティング2301、IPスタック2302、IPスタック2303、ドライバ2304、およびドライバ2305で構成される。
図15に挙げたソフトウェアの中、IPルーティング2301、IPスタック2302、及びIPスタック2303は、通常は、Windows、Linux、BSD等のOS(オペレーティングシステム)に含まれるソフトウェアである。特に、Windowsの場合は、一般的には、ユーザがこのソフトウェアのプログラムを書き換えることは出来ない。
CPU230内では、実際には、図15に示したソフトウェア以外にも多くのソフトウェアが動作しているが、図15においては、本発明に無関係なソフトウェアは省略している。
IPルーティング2301は、IPスタック2302、もしくはIPスタック2303からパケットを受け取り、宛先IPアドレスと宛先ポート番号を参照して、IPスタック2303、若しくはIPスタック2302に、パケットを転送する機能を有する。この際、IPルーティング2301は、インターネット1(IPスタック2303側)とイントラネット2(IPスタック2302側)の間の通信を、予め決められた設定に従って制限する動作を行う。例えば、イントラネット2内部の装置からインターネット1の各装置へTCPを用いて通信開始の要求をした場合、以降の通信は双方向で自由に行えるが、逆に、インターネット1の各装置からイントラネット2の各装置へTCPを用いて通信開始の要求を行った場合、この要求を遮断し、以降の通信も双方向で遮断する。遮断の際は、パケットを廃棄する処理を行う。
IPスタック2302は、図13に示すIPスタック2104、図10に示すIPスタック2005や、図6に示すIPスタック1007と同様の動作を行う。すなわち、IPスタック2302は、以下に示す機能を有する。
(1) IPルーティング2301からパケットを受け取り、MACアドレス等のEthernetヘッダを付加してドライバ2304に渡す。
(2) ドライバ2304から受信したパケットよりMACヘッダを削除して、IPルーティング2301に渡す。
(3) (1)において付加するMACアドレス等を決定する為、ARPプロトコルを送受信する。
(4) DHCPプロトコル若しくは手動設定により、IPアドレス、デフォルトルート、ネットマスクなどIP通信に必要な設定を受け、これを管理する。
IPスタック2303は、IPスタック2302と同様の動作を行う。
ドライバ2302は、図10に示すドライバ2007や、図6に示すIPスタック1007と同様の動作を行う。すなわち、ドライバ2302は、NIC231と、CPU230内で動作するソフトウェアとの間の仲介をするソフトウェアであり、NIC231からパケットを受け取りIPスタック2302に送る機能を有し、更に、IPスタック2302からパケットを受け取り、NIC231に送る機能を有する。
ドライバ2305は、ドライバ2302と同様の動作を行う。
[動作の説明]
[SSLセッションの確立動作]
図16を用いて、第1の実施の形態において、ゲートウェイ装置20からセッション中継装置10へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、HUB22やHUB32が、既に、端末21、サーバ31、Firewall23のLAN側,Firewall33のLAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。又、HUB11は、Firewall23のWAN側、Firewall33のWAN側、セッション中継装置10の各装置のMACアドレスを学習しているものとする。又、Firewall23およびFirewall33は、イントラネット内部の装置(LAN側)からインターネットの各装置(WAN側)へTCPを用いて通信開始の要求をした場合、通信開始の要求以降の通信は双方向で自由に行えるが、逆に、インターネットの各装置(WAN側)からイントラネットの各装置(LAN側)へTCPを用いて通信開始の要求を行った場合、この要求は遮断され、以降の通信も双方向で遮断されるとする。
セッション中継装置10内の中継アプリケーション1001は、起動後ゲートウェイ装置20からの接続待ち受け状態になると、中間ドライバ1008に対して、待ち受け開始を通知する。この通知には、セッション中継装置10のIPアドレス、中継アプリケーション1001の待ち受けポート番号が含まれる。
中間ドライバ1008は、中継アプリケーション1001からの通知を受けると、フレーム解析処理において、中継アプリケーション1001宛てのパケットが到着した際に、TCP接続/終端などの処理が出来るように設定を行う。
ゲートウェイ装置20内の高速化エンジン制御2001は、ユーザからのセッション中継装置10内の中継アプリケーション1001への接続要求を受け、SSL2002にセッション中継装置10内の中継アプリケーション1001への通信開始を指示する。同時に、中間ドライバ2006に対して、セッション中継装置10内の中継アプリケーション1001への通信開始を通知する。この通知には、セッション中継装置10のIPアドレス、中継アプリケーション1001のポート番号、及び高速化エンジン制御2001の送信元ポート番号、更にゲートウェイ装置20のIPアドレスが含まれる。
SSL2002は、高速化エンジン制御2001からの通信開始指示を受け、SSL1002との間でSSLセッションを確立する為に、TCP2003にセッション中継装置10内の中継アプリケーション1001への通信開始を指示する。
TCP2003は、SSL2002からの通信開始指示を受け、TCP1003との間でTCPセッションを確立する為に、IPルーティング2004に対して、TCP1003とのTCPセッション確立要求パケット(SYN)を送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにセッション中継装置10宛、宛先ポート番号にTCP1003が設定されている。このTCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットのことである。本明細書においては、TCPセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYNパケット+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング2004は、TCP2003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック2005に転送する。
IPスタック2005は、IPルーティング2004より受信したパケットに、Firewall23内のイントラネット2側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを作成し、中間ドライバ2006に転送する。
中間ドライバ2006は、IPスタック2005からフレームを受信し、フレーム解析を行う。解析の結果、フレームは予め高速化エンジン制御2001より通知された宛先IP、宛先ポート、送信元IP、送信元ポートが付加されたフレームであるので、カプセル化解除においてMACヘッダを取り外し、パケットにする。そして、中間ドライバ2006のTCPでTCP2003からTCP1003へのTCP処理を終端させる。すなわち、TCP2003は、元々は、TCP1003に対してTCPセッション確立要求を送信したが、実際は、この要求に対して中間ドライバ2006内のTCPが受信して保留し、TCP2003と中間ドライバ2006内のTCPとの間で、TCPセッションの確立を終端する。
中間ドライバ2006は、上記確立要求の処理を終端させる際、中間ドライバ1008に対して、TCP1003との間でセッション(UDP等の輻輳制御の無いセッション)の接続を要求する為に、ドライバ2007に接続要求のパケットを送る。尚、この接続要求パケットはTCP規格に沿ったパケットではなく、本発明の通信システムにおける独自のパケットである。この接続要求パケットには宛先IPアドレスとしてセッション中継装置10を、宛先ポート番号としてTCP1003を設定する。そしてこのパケットにFirewall23内のイントラネット2側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定して、接続要求フレームが生成する。
ドライバ2007は中間ドライバ2006から接続要求フレームを受信し、MAC2011に転送する。
MAC2011はドライバ2007から接続要求フレームを受信し、高速化エンジン2014に転送する。
高速化エンジン2014は、MAC2011から接続要求フレームを受信し、そのままPHY2012に転送する。
PHY2012は、高速化エンジン2014から接続要求フレームを受信し、ポート2013に転送する。
ポート2013は、PHY2012から接続要求フレームを受信し、イーサネットケーブルを経由してポート222に転送する。
ポート222は、ポート2013から接続要求フレームを受信し、ブリッジ224に転送する。
ブリッジ224は、ポート222からの接続要求フレームを受信すると、MAC DAを参照し、MAC DAがFirewall23のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームをそのままFirewall23側のポート(ポート223)に出力する。
ポート223は、ブリッジ224から接続要求フレームを受信し、イーサネットケーブルを経由してFirewall23内のポート2313に転送する。
Firewall23は、HUB22内のポート223から接続要求フレームを受信し、ポート2313、PHY2312、MAC2311、ドライバ2304、IPスタック2302、IPルーティング2301、IPスタック2304、ドライバ2305、MAC2321、PHY2322、ポート2323の経路でフレームを転送し、HUB11内のポート11に転送する。
HUB11内のポート111は、ポート2323から接続要求フレームを受信し、ブリッジ114に転送する。
ブリッジ114は、ポート111からの接続要求フレームを受信すると、MAC DAを参照し、MAC DAがセッション中継装置10側のものであることから、過去のルーティング学習結果に基づき、このフレームをそのままセッション中継装置10側のポート(ポート112)に出力する。
ポート112は、ブリッジ114から接続要求フレームを受信し、イーサネットケーブルを経由してセッション中継装置10内のポート1013に転送する。
セッション中継装置10は、HUB22内のポート112から接続要求フレームを受信し、ポート1013、PHY1012、MAC1011、ドライバ1009の経路でフレームを転送し、中間ドライバ1008に転送する。
中間ドライバ1008は、ドライバ1009から接続要求フレームを受信し、フレームの解析を行う。
解析の結果、このフレームは予め中継アプリケーション1001より通知された、中継アプリケーション1001への宛先IP、及び宛先ポートが付加されたフレームであるので、このフレームを受信し、カプセル化解除においてMACヘッダを取り外し、パケットにする。このパケットは、中間ドライバ2006から中間ドライバ1008に向けて送信された、TCP1003への接続要求パケットである為、中間ドライバ1008内のTCPは、TCP1003との間でTCPセッションを確立する為に、TCP1003とのセッション確立に必要なパケットを送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにセッション中継装置10宛、宛先ポート番号にTCP1003が設定され、更に送信元IPアドレスにはゲートウェイ装置20のIPアドレスが設定され、送信元ポート番号にはTCP2003のポート番号が設定される。そしてこのパケットには、中間ドライバ1008内の再カプセル化1008EによってMACアドレスが付加され、フレームの形にしてIPスタック1007に転送される。セッション確立に必要なパケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットパケットのことである。本明細書においては、TCPセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYN+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、説明を省略する。
中間ドライバ1008内のTCPは、TCP2003の名前をかたってTCP1003に対して接続要求を送信する。従って、TCP1003は恰もTCP2003と通信しているかのように認識し、更にTCP2003は恰もTCP1003と通信しているかのように認識する。しかしながら、実際のTCPの確立処理は、TCP2003と中間ドライバ2006内のTCPとの間、及び、中間ドライバ1008とTCP1003との間で行われ、更に、中間ドライバ2006と中間ドライバ1008との間は、UDP等の輻輳制御のない方法(本発明の通信システムにおける独自のパケット)で、別途に通信が行われる。そして、TCP2003と中間ドライバ2006間のTCPセッションと、中間ドライバ2006と中間ドライバ1008の間のUDP等何らかの通信セッション、更に中間ドライバ1008とTCP1003の間のTCPセッションが、中間ドライバ2006及び中間ドライバ1008によって相互に接続・中継されることにより、恰もTCP2003とTCP1003との間でTCPセッションが確立しているかのように通信が行われる。
IPスタック1007は、中間ドライバからフレームを受信し、MACヘッダを外してパケットにしてIPルーティング1006に転送する。
IPルーティング1006は、IPスタック1007より受信したパケットの宛先ポート番号を参照し、TCP1003側のポート番号が付加されていることから、このパケットをTCP1003に転送する。
TCP1003は、IPルーティング1006よりパケットを受信する。このパケットはTCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、セッションの確立要求に対して応答パケット(SYN+ACK)を返送する。この際、TCP1003は、TCPセッション確立要求は、TCP2003から届いたものであると認識する。これは、実際の確立要求は中間ドライバ1008内のTCPから送信されたものであるが、中間ドライバ1008内のTCPは、TCP2003を騙ってTCP1003にTCPセッション確立要求を行った為、TCP1003は、恰も、TCP2003とセッションを確立すると認識する。
従って、TCP1003は、応答パケット(SYN+ACK)を、TCP2003宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置20のIPアドレスが設定され、応答パケットの宛先ポートは、TCP2003のポート番号が設定される。
応答パケットは、IPルーティング1006を経由して、IPスタック1007に送られ、ここでMACヘッダを付加されて応答フレームとなり、中間ドライバ1008に届く。
中間ドライバ1008は、応答フレームを受信すると、中間ドライバ1008内のカプセル化解除において応答フレームのMACヘッダを外して応答パケットを取り出し、TCPでこの応答パケット(SYN+ACK)を受信してACKパケットを返答してTCP処理を終端する。そして中間ドライバ2006に対して、セッション(UDP等の輻輳制御の無いセッション)の接続完了通知の為の接続完了通知パケットを送信する。この接続完了通知パケットは、TCP規格に沿ったパケットではなく、本発明の通信システムにおける独自のパケットであり、宛先IPアドレスとしてゲートウェイ送装置20を、宛先ポート番号としてTCP2003を、送信元IPアドレスとしてセッション中継装置10を、送信元ポート番号としてTCP1003を設定する。そして中間ドライバ1008内の再カプセル化1008Dにおいて、接続完了通知パケットにMACヘッダを付加し、接続完了通知フレームを生成する。
接続完了通知フレームは、接続要求とは逆の経路、即ち、ドライバ1009,NIC101,HUB11,NIC232、CPU230,NIC231、HUB22,NIC201を経由して、CPU200内の中間ドライバ2006に届く。
中間ドライバ2006は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、受信したフレームは予め高速化エンジン制御2001より通知された、高速化エンジン制御2001への宛先IP、及び宛先ポートが付加されたフレームであるので、このパケットを受信し、カプセル化解除においてMACヘッダを取り外し、パケットにする。パケットは、中間ドライバ1008から中間ドライバ2006に向けて送信された、TCP1003と中間ドライバ1008との間の接続完了通知パケットである為、中間ドライバ2006内のTCPは、TCPプロトコルに従い、セッション確立の為に必要な応答パケット(SYN+ACK)をTCP2003に送る為、IPスタック2005に対して、応答パケットを送信する。
応答パケットは、IPスタック2005、IPルーティング2004を経由し、TCP2003に到達する。
TCP2003は、IPルーティング2004より応答パケット(SYN+ACK)を受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、SSL2002に対して、TCP1003とのTCPセッション接続完了を通知する。この際、TCP2003は、受信した応答パケット(SYN+ACK)が、TCP1003から届いたものであると認識する。これは、実際の応答パケットは中間ドライバ2006内のTCPから送信されたものであるが、中間ドライバ2006内のTCPは、TCP1003を騙ってTCP2003にセッション確立の応答を行った為、TCP2003は、恰も、TCP1003から応答があったと認識する。
TCP2003は応答パケット(SYN+ACK)を受信すると、この応答パケットに対してACKパケットを生成してTCP1003宛に送信する。このACKパケットは、中間ドライバ2006のTCPがIPルーティング2004及びIPスタック2005を介して受信し、TCP処理を終端させる。
SSL2002は、TCP2003からの接続完了通知を受け、SSL1002との間でSSLセッションを確立する為、SSLプロトコルに従い、SSLセッションの確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP2003で受信されると、TCP2003と中間ドライバ2006内のTCPとの間で設定されたTCPセッションを通り、中間ドライバ2006に到着する。
中間ドライバ2006は、SSLセッション確立要求パケットのTCPを終端し、UDP等の輻輳制御の掛からないヘッダを付け、パケットを中間ドライバ1008に向け送信する。パケットはNIC201、HUB22,NIC231,CPU230,NIC232、HUB11、NIC101を経由して、中間ドライバ1008に到着する。この際、NIC201内の高速化エンジン2014は、MAC1011から受信したパケットを、そのままPHY2012に転送する。
中間ドライバ1008は、SSLセッション確立要求パケットを受信すると、中間ドライバ1008内のTCPとTCP1003との間で設定されたTCPセッションを通り、TCP1003に到着する。
TCP1003は、パケットをSSL1002に転送する。
SSL1002は、SSLセッション確立要求の内容を検証し、問題が無ければ、中継アプリケーション1001に対して、SSL2002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL2002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP1003と中間ドライバ1008との間のTCPセッションを経由して中間ドライバ1008に到達し、中間ドライバ1008と中間ドライバ2006の間のUDP等の輻輳制御のないセッションを経由して中間ドライバ2006に到達する。更に、中間ドライバ2006とTCP2003との間のTCPセッションを経由して、SSL2002に到達する。
SSL2002は、SSLセッション確立要求の内容をSSLプロトコルに従って検証し、問題が無ければ、高速化エンジン制御2001に対して、SSL2002とSSL1002との間のSSLセッション確立を通知する。
高速化エンジン制御2001は、SSLセッション確立通知を受けると、中間ドライバ2006に対して、SSLセッション確立通知によって受信したSSL1002の公開鍵と、SSL2002の秘密鍵、さらにはSSL1002とSSL2002の間の共通鍵を通知する。
中間ドライバ2006は、公開鍵、秘密鍵および共通鍵の通知を受けると、公開鍵、秘密鍵および共通鍵、SSLセッションの相手方機器のIPアドレス(セッション中継装置10のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP1003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP2003のポート)、送信元IPアドレス(ゲートウェイ装置20のIPアドレス)、及び開始命令を制御フレームに載せ、高速化エンジン2014に通知する。
制御フレームは、ドライバ2007、MAC2011を通じて高速化エンジン2014に到達する。
高速化エンジン2014は、MACアドレス等により制御フレームを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用する為保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
高速化エンジン2014は、高速化処理開始命令以前は、制御フレーム以外のMAC2011から受信したフレームは、全てそのままPHY2012に送信し、PHY2012から受信したフレームは、全てそのままMAC2011に送信していた。しかしながら、高速化処理開始命令以降は、制御フレーム以外のMAC2011から受信したフレームを全てそのままPHY2012に送信する動作には変わりないが、PHY2012から受信したフレームについては、以下のような処理を行う。
(1) ゲートウェイ装置20宛て、かつ、SSL1002で暗号化されたフレームであれば、UDP等のカプセル化を解除し、必要であれば、フラグメントを解除し、フレームを復号化し、PHY2012側に送信する。
(2) (1)以外の自ノード宛てフレームであれば、MAC2011に転送する。
(3) ブロードキャストフレーム、若しくはマルチキャストフレームであれば、フレームをコピーして、一方はそのままMAC2011に転送し、もう一方は暗号化とカプセル化を行い、SSL1002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
(4) (1)〜(3)以外のフレームであれば、暗号化とカプセル化を行い、SSL1002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
以上のようにして、高速化エンジン2014と中間ドライバ1008との間で、フレーム転送の為のUDP等の輻輳制御の無いセッションが確立される。又、高速化エンジン2014とSSL1002との間で、SSLセッションが確立される。
すなわち、セッション中継装置10のSSL1002は、SSLセッション確立要求時のみ、ゲートウェイ装置のSSL2002と遣り取りを行うが、SSLセッション確立が終了すると、SSLセッション確立以降は高速化エンジン2014との間で、SSLの暗号化および復号化の遣り取りを行う。
又、セッション中継装置10の中間ドライバ1008は、SSLセッション確立要求時のみ、ゲートウェイ装置20の中間ドライバ2006とフレームの遣り取りを行うが、SSLセッションが確立した後は、高速化エンジン2014との間でフレームの遣り取りを行う。
以上により、第1の実施の形態において、ゲートウェイ装置20からセッション中継装置10へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
尚、上述した実施例では、ゲートウェイ装置20からセッション中継装置10へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明をしたが、ゲートウェイ装置30からセッション中継装置10へのSSLセッション(セキュアTCPセッション)を確立する動作は、同様の動作が行われる。
また、上述した実施例では、TCP1003に対してのTCPセッション確立要求を中間ドライバ2006内のTCPが受信して保留し、接続完了通知を受信してから応答パケット(SYN+ACK)をTCP2003に送信する構成を用いて説明したが、これに限るものではない。即ち、TCPセッション確立要求を中間ドライバ2006内のTCPが受信すると、応答パケット(SYN+ACK)をTCP2003に送信する構成であっても良い。
[端末21からサーバ31へのフレーム転送動作]
図16を用いて、第1の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、HUB22やHUB32が、既に、端末21、サーバ31、Firewall23のLAN側,Firewall33のLAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。又、HUB11は、Firewall23のWAN側、Firewall33のWAN側、セッション中継装置10の各装置のMACアドレスを学習しているものとする。又、Firewall23及びFirewall33は、イントラネット内部の装置(LAN側)からインターネットの各装置(WAN側)へTCPを用いて通信開始の要求をした場合、以降の通信は双方向で自由に行えるが、逆に、インターネットの各装置(WAN側)からイントラネットの各装置(LAN側)へTCPを用いて通信開始の要求を行った場合、この要求は遮断され、以降の通信も双方向で遮断されるとする。
更に、ゲートウェイ装置20からセッション中継装置10へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されており、同様にゲートウェイ装置30からセッション中継装置10へのSSLセッション(セキュアTCPセッション)も、ゲートウェイ装置20からセッション中継装置10へのSSLセッションと同様の方法により、既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既にTCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション宛のデータ(図2におけるF24にあたる)を、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)および宛先ポート(TCP3003宛て)を参照し、データをそのままIPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、ドライバ2105に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポート221からフレームを受信すると、ブリッジ224においてF21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームをそのままゲートウェイ装置20側のポート222に出力する。
ゲートウェイ装置20内のNIC201は、ポート2013でHUB22からのフレームを受信し、PHY2012を経由して、高速化エンジン2014に渡す。
高速化エンジン2014は、到着したフレームの宛先MACがサーバ31宛てであることから、高速化エンジン2014内の暗号化2014Gにおいてフレームを暗号化して図3におけるデータF14を作成し、さらにカプセル化2014Iにおいて図3におけるF11〜F13の各ヘッダを付加してEther over SSLフレームF10のフォーマットにして、再びPHY2012側に転送する。
この時、INET MAC F11内のMAC DAにはFirewall23のLAN側のMACアドレスが設定され、F11内のMAC SAにはゲートウェイ装置20のMACアドレスが設定される。又、INET IP F12内のIP DAにはセッション中継装置10のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。INET TCP F13に関しては、Firewall23を通過する為に、恰も、セッション中継装置10内のTCP1003と通信してるかのように見せかける為のTCPヘッダを付加する。しかし、このTCPヘッダは、実際には中間ドライバ1008において一旦取り外される為、TCP1003の輻輳制御には影響しない。よって、ここで付加するF13は、TCPヘッダの形式を持つが、実際には、UDPの働きしかしない。仮に、Firewall23が存在しなければ、F13はUDPヘッダでも構わない。
PHY2012は、高速化エンジン2014よりフレームを受信すると、ポート2013を経由してHUB22にフレームを転送する。
HUB22は、ゲートウェイ装置22側のポート222からフレームを受信すると、ブリッジ224においてF11内のMAC DAを参照し、MAC DAがFirewall23のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームをそのままポート223よりFirewall23に出力する。
Firewall23は、NIC231でHUB22からのフレームを受信し、ポート2313,PHY2312、MAC2311、ドライバ2304の順で転送し、IPスタック2302に渡す。
IPスタック2302は、MACヘッダF11を取り外して、IPルーティング2301に送る。
IPルーティング2301は、受信したフレームのヘッダF12内のIP DAを参照し、IP DAがインターネット1側に存在するものであることから、フレームをIPスタック2304に転送する。
IPスタック2304は、IPルーティング2301よりフレームを受け取り、ヘッダF11を付ける。ここで、F11内のMAC DAにはセッション中継装置10のMACアドレスを設定し、F11内のMAC SAにはFirewall23のWAN側のMACアドレスを設定する。このようにして、受信フレームをフレームフォーマットF10の形にして、ドライバ2305、MAC2321、PHY2322、ポート2323を経由して、HUB11に転送する。
HUB11は、ポート111よりFirewall23からのフレームを受信すると、ブリッジ114においてF11内のMAC DAを参照し、MAC DAがセッション中継装置10のものであることから、過去のルーティング学習結果に基づき、このフレームをそのままセッション中継装置10側のポート112に出力する。
セッション中継装置10は、HUB11からのフレームをポート1013より受信すると、PHY1012、MAC1011、ドライバ1009を経由して、中間ドライバ1008に転送する。
中間ドライバ1008は、ドライバ1009よりフレームを受信する。このフレームは、受信時にはフレームフォーマットF10の形をしているが、カプセル化解除1008GにおいてヘッダF11、ヘッダF12、ヘッダF13を削除し、暗号化されたデータF14のみを残す。そして、データF14をTCP1008Aに渡し、予め、TCP1003と中間ドライバ内のTCP1008Aとの間で設定されたTCPセッションに流す。
中間ドライバ1008内のTCP1008Aは、受信したデータF14に、TCP1003とのTCP通信に必要なTCPヘッダF13と、IPヘッダF12を付けて、再カプセル化1008Eに送る。F12内のIP DAにはセッション中継装置10のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。
中間ドライバ1008内の再カプセル化1008Eは、TCP1008Aよりデータを受信すると、これにヘッダF11を付けて、IPスタック1007に送る。ここで、F11内のMAC DAにはセッション中継装置10のMACアドレスを設定し、F11内のMAC SAにはFirewall23のWAN側のMACアドレスを設定する。このようにして、TCP1008Aからの受信フレームをフレームフォーマットF10の形にして、IPスタック1007に転送する。
IPスタック1007は、中間ドライバ1008から受信したフレームのMACヘッダF11を取り外して、IPルーティング1006に送る。
IPルーティング1006は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP1003に転送する。
TCP1003は、IPルーティング1006からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送するなどの処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL1002に転送する。
SSL1002は、TCP1003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、中継アプリケーション1001に転送する。
中継アプリケーション1001は、SSL1002からフレームF20を受信すると、F21内のMAC DAを参照して、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを予めゲートウェイ装置30との間で設定しているSSLセッションに流す。よって、フレームをそのままSSL1004側に転送する。
これ以降、F20フォーマットのフレームは、セッション中継装置10内で再び暗号化され、更にF10のフォーマットにおけるF14の領域に格納され、F10のフォーマットで、セッション中継装置10からHUB11、Firewall33、HUB32,ゲートウェイ装置30の経路でゲートウェイ装置30に転送される。
そして、ゲートウェイ装置30は、HUB32からF10のフォーマットでフレームを受信すると、F14の暗号化を解除してF14に格納されているEthernetフレームF20を取り出し、このフレームをF20のフォーマットでHUB32を経由してサーバ31に転送する。
このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
サーバ31はHUB32から送信されたフレームを受信し、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
尚、本実施の形態では、セッション中継装置内のソフトウェアにおいて、中間ドライバとTCPの間(例えば中間ドライバ1008とTCP1003の間)で、一時的にTCP over TCP形式の処理になる。しかしながら、中間ドライバとTCPの間では、パケットが欠落する可能性が殆ど無い為、TCP over TCPによる速度低下が発生する可能性は、極めて低い。これは、TCP over TCP問題とは、パケットロスが発生した時に著しい速度低下が発生する問題であり、仮に、パケットロスが発生しなければ、TCP over TCP形式の処理を行っても、ヘッダF13側のTCPのウインドウサイズは常に大きくなり、速度低下などの問題は発生しないからである。
上記の方法でヘッダF13側のTCPの輻輳制御と再送制御を事実上停止させても、ヘッダF23側のTCPの輻輳制御と再送制御は通常通り機能する為、端末21とサーバ31の各々のアプリケーションから見た場合、端末21内のTCPとサーバ31内のTCPの働きにより、輻輳制御、再送制御ともに問題なく行われる。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、SSLセッション確立後、高速化エンジン2014を利用することで、ゲートウェイ装置20やゲートウェイ装置30におけるCPU(ソフトウェア処理)によるカプセル化処理および暗号化/復号化処理を排除し、これら処理を全て高速化エンジン(ハードウェア)で実現できる為である。
更に、これは、ゲートウェイ装置20とセッション中継装置10との間の通信において、ヘッダF13の位置のTCPによる輻輳制御と再送制御が発生しないよう、セッション中継装置10内の中間ドライバ1008、又はゲートウェイ装置20内の中間ドライバ2006において、TCPセッションの確立要求を終端し、TCP over TCP問題の発生を回避しているからである。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、SSLの暗号化及び復号化とカプセル化を同一ハードウェア(FPGA/ASIC)で行うことが出来るからである。
又、これは、比較的安価なMACとPHY間のインタフェースに、上記ハードウェアを実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きなSSLの暗号化/復号化とカプセル化のみをハードウェアで処理できるからである。
[第2の実施の形態]
本発明の第2の実施の形態は、第1の実施の形態に対して、イントラネット2とイントラネット3を、インターネット1を介さずに直接接続し、更に、ゲートウェイ装置20とゲートウェイ装置30との間で、セッション中継装置10を介さずに、直接、SSLセッション(セキュアTCPセッション)を設定する点において異なる。
第2の実施の形態における、端末21,サーバ31、HUB22,HUB32、ゲートウェイ装置20,ゲートウェイ層と30、イントラネット2、イントラネット3の構成および動作は、ゲートウェイ装置30からゲートウェイ装置20、若しくはゲートウェイ装置30からゲートウェイ装置20に向けてセッションを張る動作以外は、第1の実施の形態と同じである。
第2の実施の形態において、イントラネット2は、閉域LANだけでなく、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図17は、第2の実施の形態におけるネットワーク構成を示すブロック図である。
イントラネット2は、ゲートウェイ装置20、端末21、HUB22、及びFirewall33で構成され、これら機器の相互間で通信を行うローカルエリアネットワーク(LAN)である。イントラネット2は、イントラネット3と、Firewall33のWAN側を介して相互に接続されており、Firewall33の動作により、イントラネット2とイントラネット3の間の通信は、予め決められた設定に従って制限されている。
イントラネット2内の各装置は、HUB22を介して相互に接続されており、イントラネット2内の各装置間は、前述のFirewall33等の制限を受けること無く、自由に通信を行うことができる。又、図17においては、ゲートウェイ装置20、ゲートウェイ装置30により、イントラネット2とイントラネット3は、同一のLANとして動作するよう相互に接続されている為、イントラネット2内の各装置と、イントラネット3内の各装置間も、前述のFirewall33等の制限を受けること無く、自由に通信を行うことが出来る。
イントラネット3は、ゲートウェイ30、サーバ31、HUB32、及びFirewall33で構成され、これら機器の相互間で通信を行うローカルエリアネットワーク(LAN)である。イントラネット3は、イントラネット2と、Firewall33を介して相互に接続されており、Firewall33の動作により、イントラネット2とイントラネット3の間の通信は、予め決められた設定に従って制限されている。
イントラネット3内の各装置は、HUB32を介して相互に接続されており、イントラネット3内の各装置間は、前述のFirewall33等の制限を受けることなく、自由に通信を行うことが出来る。又、図17においては、ゲートウェイ装置20、ゲートウェイ装置30により、イントラネット2とイントラネット3は、同一のLANとして動作するよう相互に接続されている為、イントラネット3内の各装置と、イントラネット2内の各装置間も、前述のFirewall33等の制限を受けること無く、自由に通信を行うことが出来る。
図18は、第2の実施の形態における、各機器の構成と、フレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置20は、第1の実施の形態におけるゲートウェイ装置20と同様の構成である。但し、ゲートウェイ装置20内の高速化エンジン制御2001の動作については、第1の実施の形態における動作のほか、他のゲートウェイ装置(ゲートウェイ装置30等)からのセッション接続要求の受信も可能になっている。
ゲートウェイ装置30は、第1の実施の形態におけるゲートウェイ装置30と同様の構成である。すなわち、ゲートウェイ装置20と、同様の構成を有し、同様の動作を行う。但し、ゲートウェイ装置30内の高速化エンジン制御3001の動作については、第1の実施の形態における動作の外、他のゲートウェイ装置(ゲートウェイ装置20等)からのセッション接続要求の受信も可能になっている。
端末21、サーバ31、HUB22、HUB32に関しては、第1の実施の形態と同様の構成を有し、同様の動作を行う。
Firewall33は、イントラネット3とイントラネット2とを相互に接続する為の機器であり、LAN側ポートはHUB32を介してイントラネット3上の各機器と接続され、WAN側ポートはHUB22を介してイントラネット2上の各機器と接続されている。
Firewall33は、イントラネット2とイントラネット3の間の通信を、予め決められた設定に従って制限する動作を行う。例えば、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断する。
従って、第2の実施の形態では、ゲートウェイ装置20とゲートウェイ装置30との間で、予めSSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
図18を用いて、第2の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33のWAN側,Firewall33のLAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置20内の高速化エンジン制御2001は、起動後ゲートウェイ装置30からの接続待ち受け状態になると、中間ドライバ2006に対して、待ち受け開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、高速化エンジン制御2001の待ち受けポート番号が含まれる。
中間ドライバ2006は、高速化エンジン制御2001からの通知を受けると、フレーム解析処理において、高速化エンジン制御2001宛てのパケットが到着した際に、TCPセッションの接続/終端などの処理ができるよう設定を行う。
ゲートウェイ装置30内の高速化エンジン制御3001は、ユーザからのゲートウェイ装置20内の高速化エンジン制御2001への接続要求を受け、SSL3002にゲートウェイ装置20内の高速化エンジン制御2001への通信開始を指示する。同時に、中間ドライバ3006に対して、ゲートウェイ装置20内の高速化エンジン制御2001への通信開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、高速化エンジン制御2001のポート番号、及び高速化エンジン制御3001の送信元ポート番号、更にゲートウェイ装置30のIPアドレスが含まれる。
SSL3002は、高速化エンジン制御3001からの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003にゲートウェイ装置20内の高速化エンジン制御2001への通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのセッション確立要求パケット(SYN)を送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定されている。このTCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットパケットのことである。本明細書においては、TCPセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYN+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを生成し、中間ドライバ3006に転送する。
中間ドライバ3006は、IPスタック3005からフレームを受信し、フレーム解析を行う。解析の結果、フレームは予め高速化エンジン制御3001より通知された宛先IP、宛先ポート、送信元IP、送信元ポートが付加されたフレームであるので、カプセル化解除においてMACヘッダを取り外し、パケットにする。そして、中間ドライバ3006のTCP部でTCP3003からTCP2003へのTCPセッションの確立要求の処理を終端する。すなわち、TCP3003は、元々は、TCP2003に対してTCPセッションの確立要求を行ったが、実際は、この要求に対して中間ドライバ3006内のTCPが受信して保留にし、TCP3003と中間ドライバ3006内のTCPとの間で、TCPセッションの確立要求の処理を終端させる。
中間ドライバ3006は、上記確立要求の処理を終端させる際、中間ドライバ2006に対して、TCP2003との間でTCPセッションを確立するよう要求する為、ドライバ3007にTCP2003との接続を要求する為の接続要求パケットを送る。この接続要求パケットには、宛先IPアドレスにゲートウェイ装置20が、宛先ポート番号にはTCP2003が設定される。そしてこのパケットに宛先MACアドレスと送信元MACアドレスとを設定して接続要求フレームとなる。尚、上記接続要求パケットはTCP規格に沿ったパケットではなく、独自のパケットである。
ドライバ3007は中間ドライバ3006から接続要求フレームを受信し、MAC3011に転送する。
MAC3011はドライバ3007からフレームを受信し、高速化エンジン3014に転送する。
高速化エンジン3014は、MAC3011からフレームを受信し、そのままPHY3012に転送する。
PHY3012は、高速化エンジン3014からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からパケットを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からフレームを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内からフレームを受信し、ポート2013、PHY2012、高速化エンジン2014、MAC2011、ドライバ2007の経路でフレームを転送し、中間ドライバ2006に転送する。この時、高速化エンジン2014は、PHYから受信したフレームを、そのまま、MAC 2011に転送する。
中間ドライバ2006は、ドライバ2007から接続要求フレームを受信し、フレーム解析を行う。解析の結果、このフレームは、予め、高速化エンジン制御2001より通知された、高速化エンジン制御2001への宛先IP、及び宛先ポートが付加されたフレームであるので、このフレームを受信し、カプセル化解除においてMACヘッダを取り外してパケットにする。パケットは、中間ドライバ3006から中間ドライバ2006に向けて送信された、TCP2003への接続要求パケットである為、中間ドライバ2006内のTCPは、TCP2003との間でTCPセッションを確立する為に、IPスタック2005に対して、TCP2003とのセッション確立に必要なTCPセッション確立要求パケットを送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定され、更に送信元IPアドレスにはゲートウェイ装置30のIPアドレスが設定され、送信元ポート番号にはTCP3003のポート番号が設定される。そして、このパケットには、中間ドライバ2006内の再カプセル化においてMACアドレスが付加され、フレームの形にしてIPスタック2005に転送される。
すなわち、中間ドライバ2006内のTCPは、TCP3003の名前を騙ってTCP2003に対してTCPセッションの確立要求を行う。従って、TCP2003は恰もTCP3003と通信しているかのように認識し、更にTCP3003は、恰も、TCP2003と通信しているかのように認識する。しかしながら、実際のTCPセッションの確立処理は、TCP3003と中間ドライバ3006内のTCPとの間、及び、中間ドライバ2006とTCP2003との間で行われ、更に中間ドライバ3006と中間ドライバ2006との間は、UDP等の輻輳制御の無い方法(本発明の通信システムにおける独自のパケット)で、別途に通信が行われることになる。そして、TCP3003と中間ドライバ3006との間のTCPセッションと、中間ドライバ3006と中間ドライバ2006との間のUDP等の通信セッションと、更に中間ドライバ2006とTCP2003の間のTCPセッションとが、中間ドライバ3006及び中間ドライバ2006によって相互に接続・中継されることにより、恰も、TCP3003とTCP2003との間でTCPセッションが確立しているかのように通信が行われる。
IPスタック2005は、中間ドライバ2006からフレームを受信し、MACヘッダを外してパケットにしてIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、このパケットをTCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットはTCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、TCPセッション確立の為に必要な応答パケット(SYN+ACK)を返送する。この際、TCP2003は、TCPセッション確立要求はTCP3003から届いたものであると認識する。これは、実際の確立要求は中間ドライバ2006内のTCPから送信されたものであるが、中間ドライバ2006内のTCPは、TCP3003を騙ってTCP2003にセッション確立要求を行った為、TCP2003は、恰も、TCP3003とセッションを確立すると認識する。
従って、TCP2003は、応答パケット(SYN+ACK)を、TCP3003宛てに送信する。すなわち、応答パケットの宛先IPは、ゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートは、TCP3003のポート番号が設定される。
TCP2003からの応答パケットは、IPルーティング2004、IPスタック2005に送られ、ここでMACヘッダを付加されて応答フレームとなり中間ドライバ2006に届く。
中間ドライバ2006は、応答フレームを受信すると、中間ドライバ2006内のカプセル化解除において応答フレームのMACヘッダを外して応答パケットを取り出し、TCPでこのパケット(SYN+ACK)を受信して、この応答パケットに対するACKパケットをTCP2003に送信してTCPの処理を終端させる。そして、中間ドライバ3006に対して、接続完了通知のための接続完了通知パケットを送信する。この接続完了通知パケットは、TCP規格に沿ったパケットではなく、本発明の通信システムにおける独自のパケットである。このパケットの宛先IPアドレスにはゲートウェイ送装置30が、宛先ポート番号にはTCP3003が、送信元IPアドレスにはゲートウェイ装置20が、送信元ポート番号にはTCP2003が設定される。そして、中間ドライバ内の再カプセル化において、接続完了通知パケットにMACヘッダを付加して接続完了通知フレームを生成する。
接続完了通知フレームは、接続要求とは逆の経路、即ち、ドライバ2007,NIC201,HUB22,Firewall33、HUB32,NIC301を経由して、CPU300内の中間ドライバ3006に届く。
中間ドライバ3006は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、フレームは、予め、高速化エンジン制御3001より通知された、高速化エンジン制御3001への宛先IP、及び宛先ポートが付加されたフレームであるので、このフレームを受信してカプセル化解除においてMACヘッダを取り外してパケットにする。パケットは、中間ドライバ2006から中間ドライバ3006に向けて送信された、TCP2003と中間ドライバ2006との間の接続完了通知パケットである為、中間ドライバ3006内のTCPは、TCPプロトコルに従い、セッション確立の為に必要な応答パケット(SYN+ACK)をTCP3003に送る為に、IPスタック3005に対して、応答パケットを送信する。
応答パケット(SYN+ACK)は、IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004より応答パケット(SYN+ACK)を受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、SSL3002に対して、TCP2003とのTCPセッション接続完了を通知する。この際、TCP3003は、受信した応答パケット(SYN+ACK)が、TCP2003から届いたものであると認識する。実際は、この応答パケットは中間ドライバ3006内のTCPから送信されたものであるが、中間ドライバ3006内のTCPは、TCP2003を騙ってTCP3003にセッション確立に対しての応答パケットを送信した為、TCP3003は、恰も、TCP2003から応答パケットがあったと認識する。
TCP3003は応答パケット(SYN+ACK)を受信すると、この応答パケットに対してACKパケットを生成してTCP2003宛に送信する。このACKパケットは、中間ドライバ3006のTCPがIPルーティング2004及びIPスタック2005を介して受信し、TCP処理を終端させる。
SSL3002は、TCP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003と中間ドライバ3006内のTCPとの間で設定されたTCPセッションを通り、中間ドライバ3006に到着する。
中間ドライバ3006は、SSLセッション確立要求パケットのTCP処理を終端し、UDP等の輻輳制御の掛からないヘッダを付け、パケットを中間ドライバ2006に向け送信する。パケットは、NIC301、HUB32,Firewall33、HUB22、NIC201を経由して、中間ドライバ2006に到着する。この際、NIC301内の高速化エンジン3014は、MAC3011受信したパケットを、そのまま、PHY3012に転送し、NIC201内の高速化エンジン2014は、PHY2012から受信したパケットを、そのまま、MAC2011に転送する。
中間ドライバ2006は、SSLセッション確立要求パケットを受信すると、中間ドライバ2006内のTCPとTCP2003との間で設定されたTCPセッションを通り、TCP2003に到着する。
TCP2003は、パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、高速化エンジン制御2001に対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
高速化エンジン制御2001は、SSL2002からのSSLセッション確立通知を受けると、中間ドライバ2006に対して、SSLセッション確立通知によって受信したSSL3002の公開鍵とSSL2002の秘密鍵、さらにはSSL2002とSSL3002の間の共通鍵を通知する。
中間ドライバ2006は、公開鍵、秘密鍵および共通鍵の通知を受けると、公開鍵、秘密鍵および共通鍵、SSLセッションの相手方機器のIPアドレス(ゲートウェイ装置30のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP3003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP2003のポート)、送信元IPアドレス(ゲートウェイ装置20のIPアドレス)、及び開始命令を制御フレームに載せ、高速化エンジン2014に通知する。
制御フレームは、ドライバ2007、MAC2011を通じて高速化エンジン2014に到達する。
高速化エンジン2014は、MACアドレス等により制御フレームを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用する為に保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
高速化エンジン2014は、高速化処理開始命令以前は、制御フレーム以外のMAC2011から受信したフレームは、全て、そのまま、PHY2012に送信し、PHY2012から受信したフレームは、全て、そのまま、MAC2011に送信していた。しかしながら、高速化処理開始命令以降は、制御フレーム以外のMAC2011から受信したフレームを、全て、そのまま、PHY2012に送信する動作には変わりないが、PHY2012から受信したフレームについては、以下のような処理を行う。
(1) ゲートウェイ装置20宛て、かつ、SSL3002で暗号化されたフレームであれば、UDP等のカプセル化を解除し、必要であれば、フラグメントを解除し、フレームを復号化し、PHY2012側に送信する。
(2) (1)以外の自ノード宛てフレームであれば、MAC2011に転送する。
(3) ブロードキャストフレーム、若しくはマルチキャストフレームであれば、フレームをコピーして、一方はそのままMAC2011に転送し、もう一方は暗号化とカプセル化を行い、SSL3002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
(4) (1)〜(3)以外のフレームであれば、暗号化とカプセル化を行い、SSL3002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
SSL2002より送信された、SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003と中間ドライバ2006との間のTCPセッションを経由して中間ドライバ2006に到達し、中間ドライバ2006と中間ドライバ3006の間のUDP等の輻輳制御のないセッションを経由して中間ドライバ3006に到達する。更に、中間ドライバ3006とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、高速化エンジン制御3001に対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
高速化エンジン制御3001は、高速化エンジン制御2001と同様の方法、即ち、中間ドライバ3006を経由して、高速化エンジン3014に対して、ゲートウェイ装置20の公開鍵、ゲートウェイ装置30の秘密鍵、ゲートウェイ装置20とゲートウェイ装置30の間の共通鍵及び高速化処理開始命令等を送る。
高速化エンジン3014は、高速化エンジン制御3001からの公開鍵などの通知を受け、高速化エンジン2014と同様に動作する。
以上のようにして、SSL2002とSSL3002との間で、SSLセッションが確立されると、以降はSSl2002やSSL3002を経由すること無く、高速化エンジン2014と高速化エンジン3014との間でSSLによる通信が行われる。
以上により、第2の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図18を用いて、第2の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に、動作の説明を行う。
この際、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)および宛先ポート(TCP3102宛て)を参照し、データをそのままIPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、ドライバ2105に渡す。このフレームは、EthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20内のNIC201は、ポート2013でHUB22からのフレームを受信し、PHY2012を経由して、高速化エンジン2014に渡す。
高速化エンジン2014は、到着したフレームの宛先MACがサーバ31宛てであることから、高速化エンジン2014内の暗号化2014Gにおいてフレームを暗号化して図3におけるデータF14を作成し、更にカプセル化2014Iにおいて図3におけるF11〜F13の各ヘッダを付加してEther over SSLフレームF10のフォーマットにして、再び、PHY2012側に転送する。
この時、INET MAC F11内のMAC DAにはFirewall33のWAN側のMACアドレスが設定され、F11内のMAC SAにはゲートウェイ装置20のMACアドレスが設定される。又、INET IP F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。INET TCP F13に関しては、Firewall33を通過する為に、恰も、ゲートウェイ装置30内のTCP3003と通信しているかのように見せかける為のTCPヘッダを付加する。しかし、このTCPヘッダは、実際には、中間ドライバ3006において一旦取り外される為、TCP13003の輻輳制御には影響しない。従って、ここで付加するF13は、TCPヘッダの形式を持つが、実際には、UDPの働きしかしない。仮に、Firewall33の代わりにルータが設置されている場合は、F13はUDPヘッダでも構わない。
PHY2012は、高速化エンジン2014よりフレームを受信すると、ポート2013を経由してHUB22にフレームを転送する。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30内のNIC301は、ポート3013でHUB32からのフレームを受信し、PHY3012を経由して、高速化エンジン3014に渡す。
高速化エンジン3014は、到着したフレームの宛先MACがゲートウェイ装置30宛てであり、既にゲートウェイ装置20において暗号化されていることから、高速化エンジン3014内のカプセル化3014JにおいてF11〜F13の各ヘッダを削除して図3におけるデータF14のみを取り出し、復号化3014LにおいてデータF14を復号化して、データF14内に格納されているF21〜F24のデータ(EthernetフレームF20)を取り出し、再び、PHY3012側に転送する。
このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
PHY3012は、高速化エンジン3014よりフレームを受信すると、ポート3013を経由してHUB32にフレームを転送する。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31はHUB32から送信されたフレームを受信し、ドライバ3105,IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡す。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
上記の方法でヘッダF13側のTCPの輻輳制御と再送制御を事実上停止させても、ヘッダF23側のTCPの輻輳制御と再送制御は通常通り機能する為、端末21とサーバ31の各々のアプリケーションから見た場合、端末21内のTCPとサーバ31内のTCPの働きにより、輻輳制御、再送制御ともに問題なく行われる。
尚、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、高速化エンジン2014及び3014を利用することで、ゲートウェイ装置20、及びゲートウェイ装置30におけるCPU(ソフトウェア処理)によるカプセル化処理および暗号化/復号化処理を排除し、これら処理を全て高速化エンジン(ハードウェア)で実現できる為である。
更に、これは、ゲートウェイ装置20とゲートウェイ装置30との間の通信において、ヘッダF13の位置のTCPによる輻輳制御と再送制御が発生しないよう、ゲートウェイ装置30内の中間ドライバと、ゲートウェイ装置20内の中間ドライバにおいて、ゲートウェイ装置20内のTCPと、ゲートウェイ装置30内のTCPを終端し、TCP over TCP問題の発生を回避しているからである。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、暗号化/復号化とカプセル化を同一ハードウェア(FPGA/ASIC)上で行うことが出来るからである。
又、これは、比較的安価なMACとPHY間のインタフェースに、ハードウェアを実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きな暗号化/復号化とカプセル化のみをハードウェア処理できるからである。
[第3の実施の形態]
本発明の第3の実施の形態は、第2の実施の形態に対して、ゲートウェイ装置30内に高速化エンジン3014が無く、高速化エンジン制御3001の代わりにゲートウェイアプリケーション3001Aが存在している点において異なる。
第3の実施の形態における端末21,サーバ31、HUB22,HUB32、ゲートウェイ装置20、イントラネット2、イントラネット3の構成および動作は、第2の実施の形態と同じである。
第3の実施の形態においては、イントラネット2は、閉域LANだけでなく、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図19は、第3の実施の形態における、各機器の構成と、フレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置30は、第2の実施の形態におけるゲートウェイ装置30に対して、高速化エンジン3014が無く、高速化エンジン制御3001の代わりにゲートウェイアプリケーション3001Aが存在している点、更にブリッジ3008,ドライバ3009,仮想NIC3010が追加されている点において異なる。
ゲートウェイアプリケーション3001Aは、以下に挙げる動作を行う。
(1) 仮想NIC3010から到着するフレームを、SSL3002に転送する。すなわち、ゲートウェイアプリケーション3001Aと高速化エンジン制御2001との間に設定されるSSLセッション内に、仮想NIC3010から到着するフレームをデータとして載せ、高速化エンジン制御2001宛てに送信する。尚、ここで、ゲートウェイアプリケーション3001Aからは、通信の相手方は高速化エンジン制御2001に見えているが、実際の通信の相手方は、高速化エンジン2014になる。
(2) SSL3002より、ゲートウェイアプリケーション3001Aと高速化アプリケーション2001との間に設定されるSSLセッションを通じて到着するデータを、フレームとして仮想NIC3010に転送する。
(3) 高速化エンジン制御2001との間のSSLセッションの接続および切断に必要な動作を行う。ゲートウェイアプリケーション3001A側から高速化エンジン制御2001側へ接続要求することは、勿論、高速化アプリケーション2001側からゲートウェイアプリケーション3001A側への接続要求も受信することが出来る。
ブリッジ3008は、中間ドライバ3006からフレームを受け取り、宛先MACアドレスを参照して、ドライバ3009もしくはドライバ3007にフレームを転送する機能を有する。通常はOSの機能として実装される。又、ドライバ3009からフレームを受け取り、宛先MACアドレスを参照して、ドライバ3007若しくは中間ドライバ3006にフレームを転送する機能を有する。又、ドライバ3007からフレームを受け取り、宛先MACアドレスを参照して、ドライバ3009若しくは中間ドライバ3006にフレームを転送する機能を有する。
更に、ブリッジ3008は、フレーム受信時に、送信元MACアドレスを参照し、MACアドレスの学習を行い、どのMACアドレスを持つ端末が、どのインタフェース(即ち、中間ドライバ3006、ドライバ3009、ドライバ3007)側に接続されているのかを記録する機能を有する。仮に、フレーム受信時に、宛先MACアドレスを参照しても、MACアドレスを学習していない場合は、
フレームを、フレームが入力された中間ドライバ若しくはドライバ以外のドライバ又は中間ドライバにブロードキャストする機能を有する。
ドライバ3009は、仮想NIC3010とOSの仲介をするソフトウェアであり、仮想NICからフレームを受け取りOSに送り、更に、OSからフレームを受け取り、仮想NICに送る機能を有する。
仮想NIC3010は、ドライバ3009と、ゲートウェイアプリケーション3001Aを仲介するソフトウェアである。仮想NIC3010は、ドライバ3009からフレームを受け取り、ゲートウェイアプリケーション3001Aに渡す機能を有する。更に、ゲートウェイアプリケーション3001Aからフレームを受け取り、ドライバ3010に送る機能を有する。本来、NICはハードウェアで構成されるが、仮想NIC3010はソフトウェアで構成される。仮想NIC3010は、OSからは、恰も、ハードウェアであるかのように認識される。
仮想NIC3010、ドライバ3009、ブリッジ3008は、中間ドライバ3006にその機能を纏め、一体化させることも出来る。この場合、ゲートウェイアプリケーション3001Aから出たフレームは、中間ドライバ3006を経由してドライバ3007に渡され、又、ドライバ3007から入力した自ノード宛て以外のユニキャストフレーム若しくはブロードキャストフレームは、中間ドライバ3006からゲートウェイアプリケーション3001Aに送られる。
第3の実施の形態では、ゲートウェイ装置30内に存在するSSL3002、TCP3003、IPルーティング3004、IPスタック3005、中間ドライバ3006、ドライバ3007は、第2の実施の形態におけるSSL3002、TCP3003、IPルーティング3004、IPスタック3005、中間ドライバ3006、ドライバ3007と、各々、同様の構成を有し、同様の動作を行う。
端末21、サーバ31、ゲートウェイ装置20、Firewall33,HUB22、HUB32に関しては、第2の実施の形態と同様の構成を有し、同様の動作を行う。
従って、第3の実施の形態では、ゲートウェイ装置20とゲートウェイ装置30との間で、予め、SSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
図19を用いて、第3の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ3008、HUB22やHUB32がすでに端末21、サーバ31、Firewall33のWAN側,Firewall33のLAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置20内の高速化エンジン制御2001は、起動後ゲートウェイ装置30からの接続待ち受け状態になると、中間ドライバ2006に対して、待ち受け開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、高速化エンジン制御2001の待ち受けポート番号が含まれる。
中間ドライバ2006は、高速化エンジン制御2001からの通知を受けると、フレーム解析処理において、高速化エンジン制御2001宛てのパケットが到着した際に、TCPセッションの接続/終端などの処理が出来るよう設定を行う。
ゲートウェイ装置30内のゲートウェイアプリケーション3001Aは、ユーザからのゲートウェイ装置20内の高速化エンジン制御2001への接続要求を受け、SSL3002にゲートウェイ装置20内の高速化エンジン制御2001への通信開始を指示する。同時に、中間ドライバ3006に対して、ゲートウェイ装置20内の高速化エンジン制御2001への通信開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、高速化エンジン制御2001のポート番号、及びゲートウェイアプリケーション3001Aの送信元ポート番号、さらにゲートウェイ装置30のIPアドレスが含まれる。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003にゲートウェイ装置20内の高速化エンジン制御2001への通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのTCPセッション確立要求パケット(SYN)を送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定されている。このTCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットパケットのことである。本明細書においては、TCPセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYN+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを生成し、中間ドライバ3006に転送する。
中間ドライバ3006は、IPスタック3005からTCPセッション確立要求のフレームを受信し、フレーム解析を行う。解析の結果、このフレームは、予め、ゲートウェイアプリケーション3001より通知された宛先IP、宛先ポート、送信元IP、送信元ポートが付加されたフレームであるので、カプセル解除において、MACヘッダを取り外してパケットにする。そして中間ドライバ3006のTCP部でTCP3003からTCP2003へのTCP処理を終端させる。すなわち、TCP3003は、元々は、TCP2003に対してTCPセッションの確立要求を行ったが、実際は、この要求に対して中間ドライバ内のTCPで保留してTCPセッションの確立を終端させ、TCP3003と中間ドライバ3006内のTCPとの間でTCPセッションの確立処理を行う。
中間ドライバ3006は、終端処理を行う際、中間ドライバ2006に対して、TCP2003との間でTCPセッションを確立するよう要求する為、ドライバ3007に接続要求のための接続要求パケットを生成する。この接続要求パケットの宛先IPアドレスにはゲートウェイ装置20が、宛先ポート番号にはTCP2003が設定される。そしてこのパケットに宛先MACアドレスを付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定して接続要求フレームにする。この接続要求フレームは、TCP規格に沿ったパケットではなく、本発明の通信システムにおける独自のパケットである。
ドライバ3007は、中間ドライバ3006から接続要求フレームを受信し、MAC3011に転送する。
MAC3011は、ドライバ3007からフレームを受信し、PHY3012に転送する。
PHY3012は、MAC3011からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からパケットを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からフレームを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内から接続要求のフレームを受信し、ポート2013、PHY2012、高速化エンジン2014、MAC2011、ドライバ2007の経路でフレームを転送し、中間ドライバ2006に転送する。この時、高速化エンジン2014は、PHYから受信したフレームを、そのまま、MAC 2011に転送する。
中間ドライバ2006は、ドライバ2007から接続要求フレームを受信し、フレーム解析を行う。解析の結果、このフレームは、予め、高速化エンジン制御2001より通知された、高速化エンジン制御2001への宛先IP、及び宛先ポートが付加された接続要求フレームであるので、このフレームを受信してカプセル化解除においてMACヘッダを取り外してパケットにする。このパケットは、中間ドライバ3006から中間ドライバ2006に向けて送信されたTCP2003への接続要求パケットである為、中間ドライバ2006内のTCPは、TCP2003との間でTCPセッションを確立する為に、IPスタック2005に対して、TCP2003とのセッション確立に必要なパケットを送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定され、更に、送信元IPアドレスにはゲートウェイ装置30のIPアドレスが設定され、送信元ポート番号にはTCP3003のポート番号が設定される。そして、このパケットには、中間ドライバ2006内の再カプセル化によってMACアドレスが付加され、フレームの形にしてIPスタック2005に転送される。
すなわち、中間ドライバ2006内のTCPは、TCP3003の名前を騙ってTCP2003に対してTCPセッションの確立要求を行う。従って、TCP2003は、恰も、TCP3003と通信しているかのように認識し、更にTCP3003は、恰も、TCP2003と通信しているかのように認識する。しかしながら、実際のTCP処理は、TCP3003と中間ドライバ3006内のTCPとの間、及び中間ドライバ2006とTCP2003との間で行われ、更に中間ドライバ3006と中間ドライバ2006との間は、UDP等の輻輳制御のない方法(本発明の通信システムにおける独自のパケット)で、別途に通信が行われる。そして、TCP3003と中間ドライバ3006間のTCPセッションと、中間ドライバ3006と中間ドライバ2006の間のUDP等何らかの通信セッション、更に中間ドライバ2006とTCP2003の間のTCPセッションが、中間ドライバ3006及び中間ドライバ2006によって相互に接続・中継されることにより、恰も、TCP3003とTCP2003との間でTCPセッションが確立しているかのように通信が行われる。
IPスタック2005は、中間ドライバ2006からフレームを受信し、MACヘッダを外してパケットにし、IPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、このパケットをTCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットはTCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、セッション確立要求に対して応答パケット(SYN+ACK)を返送する。この際、TCP2003は、TCPセッション確立要求は、TCP3003から届いたものであると認識する。これは、実際の確立要求は中間ドライバ2006内のTCPから送信されたものであるが、中間ドライバ2006内のTCPは、TCP3003を騙ってTCP2003にセッション確立要求を行った為、TCP2003は、恰も、TCP3003とセッションを確立すると認識する。
従って、TCP2003は、TCPセッション確立要求に対して応答パケット(SYN+ACK)を、TCP3003宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートはTCP3003のポート番号が設定される。
応答パケットは、IPルーティング2004を経由して、IPスタック2005に送られ、ここでMACヘッダが付加されて応答フレームになり中間ドライバ2006に届く。
中間ドライバ2006は、応答フレームを受信すると、中間ドライバ2006内のカプセル化解除において応答フレームのMACヘッダを外して応答パケットを取り出し、TCPでこの応答パケット(SYN+ACK)を受信して、この応答パケットに対してACKパケットをTCP2003に送信してTCP処理を終端させる。そして、中間ドライバ3006に対して、接続完了通知のパケットを生成する。上記接続完了通のパケットは、TCP規格に沿ったものではなく、独自のパケットである。この接続完了通知パケットは、宛先IPアドレスにはゲートウェイ送装置30が、宛先ポート番号にはTCP3003が、送信元IPアドレスにはゲートウェイ装置20が、送信元ポート番号にはTCP2003が設定される。そして、中間ドライバ2006内の再カプセル化において、接続完了通知パケットにMACヘッダを付加して接続完了通知フレームとなる。
接続完了通知フレームは、接続要求フレームとは逆の経路、即ち、ドライバ2007,NIC201,HUB22,Firewall33、HUB32,NIC301を経由して、CPU300内の中間ドライバ3006に届く。
中間ドライバ3006は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、パケットは、予め、ゲートウェイアプリケーション3001Aより通知された、ゲートウェイアプリケーション3001Aへの宛先IP、及び宛先ポートが付加された接続完了通知フレームであるので、このフレームを受信する。受信したフレームは、カプセル化解除においてMACヘッダを取り外し、パケットにする。パケットは中間ドライバ2006から中間ドライバ3006に向けて送信されたTCP2003と中間ドライバ2006との間の接続完了通知パケットである為、中間ドライバ3006内のTCPは、TCPプロトコルに従って、TCPセッション確立の為に必要な応答パケット(SYN+ACK)をTCP3003に送る為、IPスタック3005に対して、TCPプロトコルに従って生成した応答パケットを送信する。
応答パケットは、IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004より応答パケット(SYN+ACK)を受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、SSL3002に対して、TCP2003とのTCPセッション接続完了を通知する。この際、TCP3003は、応答パケット(SYN+ACK)が、TCP2003から届いたものであると認識する。これは、実際の応答は中間ドライバ3006内のTCPから送信されたものであるが、中間ドライバ3006内のTCPは、TCP2003を騙ってTCP3003にセッション確立応答を行った為、TCP3003は、恰も、TCP2003から応答があったと認識する。
TCP3003は応答パケット(SYN+ACK)を受信すると、この応答パケットに対してACKパケットを生成してTCP1003宛に送信する。このACKパケットは、中間ドライバ3006のTCPがIPルーティング2004及びIPスタック2005を介して受信し、TCP処理を終端させる。
SSL3002は、TCP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003と中間ドライバ3006内のTCPとの間で設定されたTCPセッションを通り、中間ドライバ3006に到着する。
中間ドライバ3006は、SSLセッション確立要求パケットを受信してTCPを終端させ、UDP等の輻輳制御の掛からないヘッダを付け、SSLセッション確立要求パケットを中間ドライバ2006に向け送信する。SSLセッション確立要求パケットは、NIC301、HUB32,Firewall33、HUB22、NIC201を経由して、中間ドライバ2006に到着する。この際、NIC201内の高速化エンジン2014は、PHY2012から受信したパケットを、そのまま、MAC2011に転送する。
中間ドライバ2006は、SSLセッション確立要求パケットを受信すると、中間ドライバ2006内のTCPとTCP2003との間で設定されたTCPセッションを通り、TCP2003に到着する。
TCP2003は、パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、高速化エンジン制御2001に対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003と中間ドライバ2006との間のTCPセッションを経由して中間ドライバ2006に到達し、中間ドライバ2006と中間ドライバ3006との間のUDP等の輻輳制御の無いセッションを経由して中間ドライバ3006に到達する。更に、中間ドライバ3006とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
高速化エンジン制御2001は、SSL2002からのSSLセッション確立通知を受けると、中間ドライバ2006に対して、SSLセッション確立通知によって受信したSSL3002の公開鍵と、SSL2002の秘密鍵、SSL2002とSSL3002の間の共通鍵を通知する。
中間ドライバ2006は、公開鍵、秘密鍵および共通鍵の通知を受けると、公開鍵、秘密鍵および共通鍵、SSLセッションの相手方機器のIPアドレス(ゲートウェイ装置30のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP3003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP2003のポート)、送信元IPアドレス(ゲートウェイ装置20のIPアドレス)、及び開始命令を制御フレームに載せ、高速化エンジン2014に通知する。
制御フレームは、ドライバ2007、MAC2011を通じて高速化エンジン2014に到達する。
高速化エンジン2014は、MACアドレス等により制御フレームを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、それぞれ復号化および暗号化に使用するため保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
高速化エンジン2014は、高速化処理開始命令以前は、制御フレーム以外のMAC2011から受信したフレームは、全て、そのまま、PHY2012に送信し、PHY2012から受信したフレームは、全て、そのまま、MAC2011に送信していた。しかしながら、高速化処理開始命令以降は、制御フレーム以外のMAC2011から受信したフレームを、全て、そのまま、PHY2012に送信する動作には変わりないが、PHY2012から受信したフレームについては、以下のような処理を行う。
(1) ゲートウェイ装置20宛て、かつ、SSL3002で暗号化されたフレームであれば、UDP等のカプセル化を解除し、必要であれば、フラグメントを解除し、フレームを復号化し、PHY2012側に送信する。
(2) (1)以外の自ノード宛てフレームであれば、MAC2011に転送する。
(3) ブロードキャストフレーム、若しくはマルチキャストフレームであれば、フレームをコピーして、一方はそのままMAC2011に転送し、もう一方は暗号化とカプセル化を行い、SSL3002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
(4) (1)〜(3)以外のフレームであれば、暗号化とカプセル化を行い、SSL3002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
以上のようにして、高速化エンジン2014と中間ドライバ3006との間で、フレーム転送の為のUDP等の輻輳制御の無いセッションが確立される。又、高速化エンジン2014とSSL3002との間で、SSLセッション(SSLトンネル)が確立される。
すなわち、SSL2002は、SSLセッション確立要求時のみ、SSL3002と遣り取りするが、SSLセッション確立が終了すると、以後は、高速化エンジン2014とSSL3002との間で、SSLの暗号化および復号化の遣り取りを行う。
又、中間ドライバ2006は、SSLセッション確立の際にのみ、中間ドライバ3006とフレームの遣り取りを行うが、SSLセッションが確立した後は、高速化エンジン2014と中間ドライバ3006との間でフレームの遣り取りを行う。
以上により、第3の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図19を用いて、第3の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ3008、HUB22やHUB32がすでに端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)および宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)をつけてEthernetフレームを作成し、ドライバ2105に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20内のNIC201は、ポート2013でHUB22からのフレームを受信し、PHY2012を経由して、高速化エンジン2014に渡す。
高速化エンジン2014は、到着したフレームの宛先MACがサーバ31宛てであることから、高速化エンジン2014内の暗号化2014Gにおいてフレームを暗号化して図3におけるデータF14を作成し、更にカプセル化2014Iにおいて図3におけるF11〜F13の各ヘッダを付加してEther over SSLフレームF10のフォーマットにして、再びPHY2012側に転送する。
この時、INET MAC F11内のMAC DAにはFirewall33のWAN側のMACアドレスが設定され、F11内のMAC SAにはゲートウェイ装置20のMACアドレスが設定される。又、INET IP F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。INET TCP F13に関しては、Firewall33を通過する為に、恰も、ゲートウェイ装置30内のTCP3003と通信しているかのように見せかける為のTCPヘッダを付加する。しかし、このTCPヘッダは、実際には中間ドライバ3006において一旦取り外される為、TCP13003の輻輳制御には影響しない。従って、ここで付加するF13は、TCPヘッダの形式を持つが、実際には、UDPの働きしかしない。仮に、Firewall33の代わりにルータが設置されている場合は、F13はUDPヘッダでも構わない。
PHY2012は、高速化エンジン2014よりフレームを受信すると、ポート2013を経由してHUB22にフレームを転送する。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、中間ドライバ3006に転送する。
中間ドライバ3006は、ブリッジ3008よりフレームを受信する。このフレームは、受信時にはフレームフォーマットF10の形をしているが、カプセル化解除3006GにおいてヘッダF11、ヘッダF12、ヘッダF13を削除し、暗号化されたデータF14のみを残す。そして、データF14をTCP3006Aに渡し、予め、TCP3003と中間ドライバ内のTCP3006Aとの間で設定されたTCPセッションに流す。
中間ドライバ3006内のTCP3006Aは、受信したデータF14に、TCP3003とのTCP通信に必要なTCPヘッダF13と、IPヘッダF12を付けて、再カプセル化3006Eに送る。F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。
中間ドライバ3006内の再カプセル化3006Eは、TCP3006Aよりデータを受信すると、これにヘッダF11を付けて、IPスタック3005に送る。ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスを設定し、F11内のMAC SAにはFirewall33のWAN側のMACアドレスを設定する。このようにして、TCP3006Aからの受信フレームをフレームフォーマットF10の形にして、IPスタック3005に転送する。
IPスタック3005は、中間ドライバ3006から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送するなどの処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。
このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームをそのままサーバ31側のポートに出力する。
サーバ31はHUB32から送信されたフレームを受信し、ドライバ3105,IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡す。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
尚、本実施の形態でも、第1の実施の形態におけるセッション中継装置10内のソフトウェア処理と同様に、ゲートウェイ装置30内のソフトウェアにおいて、中間ドライバ3006とTCP3003の間で、一時的にTCP over TCP形式の処理になる。しかしながら、中間ドライバとTCPの間では、パケットが欠落する可能性が殆ど無い為、TCP over TCPによる速度低下が発生する可能性は極めて低い。これは、TCP over TCP問題とは、パケットロスが発生した時に著しい速度低下が発生する問題であり、仮に、パケットロスが発生しなければ、TCP over TCP形式の処理を行っても、ヘッダF13側のTCPのウインドウサイズは常に大きくなり、速度低下などの問題は発生しないからである。
上記の方法でヘッダF13側のTCPの輻輳制御と再送制御を事実上停止させても、ヘッダF23側のTCPの輻輳制御と再送制御は通常通り機能する為、端末21とサーバ31の各々のアプリケーションから見た場合、端末21内のTCPとサーバ31内のTCPの働きにより、輻輳制御、再送制御ともに問題なく行われる。
本実施の形態では、ゲートウェイ装置30側に中間ドライバ等を実装し、ゲートウェイ装置20側に中間ドライバおよび高速化エンジンを実装する例を示したが、これとは逆に、ゲートウェイ装置20側に中間ドライバ等を実装し、ゲートウェイ装置30側に中間ドライバおよび高速化エンジンを実装することも可能である。更に、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、高速化エンジン2014を利用することで、ゲートウェイ装置20のCPU200(ソフトウェア処理)におけるカプセル化処理および暗号化/復号化処理を排除し、これら処理を全て高速化エンジン(ハードウェア)で実現できる為である。
更に、これは、ゲートウェイ装置20とゲートウェイ装置30との間の通信において、ヘッダF13の位置のTCPによる輻輳制御と再送制御が発生しないよう、ゲートウェイ装置30内の中間ドライバと、ゲートウェイ装置20内の中間ドライバにおいて、ゲートウェイ装置20内のTCP、又はゲートウェイ装置30内でTCPの処理を終端し、TCP over TCP問題の発生を回避しているからである。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、暗号化/復号化とカプセル化を同一ハードウェア(FPGA/ASIC)上で行うことが出来るからである。
又、これは、比較的安価なMACとPHY間のインタフェースに、ハードウェアを実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きな暗号化/復号化とカプセル化のみをハードウェア処理できるからである。
[第4の実施の形態]
本発明の第4の実施の形態は、第3の実施の形態に対して、ゲートウェイ装置20内に高速化エンジン2014が無く、高速化エンジン制御2001の代わりにゲートウェイアプリケーション2001Aが存在している点において異なる。すなわち、ゲートウェイ装置20が、第3の実施の形態におけるゲートウェイ装置30と、同様の構成を有し、同様の動作を行う。
第4の実施の形態における端末21,サーバ31、HUB22,HUB32、ゲートウェイ装置30、イントラネット2、イントラネット3の構成および動作は、第3の実施の形態と同じである。
第4の実施の形態においては、イントラネット2は、閉域LANだけ無く、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図20は、第4の実施の形態における各機器の構成と、フレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置20は、第3の実施の形態におけるゲートウェイ装置20に対して、高速化エンジン2014が無く、高速化エンジン制御2001の代わりにゲートウェイアプリケーション2001Aが存在している点、更にブリッジ2008,ドライバ2009,仮想NIC2010が追加されている点において異なる。
ゲートウェイアプリケーション2001A、ブリッジ2008、ドライバ2009、仮想NIC2010は、ゲートウェイ装置30内のゲートウェイアプリケーション3001A、ブリッジ3008、ドライバ3009、仮想NIC3010と、各々、同様の動作を行う。
仮想NIC3010、ドライバ3009、ブリッジ3008は、中間ドライバ3006にその機能を纏め、一体化させることも出来る。この場合、ゲートウェイアプリケーション3001Aから出たフレームは、中間ドライバ3006を経由してドライバ3007に渡され、又、ドライバ3007から入力した自ノード宛て以外のユニキャストフレーム若しくはブロードキャストフレームは、中間ドライバ3006からゲートウェイアプリケーション3001Aに送られる。
端末21、サーバ31、ゲートウェイ装置20、Firewall33,HUB22、HUB32に関しては、第3の実施の形態と同様の構成を有し、同様の動作を行う。
従って、第4の実施の形態では、ゲートウェイ装置20とゲートウェイ装置30との間で、予め、SSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
図20を用いて、第4の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008,ブリッジ3008、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33のWAN側,Firewall33のLAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置20内のゲートウェイアプリケーション2001Aは、起動後ゲートウェイ装置30からの接続待ち受け状態になると、中間ドライバ2006に対して、待ち受け開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、ゲートウェイアプリケーション2001Aの待ち受けポート番号が含まれる。
中間ドライバ2006は、ゲートウェイアプリケーション2001Aからの通知を受けると、フレーム解析処理において、ゲートウェイアプリケーション2001A宛てのパケットが到着した際に、TCP接続/終端などの処理が出来るよう設定を行う。
ゲートウェイ装置30内のゲートウェイアプリケーション3001Aは、ユーザからのゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの接続要求を受け、SSL3002にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。同時に、中間ドライバ3006に対して、ゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、ゲートウェイアプリケーション2001Aのポート番号、及びゲートウェイアプリケーション3001Aの送信元ポート番号、更にゲートウェイ装置30のIPアドレスが含まれる。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのTCPセッション確立要求パケット(SYN)を送信する。このセッション確立要求パケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定されている。セッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットパケットのことである。本明細書においては、SSLセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYN+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、セッション確立要求パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してセッション確立要求のフレームを生成し、中間ドライバ3006に転送する。
中間ドライバ3006は、IPスタック3005からフレームを受信し、フレーム解析を行う。解析の結果、フレームは予めゲートウェイアプリケーション3001より通知された宛先IP、宛先ポート、送信元IP、送信元ポートが付加されたフレームであるので、カプセル化解除においてMACヘッダを取り外し、中間ドライバ3006のTCP部でTCP3003からTCP2003へのTCPの処理を終端する。すなわち、TCP3003は、本来は、TCP2003に対してセッション確立要求を送信したが、実際は、この要求に対して中間ドライバ3006内のTCPが受信して保留し、TCP3003と中間ドライバ3006内のTCPとの間でTCPセッションの確立処理を行い、終端させる。
中間ドライバ3006は、TCP終端処理を行う際、中間ドライバ2006に対して、TCP2003との間でTCPセッションを確立するよう要求する為、ブリッジ3008を経由してドライバ3007に接続要求のパケットを送る。尚、この接続要求パケットはTCP規格に沿ったパケットではなく、本発明の通信システム独自のパケットである。このパケットは、宛先IPアドレスにゲートウェイ装置20を、宛先ポート番号にTCP2003を設定する。そしてこのパケットに宛先MACアドレスを付加して、更に送信元MACアドレスに自ノードを設定して接続要求フレームを生成する。
ドライバ3007は、中間ドライバ3006からフレームを受信し、MAC3011に転送する。
MAC3011は、ドライバ3007からフレームを受信し、PHY3012に転送する。
PHY3012は、MAC3011からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からフレームを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からフレームを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内からフレームを受信し、ポート2013、PHY2012、MAC2011、ドライバ2007、ブリッジ2008の経路でフレームを転送し、中間ドライバ2006に転送する。
中間ドライバ2006は、ドライバ2007からフレームを受信し、フレーム解析を行う。解析の結果、このフレームは予めゲートウェイアプリケーション2001Aより通知された、ゲートウェイアプリケーション2001Aへの宛先IP、及び宛先ポートが付加された接続要求のフレームであるので、このフレームを受信し、カプセル化解除においてMACヘッダを取り外してパケットにする。このパケットは、中間ドライバ3006から中間ドライバ2006に向けて送信されたTCP2003への接続要求パケットである為、中間ドライバ2006内のTCPは、TCP2003との間でTCPセッションを確立する為に、IPスタック2005に対して、TCP2003とのセッション確立に必要なセッション確立要求パケットを送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定され、更に、送信元IPアドレスにはゲートウェイ装置30のIPアドレスが設定され、送信元ポート番号にはTCP3003のポート番号が設定される。
すなわち、中間ドライバ2006内のTCPは、TCP3003の名前を騙ってTCP2003に対してTCPセッション確立要求を行う。従って、TCP2003は、恰も、TCP3003と通信しているかのように認識し、更にTCP3003は、恰も、TCP2003と通信しているかのように認識する。しかしながら、実際のTCP処理は、TCP3003と中間ドライバ3006内のTCPとの間、及び中間ドライバ2006とTCP2003との間で行われ、更に中間ドライバ3006と中間ドライバ2006との間は、UDP等の輻輳制御の無い方法(本発明の通信システムにおける独自のパケット)で、別途に通信が行われる。そして、TCP3003と中間ドライバ3006間のTCPセッションと、中間ドライバ3006と中間ドライバ2006の間のUDP等何らかの通信セッション、更に中間ドライバ2006とTCP2003の間のTCPセッションが、中間ドライバ3006及び中間ドライバ2006によって相互に接続・中継されることにより、恰も、TCP3003とTCP2003との間でTCPセッションが確立しているかのように通信が行われる。
IPスタック2005は、中間ドライバ2006からフレームを受信し、MACヘッダを外してパケットにしてIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、このパケットをTCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットは、TCPセッション確立要求パケット(SYN)であるので、TCPセッション確立の為に、TCPプロトコルに従いって必要な応答パケット(SYN+ACK)を返送する。この際、TCP2003は、受信したTCPセッション確立要求は、TCP3003から届いたものであると認識する。これは、実際の確立要求は中間ドライバ2006内のTCPから送信されたものであるが、中間ドライバ2006内のTCPは、TCP3003を騙ってTCP2003にセッション確立要求を行った為、TCP2003は、恰も、TCP3003とセッションを確立すると認識する。
従って、TCP2003は、TCP規格に沿って生成した応答パケット(SYN+ACK)を、TCP3003宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートは、TCP3003のポート番号が設定される。
応答パケットは、IPルーティング2004を経由してIPスタック2005に送られ、ここでMACヘッダが付加されて応答フレームになり、中間ドライバ2006に届く。
中間ドライバ2006は、応答フレームを受信すると、中間ドライバ2006内のカプセル化解除において応答フレームのMACヘッダを外して応答パケットを取り出し、中間ドライバ2006のTCPで受信して、応答パケットに対するACKパケットをTCP2003に送信してTCP処理を終端させる。そして、中間ドライバ3006に対して、接続完了通知の為の接続完了通知パケットを送信する。この接続完了通知パケットはTCPの規格に沿ったパケットではなく、独自のパケットである。この接続完了通知パケットの宛先IPアドレスにはゲートウェイ送装置30が、宛先ポート番号にはTCP3003が、送信元IPアドレスにはゲートウェイ装置20が、送信元ポート番号にはTCP2003が設定される。そして中間ドライバ2006内の再カプセル化において、接続完了通知パケットにMACヘッダを付加されて接続完了通知フレームが生成される。
接続完了通知フレームは、接続要求フレームとは逆の経路、即ち、ドライバ2007,NIC201,HUB22,Firewall33、HUB32,NIC301を経由して、CPU300内の中間ドライバ3006に届く。
中間ドライバ3006は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、受信したフレームは、予め、ゲートウェイアプリケーション3001Aより通知された、ゲートウェイアプリケーション3001Aへの宛先IP、及び宛先ポートが付加されたフレームであるので、このフレームを受信して、カプセル化解除におk手MACヘッダを取り外してパケットにする。このパケットは、中間ドライバ2006から中間ドライバ3006に向けて送信されたTCP2003と中間ドライバ2006との間の接続完了通知パケットである為、中間ドライバ3006内のTCPは、TCPプロトコルに従い、TCPセッション確立の為に必要な応答パケット(SYN+ACK)をTCP3003に送る為、IPスタック3005に対して、応答パケットを送信する。
応答パケットは、IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004よりパケットを受信する。このパケットは、TCPセッションの確立要求に対する応答パケットであるので、SSL3002に対して、TCP2003とのTCPセッション接続完了を通知する。この際、TCP3003は、応答パケットが、TCP2003から届いたものであると認識する。これは、実際の応答は中間ドライバ3006内のTCPから送信されたものであるが、中間ドライバ3006内のTCPは、TCP2003を騙ってTCP3003にセッション確立に対しての応答を行った為、TCP3003は、恰も、TCP2003から応答があったと認識する。
TCP3003は応答パケットを受信すると、この応答パケットに対してACKパケットを生成してTCP2003宛に送信する。このACKパケットは、中間ドライバ3006のTCPが、IPルーティング2004及びIPスタック2005を介して受信し、TCP処理を終端させる。
SSL3002は、TCP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003と中間ドライバ3006内のTCPとの間で設定されたTCPセッションを通り、中間ドライバ3006に到着する。
中間ドライバ3006は、SSLセッション確立要求パケットを受信してTCPセッションを終端させ、UDP等の輻輳制御の掛からないヘッダを付け、パケットを中間ドライバ2006に向け送信する。パケットはNIC301、HUB32,Firewall33、HUB22、NIC201を経由して、中間ドライバ2006に到着する。この際、NIC201内の高速化エンジン2014は、PHY2012から受信したパケットを、そのまま、MAC2011に転送する。
中間ドライバ2006は、SSLセッション確立要求パケットを受信すると、中間ドライバ2006内のTCPとTCP2003との間で設定されたTCPセッションを通り、TCP2003に到着する。
TCP2003は、SSLセッション確立要求パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、ゲートウェイアプリケーション2001Aに対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003と中間ドライバ2006との間のTCPセッションを経由して中間ドライバ2006に到達し、中間ドライバ2006と中間ドライバ3006の間のUDP等の輻輳制御の無いセッションを経由して中間ドライバ3006に到達する。更に、中間ドライバ3006とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
以上のようにして、中間ドライバ2006と中間ドライバ3006の間で、フレーム転送の為のUDP等の輻輳制御の無いセッションが確立される。又、SSL2002とSSL3002との間で、SSLセッションが確立される。
以上により、第4の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図20を用いて、第4の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008,ブリッジ3008,HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)及び宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、ドライバ2105に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスでは無いことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。
ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11をつけて、Ether over SSLフレームフォーマットF10の形式にして、中間ドライバ2006に渡す。
ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
中間ドライバ2006は、IPスタック2005よりフレームを受信し、フレーム解析2006Hにおいてフレーム解析を行う。すると解析の結果、フレームが、予め、ゲートウェイアプリケーション2001Aより通知された、ゲートウェイ装置30との間のSSLセッションのフレームであることから、カプセル化解除2006Fにおいて、このフレームのMACヘッダF11を削除して保存し、TCP2006Aに渡す。
中間ドライバ2006内のTCP2006Aは、TCP2003Aを終端する。すなわち、フレームのIPヘッダF12とMACヘッダF13を削除してF14のみを残し、データF14をフラグメント分割2006Bに送る。更に、TCP2003に対してACKフレームを送信する。
中間ドライバ2006内のフラグメント分割2006Bは,TCP2006Aから受信したデータF14のサイズを確認し、フラグメントの必要が無いことから、そのまま、データを再カプセル化2006Dに送る。
中間ドライバ2006内の再カプセル化2006Dは、フラグメント分割2006Bより受信したデータF14に、MACヘッダF11、IPヘッダF12、MACヘッダF13を付け、フレームフォーマットF10の形式にして、ブリッジ2008に送信する。この際、F11内のMAC DAにはFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。又、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。これらのヘッダは、カプセル化解除2006Fによって保存されたものである。
中間ドライバより送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、中間ドライバ3006に転送する。
中間ドライバ3006は、ブリッジ3008よりフレームを受信する。このフレームは、受信時にはフレームフォーマットF10の形をしているが、カプセル化解除3006GにおいてヘッダF11、ヘッダF12、ヘッダF13を削除し、暗号化されたデータF14のみを残す。そして、データF14をTCP3006Aに渡し、予め、TCP3003と中間ドライバ内のTCP3006Aとの間で設定されたTCPセッションに流す。中間ドライバ3006内のTCP3006Aは、受信したデータF14に、TCP3003とのTCP通信に必要なTCPヘッダF13と、IPヘッダF12を付けて、再カプセル化3006Eに送る。F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。
中間ドライバ3006内の再カプセル化3006Eは、TCP3006Aよりデータを受信すると、これにヘッダF11を付けて、IPスタック3005に送る。ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスを設定し、F11内のMAC SAにはFirewall33のWAN側のMACアドレスを設定する。このようにして、TCP3006Aからの受信フレームをフレームフォーマットF10の形にして、IPスタック3005に転送する。
IPスタック3005は、中間ドライバ3006から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送するなどの処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。
このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31は、HUB32から送信されたフレームを受信し、ドライバ3105,IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡す。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
尚、本実施の形態でも、第1の実施の形態におけるセッション中継装置10内のソフトウェア処理と同様に、ゲートウェイ装置30内のソフトウェアと、ゲートウェイ装置20内のソフトウェアにおいて、中間ドライバ3006とTCP3003の間、及び中間ドライバ2006とTCP2003との間で、一時的にTCP over TCP形式の処理になる。しかしながら、中間ドライバとTCPの間では、パケットが欠落する可能性が殆ど無い為、TCP over TCPによる速度低下が発生する可能性は極めて低い。これは、TCP over TCP問題とは、パケットロスが発生した時に著しい速度低下が発生する問題であり、仮に、パケットロスが発生しなければ、TCP over TCP形式の処理を行っても、ヘッダF13側のTCPのウインドウサイズは常に大きくなり、速度低下などの問題は発生しないからである。
上記の方法でヘッダF13側のTCPの輻輳制御と再送制御を事実上停止させても、ヘッダF23側のTCPの輻輳制御と再送制御は通常通り機能する為、端末21とサーバ31の各々のアプリケーションから見た場合、端末21内のTCPとサーバ31内のTCPの働きにより、輻輳制御、再送制御ともに問題なく行われる。
尚、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、ゲートウェイ装置20とゲートウェイ装置30との間の通信において、ヘッダF13の位置のTCPによる輻輳制御と再送制御が発生しないよう、ゲートウェイ装置30内の中間ドライバと、ゲートウェイ装置20内の中間ドライバにおいて、ゲートウェイ装置20内のTCPと、ゲートウェイ装置30内のTCPを終端し、TCP over TCP問題の発生を回避しているからである。
[第5の実施の形態]
本発明の第5の実施の形態は、第4の実施の形態に対して、ゲートウェイ装置20内の中間ドライバ2006と、ゲートウェイ装置30内の中間ドライバ3006が無くなり、代わりに端末21内の中間ドライバ2106と、サーバ31内の中間ドライバ3106が、各々、設置されている点において異なる。
第5の実施の形態におけるHUB22,HUB32、イントラネット2、イントラネット3の構成および動作は、第4の実施の形態と同じである。
第5の実施の形態においては、イントラネット2は、閉域LANだけで無く、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図21は、第5の実施の形態における各機器の構成とフレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置20は、第4の実施の形態におけるゲートウェイ装置20に対して、中間ドライバ2006が無くなっている点、及びゲートウェイアプリケーション2001Aが中間ドライバ2006に対して、SSLセッションに関する情報(ゲートウェイアプリケーションのポート番号等)を伝達しなくなっている点において異なる。
ゲートウェイ装置30は、第4の実施の形態におけるゲートウェイ装置30に対して、中間ドライバ3006が無くなっている点、及びゲートウェイアプリケーション3001Aが中間ドライバ3006に対して、SSLセッションに関する情報(ゲートウェイアプリケーションのポート番号等)を伝達しなくなっている点において異なる。
端末21は、第4の実施の形態における端末21に対して、中間ドライバ2106が設置されている点において異なる。
中間ドライバ2106は、第4の実施の形態における中間ドライバ2006や、図7に示す第1の実施の形態における中間ドライバ1008と、同様の構成を有し、同様の動作を行う。但し、予め、全てのアプリケーションからのTCPパケットを、一旦、終端するように設定されている。その為、第4の実施の形態における、ゲートウェイアプリケーション2001Aから中間ドライバ2006への、ゲートウェイアプリケーション2001Aのポート番号の伝達のような動作は不要である。
サーバ31は、第4の実施の形態におけるサーバ31に対して、中間ドライバ3106が設置されている点において異なる。
中間ドライバ3106は、第4の実施の形態における中間ドライバ3006や、図7に示す第1の実施の形態における中間ドライバ1008と、同様の構成を有し、同様の動作を行う。但し、予め、全てのアプリケーションからのTCPパケットを、一旦、終端するように設定されている。その為、第4の実施の形態における、ゲートウェイアプリケーション3001Aから中間ドライバ3006への、ゲートウェイアプリケーション3001Aのポート番号の伝達のような動作は不要である。
HUB22、HUB32に関しては、第4の実施の形態と同様の構成を有し、同様の動作を行う。
Firewall33は、第4の実施の形態のFirewall33と同様の構成を有し、同様の動作を行う。但し、本実施の形態においては、Firewall33の代わりに、NATルータやProxyサーバを用いても良い。
第5の実施の形態でも、他の実施の形態と同様に、ゲートウェイ装置20とゲートウェイ装置30との間で、予め、SSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
図21を用いて、第5の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008,ブリッジ3008、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33のLAN側,Firewall33のWAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置30内のゲートウェイアプリケーション3001Aは、ユーザからのゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの接続要求を受け、SSL3002にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのセッション確立要求パケット(SYN)を送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定されている。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにセッション中継装置10宛、宛先ポート番号にTCP1003が設定されている。このTCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットのことである。本明細書においては、TCPセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYNパケット+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを生成し、ブリッジ3008を経由してドライバ3007に転送する。
ドライバ3007は、IPスタック3005からフレームを受信し、MAC3011に転送する。
MAC3011はドライバ3007からフレームを受信し、PHY3012に転送する。
PHY3012は、MAC3011からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からフレームを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からフレームを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内からフレームを受信し、ポート2013、PHY2012、MAC2011、ドライバ2007、ブリッジ2008の経路で転送し、IPスタック2005に転送する。
IPスタック2005は、ブリッジ2008からフレームを受信し、MACヘッダを外してパケットにしてIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、TCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットはTCPセッション確立要求パケット(SYN+ACK)であるので、TCPプロトコルに従い、セッション確立要求に対して応答パケット(SYN+ACK)をTCP3003宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートは、TCP3003のポート番号が設定される。
応答パケットは、IPルーティング2004、IPスタック2005、ブリッジ2008,ドライバ2007,NIC201,HUB22,Firewall33、HUB32,NIC301を経由して、CPU300に到達し、更に、ドライバ3007、ブリッジ3008,IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004よりパケットを受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、SSL3002に対して、TCP2003とのTCPセッション接続完了を通知する。
SSL3002は、TCP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003とTCP2003との間で設定されたTCPセッションを通り、NIC301、HUB32,Firewall33、HUB22、NIC201を経由して、TCP2003に到着する。
TCP2003は、パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、ゲートウェイアプリケーション2001Aに対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
以上のようにして、SSL2002とSSL3002との間で、SSLセッションが確立される。
以上により、第4の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[アプリケーション2101からアプリケーション3101へのセッション構築動作]
図21を用いて、第5の実施の形態において、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間の、セッション確立動作について説明を行う。
この際、ブリッジ2008,ブリッジ3008,HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
中間ドライバ2106及び中間ドライバ3106は、自ノード内の全てのアプリケーションのTCPを終端するよう、予め、設定されているものとする。
端末21内のアプリケーション2101は、ユーザからのサーバ31内のアプリケーション3101への接続要求を受け、TCP2102にサーバ31内のアプリケーション3101への通信開始を指示する。
TCP2102は、アプリケーション2101からの通信開始指示を受け、TCP3102との間でTCPセッションを確立する為に、IPルーティング2103に対して、TCP3102とのセッション確立に必要なパケットを送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにサーバ31宛、宛先ポート番号にTCP3102が設定されている。このTCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットのことである。本明細書においては、SSLセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYNパケット+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、説明を省略する。
IPルーティング2104は、TCP2102から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック2104に転送する。
IPスタック2104は、IPルーティング2103より受信したパケットに、サーバ31のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに端末21のMACアドレスを設定し、中間ドライバ2106に転送する。
中間ドライバ2106は、IPスタック2104からパケットを受信し、フレーム解析を行う。解析の結果、パケットは、TCPパケットであるので、MACヘッダを取り外し、中間ドライバ2106のTCP部でTCP3102への接続要求を終端させる。すなわち、TCP2102は、もともとはTCP3102に対して接続要求を行ったが、実際は、この要求に対して中間ドライバ2106内のTCPが受信して保留し、TCP2102と中間ドライバ2106内のTCPとの間で、TCPセッションの確立処理を行って終端させる。
中間ドライバ2106は、終端処理を行う際、中間ドライバ3106に対して、TCP3102との間でTCPセッションを確立するよう要求する為、ドライバ2105に接続要求の為のパケットを送る。この接続要求パケットは、TCPの規格に沿ったパケットではなく、独自のパケットである。このパケットは、宛先IPアドレスにサーバ31が、宛先ポート番号にはTCP3102が設定されてフレームが生成される。
ドライバ2105は、中間ドライバ2106から接続要求フレームを受信し、MAC2111に転送する。
MAC2111は、ドライバ2105からフレームを受信し、PHY2112に転送する。
PHY2112は、MAC2111からフレームを受信し、ポート2113に転送する。
ポート2113は、PHY2112からフレームを受信し、イーサネットケーブルを経由してHUB22に転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスではないことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、およびIPヘッダF12をつけて、IPルーティング2004に渡す。
ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11をつけて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、IPスタック3005に転送する。
IPスタック3005は、ブリッジ3008から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってTCP2003に対してACKパケットを返送するなどの処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31は、HUB32内からパケットを受信し、ポート3113、PHY3112、MAC3111、ドライバ3105の経路でパケットを転送し、中間ドライバ3106に転送する。
中間ドライバ3106は、ドライバ3105からパケットを受信し、フレーム解析を行う。解析の結果、パケットは、自ノード内のアプリケーションに向けたTCPパケットであるので、このパケットを受信する。パケットは、中間ドライバ2106から中間ドライバ3106に向けて送信されたTCP3102への接続要求パケットである為、中間ドライバ3106内のTCPは、TCP3102との間でTCPセッションを確立する為に、IPスタック3104に対して、TCP3102とのセッション確立に必要なパケットを送信する。このパケットは、TCP規格に沿ったものであり、宛先IPアドレスにサーバ31宛、宛先ポート番号にTCP3102が設定され、更に送信元IPアドレスには端末21のIPアドレスが設定され、送信元ポート番号にはTCP2102のポート番号が設定される。
すなわち、中間ドライバ3106内のTCPは、TCP2102の名前を騙ってTCP3102に対してセッション確立要求を行う。従って、TCP3102は、恰も、TCP2102と通信しているかのように認識し、更にTCP2102は、恰も、TCP3102と通信しているかのように認識する。しかしながら、実際のTCP処理は、TCP2102と中間ドライバ2106内のTCPとの間、及び中間ドライバ3106とTCP3102との間で行われ、更に中間ドライバ2106と中間ドライバ3106との間は、UDP等の輻輳制御の無い方法で、別途に通信が行われる。そして、TCP2102と中間ドライバ2106間のTCPセッションと、中間ドライバ2106と中間ドライバ3106の間のUDP等何らかの通信セッション、更に中間ドライバ3106とTCP3102の間のTCPセッションが、中間ドライバ2106及び中間ドライバ3106によって相互に接続・中継されることにより、恰も、TCP3003とTCP2003との間でTCPセッションが確立しているかのように通信が行われる。
IPスタック3104は、中間ドライバ3106からパケットを受信し、MACヘッダを外してIPルーティング3103に転送する。
IPルーティング3103は、IPスタック3104より受信したパケットの宛先ポート番号を参照し、TCP3102側のポート番号が付加されていることから、このパケットをTCP3102に転送する。
TCP3102は、IPルーティング3103よりパケットを受信する。このパケットは、TCPセッション確立要求パケットであるので、TCPプロトコルに従い、TCPセッション確立要求に対して応答パケットを返送する。この際、TCP3102は、TCPセッション確立要求は、TCP2102から届いたものであると認識する。これは、実際の確立要求は中間ドライバ3106内のTCPから送信されたものであるが、中間ドライバ3106内のTCPは、TCP2102を騙ってTCP3102にセッション確立要求を行った為、TCP3102は、恰も、TCP2102とセッションを確立すると認識する。
従って、TCP3102は、応答パケットを、TCP2102宛てに送信する。すなわち、応答パケットの宛先IPは端末21のIPアドレスが設定され、応答パケットの宛先ポートは、TCP2102のポート番号が設定される。
応答パケットは、IPルーティング3103、IPスタック3104を経由して、中間ドライバ3106に届く。
中間ドライバ3106は、応答パケットを受信すると、中間ドライバ3106内のTCPで受信してこの応答パケットに対してACKパケットを送信してTCP処理を終端させる。そして、中間ドライバ2106に対して、接続完了通知の為のパケットを送信する。この接続完了通知パケットはTCPの規格に沿ったパケットではなく、独自のパケットである。このパケットは、宛先IPアドレスに端末21が、宛先ポート番号にTCP2102が、送信元IPアドレスにサーバ31が、送信元ポート番号にTCP3102が設定されてフレームが生成される。
接続完了通知フレームは、接続要求フレームとは逆の経路、即ち、ドライバ3105,NIC311,HUB32,NIC301、CPU300,NIC301、Firewall33、HUB32,NIC201、CPU200、NIC201、HUB22、NIC211を経由して、CPU210内の中間ドライバ2106に届く。
中間ドライバ2106は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、受信したフレームは、自ノード内のアプリケーション宛のパケットであるので受信する。受信したパケットは、中間ドライバ3106から中間ドライバ2106に向けて送信されたTCP3102と中間ドライバ3106との間の接続完了通知である為、中間ドライバ2106内のTCPは、TCPプロトコルに従い、セッション確立要求に対する応答パケットをTCP2103に送る為、IPスタック2104に対して、TCPプロトコルに従って応答パケットを生成して送信する。
応答パケットは、IPスタック2104、IPルーティング2103を経由し、TCP2102に到達する。
TCP2102は、IPルーティング2103よりパケットを受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、アプリケーション2101に対して、TCP3102とのTCPセッション接続完了を通知する。この際、TCP2102は、応答パケットが、TCP3102から届いたものであると認識する。これは、実際の応答は中間ドライバ2106内のTCPから送信されたものであるが、中間ドライバ2106内のTCPは、TCP3102を騙ってTCP2102にセッション確立応答を行った為、TCP2102は、恰も、TCP3102から応答があったと認識する。
TCP2102は応答パケットを受信すると、この応答パケットに対してACKパケットを生成してTCP3102宛に設定する。このACKパケットは、中間ドライバ2106のTCPがIPルーティング2103及びIPスタック2104を介して受信し、TCP処理を終端させる。
以上のようにして、第5の実施の形態において、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間の、セッション確立動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図21を用いて、第5の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008,ブリッジ3008,HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)および宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)をつけてEthernetフレームを作成し、中間ドライバ2106に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
中間ドライバ2106は、IPスタック2104よりフレームを受信し、フレーム解析2106Hにおいてフレーム解析を行う。解析の結果、フレームが、先にセッション確立を行ったTCP2102とTCP3102の間のセッションのフレームであることから、カプセル化解除2106Fにおいて、このフレームのMACヘッダF21を削除して保存し、TCP2106Aに渡す。
中間ドライバ2106内のTCP2106Aは、TCP2103Aを終端する。すなわち、フレームのIPヘッダF22とMACヘッダF23を削除してF24のみを残し、データF24をフラグメント分割2106Bに送る。更に、TCP2102に対してACKフレームを送信する。
中間ドライバ2106内のフラグメント分割2106Bは、TCP2106Aから受信したデータF24のサイズを確認し、フラグメントの必要が無いことから、そのまま、データを再カプセル化2106Dに送る。
中間ドライバ2106内の再カプセル化2106Dは、フラグメント分割2106Bより受信したデータF24に、MACヘッダF21、IPヘッダF22、MACヘッダF23を付け、フレームフォーマットF20の形式にして、ドライバ2105に送信する。この際、F21内のMAC DAにはサーバ31のMACアドレスが設定され、F21内のMAC SAには、端末21のMACアドレスが設定される。又、F22内のIP DAには、サーバ31のIPアドレスが設定され、F22内のIP SAには、端末21のIPアドレスが設定される。又、宛先ポートにはTCP3102のポートが設定され、送信元ポートにはTCP2102のポートが指定される。これらヘッダは、カプセル化解除2106Fによって保存されたものである。
ドライバ2105は、中間ドライバ2106より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスでは無いことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11をつけて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、IPスタック3005に転送する。
IPスタック3005は、ブリッジ3008から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送するなどの処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
HUB32から送信されたフレームは、サーバ31内のNIC311、ドライバ3105を経由して中間ドライバ3106に転送される。
中間ドライバ3106は、ドライバ3105よりフレームを受信する。このフレームは、受信時には、フレームフォーマットF20の形をしているが、カプセル化解除3106Gにおいて、ヘッダF21、ヘッダF22、ヘッダF23を削除し、データF24のみを残す。そして、データF24をTCP3106Aに渡し、予め、TCP3102と中間ドライバ内のTCP3106Aとの間で設定されたTCPセッションに流す。
中間ドライバ3106内のTCP3106Aは、受信したデータF24に、TCP3102とのTCP通信に必要なTCPヘッダF23と、IPヘッダF22を付けて、再カプセル化3106Eに送る。F22内のIP DAにはサーバ31のIPアドレスが設定され、F22内のIP SAには端末21のIPアドレスが設定される。
中間ドライバ3106内の再カプセル化3106Eは、TCP3106Aよりデータを受信すると、これにヘッダF21を付けて、IPスタック3104に送る。ここで、F21内のMAC DAにはサーバ31のMACアドレスを設定し、F21内のMAC SAには端末21のMACアドレスを設定する。このようにして、TCP3106Aからの受信フレームをフレームフォーマットF20の形にして、IPスタック3104に転送する。
中間ドライバ3106を出たフレームは、IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡される。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
尚、本実施の形態では、TCPセッションはTCP2102と中間ドライバ2106の間、及びTCP2003とTCP3003の間、及び中間ドライバ3106とTCP3102の間において設定される。従って、中間ドライバ2106からTCP2003の間、及びTCP3003から中間ドライバ3106の間の転送には、TCPの輻輳制御および再送制御が機能しなくなる。
しかしながら、一般的に、イントラネット内でパケットの損失が発生したり、輻輳が発生したりすることは稀であり、Firewallを跨ぐ接続、即ち、WANを介す接続の場合に、損失や輻輳への対応が必要となる。本実施の形態では、ゲートウェイ装置20とゲートウェイ装置30の間は、TCPが機能している為、この区間における再送制御や輻輳制御があれば、アプリケーション2101とアプリケーション3101の間の通信における影響は殆ど発生しない。
尚、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、端末21とサーバ31との間の通信において、ヘッダF23の位置のTCPによる輻輳制御と再送制御が発生しないよう、端末21内の中間ドライバと、サーバ31内の中間ドライバにおいて、端末21内のTCPと、サーバ31内のTCPを終端し、TCP over TCP問題の発生を回避しているからである。
[第6の実施の形態]
本発明の第6の実施の形態は、第5の実施の形態に対して、ゲートウェイ装置30内のブリッジ3008と、ドライバ3009と、仮想NIC3010と、サーバ31内の中間ドライバ3106が無くなり、代わりにゲートウェイ装置30内に、カプセル化処理3001Bと、TCP3003Bが、各々、設置されている点において異なる。
第6の実施の形態におけるHUB22,HUB32、端末21,ゲートウェイ装置20,イントラネット2、イントラネット3の構成および動作は、第5の実施の形態と同じである。
第6の実施の形態においては、イントラネット2は、閉域LANだけで無く、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図22は、第6の実施の形態における各機器の構成とフレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置30は、第5の実施の形態におけるゲートウェイ装置30に対して、ブリッジ3008と、ドライバ3009と、仮想NIC3010が無くなり、代わりに、カプセル化処理3001Bと、TCP3003Bが、各々、設置されている点において異なる。
カプセル化処理3001Bは、ゲートウェイアプリケーション3001AからフォーマットF20のフレームを受信し、ヘッダF21、ヘッダF22、ヘッダF23を、各々、削除して、データF24のみをTCP3003Bに渡す。又、TCP3003BからデータF24を受信し、ヘッダF21、ヘッダF22、ヘッダF23を、各々、付加して、ゲートウェイアプリケーション3001Aに渡す。又、接続要求を受信すると、TCP3003Bに対して、TCPセッション確立要求する。更に、TCP3003BからのTCPセッション確立応答を受信し、接続完了通知フレームを作成して、ゲートウェイアプリケーション3001Aに渡す。
TCP3003Bは、TCP2003やTCP3003と同様の構成を有し、同様の動作を行う。
サーバ31は、第5の実施の形態におけるサーバ31に対して、中間ドライバ3106が設置されている点において異なる。すなわち、第1〜第4の実施の形態におけるサーバ31と同様の構成を有し、同様の動作を行う。
HUB22,HUB32、端末21,ゲートウェイ装置20,イントラネット2、イントラネット3の構成および動作は、第5の実施の形態と同じである。
Firewall33は、第5の実施の形態のFirewall33と同様の構成を有し、同様の動作を行う。但し、本実施の形態においては、Firewall33の代わりに、NATルータやProxyサーバを用いても良い。
第6の実施の形態でも、他の実施の形態と同様に、ゲートウェイ装置20とゲートウェイ装置30との間で、予め、SSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
第6の実施の形態におけるゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)の確立動作は、第5の実施の形態と同様である為、ここでは省略する。
[アプリケーション2101からアプリケーション3101へのセッション構築動作]
図22を用いて、第6の実施の形態において、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間の、セッション確立動作について説明を行う。
この際、ブリッジ2008,HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
中間ドライバ2106は、自ノード内の全てのアプリケーションにおけるTCPの処理を終端するよう予め設定されているものとする。
端末21内のアプリケーション2101は、ユーザからのサーバ31内のアプリケーション3101への接続要求を受け、TCP2102にサーバ31内のアプリケーション3101への通信開始を指示する。
TCP2102は、アプリケーション2101からの通信開始指示を受け、TCP3102との間でTCPセッションを確立する為に、IPルーティング2103に対して、TCP3102とのTCPセッション確立要求パケットを送信する。このパケットは、TCP規格に沿ったものであり、宛先IPアドレスにサーバ31宛、宛先ポート番号にTCP3102が設定されている。セッション確立に必要なパケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットパケットのことである。本明細書においては、TCPセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYN+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング2104は、TCP2102から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック2104に転送する。
IPスタック2104は、IPルーティング2103より受信したパケットに、サーバ31のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに端末21のMACアドレスを設定してフレームを生成し、中間ドライバ2106に転送する。
中間ドライバ2106は、IPスタック2104からTCPセッション確立要求フレームを受信し、フレーム解析を行う。解析の結果、受信したフレームは、TCPフレームであるので、カプセル化解除においてMACヘッダを取り外してパケットにする。そして、中間ドライブ2106のTCP部でTCP2102からTCP3102へのTCPの処理を終端させる。すなわち、TCP2102は、元々は、TCP3102に対して接続要求を行ったが、実際は、この要求に対して中間ドライバ2106内のTCPで受信して保留にし、TCP2102と中間ドライバ2106内のTCPとの間で、TCPセッションの確立処理を行って終端させる。
中間ドライバ2106は、終端処理を行う際、カプセル化処理3001Bに対して、TCP3102との間でTCPセッションを確立するよう要求する為、ドライバ2105に接続要求のためのパケットを送る。この接続要求パケットはTCPの規格に沿ったパケットではなく、独自のパケットである。このパケットは、宛先IPアドレスにサーバ31が、宛先ポート番号にTCP3102が設定される。そしてこのパケットに宛先MACアドレスを付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定して接続要求フレームが生成される。
ドライバ2105は、中間ドライバ2106から接続要求のフレームを受信し、MAC2111に転送する。
MAC2111は、ドライバ2105からフレームを受信し、PHY2112に転送する。
PHY2112は、MAC2111からフレームを受信し、ポート2113に転送する。
ポート2113は、PHY2112からフレームを受信し、イーサネットケーブルを経由してHUB22に転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスではないことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11を付けて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007を経由して、IPスタック3005に転送する。
IPスタック3005は、ドライバ3007から受信したフレームのMACヘッダF11を取り外して、パケットにしてIPルーティング3004に送る。
IPルーティング3004は、IPスタック3005からのパケットのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、このパケットをTCP3003に転送する。
TCP3003は、IPルーティング3004からパケットを受信すると、TCPプロトコルに従ってTCP2003に対してACKパケットを返送する等の処理を行う。そして、受信したパケットから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、カプセル化処理3001Bに流す。このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
カプセル化処理3001Bは、ゲートウェイアプリケーション3001Aよりフレームを受信し、フレーム解析を行う。解析の結果、このフレームは中間ドライバ2106から送信されたTCP3102への接続要求である為、TCP3003Bに対して、TCP3102との間でTCPセッションを確立するよう命令する。
TCP3003Bは、TCP3102との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP3102とのTCPセッション確立要求パケットを送信する。このパケットは、TCP規格に沿ったものであり、宛先IPアドレスにサーバ31宛、宛先ポート番号にTCP3102が設定され、更に送信元IPアドレスにはゲートウェイ装置30のIPアドレスが設定され、送信元ポート番号にはTCP3003Bのポート番号が設定される。TCP3003Bのポート番号については、TCP2102のポート番号と同一にする事も、異なるように設定する事も、どちらも可能である。尚、TCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットパケットのことである。本明細書においては、SSLセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYN+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング3004に渡されたパケットは、IPスタック3005にて宛先MACアドレスが付加され、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを作成し、ドライバ3007、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31は、HUB32内からフレームを受信し、ポート3113、PHY3112、MAC3111、ドライバ3105の経路でパケットを転送し、IPスタック3104に転送する。
IPスタック3104は、ドライバ3105からフレームを受信してMACヘッダを外してパケットにし、IPルーティング3103に転送する。
IPルーティング3103は、IPスタック3104より受信したパケットの宛先ポート番号を参照し、TCP3102側のポート番号が付加されていることから、このパケットをTCP3102に転送する。
TCP3102は、IPルーティング3103よりパケットを受信する。このパケットは、TCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、このTCPセッション確立要求パケットに対して応答パケット(SYN+ACK)を返送する。
TCP3102は、応答パケットを、TCP3003B宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートは、TCP3003Bのポート番号が設定される。
応答パケットは、TCPセッション確立要求パケットとは逆の経路、即ち、IPルーティング3103、IPスタック3104、ドライバ3105,NIC311,HUB32,NIC301を経由して、TCP3003Bに届く。
TCP3003Bは、応答パケットを受信すると応答パケットに対するACKパケットをTCP3102に送信し、応答パケットをカプセル化処理3001Bに渡す。
カプセル化処理3001Bは、端末21内の中間ドライバ2106に対して、接続完了通知の為のパケットを送信する。この接続完了通知パケットはTCPの規格に沿ったパケットではなく、独自のパケットである。このパケットは、宛先IPアドレスに端末21が、宛先ポート番号にTCP2102が、送信元IPアドレスにサーバ31が、送信元ポート番号にはTCP3102が設定されてフレームが生成される。
接続完了通知フレームは、接続要求フレームとは逆の経路、即ち、ゲートウェイアプリケーション3001A、SSL3002,TCP3003,IPルーティング3004,IPスタック3005、ドライバ3007、NIC301、HUB33,Firewall33、HUB32,NIC201、CPU200、NIC201、HUB22、NIC211を経由して、CPU210内の中間ドライバ2106に届く。
中間ドライバ2106は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、自ノード内のアプリケーション宛であるので、このフレームを受信し、カプセル化解除においてMACヘッダを取り外してパケットにする。このパケットは、カプセル化処理3001Bから中間ドライバ2106に向けて送信された、カプセル化処理3001BとTCP3102との間の接続完了通知パケットである為、中間ドライバ2106内のTCPは、TCPセッション確立要求に対する応答パケット(SYN+ACK)をTCP2103に送る為にTCPプロトコルに従って生成し、IPスタック2104に対して、応答パケットを送信する。
応答パケットは、IPスタック2104、IPルーティング2103を経由し、TCP2102に到達する。
TCP2102は、IPルーティング2103よりパケットを受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、アプリケーション2101に対して、TCP3102とのTCPセッション接続完了を通知する。この際、TCP2102は、応答パケットが、TCP3102から届いたものであると認識する。これは、実際の応答は中間ドライバ2106内のTCPから送信されたものであるが、中間ドライバ2106内のTCPは、TCP3102をかたってTCP2102にセッション確立応答を行った為、TCP2102は、恰も、TCP3102から応答があったと認識する。
TCP2102は応答パケットを受信すると、この応答パケットに対してACKパケットを生成してTCP3102宛に送信する。このACKパケットは、中間ドライバ2106のTCPが、IPルーティング2103及びIPスタック2104を介して受信し、TCP処理を終端させる。
以上のようにして、第5の実施の形態において、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間の、セッション確立動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図22を用いて、第6の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008,HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)及び宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、中間ドライバ2106に渡す。このフレームは、EthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
中間ドライバ2106は、IPスタック2104よりフレームを受信し、フレーム解析2106Hにおいてフレーム解析を行う。解析の結果、フレームが、先にセッション確立を行ったTCP2102とTCP3102の間のセッションのフレームであることから、カプセル化解除2106Fにおいて、このフレームのMACヘッダF21を削除して保存し、TCP2106Aに渡す。
中間ドライバ2106内のTCP2106Aは、TCP2103Aを終端する。すなわち、フレームのIPヘッダF22とMACヘッダF23を削除してF24のみを残し、データF24をフラグメント分割2106Bに送る。更に、TCP2102に対してACKフレームを送信する。
中間ドライバ2106内のフラグメント分割2106Bは、TCP2106Aから受信したデータF24のサイズを確認し、フラグメントの必要が無いことから、そのまま、データを再カプセル化2106Dに送る。
中間ドライバ2106内の再カプセル化2106Dは、フラグメント分割2106Bより受信したデータF24に、MACヘッダF21、IPヘッダF22、MACヘッダF23を付け、フレームフォーマットF20の形式にして、ドライバ2105に送信する。この際、F21内のMAC DAにはサーバ31のMACアドレスが設定され、F21内のMAC SAには、端末21のMACアドレスが設定される。又、F22内のIP DAには、サーバ31のIPアドレスが設定され、F22内のIP SAには、端末21のIPアドレスが設定される。又、宛先ポートにはTCP3102のポートが設定され、送信元ポートにはTCP2102のポートが指定される。これらのヘッダは、カプセル化解除2106Fによって保存されたものである。
ドライバ2105は、中間ドライバ2106より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスでは無いとから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。
すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11を付けて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のまま、HUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007を経由して、IPスタック3005に転送する。
IPスタック3005は、ドライバ3007から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送する等の処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
このフレームは、端末21からHUB22に送信された時の状態そのままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、カプセル化処理3001Bに流す。
カプセル化処理3001Bは、ゲートウェイアプリケーション3001Aよりフレームを受信すると、ヘッダF21、ヘッダF22、ヘッダF23を取り外し、これらヘッダに記載のIPアドレス及びポートに対して、改めて、フレームを送信する。すなわち、サーバ31のIPアドレスの、TCP3102のポートに対して、データF24を送るようTCP3003Bに伝える。
TCP3003Bは、カプセル化3001BよりデータF24を受け取り、予め、TCP3102とTCP3003Bとの間で設定されたTCPセッションに流す。すなわち、TCP3003Bは、データF24にIPヘッダF22及びTCPヘッダF23を取り付け、IPルーティング3004に転送する。ここで、IPヘッダF22のIP DAには、サーバ31のIPアドレスが記載され、IPヘッダF22のIP SAには、ゲートウェイ装置30のIPアドレスが記載される。又、宛先ポートにはTCP3102のポートが記載され、送信元ポートには、TCP3003Bのポートが記載される。
IPルーティング3004は、TCP3003Bからパケットを受け取り、IP DAやポート等を参照して、IPスタック3005Bにフレームを転送する。
IPスタック3005Bは、IPルーティング3004よりデータを受信すると、これにヘッダF21を付けて、ドライバ3007に送る。ここで、F21内のMAC DAにはサーバ31のMACアドレスを設定し、F21内のMAC SAにはゲートウェイ装置30のMACアドレスを設定する。このようにして、TCP3003Bからの受信フレームをフレームフォーマットF20の形にして、ドライバ3007に転送する。
IPスタック3005Bより出力されたフレームは、ブリッジ3008、ドライバ3007、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
HUB32から送信されたフレームは、サーバ31内のNIC311、ドライバ3105、IPスタック3104、IPルーティング3103、TCP3102を経由して転送され、フレーム内のデータF24がアプリケーション3101に渡される。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
尚、本実施の形態では、TCPセッションはTCP2102と中間ドライバ2106の間、及びTCP2003とTCP3003の間、及びTCP3003BとTCP3102の間において設定される。従って、中間ドライバ2106からTCP2003の間、及びTCP3003からTCP3003Bの間の転送には、TCPの輻輳制御および再送制御が機能しなくなる。
しかしながら、一般的に、イントラネット内でパケットの損失が発生したり、輻輳が発生したりすることは稀であり、Firewallを跨ぐ接続、即ち、WANを介す接続の場合に、損失や輻輳への対応が必要となる。本実施の形態では、ゲートウェイ装置20とゲートウェイ装置30の間は、TCPが機能している為、この区間における再送制御や輻輳制御があれば、アプリケーション2101とアプリケーション3101の間の通信における影響は殆ど発生しない。
本実施の形態では、ゲートウェイ装置30側にカプセル化処理等を実装し、端末21側に中間ドライバを実装する例を示したが、これとは逆に、ゲートウェイ装置20側にカプセル化処理等を実装し、サーバ31側に中間ドライバを実装することも可能である。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、端末21とサーバ31との間の通信において、ヘッダF23の位置のTCPによる輻輳制御と再送制御が発生しないよう、端末21内の中間ドライバと、ゲートウェイ装置30内のカプセル化処理3001Bにおいて、端末21内のTCPと、サーバ31内のTCPを終端し、TCP over TCP問題の発生を回避しているからである。
[第7の実施の形態]
本発明の第7の実施の形態は、第6の実施の形態に対して、ゲートウェイ装置30内に、ブリッジ3008と、IPスタック3005Bが追加設置されている点において異なる。
第7の実施の形態におけるHUB22,HUB32、端末21,ゲートウェイ装置20,イントラネット2、イントラネット3の構成および動作は、第6の実施の形態と同じである。
第7の実施の形態においては、イントラネット2は、閉域LANだけで無く、インターネット等のオープンなWANを用いても構わない。
第6の実施の形態では、サーバ31側のアプリケーションが、実際に、端末21内のアプリケーション2101から通信しているものの、ゲートウェイ装置30からアクセスを受けていると認識してしまう問題があった。
第7の実施の形態では、ゲートウェイ装置にIPスタックを追加で設置することで、サーバ31側のアプリケーションが、端末21からアクセスを受けていると認識される環境を作っている。
[構成の説明]
図23は、第7の実施の形態におけ、各機器の構成とフレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置30は、第6の実施の形態におけるゲートウェイ装置30に対して、ブリッジ3008と、IPスタック3005Bが各々、追加されている点において異なる。
ブリッジ3008は、第3〜第5の実施の形態におけるブリッジ3008と同様である。すなわち、MAC DAをもとに、転送先となるドライバ若しくはIPスタックを決定する。
IPスタック3005Bは、IPスタック3005と同様の構成をもち、同様の動作を行う。但し、付加するMAC SA及びIP SAに関しては、カプセル化解除3001Bより指定されたアドレスを用いる。
HUB22、HUB32、端末21,ゲートウェイ装置20,イントラネット2、イントラネット3の構成および動作は、第6の実施の形態と同じである。
Firewall33は、第6の実施の形態のFirewall33と同様の構成を有し、同様の動作を行う。但し、本実施の形態においては、Firewall33の代わりに、NATルータやProxyサーバを用いても良い。
第7の実施の形態でも、他の実施の形態と同様に、ゲートウェイ装置20とゲートウェイ装置30との間で、予め、SSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
第6の実施の形態における、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)の確立動作は、第5の実施の形態、及び第6の実施の形態と同様である為、ここでは省略する。
[アプリケーション2101からアプリケーション3101へのセッション構築動作]
図23を用いて、第7の実施の形態において、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間の、セッション確立動作について説明を行う。
この際、ブリッジ2008,HUB22、HUB32がすでに端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により、既に、設定されているものとする。
中間ドライバ2106は、自ノード内の全てのアプリケーションにおけるTCPの処理を終端するよう、予め、設定されているものとする。
端末21内のアプリケーション2101は、ユーザからのサーバ31内のアプリケーション3101への接続要求を受け、TCP2102にサーバ31内のアプリケーション3101への通信開始を指示する。
TCP2102は、アプリケーション2101からの通信開始指示を受け、TCP3102との間でTCPセッションを確立する為に、IPルーティング2103に対して、TCP3102とのTCPセッション確立要求パケット(YN)を送信する。このパケットは、TCP規格に沿ったものであり、宛先IPアドレスにサーバ31宛、宛先ポート番号にTCP3102が設定されている。このTCPセッション確立要求パケットとは、TCPセッションの確立時に、スリーウェイハンドシェーク(three way handshake)の為に送信される、SYNパケットのことである。本明細書においては、SSLセッション確立動作の説明を簡略化するため、スリーウェイハンドシェークで送受信されるパケットうち、SYNパケットをTCPセッション確立要求パケットと呼び、SYNパケット+ACKパケットを応答パケットと呼んでいる。また実際にはACKパケットも送信されるが、ACKパケットについてはSYNパケットと同様に転送されるため、本動作の説明では説明を省略する。
IPルーティング2104は、TCP2102から受信したセッション確立要求パケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック2104に転送する。
IPスタック2104は、IPルーティング2103より受信したパケットに、サーバ31のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに端末21のMACアドレスを設定してTCPセッション確立フレームを生成し、中間ドライバ2106に転送する。
中間ドライバ2106は、IPスタック2104からフレームを受信し、フレーム解析を行う。解析の結果、フレームはTCPセッション確立フレームであるので、中間ドライバ2106カプセル化解除においてMACヘッダを取り外し、中間ドライバ2106TCP部でTCP2102からTCP3102へのセッション確立要求を終端させる。すなわち、TCP2102は、元々は、TCP3102に対してTCPセッション確立要求を行ったが、実際は、この要求に対して中間ドライバ2106内のTCPが受信して保留し、TCP2102と中間ドライバ2106内のTCPとの間で、TCPセッションの確立処理を行ってTCPセッション確立処理を終端させる。
中間ドライバ2106は、TCPセッション確立処理を終端させる際、カプセル化処理3001Bに対して、TCP3102との間でTCPセッションを確立するよう要求する為、ドライバ2105に接続要求のパケットを送る。この接続要求パケットはTCPの規格に沿ったパケットではなく、独自のパケットである。この接続要求パケットには、宛先IPアドレスにサーバ31が、宛先ポート番号にTCP3102が設定される。そして、このパケットに宛先MACアドレスが付加され、更に送信元MACアドレスに自ノードのMACアドレスを設定されてフレームが生成される。
ドライバ2105は、中間ドライバ2106から接続要求フレームを受信し、MAC2111に転送する。
MAC2111は、ドライバ2105からフレームを受信し、PHY2112に転送する。
PHY2112は、MAC2111からフレームを受信し、ポート2113に転送する。
ポート2113は、PHY2112からフレームを受信し、イーサネットケーブルを経由してHUB22に転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスではないことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。
すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13及びIPヘッダF12を付けて、IPルーティング2004に渡す。
ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11をつけて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のままHUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、IPスタック3005に転送する。
IPスタック3005は、ブリッジ3008から受信したフレームのMACヘッダF11を取り外してパケットにして、IPルーティング3004に送る。
IPルーティング3004は、IPスタック3005より受信したパケットのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、パケットをTCP3003に転送する。
TCP3003は、IPルーティング3004からパケットを受信すると、TCPプロトコルに従ってTCP2003に対してACKパケットを返送するなどの処理を行う。そして、受信したパケットから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、カプセル化処理3001Bに流す。このフレームは、端末21からHUB22に送信された時の状態のままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
カプセル化処理3001Bは、ゲートウェイアプリケーション3001Aよりフレームを受信し、フレーム解析を行う。解析の結果、パケットは、中間ドライバ2106から送信されたTCP3102への接続要求パケットである為、TCP3003Bに対して、TCP3102との間でTCPセッションを確立するよう命令する。同時に、IPスタック3005Bに対して、IPアドレスとして端末21のIPアドレスを持ち、MACアドレスとして端末21のMACアドレスを持つよう設定する。
TCP3003Bは、TCP3102との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP3102とのTCPセッション確立要求パケット(SYN)を送信する。このパケットはTCP規格に沿ったものであり、宛先IPアドレスにサーバ31宛、宛先ポート番号にTCP3102が設定され、更に送信元IPアドレスには端末21のIPアドレスが設定され、送信元ポート番号にはTCP2102のポート番号が設定されてTCPセッション確立要求のフレームが生成される。
IPルーティング3005Bに渡されたフレームは、IPスタック3005,ドライバ3007、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31は、HUB32内からフレームを受信し、ポート3113、PHY3112、MAC3111、ドライバ3105の経路で転送し、IPスタック3104に転送する。
IPスタック3104は、ドライバ3105からフレームを受信し、MACヘッダを外してTCPセッション確立要求パケットIPルーティング3103に転送する。
IPルーティング3103は、IPスタック3104より受信したパケットの宛先ポート番号を参照し、TCP3102側のポート番号が付加されていることから、このパケットをTCP3102に転送する。
TCP3102は、IPルーティング3103よりパケットを受信する。このパケットはTCPセッション確立要求パケットであるので、TCPプロトコルに従い、セッション確立に対して応答パケットを返送する。
TCP3102は、応答パケットを、TCP2102宛てに送信する。すなわち、応答パケットの宛先IPは端末21のIPアドレスが設定され、応答パケットの宛先ポートは、TCP2102のポート番号が設定される。これは、TCP3003Bが、恰も、TCP2102で有るかのように振る舞い、IPスタック3005Bが、恰も、端末21のIPスタック2104であるかのように振る舞っているからである。
応答パケットは、セッション確立要求パケットとは逆の経路、即ち、IPルーティング3103、IPスタック3104、ドライバ3105,NIC311,HUB32,NIC301、ブリッジ3008,IPスタック3005Bを経由して、TCP3003Bに届く。
TCP3003Bは、応答パケットを受信すると、この応答パケットに対するACKパケットをTCP3102に送信してTCPの処理を終端させ、データをカプセル化処理3001Bに渡す。
カプセル化処理3001Bは、端末21内の中間ドライバ2106に対して、接続完了通知の為のパケットを送信する。この接続完了通知のパケットは、TCPの規格に沿ったパケットではなく、独自のパケットである。このパケットは、宛先IPアドレスとして端末21が、宛先ポート番号としてTCP2102が、送信元IPアドレスとしてサーバ31が、送信元ポート番号としてTCP3102が設定されフレームが生成される。
接続完了通知フレームは、接続要求フレームとは逆の経路、即ち、ゲートウェイアプリケーション3001A、SSL3002,TCP3003,IPルーティング3004,IPスタック3005、ドライバ3007、NIC301、HUB33,Firewall33、HUB32,NIC201、CPU200、NIC201、HUB22、NIC211を経由して、CPU210内の中間ドライバ2106に届く。
中間ドライバ2106は、接続完了通知フレームを受信し、フレーム解析を行う。解析の結果、自ノード内のアプリケーション宛のパケットであるので受信する。受信したパケットは、カプセル化処理3001Bから中間ドライバ2106に向けて送信された、カプセル化処理3001BとTCP3102との間の接続完了通知パケットである為、中間ドライバ2106内のTCPは、TCPプロトコルに従い、TCPセッション確立に対する応答パケットをTCP2103に送る為、IPスタック2104に対して、応答パケットを送信する。
応答パケットは、IPスタック2104、IPルーティング2103を経由し、TCP2102に到達する。
TCP2102は、IPルーティング2103よりパケットを受信する。このパケットはTCPセッションの確立要求に対する応答パケットであるので、アプリケーション2101に対して、TCP3102とのTCPセッション接続完了を通知する。この際、TCP2102は、応答パケットが、TCP3102から届いたものであると認識する。これは、実際の応答は中間ドライバ2106内のTCPから送信されたものであるが、中間ドライバ2106内のTCPは、TCP3102を騙ってTCP2102にセッション確立応答を行った為、TCP2102は、恰も、TCP3102から応答があったと認識する。
TCP2102は応答パケットを受信すると、この応答パケットに対してACKパケットを生成してTCP3102宛に送信する。このACKパケットは、中間ドライバ2106のTCPが、IPルーティング2004及びIPスタック2005を介して受信し、TCP処理を終端させる。
以上のようにして、第5の実施の形態において、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間の、セッション確立動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図23を用いて、第7の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008,ブリッジ3008,HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間の、ゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)及び宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、中間ドライバ2106に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
中間ドライバ2106は、IPスタック2104よりフレームを受信し、フレーム解析2106Hにおいてフレーム解析を行う。解析の結果、フレームが、先に、セッション確立を行った、TCP2102とTCP3102の間のセッションのフレームであることから、カプセル化解除2106Fにおいて、このフレームのMACヘッダF21を削除して保存し、TCP2106Aに渡す。
中間ドライバ2106内のTCP2106Aは、TCP2103Aを終端する。すなわち、フレームのIPヘッダF22とMACヘッダF23を削除してF24のみを残し、データF24をフラグメント分割2106Bに送る。更に、TCP2102に対してACKフレームを送信する。
中間ドライバ2106内のフラグメント分割2106Bは,TCP2106Aから受信したデータF24のサイズを確認し、フラグメントの必要がないことから、そのまま、データを再カプセル化2106Dに送る。
中間ドライバ2106内の再カプセル化2106Dは、フラグメント分割2106Bより受信したデータF24に、MACヘッダF21、IPヘッダF22、MACヘッダF23を付け、フレームフォーマットF20の形式にして、ドライバ2105に送信する。この際、F21内のMAC DAにはサーバ31のMACアドレスが設定され、F21内のMAC SAには、端末21のMACアドレスが設定される。又、F22内のIP DAには、サーバ31のIPアドレスが設定され、F22内のIP SAには、端末21のIPアドレスが設定される。又、宛先ポートにはTCP3102のポートが設定され、送信元ポートにはTCP2102のポートが指定される。これらヘッダは、カプセル化解除2106Fによって保存されたものである。
ドライバ2105は、中間ドライバ2106より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111,PHY2112,ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスではないことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aからデータ(F21〜F24)を受け取ると、これを暗号化してデータF14を生成し、TCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。
ここで、F12内のIP DAには、ゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAには、ゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11を付けて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、F11内のMAC DAには、ARPの結果よりFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007,NIC201を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のままHUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、IPスタック3005に転送する。
IPスタック3005は、ブリッジ3008から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送する等の処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
このフレームは、端末21からHUB22に送信された時の状態のままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、カプセル化処理3001Bに流す。
カプセル化処理3001Bは、ゲートウェイアプリケーション3001Aよりフレームを受信すると、ヘッダF21、ヘッダF22、ヘッダF23を取り外し、これらヘッダに記載のIPアドレスおよびポートに対して、改めてフレームを送信する。すなわち、サーバ31のIPアドレスの、TCP3102のポートに対して、データF24を送るよう、TCP3003Bに伝える。同時に、フレームのヘッダF21のMAC SAに端末21のMACアドレスを設定し、ヘッダF22のIP SAに端末21のIPアドレスが設定されるよう、IPスタック3005Bを設定する。
TCP3003Bは、カプセル化3001BよりデータF24を受け取り、予め、TCP3102とTCP3003Bとの間で設定されたTCPセッションに流す。すなわち、TCP3003Bは、データF24にIPヘッダF22及びTCPヘッダF23を取り付け、IPルーティング3004に転送する。ここで、IPヘッダF22のIP DAには、サーバ31のIPアドレスが記載され、IPヘッダF22のIP SAには、端末21のIPアドレスが記載される。又、宛先ポートにはTCP3102のポートが記載され、送信元ポートには、TCP2102のポートが記載される。
IPルーティング3004は、TCP3003Bからパケットを受け取り、IP DAやポート等を参照して、IPスタック3005Bにフレームを転送する。
IPスタック3005Bは、IPルーティング3004よりデータを受信すると、これにヘッダF21を付けて、ドライバ3007に送る。ここで、F21内のMAC DAにはサーバ31のMACアドレスを設定し、F21内のMAC SAには端末21のMACアドレスを設定する。このようにして、TCP3003Bからの受信フレームをフレームフォーマットF20の形にして、ブリッジ3008を経由してドライバ3007に転送する。
IPスタック3005Bより出力されたフレームは、ブリッジ3008、ドライバ3007、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
HUB32から送信されたフレームは、サーバ31内のNIC311、ドライバ3105、IPスタック3104、IPルーティング3103、TCP3102を経由して転送され、フレーム内のデータF24がアプリケーション3101に渡される。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
尚、本実施の形態では、TCPセッションはTCP2102と中間ドライバ2106の間、及びTCP2003とTCP3003の間、及びTCP3003BとTCP3102の間において設定される。従って、中間ドライバ2106からTCP2003の間、及びTCP3003からTCP3003Bの間の転送には、TCPの輻輳制御および再送制御が機能しなくなる。
しかしながら、一般的に、イントラネット内でパケットの損失が発生したり、輻輳が発生したりすることは稀であり、Firewallを跨ぐ接続、即ち、WANを介す接続の場合に、損失や輻輳への対応が必要となる。本実施の形態では、ゲートウェイ装置20とゲートウェイ装置30の間は、TCPが機能している為、この区間における再送制御や輻輳制御があれば、アプリケーション2101とアプリケーション3101の間の通信における影響は殆ど発生しない。
本実施の形態では、ゲートウェイ装置30側にカプセル化処理等を実装し、端末21側に中間ドライバを実装する例を示したが、これとは逆に、ゲートウェイ装置20側にカプセル化処理等を実装し、サーバ31側に中間ドライバを実装することも可能である。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、端末21とサーバ31との間の通信において、ヘッダF23の位置のTCPによる輻輳制御と再送制御が発生しないよう、端末21内の中間ドライバと、ゲートウェイ装置30内のカプセル化処理3001Bにおいて、端末21内のTCPと、サーバ31内のTCPを終端し、TCP over TCP問題の発生を回避しているからである。
[第8の実施の形態]
本発明の第8の実施の形態は、第5の実施の形態に対して、端末21内の中間ドライバ2106と、サーバ31内の中間ドライバ3106が、各々、無くなり、ゲートウェイ装置20内に高速化エンジンX2014が設置されて、SSL2002の暗号化および復号化処理が、高速化エンジンX2014において行われている点において異なる。
又、第8の実施の形態は、第5の実施の形態において、TCP over TCPに対する対策を行わず、SSLセッションにおける暗号化および復号化処理の高速化に特化した構成になっている。
第8の実施の形態におけるHUB22,HUB32、イントラネット2、イントラネット3、ゲートウェイ装置30の構成および動作は、第5の実施の形態と同じである。
第8の実施の形態においては、イントラネット2は、閉域LANだけでなく、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図24は、第8の実施の形態における各機器の構成とフレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置20は、第5の実施の形態におけるゲートウェイ装置20に対して、高速化エンジンX2014が設置され、SSL2002の暗号化および復号化処理が、高速化エンジンX2014において行われる点において異なる。
端末21は、第5の実施の形態における端末21に対して、中間ドライバ2106がなくなっている点において異なる。すなわち、第1〜第4の実施の形態における端末21と同様の構成を有し、同様の動作を行う。
サーバ31は、第5の実施の形態におけるサーバ31に対して、中間ドライバ3106が無くなっている点において異なる。すなわち、第1〜第4、第6、第7の実施の形態におけるサーバ31と同様の構成を有し、同様の動作を行う。
HUB22、HUB32、ゲートウェイ装置30に関しては、第5の実施の形態と同様の構成を有し、同様の動作を行う。
Firewall33は、第7の実施の形態のFirewall33と同様の構成を有し、同様の動作を行う。但し、本実施の形態においては、Firewall33の代わりに、NATルータやProxyサーバを用いても良い。
第8の実施の形態でも他の実施の形態と同様に、予め、ゲートウェイ装置20とゲートウェイ装置30との間でSSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
図25は、第8の実施の形態における高速化エンジンX2014の構成を詳細に示したブロック図である。
第8の実施の形態における高速化エンジンX2014は、図12に示す第1の実施の形態における高速化エンジン2014に対して、フレーム解析2014B、及びマルチプレクサ2014Fの位置および動作が異なり、フラグメント分割2014H、カプセル化2014I、カプセル化解除2014J、フラグメント解除2014K、制御フレーム解析2014D、及びマルチプレクサ2014Eが存在しない点において異なる。
第1の実施の形態における高速化エンジン2014では、暗号化および復号化を行うフレームが、インタフェース2014Aから入力されたが、第8の実施の形態における高速化エンジンX2014では、暗号化および復号化を行うフレームが、インタフェース2014Cより入力される。
第8の実施の形態における高速化エンジンX2014では、インタフェース2014A,インタフェース2014C、暗号化2014G、復号化2014L、制御フレーム送受信部2014Mは、第1の実施の形態における高速化エンジン2014におけるインタフェース2014A,インタフェース2014C、暗号化2014G、復号化2014L、制御フレーム送受信部2014Mと、各々、同様の構成を有し、同様の動作を行う。
フレーム解析2014Bは、インタフェース2014Cからフレームを受信し、以下に示す(1)〜(4)の順序で宛先を決定して転送する。
(1) 受信したフレームが高速化エンジンの制御に関わる特殊なフレームであるか否か判断し、特殊フレームで無い場合は、インタフェース2014Aに転送する。
(2) 受信したフレームが特殊フレーム、かつ、高速化エンジンX2014の制御設定に関わるもの(制御フレーム)であれば、制御フレーム送受信部2014Mに転送する。
(3) 受信したフレームが特殊フレーム、かつ、暗号化に関わるもの(被暗号化フレーム)であれば、暗号化2014Gに転送する。
(4) 受信したフレームが特殊フレーム、かつ、復号化に関わるもの(被復号化フレーム)であれば、復号化2014Lに転送する。
フレーム解析2014Bは、受信したフレームが特殊フレームであるか否かの判断は、通常はMAC DAとMAC SAに基づいて判断する。MAC DA若しくはMAC SAの何れかに、予め、規定したアドレス範囲のMACアドレス(制御用MACアドレスと呼ぶ。例えば00004C000000〜FF)が記載されている場合は、受信したフレームを制御フレームと判断する。
制御フレーム、被暗号化フレーム、及び被復号化フレームの判断も、各々、MACアドレスに基づいて判別する。例えば、被暗号化フレームのMAC DAは00:00:4C:00:00:0Aに設定され、被復号化フレームのMAC DAは00:00:4C:00:00:0Bに設定される。
マルチプレクサ2014Fは、暗号化2014G、復号化2014L、制御フレーム送受信部2014M、更にインタフェース2014Aよりフレームを受信し、必要であれば、キューに保存して送信タイミングを調整し、インタフェース2014Cに送信する。キューに保存するのは、暗号化2014G、復号化2014L、制御フレーム送受信部2014M、更にインタフェース2014Aの各々から到着するフレームの衝突を避ける為である。
[動作の説明]
[SSLセッションの確立動作]
図24を用いて、第8の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008、ブリッジ3008、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33のLAN側、Firewall33のWAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30との間の通信は双方向で許可するが、端末21とサーバ31との間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置30内のゲートウェイアプリケーション3001Aは、ユーザからのゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの接続要求を受け、SSL3002にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのTCPセッション確立要求パケット(SYN)を送信する。このTCPセッション確立要求パケットは、TCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定されている。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してTCPセッション確立要求フレームにし、ブリッジ3008を経由してドライバ3007に転送する。
ドライバ3007は、IPスタック3005からフレームを受信し、MAC3011に転送する。
MAC3011は、ドライバ3007からフレームを受信し、PHY3012に転送する。
PHY3012は、MAC3011からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からフレームを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からパケットを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内からパケットを受信し、ポート2013、PHY2012、MAC2011、ドライバ2007、ブリッジ2008の経路でパケットを転送し、IPスタック2005に転送する。
IPスタック2005は、ブリッジ2008からパケットを受信し、MACヘッダを外してパケットにしてIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、このパケットをTCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットは、TCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、セッション確立要求に対して、セッション確立の為に必要な応答パケット(SYN+ACK)をTCP3003宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートはTCP3003のポート番号が設定される。
応答パケットは、IPルーティング2004、IPスタック2005、ブリッジ2008、ドライバ2007、NIC201、HUB22、Firewall33、HUB32、NIC301を経由して、CPU300に到達し、更にドライバ3007、ブリッジ3008、IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004より応答パケットを受信する。このパケットは、TCPセッションの確立要求に対する応答パケットであるので、TCP2003に対してACKパケットを送信する。TCP2003は、ACKパケットを受信するとSSL3002に対してTCP3003とのTCPセッション接続完了を通知する。
SSL3002は、TCP3003との接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003とTCP2003との間で設定されたTCPセッションを通り、NIC301、HUB32、Firewall33、HUB22、NIC201を経由して、TCP2003に到着する。
TCP2003は、SSLセッション確立要求パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、ゲートウェイアプリケーション2001Aに対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL2002は、SSL2002の秘密鍵、SSL3002の公開鍵、SSL2002とSSL3002の間の共通鍵、SSLセッションの相手方機器のIPアドレス(ゲートウェイ装置30のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP3003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP2003のポート)、送信元IPアドレス(ゲートウェイ装置20のIPアドレス)、及び開始命令を制御フレームに載せ、仮想NIC2010に制御フレームを送信する。
制御フレームは、SSL2002を出ると、仮想NIC2010、ドライバ2009、ブリッジ2008、ドライバ2007、MAC2111を経由して、高速化エンジンX2014に到着する。
高速化エンジンX2014は、MACアドレス等に基づいて受信したフレームが制御フレームであることを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用する為に保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
以上のようにして、SSL2002とSSL3002との間で、SSLセッションが確立される。
以上により、第8の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図24を用いて、第8の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008、ブリッジ3008、HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31との間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により、既に、設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAにはサーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)及び宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、ドライバ2105に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111、PHY2112、ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスでは無いことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。
すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aから未暗号化のデータF14(F21〜F24)を受け取ると、ヘッダF11をつけて、被暗号化フレームを作り、仮想NIC2010に渡す。ここで、ヘッダF11内のMAC DAには暗号化を命令する為の特殊MAC(例えば00:00:4C:00:00:0A等)を設定し、MAC SAには仮想NIC2010のMACアドレス等を設定する。このフレームは、SSL2002から仮想NIC2010に、直接、渡すことは勿論、ゲートウェイアプリケーション2001Aを経由して、仮想NIC2010に渡しても良い。
被暗号化フレームは、仮想NIC2010、ドライバ2009、ブリッジ2008、ドライバ2007、MAC2011を経由して、高速化エンジンX2014に到着する。
高速化エンジンX2014は、インタフェース2014Cにおいて被暗号化フレームを受け取り、フレーム解析2014Bで受信フレームを被暗号化フレームだと判別し、ヘッダF11MAC DAとMAC SAの値を反転させ、暗号化2014Gに送る。高速化2014Gは、受信したフレームのデータF14、即ち、F21,F22,F23,F24の部分を暗号化して、暗号化されたデータF14を作成し、マルチプレクサ2014Fに渡す。マルチプレクサ2014Fは、暗号化より受信したフレームを、必要であれば、バッファリングし、インタフェース2014Cに送る。
高速化エンジンX2014を出たフレームは、MAC2011、ドライバ2007、ブリッジ2008、ドライバ2009、仮想NIC2010を経由して、SSL2002に戻る。このフレームのMAC DAには仮想NIC2010のMACアドレス等が設定され、MAC SAには暗号化を命令する為の特殊MAC(例えば00:00:4C:00:00:0A等)が設定されている。
SSL2002は、仮想NICより受信したフレームのヘッダF11(MACヘッダ)を削除し、データF14のみをTCP2003に渡す。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。
ここで、F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11を付けて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、ARPの結果より、F11内のMAC DAには、Firewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、ゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007、MAC2011、高速化エンジンX2014、PHY2012、MAC2013を経由して、HUB22に送られる。この時、高速化エンジンX2014は、MACから受信したフレームを、そのまま、PHY2012に転送する。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のままHUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、IPスタック3005に転送する。
IPスタック3005は、ブリッジ3008から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってTCP2003にACKパケットを返送する等の処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。
このフレームは、端末21からHUB22に送信された時の状態のままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31はHUB32から送信されたフレームを受信し、ドライバ3105、IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡す。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
本実施の形態では、ゲートウェイ装置20側に高速化エンジンを実装する例を示したが、これとは逆に、ゲートウェイ装置30側に高速化エンジンを実装することも可能である。又、ゲートウェイ装置20側と、ゲートウェイ装置30側の両方に、高速化エンジンを実装することも出来る。更に、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、ゲートウェイ装置20において、暗号化および復号化の処理をハードウェア化し、SSLの処理を高速化しているからである。
[第9の実施の形態]
本発明の第9の実施の形態は、第8の実施の形態に対して、ゲートウェイ装置30内に中間ドライバY3006が設置され、ゲートウェイ装置20内の高速化エンジンX2014が高速化エンジンY2014に変更され、ゲートウェイ装置20内のSSL2002、及びゲートウェイ装置30内のSSL3002において、暗号化および復号化を行わず、これら処理を高速化エンジンY2014、及び中間ドライバY3006にて行う点において異なる。
又、第9の実施の形態も、第8の実施の形態と同様に、TCP over TCPに対する対策を行わず、暗号化および復号化処理の高速化に特化した構成になっている。
第9の実施の形態におけるHUB22、HUB32、イントラネット2、イントラネット3、ゲートウェイ装置30、端末21、サーバ31の構成および動作は、第8の実施の形態と同じである。
第9の実施の形態においては、イントラネット2は、閉域LANだけで無く、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図26は、第9の実施の形態における各機器の構成とフレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置20は、第8の実施の形態におけるゲートウェイ装置20に対して、高速化エンジンX2014が高速化エンジンY2014に変更され、SSL2002が暗号化および復号化を行わずに証明書の交換のみに関与し、SSLセッションの確立完了後も、ゲートウェイアプリケーション2001Aから受信したデータを暗号化せず、そのまま、TCP2003に渡し、又、TCP2003から受信したデータを復号化せず、そのまま、ゲートウェイアプリケーション2001Aに渡す点において異なる。
ゲートウェイ装置30は、第8の実施の形態におけるゲートウェイ装置30に対して、中間ドライバY3006が設置され、SSL3002が暗号化および復号化を行わずに証明書の交換のみに関与し、SSLセッションの確立完了後も、ゲートウェイアプリケーション3001Aから受信したデータを暗号化せず、そのまま、TCP3003に渡し、又、TCP3003から受信したデータを復号化せず、そのまま、ゲートウェイアプリケーション3001Aに渡す点において異なる。
端末21、サーバ31、HUB22、HUB32、ゲートウェイ装置30に関しては、第8の実施の形態と同様の構成を有し、同様の動作を行う。
Firewall33は、第8の実施の形態のFirewall33と同様の構成を有し、同様の動作を行う。但し、本実施の形態においては、Firewall33の代わりに、NATルータやProxyサーバを用いても良い。
第9の実施の形態でも、他の実施の形態と同様に、ゲートウェイ装置20とゲートウェイ装置30との間で、予め、SSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
図27は、第9の実施の形態における高速化エンジンY2014の構成を詳細に示したブロック図である。
第9の実施の形態における高速化エンジンY2014は、図12に示す第1の実施の形態における高速化エンジン2014に対して、フラグメント分割2014H、カプセル化2014I、カプセル化解除2014J、フラグメント解除2014Kが存在しない点において異なる。
第1の実施の形態における高速化エンジン2014では、暗号化および復号化を行うフレームが、インタフェース2014Aから入力され、第8の実施の形態における高速化エンジンX2014では暗号化および復号化を行うフレームがインタフェース2014Cより入力された。しかしながら、第9の実施の形態における高速化エンジンY2014では、暗号化を行うフレームはインタフェース2014Cから入力され、復号化を行うフレームはインタフェース2014Aより入力される。
第9の実施の形態における高速化エンジンY2014では、インタフェース2014A、インタフェース2014C、暗号化2014G、復号化2014L、制御フレーム送受信部2014Mは、第1の実施の形態における高速化エンジン2014におけるインタフェース2014A、インタフェース2014C、暗号化2014G、復号化2014L、制御フレーム送受信部2014Mと、各々、同様の構成を有し、同様の動作を行う。
フレーム解析2014Bは、インタフェース2014Aからフレームを受信し、以下に示す順序で宛先を決定して転送する。
(1) 自ノード宛て、かつ、予め設定されたSSLセッションのフレームであれば、ゲートウェイ装置30で暗号化されたフレームであれば、フレームを復号化2014Lに転送する。
(2) (1)以外のフレームであれば、フレームをマルチプレクサ2014Eに転送する。
フレーム解析2014Dは、インタフェース2014Cからフレームを受信し、以下に示す順序で宛先を決定して転送する。
(1) 高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)である場合は、フレームを制御フレーム送受信部2014Mに転送する。
(2) 自ノードのMAC SAが付加されており、かつ、予め設定されたSSLセッションのフレームであれば、フレームを暗号化2014Gに転送する。
(3) (1)〜(2)以外のフレームであれば、マルチプレクサ2014Fに転送する。
フレーム解析2014Dは、特殊フレームであるか否かの判断を、通常はMAC DAとMAC SAに基づいて判断する。MAC DA若しくはMAC SAの何れかに、予め規定したアドレス範囲のMACアドレス(制御用MACアドレスと呼ぶ。例えば、00004C000000〜FF)が記載されている場合は、フレームを制御フレームと判断する。
マルチプレクサ2014Eは、フレーム解析2014Bおよび制御フレーム送受信部2014M、若しくは復号化2014Lよりフレームを受信し、必要であれば、キューに保存して送信タイミングを調整し、インタフェース2014Cに送信する。
キューに保存するのは、フレーム解析2014B側、復号化2014L、制御フレーム送受信部2014M側の各々から到着するフレームの衝突を避ける為である。
マルチプレクサ2014Fは、フレーム解析2014D及び暗号化2014Gよりフレームを受信し、必要であれば、キューに保存して送信タイミングを調整し、インタフェース2014Aに送信する。キューに保存するのは、制御フレーム解析2014D、更に暗号化2014Gの各々から到着するフレームの衝突を避ける為である。
尚、高速化エンジンY2014は、複数のSSLセッションの暗号化及び復号化を行うこともできる。その為、上記IPアドレス、ポート、公開鍵、秘密鍵および共通鍵などのセッション情報を複数持つことも可能である。
図28は、第9の実施の形態における中間ドライバY3006の構成を詳細に示したブロック図である。
第9の実施の形態における中間ドライバY3006は、図7に示す第1の実施の形態における中間ドライバ1008に対して、制御フレーム送受信部1008M、フラグメント分割1008B、フラグメント組立1008C、再カプセル化1008D、カプセル化解除1008F、再カプセル化1008E、カプセル化解除1008Gが存在せず、代わりに暗号化Y3006A及び復号化Y306Bが設置されている点において異なる。
第9の実施の形態における中間ドライバY3006は、暗号化Y3006A、復号化Y3006B、フレーム解析Y3006C、フレームY3006D、マルチプレクサY3006E、マルチプレクサY3006F、設定管理部Y3006Gで構成される。
暗号化Y3006Aは、フレーム解析Y3006Cよりフレームを受信し、3DES等の方法で暗号化を行い、マルチプレクサY3006Eに転送する。暗号化に用いる公開鍵と共通鍵は、設定管理部Y3006Gより通知を受けたものを利用する。
復号化Y3006Bは、フレーム解析Y3006Dよりフレームを受信し、3DES等の方法で復号化を行い、マルチプレクサY3006Fに転送する。復号化に用いる秘密鍵と共通鍵は、設定管理部Y3006Gより通知を受けたものを利用する。
フレーム解析Y3006Cは、インタフェースIPスタック3005からフレームを受信し、以下に示す(1)〜(2)の順序で宛先を決定して転送する。
(1) 自ノードのMAC SAが付加されており、かつ、予め設定されたSSLセッションのフレームであれば、フレームを暗号化Y3006Aに転送する。
(2) (1)以外のフレームであれば、マルチプレクサY3006Eに転送する。
フレーム解析Y3006Dは、ブリッジ3008からフレームを受信し、以下に示す順序で宛先を決定して転送する。
(1) 自ノード宛て、かつ、予め設定されたSSLセッションのフレームであれば、フレームを復号化Y3006Bに転送する。
(2) (1)以外のフレームであれば、フレームをマルチプレクサY3006Fに転送する。
マルチプレクサY3006Eは、フレーム解析Y3006Cと、暗号化Y3006Aからフレームを受信し、ブリッジ3008に転送する。この際、フレームの同時到着により欠落が発生しないよう、バッファ動作を行う。
マルチプレクサY3006Fは、フレーム解析Y3006D及び復号化Y3006Bよりフレームを受信し、必要であれば、キューに保存して送信タイミングを調整し、IPスタック3005に送信する。キューに保存するのは、フレーム解析Y3006D、復号化Y3006B側の各々から到着するフレームの衝突を避ける為である。
設定管理部Y3006Gは、ゲートウェイアプリケーション3001Aより、高速化処理に関連するセッションの情報(IPアドレス、ポート番号等)の通知を受けてフレーム解析Y3006C及びフレーム解析Y3006Dの設定を行い、又、ゲートウェイアプリケーション3001A若しくはSSL3002より暗号化用の公開鍵と復号化用の秘密鍵、さらには共通鍵の通知を受けて、暗号化Y3006A及び復号化Y3006Bの設定を行う。
尚、中間ドライバY3006は複数のSSLセッションの暗号化及び復号化を行うことも出来る。その為、上記IPアドレス、ポート、公開鍵、秘密鍵および共通鍵などのセッション情報を複数持つことも可能である。
[動作の説明]
[SSLセッションの確立動作]
図26を用いて、第9の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008、ブリッジ3008、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33のLAN側、Firewall33のWAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置30内のゲートウェイアプリケーション3001Aは、ユーザからのゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの接続要求を受け、SSL3002にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003にゲートウェイ装置20内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのTCPセッション確立要求パケット(SYN)を送信する。このTCPセッション確立要求パケットはTCP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にTCP2003が設定される。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームが生成され、中間ドライバY3006に転送する。
中間ドライバY3006は、IPスタックからTCPセッション確立要求フレームを受信してヘッダ解析を行う。解析の結果、暗号化が必要なフレームではない為、このフレームを、そのまま、ブリッジ3008を経由してドライバ3007に転送する。
ドライバ3007は、IPスタック3005からフレームを受信し、MAC3011に転送する。
MAC3011は、ドライバ3007からフレームを受信し、PHY3012に転送する。
PHY3012は、MAC3011からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からフレームを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からフレームを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内からフレームを受信し、ポート2013、PHY2012、MAC2011、ドライバ2007、ブリッジ2008の経路で転送し、IPスタック2005に転送する。
IPスタック2005は、ブリッジ2008からフレームを受信し、MACヘッダを外してパケットにしてIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、このパケットをTCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットは、TCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、セッション確立要求に対して、セッション確立の為に必要な応答パケット(SYN+ACK)をTCP3003宛てに送信する。すなわち、応答パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、応答パケットの宛先ポートはTCP3003のポート番号が設定される。
応答パケットは、IPルーティング2004、IPスタック2005、ブリッジ2008、ドライバ2007、NIC201、HUB22、Firewall33、HUB32、NIC301を経由して、CPU300に到達し、更に、ドライバ3007、ブリッジ3008、IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004よりパケットを受信する。このパケットは、TCPセッションの確立要求に対する応答パケットであるので、この応答パケットに対するACKパケットをTCP2003を宛先に設定して送信する。更に、SSL3002に対して、TCP2003とのTCPセッション接続完了を通知する。
SSL3002は、TCP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003とTCP2003との間で設定されたTCPセッションを通り、NIC301、HUB32、Firewall33、HUB22、NIC201を経由して、TCP2003に到着する。
TCP2003は、パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、ゲートウェイアプリケーション2001Aに対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL2002は、SSL2002の秘密鍵、SSL3002の公開鍵、SSL2002とSSL3002の共通鍵、SSLセッションの相手方機器のIPアドレス(ゲートウェイ装置30のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP3003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP2003のポート)、送信元IPアドレス(ゲートウェイ装置20のIPアドレス)、及び開始命令を制御フレームに載せ、仮想NIC2010に制御フレームを送信する。
制御フレームは、SSL2002を出ると、仮想NIC2010、ドライバ2009、ブリッジ2008、ドライバ2007、MAC2111を経由して、高速化エンジンY2014に到着する。
高速化エンジンY2014は、MACアドレス等により制御フレームを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用する為に保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
SSL3002は、SSL3002の秘密鍵、SSL2002の公開鍵、SSL3002とSSL2002の間の共通鍵、SSLセッションの相手方機器のIPアドレス(ゲートウェイ装置20のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP2003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP3003のポート)、送信元IPアドレス(ゲートウェイ装置30のIPアドレス)、及び開始命令を、中間ドライバY3006に通知する。
中間ドライバY3006は、SSL3002から通知を受けた公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用するため保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化および複号化の処理を開始する。
以上のようにして、SSL2002とSSL3002との間で、SSLセッションが確立される。
以上により、第9の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図26を用いて、第9の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008、ブリッジ3008、HUB22、HUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30との間の通信は双方向で許可するが、端末21とサーバ31との間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)が、上述の動作例により、既に、設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間で、既にTCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAにはサーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)および宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、ドライバ2105に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111、PHY2112、ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20は、HUB22からのフレームをポート2013において受け取り、PHY2012、MAC2011、ドライバ2007を経由して、ブリッジ2008に渡す。
ブリッジ2008は、ドライバ2007から受信したフレーム(フレームフォーマットF20形式)内のヘッダF21内に存在するMAC DAを参照し、MAC DAがサーバ31のMACアドレスであり、ゲートウェイ装置20のMACアドレスでは無いことから、フレームをドライバ2009に転送する。
ブリッジ2008から送信されたフレームは、ドライバ2009、仮想NIC2010を経由し、ゲートウェイアプリケーション2001Aに転送される。
ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aとの間に設定したSSLセッションに流す。
すなわち、ゲートウェイアプリケーション2001Aは、仮想NIC2010から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aから未暗号化のデータF14(F21〜F24)を受け取ると、暗号化処理を行わず、そのまま、TCP2003に転送する。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。
ここで、F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11を付けて、Ether over SSLフレームフォーマットF10の形式にして、ブリッジ2008に渡す。
ここで、ARPの結果より、F11内のMAC DAにはFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAにはゲートウェイ装置20のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ブリッジ2008、ドライバ2007、MAC2011を経由して、高速化エンジンY2014に送られる。
高速化エンジンY2014は、インタフェース2014Cにおいてフレームを受け取り、フレーム解析Y2014Dで受信フレームが、予め、SSL2002より通知されたSSLセッションのフレームだと判別し、データF14の暗号化を行う。そして、マルチプレクサ2014Fを経由して、PHY2012に転送する。この時、フレームのヘッダF11〜F13には変更を加えない。
高速化エンジンY2014を出たフレームは、PHY2012、ポート2013を経由して、HUB22に送られる。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のままHUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、中間ドライバY3006に転送する。
中間ドライバY3006は、ブリッジ3008よりフレームを受け取り、フレーム解析Y3006Dで受信フレームが、予め、SSL3002より通知されたSSLセッションのフレームだと判別し、データF14の復号化を行う。そして、復号化処理によりデータF14の暗号化を解除した後、マルチプレクサY3006Fを経由して、IPスタック3005に転送する。この時、フレームのヘッダF11〜F13には変更を加えない。
IPスタック3005は、中間ドライバY3006から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送する等の処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化などの処理をせず、そのまま、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。
このフレームは、端末21からHUB22に送信された時の状態のままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAにはサーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31はHUB32から送信されたフレームを受信し、ドライバ3105、IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡す。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に、実現可能である。
本実施の形態では、ゲートウェイ装置20側に高速化エンジンを実装し、ゲートウェイ装置30側に中間ドライバを実装する例を示したが、これとは逆に、ゲートウェイ装置30側に高速化エンジンを実装し、ゲートウェイ装置20側に中間ドライバを実装することも可能である。又、ゲートウェイ装置20側と、ゲートウェイ装置30側の両方に、高速化エンジンを実装し、中間ドライバを一切使用しないようにすることも出来る。更に、ゲートウェイ装置20側とゲートウェイ装置30側の両方に中間ドライバを実装し、高速化エンジンを使用しないようにすることも出来る。更に、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、ゲートウェイ装置20において、SSLセッションを用いて通信する際のデータの暗号化および復号化の処理をハードウェア化し、SSLの処理を高速化しているからである。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、比較的安価なMACとPHYとの間のインタフェースに、高速化処理の為のハードウェア(高速化エンジン)を実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きな、暗号化/復号化のみをハードウェア処理できるからである。
[第10の実施の形態]
本発明の第10の実施の形態は、第9の実施の形態に対して、ゲートウェイ装置20内の処理を、端末21内に設置した中間ドライバZ2106において行う点で異なる。
又、ゲートウェイ装置20およびゲートウェイ装置30が無い為、HUB22およびHUB33を廃止し、端末21とFirewall33のWAN側を、直接、接続し、サーバ31とFirewall33のLAN側も、直接、接続するようにした。
又、第10の実施の形態も、第9の実施の形態と同様に、TCP over TCPに対する対策を行わず、SSLセッションを用いて通信する際のデータの暗号化および復号化処理の高速化に特化した構成になっている。
第10の実施の形態においては、イントラネット2は、閉域LANだけでなく、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図29は、第10の実施の形態における各機器の構成とフレームの転送経路を詳細に示したブロック図である。
端末21は、第9の実施の形態における端末21に対して、中間ドライバZ2106が追加されており、中間ドライバZ2106内において、ゲートウェイ装置20と同様の動作を行う。又、NIC211が、第9の実施の形態におけるゲートウェイ装置20内に存在するNIC201に変更されている点において異なる。
中間ドライバZ2106は、ゲートウェイアプリケーション2001A、SSL2002、TCP2003、IPルーティング2004、IPスタック2005で構成される。上記各部分は、第9の実施の形態のゲートウェイ装置20内の、ゲートウェイアプリケーション2001A、SSL2002、TCP2003、IPルーティング2004、IPスタック2005と、各々、同様の構成を有し、同様の動作を行う。
NIC201は、第9の実施の形態のゲートウェイ装置20内のNIC201と同様の構成を有し、同様の動作を行う。
サーバ31は、第9の実施の形態におけるサーバ31に対して、中間ドライバZ3106が追加されており、中間ドライバZ3106内において、ゲートウェイ装置30と同様の動作を行う。
中間ドライバZ3106は、ゲートウェイアプリケーション3001A、SSL3002、TCP3003、IPルーティング3004、IPスタック3005、中間ドライバY3006で構成される。上記各部分は、第9の実施の形態のゲートウェイ装置30内の、ゲートウェイアプリケーション3001A、SSL3002、TCP3003、IPルーティング3004、IPスタック3005、中間ドライバY3006と、各々、同様の構成を有し、同様の動作を行う。
Firewall33は、第9の実施の形態のFirewall33と同様の構成を有し、同様の動作を行う。但し、本実施の形態においては、Firewall33の代わりに、NATルータやProxyサーバを用いても良い。
第10の実施の形態でも、他の実施の形態と同様に、ゲートウェイ装置20とゲートウェイ装置30との間で、予めSSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
図29を用いて、第10の実施の形態において、サーバ31から端末21へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、Firewall33は、端末21のIPスタック2005とサーバ31のIPスタック3005の間の通信は双方向で許可するが、端末21とサーバ31の間の、IPスタック2005やIPスタック3005を介さない直接の通信は双方向で遮断するとする。
サーバ31内のゲートウェイアプリケーション3001Aは、ユーザからの端末21内のゲートウェイアプリケーション2001Aへの接続要求を受け、SSL3002に端末21内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、TCP3003に端末21内のゲートウェイアプリケーション2001Aへの通信開始を指示する。
TCP3003は、SSL3002からの通信開始指示を受け、TCP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、TCP2003とのTCPセッション確立要求パケット(SYN)を送信するために、TCP規格に沿ったセッション確立要求パケットを生成する。このパケットは、宛先IPアドレスとして端末21のIPスタック2004側宛、宛先ポート番号にTCP2003が設定されている。
IPルーティング3004は、TCP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを生成して、中間ドライバY3006に転送する。
中間ドライバY3006は、IPスタック3005からフレームを受信してヘッダ解析を行う。解析の結果、暗号化が必要なフレームでは無い為、このフレームを、そのまま、ドライバ3105に転送する。
ドライバ3105は、中間ドライバY3006からフレームを受信し、MAC3111に転送する。
MAC3111は、ドライバ3105からフレームを受信し、PHY3112に転送する。
PHY3112は、MAC3111からフレームを受信し、ポート3113に転送する。
ポート3113は、PHY3112からフレームを受信し、イーサネットケーブルを経由してFirewall33に転送する。
Firewall33は、サーバ31からフレームを受信し、サーバ31から端末21への通信の為、これを許可し、端末21に転送する。
端末21は、Firewall33からフレームを受信し、ポート2013、PHY2012、高速化エンジンY2014、MAC2011、ドライバ2105の経路でパ転送し、IPスタック2005に転送する。この時、高速化エンジンY2014は、PHYから受信したフレームをそのままMACに流す。
IPスタック2005は、ブリッジ2008からパケットを受信し、MACヘッダを外してパケットにしてIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、TCP2003側のポート番号が付加されていることから、このパケットをTCP2003に転送する。
TCP2003は、IPルーティング2004よりパケットを受信する。このパケットは、TCPセッション確立要求パケット(SYN)であるので、TCPプロトコルに従い、TCPセッション確立要求に対して、応答パケット(SYN+ACK)を生成してTCP3003宛てに送信する。すなわち、応答パケットの宛先IPはサーバ31のIPスタック3005のIPアドレスが設定され、応答パケットの宛先ポートは、TCP3003のポート番号が設定される。
応答パケットは、IPルーティング2004、IPスタック2005、ドライバ2105、NIC201、Firewall33、NIC311を経由してCPU310に到達し、更にドライバ3105、IPスタック3005、IPルーティング3004を経由し、TCP3003に到達する。
TCP3003は、IPルーティング3004よりパケットを受信する。このパケットは、TCPセッションの確立要求に対する応答パケットであるので、この応答パケットに対するACKパケットをTCP2003に送信する。更にSSL3002に対して、TCP2003とのTCPセッション接続完了を通知する。
SSL3002は、TCP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、TCP3003で受信されると、TCP3003とTCP2003との間で設定されたTCPセッションを通り、NIC311、Firewall33、NIC201を経由して、TCP2003に到着する。
TCP2003は、SSLセッション確立要求パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、ゲートウェイアプリケーション2001Aに対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、TCP2003とTCP3003との間のTCPセッションを経由して、SSL3002に到達する。
SSL2002は、SSL2002の秘密鍵、SSL3002の公開鍵、SSL2002とSSL3002の間の共通鍵、SSLセッションの相手方機器のIPアドレス(サーバ31のIPルーティング3004側のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP3003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP2003のポート)、送信元IPアドレス(端末21のIPルーティング2004側のIPアドレス)、及び開始命令を制御フレームに載せ、高速化エンジンY2014に制御フレームを送信する。
制御フレームは、SSL2002を出ると、ドライバ2105、MAC2011を経由して、高速化エンジンY2014に到着する。
高速化エンジンY2014は、MACアドレス等により制御フレームを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用する為に保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
又、SSL3002は、SSL3002の秘密鍵、SSL2002の公開鍵、SSL2002とSSL3002の間の共通鍵、SSLセッションの相手方機器のIPアドレス(端末21のIPアドレス)、SSLセッションの相手方機器の宛先ポート(TCP2003のポート)、自ノード側のSSLセッションの送信元ポート番号(TCP3003のポート)、送信元IPアドレス(サーバ31のIPアドレス)、及び開始命令を、中間ドライバY3006に通知する。
中間ドライバY3006は、SSL3002から通知を受けた公開鍵、秘密鍵および共通鍵を、各々、復号化および暗号化に使用する為に保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
以上のようにして、SSL2002とSSL3002との間で、SSLセッションが確立される。
以上により、第10の実施の形態において、サーバ31から端末21へのSSLセッション(セキュアTCPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図29を用いて、第10の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、Firewall33は、端末21のIPスタック2005とサーバ31のIPスタック3005の間の通信は双方向で許可するが、端末21とサーバ31の間の、IPスタック2005やIPスタック3005を介さない直接の通信は双方向で遮断するとする。
更に、サーバ31から端末21へのSSLセッション(セキュアTCPセッション)が、上述の動作例により既に設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション3101との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAにはサーバ31のIPスタック3104のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPスタック2104のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)及び宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、中間ドライバZ2106に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
中間ドライバZ2106内のゲートウェイアプリケーション2001Aは、IPスタック2104から受信したフレームを、ゲートウェイアプリケーション2001Aとゲートウェイアプリケーション3001Aの間に設定したSSLセッションに流す。
すなわち、ゲートウェイアプリケーション2001Aは、IPスタック2104から受信したEthernetフレーム(フレームフォーマットF20)をデータとしてSSL2002に渡す。
SSL2002は、ゲートウェイアプリケーション2001Aから未暗号化のデータF14(F21〜F24)を受け取ると、暗号化処理を行わず、そのまま、TCP2003に転送する。
TCP2003は、SSL2002よりデータF14を受け取り、TCPヘッダF13、及びIPヘッダF12を付けて、IPルーティング2004に渡す。
ここで、F12内のIP DAにはサーバ31のIPスタック3005のIPアドレスが設定され、F12内のIP SAには端末21のIPスタック2005のIPアドレスが設定される。又、宛先ポートにはTCP3003のポートが設定され、送信元ポートにはTCP2003のポートが指定される。
IPルーティング2004は、TCP2003より受信したデータのIPヘッダF12内のIPアドレス等を参照し、フレームをIPスタック2005に渡す。
IPスタック2005は、IPルーティング2004よりフレームを受信し、フレームにMACヘッダF11を付け、Ether over SSLフレームフォーマットF10の形式にしてドライバ2105に渡す。
ここで、ARPの結果より、F11内のMAC DAにはFirewall 33のWAN側のMACアドレスが設定され、F11内のMAC SAには、端末21のMACアドレスが設定される。
IPスタック2005より送信されたフレームは、ドライバ2105、MAC2011を経由して、高速化エンジンY2014に送られる。
高速化エンジンY2014は、インタフェース2014Cにおいてフレームを受け取り、フレーム解析Y2014Dで受信フレームが、予め、SSL2002より通知されたSSLセッションのフレームだと判別し、データF14の暗号化を行う。そして、マルチプレクサ2014Fを経由して、PHY2012に転送する。この時、フレームのヘッダF11〜F13には、変更を加えない。
高速化エンジンY2014を出たフレームは、PHY2012、ポート2013を経由して、Firewall33に送られる。
Firewall33は、端末21からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のままサーバ31に転送する。
ここで、F11内のMAC DAにはサーバ31のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
サーバ31は、Firewall33からのフレームをポート3113より受信すると、PHY3112、MAC3111、ドライバ3105を経由して、中間ドライバZ3106内の中間ドライバY3006に転送する。
中間ドライバY3006は、ドライバ3105よりフレームを受け取り、フレーム解析Y3006Dで受信フレームが、予め、SSL3002より通知されたSSLセッションのフレームだと判別し、データF14の復号化を行う。そして、復号化処理によりデータF14の暗号化を解除した後、マルチプレクサY3006Fを経由して、IPスタック3005に転送する。この時、フレームのヘッダF11〜F13には変更を加えない。
IPスタック3005は、中間ドライバY3006から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
TCP3003は、IPルーティング3004からフレームを受信すると、TCPプロトコルに従ってACKパケットを返送する等の処理を行う。そして、受信したフレームから、TCPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、TCP3003からデータF14を受信すると、復号化などの処理をせず、そのまま、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、IPスタック3104に流す。
ゲートウェイアプリケーション3001Aから送出されたフレームは、IPスタック3104、IPルーティング3103、TCP3102を経由して転送され、フレーム内のデータF24がアプリケーション3101に渡される。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に、実現可能である。
本実施の形態では、端末21側に中間ドライバと高速化エンジンを実装し、サーバ31側に中間ドライバを実装する例を示したが、これとは逆に、サーバ31側に高速化エンジンと中間ドライバを実装し、端末21側に中間ドライバを実装することも可能である。
又、端末21側と、サーバ31側の両方に、高速化エンジンを実装することも出来る。更に、端末21側とサーバ31側の両方に中間ドライバを実装し、高速化エンジンを使用しないようにすることも出来る。更に、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、端末21において、暗号化および復号化の処理をハードウェア化し、SSLの処理を高速化しているからである。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、比較的安価なMACとPHYと間のインタフェースに、高速化処理の為のハードウェア(高速化エンジン)を実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きな暗号化/復号化のみをハードウェア処理できるからである。
[第11の実施の形態]
本発明の第11の実施の形態は、図19に示す第3の実施の形態に対して、ゲートウェイ装置20において、TCP2003の代わりにUDP2003を設置し、中間ドライバ2006を廃止し、代わりにブリッジ2008、ドライバ2009、仮想NIC2010を設置したものである。又、ゲートウェイ装置30においても、TCP3003の代わりにUDP3003を設置し、中間ドライバ3006を廃止している。又、中間ドライバではなく制御フレームを高速化エンジンで作成し、仮想NICとブリッジを使って送信している。
第11の実施の形態における、端末21、サーバ31、HUB22、HUB32、イントラネット2、イントラネット3の構成および動作は、第3の実施の形態と同じである。
第11の実施の形態においては、イントラネット2は、閉域LANだけでなく、インターネット等のオープンなWANを用いても構わない。
[構成の説明]
図30は、第11の実施の形態における各機器の構成とフレームの転送経路を詳細に示したブロック図である。
ゲートウェイ装置20は、第3の実施の形態におけるゲートウェイ装置20に対して、TCP2003の代わりにUDP2003を設置し、中間ドライバ2006を廃止し、代わりにブリッジ2008、ドライバ2009、仮想NIC2010を設置している点において異なる。
ブリッジ2008、ドライバ2009、仮想NIC2010は、各々、第3の実施の形態におけるブリッジ308、ドライバ3009、仮想NIC3010と同様の構成を有し、同様の動作を行う。
UDP2003は、TCP2003の機能から輻輳制御および再送制御を除いたものである。
高速化エンジン制御2001は、第3の実施の形態における高速化エンジン制御2001の機能の他、第3の実施の形態における中間ドライバ2006内の制御フレーム送受信に関わる機能も併せ持っている。
ゲートウェイ装置30は、第3の実施の形態におけるゲートウェイ装置30に対して、TCP3003の代わりにUDP3003を設置し、中間ドライバ3006を廃止している点において異なる。
UDP3003は、本実施の形態におけるゲートウェイ装置20内のUDP2003と同様である。
第11の実施の形態では、ゲートウエイ装置20とゲートウェイ装置30との間で、予めSSLセッションを設定している場合のみ、イントラネット2内の機器からイントラネット3内の機器へのアクセスが可能になる。
[動作の説明]
[SSLセッションの確立動作]
図30を用いて、第11の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアTCPセッション)を確立する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008、ブリッジ3008、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33のWAN側、Firewall33のLAN側、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
ゲートウェイ装置30内のゲートウェイアプリケーション3001Aは、ユーザからのゲートウェイ装置20内の高速化エンジン制御2001への接続要求を受け、SSL3002にゲートウェイ装置20内の高速化エンジン制御2001への通信開始を指示する。同時に、中間ドライバ3006に対して、ゲートウェイ装置20内の高速化エンジン制御2001への通信開始を通知する。この通知には、ゲートウェイ装置20のIPアドレス、高速化エンジン制御2001のポート番号、及びゲートウェイアプリケーション3001Aの送信元ポート番号、更にゲートウェイ装置30のIPアドレスが含まれる。
SSL3002は、ゲートウェイアプリケーション3001Aからの通信開始指示を受け、SSL2002との間でSSLセッションを確立する為に、UDP3003にゲートウェイ装置20内の高速化エンジン制御2001への通信開始を指示する。
UDP3003は、SSL3002からの通信開始指示を受け、UDP2003との間でTCPセッションを確立する為に、IPルーティング3004に対して、UDP2003とのセッション確立に必要なパケットを送信する。このパケットは、UDP規格に沿ったものであり、宛先IPアドレスにゲートウェイ装置20宛、宛先ポート番号にUDP2003が設定されている。
IPルーティング3004は、UDP3003から受信したパケットの宛先IPアドレスと宛先ポート番号を参照し、パケットをIPスタック3005に転送する。
IPスタック3005は、IPルーティング3004より受信したパケットに、Firewall33内のイントラネット3側のMACアドレスを宛先MACアドレスとして付加し、更に送信元MACアドレスに自ノードのMACアドレスを設定してフレームを生成し、ブリッジ3008を経由してドライバ3007に転送する。
ドライバ3007は、ブリッジ3008からフレームを受信し、MAC3011に転送する。
MAC3011は、ドライバ3007からフレームを受信し、PHY3012に転送する。
PHY3012は、MAC3011からフレームを受信し、ポート3013に転送する。
ポート3013は、PHY3012からフレームを受信し、イーサネットケーブルを経由してHUB32に転送する。
HUB32は、フレームを受信すると、MAC DAを参照し、MAC DAがFirewall33のLAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33側のポートに出力する。
Firewall33は、HUB22からフレームを受信し、ゲートウェイ装置30からゲートウェイ装置20への通信の為、これを許可し、HUB22に転送する。
HUB22は、Firewall33からフレームを受信し、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20に転送する。
ゲートウェイ装置20は、HUB22内からフレームを受信し、ポート2013、PHY2012、高速化エンジン2014、MAC2011、ドライバ2007、ブリッジ2008の経路でパケットを転送し、IPスタック2005に転送する。この時、高速化エンジン2014は、PHYから受信したフレームを、そのまま、MAC 2011に転送する。
IPスタック2005は、ブリッジ2008からフレームを受信し、MACヘッダを外してIPルーティング2004に転送する。
IPルーティング2004は、IPスタック2005より受信したパケットの宛先ポート番号を参照し、UDP2003側のポート番号が付加されていることから、このパケットをUDP2003に転送する。
UDP2003は、IPルーティング2004よりパケットを受信する。そして、セッション確立要求受信の報告をSSL2002に伝える。その結果、SSL2002は、UDP2003に対して、UDP2003に対してセッションを確立するよう命令する。
UDP2003は、セッション確立の為に必要なパケットを、UDP3003宛てに送信する。すなわち、セッション確立要求パケットの宛先IPはゲートウェイ装置30のIPアドレスが設定され、パケットの宛先ポートはTCP3003のポート番号が設定される。
接続要求パケットは、セッション確立要求パケットとは逆の経路、即ち、IPルーティング2004、IPスタック2005、ブリッジ2008、ドライバ2007、NIC201、HUB22、Firewall33、HUB32、NIC301、ドライバ3007、ブリッジ3008、IPスタック3005、IPルーティング3004を経由し、UDP3003に到達する。
UDP3003は、IPルーティング3004よりパケットを受信する。このパケットは、UDPセッションの確立要求であるので、SSL3002に対して、UDP2003とのUDPセッション接続完了を通知する。
SSL3002は、UDP3003からの接続完了通知を受け、SSL2002との間でSSLセッションを確立する為、SSLプロトコルに従い、セッション確立要求の為のパケット(SSLセッション確立要求パケット)を送信する。
SSLセッション確立要求パケットは、UDP3003で受信されると、UDP3003と中間ドライバ3006内のUDPとの間で設定されたUDPセッションを通り、NIC301、HUB32、Firewall33、HUB22、NIC201を経由して、UDP2003に到着する。この際、NIC201内の高速化エンジン2014は、PHY2012から受信したパケットを、そのまま、MAC2011に転送する。
UDP2003は、パケットをSSL2002に転送する。
SSL2002は、SSLセッション確立要求の内容を検証し、問題が無ければ、高速化エンジン制御2001に対して、SSL3002とのセッション確立を通知すると同時に、SSLプロトコルに従い、SSL3002に対してSSLセッション確立応答パケットを送信する。
SSLセッション確立応答パケットは、SSLセッション確立要求パケットとは逆の経路、即ち、UDP2003と中間ドライバ2006との間のUDPセッションを経由してSSL3002に到達する。
SSL3002は、SSLセッション確立応答の内容をSSLプロトコルに従い検証し、問題が無ければ、ゲートウェイアプリケーション3001Aに対して、SSL3002とSSL2002との間のSSLセッション確立を通知する。
高速化エンジン制御2001は、SSL2002からのSSLセッション確立通知を受けると、制御フレームを作成し、このフレームを仮想NIC2010、ドライバ2009、ブリッジ2008、ドライバ2007、MAC2011の経路で転送し、高速化エンジン2014に送る。制御フレームには、公開鍵、秘密鍵および共通鍵、SSLセッションの相手方機器のIPアドレス(ゲートウェイ装置30のIPアドレス)、SSLセッションの相手方機器の宛先ポート(UDP3003のポート)、自ノード側のSSLセッションの送信元ポート番号(UDP2003のポート)、送信元IPアドレス(ゲートウェイ装置20のIPアドレス)、及び開始命令が含まれる。
高速化エンジン2014は、MACアドレス等により制御フレームを判別し、制御フレーム送受信部で受信する。そして、公開鍵、秘密鍵および共通鍵を、それぞれ復号化および暗号化に使用する為に保存し、IPアドレスやポート番号をフレーム解析の為に保存する。そして、高速化処理開始命令を受け、フレーム解析、暗号化、及び複号化の処理を開始する。
高速化エンジン2014は、高速化処理開始命令以前は、制御フレーム以外のMAC2011から受信したフレームは、全て、そのまま、PHY2012に送信し、PHY2012から受信したフレームは、全て、そのまま、MAC2011に送信していた。しかしながら、高速化処理開始命令以降は、制御フレーム以外のMAC2011から受信したフレームを、全て、そのまま、PHY2012に送信する動作には変わりないが、PHY2012から受信したフレームについては、以下のような処理を行う。
(1) ゲートウェイ装置20宛て、かつ、SSL3002で暗号化されたフレームであれば、UDP等のカプセル化を解除し、必要であれば、フラグメントを解除し、フレームを復号化し、PHY2012側に送信する。
(2) (1)以外の自ノード宛てフレームであれば、MAC2011に転送する。
(3) ブロードキャストフレーム、若しくはマルチキャストフレームであれば、フレームをコピーして、一方はそのままMAC2011に転送し、もう一方は暗号化とカプセル化を行い、SSL3002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
(4) (1)〜(3)以外のフレームであれば、暗号化とカプセル化を行い、SSL3002(PHY2012側)に送信する。必要であれば、フラグメントを分割も行う。
以上のようにして、高速化エンジン2014とUDP3003との間で、フレーム転送の為のUDP等の輻輳制御の無いセッションが確立される。又、高速化エンジン2014とSSL3002との間で、SSLセッションが確立される。
すなわち、SSL2002は、セッション確立要求時のみ、SSL3002と遣り取りを行うが、セッション確立が終了すると、以後は、高速化エンジン2014とSSL3002との間で、SSLの暗号化および復号化の遣り取りを行う。
又、UDP3003は、セッション確立要求時のみUDP2003とフレームの遣り取りを行うが、SSLセッションが確立した後は、高速化エンジン2014とUDP3003との間でフレームの遣り取りを行う。
以上により、第3の実施の形態において、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアUDPセッション)を確立する場合の動作が完了する。
[端末21からサーバ31へのフレーム転送動作]
図30を用いて、第11の実施の形態において、端末21からサーバ31へフレームを送信する場合を例に挙げて、動作の説明を行う。
この際、ブリッジ2008、ブリッジ3008、HUB22やHUB32が、既に、端末21、サーバ31、Firewall33、ゲートウェイ装置20、ゲートウェイ装置30のMACアドレスを学習しているものとする。
又、Firewall33は、ゲートウェイ装置20とゲートウェイ装置30の間の通信は双方向で許可するが、端末21とサーバ31の間のゲートウェイ装置20やゲートウェイ装置30を介さない直接の通信は双方向で遮断するとする。
更に、ゲートウェイ装置30からゲートウェイ装置20へのSSLセッション(セキュアUDPセッション)が、上述の動作例により、既に、設定されているものとする。
又、端末21内のアプリケーション2101と、サーバ31内のアプリケーション(アプリケーション3101)との間で、既に、TCPセッションが構築されているとする。
端末21内のアプリケーション2101が、サーバ31内のアプリケーション3101宛のデータを、TCP2102に渡す。
TCP2102は、アプリケーション2101からデータを受け取り、TCPプロトコルに従ってTCPヘッダ(図2におけるF23)やIPヘッダ(図2におけるF22)を付けてIPパケットとし、IPルーティング2103に渡す。この時、LAN IP F22内のIP DAにはサーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには端末21のIPアドレスが設定される。
IPルーティング2103は、TCP2102から受信したパケットの宛先IPアドレス(サーバ31宛て)及び宛先ポート(TCP3102宛て)を参照し、データを、そのまま、IPスタック2104に転送する。
IPスタック2104は、IPルーティング2103からパケットを受信し、MACヘッダ(図2におけるF21)を付けてEthernetフレームを作成し、ドライバ2105に渡す。このフレームはEthernetフレームF20のフォーマットを有する。この時、IPスタック2104は、ARPの結果を参照して、フレームのLAN MAC F21内のMAC DAにはサーバ31のMACアドレスを設定し、LAN MAC F21内のMAC SAには端末21のMACアドレスを設定する。
ドライバ2105は、IPスタック2105より上記フレームを受け取り、NIC211に転送する。
NIC211は、ドライバ2105よりフレームを受け取り、MAC2111、PHY2112、ポート2113を経由して、HUB22にフレームを転送する。
HUB22は、端末21のNIC211側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置20側のポートに出力する。
ゲートウェイ装置20内のNIC201は、ポート2013でHUB22からのフレームを受信し、PHY2012を経由して、高速化エンジン2014に渡す。
高速化エンジン2014は、到着したフレームの宛先MACがサーバ31宛てであることから、高速化エンジン2014内の暗号化2014Gにおいてフレームを暗号化して図3におけるデータF14を作成し、更にカプセル化2014Iにおいて図3におけるF11〜F13の各ヘッダを付加してEther over SSLフレームF10のフォーマットにして、再びPHY2012側に転送する。
この時、INET MAC F11内のMAC DAにはFirewall33のWAN側のMACアドレスが設定され、F11内のMAC SAにはゲートウェイ装置20のMACアドレスが設定される。又、INET IP F12内のIP DAにはゲートウェイ装置30のIPアドレスが設定され、F12内のIP SAにはゲートウェイ装置20のIPアドレスが設定される。INET TCP F13に関しては、UDP3003の宛先ポートが設定され、送信元ポートにはUDP2003を設定する。(本実施の形態では、Firewall33がUDP通信を許可するものとする)
PHY2012は、高速化エンジン2014よりフレームを受信すると、ポート2013を経由してHUB22にフレームを転送する。
HUB22は、ゲートウェイ装置22側のポートからフレームを受信すると、F11内のMAC DAを参照し、MAC DAがFirewall33のWAN側のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、Firewall33に出力する。
Firewall33は、HUB22からのフレームを受信し、IP DAを参照してMACヘッダF11を変更し、受信フレームをフレームフォーマットF10の形のままHUB32に転送する。
ここで、F11内のMAC DAにはゲートウェイ装置30のMACアドレスが設定され、F11内のMAC SAにはFirewall33のLAN側のMACアドレスが設定される。
HUB32は、Firewall33からのフレームを受信すると、F11内のMAC DAを参照し、MAC DAがゲートウェイ装置30のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、ゲートウェイ装置30側のポートに出力する。
ゲートウェイ装置30は、HUB32からのフレームをポート3013より受信すると、PHY3012、MAC3011、ドライバ3007、ブリッジ3008を経由して、IPスタック3005に転送する。
IPスタック3005は、ブリッジ3008から受信したフレームのMACヘッダF11を取り外して、IPルーティング3004に送る。
IPルーティング3004は、受信したフレームのヘッダF12内のIP DAと、F13内の宛先ポート番号を参照し、フレームをTCP3003に転送する。
UDP3003は、IPルーティング3004からフレームを受信すると、受信したフレームから、UDPヘッダF13とIPヘッダF12を取り外し、データF14をSSL3002に転送する。
SSL3002は、UDP3003からデータF14を受信すると、復号化処理により暗号化を解除し、データF14からEthernetフレームF20、即ち、F21〜F24を取り出し、ゲートウェイアプリケーション3001Aに転送する。
ゲートウェイアプリケーション3001Aは、SSL3002からフレームF20を受信すると、このフレームを、そのまま、仮想NIC3010に流す。
このフレームは、端末21からHUB22に送信された時の状態のままに保たれており、LAN MAC F21内のMAC DAにはサーバ31のMACアドレスが設定され、LAN MAC F21内のMAC SAには端末21のMACアドレスが設定されている。又、LAN IP F22内のIP DAには、サーバ31のIPアドレスが設定され、LAN IP F22内のIP SAには、端末21のIPアドレスが設定されている。
ゲートウェイアプリケーション3001Aより仮想NIC3010に渡されたフレームは、ドライバ3009、ブリッジ3008、NIC301を経由して、HUB32に転送される。
HUB32は、ゲートウェイ装置30側のポートからフレームを受信すると、F21内のMAC DAを参照し、MAC DAがサーバ31のものであることから、過去のルーティング学習結果に基づき、このフレームを、そのまま、サーバ31側のポートに出力する。
サーバ31は、HUB32から送信されたフレームを受信し、ドライバ3105、IPスタック3104、IPルーティング3103、TCP3102を経由して、フレーム内のデータF24をアプリケーション3101に渡す。
以上のようにして、端末21内のアプリケーション2101からサーバ31内のアプリケーション3101への一連のフレーム転送が完了する。
上記の例とは逆の経路を辿ることで、サーバ31内のアプリケーション3101から端末21内のアプリケーション2101への一連のフレーム転送も、同様に実現可能である。
本実施の形態では、ゲートウェイ装置20側に高速化エンジンを実装する例を示したが、これとは逆に、ゲートウェイ装置30側に高速化エンジンを実装することも可能である。更に、本実施の形態では、サーバ31と端末21の設置場所を入れ替えることも出来る。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、高速化エンジンを利用することで、ゲートウェイ装置20におけるCPU(ソフトウェア処理)によるカプセル化処理および暗号化/復号化処理を排除し、これら処理を全て高速化エンジン(ハードウェア)で実現できる為である。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、暗号化/復号化とカプセル化を同一ハードウェア(FPGA/ASIC)上で行うことが出来るからである。
又、これは、比較的安価なMACとPHY間のインタフェースに、ハードウェアを実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きな暗号化/復号化とカプセル化のみをハードウェア処理できるからである。
[第12の実施の形態]
本発明の第12の実施の形態は、第1の実施の形態に対して、高速化エンジン2014において、複数のセッション取り扱えるようにしたものである。
[構成の説明]
図31は、本実施の形態における中間ドライバ1008の構成を示すブロック図である。本実施の形態における中間ドライバ1008は、図7に示す第1の実施の形態における中間ドライバ1008に対して、設定管理部1008L内にテーブルを有し、複数のセッションの情報を保存できる点において異なる。
更に、フレーム解析1008H及びフレーム解析1008Iが、設定管理部1008L内のテーブルを参照して、受信したフレームの転送先を決定する点において異なる。
フレーム解析1008Hは、IPスタック1007からフレームを受信し、以下の順序でフレームのヘッダ情報をキーにして設定管理部1008L内のテーブルを検索する。
(1) フレームが高速化処理に関係するフレームで有るかどうか検索する。フレームが高速化処理に関係するフレームで有る場合、フレームをカプセル化解除1008Fに転送する。フレームが高速化処理に関係するフレームか否かは、MACアドレス、IPアドレス、TCPヘッダ、UDPヘッダ等を基に判別される。
(2) 検索の結果、その他のフレームであれば、マルチプレクサ1008Kに転送する。
フレーム解析1008Iは、ドライバ1009からフレームを受信し、以下の順序でフレームのヘッダ情報をキーにして設定管理部1008L内のテーブルを検索する。
(1) フレームが高速化処理に関係するフレームで有るか否かを検索する。
フレームが高速化処理に関係するフレームで有る場合、フレームをカプセル化解除1008Gに転送する。フレームが高速化処理に関係するフレームか否かは、MACアドレス、IPアドレス、TCPヘッダ、UDPヘッダ等を基に判別される。
(2) フレームが機器や高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)であるか否かを検索する。
検索の結果、フレームが制御フレームである場合、フレームを制御フレーム送受信部1008Mに転送する。特殊フレームであるか否かは、通常はMAC DAとMAC SAにより判断される。MAC DAもしくはMAC SAをキーにテーブル検索を行い、予め、テーブルに登録したアドレス範囲のMACアドレス(制御用MACアドレスと呼ぶ。例えば00004C0000xx)が記載されている場合は、フレームを制御フレームと判断する。
(3) 検索の結果、その他のフレームであればマルチプレクサ1008Jに転送する。
設定管理部1008Lは、以下の機能を有する。
(1) 中継アプリケーション1001より、高速化処理に関連するセッションの情報(MACアドレス、IPアドレス、ポート番号等)の通知を受け、テーブルに保存する。
(2) 中継アプリケーション1001より、特殊フレームのMACアドレスの通知を受け、テーブルに保存する。
(3) フレーム解析1008H及びフレーム解析1008Iからの要求により、テーブルの検索を行い、検索結果を知らせる。
テーブルには、1セッションだけでなく、複数セッション分のMACアドレス、IPアドレス、ポート番号等の情報を記憶できる。
図32は、本実施の形態における高速化エンジン2014の構成を示すブロック図である。本実施の形態における高速化エンジン2014は、図12に示す第1の実施の形態における高速化エンジン2014に対して、設定管理部2014Nを有し、複数のセッションの情報を保存出来る点において異なる。
更に、フレーム解析2014Bが、設定管理部2014N内のテーブルを参照して、受信したフレームの転送先を決定する他、暗号化2014G、復号化2014L、カプセル化2014Iも、設定管理部2014N内のテーブルを参照して、セッションに適した公開鍵、秘密鍵および共通鍵、ヘッダ等の情報を得る。
フレーム解析2014Bは、インタフェース2014Aからフレームを受信し、以下に示す(1)〜(4)の順序で宛先を決定して転送する。
(1) 設定管理部2014N内のテーブルを検索し、自ノード宛て、かつ、検索にヒットした場合(予め設定されたSSLセッションのフレームである場合、即ち、セッション中継装置10によって暗号化されたフレームである場合)は、フレームをカプセル化解除2014Jに転送する。この時、設定管理部から受け取ったセッションID情報も一緒に渡す。
(2) (1)以外の自ノード宛てフレーム(自ノード宛て、かつ、設定管理部2014N内のテーブルを検索でミスヒットした場合)であれば、フレームをマルチプレクサ2014Eに転送する。
(3) MAC DAにブロードキャストMAC、若しくはブロードキャストMACが付加された、ブロードキャストフレーム、又はマルチキャストフレームであれば、マルチプレクサ2014Eと暗号化2014Gに、フレームをコピーして転送する。仮に、複数のセッションが設定管理部2014Nに登録されている場合は、登録セッションの本数分、フレームをコピーし、設定管理部2014Nから得られるセッションIDと共に、暗号化2014Gに渡す。
(4) (1)〜(3)以外のフレームであれば、暗号化2014Gに転送する。仮に、複数のセッションが設定管理部2014Nに登録されている場合は、登録セッションの本数分、フレームをコピーし、設定管理部2014Nから得られるセッションIDと共に、暗号化2014Gに渡す。
制御フレーム解析2014Dは、インタフェース2014Cからフレームを受信し、フレームが高速化エンジンの制御に関わる特殊なフレーム(以後、制御フレームと呼ぶ)である場合は、フレームを制御フレーム送受信部2014Mに転送する。特殊フレームで無い場合は、マルチプレクサ2014Fに転送する。特殊フレームであるか否かは、通常はMAC DAとMAC SAにより判断する。MAC DA又はMAC SAの何れかに、予め規定したアドレス範囲のMACアドレス(制御用MACアドレスと呼ぶ。例えば、00004C000000〜FF)が記載されている場合は、フレームを制御フレームと判断する。
暗号化2014Gは、フレーム解析2014Bよりフレームを受信し、3DES等の方法で暗号化を行い、フラグメント分割2014Hに転送する。暗号化に用いる公開鍵は、フレーム解析2014Bより通知を受けたセッションIDをキーにして、設定管理部2014N内のテーブルを検索し、この結果得られた公開鍵と共通鍵を利用する。
カプセル化2014Iは、図7に示す中間ドライバ1008内の再カプセル化1008Dと同様の動作を行う。すなわち、フラグメント分割2014Hより送られて来るデータ(図3におけるF14)に、INET MAC F11、INET IP F12、INET TCP F13の各ヘッダを付加し、マルチプレクサ2014Fに転送する。付加するF11〜F13の各ヘッダの値は、セッションIDをキーにして、設定管理部2014N内のテーブルを検索し、この結果得られたヘッダの値を利用する。尚、設定により、INET TCP F13の位置に、TCPヘッダでは無く、UDPヘッダを設定することも出来る。
カプセル化2014Iにおいて、TCPヘッダF13を付加するのは、通信経路上に存在するFirewallやNATルータ等(図1の例ではFirewall23)でパケットが遮断されることを防ぐ為である。F13にUDPヘッダを設定した場合は、通信経路上にFirewallやNATルータ等が存在する場合に、通信が遮断される可能性がある。カプセル化2014Iにおいて付加したTCPヘッダは、フレームフォーマットはTCPの形式を有するが、実際には、TCPは付加したヘッダでは無いので、輻輳制御や再送制御には用いられない。ここで付加するヘッダF13は、厭くまで、FirewallやNATを通過する為のものであり、実際の輻輳制御や再送制御は、端末21やサーバ31内に存在するTCP(図3のフレームフォーマットF10におけるF23のTCPヘッダ部分)によって行われる。
復号化2014Lは、フラグメント解除2014Kよりフレームを受信し、3DES等の方法で復号化を行い、マルチプレクサ2014Fに転送する。復号化に用いる公開鍵は、セッションIDをキーにして、設定管理部2014N内のテーブルを検索し、この結果得られた秘密鍵と共通鍵を利用する。
制御フレーム送受信部2014Mは、図7に示す中間ドライバ1008内の制御フレーム送受信部1008Mとの間で、制御フレームの送受信を行う。制御フレーム送受信部2014Mは、マルチプレクサ2014Eに高速化エンジンの制御に関わる特殊なフレーム(以降、制御フレームと呼ぶ)を送り、又、制御フレーム解析2014Dより制御フレームを受信する。そして、制御フレームで受信した設定パラメータ類を、設定管理部2014N内のテーブルに保存する。ここで、仮に、制御フレームで高速化処理の開始、及び終了の命令を受け取った場合、フレーム解析2014Bに通知する。制御フレーム送受信部では、以下の情報が送受信される。
(1) SSLセッションの相手方機器(セッション中継装置10)のIPアドレスや宛先ポート、及び自ノード(ゲートウェイ装置20)側のSSLセッションの送信元ポート番号や送信元IPアドレス、更には宛先MACアドレスと、自ノードの送信元MACアドレス。
(2) 公開鍵
(3) 秘密鍵
(4) 共通鍵
(5) 高速化処理の開始および終了
設定管理部2014Nは、制御フレーム送受信部2014Mからの設定情報を得て、これをセッションごとにテーブル形式で保存する。又、暗号化2014G、復号化2014L、フレーム解析2014Bからの要求に対して、以下に示す(1)〜(3)の方法でテーブルを検索し、結果を返答する。設定管理部2014Nは、テーブルにより複数セッション分の情報を保持し、要求により検索を行い、適切な情報を返答することが出来る。
(1) 暗号化2014Gからの検索要求に対しては、検索キー(セッションID)に対応したセッションの公開鍵と共通鍵を返答する。
(2) 復号化2014Lからの検索要求に対しては、検索キー(セッションID)に対応したセッションの秘密鍵と共通鍵を返答する。
(3) フレーム解析2014Bからの検索要求に対しては、ヒットの場合は、検索キー(MACアドレス、IPアドレス、ポート)に対応したセッションのIDを返答する。ミスヒットの場合は、その旨を返答する。
[動作の説明]
第12の実施の形態における動作は、第1の実施の形態における動作とほぼ同じな為、内容については省略する。
本実施の形態では、複数のセッションの設定が可能な為、受信したパケットのヘッダに応じて、動的にSSLセッションを確立させ、又、これを切断することも出来る。この場合、セッションの構築先のIPアドレスは、ラーニングやBGP等の方法により、決定される。
[発明の効果]
次に、本実施の形態の効果について説明する。
本実施の形態に挙げた発明を利用すると、端末21とサーバ31との間で、フレームの高速転送が可能になる。
これは、高速化エンジンを利用することで、ゲートウェイ装置20やゲートウェイ装置30におけるCPUでのソフトウェア処理によるカプセル化処理および暗号化/復号化処理を排除し、これら処理を全て高速化エンジン(ハードウェア)で実現できる為である。
更に、これは、ゲートウェイ装置とセッション中継装置との間の通信において、ヘッダF13の位置のTCPによる輻輳制御と再送制御とが発生しないよう、セッション中継装置内の中間ドライバと、ゲートウェイ装置内の中間ドライバにおいて、TCPを終端し、TCP over TCP問題の発生を回避しているからである。
又、本実施の形態に挙げた発明を利用すると、高速化処理の為のハードウェア(高速化エンジン)の開発費用や部材費用を、比較的低く抑えることが出来る。
これは、暗号化/復号化とカプセル化を同一ハードウェア(FPGA/ASIC)上で行うことが出来るからである。
又、これは、比較的安価なMACとPHY間のインタフェースに、ハードウェアを実装することが出来るからである。
又、これは、ハードウェアへの実装が難しいTCP処理をソフトウェアに残し、ハードウェアへの実装が比較的容易で、かつ、高速化処理の効果が大きな暗号化/復号化とカプセル化のみをハードウェア処理できるからである。
以上好ましい実施の形態及び実施例を挙げて本発明を説明したが、本発明は、必ずしも、上記実施の形態及び実施例に限定されるものでは無く、その技術的思想の範囲内において様々に変形して実施することが出来る。
尚、上述した各実施の形態の構成において、ソフトウェアで構成される部分とハードで構成される部分とを切り分けて説明したが、ソフトウェア及びハードで構成される部分は上記実施の形態に限るものではない。