第一のNICと、第二のNICと、前記第一のNIC及び前記第二のNICとの間でTCP/IP通信処理を行うTCP/IPプロトコルスタックと、前記第一のNICから受信した受信パケットに付されている送信元IPアドレスを第一仮IPアドレスに変換し、宛先IPアドレスを前記第一のNICに付されている第一のNICIPアドレスに変換して、前記TCP/IPプロトコルスタックに前記受信パケットを送信すると共に、前記TCP/IPプロトコルスタックから受信した送信パケットに付されている送信元IPアドレス、及び宛先IPアドレスを前記受信パケットに付されていた前記送信元IPアドレス、及び前記宛先IPアドレスに書き戻して前記第二のNICに送信するアドレス変換処理部とを具備するネットワークゲートウェイ装置。第一のNICと、第二のNICと、前記第一のNIC及び前記第二のNICとの間でTCP/IP通信処理を行うTCP/IPプロトコルスタックと、前記第一のNICから受信した受信パケットに付されている送信元IPアドレスを第一仮IPアドレスに変換し、宛先IPアドレスを前記第一のNICに付されている第一のNICIPアドレスに変換して、前記TCP/IPプロトコルスタックに前記受信パケットを送信すると共に、前記TCP/IPプロトコルスタックから受信した送信パケットに付されている送信元IPアドレスを前記受信パケットに付されていた前記送信元IPアドレスに書き戻しつつ、前記TCP/IPプロトコルスタックから受信した送信パケットに付されている宛先IPアドレスを新たな宛先である新宛先IPアドレスに置換して前記第二のNICに送信するアドレス変換処理部とを具備するネットワークゲートウェイ装置。第一のNICと、第二のNICと、前記第一のNIC及び前記第二のNICとの間でTCP/IP通信処理を行うTCP/IPプロトコルスタックと、前記第一のNICから受信した受信パケットに付されている送信元IPアドレスを第一仮IPアドレスに変換し、宛先IPアドレスを前記第一のNICに付されている第一のNICIPアドレスに変換して、前記TCP/IPプロトコルスタックに前記受信パケットを送信すると共に、前記TCP/IPプロトコルスタックから受信した送信パケットに付されている宛先IPアドレスを前記受信パケットに付されていた前記宛先IPアドレスに書き戻しつつ、前記TCP/IPプロトコルスタックから受信した送信パケットに付されている送信元IPアドレスを新たな送信元である新送信元IPアドレスに置換して前記第二のNICに送信するアドレス変換処理部とを具備するネットワークゲートウェイ装置。特許文献1に開示したXPTCPを既存のネットワーク環境に導入する際、その導入障壁はできるだけ低いことが好ましい。理想的には、ネットワーク上の全ての端末がゼロコンフィギュレーション、つまり全く設定等を変更したり新規のソフトウェアを導入することなく、XPTCPが提供する新たな機能を利用できるようになることが望ましい。端末にソフトウェアを導入せずに新機能を実現する方法として、ネットワークの経路上にゲートウェイ装置を介入させる方法が考えられる。しかし、このゲートウェイ装置は、これまで知られている装置やアプリケーションの態様では、どうしても端末の設定変更が必要になる。例えば、ゲートウェイ装置がプロキシサーバである場合、端末はプロキシサーバ対応アプリケーションプログラムを用いて、アプリケーションプログラムにはプロキシサーバのIPアドレスとポート番号を設定しなければならない。つまり、アプリケーションプログラムがプロキシサーバに対応していないと、プロキシサーバを介した通信そのものが実現できない。また例えば、ゲートウェイ装置がルータである場合、端末はデフォルトゲートウェイのIPアドレスを設定し直さなければならない。更に、ゲートウェイ装置が既存のネットワーク環境に導入されることを考えると、ゲートウェイ装置のための空いているIPアドレスを確保しなければならない他、既にあるデフォルトゲートウェイとなっているルータ等、他のネットワーク装置にも設定変更が必要になることもある。本発明はかかる課題を解決し、既存のネットワーク環境に対して設定変更を何ら強いることなく、容易にセキュリティを高めた暗号化通信機能を追加できるネットワークゲートウェイ装置を提供することを目的とする。上記課題を解決するために、本発明のネットワークゲートウェイ装置は、第一のNICと、第二のNICと、第一のNIC及び第二のNICとの間でTCP/IP通信処理を行うTCP/IPプロトコルスタックと、第一のNICから受信した受信パケットに付されている送信元IPアドレスを第一仮IPアドレスに変換し、宛先IPアドレスを第一のNICに付されている第一のNICIPアドレスに変換して、TCP/IPプロトコルスタックに受信パケットを送信すると共に、TCP/IPプロトコルスタックから受信した送信パケットに付されている送信元IPアドレス、及び宛先IPアドレスを受信パケットに付されていた送信元IPアドレス、及び宛先IPアドレスに書き戻して第二のNICに送信するアドレス変換処理部とを具備する。内側NIC及び外側NICに割り当てられているIPアドレスとは無関係である筈のパケットをTCP/IPプロトコルスタックが処理できるようにするために、受信パケットに付されている送信元IPアドレスは偽のIPアドレスに、宛先IPアドレスは内側NICに割り当てられているIPアドレスに書き換えてから、TCP/IPプロトコルスタックに与える。本発明により、既存のネットワーク環境に対して設定変更を何ら強いることなく、容易にセキュリティを高めた暗号化通信機能を追加できるネットワークゲートウェイ装置を提供できる。[ネットワークの概略]図1は、本発明の実施形態に係るネットワークゲートウェイ装置を含むネットワークの概略図である。本実施形態のネットワークゲートウェイ装置はXPTCP機能を提供するので、これ以降、ネットワークゲートウェイ装置をXPTCPゲートウェイ装置101と称する。図1には、XPTCPゲートウェイ装置101を含むネットワークが示されている。XPTCPゲートウェイ装置101を介して左側には、XPTCPに非対応である二台の端末、XPTCP非対応PC102及びXPTCP非対応PC103が、XPTCPゲートウェイ装置101の内側NIC104に接続されている。XPTCPゲートウェイ装置101を介して右側には、XPTCPに非対応の端末であるXPTCP非対応PC105と、XPTCPに対応している端末であるXPTCP対応PC106、及びXPTCPに対応しているサーバであるXPTCP対応サーバ107が、XPTCPゲートウェイ装置101の外側NIC108に接続されている。これ以降、XPTCPゲートウェイ装置101を介して左側のネットワークをXPTCP非対応ネットワーク109と、XPTCPゲートウェイ装置101を介して右側のネットワークをXPTCP対応ネットワーク110と、それぞれ称する。つまり、XPTCPゲートウェイ装置101は、第一のNICともいえる内側NIC104がXPTCP非対応ネットワーク109に接続され、第二のNICともいえる外側NIC108がXPTCP対応ネットワーク110に接続されている。XPTCPゲートウェイ装置101は、XPTCP非対応ネットワーク109に存在するXPTCP非対応PC102及びXPTCP非対応PC103のような、XPTCP非対応のネットワーク機器を、XPTCP対応ネットワーク110に存在するXPTCP対応PC106及びXPTCP対応サーバ107のような、XPTCP対応のネットワーク機器に、XPTCPの機能を以て接続できるように、パケットを加工する。XPTCPゲートウェイ装置101は、内側NIC104に接続されているXPTCP非対応PC102に対し、XPTCPの機能を提供する。具体的には、XPTCP非対応ネットワーク109上のXPTCP非対応PC102がXPTCP対応ネットワーク110上のXPTCP非対応PC105に接続しようとする場合には、XPTCPゲートウェイ装置101はパケットをそのまま流して、従来と同様の一般的なTCP/IPネットワークにおける通信を行う。しかし、XPTCP非対応ネットワーク109上のXPTCP非対応PC102がXPTCP対応ネットワーク110上のXPTCP対応PC106或はXPTCP対応サーバ107に接続しようとする場合には、XPTCPゲートウェイ装置101はXPTCP非対応PC102から送信されるパケットをXPTCPに対応したパケットに書き換えて、XPTCP対応PC106或はXPTCP対応サーバ107に送信する。[XPTCPゲートウェイ装置101の内部構成]図2はXPTCPゲートウェイ装置101の機能ブロック図である。XPTCPゲートウェイ装置101は、ネットワークOSが稼働するコンピュータにXPTCPゲートウェイ装置101として稼働する為のプログラムを導入することで実現できる。ネットワークOSは、例えば周知のWindows登録商標或はLinux登録商標等のOSが利用可能である。但し、XPTCPゲートウェイ装置101はネットワークの経路上に設置される必要があるので、コンピュータには二つのNICNetworkInterfaceCardが備わっている必要がある。これが内側NIC104と外側NIC108である。内側NIC104と外側NIC108は、それぞれ周知のTCP/IPネットワークに接続するための、一般的なインターフェースカードである。したがって、内側NIC104と外側NIC108にはそれぞれ周知且つ固有の、48ビットのMACアドレスを有する。なお、図2に機能ブロックとして示す内側NIC104と外側NIC108は、ハードウェアとしてのNICそのものに加え、デバイスドライバの機能も含んでいる。初期設定部201は、ネットワークOSが起動した際に設定されるネットワークの基本設定作業に加えて、内側NIC104と外側NIC108にプロミスキャスモードpromiscuousmodeを設定する。無差別モードとも言われるこのモードは、ネットワーク上を流れる全てのパケットを受信して読み込むことができる。本実施形態のXPTCPゲートウェイ装置101には必要な設定である。図示しないネットワークOSは、起動の際にネットワークの基本設定を行う。その際の、内側NIC104及び外側NIC108のMACアドレス及びIPアドレスは、ネットワーク設定情報メモリ202に記憶される。アドレス変換処理部203は、内側NIC104から受信したパケットに対し、ネットワーク設定情報メモリ202、仮IPMACリスト204及び内側NICアドレステーブル209からそれぞれ情報を読み込み、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを、第一仮NICMACアドレス、第一仮NICIPアドレス、索引用ポート番号、内側NICMACアドレス及び内側NICIPアドレスに変換して、OSに備わっているTCP/IPプロトコルスタック205に引き渡す。なお、宛先ポート番号はそのまま変更しない。同様に、アドレス変換処理部203は、外側NIC108から受信したパケットに対し、ネットワーク設定情報メモリ202、仮IPMACリスト204及び外側NICアドレステーブル210からそれぞれ情報を読み込み、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を、第二仮NICMACアドレス、第二仮NICIPアドレス、索引用ポート番号、外側NICMACアドレス、外側NICIPアドレス及び動的ポート番号に変換して、OSに備わっているTCP/IPプロトコルスタック205に引き渡す。また、アドレス変換処理部203は、TCP/IPプロトコルスタック205から外側NIC108へ送信されるパケットに対し、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を、索引用ポート番号を手がかりに外側NICアドレステーブル210を参照して、先に書き換える以前のものに書き戻した後、外側NIC108から送信する。同様に、アドレス変換処理部203は、TCP/IPプロトコルスタック205から内側NIC104へ送信されるパケットに対し、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を、索引用ポート番号を手がかりに内側NICアドレステーブル209を参照して、先に書き換える以前のものに書き戻した後、内側NIC104から送信する。更に、アドレス変換処理部203は、TCP/IPプロトコルスタック205から外側NIC108へ送信されるARPAddressResolutionProtocol要求パケットに対し、仮IPMACリスト204に記載されている偽のMACアドレスで応答することで、あたかも物理媒体から応答があったかのようにTCP/IPプロトコルスタック205を騙して正常に動作させる。第一のNICアドレス変換テーブルともいえる内側NICアドレステーブル209は、アドレス変換処理部203が内側NIC104とTCP/IPプロトコルスタック205との間で、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える、又は書き戻すためのテーブルである。第二のNICアドレス変換テーブルともいえる外側NICアドレステーブル210は、アドレス変換処理部203が外側NIC108とTCP/IPプロトコルスタック205との間で、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える、又は書き戻すためのテーブルである。これら内側NICアドレステーブル209及び外側NICアドレステーブル210は、アドレス変換テーブルともいえる。なお、説明の便宜のため、これ以降、XPTCP非対応ネットワーク109に存在するXPTCP非対応PC102、103等の、XPTCPに非対応のネットワーク機器を端末と称し、XPTCP対応ネットワーク110に存在するXPTCP対応サーバ107やXPTCP対応PC106等の、XPTCPに対応しているネットワーク機器をサーバと称する。XPTCP非対応PC105については、XPTCPを用いた通信の対象外であるので、端末サーバの定義からは除外する。TCP/IPプロトコルスタック205は、ネットワークOSに備わっているネットワークドライバプログラムである。このTCP/IPプロトコルスタック205は、アドレス変換処理部203を経由して、NICとの間でパケットの送受信を行い、アプリケーションプログラムとの間でデータの送受信を行う。TCP/IPプロトコルスタック205はアプリケーションプログラムに対し、周知のソケットBSDソケットという名称で周知である。というアプリケーションプログラムインターフェースAPIを提供する。TCP/IPプロトコルスタック205は、NICから受信したパケットを、ARPヘッダ、IPヘッダ、TCP又はUDPヘッダの順に除去し、パケットのペイロードを連結してストリームデータに戻し、所定のアプリケーションに引き渡す。逆に、TCP/IPプロトコルスタック205は、アプリケーションから受け取ったストリームデータを、TCP/IPプロトコルスタック205が事前に形成してアプリケーションから指定されたソケットを通じて、所定のデータサイズのペイロードに分割した後、TCP又はUDPヘッダ、IPヘッダ、ARPヘッダの順にヘッダを付加し、NICを通じて送信先へ送信する。特に、TCPプロトコルのパケットを取り扱う場合には、TCP/IPプロトコルスタック205は、周知のコネクションという仮想的な通信路を、SYN-ACKSYN-ACKという周知の3ウェイハンドシェイクにてTCP/IPプロトコルスタック205の内部に形成する。本実施形態のXPTCPゲートウェイ装置101は、内側NIC104と外側NIC108の双方にコネクションを形成し、そのコネクション同士でデータの転送を行う。内側NICアドレステーブル209及び外側NICアドレステーブル210は、TCP/IPプロトコルスタック205が作成するコネクションと、実際のパケットに付されている本来の送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号との関連付けを、索引用ポート番号を設けることで実現している。内側NICアドレステーブル209及び外側NICアドレステーブル210は、TCP/IPプロトコルスタック205が作成するコネクションを管理するテーブルである、ともいえる。拡張TCP処理部ともいえるXPTCP処理部206は、TCP/IPプロトコルスタック205が形成したソケット、すなわち一方のコネクションの出入口からデータを受信し、受信したデータをTCP/IPプロトコルスタック205が形成した別のソケット、すなわち他方のコネクションの出入口に転送する。また、XPTCP処理部206はXPTCP処理対象マスタ208に記憶されている指示内容に応じて、認証処理及び暗号化通信処理を行う。特にXPTCP処理部206は、TCP/IPプロトコルスタック205から受信したデータを再びTCP/IPプロトコルスタック205に返送する際に、ソケットに付されている送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号を書き換える。ソケット処理部207は、ネットワークOS起動後に自動実行される小さな擬似サーバプログラムであると共に、内側NIC104から受信したパケットに起因して、TCP/IPプロトコルスタック205からconnectイベントを受け取ると、connectイベントを受け取ったソケットに付されている送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号から、外側NIC108に向けて新たなソケットを作成するためのconnectrequestイベント、つまり接続要求をTCP/IPプロトコルスタック205に向けて発生する。ソケット処理部207はTCP/IPプロトコルスタック205に対してソケットオープン/クローズ処理のみ行い、TCP/IPプロトコルスタック205との実際のデータの送受信はXPTCP処理部206が行う。図2に示すXPTCPゲートウェイ装置101のブロック図のうち、内側NIC104、外側NIC108、アドレス変換処理部203、TCP/IPプロトコルスタック205、XPTCP処理部206及びソケット処理部207は、周知の7階層のOSI参照モデルに準拠する、TCP/IPの階層モデルに沿っている。内側NIC104と外側NIC108は、NICドライバを含めて物理層とデータリンク層に該当する。TCP/IPプロトコルスタック205は、ネットワーク層IP、ICMPInternetControlMessageProtocol、ARPとトランスポート層TCP、UDPに該当する。ソケット処理部207はアプリケーション層に該当する。アドレス変換処理部203はデータリンク層とネットワーク層の間に潜り込み、TCP/IPプロトコルスタック205が本来なら無関係である筈のパケットを処理できるように、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換える。このため、アドレス変換処理部203はネットワーク層に該当する。XPTCP処理部206はトランスポート層とアプリケーション層の間に介在して、ソケットオープン/クローズ処理以外の、ネットワークストリームデータの転送と、認証及び暗号化或は復号を行う。このため、XPTCP処理部206はアプリケーション層が介在できない認証及び暗号化通信を実現するトランスポート層に該当すると共に、データを転送するという機能においてアプリケーション層にも該当する。ネットワークOSに標準搭載されているTCP/IPプロトコルスタック205は、本来ならネットワーク設定情報メモリ202に記憶されているIPアドレス、つまり自らのNICに付されているIPアドレスに対する通信しか取り扱わない。一方、XPTCPゲートウェイ装置101はあらゆるパケットを取り扱う必要がある。また、XPTCPは通信の手順が複雑であるTCP/IPの機能を利用しつつ、トランスポート層における認証と暗号化処理を実現する。そこで、TCP/IPプロトコルスタック205の機能を最大限有効に活用しつつ、必要最小限のプログラムを追加することでXPTCPゲートウェイ装置101を実現するために、本実施形態のXPTCPゲートウェイ装置101は、TCP/IPプロトコルスタック205を騙す処理を施す。つまり、XPTCPゲートウェイ装置101に割り当てられているIPアドレスとは無関係である筈のパケットをTCP/IPプロトコルスタック205が処理できるようにするために、内側NIC104又は外側NIC108から受信したパケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを、一旦、XPTCPゲートウェイ装置101に割り当てられているIPアドレス、MACアドレス等に書き換える。そして、送信元及び宛先のMACアドレス、IPアドレス及びポート番号を書き換えた当該パケットをTCP/IPプロトコルスタック205に引き渡す。アドレス変換処理部203及びXPTCP処理部206にて行う書換処理、つまりパケットに付されている送信元及び宛先のMACアドレス、IPアドレスそしてポート番号の書換処理の詳細は、図18、図19及び図20にて後述する。[テーブル及びリストの構成]図3は、XPTCPゲートウェイ装置101に備わっている各種テーブル及びリストのフィールド構成を示す図である。図2に示すXPTCPゲートウェイ装置101が保有する、内側NICアドレステーブル209、外側NICアドレステーブル210、XPTCPポリシーテーブル211、仮IPMACリスト204は、図示しないRAM内に設けられる。また、XPTCP処理対象マスタ208はハードディスク装置等の図示しない不揮発性ストレージに設けられ、アドレス変換処理部203が起動する際、図示しないRAM内に複写される。ネットワーク設定情報メモリ202はネットワークOSによって図示しないRAM内に設けられる。図4はパケットの構造を示す概略図である。内側NICアドレステーブル209及び外側NICアドレステーブル210のフィールドを、図3のフィールド構成図と図4の概略図を参照して説明する。内側NICアドレステーブル209は、プロトコル種別フィールドと、送信元MACアドレスフィールドと、送信元IPアドレスフィールドと、送信元ポート番号フィールドと、宛先MACアドレスフィールドと、宛先IPアドレスフィールドと、宛先ポート番号フィールドと、索引用ポート番号フィールドと、タイマ用カウンタ値フィールドを有する。外側NICアドレステーブル210は、プロトコル種別フィールドと、送信元MACアドレスフィールドと、送信元IPアドレスフィールドと、送信元ポート番号フィールドと、宛先MACアドレスフィールドと、宛先IPアドレスフィールドと、宛先ポート番号フィールドと、索引用ポート番号フィールドと、動的ポート番号フィールドと、タイマ用カウンタ値フィールドを有する。プロトコル種別フィールドには、内側NIC104又は外側NIC108から入って来るパケットの種別として、TCP又はUDPを示すフラグが格納される。これはIPヘッダ401のプロトコル番号から読み取る。なお、本実施形態のXPTCPゲートウェイ装置101は、現段階ではTCPパケットのみを扱うが、近い将来にUDPパケットを処理可能にするために、このプロトコル種別フィールドが用意されている。送信元MACアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている送信元MACアドレスが格納される。これはMACヘッダ402の送信元MACアドレスから読み取る。送信元IPアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている送信元IPアドレスが格納される。これはIPヘッダ401の送信元IPアドレスから読み取る。送信元ポート番号フィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている送信元ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の送信元ポート番号から読み取る。宛先MACアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている宛先MACアドレスが格納される。これはMACヘッダ402の宛先MACアドレスから読み取る。宛先IPアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている宛先IPアドレスが格納される。これはIPヘッダ401の宛先IPアドレスから読み取る。宛先ポート番号フィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている宛先ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の宛先ポート番号から読み取る。索引用ポート番号フィールドには、アドレス変換処理部203がパケットを内側NIC104又は外側NIC108から送信する直前に、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻す際に、内側NICアドレステーブル209又は外側NICアドレステーブル210のどのレコードに記述されているかを特定するための索引情報が格納される。この索引用ポート番号は、XPTCP処理対象マスタ208のレコードに処理対象として合致するTCPSYNパケットが内側NIC104から来た時に、アドレス変換処理部203が内側NICアドレステーブル209に新規レコードを追記録する際、図2のTCPポート番号メモリ212の値が用いられる。索引用ポート番号は、ポート番号を索引情報として利用するので、一意性ユニークであり、重複しないを有することが求められる。このため、TCPポート番号メモリ212の値を利用とした際に、既に当該番号が使われている場合は、TCPポート番号メモリ212の値をインクリメントして、当該ポート番号が空いているか、確認する。TCPSYNパケットとは、周知のTCP通信の開始コネクションの確立要求を表すパケットであり、TCPヘッダ403に存在する6ビットのコードビットの5番目のビットが1のパケットである。TCPACKパケットとは、周知のTCP通信における確認応答を表すパケットであり、TCPヘッダ403に存在する6ビットのコードビットの2番目のビットが1のパケットである。TCPFINパケットとは、周知のTCP通信の終了コネクションの切断要求を表すパケットであり、TCPヘッダ403に存在する6ビットのコードビットの6番目のビットが1のパケットである。TCPACK/SYNパケットとは、TCPヘッダ403に存在する6ビットのコードビットの2番目のビットと5番目のビットが1のパケットであり、TCPSYNパケットとTCPACKパケットの、二つの意味を同時に備えている。外側NICアドレステーブル210にのみ設けられている動的ポート番号は、動的ポート番号フィールドに格納される。この動的ポート番号は、TCP/IPプロトコルスタック205が外側NIC108を通じて、XPTCP対応ネットワーク110に存在するXPTCP対応サーバ107やXPTCP対応PC106等の、XPTCPに対応しているネットワーク機器、すなわちサーバとのコネクションを形成する際、当該コネクションの送信元ポート番号として、TCP/IPプロトコルスタック205が自動的に生成するポート番号である。多くの場合、動的ポート番号は短命なポートとも呼ばれる周知のエフェメラルポートの番号である、ポート番号49152から65535迄の番号が、TCP/IPプロトコルスタック205によって付与される。タイマ用カウンタ値フィールドには、内側NICアドレステーブル209又は外側NICアドレステーブル210の当該レコードが利用されなくなったことを判断して破棄する際の、経過時間を計測する為のアドレステーブル更新カウンタ213の値が格納される。図3に示すネットワーク設定情報メモリ202には、ネットワークOSが起動する際にネットワークの基本設定を行った結果の、内側NIC104及び外側NIC108のMACアドレス及びIPアドレスが記憶される。つまり、ネットワーク設定情報メモリ202はネットワークOSによって設けられる。内側NICMACアドレスは、内側NIC104の、本来のMACアドレスを示す。内側NICIPアドレスは、内側NIC104の、本来のIPアドレスを示す。外側NICMACアドレスは、外側NIC108の、本来のMACアドレスを示す。外側NICIPアドレスは、外側NIC108の、本来のIPアドレスを示す。同じく図3に示す仮IPMACリスト204は、内側NICIPアドレスフィールドと、第一仮MACアドレスフィールドと、第一仮IPアドレスフィールドと、外側NICIPアドレスフィールドと、第二仮MACアドレスフィールドと、第二仮IPアドレスフィールドを有する。内側NICIPアドレスフィールドには、内側NIC104のIPアドレスが格納される。これはネットワーク設定情報メモリ202から得られる。第一仮MACアドレスフィールドには、第一仮MACアドレスが格納される。第一仮IPアドレスフィールドには、第一仮IPアドレスが格納される。外側NICIPアドレスフィールドには、外側NIC108のIPアドレスが格納される。これはネットワーク設定情報メモリ202から得られる。第二仮MACアドレスフィールドには、第二仮MACアドレスが格納される。第二仮IPアドレスフィールドには、第二仮IPアドレスが格納される。第一仮MACアドレス、第一仮IPアドレス、第二仮MACアドレス及び第二仮IPアドレスは、アドレス変換処理部203及びXPTCP処理部206にて用いる、偽のMACアドレス及びIPアドレスである。同じく拡張TCP処理対象マスタともいえる、図3に示すXPTCP処理対象マスタ208は、レコード番号フィールドと、プロトコル種別フィールドと、送信元IPアドレスフィールドと、送信元ポート番号フィールドと、宛先IPアドレスフィールドと、宛先ポート番号フィールドと、暗号種別他フィールドを有する。レコード番号フィールドは、XPTCP処理対象マスタ208のレコード番号そのものである。XPTCP処理対象マスタ208のレコードを一意に識別する連番の番号である。なお、レコード番号フィールドに格納する情報は、後述するXPTCPポリシーテーブル211にて用いる、レコードを一意に識別するための情報である。したがって、一意に識別が可能であれば、必ずしもレコード番号でなくても良い。プロトコル種別フィールドには、内側NIC104から入って来るパケットの種別として、TCP又はUDPを示すフラグが格納される。これはIPヘッダ401のプロトコル番号から読み取る。送信元IPアドレスフィールドには、内側NIC104から入って来るパケットに付されている送信元IPアドレスが格納される。これはIPヘッダ401の送信元IPアドレスから読み取る。送信元ポート番号フィールドには、内側NIC104から入って来るパケットに付されている送信元ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の送信元ポート番号から読み取る。宛先IPアドレスフィールドには、内側NIC104から入って来るパケットに付されている宛先IPアドレスが格納される。これはIPヘッダ401の宛先IPアドレスから読み取る。宛先ポート番号フィールドには、内側NIC104から入って来るパケットに付されている宛先ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の宛先ポート番号から読み取る。暗号種別他フィールドには、当該XPTCPセッションに用いる認証や暗号の種類等の情報が格納される。つまり、XPTCP処理対象マスタ208には、端末からサーバに向けて送信されるパケットのIPアドレス及びポート番号の組み合わせと、そのIPアドレス及びポート番号の組み合わせを有するパケットによって、内側NIC104及び外側NIC108の夫々に形成されるコネクションを通過するデータストリームに適用する、暗号化等に関する情報が記憶される。同じく図3に示すXPTCPポリシーテーブル211は、プロトコル種別フィールドと、索引用ポート番号フィールドと、レコード番号フィールドを有する。プロトコル種別フィールドには、XPTCP処理対象マスタ208と同様、内側NIC104から入って来るパケットの種別として、TCP又はUDPを示すフラグが格納される。これはIPヘッダ401のプロトコル番号から読み取る。索引用ポート番号フィールドには、当該セッションのパケットに対してアドレス変換処理部203によって付されている、索引用ポート番号が格納される。レコード番号フィールドは、XPTCP処理対象マスタ208のレコード番号そのものである。したがって、このフィールドに記されているレコード番号で、XPTCP処理対象マスタ208のレコードを指定し、当該レコードの暗号種別他フィールドを参照する。XPTCPポリシーテーブル211は、索引用ポート番号と暗号種別他の情報を紐付けることで、索引用ポート番号に係るTCPコネクションを通過するデータストリームに適用する、暗号種別等を特定する。再び図2に戻って、各部の説明を続ける。アドレステーブル更新カウンタ213は、内側NICアドレステーブル209及び外側NICアドレステーブル210の、使われなくなったレコードを削除する際に、経過時間を見るためのカウンタである。アドレステーブル更新カウンタ213は、一例としては0から119迄の数を計数するループカウンタである。0から始まり、1秒毎に計数値が1インクリメントして、119迄計数すると、再度0から計数を開始する。アドレス変換処理部203は、後述するTCP切断シーケンスにおいて、TCPFINパケットが内側NIC104及び外側NIC108の両方から来たことに呼応して、アドレステーブル更新カウンタ213の値を、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当するレコードの、タイマ用カウント値フィールドに書き込む。そして、タイマ用カウント値フィールドの値と現在のアドレステーブル更新カウンタ213の値を比較して、60秒以上を経過したと判断したら、もはやそのレコードに示される通信セッションは終了したと判断して、当該レコードを削除する。TCPポート番号メモリ212は、内側NICアドレステーブル209及び外側NICアドレステーブル210の索引用ポート番号フィールドに値を記入するためのポート番号が格納されるメモリである。内側NIC104からTCPSYNパケットが来ると、新たなコネクションを作成する必要がある。アドレス変換処理部203はTCP/IPプロトコルスタック205にコネクションを作成させるために、アドレス変換処理を行う。アドレス変換処理によって、TCP/IPプロトコルスタック205は本来の送信元IPアドレス及び宛先IPアドレス等とは異なる、偽の送信元IPアドレス及び宛先IPアドレス等が付されたパケットに対して、コネクションを形成する。アドレス変換処理部203は、偽の送信元IPアドレス及び宛先IPアドレス等をパケットに付する際、TCP/IPプロトコルスタック205が作成するコネクションと、その偽の送信元IPアドレス及び宛先IPアドレス等との関連付けを行わなければならない。このコネクションを識別して、最終的に本来の送信元IPアドレス及び宛先IPアドレス等に戻すために、パケットに識別情報を付する必要がある。これが、索引用ポート番号である。内側NICアドレステーブル209に新たなレコードが作成された際、TCPポート番号メモリ212の値を1インクリメントして、その値を索引用ポート番号フィールドに書き込む。索引用ポート番号はTCP/IPプロトコルスタック205が認識可能な番号でなければならないので、TCPポート番号メモリ212に記入される最大値は65535である。TCPポート番号メモリ212は、短命なポートとも呼ばれる周知のエフェメラルポートの番号である、ポート番号49152から65535迄を1ずつインクリメントする値が書き込まれる。なお、TCPポート番号メモリ212はループカウンタで構成しても良い。[アドレス変換処理部203の内部構成]図5は、アドレス変換処理部203の機能ブロック図である。アドレス変換処理部203は、内側NIC受信処理部501、外側NIC受信処理部502、外側NIC送信処理部503、内側NIC送信処理部504、テーブル更新処理部505、及びポリシー回答部506の、五つの機能ブロックに分けられる。先ず、内側NIC受信処理部501の詳細を説明する。図6は、内側NIC受信処理部501の機能ブロック図である。内側NIC104が受信したパケットは、最初に受信パケット判定部601がXPTCP処理対象マスタ208を参照して、当該パケットがXPTCP処理の対象になるか否か等を判定する。もし、内側NIC104が受信したパケットが、例えばICMPパケットやXPTCP処理対象マスタ208に合致しない処理対象外パケットである場合は、受信パケット判定部601はそのパケットをそのまま外側NIC108へ転送する。もし、内側NIC104が受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合は、受信パケット判定部601はそのパケットをそのままTCP/IPプロトコルスタック205へ転送する。もし、内側NIC104から入力されたパケットがXPTCP処理対象マスタ208に合致する処理対象パケットである場合は、受信パケット判定部601は次にそのパケットの詳細を見る。受信パケット判定部601は、そのパケットがTCPデータパケットであれば、当該TCPデータパケットをアドレス置換部602に引き渡す。アドレス置換部602は内側NICアドレステーブル209を送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で検索して、レコードを特定し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えて、TCP/IPプロトコルスタック205へ転送する。受信パケット判定部601で処理するパケットがTCPSYNパケットであれば、それは内側NICアドレステーブル209に未登録のパケットである。そこで、受信パケット判定部601はTCPSYNパケットをコネクション登録処理部603に引き渡す。コネクション登録処理部603は、TCPSYNパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で、内側NICアドレステーブル209に新規のレコードを追記録する。そして、TCPポート番号メモリ212の値を1インクリメントして参照し、その値を索引用ポート番号として内側NICアドレステーブル209の索引用ポート番号フィールドに記録する。更に、同じ内容のレコードを外側NICアドレステーブル210にも追記録する。その後、コネクション登録処理部603はTCPSYNパケットをアドレス置換部602に引き渡す。アドレス置換部602は前述のTCPデータパケットと同様に、TCPSYNパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えて、TCP/IPプロトコルスタック205へ転送する。受信パケット判定部601で処理するパケットがTCPFINパケットであれば、それはTCP/IPプロトコルスタック205に形成されたコネクションの終了を意味すると共に、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当レコードを削除する必要が生じる。但し、レコードを削除する時期は、内側NIC104に向けて形成されているコネクションと、外側NIC108に向けて形成されているコネクションとの、両方のコネクションの終了から所定の時間を経過させる必要がある。そこで、受信パケット判定部601はTCPFINパケットをレコード削除準備処理部604に引き渡す。レコード削除準備処理部604は、TCPFINパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で内側NICアドレステーブルを検索してレコードを特定し、当該レコードの索引ポート番号を削除予定リスト605に書き出す。削除予定リスト605は、図示しないRAM内に設けられた、削除を予定しているレコードの索引ポート番号が記録されるリストである。その後、レコード削除準備処理部604はTCPFINパケットをアドレス置換部602に引き渡す。アドレス置換部602は前述のTCPデータパケット及びTCPSYNパケットと同様に、TCPFINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えて、TCP/IPプロトコルスタック205へ転送する。なお、アドレス置換部602は、TCPデータパケット、TCPSYNパケット及びTCPFINパケットの何れの場合においても宛先ポート番号は書き換えない。アドレス置換部602は、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える際、仮IPMACリスト204を参照する。次に、外側NIC受信処理部502の詳細を説明する。図7は、外側NIC受信処理部502の機能ブロック図である。外側NIC108が受信したパケットは、最初に受信パケット判定部701がXPTCP処理対象マスタ208を参照して、当該パケットがXPTCP処理の対象になるか否か等を判定する。もし、外側NIC108が受信したパケットが、例えばICMPパケットやXPTCP処理対象マスタ208に合致しない処理対象外パケットである場合は、外側NIC受信処理部502はそのパケットをそのまま内側NIC104へ転送する。もし、外側NIC108が受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合は、外側NIC受信処理部502はそのパケットをそのままTCP/IPプロトコルスタック205へ転送する。もし、外側NIC108から入力されたパケットがXPTCP処理対象マスタ208に合致する処理対象パケットである場合は、受信パケット判定部701は次にそのパケットの詳細を見る。受信パケット判定部701は、そのパケットがTCPデータパケットであれば、当該TCPデータパケットをアドレス置換部702に引き渡す。アドレス置換部702は外側NICアドレステーブル210を送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で検索してレコードを特定し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換えて、TCP/IPプロトコルスタック205へ転送する。受信パケット判定部701は、もし、そのパケットがTCPFINパケットであれば、それはTCP/IPプロトコルスタック205に形成されたコネクションの終了を意味すると共に、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当レコードを削除する必要が生じる。前述のように、レコードを削除する時期は、外側NIC108に向けて形成されているコネクションと、外側NIC108に向けて形成されているコネクションとの、両方のコネクションの終了から所定の時間を経過させる必要がある。そこで、受信パケット判定部701はTCPFINパケットをレコード削除処理部703に引き渡す。レコード削除処理部703は、TCPFINパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で内側NICアドレステーブルを検索してレコードを特定し、当該レコードの索引ポート番号を取得する。次に、取得した索引ポート番号が削除予定リスト605にあるか否かを確認する。削除予定リスト605に当該索引ポート番号があったなら、現時点のアドレステーブル更新カウンタ213の値を、当該索引ポート番号に係る外側NICアドレステーブル210及び内側NICアドレステーブル209のレコードの、タイマ用カウンタ値フィールドに書き込む。その後、レコード削除処理部703はTCPFINパケットをアドレス置換部702に引き渡す。アドレス置換部702は前述のTCPデータパケットと同様に、TCPFINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス宛先IPアドレス及び宛先ポート番号を書き換えて、TCP/IPプロトコルスタック205へ転送する。アドレス置換部702は、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える際、仮IPMACリスト204を参照する。次に、外側NIC送信処理部503の詳細を説明する。図8は、外側NIC送信処理部503の機能ブロック図である。送信パケット判定部801は、TCP/IPプロトコルスタック205から送出されたパケットを受信すると、最初にパケットがアドレス書換対象外パケットか、アドレス書換対象TCPパケットか、或はARP要求パケットかを判定する。もし、パケットがアドレス書換対象外のパケットであれば、そのまま何もせずに外側NIC108に送信する。もし、パケットがARP要求パケットであり、且つARP要求パケットに付されている問い合わせIPアドレスが第二仮IPアドレスである場合は、当該パケットは、パケットに付するMACアドレスを特定するために、TCP/IPプロトコルスタック205がコネクションを形成する際に送信するパケットである。そこで、送信パケット判定部801はARP要求パケットをARP応答処理部802に引き渡す。ARP応答処理部802は仮IPMACリスト204を参照して、TCP/IPプロトコルスタック205に第二仮MACアドレスを返答する。もし、パケットがTCPパケットであり、パケットに付されている宛先IPアドレスが第二仮IPアドレスである場合は、送信パケット判定部801は次に当該パケットがTCPSYNパケットであるか否かを確認する。TCPSYNパケットであれば、それはTCP/IPプロトコルスタック205がコネクションを新規に作成したことを示す。したがって、TCP/IPプロトコルスタック205が新規に作成したコネクションの送信元ポート番号、つまり動的ポート番号を、外側NICアドレステーブル210に記憶しておく必要がある。そこで、送信パケット判定部801はTCPSYNパケットを動的ポート記録処理部803に引き渡す。動的ポート記録処理部803は、TCPSYNパケットに付されている送信元ポート番号、つまり動的ポート番号と、宛先ポート番号として付されている索引ポート番号を取得する。そして、索引ポート番号で外側NICアドレステーブル210の該当レコードを特定したら、当該レコードの動的ポート番号フィールドに、動的ポート番号を記録する。そして、動的ポート記録処理部803は当該TCPSYNパケットをアドレス復元部804に引き渡す。アドレス復元部804は外側NICアドレステーブル210の、先に宛先ポート番号で特定したレコードの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を取得し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻して、外側NIC108に送信する。もし、パケットがTCPパケットであり、パケットに付されている宛先IPアドレスが第二仮IPアドレスである場合は、送信パケット判定部801は次に当該パケットがTCPSYNパケットであるか否かを確認する。TCPSYNパケットでなければ、送信パケット判定部801は当該TCPパケットをアドレス復元部804に引き渡す。アドレス復元部804は外側NICアドレステーブル210の、先に索引ポート番号で特定したレコードの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を取得し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻して、外側NIC108に送信する。次に、内側NIC送信処理部504の詳細を説明する。図9は、内側NIC送信処理部504の機能ブロック図である。送信パケット判定部901は、TCP/IPプロトコルスタック205から送出されたパケットを受信すると、最初にパケットがアドレス書換対象外パケットか、或はアドレス書換対象TCPパケットかを判定する。もし、パケットがアドレス書換対象外のパケットであれば、そのまま何もせずに内側NIC104に送信する。もし、パケットがTCPパケットであり、パケットに付されている宛先IPアドレスが第一仮IPアドレスである場合は、送信パケット判定部901は当該TCPパケットをアドレス復元部902に引き渡す。アドレス復元部902は内側NICアドレステーブル209の、索引ポート番号で特定したレコードの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を取得し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻して、内側NIC104に送信する。次に、テーブル更新処理部505の詳細を説明する。テーブル更新処理部505は1秒毎に起動し、アドレステーブル更新カウンタ213の値を1インクリメントして、内側NICアドレステーブル209及び外側NICアドレステーブル210の全てのレコードのタイマ用カウント値フィールドを検査し、TCPFINパケットが来てクローズされたコネクションが60秒以上経過したレコードがあるか否かを確認する。そして、そのようなレコードがあれば当該レコードを削除する。次に、ポリシー回答部506の詳細を説明する。ポリシー回答部506は、XPTCP処理部206から送出される、索引ポート番号を伴うポリシー問い合わせに対し、XPTCP処理対象マスタ208及び内側NICアドレステーブル209を参照して、当該索引ポート番号で特定されるコネクションに対する暗号種別等を指定するための、XPTCP処理対象マスタ208のレコード番号を返答する。[XPTCP処理部206の内部構成]図10は、XPTCP処理部206の機能ブロック図である。イベント検出部1001は、TCP/IPプロトコルスタック205から得られる、acceptイベント、connectrequestイベント及びcloseイベントを検出し、ソケット操作部1002及びポリシー設定部1003を制御する。ソケット操作部1002は、TCP/IPプロトコルスタック205によって図示しないRAM上に形成されたソケットメモリ領域1004に対し、ソケットから得られるストリームデータを、暗号化処理部1005又は復号処理部1006に引き渡し、処理されたストリームデータをソケットメモリ領域1004上の所定のソケットに引き渡す。ポリシー設定部1003は、ソケット操作部1002からイベント検出部1001を通じて得られた索引ポート番号を引数として、アドレス変換処理部に対してポリシーを問い合わせる。この問い合わせに対しては、アドレス変換処理部のポリシー回答部506がXPTCP処理対象マスタ208のレコード番号を返答する。すると、ポリシー設定部1003はXPTCPポリシーテーブル211に、索引ポート番号とXPTCP処理対象マスタ208のレコード番号を記録して、紐付ける。暗号化処理部1005は、XPTCPポリシーテーブル211及びXPTCP処理対象マスタ208を参照して、ソケット操作部1002から受け取ったストリームデータに対して、指定された暗号化処理を遂行する。復号処理部1006は、XPTCPポリシーテーブル211及びXPTCP処理対象マスタ208を参照して、ソケット操作部1002から受け取ったストリームデータに対して、指定された復号処理を遂行する。なお、本来ならXPTCP処理部206には、認証に関する機能も存在するが、本実施形態のXPTCPゲートウェイ装置101では、認証に関する動作は発明の範疇から外れるので、敢えて認証に関する記述は省略している。このため、図10に示すXPTCP処理部206の機能ブロック図には、認証に関する機能ブロックは記述を省略している。[XPTCPゲートウェイ装置101の動作アドレス変換処理部203の動作]これより、図11から図17のフローチャートに基づいて、XPTCPゲートウェイ装置101の動作の流れを説明する。図11は、アドレス変換処理部203の、内側NIC104におけるパケット受信処理の動作の流れを示すフローチャートである。これは内側NIC受信処理部501の動作の流れに該当する。処理を開始するとS1101、受信パケット判定部601は、最初に内側NIC104が受信したパケットが、例えばARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットであるか否かを判定するS1102。判定の結果、受信したパケットが、ARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットである場合はS1102のYES、受信パケット判定部601はそのパケットをそのまま外側NIC108へ転送してS1103、一連の処理を終了するS1104。ステップS1102において、受信したパケットが、明らかに転送対象となる処理対象外パケットでない場合S1102のNOは、受信パケット判定部601は次にそのパケットがXPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットであるか否かを判定するS1105。判定の結果、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合はS1105のYES、受信パケット判定部601はそのパケットをそのままTCP/IPプロトコルスタック205へ転送してS1106、一連の処理を終了するS1104。ステップS1105において、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットでない場合はS1105のNO、受信パケット判定部601は次に当該パケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号でXPTCP処理対象マスタ208を検索するS1107。検索の結果、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208になければS1108のNO、当該パケットはXPTCPゲートウェイ装置101の処理対象外なので、受信パケット判定部601はそのパケットをそのまま外側NIC108へ転送してS1103、一連の処理を終了するS1104。ステップS1108において、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208にあればS1108のYES、当該パケットはXPTCPゲートウェイ装置101の処理対象であり、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える必要がある。そこで、受信パケット判定部601は更に受信したパケットの詳細を見る。受信パケット判定部601は、受信したパケットがTCPSYNパケットであるか否かを判定するS1109。判定の結果、受信したパケットがTCPSYNパケットであればS1109のYES、受信パケット判定部601は当該TCPSYNパケットをコネクション登録処理部603に引き渡す。コネクション登録処理部603は、TCPSYNパケットを受け取ると、TCPポート番号メモリを参照して、現時点で使われていない重複しない新たな索引ポート番号を得た後、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号と共に、内側NICアドレステーブル209に新規のレコードとして追記録するS1110。更に、同じ内容で外側NICアドレステーブル210にも同様に新規レコードを追記録するS1111。コネクション登録処理部603は、内側NICアドレステーブル209と外側NICアドレステーブル210に新規レコードを追記録した後、受信パケット判定部601から引き渡されたTCPSYNパケットをアドレス置換部602に引き渡す。アドレス置換部602は、コネクション登録処理部603から引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPSYNパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えるS1112。具体的には、パケットに付されている送信元MACアドレスを第一仮MACアドレスに、パケットに付されている送信元IPアドレスを第一仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを内側NICMACアドレスに、パケットに付されている宛先IPアドレスを内側NICIPアドレスに書き換える。そして、宛先ポート番号は変更しない。アドレス置換部602はIPアドレス等の置換処理を行った後、当該TCPSYNパケットをTCP/IPプロトコルスタック205に送信してS1106、一連の処理を終了するS1104。ステップS1109において、受信したパケットがTCPSYNパケットでなければS1109のNO、受信パケット判定部601は次に受信したパケットがTCPFINパケットであるか否かを判定するS1113。判定の結果、受信したパケットがTCPFINパケットであればS1109のYES、受信パケット判定部601は当該TCPFINパケットを索引ポート番号と共にレコード削除準備処理部604に引き渡す。レコード削除準備処理部604は、当該TCPFINパケットの索引ポート番号を削除予定リスト605に書き込むS1104。その後、レコード削除準備処理部604はTCPFINパケットと索引ポート番号をアドレス置換部602に引き渡す。アドレス置換部602は、受信パケット判定部601からレコード削除準備処理部604を通じて引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPFINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えるS1112。具体的には、パケットに付されている送信元MACアドレスを第一仮MACアドレスに、パケットに付されている送信元IPアドレスを第一仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを内側NICMACアドレスに、パケットに付されている宛先IPアドレスを内側NICIPアドレスに書き換える。そして、宛先ポート番号は変更しない。アドレス置換部602はIPアドレス等の置換処理を行った後、当該TCPFINパケットをTCP/IPプロトコルスタック205に送信してS1106、一連の処理を終了するS1104。ステップS1113において、受信したパケットがTCPFINパケットでなけばS1113のNO、当該パケットはTCPデータパケットである。そこで、受信パケット判定部601は当該TCPデータパケットを索引ポート番号と共にアドレス置換部602に引き渡す。アドレス置換部602は、受信パケット判定部601から引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPデータパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えるS1112。具体的には、パケットに付されている送信元MACアドレスを第一仮MACアドレスに、パケットに付されている送信元IPアドレスを第一仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを内側NICMACアドレスに、パケットに付されている宛先IPアドレスを内側NICIPアドレスに書き換える。そして、宛先ポート番号は変更しない。アドレス置換部602はIPアドレス等の置換処理を行った後、当該TCPデータパケットをTCP/IPプロトコルスタック205に送信してS1106、一連の処理を終了するS1104。図12は、アドレス変換処理部203の、外側NIC108におけるパケット受信処理の動作の流れを示すフローチャートである。これは外側NIC受信処理部502の動作の流れに該当する。処理を開始するとS1201、受信パケット判定部701は、最初に外側NIC108が受信したパケットが、例えばARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットであるか否かを判定するS1202。判定の結果、受信したパケットが、ARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットである場合はS1202のYES、受信パケット判定部701はそのパケットをそのまま内側NIC104へ転送してS1203、一連の処理を終了するS1204。ステップS1202において、受信したパケットが、明らかに転送対象となる処理対象外パケットでない場合S1202のNOは、受信パケット判定部701は次にそのパケットがXPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットであるか否かを判定するS1205。判定の結果、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合はS1205のYES、受信パケット判定部701はそのパケットをそのままTCP/IPプロトコルスタック205へ転送してS1206、一連の処理を終了するS1204。ステップS1205において、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットでない場合はS1205のNO、受信パケット判定部701は次に当該パケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号でXPTCP処理対象マスタ208を検索するS1207。検索の結果、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208になければS1208のNO、当該パケットはXPTCPゲートウェイ装置101の処理対象外なので、受信パケット判定部701はそのパケットをそのまま内側NIC104へ転送してS1203、一連の処理を終了するS1204。ステップS1208において、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208にあればS1208のYES、当該パケットはXPTCPゲートウェイ装置101の処理対象であり、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える必要がある。そこで、受信パケット判定部701は更に受信したパケットの詳細を見る。受信パケット判定部701は、受信したパケットがTCPFINパケットであるか否かを判定するS1209。判定の結果、受信したパケットがTCPFINパケットであればS1209のYES、受信パケット判定部701は当該TCPFINパケットを索引ポート番号と共にレコード削除処理部703に引き渡す。レコード削除処理部703は、当該TCPFINパケットの索引ポート番号が削除予定リスト605にあることを確認したら、内側NICアドレステーブル209の、当該索引ポート番号に係るレコードのタイマ用カウンタ値フィールドに、アドレステーブル更新カウンタ213の値を書き込むS1210。その後、レコード削除処理部703はTCPFINパケットと索引ポート番号をアドレス置換部702に引き渡す。アドレス置換部702は、受信パケット判定部701からレコード削除処理部703を通じて引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPFINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換えるS1211。具体的には、パケットに付されている送信元MACアドレスを第二仮MACアドレスに、パケットに付されている送信元IPアドレスを第二仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを外側NICMACアドレスに、パケットに付されている宛先IPアドレスを外側NICIPアドレスに、パケットに付されている宛先ポート番号を動的ポート番号に書き換える。アドレス置換部702はIPアドレス等の置換処理を行った後、当該TCPFINパケットをTCP/IPプロトコルスタック205に送信してS1206、一連の処理を終了するS1204。ステップS1209において、受信したパケットがTCPFINパケットでなけばS1209のNO、当該パケットはTCPデータパケットである。そこで、受信パケット判定部701は当該TCPデータパケットを索引ポート番号と共にアドレス置換部702に引き渡す。アドレス置換部702は、受信パケット判定部701から引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPデータパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換えるS1212。具体的には、パケットに付されている送信元MACアドレスを第二仮MACアドレスに、パケットに付されている送信元IPアドレスを第二仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを外側NICMACアドレスに、パケットに付されている宛先IPアドレスを外側NICIPアドレスに、パケットに付されている宛先ポート番号を動的ポート番号に書き換える。アドレス置換部702はIPアドレス等の置換処理を行った後、当該TCPデータパケットをTCP/IPプロトコルスタック205に送信してS1206、一連の処理を終了するS1204。図13は、アドレス変換処理部203の、外側NIC108におけるパケット送信処理の動作の流れを示すフローチャートである。これは外側NIC送信処理部503の動作の流れに該当する。処理を開始するとS1301、送信パケット判定部は、最初にTCP/IPプロトコルスタック205から受け取ったパケットの種別と宛先IPアドレスを見る。パケットの種別がICMPパケットやUDPパケットである場合、パケットの種別がARP要求パケットで且つ探索IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスでない場合、パケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスではない場合はS1302のNO、これらのパケットはXPTCPゲートウェイ装置101が処理していないパケットである。そこで、送信パケット判定部はそのパケットに対して何ら加工せず、そのまま外側NIC108を通じて送信してS1303、一連の処理を終了するS1304。ステップS1302において、TCP/IPプロトコルスタック205から受け取ったパケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合、又はARP要求パケットであって且つ探索IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合S1302のYESは、更に当該パケットがARP要求パケットであるか否かを判定するS1305。ARP要求パケットであって且つ探索IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合S1305のYESは、このARP要求パケットはTCP/IPプロトコルスタック205が実在しない第二仮IPアドレスに対してパケットを送信しようとした結果、生成されたパケットである。このARP要求パケットは外側NIC108から送信させるのではなく、第二仮IPアドレスと同様に実在しないMACアドレスである第二仮MACアドレスで、ARP応答パケットを生成して返答しなければならない。そこで、送信パケット判定部は当該ARP要求パケットをARP応答処理部802に引き渡す。ARP応答処理部802は、送信パケット判定部からARP要求パケットを受け取ると、仮IPMACリストを参照して、第二仮MACアドレスでARP応答パケットを生成して、TCP/IPプロトコルスタック205に返送してS1306、一連の処理を終了するS1304。ステップS1305において、TCP/IPプロトコルスタック205から受け取ったパケットがTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合はS1305のNO、当該パケットはXPTCPゲートウェイ装置101が処理したパケットであり、パケットに付されているMACアドレス、IPアドレス及びポート番号を、内側NIC受信処理部501が書き換える以前の状態に書き戻す必要がある。そこで、送信パケット判定部は更に受信したパケットの詳細を見る。送信パケット判定部は、TCP/IPプロトコルスタック205から受け取ったパケットがTCPSYNパケットであるか否かを判定するS1307。判定の結果、TCP/IPプロトコルスタック205から受け取ったパケットがTCPSYNパケットであればS1307のYES、当該TCPSYNパケットはコネクションが新たに生成されたことを示すパケットである。その際、TCP/IPプロトコルスタック205がコネクションを生成する際に、送信元ポート番号として動的ポート番号を自動的に付与している。この動的ポート番号を、外側NICアドレステーブル210に記憶しておく必要がある。そこで、送信パケット判定部は当該TCPSYNパケットを動的ポート記録処理部803に引き渡す。動的ポート記録処理部803は、TCPSYNパケットを受け取ると、先ずTCPSYNパケットの送信元ポート番号を取得する。次に、宛先ポート番号に記されている索引ポート番号で外側NICアドレステーブル210を検索し、特定したレコードの動的ポート番号フィールドに、先に取得したTCPSYNパケットの送信元ポート番号を書き込むS1308。こうして、コネクションの開始を示すTCPSYNパケットに付されている動的ポート番号を記憶しておくことで、これ以降に当該コネクションを経由するパケットのIPアドレス等を正しく置換又は復元することができる。動的ポート記録処理部803は、動的ポート番号の記録を行った後、TCPSYNパケットをアドレス復元部902に引き渡す。アドレス復元部902は、先に動的ポート記録処理部803が特定した外側NICアドレステーブル210のレコードを参照して、TCPSYNパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を復元するS1309。そして、当該TCPSYNパケットを外側NIC108を通じて送信してS1303、一連の処理を終了するS1304。ステップS1307において、TCP/IPプロトコルスタック205から受け取ったパケットがTCPSYNパケットでなければS1307のNO、送信パケット判定部は当該TCPパケットをアドレス復元部902に引き渡す。アドレス復元部902は、TCPパケットの宛先ポート番号に付されている索引ポート番号で外側NICアドレステーブル210のレコードを検索してレコードを特定し、TCPパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を復元するS1309。そして、当該TCPSYNパケットを外側NIC108を通じて送信してS1303、一連の処理を終了するS1304。図14は、アドレス変換処理部203の、内側NIC104におけるパケット送信処理の動作の流れを示すフローチャートである。これは内側NIC送信処理部504の動作の流れに該当する。処理を開始するとS1401、送信パケット判定部は、最初にTCP/IPプロトコルスタック205から受け取ったパケットの種別と宛先IPアドレスを見る。パケットの種別がICMPパケットやARPパケットやUDPパケットである場合、パケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第一仮IPアドレスではない場合はS1402のNO、これらのパケットはXPTCPゲートウェイ装置101が処理していないパケットである。そこで、送信パケット判定部はそのパケットに対して何ら加工せず、そのまま内側NIC104を通じて送信してS1403、一連の処理を終了するS1404。ステップS1402において、TCP/IPプロトコルスタック205から受け取ったパケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第一仮IPアドレスである場合S1402のYESは、当該パケットはXPTCPゲートウェイ装置101が処理したパケットであり、パケットに付されているMACアドレス、IPアドレス及びポート番号を、内側NIC受信処理部501が書き換える以前の状態に書き戻す必要がある。そこで、送信パケット判定部は当該TCPパケットをアドレス復元部902に引き渡す。アドレス復元部902は、TCPパケットの宛先ポート番号に付されている索引ポート番号で内側NICアドレステーブル209のレコードを検索してレコードを特定し、TCPパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を復元するS1405。そして、当該TCPSYNパケットを内側NIC104を通じて送信してS1403、一連の処理を終了するS1404。[XPTCPゲートウェイ装置101の動作XPTCP処理部206の動作]図15は、XPTCP処理部206のXPTCP処理の流れを示すフローチャートである。XPTCP処理とは、TCP又はUDPパケットに対し、トランスポート層において所定の認証及び暗号化処理を施す処理である。XPTCP処理の基本的な技術内容は特許文献1に開示されているので、本実施形態では詳細には説明しない。その代わり、前述のアドレス変換処理部203及び後述するソケット処理部207で行っている、ソケットの処理に関係する内容を説明する。処理を開始するとS1501、イベント検出部1001はソケット処理部207から内側NIC104に対するコネクションに係るacceptイベントを検出したか否かを確認するS1502。acceptイベントを検出したならS1502のYES、イベント検出部1001はソケット操作部1002を制御して、当該acceptイベントに係る、生成されたソケットの、ソケットメモリ領域1004内におけるアドレスを取得するS1503。そして、イベント検出部1001はポリシー設定部1003を起動する。ポリシー設定部1003は当該acceptイベントに係るソケットに関し、索引ポート番号にてアドレス変換処理部203に対してポリシーの問い合わせを行う。アドレス変換処理部203のポリシー回答部506は、内側NICアドレステーブル209を索引ポート番号で検索してレコードを特定する。そして、特定したレコードの送信元IPアドレス及びポート番号、宛先IPアドレス及びポート番号を用いてXPTCP処理対象マスタ208を検索し、レコードを特定し、当該レコードのレコード番号を取得したら、そのレコード番号をポリシー設定部1003へ回答する。ポリシー設定部1003は、得られたレコード番号と索引ポート番号を、XPTCPポリシーテーブル211に記録して、紐付ける。この時点で、暗号化処理部1005は索引ポート番号を手がかりに、XPTCP処理対象マスタ208のレコードを特定して、暗号化のポリシーを設定することができるS1504。そして、一連の処理を終了するS1505。ステップS1502において、acceptイベントを検出できなかったならS1502のNO、イベント検出部1001は次にTCP/IPプロトコルスタック205から外側NIC108に対するコネクションに係るconnect応答イベントを検出したか否かを確認するS1506。connect応答イベントを検出したならS1506のYES、イベント検出部1001はソケット操作部1002を制御して、当該connect応答イベントに係る、生成されたソケットの、ソケットメモリ領域1004内におけるアドレスを取得するS1507。次に、イベント検出部1001は索引ポート番号を共有する、内側NIC104に対するコネクションに係るソケットと、外側NIC108に対するコネクションに係るソケットとの関連付けを行うS1508。この時点で、復号処理部1006は索引ポート番号を手がかりに、XPTCP処理対象マスタ208のレコードを特定して、復号のポリシーを設定することができるS1509。そして、一連の処理を終了するS1505。こうすることで、内側NIC104に対するコネクションに係るソケットから得られたストリームデータは、暗号化処理部1005を通じて暗号化され、暗号化されたストリームデータは外側NIC108に対するコネクションに係るソケットに出力される。また逆に、外側NIC108に対するコネクションに係るソケットから得られたストリームデータは、復号処理部1006を通じて復号され、復号されたストリームデータは内側NIC104に対するコネクションに係るソケットに出力される。ステップS1506において、connect応答イベントを検出できなかったならS1506のNO、イベント検出部1001は次にTCP/IPプロトコルスタック205から外側NIC108に対するコネクションに係るcloseイベントを検出したか否かを確認するS1510。closeイベントを検出したならS1510のYES、イベント検出部1001はソケット操作部1002を制御して、当該closeイベントに係る、生成されたソケット同士の関連付けを開放すると共に、XPTCPポリシーテーブル211の該当レコードを削除するS1511。そして、一連の処理を終了するS1505。ステップS1510において、closeイベントを検出できなかったならS1510のNO、イベント検出部1001は特に何もしない。その代わり、暗号化処理部1005及び復号処理部1006は、ソケット操作部1002からストリームデータを受け取り、XPTCPポリシーテーブル211で特定した暗号化又は復号ポリシーに基づいて暗号化又は復号処理を実行しS1512、ソケット操作部1002はそれら処理されたストリームデータを転送するS1513。そして、一連の処理を終了するS1505。[XPTCPゲートウェイ装置101の動作ソケット処理部207の動作]図16は、ソケット処理部207の初期動作の流れを示すフローチャートである。処理を開始するとS1601、ソケット処理部207は予め定められたポート番号に対する、TCPサーバ機能を起動するS1602。この時、内側NIC104に向けてリクエストを受け付けるためのソケットが作成されsocket関数、当該ソケットにはリクエストを受け付ける際のポート番号が定義されるbind関数。そして、一連の処理を終了するS1603。図17は、ソケット処理部207の接続要求転送処理の流れを示すフローチャートである。ソケット処理部207は、TCP/IPプロトコルスタック205からconnectイベントを受け取るとS1301、ソケットを通じて内側NIC104に対して接続許可を示すacceptイベントを発行するS1702。これはサーバとしての振る舞いである。次にソケット処理部207は、外側NIC108に向けて、接続を要求するconnectrequestイベントを発行するS1703。これはクライアントとしての振る舞いである。そして、一連の処理を終了するS1704。[XPTCPゲートウェイ装置101の動作アドレス変換処理部203によるパケットの変化]図18、図19及び図20は、XPTCPゲートウェイ装置101を通過するパケットの変化を示す概略図である。XPTCP非対応PC103には、第一MACアドレスと第一IPアドレスが付与されている。XPTCP対応サーバ107には、第二MACアドレスと第二IPアドレスが付与されている。XPTCP非対応PC103からXPTCP対応サーバ107に向けてパケットが送信されると、送信パケットは内側NIC104を通じて、アドレス変換処理部203に到達する。アドレス変換処理部203は内側NICアドレステーブル209を参照して、アドレス変換処理を施す。すると、送信パケットはアドレス変換処理済み送信パケットに変化する。アドレス変換処理済み送信パケットは、宛先IPアドレスが内側NIC104のIPアドレスである。したがって、TCP/IPプロトコルスタック205はアドレス変換処理済み送信パケットを受け入れ、パケットからMACヘッダ、IPヘッダ、TCPヘッダの順にヘッダを除去し、ペイロードを連結してストリームデータを復元する。復元されたストリームデータはソケットを通じてXPTCP処理部に到達する。XPTCP処理部はストリームデータに所定の暗号化処理を施す。そして、暗号化されたストリームデータは外側NIC108に向けて作成されたソケットに供給される。TCP/IPプロトコルスタック205は暗号化されたストリームデータを所定のバイト長に区切って、TCPヘッダ、IPヘッダ及びMACヘッダを付加し、暗号化及びアドレス変換処理済み送信パケットを作成する。つまり、この時点で作成されたパケットの宛先IPアドレスは、第二仮IPアドレスであり、本来の送信先であるXPTCP対応サーバ107のIPアドレス第二IPアドレスではない。そこで、アドレス変換処理部は外側NICアドレステーブル210を参照して、アドレス復元処理を施す。すると、暗号化及びアドレス変換処理済み送信パケットは、暗号化処理済み送信パケットとなって、XPTCP対応サーバ107に到達する。XPTCP対応サーバ107からXPTCP非対応PC103に向けて暗号化処理済み受信パケットが返送されると、暗号化処理済み受信パケットは外側NIC108を通じて、アドレス変換処理部203に到達する。アドレス変換処理部203は外側NICアドレステーブル210を参照して、アドレス変換処理を施す。すると、暗号化処理済み受信パケットは暗号化及びアドレス変換処理済み受信パケットに変化する。暗号化及びアドレス変換処理済み受信パケットは、宛先IPアドレスが外側NIC108のIPアドレスである。したがって、TCP/IPプロトコルスタック205は暗号化及びアドレス変換処理済み受信パケットを受け入れ、パケットからMACヘッダ、IPヘッダ、TCPヘッダの順にヘッダを除去し、ペイロードを連結して暗号化ストリームデータを復元する。復元された暗号化ストリームデータはソケットを通じてXPTCP処理部に到達する。XPTCP処理部はストリームデータに所定の復号処理を施す。そして、復号されたストリームデータは外側NIC108に向けて作成されたソケットに供給される。TCP/IPプロトコルスタック205は復号されたストリームデータを所定のバイト長に区切って、TCPヘッダ、IPヘッダ及びMACヘッダを付加し、アドレス変換処理済み受信パケットを作成する。つまり、この時点で作成されたパケットの宛先IPアドレスは、第一仮IPアドレスであり、本来の送信先であるXPTCP非対応PC103のIPアドレス第一IPアドレスではない。そこで、アドレス変換処理部は内側NICアドレステーブル209を参照して、アドレス復元処理を施す。すると、アドレス変換処理済み受信パケットは、受信パケットとなって、XPTCP非対応PC103に到達する。[XPTCPゲートウェイ装置101の動作TCP接続確立シーケンス]図21、図22及び図23は、XPTCPゲートウェイ装置101における、TCP接続確立シーケンスのタイムチャートである。図21はタイムチャート全体を示す俯瞰図であり、図22はタイムチャートのうち、前半の処理内容を示す詳細図であり、図23はタイムチャートのうち、後半の処理内容を示す詳細図である。端末からTCPSYNパケットが送信されたことに呼応して、端末とXPTCPゲートウェイ装置101との間と、サーバとXPTCPゲートウェイ装置101都の間との夫々に、TCPコネクションが形成される迄の、XPTCPゲートウェイ装置101の時系列上の動作の推移を示す。XPTCP非対応PC103がwebブラウザ等のアプリケーションプログラムを動作させて、XPTCP対応サーバ107へ接続しようとすると、XPTCP非対応PC103はアプリケーションプログラムに起因してTCPSYNパケットを送信するS2101。TCPSYNパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCPSYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2102。なお、この時点で内側NICアドレステーブル209に新規レコードが追記録され、当該レコードは索引ポート番号で特定可能になる。アドレス変換処理を施されたTCPSYNパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ソケット処理部207が予め作成していたポート番号に対して送信されたTCPSYNパケットを認識して、コネクションの作成を開始するために、ソケット処理部207に対してconnectイベントを発行するS2103。ソケット処理部207は、自身のサーバ機能によって、connectイベント接続要求に対するacceptイベント接続許可を、TCP/IPプロトコルスタック205に対して発行するS2104。XPTCP処理部206は、このacceptイベントをフックして、内側NIC104に向けたコネクションの形成が始まったことを認識するS2105。すると、XPTCP処理部206はアドレス変換処理部203に対して、索引ポート番号を伴って当該コネクションに適用するポリシーを問い合わせるS2106。アドレス変換処理部203はこの問い合わせに対してXPTCP処理対象マスタ208と内側NICアドレステーブル209を参照して、XPTCP処理対象マスタ208のレコード番号を回答するS2107。XPTCP処理部206はXPTCPポリシーテーブル211にレコード番号と索引ポート番号を登録して紐付けて、復号処理部1006のポリシーを設定するS2108。ステップS2104にて発行されたacceptイベントはTCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はacceptイベントを受けて、TCPACK/SYNパケットを生成するS2109。TCPACK/SYNパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC送信処理部504は、TCPACK/SYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を復元するS2110。TCPACK/SYNパケットは、内側NIC104を通じてXPTCP非対応PC103に到達する。XPTCP非対応PC103は、TCPACK/SYNパケットを受けて、TCPACKパケットで応答するS2111。TCPACKパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCPACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2112。アドレス変換処理を施されたTCPACKパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPACKパケットの到着を以て、コネクションが確立したことを認識するS2113。これ以降、当該コネクションにはTCPデータパケットが送受信される。ソケット処理部207は、ステップS2104にて内側NIC104に向けてサーバ機能としてのacceptイベントを発行した後、外側NIC108に向けてクライアント機能として接続要求を示すconnectrequestイベントを発行するS2114。connectrequestイベントはTCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はconnectrequestイベントを受けて、ARP要求パケットを生成するS2115。ARP要求パケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、ARP要求パケットに対するARP応答パケットを生成し、TCP/IPプロトコルスタック205に返送するS2116。TCP/IPプロトコルスタック205は、ARP応答パケットを受け取ると、ステップS2114におけるconnectrequestイベントに対応するTCPSYNパケットを生成する準備が整ったので、TCPSYNパケットを生成するS2117。ステップS2117にて生成されるTCPSYNパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCPSYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2118。なお、この時点で外側NICアドレステーブル210の該当レコードに、TCPSYNパケットの送信元ポート番号として、TCP/IPプロトコルスタック205によって自動的に付されている動的ポート番号が記録される。TCPSYNパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する。XPTCP対応サーバ107は、TCPSYNパケットを受けて、TCPACK/SYNパケットで応答するS2119。TCPACK/SYNパケットは、外側NIC108を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC受信処理部502は、TCPACK/SYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2120。アドレス変換処理を施されたTCPACK/SYNパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPACK/SYNパケットを受けて、TCPACKパケットで応答するS2121。このとき、TCP/IPプロトコルスタック205はconnect応答イベントをクライアントプログラムであるソケット処理部207に通知する。XPTCP処理部206は、このconnect応答イベントをフックして、外側NIC108に向けたコネクションの形成が始まったことを認識するS2122。すると、XPTCP処理部206はアドレス変換処理部203に対して、索引ポート番号を伴って当該コネクションに適用するポリシーを問い合わせるS2123。アドレス変換処理部203はこの問い合わせに対してXPTCP処理対象マスタ208と内側NICアドレステーブル209を参照して、XPTCP処理対象マスタ208のレコード番号を回答するS2124。XPTCP処理部206はXPTCPポリシーテーブル211にレコード番号と索引ポート番号を登録して紐付けて、暗号化処理部1005のポリシーを設定するS2125。ステップS2121にてTCP/IPプロトコルスタック205から発行されたTCPACKパケットは、アドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCPACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を復元するS2126。TCPACKパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する。XPTCP対応サーバ107は、TCPACKパケットの到着を以て、コネクションが確立したことを認識するS2127。これ以降、当該コネクションにはTCPデータパケットが送受信される。[XPTCPゲートウェイ装置101の動作TCPデータ転送シーケンス]図24は、XPTCPゲートウェイ装置101における、TCPデータ転送シーケンスのタイムチャートである。端末からTCPデータパケットが送信されたことに呼応して、端末とXPTCPゲートウェイ装置101との間と、サーバとXPTCPゲートウェイ装置101都の間との夫々に形成されたTCPコネクションにTCPデータパケットが通過する際の、XPTCPゲートウェイ装置101の時系列上の動作の推移を示す。XPTCP非対応PC103がwebブラウザ等のアプリケーションプログラムを動作させて、XPTCP対応サーバ107へデータを送信しようとすると、XPTCP非対応PC103はアプリケーションプログラムに起因してTCPデータパケットを送信するS2401。TCPデータパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2402。アドレス変換処理を施されたTCPデータパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPデータパケットのヘッダを除去して、TCPデータパケットペイロードを連結し、ストリームデータに復元するS2403。ストリームデータはXPTCP処理部206によって暗号化処理が施され、外側NIC108のソケットに転送されるS2404。暗号化処理を施されたストリームデータは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ストリームデータを所定のバイト長毎に分割した後、ヘッダを付加して、TCPデータパケットに変換するS2405。TCPデータパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2406。アドレス復元処理を施されたTCPデータパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達するS2407。XPTCP対応サーバ107は、TCPデータパケットを受けて、所定の処理を行った後、返信データとしてのTCPデータパケットを、XPTCP非対応PC103に向けて送信するS2408。TCPデータパケットは、外側NIC108を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC受信処理部502は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2409。アドレス変換処理を施されたTCPデータパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPデータパケットのヘッダを除去して、TCPデータパケットペイロードを連結し、ストリームデータに復元するS2410。ストリームデータはXPTCP処理部206によって復号処理が施され、内側NIC104のソケットに転送されるS2411。復号処理を施されたストリームデータは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ストリームデータを所定のバイト長毎に分割した後、ヘッダを付加して、TCPデータパケットに変換するS2412。TCPデータパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC送信処理部504は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2413。アドレス復元処理を施されたTCPデータパケットは、内側NIC104を通じてXPTCP非対応PC103に到達するS2414。[XPTCPゲートウェイ装置101の動作TCP切断シーケンス]図25、図26及び図27は、XPTCPゲートウェイ装置101における、TCP切断シーケンスのタイムチャートである。図25はタイムチャート全体を示す俯瞰図であり、図26はタイムチャートのうち、前半の処理内容を示す詳細図であり、図27はタイムチャートのうち、後半の処理内容を示す詳細図である。端末からTCPFINパケットが送信されたことに呼応して、端末とXPTCPゲートウェイ装置101との間と、サーバとXPTCPゲートウェイ装置101との間の夫々に形成されていたTCPコネクションを終了close:クローズされる迄の、XPTCPゲートウェイ装置101の時系列上の動作の推移を示す。XPTCP非対応PC103がwebブラウザ等のアプリケーションプログラムを動作させて、XPTCP対応サーバ107に対して所定のデータを要求し、その要求したデータが得られたなら、XPTCP非対応PC103はアプリケーションプログラムに起因してTCPFINパケットを送信するS2501。TCPFINパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCPFINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2102。なお、この時点で削除予定リスト605に索引ポート番号が追記録される。アドレス変換処理を施されたTCPFINパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ソケット処理部207が予め作成していたポート番号に対して送信されたTCPFINパケットを認識して、サーバプログラムであるソケット処理部207にコネクションの終了を通知するために、ソケット処理部207に対してcloseイベントを発行するS2503。ソケット処理部207は、ステップS2503にて内側NIC104に向けてサーバ機能としてのcloseイベントを受け取った後、外側NIC108に向けてクライアント機能として切断要求を示すcloserequestイベントを発行するS2504。closerequestイベントはTCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はcloserequestイベントを受けて、TCPFINパケットを生成するS2505。ステップS2505にて生成されるTCPFINパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCPFINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2506。TCPFINパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達するS2507。XPTCP対応サーバ107は、TCPFINパケットを受けて、XPTCP非対応PC103に対して送信すべきデータを全て送信したと判断したら、TCPACK/FINパケットを送信するS2508。TCPACK/FINパケットは、外側NIC108を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC受信処理部502は、TCPACK/FINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2509。アドレス変換処理を施されたTCPACK/FINパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPACK/FINパケットを受けて、TCPACKパケットで応答するS2510。このとき、TCP/IPプロトコルスタック205はclose応答イベントをクライアントプログラムであるソケット処理部207に通知する。XPTCP処理部206は、このclose応答イベントをフックして、外側NIC108に向けたコネクションと内側NIC104に向けたコネクションとの関連付けを解放するS2511。ステップS2510にてTCP/IPプロトコルスタック205によって生成されるTCPACKパケットは、アドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCPACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2512。TCPACKパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する。XPTCP対応サーバ107は、TCPACKパケットを受けて、当該パケットに係るコネクションの切断が完了したクローズされたことを認識するS2513。一方、ステップS2510にてTCP/IPプロトコルスタック205によって生成されるclose応答イベントは、ソケット処理部207に到達する。ソケット処理部207は、close応答イベントを検出すると、外側NIC108に向けたコネクションに対するTCPFINパケットが来たことを認識する。この時点で、対応する内側NIC104に向けたコネクションの切断処理も遂行できることとなる。そこで、ステップS2503にてTCP/IPプロトコルスタック205が送出したcloseイベントに対する応答として、許可を意味するacceptイベントを、TCP/IPプロトコルスタック205に送出するS2514。ステップS2514にてソケット処理部207が送出したacceptイベントは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はacceptイベントを受けて、TCPACK/FINパケットを生成するS2515。TCPACK/FINパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC送信処理部504は、TCPACK/FINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を復元するS2516。TCPACK/FINパケットは、内側NIC104を通じてXPTCP非対応PC103に到達する。XPTCP非対応PC103は、TCPACK/FINパケットを受けて、TCPACKパケットで応答するS2517。TCPACKパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCPACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換するS2518。アドレス変換処理を施されたTCPACKパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPACKパケットの到着を以て、コネクションの切断が完了したことを認識するS2519。一方、ステップS2509にてアドレス変換を行った後、アドレス変換処理部はアドレステーブル更新カウンタの値を、内側NICアドレステーブル209及び外側NICアドレステーブル210のタイマ用カウンタ値フィールドに書き込むS2520。テーブル更新処理部505は定期的に内側NICアドレステーブル209及び外側NICアドレステーブル210のカウンタ値フィールドを監視し、所定時間が経過したら、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当レコードを削除するS2521、S2522。なお、TCPコネクションを切断する手段は、TCPFINパケットだけではない。アプリケーションプログラムのフリーズ等、異常な状態に陥った時にTCPコネクションを強制的に切断するために、TCPRSTパケットが存在する。TCPRSTパケットが発生した際の切断シーケンスは、図25、図26及び図27の点線で囲った範囲の処理が変わることとなるが、詳細は割愛する。[まとめ]XPTCP非対応PC102から受信したパケットP1402は、内側NIC104及び外側NIC108のIPアドレスとは無関係である。このため、パケットP1402のままでは、TCP/IPプロトコルスタック205が所定のパケットの処理を行うことができない。そこで、一旦内側NICアドレステーブル209のレコードに、パケットP1402に付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号をメモしておく。更に、後で書き戻すために索引となるポート番号を連番で付与する。そして、TCP/IPプロトコルスタック205がパケットの受信処理ができるようにするために、パケットP1402を第一仮IPアドレスを有する架空のホストから、内側NICのIPアドレスに向けて送信されたパケットとする、パケットP1405に書き換える。なお、この時、送信元ポート番号には索引PORTを付与し、宛先ポート番号は敢えて変更しない。殆どの場合、宛先ポート番号は周知のウェルノウンポートwellknownportと呼ばれる特定のポート番号である。また、XPTCPも特定のサービスに向けて実装している。XPTCPはサービス毎に異なった暗号化処理を施す必要があり、宛先ポート番号でサービスを区別しなければならないので、内側NIC受信処理部501はパケットに付されている送信元及び宛先MACアドレス、IPアドレス及びポート番号を書き換える際、宛先ポート番号だけは変更しない。以上説明したように、XPTCPゲートウェイ装置101は、受信したパケットを一旦内部のTCP/IPプロトコルスタック205が扱えるように、受信したパケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き換える。そして、送信する直前に再度送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き戻す。このため、XPTCPゲートウェイ装置101は既存のネットワーク環境に全く設定の変更を要することなく、単に通信経路上にXPTCPゲートウェイ装置101を挟み込むように接続するだけで、容易にXPTCP機能を提供することができる。更に副次的効果として、XPTCPゲートウェイ装置101に接続されるあらゆる端末やサーバからは、XPTCPゲートウェイ装置101を認識することができない。PING等のICMPパケットすらそのまま転送されてしまうので、XPTCPゲートウェイ装置101はネットワーク的に全く見えない装置として作用する。そして更に副次的効果として、XPTCPゲートウェイ装置101の内側NIC104及び外側NIC108に設定するIPアドレスは、XPTCPゲートウェイ装置101に接続されるあらゆるホストと干渉しない。つまり、内側NIC104及び外側NIC108に設定するIPアドレスは、XPTCPゲートウェイ装置101が接続されるサブネットとは一切関係の無いIPアドレスを設定しても、或は接続されるホストと重複するIPアドレスであっても全く問題がない。全てのパケットはXPTCPゲートウェイ装置101内部でアドレス変換が施され、送信される際にはアドレスが書き戻されるので、内側NIC104及び外側NIC108に設定するIPアドレスはネットワークの外に現れない。内側NIC104及び外側NIC108に設定するIPアドレスは、ループバックアドレスやマルチキャストアドレス等の特殊なものを除いて、何を設定してもよいのである。[応用例]本実施形態に係るXPTCPゲートウェイ装置101は、以下のような応用例が考えられる。1XPTCPゲートウェイ装置101は、容易にサーバ機能を実装することができる。例えば、XPTCP処理対象マスタを編集するためのユーザインターフェースを提供するためにwebサーバプログラムを稼働させて、予め特定のポート番号に対応しておく。一例として、10030というポート番号を用いるとする。XPTCP処理部206は、宛先ポート番号がこの10030であった場合、暗号化処理を施すことなく、そのままwebサーバプログラムに引き渡す。このようにXPTCP処理部206を構成することで、XPTCPゲートウェイ装置101は容易にサーバ機能を実装できる。2アドレス変換処理部203が、内側NICアドレステーブル209と外側NICアドレステーブル210の、二つのテーブルで送信元及び宛先MACアドレス、IPアドレス及びポート番号を書き換える実装形態であることには理由がある。外側NICアドレステーブル210の、宛先IPアドレスフィールドを書き換えると、端末が意図しているIPアドレスとは別のIPアドレスのサーバと通信することができる。図28は、XPTCPゲートウェイ装置101において、送信するパケットの宛先IPアドレスを書き換える応用形態を説明する概略図である。端末2801にはAというIPアドレスが付与されている。今、端末2801はBというIPアドレスが付与されているサーバ2802に接続しようと、パケットP2803を送信したとする。パケットP2803の送信元IPアドレスはAであり、宛先IPアドレスはBである。XPTCPゲートウェイ装置101の内側NICアドレステーブル209は、AとBという対応関係を忠実に再現できる必要があるので、そのままのIPアドレスが記録される。しかし、外側NICアドレステーブル210は、AとBという対応関係を必ずしも忠実に再現できていなくてもよい。今、宛先IPアドレスをCに書き換えると、XPTCPゲートウェイ装置101から送出されるパケットP2804は、送信元IPアドレスがAであり、宛先IPアドレスがCになる。すると、パケットP2804はIPアドレスがCのサーバ2805に到達する。このように、XPTCPゲートウェイ装置101は、外側NICアドレステーブル210に登録されている宛先IPアドレスを書き換えることで、宛先IPアドレスを端末2801が把握していない先で変換することができる。この動作を応用すると、XPTCPゲートウェイ装置101を二台以上数珠繋ぎに構成することで、容易にVPNVitualPrivateNetworkを構築できる。3アドレス変換処理部203が、内側NICアドレステーブル209と外側NICアドレステーブル210の、二つのテーブルで送信元及び宛先MACアドレス、IPアドレス及びポート番号を書き換える実装形態であることには理由がある。外側NICアドレステーブル210の、送信元IPアドレスフィールドを書き換えると、サーバの側に存在する悪意ある第三者から、端末2801の本当のIPアドレスを隠蔽することができる。図29は、XPTCPゲートウェイ装置101において、送信するパケットの送信元IPアドレスを書き換える応用形態を説明する概略図である。端末2901にはAというIPアドレスが付与されている。今、端末2901はBというIPアドレスが付与されているサーバ2902に接続しようと、パケットP2903を送信したとする。パケットP2903の送信元IPアドレスはAであり、宛先IPアドレスはBである。XPTCPゲートウェイ装置101の内側NICアドレステーブル209は、AとBという対応関係を忠実に再現できる必要があるので、そのままのIPアドレスが記録される。しかし、外側NICアドレステーブル210は、AとBという対応関係を必ずしも忠実に再現できていなくてもよい。今、送信元IPアドレスをDに書き換えると、XPTCPゲートウェイ装置101から送出されるパケットP2904は、送信元IPアドレスがDであり、宛先IPアドレスがBになる。すると、サーバ2902から見るとあたかも送信元IPアドレスがDの仮想端末2905から送信されたように見えるので、IPアドレスAの端末2901の存在を隠蔽することができる。このように、XPTCPゲートウェイ装置101は、外側NICアドレステーブル210に登録されている送信元IPアドレスを書き換えることで、送信元IPアドレスを悪意ある第三者から隠蔽することができる。4暗号化処理部1005は、TCP/IPプロトコルスタック205がTCPデータパケットからペイロード部分を取り出して復元したストリームデータに対して、暗号化処理を施す。この暗号化処理は、必ずしもストリームデータ全体を暗号化するとは限らない。例えば、周知のTELNETTCPポート23番の場合は、ストリームデータを全て暗号化する必要がある。しかし、例えば周知のSMTPSimpleMailTransferProtocol:TCPポート25番の場合は、送信したメールがSMTPサーバを転々と転送される可能性がある。その際、全てのSMTPサーバがXPTCPの認証及び暗号化処理に対応することは困難である。そこで、送信元の端末と、最終的に受信する側のホストのみ認証及び暗号化処理に対応させ、暗号化の対象はSMTPメッセージの本文のみとする。周知のように、SMTPメッセージは一行の空改行をセパレータとしてヘッダと本文に分けられ、ヘッダにはメールがSMTPサーバ等のホストを経由する際に記録される情報Received:ヘッダが追記される。本実施形態の暗号化処理部1005も、SMTPやHTTP等、ストリームデータがヘッダと本文とに分離できるプロトコルの場合等、プロトコルに応じて暗号化の対象をストリームデータ全部ではなく本文のみとする、といった処理が含まれることが好ましい。本実施形態では、ネットワークゲートウェイ装置を開示した。既存のネットワークOSに標準搭載されているTCP/IPプロトコルスタック205の機能を最大限有効に活用しつつ、必要最小限のプログラムを追加することでXPTCPゲートウェイ装置101を実現するために、TCP/IPプロトコルスタック205を騙す処理を施す。XPTCPゲートウェイ装置101に割り当てられているIPアドレスとは無関係である筈のパケットをTCP/IPプロトコルスタック205が処理できるようにするために、予めパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を内側NICアドレステーブル209及び外側NICアドレステーブル210にメモしておく。その上で、受信したパケットに付されている送信元MACアドレス及び送信元IPアドレスは偽のMACアドレス及び偽のIPアドレスに、宛先MACアドレス及び宛先IPアドレスはXPTCPゲートウェイ装置101に割り当てられているIPアドレス及びMACアドレスに書き換えてから、TCP/IPプロトコルスタック205に与える。更に、パケットを本来の送信先へ送信する際には、XPTCPゲートウェイ装置101に割り当てられているIPアドレス及びMACアドレスから偽のMACアドレス及び偽のIPアドレスに返送するように、TCP/IPプロトコルスタック205を騙し、TCP/IPプロトコルスタック205から送信されるパケットの送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを先に書換テーブルにメモした本来のアドレスに書き戻して、本来の送信先へ送信する。このようにXPTCPゲートウェイ装置101は、受信したパケットを一旦内部のTCP/IPプロトコルスタック205が扱えるように、受信したパケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き換える。そして、送信する直前に再度送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き戻す。このため、XPTCPゲートウェイ装置101は既存のネットワーク環境に全く設定の変更を要することなく、単に通信経路上にXPTCPゲートウェイ装置101を挟み込むように接続するだけで、容易にXPTCP機能を提供することができる。以上、本発明の実施形態例について説明したが、本発明は上記実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。