(57)【要約】      （修正有）【課題】旧通信ミドルウェアから新通信ミドルウェアへの移行を簡易に低コストで実現する。【解決手段】通信装置は、データを他の通信装置を指定した宛先アドレスを用いてカプセル化して、第1パケットを作成する第1パケット作成部と、第１パケットを用いて所定の処理を実行する処理部と、第1パケットを当該宛先アドレスを用いて再びカプセル化して、第2パケットを作成する第2パケット作成部と、第2パケットを当該他の通信装置へ送信する送信部を有する。【選択図】図１
2012129897.tif 000002
【特許請求の範囲】
【請求項１】
他の通信装置と通信する通信装置であって、
データを当該他の通信装置を指定した宛先アドレスを用いてカプセル化して、第1パケットを作成する第1パケット作成部と、
当該第１パケットを用いて所定の処理を実行する処理部と、
当該第1パケットを当該宛先アドレスを用いて再びカプセル化して、第2パケットを作成する、第2パケット作成部と、
当該第2パケットを当該他の通信装置へ送信する送信部を有する通信装置。
【請求項２】
請求項１記載の通信装置であって、宛先アドレス毎に第2パケット作成の要否を指定した管理テーブルを有しており、
前記処理部は、前記管理テーブルを参照して、前記第1パケット作成部が作成した第1パケットに含まれる宛先アドレスに基いて当該第1パケットを前記第2パケット作成部がカプセル化すべきか否か判断する通信装置。
【請求項３】
請求項２記載の通信装置であって、前記処理部が前記第1パケットに対するカプセル化は不要であると判断した場合に、前記送信部は当該第1パケットを前記他の通信装置へ送信する通信装置。
【請求項４】
請求項１記載の通信装置であって、更に、
第2パケットを他の通信装置から受信した場合に、当該第2パケットを当該通信装置自身のアドレスでデカプセル化して第1パケットを抽出する第1パケット抽出部と、
当該第1パケットを当該通信装置自身のアドレスで再びデカプセル化してデータを抽出するデータ抽出部とを有する通信装置。
【請求項５】
通信アプリケーションとの間でアプリケーションデータの受け渡しを行い、第1通信プロトコルを用いる第1通信ミドルウェア実行部と、
第2通信プロトコルを用いる第2通信ミドルウェア実行部と、
前記第1通信ミドルウェア実行部および前記第2通信ミドルウェア実行部からの指示に基いて通信パケットの処理を実行するプロトコルスタック部と、
前記プロトコルスタック部との間で通信パケットの受け渡しを行う仮想通信インタフェース部と、
前記仮想通信インタフェース部とネットワークに接続された通信インタフェース部との間で通信パケットの受け渡しを行う処理部とを有しており、
前記第1通信ミドルウェア実行部の指示に基いて、前記プロトコルスタック部は、アプリケーションデータの送信先通信装置の仮想通信インタフェースに割り当てられた第1ＩＰアドレスと当該送信先通信装置の第1通信ミドルウェア実行部に割り当てられた第1ポート番号とを当該アプリケーションデータに付与して第1通信パケットを作成し、当該第1通信パケットを前記仮想通信インタフェース部に渡し、
前記仮想通信インタフェース部から前記第1通信パケットを受信した前記処理部は、当該第1通信パケットを前記第2通信ミドルウェア実行部に渡し、
前記第2通信ミドルウェア実行部は前記第1通信パケットを前記プロトコルスタック部に渡し、
前記プロトコルスタック部は、前記第2通信ミドルウェア実行部の指示に基いて、前記第１ＩＰアドレスと前記送信先通信装置の第2通信ミドルウェア実行部に割り当てられた第2ポート番号とを前記第1通信パケットに付与して第2通信パケットを作成して前記仮想通信インタフェース部に渡し、
前記仮想通信インタフェース部と前記処理部とを経由して前記第2通信パケットを受信した前記通信インタフェース部は、当該第２通信パケットを前記ネットワークに送信する通信装置。
【請求項６】
請求項５記載の通信装置であって、
前記処理部は、前記第1通信パケットに付与されている前記第1ＩＰアドレス及び前記第1ポート番号とに基いて、当該第1通信パケットを前記第2通信ミドルウェア実行部若しくは前記通信インタフェース部のいずれに引き渡すか判断する通信装置。
【請求項７】
請求項６記載の通信装置であって、
前記処理部が前記第1通信パケットを前記通信インタフェース部に引き渡すと判断した場合に、当該処理部から当該第1通信パケットを受信した当該通信インタフェース部は、当該第1通信パケットを前記ネットワークに送信する通信装置。
【請求項８】
請求項５記載の通信装置であって、
前記通信インタフェース部、前記処理部、及び前記仮想通信インタフェース部を介して前記プロトコルスタックが第2通信パケットを受信した場合に、当該プロトコルスタックは当該第2通信パケットから第１通信パケットを抽出して当該第1通信パケットを当該第2通信パケットに付与された第2ポート番号が示す前記第2通信ミドルウェア実行部に渡し、
前記第2通信ミドルウェア実行部と前記仮想通信インタフェース部とを介して前記第1通信パケットを受信した前記プロトコルスタックは、当該第1通信パケットからアプリケーションデータを抽出して、当該アプリケーションデータを当該第1通信パケットに付与された第1ポート番号が示す前記第1通信ミドルウェア実行部に渡す通信装置。
【請求項９】
請求項５記載の通信装置であって、
前記通信インタフェース部、前記処理部、及び前記仮想通信インタフェース部を介して前記プロトコルスタックが第1通信パケットを受信した場合に、当該プロトコルスタックは、当該第1通信パケットからアプリケーションデータを抽出して、当該アプリケーションデータを当該第1通信パケットに付与された第1ポート番号が示す前記第1通信ミドルウェア実行部に渡す通信装置。
【請求項１０】
請求項５に記載の通信装置であって、
更に前記第1ＩＰアドレスとは異なるＩＰアドレスが付与された他の仮想通信インタフェース部と、他の通信インタフェース部とを有しており、
前記第2通信ミドルウェア実行部は、前記第1通信パケットの複製である複製第1通信パケットを作成して前記プロトコルスタック部に渡し、
前記プロトコルスタック部は、前記第2通信ミドルウェア実行部の指示に従って、前記送信先通信装置が有する他の仮想通信インタフェース部に割り当てられた第2ＩＰアドレスと前記第2ポート番号とを前記複製第1通信パケットに付与して他の第2通信パケットを生成して、前記他の仮想通信インタフェース部に渡し、
前記他の仮想通信インタフェース部と前記処理部とを介して前記他の第2通信パケットを受信した前記他の通信インタフェース部は、当該他の第2通信パケットを前記ネットワークへ送信する通信装置。
【請求項１１】
請求項１０記載の通信装置であって、
前記通信インタフェース部と前記処理部と前記仮想通信インタフェース部とを介して第2通信パケットを、前記他の通信インタフェース部と前記処理部と前記他の仮想通信インタフェース部とを介して他の第2通信パケットを受信した前記プロトコルスタック部は、前記第2通信パケットから第1通信パケットを抽出し、前記他の第2通信パケットから複製第1通信パケットを抽出し、当該第1通信パケットと当該複製第1通信パケットとを前記第2通信ミドルウェア実行部に渡し、
前記第2通信ミドルウェア実行部は、前記第1通信パケットと前記複製通信パケットとを用いて、エラーチェック処理を実行し、いずれか一方を前記処理部に渡す通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
通信装置が備える通信ミドルウェアに関する。
【背景技術】
【０００２】
鉄道の運行管理システムや金融システムは、そのシステムの立ち上げ当初は小規模であっても、システム拡張や他システムとの統合等により、大規模化かつ複雑化していくことが多い。そして、システムを構成する装置の高性能化や技術の進歩に合わせてシステムを更新する（以降、「新システムに移行する」または「システム移行する」とも表現する）場合には、それらのシステム規模が大きくなるに従って修正箇所が多岐にわたるため、開発コストが膨大となる。
【０００３】
ここで、システム移行（特に、通信ミドルウェアの変更）における一般的な問題について、図19を用いて説明する。
【０００４】
図19は、旧システムの通信装置1901から、新システムの通信装置1906にシステム移行を行うケースを示している。旧システムの通信装置1901に示すような構成は、一般的なものである。すなわち、様々なサービスを提供する通信アプリケーション1902が、システム固有の通信基盤である旧通信ミドルウェア1903上で動作する。そして、通信アプリケーション1902が動作してデータを通信相手に送信する際には、その下位の階層に位置する旧通信ミドルウェア1903およびプロトコルスタック1904（ＴＣＰ（Transmission Control Protocol）、ＩＰ（Internet Protocol）等のプロトコル群）を用いて、通信Ｉ／Ｆ（Interface）1905を介して、ネットワークにパケットを送出する。  
ここで、旧システムから新システムへシステム移行し、通信ミドルウェアを旧通信ミドルウェア1903から新通信ミドルウェア1907に切り替える場合を考えてみる。
【０００５】
システム規模が小さい間は、通信ミドルウェアを変更するとともに通信アプリケーション1902を新しいものに切り替えることが一般的である。しかし、システム規模が大きい場合、通信アプリケーション1902の開発コストが膨大なものとなってしまう。そのため、開発コストを抑えるために、旧システムの通信アプリケーション1902を新システムの通信装置1906でも流用することが望まれる。
【０００６】
前記したように、旧システムの通信アプリケーション1902は、旧通信ミドルウェア1903上で動作することを前提に開発されている。そこで、システム移行した場合には、図19の下段に示すように、通信アプリケーション1902を新システムの新通信ミドルウェア1908上で動作させるために、旧通信ミドルウェア1903と新通信ミドルウェア1908との差異を補う新旧ミドル変換部1908を設ける必要がある。
【０００７】
大規模システムにおいては、通信アプリケーション1902をすべて作り替えるよりは、新旧ミドル変換部1908を新規に開発する方が開発コストは少なくてすむ。しかしながら、それでも、新旧ミドル変換部1908の開発コストは、依然として大きい。例えば、新旧ミドル変換部1908は、少なくとも、（１）通信アプリケーション1902とのＩ／Ｆ（Interface）部分、（２）新通信ミドルウェア1908とのＩ／Ｆ部分、（３）旧通信ミドルウェア1903および新通信ミドルウェア1908それぞれの内部の挙動（タイムアウトの条件等）を模擬する部分、についての機能を必要とする。特に、前記（３）の開発を行うためには、旧通信ミドルウェア1903および新通信ミドルウェア1908の内部の動作を詳細まで熟知している必要があるため、多大な時間を費やすことになるので、通信アプリケーション1902のプログラムの再利用性の観点から効率が悪い。
【０００８】
前記問題を解決するために、例えば、特許文献１では、旧システムの通信装置とネットワークとの間に、旧システムの通信装置から送信されるパケットをカプセル化するカプセル化装置（トンネリング装置）を設ける。そして、カプセル化装置は、カプセル化した各パケットを、新システムの新通信ミドルウェア経由でネットワークに送信する。また、カプセル化装置は、ネットワークから受信したカプセル化されたパケットをデカプセル化して、旧システムのパケットを抽出し、旧システムの通信装置に送信する。
【０００９】
また、例えば、非特許文献１では、仮想Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆ（Ｅｔｈｅｒｎｅｔは登録商標）を通信装置自身に備え、通信装置単体で旧システムのパケットをカプセル化する技術が公開されている。具体的には、その通信装置は、仮想Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆに新たなＩＰアドレスを割り当てて、すべての通信が仮想Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆを経由するようにルーティングテーブル等の設定を行う。そして、通信装置は、旧システムのパケット（Ｅｔｈｅｒｎｅｔフレーム）を仮想Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆを介してカプセル化して新通信ミドルウェアに渡すことで、新システムのパケットを送信することができるようになる。
【００１０】
このように、特許文献１や非特許文献１に記載の技術では、新規に開発する対象が、新通信ミドルウェア経由で受信した旧システムのパケット（Ｅｔｈｅｒｎｅｔフレーム）を旧システムに渡す部分（前記（１）の部分）、およびパケット（Ｅｔｈｅｒｎｅｔフレーム）を新通信ミドルウェアに渡す部分（前記（２）の部分）のみとなる。そのため、旧通信ミドルウェアと新通信ミドルウェアを相互変換する新旧ミドル変換部2107を開発する場合に比べて、技術難易度も低く、開発コストも大幅に削減することが可能となる。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００８−０７８９６６号公報
【非特許文献】
【００１２】
【非特許文献１】登大遊、“SoftEther の内部構造”、［online］、［平成２２年９月７日検索］、インターネット＜URL：http://www.softether.co.jp/jp/company/media/ academic/data/softetherpaper002.pdf>
【発明の概要】
【発明が解決しようとする課題】
【００１３】
背景技術に記載したように、特許文献１に開示されている技術では、旧システムのシステム設定（ＩＰアドレス等）は全く変更せずに、カプセル化装置を設置するだけで新システムへの移行が可能となる。しかしながら、カプセル化装置が通信装置の台数分だけ必要となり、ハードウェアコストが膨大になるという問題が生じる。
【００１４】
また、非特許文献１に開示されている技術では、通信装置単体で新システムへの移行が可能であるため、追加のハードウェアコストは不要となる。しかし、仮想Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆは、ＯＳからは物理Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆと同じように認識されるため、物理Ｅｔｈｅｒｎｅｔ  Ｉ／Ｆと異なるＩＰアドレスを設定する必要がある。したがって、旧システムのシステム設定変更や、新システム設計時にＩＰアドレスの制約を考慮しなければならない（旧システムのＩＰアドレスと重複してはいけない等）といった手間が生じる。
【００１５】
また、システム移行リスクを小さくするために、一気に全通信装置を新装置に切替えるのではなく、一定期間をかけて数台ずつ段階的に切替える方法を取ることもある。その場合、完全に移行が完了するまでは、同一ネットワーク上に、旧システムのIPアドレスのパケットと新システムのIPアドレスのパケットが混在することになり、一般的なルータやスイッチでは対応できない可能性がある。このような単一ネットワーク上に複数のIPアドレスが混在する問題は、特許文献１や非特許文献１では解決することができない。
【００１６】
従ってIPアドレスの変更やハードウェアの追加なしに、旧通信ミドルウェアを介して情報を送受信する通信アプリケーションが、新通信ミドルウェアを介してでも情報を送受信できるようにする技術が求められている。
【課題を解決するための手段】
【００１７】
通信装置は、データを他の通信装置を指定した宛先アドレスを用いてカプセル化して、第1パケットを作成する第1パケット作成部と、第１パケットを用いて所定の処理を実行する処理部と、第1パケットを当該宛先アドレスを用いて再びカプセル化して、第2パケットを作成する第2パケット作成部と、第2パケットを当該他の通信装置へ送信する送信部を有する。
【発明の効果】
【００１８】
IPアドレスの変更やハードウェアの追加無く、旧通信ミドルウェアを介してデータを送受信する通信アプリケーションが、新通信ミドルウェアを介してでもデータを送受信できるようになる。
【図面の簡単な説明】
【００１９】
【図１】通信装置の機能ブロック構成の一例を示す図である。
【図２】カプセル化処理部105の機能ブロック構成の一例を示す図である。
【図３】通信装置のハードウェア構成の一例を示す図である。
【図４】接続先アドレス、ポートに対応する通信プロトコルを管理するテーブルの一例を示す図である。
【図５】Ｅｔｈｅｒｎｅｔフレームの一例を示す図である。
【図６】通信情報対応テーブルの一例を示す図である。
【図７】新装置が新装置にデータを送信する場合の通信フローの一例を示す図である。
【図８】新装置が旧装置にデータ送信する場合の通信フローの一例を示す図である。
【図９】旧装置が新装置にデータ送信する場合の通信フローの一例を示す図である。
【図１０】RAW受信部が実行する処理の一例を示すフローチャートである。
【図１１】ミドル受信部が実行する処理の一例を示すフローチャートである。
【図１２】カプセル化判定部が実行する処理の一例を示すフローチャートである。
【図１３】RAW送信部が実行する処理の一例を示すフローチャートである。
【図１４】ミドル送信部が実行する処理の一例を示すフローチャートである。
【図１５】RAW受信部が実行する処理の一例を示すフローチャートである。
【図１６】ミドル受信部が実行する処理の一例を示すフローチャートである。
【図１７】RAW送信部が実行する処理の一例を示すフローチャートである。
【図１８】通信装置の機能ブロック構成の一例を示す図である。
【図１９】システム移行の一例を示す図である。
【発明を実施するための形態】
【実施例１】
【００２０】
実施形態の一例（以降、「本実施形態」と称す。）について、適宜図面を参照しながら詳細に説明する。
＜第１実施形態＞
第１実施形態では、システム移行にともなって、システム内の複数の通信装置の一部に、旧通信ミドルウェアに加え新通信ミドルウエアが実装された場合について説明する。なお、ここではカプセル化対象のパケットは、OSIモデルで言うところのレイヤ２であるEthernetフレームを想定する。
（通信装置の機能）
本実施形態における通信装置の機能について、図１を用いて説明する。
【００２１】
図１に示すように、本実施形態における通信装置101は、互いに、ネットワーク102を介して通信できるように接続されている。なお、ネットワーク102は、ＩＰ網として説明するが、これに限られることはない。また、通信に用いる信号は、例えば、電気、光、電波、音等のいずれかまたはそれらの組み合わせであっても構わない。
【００２２】
通信装置101は、通信アプリケーション実行部103、第1通信ミドルウェア実行部104、カプセル化処理部105、第2通信ミドルウェア実行部106、プロトコルスタック107、仮想通信I/F（Interface）108、通信I/F109、プロトコル管理テーブル110、および通信情報対応テーブル112を備えている。通信アプリケーション実行部103は、種々のサービスを他の通信装置に提供したり、他の通信装置に対して種々のサービスを要求したりする通信アプリケーションプログラムを実行する。
【００２３】
なお、通信アプリケーション実行部103において実行される通信アプリケーションプログラム（以降の説明では、ＡＰＰとも称する。）は、図19に示した通信アプリケーション1902に相当し、第1通信ミドルウェア実行部104において実行される第１通信ミドルウェア（システム移行前の旧通信ミドルウェア）上で動作する。
【００２４】
第1通信ミドルウェア実行部104は、複数のＡＰＰが実行されるときに、共通に使用される機能を提供するプログラムを実行する。例えば、当該プログラムは、ソケットＩ／Ｆを備えており、一般的に、認証や暗号化等のセキュリティ機能や、ソケットの初期化や終了処理等の複雑な通信処理機能等を有している。なお、第1通信ミドルウェア実行部104において実行されるプログラムは、旧通信プロトコルを用いるものであって、図19に示した旧通信ミドルウェア1903に相当する。
【００２５】
カプセル化処理部105は、仮想通信I/F108から受け取った送信パケット（以降、フレーム、Ethernetフレームとも呼ぶ）をチェックし、カプセル化が必要なカプセル化対象のパケットである場合は第2通信ミドルウェア実行部106に渡し、カプセル化の必要がないカプセル化対象外のパケットである場合はそのまま通信I/F109経由で送信する。また、通信I/F109や第2通信ミドルウェア実行部106から受け取った受信パケットを、仮想通信I/F108に渡す。カプセル化処理部105の詳細構成については図2で説明する。
【００２６】
第2通信ミドルウェア実行部106は、複数のＡＰＰが実行されるときに、共通に使用される機能を提供するプログラムを実行する。例えば、当該プログラムは、ソケットＩ／Ｆを備えており、一般的に、認証や暗号化等のセキュリティ機能や、ソケットの初期化や終了処理等の複雑な通信処理機能等を有している。なお、第2通信ミドルウェア実行部106において実行されるプログラムは、新通信プロトコルを用いるものであって、図19に示した新通信ミドルウェア1908に相当し、第2通信ミドルウェア実行部106は第1通信ミドルウェア実行部104とは異なる通信プロトコル処理を実行する。
【００２７】
プロトコルスタック107は、プロトコル処理を行うプログラム群（例えば、ＴＣＰ、ＵＤＰ（User Datagram Protocol）、ＩＰ等）である。プロトコルスタック107は、第1通信ミドルウェア実行部104および第2通信ミドルウェア実行部106との間で、ソケットI/Fを介して送受信情報を受け渡すことができる。
【００２８】
仮想通信I/F108は、通信I/F機能をソフトウェアで模擬した仮想的な通信I/Fであり、OS（Operating System）からは通常の通信I/F（通信I/F109等）と等価に扱われる。ただし、通常の通信I/Fが特定の通信用ハードウェア（例えば、Ethernetコントローラチップなど）と関連づけられて、そのハードウェアと送受信パケットの受け渡しを行うのに対し、仮想通信I/F108は特定のプログラムと関連づけられ、そのプログラムと送受信パケットの受け渡しを行う。本実施例では、仮想通信I/F108は、カプセル化処理部105と関連づけられ、プロトコルスタック107から渡された送信パケット（Ethernetフレーム）をカプセル化処理105に渡す。また、カプセル化処理部105から渡されたデータを受信パケット（Ethernetフレーム）とみなしてプロトコルスタック107に渡す。
【００２９】
通信I/F109は、カプセル化処理部105から渡された送信パケット（Ethernetフレーム）に対し、チェックサム計算など送信に必要な処理を行い、関連づけられているハードウェア経由でネットワーク102に送信する。また、ネットワーク102から受信したパケット（Ethernetフレーム）をカプセル化処理部105に渡す。
【００３０】
なお、前述したように、仮想通信I/F108および通信I/F109はOSから見たら等価に扱われるが、本実施例ではIPアドレスを仮想通信I/F108のみに割り当て、通信I/F109にはIPアドレスを割り当てない。これにより、プロトコルスタック107からは唯一の通信I/Fとして仮想通信I/F108だけが認識されるようになり、通信I/F109は、ネットワーク102とカプセル化処理部105との間でEthernetフレームを転送する機能だけを提供するようになる。
【００３１】
プロトコル管理テーブル110、通信情報対応テーブル112は、カプセル化処理部105で参照される情報である。詳細については後段にて説明する。
（カプセル化処理部の詳細）
次に、カプセル化処理部105の詳細構成について図2を用いて説明する。
【００３２】
カプセル化処理部105は、RAW受信部201、ミドル受信部202、カプセル化判定部203、RAW送信部204、ミドル送信部205から構成されている。
【００３３】
RAW受信部201は、ネットワーク102経由で通信I/F109に到着した受信パケット（Ethernetフレーム）を通信I/F109からRAW受信で受け取り、そのEthernetフレームをそのまま仮想通信I/F108に渡す処理を行う。ＲＡＷ受信部２０１の処理の詳細は図１０に示す。
【００３４】
ミドル受信部202は、第2通信ミドルウェア実行部から渡されたアプリケーションデータ（デカプセル化されたEthernetフレーム）を、そのまま仮想通信I/F108に渡す処理を行う。ミドル受信部２０２の処理の詳細は図１１に示す。
【００３５】
カプセル化判定部２０３は、仮想通信I/F１０８から受信したパケットをチェックして、カプセル化すべきパケットである場合には、ミドル送信部２０５に渡し、カプセル化不要なパケットである場合にはＲＡＷ送信部２０４に渡す。カプセル化判定部２０３の処理の詳細は、図１２に示す。
【００３６】
ミドル送信部２０５はカプセル化判定部２０３から受け取ったパケットに後述のヘッダを付与して第2通信ミドルウエア実行部１０６に渡す。ミドル送信部２０５の処理の詳細は図１４に示す。
【００３７】
ＲＡＷ送信部２０４はカプセル化判定部２０３から受け取ったパケットを通信Ｉ／Ｆ１０９に渡す。ＲＡＷ送信部２０４の処理の詳細は図１３に示す。
（通信装置のハードウェア構成）
次に、通信装置101のハードウェア構成について、図3を用いて説明する（適宜、図１参照）。
【００３８】
通信装置101は、各種処理を行うホストＣＰＵ（Central Processing Unit）301、ホストメモリ302、周辺Ｉ／Ｆ303、記憶装置304、通信Ｉ／Ｆ305、およびバス307から構成される。そして、ホストＣＰＵ301、ホストメモリ302、周辺Ｉ／Ｆ310、記憶装置304、および通信Ｉ／Ｆ305は、バス307を介して通信可能に接続されている。
【００３９】
ホストＣＰＵ301は、プログラムを実行するプロセッサである。
【００４０】
ホストメモリ302は、ホストＣＰＵ301がプログラムを実行する際に、ワーキングメモリおよび入出力データの一時バッファとして用いられる。
【００４１】
周辺Ｉ／Ｆ303は、マウス、キーボード、モニタ等の入出力装置や、ＵＳＢ（Universal Serial Bus）メモリ等の外部ストレージ等の各種周辺機器、と接続するためのインタフェースである。
【００４２】
記憶装置304は、磁気ディスク装置、フラッシュＲＯＭ（Read Only Memory）等から構成され、ＯＳ、各種ドライバ、各種アプリケーションプログラムや、プログラムで使用される各種情報（例えば、管理者または保守者によって設定される情報等）を格納している。
【００４３】
通信Ｉ／Ｆ305は、通信装置101がネットワーク102を介して他の通信装置101と通信を行う際のインタフェースを提供する。通信Ｉ／Ｆ305は、例えば、ＮＩＣ（Network Interface Card）であっても良い。
【００４４】
なお、図3では、通信Ｉ／Ｆ305は、１つしか記載していないが、２つ以上であっても構わない。
【００４５】
図１に示した通信アプリケーション実行部１０３、第１通信ミドルウェア実行部１０４、カプセル化処理部１０５、第２通信ミドルウェア実行部１０６、プロトコルスタック１０７、仮想通信Ｉ／Ｆ１０８、通信Ｉ／Ｆ１０９は各々、記憶装置３０４に格納されたプログラムがホストメモリ３０２に読み込まれてホストＣＰＵ３０１によって実行されることにより、構成される機能要素である。尚、図１に示した通信Ｉ／Ｆ１０９の機能は図３に示す通信Ｉ／Ｆ３０５上に実装される。また、図１に示したプロトコル管理テーブル１１０、通信情報対象テーブル１１２は記憶装置３０４に格納されている。
（プロトコル管理テーブル）
プロトコル管理テーブル110に格納される情報について、図4を用いて説明する（適宜、図１参照）。
【００４６】
プロトコル管理テーブル110は、パケットを送信する際の、パケット種別410、ＩＰアドレス401、ポート番号402、プロトコル403を格納している。プロトコル管理テーブル110は、カプセル化判定部203が仮想通信I/F108から送信パケットを受け取ったときに、その送信パケットをカプセル化すべきか否か判断する際に用いられる。なお、本テーブルの情報は、通信装置101の管理者または保守者等によって予め設定されてもよいし、各装置と個別にプロトコル情報をやりとりするプログラムによって設定されてもよいし、全装置のプロトコル情報をまとめて管理しているサーバに問い合わせて設定してもよい。
【００４７】
パケット種別410の列はパケットの種別を格納している領域であり、パケット種別の例としては、ＩＰパケットであることを示すＩＰ、ＡＲＰ（Address Resolution Protocol）パケットであることを示すＡＲＰ等がある。
【００４８】
ＩＰアドレス401の列は、パケットの送信先の通信装置101を識別するＩＰアドレスを格納している領域である。
【００４９】
ポート番号402の列は、パケットの宛先ポート番号を格納している領域である。ポート番号は一般に、通信サービス(ＦＴＰ（File Transfer Protocol）、ＨＴＴＰ（HyperText Transfer Protocol）等)を識別するのに用いられ、送信先が同じ通信装置101であっても、異なるポート番号を用いることによって、通信サービスの種別を変更することができる。本実施形態では、ポート番号はパケットの宛先通信ミドルウェアを特定するのに用いられる。
【００５０】
プロトコル403の列は、当該パケットに施す処理の種類を示す情報を格納している領域である。プロトコル名が指定されている場合（プロトコルＡ、プロトコルＢ等）は当該プロトコルを用いたパケットのカプセル化が必要であることを意味し、「RAW送信」が指定されている場合にはパケットをそのまま送信することを意味している。
【００５１】
図4において、例えば、行404は、ＩＰパケットを用いて、ＩＰアドレスが１９２．１６８．０．１の通信装置と、ポート番号８０番で指定される当該通信装置の通信ミドルウェアで通信を行う場合、カプセル化を行わずにそのままパケットを送信（RAW送信）することを表している。他方行405は、ＩＰパケットを用いて、ＩＰアドレスが１９２．１６８．０．１の通信装置（即ち同じ通信装置）と、ポート番号２３番で指定される当該通信装置の通信ミドルウェアで通信を行う場合、プロトコルＡを用いたパケットのカプセル化が必要であることを表している。また行４０８は、ＡＲＰパケットはそのアドレスに関わらずカプセル化を行わずそのまま送信することを表している。
【００５２】
なお、図4では、プロトコル403には、３種類のプロトコル（RAW送信、プロトコルA、プロトコルB）を記載しているが、１種類であっても、３種類以上であっても構わない。また、ポート番号402に記載されている＊印は、任意のポート番号で構わないことを表している。
（通信情報対応テーブル）
次に、通信情報対応テーブル112に格納される情報について、図6を用いて説明する。
【００５３】
通信情報対応テーブル112は、第1通信ミドルウェアの通信情報601と、第2通信ミドルウェアの通信情報602を格納している。そして、通信情報対応テーブル112は、ミドル送信部205がカプセル化判定部203から送信パケットを受け取ったときに、送信パケットに含まれる送信先通信装置の第1通信ミドルウェアの通信情報から、それに対応する送信先通信装置の第2通信ミドルウェアの通信情報を取得するために用いられる。
【００５４】
図6において、例えば行603では、送信パケットに含まれる第1通信ミドルウェアの通信情報が、IPアドレスがIP_A、ポート番号がB、サービスＩＤがCの場合、第2通信ミドルウェアを用いて送信するために必要な第2通信ミドルウェアの通信情報が、IPアドレスがIP_Ａ、ポート番号がb、サービスＩＤがcであることを表している。ここで、ＩＰアドレスは送信先通信装置の仮想通信Ｉ／Ｆに割り当てられているアドレスであるから、第1通信ミドルウェアでも第2通信ミドルウェアでも同じ値となるが、ポート番号は通信ミドルウェアを一意に特定するのに用いられるため、異なる値となる。またサービスＩＤは、送信先の通信ミドルウェアが送信パケットをどこに引き渡すかを示すＩＤであり、本実施形態の場合にはポート番号が第1通信ミドルウェアを示している場合にはサービスＩＤは通信アプリケーション実行部を、ポート番号が第2通信ミドルウェアを示している場合にはサービスＩＤはカプセル化処理部を示す。しかしながら必ずしもこれに限られるものではい。例えば第2通信ミドルウェアがカプセル化処理部を介さずに通信アプリケーション実行部と通信する場合には、ポート番号が第2通信ミドルウェアを示している場合にサービスＩＤは当該通信アプリケーション実行部を示す。
【００５５】
なお、ここでは通信情報の例としてIPアドレスやポート番号を挙げているが、これに限るものではなく、第1通信ミドルウェアと第2通信ミドルウェアの対応が分かる情報であれば良い。
（新装置から新装置へのデータ送信時のカプセル化通信処理シーケンス）
次に、新システムに移行後の通信装置A101aから新システムに移行後の通信装置B101bにデータを送信する際のカプセル化通信処理シーケンスを、図５と図7を用いて説明する。ここで、通信装置Ａ101aおよび通信装置B101bは共に第1通信ミドルウェア実行部104及び第2通信ミドルウェア実行部106を有している。
【００５６】
まず、通信装置A101aの通信アプリケーション実行部103aが、第1通信ミドルウェア実行部104aにアプリケーションデータ５０１を渡す。この際、通信アプリケーション実行部103aは、送信先の第1通信ミドルウェア実行部104bを指定するための情報（通信装置Ｂ101bのＩＰアドレス、第1通信ミドルウェア実行部104bのポート番号を含む、図６の第一ミドルの通信情報601に相当する情報）を一緒に第1通信ミドルウェア実行部104aに渡す。
【００５７】
次に、第1通信ミドルウェア実行部104aは、受け取った送信先の第1通信ミドルウェア実行部104ｂを指定するための情報を第1ヘッダとして受け取ったアプリケーションデータ５０１に付与し、これをアプリケーションデータ５０２としてプロトコルスタック107aに渡す。この際、第1通信ミドルウェア実行部１０４aは通信装置Ｂ101bのＩＰアドレスと第1通信ミドルウェア実行部104bのポート番号をプロトコルスタックに指定する。
【００５８】
次に、プロトコルスタック107aは、受け取った通信装置Ｂ101ｂのＩＰアドレスをＩＰヘッダ(第１ＩＰヘッダ)として、ポート番号をＴＣＰヘッダ（第1ＴＣＰヘッダ）として受け取ったアプリケーションデータ５０２に付与し、さらにパケットの送信先ＭＡＣアドレス（第1ＭＡＣ）も付与して送信用のパケット(Ethernetフレーム)５０３を生成する。この送信用パケット５０３をプロトコルスタック107aは仮想通信I/F108aに渡す。
【００５９】
次に、仮想通信I/F108aは、受け取った送信用のパケット５０３をそのままカプセル化処理部105aに渡す。
【００６０】
次に、カプセル化処理部105aは、送信パケット５０３のＩＰヘッダ（第1ＩＰヘッダ）及びＴＣＰヘッダ（第1ＴＣＰヘッダ）に含まれる宛先情報（通信装置Ｂ101bのＩＰアドレスおよび第1通信ミドルウェア実行部104bを指定するポート番号）を用いてプロトコル管理テーブル１１０を参照し、当該送信パケットに対してカプセル化を行うか否かを判断する。
【００６１】
通信相手が第2通信ミドルウェア実行部106を有する（即ち新通信ミドルウェアを有する）通信装置であって、送信パケットの宛先ポート番号が第1通信ミドルウェアを示す場合、プロトコル管理テーブル１１０のプロトコル欄４０３には当該送信パケットをカプセル化するためのプロトコルが指定されている。従って、カプセル化処理部105aはカプセル化を行うと判断し、第2通信ミドルウェア実行部106aに仮想通信Ｉ／Ｆ１０８aから受信した送信用パケット５０３をアプリケーションデータ５０３として渡す。この際カプセル化処理部105aは、通信情報対応テーブル１１２を参照して送信先の第２通信ミドルウェア実行部106bを指定するための情報（通信装置Ｂ101bのＩＰアドレス、第2通信ミドルウェア実行部106bのポート番号を含む、図６の第2ミドルの通信情報602に相当する情報）を取得し、これを一緒に第2通信ミドルウェア実行部106aに渡す。
【００６２】
次に、第2通信ミドルウェア実行部106aは、受け取った送信先の第２通信ミドルウェア実行部106ｂを指定するための情報を第２ヘッダとして受け取ったアプリケーションデータ５０３に付与し、これをアプリケーションデータ５０４としてプロトコルスタック107aに渡す。この際、第２通信ミドルウェア実行部１０６aは通信装置Ｂ101bのＩＰアドレスと第２通信ミドルウェア実行部106bのポート番号をプロトコルスタックに指定する。
【００６３】
次に、プロトコルスタック107aは、受け取った通信装置Ｂ101ｂのＩＰアドレスをＩＰヘッダ（第２ＩＰヘッダ）として、ポート番号をＴＣＰヘッダ（第2ＴＣＰヘッダ）として受け取ったアプリケーションデータ５０４に付与し、さらにパケットの送信先ＭＡＣアドレス（第2ＭＡＣ）も付与して送信用のパケット(カプセル化済み)５０５を生成し、仮想通信I/F108aに生成したパケットを渡す。尚、ここでプロトコルスタック107aがアプリケーションデータ５０４にＩＰヘッダ（第２ＩＰヘッダ）として付与したＩＰアドレスは、送信先通信装置Ｂ１０１bの仮想通信I/Fに割り当てられたＩＰアドレスであり、先にプロトコルスタック107aがアプリケーションデータ５０２にＩＰヘッダ（第1ＩＰヘッダ）として付与したＩＰアドレスと同じものである。
【００６４】
次に、仮想通信I/F108aは、送信用のパケット505をそのままカプセル化処理部105aに渡す。
【００６５】
次に、カプセル化処理部105aは、受け取った送信用パケット５０５のＩＰヘッダ（第２ＩＰヘッダ）及びＴＣＰヘッダ（第２ＴＣＰヘッダ）に含まれる宛先情報（通信装置Ｂ101bのＩＰアドレスおよび第２通信ミドルウェア実行部106bを指定するポート番号）を用いてプロトコル管理テーブル１１０を参照し、当該送信パケット５０５に対してカプセル化を行うか否かを判断する。
【００６６】
通信相手が第2通信ミドルウェア実行部106を有する（即ち新通信ミドルウェアを有する）通信装置であって、ＴＣＰヘッダに格納された宛先ポート番号が第２通信ミドルウェアを示す場合、プロトコル管理テーブル１１０のプロトコル欄４０３には当該送信パケットをカプセルせずにそのまま送信するよう指定されている。従って、カプセル化処理部105aはカプセル化不要と判断し、送信用パケット５０５をそのまま通信I/F109aに渡す。
【００６７】
次に、通信I/F109aは、送信用パケット５０５をネットワーク経由で通信装置B101bの通信I/F109bに送信する。
【００６８】
次に、通信装置B101bの通信I/F109bは、ネットワークからパケット５０５を受信し、その受信パケットをそのままカプセル化処理部105bに渡す。
【００６９】
次に、カプセル化処理部105bは、受信パケット５０５をそのまま仮想通信I/F108bに渡す。
【００７０】
次に、仮想通信I/F108bは、受信パケット５０５をプロトコルスタック107bに渡す。
【００７１】
次に、プロトコルスタック107bは、受信パケット５０５に対してプロトコル処理を行い、受信パケット５０５のアプリケーションデータ部分５０４を取り出す。そして、受信パケット５０５のＴＣＰヘッダ（第2ＴＣＰヘッダ）による指定に従って、取り出したアプリケーションデータ部分５０４を第2通信ミドルウェア実行部106bに渡す。
【００７２】
次に、第2通信ミドルウェア実行部106bは、受け取ったアプリケーションデータ５０４から第2ヘッダを外して、残りの部分５０３をカプセル化処理部105bに渡す。
【００７３】
次に、カプセル化処理部105bは、受け取ったパケット５０３を仮想通信I/F108bに渡す。
【００７４】
次に、仮想通信I/F108bは、受け取ったパケット５０３をプロトコルスタック107bに渡す。
【００７５】
次に、プロトコルスタック107bは、受け取ったパケット５０３に対しプロトコル処理を行い、パケット５０３のアプリケーションデータ部分５０２を取り出して、これをパケット５０３のＴＣＰヘッダ（第1ＴＣＰヘッダ）に従って第1通信ミドルウェア実行部104bに渡す。
【００７６】
次に、第1通信ミドルウェア実行部104bは、受け取ったアプリケーションデータ５０２から第１ヘッダを外して、通信アプリケーション実行部103bに渡す。
（新装置から旧装置へのデータ送信時の非カプセル化通信処理シーケンス）
次に、新システムに移行後の通信装置C101cから、旧システムの通信装置D801dにデータを送信する際の非カプセル化通信処理シーケンスを、図５と図8を用いて説明する。ここで、通信装置Ｃ101cは第1通信ミドルウェア実行部104及び第2通信ミドルウェア実行部106を有しており、通信装置Ｄ101dは第1通信ミドルウェア実行部104は有するが第2通信ミドルウェア実行部106は有していない。
【００７７】
まず、通信装置C101cの通信アプリケーション実行部103cが、第1通信ミドルウェア実行部104cにアプリケーションデータ５０１を渡す。この際、通信アプリケーション実行部103cは、送信先の第1通信ミドルウェア実行部104dを指定するための情報（通信装置D101dのＩＰアドレス、第1通信ミドルウェア実行部104dのポート番号を含む、図６の第一ミドルの通信情報601に相当する情報）を一緒に第1通信ミドルウェア実行部104cに渡す。
【００７８】
次に、第1通信ミドルウェア実行部104cは、受け取った送信先の第1通信ミドルウェア実行部104dを指定するための情報を第1ヘッダとして受け取ったアプリケーションデータ５０１に付与し、これをアプリケーションデータ５０２としてプロトコルスタック107cに渡す。この際、第1通信ミドルウェア実行部１０４cは通信装置D101dのＩＰアドレスと第1通信ミドルウェア実行部104dのポート番号をプロトコルスタックに指定する。
【００７９】
次に、プロトコルスタック107cは、受け取った通信装置D101dのＩＰアドレスをＩＰヘッダ(第１ＩＰヘッダ)として、ポート番号をＴＣＰヘッダ（第1ＴＣＰヘッダ）として受け取ったアプリケーションデータ５０２に付与し、さらにパケットの送信先ＭＡＣアドレス（第1ＭＡＣ）も付与して送信用のパケット(Ethernetフレーム)５０３を生成し、仮想通信I/F108cに生成したパケットを渡す。
【００８０】
次に、仮想通信I/F108cは、送信用のパケット５０３をそのままカプセル化処理部105cに渡す。  次に、カプセル化処理部105cは、送信パケット５０３のＩＰヘッダ（第1ＩＰヘッダ）及びＴＣＰヘッダ（第1ＴＣＰヘッダ）に含まれる宛先情報（通信装置Ｄ101dのＩＰアドレスおよび第1通信ミドルウェア実行部104dを指定するポート番号）を用いてプロトコル管理テーブル１１０を参照し、当該送信パケットに対してカプセル化を行うか否かを判断する。通信相手が第２通信ミドルウェア実行部１０６を有していない通信装置である場合、プロトコル管理テーブル１１０のプロトコル欄４０３には、当該送信パケットをカプセル化せずそのまま送信（ＲＡＷ送信）するよう指定されている。従って、カプセル化処理部105cはカプセル化処理を行わないと判断し、送信用パケット５０３をそのまま通信I/F109cに渡す。  次に、通信I/F109cは、送信用パケット５０３をネットワーク経由で通信装置D801dの通信I/F109dに送信する。
【００８１】
次に、通信装置D801dの通信I/F109dは、ネットワークからパケット５０３を受信し、その受信パケットをプロトコルスタック107dに渡す。
【００８２】
次に、プロトコルスタック107dは、受け取ったパケットに対しプロトコル処理を行い、パケットのアプリケーションデータ５０２部分を取り出して、このアプリケーションデータ５０２をパケット５０３のＴＣＰヘッダ（第1ＴＣＰヘッダ）の指定に従って第1通信ミドルウェア実行部104dに渡す。
【００８３】
次に、第1通信ミドルウェア実行部104dは、受け取ったアプリケーションデータ５０２から第１ヘッダを外して、残りの部分５０１を通信アプリケーション実行部103dに渡す。
（旧装置から新装置へのデータ送信時の非カプセル化通信処理シーケンス）
次に、旧システムの通信装置E801eから、新システムに移行後の通信装置F101fにデータを送信する際の非カプセル化通信処理シーケンスを、図５と図9を用いて説明する。ここで、通信装置Ｅ101eは第1通信ミドルウェア実行部104は有するが第2通信ミドルウェア実行部106は有しておらず、通信装置Ｆ101fは第1通信ミドルウェア実行部104及び第2通信ミドルウェア実行部106を有する通信装置である。
【００８４】
まず、通信装置E801eの通信アプリケーション実行部103eが、第1通信ミドルウェア実行部104eにアプリケーションデータ５０１を渡す。この際、通信アプリケーション実行部103eは、送信先の第1通信ミドルウェア実行部104fを指定するための情報（通信装置F101fのＩＰアドレス、第1通信ミドルウェア実行部104fのポート番号を含む、図６の第一ミドルの通信情報601に相当する情報）を一緒に第1通信ミドルウェア実行部104fに渡す。
【００８５】
次に、第1通信ミドルウェア実行部104eは、受け取った送信先の第1通信ミドルウェア実行部104fを指定するための情報を第1ヘッダとして受け取ったアプリケーションデータ５０１に付与し、これをアプリケーションデータ５０２としてプロトコルスタック107eに渡す。この際、第1通信ミドルウェア実行部１０４eは通信装置F101fのＩＰアドレスと第1通信ミドルウェア実行部104fのポート番号をプロトコルスタックに指定する。
【００８６】
次に、プロトコルスタック107eは、受け取った通信装置F101fのＩＰアドレスをＩＰヘッダ(第１ＩＰヘッダ)として、ポート番号をＴＣＰヘッダ（第1ＴＣＰヘッダ）として受け取ったアプリケーションデータ５０２に付与し、さらにパケットの送信先ＭＡＣアドレス（第1ＭＡＣ）も付与して送信用のパケット(Ethernetフレーム)５０３を生成し、通信I/F109eに生成したパケット５０３を渡す。
【００８７】
次に、通信I/F109eは、送信用パケット５０３をネットワーク経由で通信装置F101fの通信I/F109fに送信する。
【００８８】
次に、通信装置F801fの通信I/F109fは、ネットワークからパケット５０３を受信し、その受信パケットをそのままカプセル化処理部105fに渡す。  次に、カプセル化処理部105fは、受信パケット５０３をそのまま仮想通信I/F108fに渡す。
【００８９】
次に、仮想通信I/F108fは、受信パケット５０３をプロトコルスタック107fに渡す。
【００９０】
次に、プロトコルスタック107fは、受信パケット５０３に対してプロトコル処理を行い、受信パケットのアプリケーションデータ部分５０２を取り出して、受信パケット５０３の第1ＴＣＰヘッダの指定に従ってこのアプリケーションデータ部分５０２を第1通信ミドルウェア実行部104fに渡す。
【００９１】
次に、第1通信ミドルウェア実行部104fは、受け取ったアプリケーションデータ５０２から第１ヘッダを外して、残りの部分５０１を通信アプリケーション実行部103fに渡す。
【００９２】
図７から図９に示すパケットの送受信処理においては、受信側通信装置及び送信側通信装置が第2通信ミドルウェア実行部106を有する新システムへの移行後の通信装置であるか否かに関わらず、ＩＰヘッダには仮想通信I/Fに割り当てられたＩＰアドレスが用いられている。即ち、本実施形態においては、新システムへの移行に伴いＩＰアドレスを変更する必要はなく、従前のＩＰアドレスを使い続けてもパケットの送受信が可能であることが分かる。
（第1の実施形態におけるRAW受信部のフローチャート）
次に、第1の実施形態において、カプセル化処理部105内のRAW受信部201が実行する、パケット受信時の処理フローを、図10を用いて説明する。
【００９３】
ステップ1001でＲＡＷ受信部２０１は、通信I/F109から受信パケット（Ethernetフレーム）をRAW受信（そのまま受信）する。
【００９４】
ステップ1002でＲＡＷ受信部２０１は、受信したパケット（Ethernetフレーム）を仮想通信I/F108に渡す。本処理終了後、ステップ1001に戻る。
（第1の実施形態におけるミドル受信部のフローチャート）
次に、第1の実施形態において、カプセル化処理部105内のミドル受信部202が実行する、パケット受信時の処理フローを、図11を用いて説明する。
【００９５】
ステップ1101でミドル受信部２０２は、第2通信ミドルウェア実行部106からアプリケーションデータ（即ちデカプセル化後のEthernetフレーム）を受信する。
【００９６】
ステップ1102でミドル受信部２０２は、受信したEthernetフレームの宛先MACアドレスをチェックする。もし宛先がユニキャストアドレスであれば、ステップ1104へ進む。ユニキャストアドレスでなければ、ステップ1105へ進む。
【００９７】
ステップ1104でミドル受信部２０２は、Ethernetフレームの宛先MACアドレスを自身の仮想通信I/F108のMACアドレスに書換える。
【００９８】
ステップ1105でミドル受信部２０２は、Ethernetフレームを仮想通信I/F108に渡す。本処理終了後、ステップ1101に戻る。
（第1の実施形態におけるカプセル化判定部のフローチャート）
次に、第1の実施形態において、カプセル化処理部105内のカプセル化判定部203が実行する、パケット送信時の処理フローを、図12を用いて説明する。
【００９９】
ステップ1201でカプセル化判定部２０３は、仮想通信I/F108から送信パケット（Ethernetフレーム）を取得する。
【０１００】
ステップ1202でカプセル化判定部２０３は、取得したEthernetフレームをカプセルすべきか否か判断する。この判定は、受信したEthernetフレームのＩＰヘッダ及びＴＣＰヘッダに指定された宛先情報を用いてプロトコル管理テーブル１１０を参照することにより、行われる。
【０１０１】
もしカプセル化不要のEthernetフレームであれば、ステップ1204へ進む。カプセル化が必要なEthernetフレームであれば、ステップ1207へ進む。
【０１０２】
ステップ1204でカプセル化判定部２０３は、RAW送信部204にEthernetフレームを渡す。本処理終了後、ステップ1201に戻る。
【０１０３】
ステップ1207でカプセル化判定部２０３は、ミドル送信部205にEthernetフレームを渡す。この際でカプセル化判定部２０３は、送信先の第２通信ミドルウェア実行部を指定するための情報（送信先通信装置のＩＰアドレス、第2通信ミドルウェア実行部106のポート番号を含む、図６の第2ミドルの通信情報602に相当する情報）を一緒にミドル送信部２０５に渡す。本処理終了後、ステップ1201に戻る。
（第1の実施形態におけるRAW送信部のフローチャート）
次に、第1の実施形態において、カプセル化処理部105内のRAW送信部204が実行する、パケット送信時の処理フローを、図13を用いて説明する。
【０１０４】
ステップ1301でＲＡＷ送信部２０４は、カプセル化判定部105からEthernetフレームを取得する。
【０１０５】
ステップ1302でＲＡＷ送信部２０４は、通信I/F109を用いて、取得したEthernetフレームをRAW送信（そのまま送信）する。本処理終了後、ステップ1301に戻る。
（第1の実施形態におけるミドル送信部のフローチャート）
次に、第1の実施形態において、カプセル化処理部105内のミドル送信部205が実行する、パケット送信時の処理フローを、図14を用いて説明する。
【０１０６】
ステップ1401でミドル送信部は、カプセル化判定部からEthernetフレームを取得する。
【０１０７】
ステップ1402でミドル送信部は、EthernetフレームのＩＰヘッダおよびＴＣＩＰヘッダに含まれるアドレス情報（送信先通信装置のＩＰアドレスおよび当該通信装置の第1通信ミドルウェアを識別するポート番号）を取得する。
【０１０８】
ステップ1403でミドル送信部は、取得した送信先通信装置のＩＰアドレスおよび第1通信ミドルウェアを識別するポート番号から、通信情報対応テーブル112を参照し、送信先通信装置の第2通信ミドルウェアに向けてＥｔｈｅｒｎｅｔフレームを送信するために必要な、送信先通信装置のＩＰアドレスおよび当該通信装置の第2通信ミドルウェアを識別するポート番号を取得する。
【０１０９】
ステップ1404でミドル送信部は、第2通信ミドルウェア実行部に対し、ステップ1403で取得した送信先通信装置のＩＰアドレスおよび当該通信装置の第2通信ミドルウェアのポート番号を引き渡し、ステップ１４０１で受信したEthernetフレームをひとまとまりのアプリケーションデータと見なして送信するよう指示を出す。本ステップ終了後、ステップ1401に戻る。
【実施例２】
【０１１０】
＜第２実施形態＞
第２実施形態では、カプセル化対象のパケットとして、OSIモデルで言うところのレイヤ３であるIPデータグラム（以下、IPパケット）を想定した例について説明する。なお、第2実施形態の通信装置101のシステム構成は、第1実施形態のシステム構成（図1および図2）と同じであるため、説明は省略する。
【０１１１】
以下、第1実施形態と機能が異なる、仮想通信I/F108、RAW受信部201、ミドル受信部202、カプセル化判定部203、RAW送信部204、ミドル送信部205について、説明する。
【０１１２】
第2実施形態の仮想通信I/F108は、カプセル化対象がIPパケットであるため、カプセル化処理部105と、Ethernetフレームではなく、IPパケットのやりとりを行う。
（第2の実施形態におけるRAW受信部のフローチャート）
次に、第2の実施形態において、カプセル化処理部105内のRAW受信部201の、パケット受信時の処理フローを、図15を用いて説明する。
【０１１３】
ステップ1501でＲＡＷ受信部２０１は、通信I/F109からEthernetフレームをRAW受信する。
【０１１４】
ステップ1502でＲＡＷ受信部２０１は、受信したEthernetフレームの宛先MACアドレスをチェックし、正しいEthernetフレームかをチェックする。
【０１１５】
ステップ1503でＲＡＷ受信部２０１は、受信したEthernetフレームからIPパケットを抽出する。
【０１１６】
ステップ1504でＲＡＷ受信部２０１は、抽出したIPパケットを仮想通信I/F108に渡す。
（第2の実施形態におけるミドル受信部のフローチャート）
次に、第2の実施形態において、カプセル化処理部105内のミドル受信部202の、パケット受信時の処理フローを、図16を用いて説明する。
【０１１７】
ステップ1601でミドル受信部２０２は、第2通信ミドルウェア実行部からアプリケーションデータ（＝カプセル化前のIPパケット）を受信する。
【０１１８】
ステップ1602でミドル受信部２０２は、受信したIPパケットを仮想通信I/F109に渡す。
（第2の実施形態におけるカプセル化判定部のフローチャート）
第2の実施形態における、カプセル化処理部105内のカプセル化判定部203の、パケット送信時の処理フローについては、図12のEthernetフレームをIPパケットに読み替えれば同様の処理フローとなるため、説明を省略する。
（第2の実施形態におけるRAW送信部のフローチャート）
次に、第2の実施形態における、カプセル化処理部105内のRAW送信部204の、パケット送信時の処理フローを、図17を用いて説明する。
【０１１９】
ステップ1701でＲＡＷ送信部２０４は、カプセル化判定部からIPパケットを取得する。
【０１２０】
ステップ1702でＲＡＷ送信部２０４は、Ethernetフレームを作成する。このとき送信元MACアドレスには自身の仮想通信I/F108のMACアドレスを使用する。また、宛先MACアドレスは、宛先IPアドレスから、プロトコルスタックと同様にARP処理によって取得しても良いし、ARPテーブル相当のテーブルを独自に管理しておき、それを参照してもよい。
【０１２１】
ステップ1703でＲＡＷ送信部２０４は、通信I/Fを用いて、ステップ1702で作成したEthernetフレームをRAW送信する。本処理が終了すると、ステップ1701に戻る。
（第2の実施形態におけるミドル送信部のフローチャート）
第2の実施形態における、カプセル化処理部105内のミドル送信部205の、パケット送信時の処理フローについては、図14のEthernetフレームをIPパケットに読み替えれば同様の処理フローとなるため、説明を省略する。
【実施例３】
【０１２２】
＜第３実施形態＞
図18を用いて、二重化通信を行う例を説明する。
【０１２３】
図18に示す通信装置101は、第2通信ミドルウェア実行部106が2重化通信機能を提供するケースを示している。なお、図18に示す各機能ブロックは、それぞれ図1に示す各機能ブロックと同様の構成を有しているため、同じ符号を付している。
【０１２４】
図18において、通信装置101は、異なるネットワークアドレス体系のネットワークA(例えば、192.168.1.*)およびネットワークB（例えば、10.232.10.*）に接続されている。そして、仮想通信I/F108AにはネットワークAに所属するIPアドレス（例えば、192.168.0.1）が割り当てられており、仮想通信I/F108BにはネットワークBに属するIPアドレス（例えば、10.232.10.1）が割り当てられている。
【０１２５】
2重か通信機能を有する通信装置同士がパケットを送受信する際に実行する処理の中で、第1実施形態とは異なる処理を以下に説明する。その他の処理については第1実施形態と同様である。
【０１２６】
第1通信ミドルウェア実行部１０４はアプリケーション実行部１０３から受信したアプリケーションデータ５０１に第１ヘッダを付与する。第1ヘッダには、通信相手の通信装置の２つの仮想通信Ｉ／Ｆに割当られた２つのＩＰアドレスのうち、任意の一方のＩＰアドレスと、通信相手の通信装置の第1通信ミドルウェアを識別するポート番号が含まれる。
【０１２７】
こうして作成されたアプリケーションデータ５０２を第１通信ミドルウェア実行部１０４はプロトコルスタック１０７へ引き渡す。このとき、第1ヘッダに付与したＩＰアドレスとポート番号を第1通信ミドルウェア実行部１０４は指定する。
【０１２８】
プロトコルスタックは、指定されたＩＰアドレスを第1ＩＰヘッダに、指定されたポート番号を第1ＴＣＰヘッダに有し、更に第1ＭＡＣアドレスが付与された送信パケット５０３を作成しこれをいずれか一方の仮想通信Ｉ／Ｆを介してカプセル化処理部１０５に渡す。
【０１２９】
カプセル化処理部１０５では実施例１と同様プロトコル管理テーブルを用いてカプセル化の要否が判断される。この場合、カプセル化要と判断されるので、カプセル化処理部１０５は送信パケット５０３を第2通信ミドルウェア実行部１０６に引き渡す。この際、カプセル化処理部１０５は、通信相手の通信装置に割り当てられた２つのＩＰアドレスと当該通信装置の第2通信ミドルウェアの識別情報（ポート番号）も一緒に第2通信ミドルウェア実行部１０６に通知する。
【０１３０】
第2通信ミドルウェア実行部106は、カプセル化処理部105から送信用のアプリケーションデータ（＝カプセル化前の送信パケット）５０３を受信すると、これを複製する。そして、通信相手の通信装置のIPアドレスと当該通信装置の第2通信ミドルウェア実行部１０６のポート番号とを有する第2ヘッダを、オリジナルのアプリケーションデータ５０３とその複製各々に付与することによって、カプセル化する。この際、オリジナルのアプリケーションデータ５０３に付与される第2ヘッダと複製に付与される第2ヘッダに含まれているＩＰアドレスは、同じ通信装置に割り当てられている異なるＩＰアドレス（すなわち、通信相手の通信装置の２つの仮想通信Ｉ／Ｆに割り当てられている異なるＩＰアドレス）である。
【０１３１】
そして、第2通信ミドルウェア実行部１０６は、各々異なるＩＰアドレスを第2ヘッダに有する２つのパケット５０４を、プロトコルスタック107に渡す。この際、第2通信ミドルウェア実行部１０６は、各通信パケット５０４の第2ヘッダに格納されたＩＰアドレス及びポート番号を、当該通信パケット５０４の宛先としてプロトコルスタックに通知する。
【０１３２】
パケット５０４にはプロトコルスタック１０７によって第2ＭＡＣ、第2ＩＰヘッダ、第2ＴＣＰヘッダが付与される。ここで第2ＩＰヘッダ及び第2ＴＣＰヘッダに格納されるのは第2通信ミドルウェア実行部１０６から指定されたＩＰアドレス及びポート番号である。こうして作成された２つの通信パケット５０５は、各々異なる仮想通信I/F108Aまたは仮想通信I/F108Bに渡され、更にカプセル化処理部105によって、各々異なる通信I/F109Aまたは通信I/F109Bに渡されて、RAW送信される。そして、2重化送信されたカプセル化パケットは、異なるネットワーク経由で送信先の通信装置101に到着する。
【０１３３】
異なるネットワークから当該2重化されたカプセル化パケットを受信した通信装置101では、カプセル化処理部１０５を介して２つの仮想化通信Ｉ／Ｆ各々が自身のＩＰアドレスを宛先に持つパケット５０５を受信する。このＩＰパケットはプロトコルスタック１０７によってＭＡＣアドレス、第2ＩＰヘッダ、第2ＴＣＰヘッダが外され、第2通信ミドルウェア実行部106がプロトコルスタック107から、2重化されたアプリケーションデータ（＝デカプセル化後の受信パケット）５０４を受け取る。
【０１３４】
第2通信ミドルウェア１０６は、２つの受信パケット５０４各々から第2ヘッダが外し、エラー等の異常の有無を判定する。そして、異常のないアプリケーションデータ（＝デカプセル化後の受信パケット）５０３をカプセル化処理部105に渡す。なお、第2通信ミドルウェア実行部106は、受信した２つのアプリケーションデータ５０３の内異常のないアプリケーションデータのみをカプセル化処理部１０５に引き渡す。２つのアプリケーションデータの双方ともに異常がない場合は、いずれか一方（例えば、後着パケット）を破棄し他方のみをカプセル化処理部１０５に渡す。その後の処理は第1の実施形態と同様である。
【０１３５】
尚、第3実施形態ではデータが2重化されて送受信される例を説明したが、発明はこれに限られるものではなく、3重化以上の多重化がなされる構成であっても構わない。
【０１３６】
また、本実施例では、ネットワークAおよびネットワークBが異なるアドレス体系の場合を例に説明したが、同一アドレス体系のネットワークであってもよく、その場合は仮想通信I/F108Aおよび仮想通信I/F108Bは同一ネットワークに属するIPアドレスが割り当てられる。また、本実施例では、通信I/Fが2つの場合を例に説明したが、3つ以上であってもよい。
【０１３７】
また、第１実施形態、第２実施形態、および第３実施形態において説明した、各通信装置101は、一般的なコンピュータに、前記した各部のプログラムを実行させることで実現することができる。このプログラムは、通信回線を介して提供することが可能であるし、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体に書き込んで配布することも可能である。
【符号の説明】
【０１３８】
101…通信装置
102…ネットワーク
103…通信アプリケーション実行部
104…第1通信ミドルウェア実行部
105…カプセル化処理部
106…第2通信ミドルウェア実行部
107…プロトコルスタック
108…仮想通信I/F
109…通信I/F
110…プロトコル管理テーブル
112…通信情報対応テーブル
201…RAW受信部
202…ミドル受信部
203…カプセル化判定部
204…RAW送信部
205…ミドル送信部
301…ホストCPU
302…ホストメモリ
303…周辺I/F
304…記憶装置
305…通信I/F
306…バス
1901…旧システムの通信装置
1902…通信アプリケーション
1903…旧通信ミドルウェア
1904…プロトコルスタック
1905…通信I/F
1906…新システムの通信装置
1907…新旧ミドル変換部
1908…新通信ミドルウェア
【図１】
2012129897.tif 000003
【図２】
2012129897.tif 000004
【図３】
2012129897.tif 000005
【図４】
2012129897.tif 000006
【図５】
2012129897.tif 000007
【図６】
2012129897.tif 000008
【図７】
2012129897.tif 000009
【図８】
2012129897.tif 000010
【図９】
2012129897.tif 000011
【図１０】
2012129897.tif 000012
【図１１】
2012129897.tif 000013
【図１２】
2012129897.tif 000014
【図１３】
2012129897.tif 000015
【図１４】
2012129897.tif 000016
【図１５】
2012129897.tif 000017
【図１６】
2012129897.tif 000018
【図１７】
2012129897.tif 000019
【図１８】
2012129897.tif 000020
【図１９】
2012129897.tif 000021