JP2009152953A - ゲートウェイ装置およびパケット転送方法 - Google Patents
ゲートウェイ装置およびパケット転送方法 Download PDFInfo
- Publication number
- JP2009152953A JP2009152953A JP2007329803A JP2007329803A JP2009152953A JP 2009152953 A JP2009152953 A JP 2009152953A JP 2007329803 A JP2007329803 A JP 2007329803A JP 2007329803 A JP2007329803 A JP 2007329803A JP 2009152953 A JP2009152953 A JP 2009152953A
- Authority
- JP
- Japan
- Prior art keywords
- packet
- ack
- sequence number
- header
- entry
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims description 123
- 238000006243 chemical reaction Methods 0.000 claims abstract description 351
- 230000008859 change Effects 0.000 claims abstract description 12
- 238000012546 transfer Methods 0.000 claims description 165
- 230000008569 process Effects 0.000 claims description 104
- 239000000872 buffer Substances 0.000 claims description 54
- 238000012545 processing Methods 0.000 claims description 33
- 238000001514 detection method Methods 0.000 claims description 21
- 230000005540 biological transmission Effects 0.000 claims description 18
- 238000012217 deletion Methods 0.000 claims description 10
- 230000037430 deletion Effects 0.000 claims description 10
- 230000006870 function Effects 0.000 claims description 8
- 230000000694 effects Effects 0.000 description 8
- 230000003139 buffering effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/163—In-band adaptation of TCP data exchange; In-band control procedures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
【課題】クライアント−サーバ間のTCPコネクションを終端せずに転送パケットのAPヘッダを書換える。
【解決手段】ゲートウェイモジュール110の変換部116は、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号(Seq#)とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のSeq#との組を、予想Seq#及び変換Seq#の組、並びに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack#及び変換Ack#の組として変換テーブル117に登録する。そして、変換部116は、次のパケットの転送時に、変換テーブル117を参照して、転送するパケットのTCPヘッダに含まれるSeq#およびAck#を、それらに一致する予想Seq#および予想Ack#に対応する変換Seq#および変換Ack#に書換える。
【選択図】図1
【解決手段】ゲートウェイモジュール110の変換部116は、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号(Seq#)とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のSeq#との組を、予想Seq#及び変換Seq#の組、並びに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack#及び変換Ack#の組として変換テーブル117に登録する。そして、変換部116は、次のパケットの転送時に、変換テーブル117を参照して、転送するパケットのTCPヘッダに含まれるSeq#およびAck#を、それらに一致する予想Seq#および予想Ack#に対応する変換Seq#および変換Ack#に書換える。
【選択図】図1
Description
本発明は、端末間のTCPコネクション上を流れるパケットのデータを書換えて転送するゲートウェイ装置に関する。
クライアント−サーバ間で送受信されるメッセージの転送を行うゲートウェイにおいて、アプリケーションヘッダ(以下APヘッダ)の書換えを行う仕組みが広く利用されている。
たとえば、SIPにおいては、プライベートネットワークに接続したクライアントがグローバルネットワークに設置されたサーバへメッセージを送信する際に、ゲートウェイにおいてAPヘッダの書換えが行われる。SIPでは、クライアントが送信するメッセージのAPヘッダにクライアントのIPアドレスが含まれており、サーバはこのIPアドレスを宛先アドレスとしてクライアントへメッセージを送信する。若し、クライアントがサーバへ送信したメッセージに含まれるIPアドレスがプライベートアドレスのままであると、メッセージの送信が失敗するため、前述のようにゲートウェイにおいてクライアント送信メッセージのAPヘッダに含まれるIPアドレスをグローバルアドレスに変換している。
また、サーバのマルチテナント利用(複数のクライアントグループ(テナント)で単一のサーバをあたかもテナント専用のサーバであるかのように安全に共用する利用形態)を実現するために、ゲートウェイにおいてメッセージのAPヘッダ書換えを行う場合もある。
たとえば、特許文献1には、WEBキャッシュサーバをマルチテナントで利用するために、ゲートウェイがメッセージ転送の際にAPヘッダの書換えを行う方法が記載されている。ゲートウェイは、クライアントがWEBキャッシュサーバへ送信するHTTPメッセージのAPヘッダに含まれる宛先URLに、クライアントが所属するテナントの識別子を強制的に挿入する。こうすることで、WEBキャッシュサーバにはテナント識別子付きのURLでキャッシュが蓄積されるとともに、キャッシュアクセスもテナント識別子付きのURLで行われるため、キャッシュは同一テナントのクライアント間でしか閲覧できず、複数テナントで単一のWebキャッシュサーバを安全に共用できるようになる。
また、特許文献2には、SIPサーバをマルチテナントで利用するために、ゲートウェイがメッセージ転送の際にAPヘッダの書換えを行う方法が記載されている。ゲートウェイは、クライアントがSIPサーバへ送信するSIPメッセージのAPヘッダに含まれる送信元URIならびに宛先URIへ、クライアントが所属するテナントの識別子を強制的に挿入する。こうすることで、SIPサーバにはテナント識別子付きのURIでクライアント情報が蓄積されるとともに、クライアント情報へのアクセスもテナント識別子付きのURIで行われるため、クライアント情報が同一テナントに属するクライアント間でしか利用できず、複数テナントで単一のSIPサーバを安全に共用できるようになる。
上述のように、ゲートウェイがクライアント−サーバ間で送受信されるメッセージのAPヘッダを書換えて転送する場合、APヘッダの書換えに伴ってパケットサイズが変わると、クライアントまたはサーバが送信した際のパケットサイズとサーバまたはクライアントが受信した際のパケットサイズが異なる場合がある。このため、トランスポート層のプロトコルにTCPを使用する場合、ゲートウェイがクライアントまたはサーバから受信したパケットのシーケンス番号(Sequence Number。以下、Seq#と記す)と確認応答番号(Acknowledgement Number。以下、Ack#と記す)を書換えずにそのままサーバまたはクライアントに転送すると、サーバおよびクライアントはSeq#およびAck#からパケットロスを正しく把握できなくなる。このため、APヘッダの書換えに伴ってパケットサイズが変わる場合には、ゲートウェイにおいてTCPコネクションの終端処理を行っている。
他方、ゲートウェイにおいてAPヘッダを書換えないか、或いは書換えてもパケットサイズが変わらない場合には、TCPコネクションの終端処理を行わないことで、ゲートウェイの処理負荷を軽減することができる。そのような技術の一例が特許文献3に記載されている。特許文献3に記載される技術では、クライアントとサーバとの間に中継装置としての交換機が介在しており、クライアントと交換機との間に確立したTCPコネクションと、交換機とサーバとの間に確立したTCPコネクションとを1つに接続することにより、クライアントとサーバとのそれぞれにTCPによるパケットの再送およびフロー制御を行わせ、交換機が当該TCPコネクションに関する再送制御やフロー制御を行う必要がないようにしている。具体的には、クライアントと交換機との間にTCPコネクションが張られた際のクライアントの初期Seq#をSC、交換機の初期Seq#をSU、サーバと交換機との間にTCPコネクションが張られた際のサーバの初期Seq#をSS、交換機の初期Seq#をSVとする場合、Seq/Ack#を以下のように書換える。まず、サーバからクライアントへ送られるパケットのSeq#は「パケット中のSeq#+SU−SS」に書換え、Ack#は「パケット中のAck#+SC−SV」に書換える。また、クライアントからサーバへ送られるパケットのSeq#は「パケット中のSeq#+SV−SC」に書換え、Ack#は「パケット中のAck#+SS−SU」に書換える。
上述したように従来においては、APヘッダの書換えに伴ってパケットサイズが変わる場合、ゲートウェイにおいてTCPコネクションの終端処理を行っている。このため、ゲートウェイにTCPコネクションの終端処理に伴う負荷がかかっていた。具体的には、ゲートウェイには主に以下の処理に伴う負荷がかかっていた。
(A)再送制御
(1)クライアント(またはサーバ)から通知されるAck#をチェックして転送パケットがクライアント(またはサーバ)に届いていることを確認し、パケットロスの発生時にパケットの再送を行うための処理負荷。
(2)パケットロス発生に備えクライアント(またはサーバ)からAck#を受信するまで、サーバ(またはクライアント)から受信したパケットをバッファリングしておくための処理負荷。
(1)クライアント(またはサーバ)から通知されるAck#をチェックして転送パケットがクライアント(またはサーバ)に届いていることを確認し、パケットロスの発生時にパケットの再送を行うための処理負荷。
(2)パケットロス発生に備えクライアント(またはサーバ)からAck#を受信するまで、サーバ(またはクライアント)から受信したパケットをバッファリングしておくための処理負荷。
(B)フロー制御
(1)ネットワークにおいて輻輳が発生した際に輻輳を悪化させないように、ネットワークの輻輳状態(パケットロス)に応じてクライアントまたはサーバからAckを受け取らずに一度に転送可能なパケットの数を調整するための処理負荷。
(2)自身のパケットバッファ空き容量に応じて受信可能なパケット数を計算し、クライアントまたはサーバへ通知するための処理負荷。
(1)ネットワークにおいて輻輳が発生した際に輻輳を悪化させないように、ネットワークの輻輳状態(パケットロス)に応じてクライアントまたはサーバからAckを受け取らずに一度に転送可能なパケットの数を調整するための処理負荷。
(2)自身のパケットバッファ空き容量に応じて受信可能なパケット数を計算し、クライアントまたはサーバへ通知するための処理負荷。
(C)ユーザランドとカーネルランド間のパケットコピー
上記A、Bの処理はカーネルランドで動作するTCPスタックにおいて実施されるのに対して、APヘッダの書換えはユーザランドで動作するプログラムがTCPスタックからTCPソケットを利用しパケットに含まれるデータをストリーム形式で受け取って処理するため、ユーザランドとカーネルランド間でデータのコピーを頻繁に行うことによる処理負荷。
上記A、Bの処理はカーネルランドで動作するTCPスタックにおいて実施されるのに対して、APヘッダの書換えはユーザランドで動作するプログラムがTCPスタックからTCPソケットを利用しパケットに含まれるデータをストリーム形式で受け取って処理するため、ユーザランドとカーネルランド間でデータのコピーを頻繁に行うことによる処理負荷。
本発明の目的は、クライアント−サーバ間など端末間のTCPコネクションを終端せずに転送パケットのAPヘッダを書換えることが可能なゲートウェイを提供することで、上述したA〜Cの処理に伴う負荷を無くし、端末間のメッセージ転送性能を改善することにある。
本発明の第1のゲートウェイ装置は、端末間のTCPコネクションを流れるパケットのTCPヘッダ以降のデータであるAPヘッダを書換えて転送するゲートウェイ装置であって、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のシーケンス番号との組を、予想シーケンス番号および変換シーケンス番号の組、ならびに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack番号および変換Ack番号の組として登録するエントリを有する番号変換テーブルと、パケットの転送時に、前記番号変換テーブルを参照して、転送するパケットのTCPヘッダに含まれるシーケンス番号およびAck番号を、それらに一致する予想シーケンス番号および予想Ack番号に対応する変換シーケンス番号および変換Ack番号に書換える番号書換処理を行う変換手段とを備える。
本発明の第1のパケット転送方法は、ゲートウェイ装置において端末間のTCPコネクションを流れるパケットのTCPヘッダ以降のデータであるAPヘッダを書換えて転送する方法であって、前記ゲートウェイ装置が、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のシーケンス番号との組を、予想シーケンス番号および変換シーケンス番号の組、ならびに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack番号および変換Ack番号の組として番号変換テーブルに登録するステップと、前記ゲートウェイ装置が、パケットの転送時に、前記番号変換テーブルを参照して、転送するパケットのTCPヘッダに含まれるシーケンス番号およびAck番号を、それらに一致する予想シーケンス番号および予想Ack番号に対応する変換シーケンス番号および変換Ack番号に書換える番号書換処理を行うステップとを含む。
本発明によれば、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれるシーケンス番号とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のシーケンス番号との組を、予想シーケンス番号および変換シーケンス番号の組、ならびに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack番号および変換Ack番号の組として、番号変換テーブルのエントリに登録し、パケットの転送時に、前記番号変換テーブルを参照して、転送するパケットのTCPヘッダに含まれるシーケンス番号およびAck番号を、それらに一致する予想シーケンス番号および予想Ack番号に対応する変換シーケンス番号および変換Ack番号に書換えるため、転送されるパケットのサイズがAPヘッダの書換えによって変化しても、パケットの送信側および受信側がパケット中のシーケンス番号およびAck番号からパケットロスを正しく把握することが可能となる。これにより、パケットの再送制御やフロー制御などのTCPで行われる制御がパケットの送受信側で行われ、パケットを中継するゲートウェイ装置においてTCPコネクションを終端する必要がなくなり、ゲートウェイ装置の負荷軽減が可能になる。
『第1の実施の形態』
次に、本発明の第1の実施の形態について図面を参照して詳細に説明する。
次に、本発明の第1の実施の形態について図面を参照して詳細に説明する。
[構成の説明]
図1を参照すると、本発明の第1の実施の形態に係るゲートウェイモジュール110は、クライアント端末装置(以下クライアント)200とサーバ端末装置(以下サーバ)300との間のTCPコネクションを終端することなく両端末間で送受信されるパケットをインターセプトし、アプリケーションヘッダ(以下APヘッダ)を書換えてから転送を行う。
図1を参照すると、本発明の第1の実施の形態に係るゲートウェイモジュール110は、クライアント端末装置(以下クライアント)200とサーバ端末装置(以下サーバ)300との間のTCPコネクションを終端することなく両端末間で送受信されるパケットをインターセプトし、アプリケーションヘッダ(以下APヘッダ)を書換えてから転送を行う。
本明細書では、APヘッダとは、クライアント200およびサーバ300上で稼働するアプリケーションプログラムがネットワークに送出するデータ全てを指す。アプリケーションプログラムの例としては、Webブラウザ/サーバなどに代表されるHTTPクライアント/サーバ、FTPクライアント/サーバやSIPクライアント/サーバなどがあげられる。こうしたアプリケーションプログラムが送出するデータ(すなわちAPヘッダ)は、パケットのTCPヘッダ以降に含まれ、ネットワーク上を流れる。
図2および図3にゲートウェイモジュール110の配置形態の例を示す。図2では、ゲートウェイモジュール110をゲートウェイノード100を構成するコンピュータのユーザランドで動作するモジュールとして実装し、図3では、カーネルランドで動作するモジュールとして実装している。何れの構成においても、クライアント200からサーバ300へ送信されたパケットおよびその逆にサーバ300からクライアント200へ送信されたパケットが、ゲートウェイノード100のNIC(ネットワークインタフェースカード)を通じてパケットフック部130で捕獲され、ゲートウェイモジュール110に伝達される。ゲートウェイモジュール110では、パケットに対してAPヘッダの書換えおよびTCPヘッダのSeq/Ack#の書換えを行い、書換え後のパケットをNICを通じてサーバ300またはクライアント200へ転送する。
なお、ゲートウェイモジュール110は、図2および図3に示したようにクライアント200やサーバ300とは独立したゲートウェイノード100上に配置されていても良いし、クライアント200またはサーバ300と同一のノードに配置されていても良い。また、ゲートウェイモジュール110には、図2および図3に示すように、TCPスタック140、このTCPスタック140のTCPソケット141−1〜141−nを利用してストリーム形式でデータの送受信を行うアプリケーションプログラム151〜15nが実装されていても良い。
再び図1を参照すると、ゲートウェイモジュール110は、TCPコネクションハンドリング部111、コネクション管理テーブル112、APヘッダパース部113、書換位置管理テーブル114、APヘッダ書換部115、Seq/Ack#変換部(請求項の変換手段に相当)116およびSeq/Ack#変換テーブル(請求項の番号変換テーブルに相当)117を備えている。コネクション管理テーブル112、書換位置管理テーブル114およびSeq/Ack#変換テーブル117は、ゲートウェイモジュール110を構成するコンピュータの主記憶や補助記憶で実現される。TCPコネクションハンドリング部111、APヘッダパース部113、APヘッダ書換部115、Seq/Ack#変換部116といった機能手段は、ゲートウェイモジュール110を構成するコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスクや半導体メモリ等のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータを各機能手段として機能させる。
(コネクション管理テーブル112)
コネクション管理テーブル112は、クライアント200とサーバ300間で構築されるTCPコネクションに関する情報を保持する記憶手段である。1つのエントリで1つのTCPコネクションの情報を管理する。各エントリには、図4に示すように、コネクションIDおよびTCPコネクションに関する情報が登録される。TCPコネクションに関する情報としては、例えばクライアント200およびサーバ300のIPアドレスおよびポート番号などが含まれる。
コネクション管理テーブル112は、クライアント200とサーバ300間で構築されるTCPコネクションに関する情報を保持する記憶手段である。1つのエントリで1つのTCPコネクションの情報を管理する。各エントリには、図4に示すように、コネクションIDおよびTCPコネクションに関する情報が登録される。TCPコネクションに関する情報としては、例えばクライアント200およびサーバ300のIPアドレスおよびポート番号などが含まれる。
(TCPコネクションハンドリング部111)
TCPコネクションハンドリング部111は、クライアント200およびサーバ300が送信したパケットを図2および図3に示したパケットフック部130から受け取って、Seq/Ack#変換部116に渡す機能を有する。また、Seq/Ack#変換部116から渡されたパケットを、その転送方向に応じてサーバ300またはクライアント200へ転送する機能を有する。
TCPコネクションハンドリング部111は、クライアント200およびサーバ300が送信したパケットを図2および図3に示したパケットフック部130から受け取って、Seq/Ack#変換部116に渡す機能を有する。また、Seq/Ack#変換部116から渡されたパケットを、その転送方向に応じてサーバ300またはクライアント200へ転送する機能を有する。
TCPコネクションハンドリング部111は、クライアント200とサーバ300間で送受信されるパケットによって新たにクライアント−サーバ間でTCPコネクションが構築される場合、コネクション管理テーブル112にその構築されたTCPコネクションに関する情報を登録した新たなエントリを作成し、TCPコネクションが削除される場合、コネクション管理テーブル112から対応するエントリを削除する。
(Seq/Ack#変換テーブル117)
Seq/Ack#変換テーブル117は、クライアント200またはサーバ300が送信するパケットのSeq#及びAck#と、当該Seq#またはAck#を持つパケットをサーバ300またはクライアント200に対して転送する際に変換すべきSeq#およびAck#との対応関係が登録されている。Seq/Ack#変換テーブル117の例を図5および図6に示す。
Seq/Ack#変換テーブル117は、クライアント200またはサーバ300が送信するパケットのSeq#及びAck#と、当該Seq#またはAck#を持つパケットをサーバ300またはクライアント200に対して転送する際に変換すべきSeq#およびAck#との対応関係が登録されている。Seq/Ack#変換テーブル117の例を図5および図6に示す。
この例では、Seq/Ack#変換テーブル117は、パケットの転送方向がクライアント→サーバであるパケットに含まれるSeq/Ack#を変換するために使用するクライアント→サーバSeq/Ack#変換テーブル117−1(図5)と、パケットの転送方向がサーバ→クライアントであるパケットに含まれるSeq/Ack#を変換するために使用するサーバ→クライアントSeq/Ack#変換テーブル117−2(図6)とで構成される。
また、クライアント→サーバSeq/Ack#変換テーブル117−1は、Seq#の変換に使用するクライアント→サーバSeq#変換テーブル117−11と、Ack#の変換に使用するクライアント→サーバAck#変換テーブル117−12との2種類のテーブルで構成される。クライアント→サーバSeq#変換テーブル117−11には、コネクションIDと、そのコネクションを通じてクライアント200から受信したパケットに含まれるSeq#(予想Seq#)と、当該Seq#を持つパケットをサーバ300に対して転送する際に格納すべきSeq#(変換Seq#)との組が1つのエントリとして登録される。また、クライアント→サーバAck#変換テーブル117−12には、コネクションIDと、そのコネクションを通じてクライアント200から受信したパケットに含まれるAck#(予想Ack#)と、当該Ack#を持つパケットをサーバ300に対して転送する際に格納すべきAck#(変換Ack#)との組が1つのエントリとして登録される。
同様に、サーバ→クライアントSeq/Ack#変換テーブル117−2は、Seq#の変換に使用するサーバ→クライアントSeq#変換テーブル117−21と、Ack#の変換に使用するサーバ→クライアントAck#変換テーブル117−22との2種類のテーブルで構成される。サーバ→クライアントSeq#変換テーブル117−21には、コネクションIDと、そのコネクションを通じてサーバ300から受信したパケットに含まれるSeq#(予想Seq#)と、当該Seq#を持つパケットをクライアント200に対して転送する際に格納すべきSeq#(変換Seq#)との組が1つのエントリとして登録される。また、サーバ→クライアントAck#変換テーブル117−22には、コネクションIDと、そのコネクションを通じてサーバ300から受信したパケットに含まれるAck#(予想Ack#)と、当該Ack#を持つパケットをクライアント200に対して転送する際に格納すべきAck#(変換Ack#)との組が1つのエントリとして登録される。
(Seq/Ack#変換部116)
ゲートウェイモジュール110においてTCPコネクションの終端処理を回避するためには、少なくともTCPのフロー制御や再送制御がクライアント200とサーバ300で行われる必要があるため、クライアント200とサーバ300が受信パケットのSeq#及びAck#からパケットロスを検出できるようにしなければならない。しかし、ゲートウェイモジュール110においてパケット転送時にAPヘッダを書換える場合、クライアント200またはサーバ300が送信した際のパケットサイズとサーバ300またはクライアント200が受信した際のパケットサイズが異なることになるため、ゲートウェイモジュール110がクライアント200やサーバ300から受信したパケットのSeq#、Ack#を書換えずにそのままサーバ300やクライアント200に転送すると、サーバ300、クライアント200はSeq#及びAck#からパケットロスを正しく把握できなくなる。このため、Seq/Ack#変換部116は、パケット転送時にAPヘッダ書換えによるパケットサイズ変更に応じて受信パケットのSeq#及びAck#を書換え、クライアント200やサーバ300がSeq#及びAck#からパケットロスを正しく把握できるようにする。
ゲートウェイモジュール110においてTCPコネクションの終端処理を回避するためには、少なくともTCPのフロー制御や再送制御がクライアント200とサーバ300で行われる必要があるため、クライアント200とサーバ300が受信パケットのSeq#及びAck#からパケットロスを検出できるようにしなければならない。しかし、ゲートウェイモジュール110においてパケット転送時にAPヘッダを書換える場合、クライアント200またはサーバ300が送信した際のパケットサイズとサーバ300またはクライアント200が受信した際のパケットサイズが異なることになるため、ゲートウェイモジュール110がクライアント200やサーバ300から受信したパケットのSeq#、Ack#を書換えずにそのままサーバ300やクライアント200に転送すると、サーバ300、クライアント200はSeq#及びAck#からパケットロスを正しく把握できなくなる。このため、Seq/Ack#変換部116は、パケット転送時にAPヘッダ書換えによるパケットサイズ変更に応じて受信パケットのSeq#及びAck#を書換え、クライアント200やサーバ300がSeq#及びAck#からパケットロスを正しく把握できるようにする。
具体的にはSeq/Ack#変換部116は、(1)管理しているSeq/Ack#変換テーブル117を参照して、TCPコネクションハンドリング部111から渡されたパケットのTCPヘッダのSeq#およびAck#を書換える処理と、(2)Seq/Ack#変換テーブル117の管理とを行う。以下、それぞれの処理について説明する。
(1)TCPコネクションハンドリング部111から渡されたパケットのTCPヘッダのSeq#およびAck#の書換え処理
Seq/Ack#変換部116は、TCPコネクションハンドリング部111から渡されたパケットのTCPヘッダのSeq#及びAck#を、以下のようにして、Seq/Ack#変換テーブル117を参照して書換える。
まずSeq/Ack#変換部116は、TCPコネクションハンドリング部111からパケットを渡されると、転送方向に対応するSeq/Ack#変換テーブル117を参照して、渡されたパケットの属するTCPコネクションに該当するコネクションIDを持ち、かつ予想Seq#の値がパケットのTCPヘッダのSeq#と同じエントリを探す。次にSeq/Ack#変換部116は、パケットのTCPヘッダのSeq#を前記探索したエントリの変換Seq#に書換える。例えば、コネクションID1に該当するTCPコネクション上でクライアント200からSeq#がxxxのパケットを受信した場合、図5のクライアント→サーバSeq#変換テーブル117−11におけるクライアント→サーバ予想Seq#がxxxとなっているエントリを参照し、当該パケットのSeq#を同一エントリのクライアント→サーバ変換Seq#に記載されたyyyに書換える。
Ack#についても同様に、Seq/Ack#変換部116は、パケットの属するTCPコネクションに該当するコネクションIDを持ち、かつ予想Ack#がパケットのTCPヘッダのAck#と同じエントリを探し、パケットのTCPヘッダのAck#を当該エントリの変換Ack#に書換える。例えば、コネクションID1に該当するTCPコネクション上で、クライアント200からAck#がwwwのパケットを受信した場合、図5のクライアント→サーバAck#変換テーブル117−12におけるクライアント→サーバ予想Ack#がwwwとなっているエントリを参照し、当該パケットのAck#を同一エントリのクライアント→サーバ変換Ack#に記載されたzzzに書換える。
以上は、クライアント200からサーバ300へ転送するパケットのSeq/Ack#の書換え処理であるが、サーバ300からクライアント200へ転送するパケットのSeq/Ack#は、図6に示すサーバ→クライアントSeq/Ack#変換テーブル117−2を参照して行われる。
Seq/Ack#変換部116は、Seq/Ack#の書換えを行った後、パケットをAPヘッダパース部113に渡す。また、その後にAPヘッダ書換部115からパケットを受け取ると、TCPコネクションハンドリング部111へ伝達する。
(2)Seq/Ack#変換テーブル117の管理
(2-1)新規エントリの作成
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からパケットを渡されると、当該パケットと同一のTCPコネクション上で同一ノードから次に受け取るべきパケット(次受信パケット)のSeq#を計算して、予想Seq#としてSeq/Ack#変換テーブル117に登録する。具体的にはSeq/Ack#変換部116は、TCPコネクションハンドリング部111から渡されたパケットのSeq#とパケットのデータサイズ(TCPヘッダ以降のデータのサイズ)の和を予想Seq#としてSeq/Ack#変換テーブル117に登録する。また、登録した予想Seq#は次受信パケットに対するAck#ともなるので、次受信パケットと反対の転送方向の変換Ack#としてSeq/Ack#変換テーブル117に登録する。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からパケットを渡されると、当該パケットと同一のTCPコネクション上で同一ノードから次に受け取るべきパケット(次受信パケット)のSeq#を計算して、予想Seq#としてSeq/Ack#変換テーブル117に登録する。具体的にはSeq/Ack#変換部116は、TCPコネクションハンドリング部111から渡されたパケットのSeq#とパケットのデータサイズ(TCPヘッダ以降のデータのサイズ)の和を予想Seq#としてSeq/Ack#変換テーブル117に登録する。また、登録した予想Seq#は次受信パケットに対するAck#ともなるので、次受信パケットと反対の転送方向の変換Ack#としてSeq/Ack#変換テーブル117に登録する。
例えば、コネクションID=1に属し、Seq#がxxx−xで、データサイズがxのパケットをクライアント200から受信した場合、図5のクライアント→サーバSeq#変換テーブル117−11に、コネクションID=1、クライアント→サーバ予想Seq#=xxx、クライアント→サーバ変換Seq#=NULLのエントリを新たに登録し、図6のサーバ→クライアントAck#変換テーブル117−22に、コネクションID1、サーバ→クライアント変換Ack#=xxx、サーバ→クライアント予想Ack#=NULLのエントリを新たに登録する。
また、Seq/Ack#変換部116は、APヘッダ書換部115からAPヘッダ書換後のパケットを渡されると、当該パケットと同一のTCPコネクション上で同一ノードへ次に転送すべきパケット(次転送パケット)のSeq#を変換Seq#としてSeq/Ack#変換テーブル117に登録する。具体的にはSeq/Ack#変換部116は、APヘッダ書換部115から渡されたパケットのSeq#とパケットのデータサイズの和を変換Seq#としてSeq/Ack#変換テーブル117に登録する。また、登録した変換Seq#は、次転送パケットに対するAck#ともなるので、次転送パケットと反対の転送方向の予想Ack#としてSeq/Ack#変換テーブル117に登録する。
例えば、前述の例のパケット(すなわちコネクションID1に属するSeq#がxxx−x、データサイズxのクライアントから送信されたパケット)をTCPコネクションハンドリング部111から受け取り、APヘッダパース部113に渡した結果、APヘッダ書換部115からSeq#がyyy−y、データサイズがyのパケットを渡された場合、Seq/Ack#変換部116は、図5のクライアント→サーバSeq#変換テーブル117−11のコネクションID=1、クライアント→サーバ予想Seq#=xxxを持つエントリのクライアント→サーバ変換Seq#にyyyを登録し、図6のサーバ→クライアントAck#変換テーブル117−22のコネクションID=1、サーバ→クライアント変換Ack#=xxxを持つエントリのサーバ→クライアント予想Ack#にyyyを登録する。なお、この場合、Seq/Ack#変換テーブル117には予想Seq#がxxx−x、変換Seq#がyyy−yのエントリが登録されている。
Seq/Ack#変換部116の機能について、簡単な例を挙げて再度説明する。
今、図7に示すように、ゲートウェイモジュール110において、クライアント200から受信したパケットP1(Seq#が1、データサイズが10)のAPヘッダを書換えて、サーバ300にパケットP1’(Seq#が1、データサイズが11)として転送したとする。
パケットP1を送信したクライアント200は、パケットP1のSeq#が1で且つデータサイズが10なので、次に送信するパケットP1のSeq#には11(1+10)を設定する。そこで、Seq/Ack#変換部116は、パケットP1を転送する際に、パケットP1のSeq#の1とデータサイズの10とを加算した11をパケットP1の次のパケットの予想Seq#として、クライアント→サーバSeq#変換テーブル117−11に登録しておく。
また、パケットP1’のSeq#が1で且つデータサイズが11なので、サーバ300がパケットP1’の次に受信するパケットには、Seq#として12(1+11)が設定されていなければならない。そこで、Seq/Ack#変換部116は、パケットP1’を転送する際に、パケットP1’のSeq#の1とデータサイズの11とを加算した12を、予想Seq#=11に対応する変換Seq#として、クライアント→サーバSeq#変換テーブル117−11に登録しておく。
他方、パケットP1’を受信したサーバ300がそのACKをクライアント200に返す場合、パケットP1’のSeq#は1、データサイズは11なので、Ack#=12を設定したAckパケットを送信する。そして、このようなAckパケットがサーバ300から送信された場合、ゲートウェイモジュール110は、クライアント200に対しては、パケットP1に対するAckパケットとして転送する必要があり、パケットP1のSeq#は1、データサイズは10なので、パケットP1に対するAckパケットのAck#には、11(1+10)を設定する必要がある。そこで、Seq/Ack#変換部116は、パケットP1をパケットP1’として転送する際に、サーバ→クライアントAck#変換テーブル117−22に、予想Ack#=12、変換Ack#=11のエントリを登録しておく。
はたして、図7に示すようにクライアント200がSeq#=11のパケットP2を送信すると、Seq/Ack#変換部116は、予想Seq#=11に対応する変換Seq#=12をクライアント→サーバSeq#変換テーブル117−11から読み出し、パケットP2’のSeq#に設定してサーバ300に送信する。
また、サーバ300がAck#=12のAckパケットを送信すると、Seq/Ack#変換部116は、予想Ack#=12に対応する変換Ack#=11をサーバ→クライアントAck#変換テーブル117−22から読み出し、そのAckパケットのAck#を12から11に書換えてクライアント200に送信する。
(2-2)既存エントリの削除
Seq/Ack#変換部116は、以下の場合にSeq/Ack#変換テーブル117からエントリを削除する。なお、エントリの削除処理は省略してもよい。
Seq/Ack#変換部116は、以下の場合にSeq/Ack#変換テーブル117からエントリを削除する。なお、エントリの削除処理は省略してもよい。
A)クライアント−サーバ間のTCPコネクションが切断された場合
切断されたTCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。具体的には以下のように処理する。
切断されたTCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。具体的には以下のように処理する。
(ア)クライアント200またはサーバ300が送信したRSTパケットをTCPコネクションハンドリング部111から渡された場合
Seq/Ack#変換部116は、RSTパケットを渡されたら即座に当該RSTパケットの属するTCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。
Seq/Ack#変換部116は、RSTパケットを渡されたら即座に当該RSTパケットの属するTCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。
(イ)クライアント200またはサーバ300が送信したFINパケットをTCPコネクションハンドリング部111から渡された場合
Seq/Ack#変換部116は、FINパケットを渡されたらFINを送信した側(アクティブクローズ側)がTIME_WAIT状態となってからCLOSED状態に移行するまでの時間(2MSL時間)待ってから、当該FINパケットの属するTCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。具体的には、Seq/Ack#変換部116は、アクティブクローズ側が送信したAckをTCPコネクションハンドリング部111から渡された時点で、アクティブクローズ側がTIME_WAIT状態になったと判断し、その後2MSL時間待ってからエントリ削除を行う。
Seq/Ack#変換部116は、FINパケットを渡されたらFINを送信した側(アクティブクローズ側)がTIME_WAIT状態となってからCLOSED状態に移行するまでの時間(2MSL時間)待ってから、当該FINパケットの属するTCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。具体的には、Seq/Ack#変換部116は、アクティブクローズ側が送信したAckをTCPコネクションハンドリング部111から渡された時点で、アクティブクローズ側がTIME_WAIT状態になったと判断し、その後2MSL時間待ってからエントリ削除を行う。
B)TCPコネクションがタイムアウトした場合
Seq/Ack#変換部116は、TCPコネクション上でパケットが最後に送信されてから一定時間送信されない場合、ケーブル断やマシン異常終了にてTCPコネクションがタイムアウトしたと判断し、当該TCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。
Seq/Ack#変換部116は、TCPコネクション上でパケットが最後に送信されてから一定時間送信されない場合、ケーブル断やマシン異常終了にてTCPコネクションがタイムアウトしたと判断し、当該TCPコネクションに対応するコネクションIDを持つ全てのエントリを削除する。
C)パケットに対するAckを当該パケットの送信元が受信した場合
パケットに対するAckを当該パケットの送信元が受信するまでは当該パケットの再送が行われる可能性がある。こうした再送に備えるため、Seq/Ack#変換部116はSeq/Ack#変換テーブル117のエントリを、当該エントリの予想Seq#を持つパケットに対するAckを当該パケットの送信元が受信してから削除する。
パケットに対するAckを当該パケットの送信元が受信するまでは当該パケットの再送が行われる可能性がある。こうした再送に備えるため、Seq/Ack#変換部116はSeq/Ack#変換テーブル117のエントリを、当該エントリの予想Seq#を持つパケットに対するAckを当該パケットの送信元が受信してから削除する。
TCPでは、Ackを受信せずに送信できる最大データ量として受信Window Sizeというパラメタを導入しており、Seq/Ack#変換部116は、受信Window Sizeを利用してパケット送信元が送信パケットに対するAckを受信したか否かを確認し、Seq/Ack#変換テーブル117のエントリ削除を行う。具体的には以下の削除処理を行う。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からパケットを渡された際、渡されたパケットのSeq#から受信Window Sizeを差し引いた値よりも小さい値の予想Seq#または変換Ack#(予想Seq#または変換Ack#<受信パケットのSeq#−受信Window Size)を持ち、かつ前記パケットの受信に利用したコネクションに対応するコネクションIDを持つエントリを検索し、当該エントリを削除する。たとえば図5および図6に示すSeq/Ack#変換テーブル117を持つ場合、TCPコネクションハンドリング部111からクライアントの送信したSeq#=xxx+受信Window Size+α(α>0)のパケットを受け取った場合、Seq/Ack#変換部116はクライアント→サーバ予想Seq#(サーバ→クライアント変換Ack#)がxxxのエントリをテーブルから削除する。
なお、上記で用いる受信Window Sizeの値としては、《1》TCPコネクション構築時に決定されるWindow Scaleオプション値から計算されるTCPコネクション上で利用可能な最大受信Window Size、《2》TCPコネクション構築後にTCPコネクションの対向エンドから逐次通知される受信Window Size(パケットのTCPヘッダのWindow Sizeによって通知される)、の2種類がある。
《1》を用いる場合、Seq/Ack#変換部116は、クライアント−サーバ間でTCPコネクションを構築する際に決定されるWindow Scaleオプション値から最大受信Window Sizeを計算し、Seq/Ack#変換テーブル117のエントリ削除に利用する。なお、Window Scaleオプション値は、クライアント→サーバとサーバ→クライアントで異なる値になる場合もあるため、それぞれについて最大受信Window Sizeを計算しておく。たとえば、TCPコネクション構築時にサーバ300からクライアント200に対してWindow Scaleオプション値が4と通知された場合は、デフォルトの最大受信Window Size値65535バイトに16(24)をかけた値(1048560バイト)をサーバ→クライアントの最大受信Window Sizeとして利用し、クライアント→サーバSeq/Ack#変換テーブル117−1のエントリ削除に利用する。また、クライアント→サーバの最大受信Window Sizeをサーバ→クライアントSeq/Ack#変換テーブル117−2のエントリ削除に利用する。
《2》を用いる場合、Seq/Ack#変換部116は、パケットのTCPヘッダのWindow Sizeを監視して同一TCPコネクション上で通知される最大の受信Window Sizeをクライアント→サーバ、サーバ→クライアントの方向毎に記憶し、Seq/Ack#変換テーブル117のエントリ削除に利用する。たとえばクライアント200が送信したパケットの処理を行う場合は、その時点までで同一TCPコネクション上でサーバ300からクライアント200に通知された受信Window Sizeのうち、最大の受信Window Sizeを利用してクライアント→サーバSeq/Ack#変換テーブル117−1のエントリ削除を行う。サーバ300から受信したパケットの処理を行う場合は、クライアント200からサーバ300に通知された受信window Sizeを利用してサーバ→クライアントSeq/Ack#変換テーブル117−2のエントリ削除を行う。《2》は転送する全パケットについてWindow Sizeを監視する必要があるものの、《1》に比べてエントリ削除に用いるWindow Sizeが小さくなり、Seq/Ack#変換テーブル117のサイズを《1》よりも小さく保つことができる。
[再送パケットへの対応]
なお、クライアント200またはサーバ300が再送したパケットについては、Seq/Ack#変換テーブル117の管理処理が既に完了し、かつ以下の説明で述べるように書換位置の検出結果が既に書換位置管理テーブル114に記録されているため、Seq/Ack#変換部116は、上記(2)の処理は実施せず、(1)の処理を行った後、APヘッダパース部113にはパケットを渡さず、APヘッダ書換部115にパケットを直接に渡す処理を行ってもよい。Seq/Ack#変換部116は、TCPコネクションハンドリング部111から渡されたパケットに対して予想Seq#を計算した結果、当該予想Seq#を持つエントリが既にSeq/Ack#変換テーブル117に登録されている場合、当該パケットが再送パケットだと判断する。
なお、クライアント200またはサーバ300が再送したパケットについては、Seq/Ack#変換テーブル117の管理処理が既に完了し、かつ以下の説明で述べるように書換位置の検出結果が既に書換位置管理テーブル114に記録されているため、Seq/Ack#変換部116は、上記(2)の処理は実施せず、(1)の処理を行った後、APヘッダパース部113にはパケットを渡さず、APヘッダ書換部115にパケットを直接に渡す処理を行ってもよい。Seq/Ack#変換部116は、TCPコネクションハンドリング部111から渡されたパケットに対して予想Seq#を計算した結果、当該予想Seq#を持つエントリが既にSeq/Ack#変換テーブル117に登録されている場合、当該パケットが再送パケットだと判断する。
(書換位置管理テーブル114)
書換位置管理テーブル114は、TCPコネクション上のパケットのSeq#とAPヘッダの書換え位置との対応関係をパケットの転送方向毎に保持する記憶手段である。書換位置管理テーブル114の例を図8−1に示す。図8−1に示す例では、書換位置管理テーブル114は、パケットの転送方向(クライアント→サーバ、サーバ→クライアント)毎に1種類のテーブルを持ち、テーブル中の各エントリに、コネクションIDとSeq#と書換位置との組を保持する。例えば、図8−1のクライアント→サーバ書換位置管理テーブルの1行目のエントリは、コネクションIDが1、Seq#がaであるパケットの書換位置はα、β、γの3箇所であることを示す。また、サーバ→クライアント書換位置管理テーブルの1行目のエントリは、コネクションIDが1、Seq#がbであるパケットの書換位置はδ、ε、ζの3箇所であることを示す。
書換位置管理テーブル114は、TCPコネクション上のパケットのSeq#とAPヘッダの書換え位置との対応関係をパケットの転送方向毎に保持する記憶手段である。書換位置管理テーブル114の例を図8−1に示す。図8−1に示す例では、書換位置管理テーブル114は、パケットの転送方向(クライアント→サーバ、サーバ→クライアント)毎に1種類のテーブルを持ち、テーブル中の各エントリに、コネクションIDとSeq#と書換位置との組を保持する。例えば、図8−1のクライアント→サーバ書換位置管理テーブルの1行目のエントリは、コネクションIDが1、Seq#がaであるパケットの書換位置はα、β、γの3箇所であることを示す。また、サーバ→クライアント書換位置管理テーブルの1行目のエントリは、コネクションIDが1、Seq#がbであるパケットの書換位置はδ、ε、ζの3箇所であることを示す。
(APヘッダパース部113)
APヘッダパース部113は、Seq/Ack#変換部116から渡されたパケットのAPヘッダ、すなわちTCPヘッダ以降をパースし、APヘッダの書換位置を検索する機能を有する。書換位置を検出した場合は、パケットの属するTCPコネクションのコネクションID、パケットのSeq#および書換位置を一つのエントリとして書換位置管理テーブル114に新たに登録する。
APヘッダパース部113は、Seq/Ack#変換部116から渡されたパケットのAPヘッダ、すなわちTCPヘッダ以降をパースし、APヘッダの書換位置を検索する機能を有する。書換位置を検出した場合は、パケットの属するTCPコネクションのコネクションID、パケットのSeq#および書換位置を一つのエントリとして書換位置管理テーブル114に新たに登録する。
さらに、APヘッダパース部113は、(A)クライアント−サーバ間のTCPコネクションが切断された場合、(B)TCPコネクションがタイムアウトした場合、(C)パケットに対するAckを当該パケットの送信元が受信した場合、において、Seq/Ack#変換部116のSeq/Ack#変換テーブル117のエントリ削除動作と同様の方法で、書換位置管理テーブル114のエントリを削除する。
上記処理を行った後、APヘッダパース部113は、パケットをAPヘッダ書換部115に渡す。
(APヘッダ書換部115)
APヘッダ書換部115は、書換位置管理テーブル114を参照し、APヘッダパース部113から渡されたパケットのAPヘッダを書換える。APヘッダの書換え例については背景技術の項で既に説明した。例えば、APヘッダに含まれるSIP URIは、ASCII等で符号化されているため、別のSIP URIに書換えると、文字数が変化し、パケットサイズが変化する。
APヘッダ書換部115は、書換位置管理テーブル114を参照し、APヘッダパース部113から渡されたパケットのAPヘッダを書換える。APヘッダの書換え例については背景技術の項で既に説明した。例えば、APヘッダに含まれるSIP URIは、ASCII等で符号化されているため、別のSIP URIに書換えると、文字数が変化し、パケットサイズが変化する。
[動作の説明]
次に、図9〜図12のシーケンス図および図13のフローチャートを参照して図1のゲートウェイモジュール110の動作をSeq/Ack#変換部116の動作を中心に説明する。
次に、図9〜図12のシーケンス図および図13のフローチャートを参照して図1のゲートウェイモジュール110の動作をSeq/Ack#変換部116の動作を中心に説明する。
(TCPコネクション開設時)
図9にクライアント−サーバ間でTCPコネクションを開設する際のゲートウェイモジュール110の動作例を示す。
図9にクライアント−サーバ間でTCPコネクションを開設する際のゲートウェイモジュール110の動作例を示す。
[SYN転送時]
ゲートウェイモジュール110がクライアント200の送信したSYNパケットをインターセプトすると(図9のS1)、TCPコネクションハンドリング部111は、コネクションIDを新規に割り当て(図9では1が割り当てられている)、当該コネクションIDおよびSYNパケットの送信元IPアドレス、送信元ポート番号を持つエントリをコネクション管理テーブル112に登録し、SYNパケットをSeq/Ack#変換部116に渡す。
ゲートウェイモジュール110がクライアント200の送信したSYNパケットをインターセプトすると(図9のS1)、TCPコネクションハンドリング部111は、コネクションIDを新規に割り当て(図9では1が割り当てられている)、当該コネクションIDおよびSYNパケットの送信元IPアドレス、送信元ポート番号を持つエントリをコネクション管理テーブル112に登録し、SYNパケットをSeq/Ack#変換部116に渡す。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からSYNパケットを渡されると、次受信パケットのSeq#をSYNパケットのSeq#から計算する(図13のT1、T2でYES、T7)。図9の例では、SYNパケットのSeq#はa-1であり、SYNパケットはTCPのプロトコル規約上Seq#を1消費するため、次受信パケットのSeq#はa-1+1=aとなる。Seq/Ack#変換部116は、計算した次受信パケットのSeq#をクライアント→サーバ予想Seq#として持つエントリをクライアント→サーバSeq#変換テーブル117−11に登録し(図9のS2−1)、SYNパケットをAPヘッダパース部113に渡す(図13のT8、T9)。
APヘッダパース部113は、SYNパケットにはTCPヘッダ以降にデータが含まれないため、書換位置管理テーブル114への新規エントリの登録は行わず、SYNパケットをAPヘッダ書換部115に渡す。APヘッダ書換部115は、SYNパケットの書換位置情報が書換位置管理テーブル114に登録されていないので、APヘッダの書換えは行わず、SYNパケットをそのままSeq/Ack#変換部116に渡す。
Seq/Ack#変換部116は、渡されたSYNパケットから次転送パケットのSeq#を計算する(図13のT1、T10)。図9の例では、APヘッダ書換部115から渡されたSYNパケットのSeq#はa-1であるため、次転送パケットのSeq#はa-1+1=aとなる。TCPコネクションハンドリング部111からパケットを渡された際に作成したクライアント→サーバSeq#変換テーブル117−11のエントリに、計算した次転送パケットのSeq#をクライアント→サーバ変換Seq#として登録する(図9のS2−1、図13のT11)。
また、Seq/Ack#変換部116は、クライアント→サーバ予想Seq#をサーバ→クライアント変換Ack#として、クライアント→サーバ変換Seq#をサーバ→クライアント予想Ack#としてそれぞれ持つエントリを、サーバ→クライアントAck#変換テーブル117−22に登録する(図9のS2−2、図13のT12)。その後、Seq/Ack#変換部116は、SYNパケットをTCPコネクションハンドリング部111に渡す(図13のT13)。
TCPコネクションハンドリング部111は、Seq/Ack#変換部116から渡されたパケットをサーバ300へ転送する(図9のS3)。
[SYN ACK転送時]
次に、ゲートウェイモジュール110がサーバ300の送信したSYN ACKパケットをインターセプトすると(図9のS4)、TCPコネクションハンドリング部111は、SYN ACKパケットをSeq/Ack#変換部116に渡す。なお、受信したSYN ACKパケットに対応するエントリが既に図9のS2において登録されているため、コネクション管理テーブル112への新規エントリ作成は行わない。
次に、ゲートウェイモジュール110がサーバ300の送信したSYN ACKパケットをインターセプトすると(図9のS4)、TCPコネクションハンドリング部111は、SYN ACKパケットをSeq/Ack#変換部116に渡す。なお、受信したSYN ACKパケットに対応するエントリが既に図9のS2において登録されているため、コネクション管理テーブル112への新規エントリ作成は行わない。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からSYN ACKパケットを渡されると、Seq/Ack#変換テーブル117を参照し、Seq#/Ack#の書換えを行う(図13のT1〜T5)。渡されたSYN ACKパケットはサーバ→クライアントへ転送されるパケットであるため、サーバ→クライアント予想Seq/Ack#テーブル117−2を参照する。具体的には、渡されたパケットのSeq#およびAck#と同じサーバ→クライアント予想Seq#およびサーバ→クライアント予想Ack#を持つエントリを検索し(図13のT3)、当該エントリに記載されたサーバ→クライアント変換Seq#およびサーバ→クライアント変換Ack#へ、渡されたパケットのSeq#/Ack#を書換える(図9のS5−1、図13のT5)。なお、図9のS5は、TCPコネクション上で初めてサーバ300からパケットを受信したタイミングであり、サーバ→クライアント予想Seq#及びサーバ→クライアント変換Seq#を持つエントリが存在しないため、Seq#の書換えは行わない。Ack#については該当エントリが存在するため、書換えを行う。ただし、この場合、エントリ中の予想Ack#と変換Ack#は同じ値であるため、同じ値に書換えられる。
ここで、Seq/Ack#変換部116は、渡されたパケットのSeq#およびAck#と同じサーバ→クライアント予想Seq#およびサーバ→クライアント予想Ack#を持つエントリがSeq/Ack#変換テーブル117に登録されていない場合には、パケットを廃棄する(図13のT6)。その理由は、今回のパケットの予想Seq#および予想Ack#を計算する元となった1つ前のパケットがパケットロスしているためである。このようにパケットを廃棄しても送信元がパケットを再送するので問題は生じない。
続いてSeq/Ack#変換部116は、Seq/Ack#変換テーブル117への新規エントリの登録を行う(図13のT8)。まず、次受信パケットのSeq#をSYN ACKパケットのSeq#から計算する。図9の例では、SYN ACKパケットのSeq#はb-1であるため、次受信パケットのSeq#はb-1+1=bとなる。計算した次受信パケットのSeq#をサーバ→クライアント予想Seq#として持つエントリをサーバ→クライアントSeq#変換テーブル117−21に登録し、SYN ACKパケットをAPヘッダパース部113に渡す(図13のT9)。
APヘッダパース部113は、SYN ACKパケットにはTCPヘッダ以降にデータを含まないため、書換位置管理テーブル114への新規エントリの登録は行わず、SYN ACKパケットをAPヘッダ書換部115に渡す。APヘッダ書換部115は、SYN ACKパケットの書換位置情報が書換位置管理テーブル114に登録されていないので、APヘッダの書換えは行わず、SYN ACKパケットをそのままSeq/Ack#変換部116に渡す。
Seq/Ack#変換部116は、渡されたSYN ACKパケットから次転送パケットのSeq#を計算する(図13のT1、T10)。図9の例では、APヘッダ書換部115から渡されたSYN AckパケットのSeq#はb-1であるため、次転送パケットのSeq#はb-1+1=bとなる。TCPコネクションハンドリング部111からパケットを渡された際に作成したサーバ→クライアントSeq#変換テーブル117−21のエントリに、計算した次転送パケットのSeq#をサーバ→クライアント変換Seq#として登録する(図9のS5−2、図13のT11)。
また、図9のS5−2において登録したサーバ→クライアント予想Seq#をクライアント→サーバ変換Ack#として、サーバ→クライアント変換Seq#をクライアント→サーバ予想Ack#としてそれぞれ持つエントリを、クライアント→サーバAck#変換テーブル117−12に登録する(図9のS5−3、図13のT12))。その後、SYN ACKパケットをTCPコネクションハンドリング部111に渡す(図13のT13)。
TCPコネクションハンドリング部111は、Seq/Ack#変換部116から渡されたパケットをクライアント200へ転送する(図9のS6)。
[ACK転送時]
次に、ゲートウェイモジュール110がクライアント200の送信したACKパケットをインターセプトすると(図9のS7)、TCPコネクションハンドリング部111は、AckパケットをSeq/Ack#変換部116に渡す。なお、コネクション管理テーブル112への新規エントリ作成は、受信したSYN ACKパケットに対応するエントリが既に図9のS2において登録されているため行わない。
次に、ゲートウェイモジュール110がクライアント200の送信したACKパケットをインターセプトすると(図9のS7)、TCPコネクションハンドリング部111は、AckパケットをSeq/Ack#変換部116に渡す。なお、コネクション管理テーブル112への新規エントリ作成は、受信したSYN ACKパケットに対応するエントリが既に図9のS2において登録されているため行わない。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からACKパケットを渡されると、Seq/Ack#変換テーブル117を参照し、Seq#/Ack#の書換えを行う(図13のT1〜T5)。渡されたACKパケットはクライアント→サーバへ転送されるパケットであるため、クライアント→サーバSeq/Ack#変換テーブル117−1を参照する。具体的には、渡されたパケットのSeq#およびAck#と同じクライアント→サーバ予想Seq#およびクライアント→サーバ予想Ack#を持つエントリを検索し(図13のT3)、当該エントリに記載されたクライアント→サーバ変換Seq#およびクライアント→サーバ変換Ack#へ、渡されたパケットのSeq#/Ack#を書換える(図9のS8−1及びS8−3、図13のT5))。ただし、この場合エントリ中の予想Seq#/Ack#と変換Seq#/Ack#は同じ値であるため、ACKパケットのSeq#及びAck#はTCPコネクションハンドリング部111から渡された時の値と同じ値に書換えられる。
また、Seq/Ack#変換部116は、Seq/Ack#変換テーブル117への新規エントリの登録を行う(図13のT8)。まず、次受信パケットのSeq#をACKパケットのSeq#から計算する。図9の例ではACKパケットのSeq#はaであり、ACKパケットはTCPヘッダ以降にデータを含まないため、次受信パケットのSeq#はa+0=aとなる。計算した次受信パケットのSeq#をクライアント→サーバ予想Seq#として持つエントリをクライアント→サーバSeq#変換テーブル117−11に登録し(図9のS8−2)、ACKパケットをAPヘッダパース部113に渡す(図13のT9)。
ACKパケットはTCPヘッダ以降にデータを含まないため、APヘッダの書換えは行われず、ACKパケットはAPヘッダ書換部115からそのままSeq/Ack#変換部116に渡される。
Seq/Ack#変換部116は、APヘッダ書換部115から渡されたACKパケットから次転送パケットのSeq#を計算する(図13のT1、T10)。図9の例では、APヘッダ書換部115から渡されたACKパケットのSeq#はaであるため、次転送パケットのSeq#はa+0=aとなる。TCPコネクションハンドリング部111からパケットを渡された際に作成したクライアント→サーバSeq#変換テーブル117−11のエントリに、計算した次転送パケットのSeq#をクライアント→サーバ変換Seq#として登録する(図9のS8−2、図13のT11)。
また、図9のS8−2において登録したクライアント→サーバ予想Seq#をサーバ→クライアント変換Ack#として、クライアント→サーバ変換Seq#をサーバ→クライアント予想Ack#としてそれぞれ持つエントリを、サーバ→クライアントAck#変換テーブル117−22に登録する(図9のS8−4、図13のT12)。その後、ACKパケットをTCPコネクションハンドリング部111に渡す(図13のT13)。
TCPコネクションハンドリング部111は、Seq/Ack#変換部116から渡されたパケットをサーバ300へ転送する(図9のS9)。
[TCPコネクション開設時のその他の動作形態(動作簡略化)]
以上、TCPコネクション開設時のゲートウェイモジュール110の動作をSeq/Ack#変換部116の動作を中心として説明した。上述の説明では、Seq/Ack#変換部116がTCPコネクション開設時においてもTCPコネクション開設後のパケット転送時と同様の動作をする形態について述べたが、TCPコネクション開設時はTCPヘッダ以降にデータを含むパケットの転送が行われず、またAPヘッダの書換えが行われないため、Seq/Ack#変換部116の動作はTCPコネクション開設後のパケット転送動作よりも簡略化することができる。
以上、TCPコネクション開設時のゲートウェイモジュール110の動作をSeq/Ack#変換部116の動作を中心として説明した。上述の説明では、Seq/Ack#変換部116がTCPコネクション開設時においてもTCPコネクション開設後のパケット転送時と同様の動作をする形態について述べたが、TCPコネクション開設時はTCPヘッダ以降にデータを含むパケットの転送が行われず、またAPヘッダの書換えが行われないため、Seq/Ack#変換部116の動作はTCPコネクション開設後のパケット転送動作よりも簡略化することができる。
具体的にはTCPコネクション開設時には以下の動作(a)〜(d)を省略することができる。
(a)APヘッダパース部113及びAPヘッダ書換部115とのパケット授受
TCPコネクション開設時に転送するパケットについてはAPヘッダが含まれないため、TCPコネクションハンドリング部111から渡されたパケットをAPヘッダパース部113に渡す必要がない。
TCPコネクション開設時に転送するパケットについてはAPヘッダが含まれないため、TCPコネクションハンドリング部111から渡されたパケットをAPヘッダパース部113に渡す必要がない。
(b)変換Seq#/Ack#の計算
TCPコネクション開設時に転送するパケットについてはAPヘッダの書換えが行われず、転送時にパケットサイズが変わらないため、変換Seq#/Ack#の値は対応する予想Seq#/Ack#と同じになる。
TCPコネクション開設時に転送するパケットについてはAPヘッダの書換えが行われず、転送時にパケットサイズが変わらないため、変換Seq#/Ack#の値は対応する予想Seq#/Ack#と同じになる。
(c)パケット転送時のSeq#およびAck#の書換え
TCPコネクション開設時に転送するパケットについてはAPヘッダの書換えが行われず、転送時にパケットサイズが変わらないため、Seq#/Ack#の書換えが不要となる。
TCPコネクション開設時に転送するパケットについてはAPヘッダの書換えが行われず、転送時にパケットサイズが変わらないため、Seq#/Ack#の書換えが不要となる。
(d)ACKパケット転送時のSeq/Ack#変換テーブル117へのエントリ作成
SYNパケット転送時に作成したSeq/Ack#変換テーブル117のエントリと同一の内容を含むエントリを作成することになるため、不要となる。
SYNパケット転送時に作成したSeq/Ack#変換テーブル117のエントリと同一の内容を含むエントリを作成することになるため、不要となる。
(TCPコネクション開設後、パケット転送時)
[クライアント→サーバ]
図10にTCPコネクション開設後に、クライアント200からサーバ300へ送信されるパケットを転送する際のゲートウェイモジュール110の動作例を示す。
図10にTCPコネクション開設後に、クライアント200からサーバ300へ送信されるパケットを転送する際のゲートウェイモジュール110の動作例を示す。
ゲートウェイモジュール110がクライアント200の送信したパケットをインターセプトすると(図10のS10)、TCPコネクションハンドリング部111は、パケットをSeq/Ack#変換部116に渡す。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からパケットを渡されると、Seq/Ack#変換テーブル117のクライアント→サーバSeq/Ack#変換テーブル117−1を参照し、Seq#/Ack#の書換えを行う(図13のT1〜T5)。具体的には、渡されたパケットのSeq#およびAck#と同じクライアント→サーバ予想Seq#およびクライアント→サーバ予想Ack#を持つエントリを検索し、当該エントリに記載されたクライアント→サーバ変換Seq#およびクライアント→サーバ変換Ack#へ、渡されたパケットのSeq#/Ack#を書換える(図10のS11−1及びS11−4)。図10のS11では、Seq#がaからaに書換えられると共に、Ack#がbからbに書換えられる。
また、Seq/Ack#変換テーブル117への新規エントリの登録を行う(図13のT7、T8)。まず、次受信パケットのSeq#をパケットのSeq#から計算する。図10のS11の例では、パケットのSeq#はaであり、パケットはTCPヘッダ以降にC1バイトのデータを含むため、次受信パケットのSeq#はa+C1となる。計算した次受信パケットのSeq#をクライアント→サーバ予想Seq#として持つエントリをクライアント→サーバSeq#変換テーブル117−11に登録し(図10のS11−2)、パケットをAPヘッダパース部113に渡す(図13のT9)。
APヘッダパース部113は、渡されたパケットのAPヘッダをパースし、書換位置を特定して書換位置管理テーブル114に登録した後、APヘッダ書換部115にパケットを渡す。APヘッダ書換部115は、書換位置管理テーブル114を参照してパケットのAPヘッダの書換えを行った後、パケットをSeq/Ack#変換部116に渡す。APヘッダの書換え前後のパケットの例を図8−2、図8−3に示す。この例は、「SIP URIの@マークの手前に「_cugA」という文字列を挿入するという書換ルールによる書換え例である。図8−2を参照すると、書換え前のパケットのAPヘッダにはSIP URIの@マークが3箇所あるため、APヘッダパース部113はそれぞれの@マークの手前の位置を書換位置として検出し、書換位置管理テーブル114に登録する。例えばAPヘッダの先頭を0バイト目とした場合に、1番目の@マークの手前がαバイト目、2番目の@マークの手前がβバイト目、3番目の@マークの手前がγバイト目とすると、APヘッダパース部113は、例えば図8−1の1行目のエントリに示すように、コネクションIDが1、Seq#がaであるパケットの書換位置として、α、β、γの3箇所を書換位置管理テーブル114に登録する。APヘッダ書換部115は、図8−1の1行目のエントリを参照して、図8−2に示すパケットのAPヘッダにおけるαバイト目、βバイト目、γバイト目にそれぞれ「_cugA」という文字列を挿入する。これにより、当該パケットのAPヘッダは図8−3に示すように書換えられる。なお、この例では、書換えによりパケットのデータサイズがX1増加する。
Seq/Ack#変換部116は、APヘッダ書換部115から渡されたパケットから、次転送パケットのSeq#を計算する(図13のT1、T10)。図10のS11の例では、APヘッダ書換部115から渡されたパケットのSeq#はaであり、パケットはTCPヘッダ以降にC1+X1バイトのデータを含むため、次転送パケットのSeq#はa+C1+X1となる。TCPコネクションハンドリング部111からパケットを渡された際に作成したクライアント→サーバSeq#変換テーブル117−11のエントリに、計算した次転送パケットのSeq#をクライアント→サーバ変換Seq#として登録する(図10のS11−2、図13のT11)。
また、図10のS11−2において登録したクライアント→サーバ予想Seq#をサーバ→クライアント変換Ack#として、クライアント→サーバ変換Seq#をサーバ→クライアント予想Ack#としてそれぞれ持つエントリを、サーバ→クライアントAck#変換テーブル117−22に登録する(図10のS11−3、図13のT12)。その後、パケットをTCPコネクションハンドリング部111に渡す(図13のT13)。
TCPコネクションハンドリング部111は、Seq/Ack#変換部116から渡されたパケットをサーバ300へ転送する(図10のS12)。
以降、クライアント200の送信したパケットをゲートウェイモジュール110がインターセプトすると、上記と同様の処理が繰り返される(図10のS13〜S15)。
[サーバ→クライアント]
図11にTCPコネクション開設後にサーバ300からクライアント200へ送信されるパケットを転送する際のゲートウェイモジュール110の動作例を示す。
図11にTCPコネクション開設後にサーバ300からクライアント200へ送信されるパケットを転送する際のゲートウェイモジュール110の動作例を示す。
ゲートウェイモジュール110がサーバ300の送信したパケットをインターセプトすると(図11のS16)、TCPコネクションハンドリング部111は、パケットをSeq/Ack#変換部116に渡す。
Seq/Ack#変換部116は、TCPコネクションハンドリング部111からパケットを渡されると、Seq/Ack#変換テーブル117のサーバ→クライアントSeq/Ack#変換テーブル117−2を参照し、Seq#/Ack#の書換えを行う(図13のT1〜T5)。具体的には、渡されたパケットのSeq#およびAck#と同じサーバ→クライアント予想Seq#およびサーバ→クライアント予想Ack#を持つエントリを検索し、当該エントリに記載されたサーバ→クライアント変換Seq#およびサーバ→クライアント変換Ack#へ、渡されたパケットのSeq#/Ack#を書換える(図11のS17−1及び17−2)。図11のS17では、Seq#がbからbに書換えられると共に、Ack#がa+C1+X1からa+C1に書換えられる。
また、Seq/Ack#変換部116は、Seq/Ack#変換テーブル117への新規エントリの登録を行う(図13のT7、T8)。まず、次受信パケットのSeq#をパケットのSeq#から計算する。図11のS17の例ではパケットのSeq#はbであり、パケットはTCPヘッダ以降にS1バイトのデータを含むため、次受信パケットのSeq#はb+S1となる。計算した次受信パケットのSeq#をサーバ→クライアント予想Seq#として持つエントリをサーバ→クライアントSeq#変換テーブル117−21に登録し(図11のS17−3)、パケットをAPヘッダパース部113に渡す(図13のT9)。
APヘッダパース部113は、渡されたパケットのAPヘッダをパースし、書換位置を特定して書換位置管理テーブル114に新規エントリを登録した後、APヘッダ書換部115にパケットを渡す。APヘッダ書換部115は、書換位置管理テーブル114を参照してパケットの書換えを行った後、パケットをSeq/Ack#変換部116に渡す。なお、図11のS17の例では、書換えによりパケットのデータサイズがY1増加する。
Seq/Ack#変換部116は、APヘッダ書換部115から渡されたパケットから次転送パケットのSeq#を計算する(図13のT1、T10)。図11のS17の例では、APヘッダ書換部115から渡されたパケットのSeq#はbであり、パケットはTCPヘッダ以降にS1+Y1バイトのデータを含むため、次転送パケットのSeq#はb+S1+Y1 となる。TCPコネクションハンドリング部111からパケットを渡された際に作成したサーバ→クライアントSeq#変換テーブル117−21のエントリに、計算した次転送パケットのSeq#をサーバ→クライアント変換Seq#として登録する(図11のS17−3、図13のT11)。
また、図11のS17−3において登録したサーバ→クライアント予想Seq#をクライアント→サーバ変換Ack#として、サーバ→クライアント変換Seq#をクライアント→サーバ予想Ack#としてそれぞれ持つエントリを、クライアント→サーバAck#変換テーブル117−12に登録する(図11のS17−4、図13のT12))。その後、パケットをTCPコネクションハンドリング部111に渡す(図13のT12)。
TCPコネクションハンドリング部111は、Seq/Ack#変換部116から渡されたパケットをクライアント200へ転送する(図11のS18)。
以降、サーバ300の送信したパケットをゲートウェイモジュール110がインターセプトすると、上記と同様の処理が繰り返される(図11のS19〜S21)。
(エントリ削除時)
図12にSeq/Ack#変換テーブル117のエントリ削除時のゲートウェイモジュール110の動作例を示す。
図12にSeq/Ack#変換テーブル117のエントリ削除時のゲートウェイモジュール110の動作例を示す。
ゲートウェイモジュール110がクライアント200の送信したパケットをインターセプトすると(図12のSn)、Seq/Ack#変換部116は、クライアント→サーバSeq#変換テーブル117−11およびサーバ→クライアントAck#変換テーブル117−22を参照し、クライアント→サーバ予想Seq#及びサーバ→クライアント変換Ack#の値がクライアント200の送信したパケットのSeq#からWindow Size値を差し引いた値よりも小さい値となっているエントリを削除する。図12のSnの例では、Seq#がa+C1+C2+window_size+α(α>0)のパケットを受け取っているため、クライアント→サーバ予想Seq#及びサーバ→クライアント変換Ack#の値が、a+C1+C2以下のエントリが削除される(図12のSn+1、Sn+1−1、Sn+1−2)。
ゲートウェイモジュール110がサーバ300の送信したパケットをインターセプトした場合についても、Seq/Ack#変換部117は、上記と同様にサーバ→クライアントSeq#変換テーブル117−21およびクライアント→サーバAck#変換テーブル117−12の該当するエントリを削除する。
なお、前述したようにクライアント200またはサーバ300が再送したパケットについて、Seq/Ack#変換テーブル117および書換位置管理テーブル114への登録処理を省略し、APヘッダ書換部115にパケットを直接に渡す処理を行う場合、Seq/Ack#変換部116は、図13の処理に代えて図14に示す処理を行う。ここで、ステップT21においては、TCPコネクションハンドリング部111から渡されたパケットに対して予想Seq#を計算した結果、当該予想Seq#を持つエントリが既にSeq/Ack#変換テーブル117に登録されている場合に、当該パケットが再送パケットだと判断する。また、ステップT22では、Seq/Ack#変換部116からAPヘッダ書換部115に直接にパケットが渡される。さらに、ステップT23では、APヘッダ書換部115から受け取ったパケットが、ステップT21において再送パケットであると判定されていたパケットかどうかによって、ステップT11、T12をスキップするか否かを判断している。
次に本実施の形態の効果を説明する。
第1の効果は、パケットのAPヘッダを書換えて転送するゲートウェイ装置において、TCPコネクションを終端する必要がなくなり、ゲートウェイ装置の負荷軽減が可能になることである。
その理由は、ゲートウェイモジュール110におけるSeq/Ack#変換部116が、APヘッダ書換えに伴うパケットサイズ変更に応じてパケットのSeq#及びAck#を書換えた後、クライアント200やサーバ300にパケットを転送することで、クライアント200やサーバ300がSeq#及びAck#からパケットロスを正しく把握することが可能となり、これによりパケットの再送制御やフロー制御はクライアント200やサーバ300で行われるためである。
第2の効果は、ゲートウェイモジュール110が保持する各種テーブル117、114のサイズが小さく保たれることである。
その理由は、ゲートウェイモジュール110が転送するパケットのうち、送信元へ受信側から対応するAckが届いたことが保証されたパケットについて、当該パケットに対応するSeq/Ack#変換テーブル117および書換位置管理テーブル114のエントリを、Seq/Ack#変換部116及びAPヘッダパース部113がそれぞれ消去するためである。
第3の効果は、ゲートウェイモジュール110におけるAPヘッダのパース処理の回数が少なくなることである。
その理由は、ゲートウェイモジュール部110が転送するパケットのうち、転送パケットのSeq#と同じ予想Seq#を持つエントリがSeq/Ack#変換テーブル117にすでに登録されているパケットは再送パケットと判断し、再送パケットについてはAPヘッダパース部113によるAPヘッダのパース処理を行わないためである。
『第2の実施の形態』
次に本発明の第2の実施の形態について図面を参照して詳細に説明する。
次に本発明の第2の実施の形態について図面を参照して詳細に説明する。
クライアントとサーバがTCPコネクションを利用して通信を行う場合、クライアント−サーバ間で送受信するメッセージが複数のパケットに分割して(メッセージがフラグメントされて)送信される場合がある。たとえばSIPの場合は、通常トランスポートプロトコルとしてUDPが用いられるが、ネットワークの許容するパケットの最大長(MTU)よりも大きいSIPメッセージを送受信する場合、トランスポートプロトコルとしてTCPを用いることが規定されている。
このようなケースでは、パケットのバッファリングを行ってメッセージを再構築してからAPヘッダのパースを行った方が、APヘッダの書換位置を把握するのに都合が良い。
例えば書換位置を特定のテキストパターンによって検出する場合、当該テキストパターンが複数のパケットにまたがって存在している可能性があるため(たとえばテキストパターンが"ip addr"であるとして"i"が一つ目のパケットの終端部分に、"p addr"が二つ目のパケットの先頭部分にあるような場合)、メッセージを再構築すること無しに、こうしたケースに対応しようとすると、テキストパターンに応じてパケットの終端部分を記憶しておくなどの処理(たとえば前述の例ではパケットの終端部分5バイト以上を常に記憶するなど)を行う必要がある。
メッセージの再構築を行わない場合、上述したメッセージのフラグメントに対応するための処理は、APヘッダ書換位置の検出ルールが複雑化するのに伴ってより複雑となり、かつそうした処理は特定の書換位置検出ルールにしか対応できないため汎用性に乏しい。
これに対して、メッセージの再構築はパケットをバッファリングしなければならないものの、パケット中からメッセージの終端位置(先頭位置)を検出することで実現でき、メッセージの終端位置(先頭位置)の検出処理は、APヘッダ書換位置の検出処理に比べて多くの場合単純であることが想定され、かつ特定の書換位置検出ルールによらずアプリケーションレベルのプロトコルによって検出ルールが一意に決まるため汎用的である。
このような観点から第2の実施の形態におけるゲートウェイモジュール110’は、メッセージがフラグメントされている場合、パケットバッファリングし、メッセージを再構築する機能を持つ。また、バッファリングするパケットの数を最小限に抑えることで、必要なバッファ記憶容量を削減する。
図15を参照すると、第2の実施の形態におけるゲートウェイモジュール110’は、メッセージの再構築を行うためのパケットバッファ部118を有する点で第1の実施の形態におけるゲートウェイモジュール110と相違する。また、パケットバッファ部118を有することから、Seq/Ack#変換部116’、APヘッダ書換部115’およびAPヘッダパース部113’の機能も、第1の実施の形態におけるゲートウェイモジュール110のSeq/Ack#変換部116、APヘッダ書換部115およびAPヘッダパース部113と一部相違する。
以下、本実施の形態のゲートウェイモジュール110’の構成要素のうち、第1の実施の形態と動作が異なる構成要素について説明する。(説明しない構成要素は第一の実施の形態と動作が一緒)。
(Seq/Ack#変換部116’)
Seq/Ack#変換部116’は、TCPコネクションハンドリング部111からパケットを受け取り、第1の実施の形態におけるSeq/Ack#変換部116の説明で述べた(1)、(2)の処理を行った後、パケットをパケットバッファ部118に渡す。APヘッダ書換部115’からパケットを渡された際のSeq/Ack#変換部116’の動作は第1の実施の形態と同じである。
Seq/Ack#変換部116’は、TCPコネクションハンドリング部111からパケットを受け取り、第1の実施の形態におけるSeq/Ack#変換部116の説明で述べた(1)、(2)の処理を行った後、パケットをパケットバッファ部118に渡す。APヘッダ書換部115’からパケットを渡された際のSeq/Ack#変換部116’の動作は第1の実施の形態と同じである。
[再送パケットへの対応]
なお、クライアント200またはサーバ300が再送したパケットについては、以下の説明で述べるようにメッセージの終端位置や書換位置の検出結果が既に書換位置管理テーブルに記録されているため、パケットバッファ部118には渡さず直接にAPヘッダ書換部115’に渡してもよい(すなわちパケットのバッファリングやAPヘッダのパースは行わなくてもよい)。さらに第1の実施の形態におけるSeq/Ack#変換部116と同様に(2)の処理(Seq/Ack#変換テーブルの管理)も省略してもよい。TCPコネクションハンドリング部111から渡されたパケットが再送パケットか否かについては、第1の実施の形態におけるSeq/Ack#変換部116と同様の処理で判断する。
なお、クライアント200またはサーバ300が再送したパケットについては、以下の説明で述べるようにメッセージの終端位置や書換位置の検出結果が既に書換位置管理テーブルに記録されているため、パケットバッファ部118には渡さず直接にAPヘッダ書換部115’に渡してもよい(すなわちパケットのバッファリングやAPヘッダのパースは行わなくてもよい)。さらに第1の実施の形態におけるSeq/Ack#変換部116と同様に(2)の処理(Seq/Ack#変換テーブルの管理)も省略してもよい。TCPコネクションハンドリング部111から渡されたパケットが再送パケットか否かについては、第1の実施の形態におけるSeq/Ack#変換部116と同様の処理で判断する。
(パケットバッファ部118)
パケットバッファ部118は、Seq/Ack#変換部116’からパケットを受け取ると、パケットをバッファに記憶し、フラグメントされたメッセージの再構築処理を行う機能を有する。
パケットバッファ部118は、Seq/Ack#変換部116’からパケットを受け取ると、パケットをバッファに記憶し、フラグメントされたメッセージの再構築処理を行う機能を有する。
具体的には、パケットバッファ部118は、Seq/Ack#変換部116’からパケットを受け取ると、受け取ったパケットをバッファリングし、バッファリングされている全てのパケットに対して前回検出したメッセージ終端位置からメッセージの終端位置検索を開始する。なお、TCPコネクション構築後、クライアント200またはサーバ300が一番最初に送信したパケットについては、当該パケットのTCPヘッダの直後からメッセージの終端位置検索を開始する。
パケットバッファ部118は、バッファリングされているパケットの最後(すなわちSeq/Ack#変換部116’から受け取ったパケットの最後)まで終端位置検索を行った後、メッセージの終端位置を検出した場合には、終端位置が検出された全てのメッセージについて先頭位置(多くのアプリケーションプロトコルでは前回検出したメッセージ終端位置の直後となる)と終端位置をAPヘッダパース部113’に通知するとともに、APヘッダパース部113’における書換位置検出完了後、最後にバッファリングしたパケットを除く全てのパケットを、APヘッダ書換部115’に渡すとともにバッファから消去する。なお、メッセージの終端位置が最後にバッファリングしたパケットの最後尾と一致する場合は、最後にバッファリングしたパケットも含めてすべてのパケットをAPヘッダ書換部115’に渡すとともにバッファから消去する。なお、全ての場合においてバッファからパケットを消去する処理については省略してもよい。
パケットバッファ部118は、メッセージの終端位置を検索した結果、メッセージの終端位置が検出されなかった場合は何も行わない。
図16にパケットバッファ部118の動作例を示す。図16に示す例では、メッセージA、B、Cがパケット《1》、《2》、《3》により送信され、メッセージAがパケット《1》に、メッセージBがパケット《1》、《2》に、メッセージCが《2》、《3》にそれぞれ含まれている。以下順を追って動作を説明する。
図16のU1、U2:
パケットバッファ部118は、パケット《1》を受け取ると、パケット《1》をバッファリングし、メッセージの終端位置を検索する。ここではメッセージAの終端位置が特定される。パケットの最後までメッセージの終端位置検索を行った後、APヘッダパース部113’にメッセージAの先頭位置、終端位置を通知する。パケット《1》にはメッセージBの一部が含まれるためバッファに残す。
パケットバッファ部118は、パケット《1》を受け取ると、パケット《1》をバッファリングし、メッセージの終端位置を検索する。ここではメッセージAの終端位置が特定される。パケットの最後までメッセージの終端位置検索を行った後、APヘッダパース部113’にメッセージAの先頭位置、終端位置を通知する。パケット《1》にはメッセージBの一部が含まれるためバッファに残す。
図16のU3:
パケットバッファ部118は、パケット《2》を受け取ると、パケット《2》をバッファリングし、メッセージの終端位置の検索を行う。ここではメッセージBの終端位置が特定される。パケットの最後までメッセージの終端位置検索を行った後、APヘッダパース部113’にメッセージBの先頭位置、終端位置を通知する。
パケットバッファ部118は、パケット《2》を受け取ると、パケット《2》をバッファリングし、メッセージの終端位置の検索を行う。ここではメッセージBの終端位置が特定される。パケットの最後までメッセージの終端位置検索を行った後、APヘッダパース部113’にメッセージBの先頭位置、終端位置を通知する。
図16のU4:
パケットバッファ部118は、パケット《1》に含まれるメッセージについては先頭位置、終端位置の検出が完了したため、書換位置の検出完了後、パケット《1》をバッファから廃棄し、パケット《1》をAPヘッダ書換部115’に渡す。パケット《2》についてはメッセージCの一部が含まれるため、バッファに残す。
パケットバッファ部118は、パケット《1》に含まれるメッセージについては先頭位置、終端位置の検出が完了したため、書換位置の検出完了後、パケット《1》をバッファから廃棄し、パケット《1》をAPヘッダ書換部115’に渡す。パケット《2》についてはメッセージCの一部が含まれるため、バッファに残す。
図16のU5、6:
パケットバッファ部118は、パケット《3》を受け取ると、パケット《3》をバッファリングし、メッセージの終端位置の検索を行う。ここではメッセージCの終端位置が特定される。パケットの最後までメッセージの終端位置検索を行った後、APヘッダパース部113’にメッセージBの先頭位置、終端位置を通知する。
パケットバッファ部118は、パケット《3》を受け取ると、パケット《3》をバッファリングし、メッセージの終端位置の検索を行う。ここではメッセージCの終端位置が特定される。パケットの最後までメッセージの終端位置検索を行った後、APヘッダパース部113’にメッセージBの先頭位置、終端位置を通知する。
図16のU7:
パケットバッファ部118は、パケット《2》及び《3》に含まれるメッセージについて先頭位置、終端位置の検出が完了したため、書換位置検出完了後、パケット《2》、《3》をバッファから廃棄し、パケット《2》、《3》をAPヘッダ書換部115’に渡す。
パケットバッファ部118は、パケット《2》及び《3》に含まれるメッセージについて先頭位置、終端位置の検出が完了したため、書換位置検出完了後、パケット《2》、《3》をバッファから廃棄し、パケット《2》、《3》をAPヘッダ書換部115’に渡す。
(APヘッダパース部113’)
APヘッダパース部113’は、パケットバッファ部118からメッセージの先頭位置、終端位置の通知を受けると、パケットバッファ部118にバッファリングされているパケットに対して通知された先頭位置から終端位置までの範囲内で書換位置の検索を行い、検出した書換位置を記述したエントリを書換位置管理テーブル114に登録する。なお、書換位置管理テーブル114に登録するエントリやエントリの削除処理は第1の実施の形態におけるAPヘッダパース部113と同様である。
APヘッダパース部113’は、パケットバッファ部118からメッセージの先頭位置、終端位置の通知を受けると、パケットバッファ部118にバッファリングされているパケットに対して通知された先頭位置から終端位置までの範囲内で書換位置の検索を行い、検出した書換位置を記述したエントリを書換位置管理テーブル114に登録する。なお、書換位置管理テーブル114に登録するエントリやエントリの削除処理は第1の実施の形態におけるAPヘッダパース部113と同様である。
(APヘッダ書換部115’)
APヘッダ書換部115’は、パケットバッファ部118からパケットを受け取ると、書換位置管理テーブル114を参照して当該パケットの書換位置を把握し、APヘッダを書換える。APヘッダ書換え後、パケットをSeq/Ack#変換部116’に渡す。
APヘッダ書換部115’は、パケットバッファ部118からパケットを受け取ると、書換位置管理テーブル114を参照して当該パケットの書換位置を把握し、APヘッダを書換える。APヘッダ書換え後、パケットをSeq/Ack#変換部116’に渡す。
本実施の形態によれば、第1の実施の形態と同様な第1乃至第3の効果が得られると同時に、以下の効果が得られる。
第4の効果は、ゲートウェイモジュール110’にバッファリングされるパケットの量が少なく保たれることである。
その理由は、パケットバッファ部118は、メッセージ先頭終端位置検索処理において最後に記憶したパケットにアプリケーションプロトコルのメッセージの終端位置を検出した場合は、メッセージに対するAPヘッダパース部110’による解析が終了した時点で、最後に記憶したパケットを除き記憶している全てのパケットをバッファから消去するためである。
第5の効果は、アプリケーションプロトコルメッセージの終端位置検索処理の回数が小さく保たれることである。
その理由は、ゲートウェイモジュール110’が転送するパケットのうち、そのパケットのSeq#と同じ予想Seq#を持つエントリがSeq/Ack#変換テーブル117に既に登録されているパケットは再送パケットと判断し、再送パケットについては、パケットバッファ部118でバッファリングを行わず、アプリケーションプロトコルメッセージの終端位置検索を行わないためである。
以上、本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。例えば、特定のパケットについては転送しないで廃棄する実施の形態も可能である。具体的には、APヘッダの書換ルール次第では、パケットに含まれるAPヘッダ全体が削除されるようなケースがある。このようなケースにおいても、書換え前にx(>0)バイトだったパケットサイズが書換えによって0バイトに変更したと考えて、通常の書換え時(すなわちAPヘッダ書換え後もパケットサイズが0にならない場合)と同様に処理してよい。しかし、パケットサイズが0バイトのパケットはIPヘッダやTCPヘッダのみからなる空のパケットであるため、パケットの転送が無意味でネットワーク帯域の浪費になるケースもある(書換え前からパケットサイズが0バイトのパケットについてはこの限りではない)。このため、書換え後にAPヘッダ全体が削除されるようなパケットについては廃棄し、転送しないという処理を行っても良い。
110…ゲートウェイモジュール
111…TCPコネクションハンドリング部
112…コネクション管理テーブル
113…APヘッダパース部
114…書換位置管理テーブル
115…APヘッダ書換部
116…Seq/Ack#変換部
117…Seq/Ack#変換テーブル
200…クライアント
300…サーバ
111…TCPコネクションハンドリング部
112…コネクション管理テーブル
113…APヘッダパース部
114…書換位置管理テーブル
115…APヘッダ書換部
116…Seq/Ack#変換部
117…Seq/Ack#変換テーブル
200…クライアント
300…サーバ
Claims (33)
- 端末間のTCPコネクションを流れるパケットのTCPヘッダ以降のデータであるAPヘッダを書換えて転送するゲートウェイ装置であって、
パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のシーケンス番号との組を、予想シーケンス番号および変換シーケンス番号の組、ならびに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack番号および変換Ack番号の組として登録するエントリを有する番号変換テーブルと、
パケットの転送時に、前記番号変換テーブルを参照して、転送するパケットのTCPヘッダに含まれるシーケンス番号およびAck番号を、それらに一致する予想シーケンス番号および予想Ack番号に対応する変換シーケンス番号および変換Ack番号に書換える番号書換処理を行う変換手段とを備えることを特徴とするゲートウェイ装置。 - 前記番号変換テーブルは、予想シーケンス番号と変換シーケンス番号の組からなるエントリと、予想Ack番号と変換Ack番号の組からなるエントリとが、前記パケットの転送方向毎に登録されるものであり、
前記変換手段が行う番号書換処理においては、転送パケットと転送方向が同じでかつ転送パケットのTCPヘッダのシーケンス番号及びAck番号と一致する予想シーケンス番号及び予想Ack番号を持つエントリを前記番号変換テーブルから検索し、転送パケットのTCPヘッダのシーケンス番号及びAck番号を前記検索したエントリに記載された変換シーケンス番号および変換Ack番号に書換えることを特徴とする請求項1に記載のゲートウェイ装置。 - 前記変換手段は、前記番号書換処理に加えて番号変換テーブル管理処理を行うものであり、前記番号変換テーブル管理処理は、転送パケットと転送方向が同じエントリを登録する同一転送方向エントリ登録処理と転送方向が逆のエントリを登録する逆転送方向エントリ登録処理とを含み、前記同一転送方向エントリ登録処理においては、転送パケットに対してシーケンス番号およびAck番号の書換処理およびAPヘッダの書換処理を行う前の転送パケットのTCPヘッダのシーケンス番号とAPヘッダのサイズの和を予想シーケンス番号に持ち、シーケンス番号およびAck番号の書換処理および前記APヘッダの書換処理を行った後の転送パケットのTCPヘッダのシーケンス番号とAPヘッダのサイズの和を変換シーケンス番号に持つエントリを前記番号変換テーブルに登録し、前記逆転送方向エントリ登録処理においては、前記同一転送方向エントリ登録処理において登録したエントリの予想シーケンス番号と同じ値を変換Ack番号に持ち、前記同一転送方向エントリ登録処理において登録したエントリの変換シーケンス番号と同じ値を予想Ack番号に持つエントリを前記番号変換テーブルに登録することを特徴とする請求項2に記載のゲートウェイ装置。
- 前記パケットのシーケンス番号とAPヘッダの書換位置の組を記載したエントリが前記パケットの転送方向毎に登録された書換位置管理テーブルと、
転送パケットのAPヘッダを解析して書換位置を検索する書換位置検索処理と、該書換位置検索処理で検索された書換位置を含むエントリを前記書換位置管理テーブルに登録する書換位置管理テーブル管理処理とを行うAPヘッダパース手段と、
前記書換位置管理テーブルを参照して転送パケットのAPヘッダを書換えるAPヘッダ書換処理を行うAPヘッダ書換手段とを備えることを特徴とする請求項1乃至3の何れか1項に記載のゲートウェイ装置。 - 転送パケットのうち、シーケンス番号と同じ予想シーケンス番号を持つエントリが前記番号変換テーブルにすでに登録されているパケットについては、前記APヘッダ書換位置検索処理を行わないことを特徴とする請求項4に記載のゲートウェイ装置。
- 前記変換手段は、前記番号変換テーブル管理処理において、さらに、パケットの送信側へ受信側から対応するAckが届いたことが保証されたAck到達パケットを把握するAck到達パケット検出処理と、前記Ack到達パケットと同一の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さい予想シーケンス番号を持つエントリと、前記Ack到達パケットと逆の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さい変換Ack番号を持つエントリを、前記番号変換テーブルから削除する番号変換テーブルエントリ削除処理を行うことを特徴とする請求項1乃至5の何れか1項に記載のゲートウェイ装置。
- 前記APヘッダパース手段は、前記書換位置管理テーブル管理処理において、さらに、パケットのうち送信側へ受信側から対応するAckが届いたことが保証されたAck到達パケットを把握するAck到達パケット検出処理と、前記Ack到達パケットと同一の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さいシーケンス番号を持つエントリを、前記書換位置管理テーブルから削除する書換位置管理テーブルエントリ削除処理を行うことを特徴とする請求項4または5に記載のゲートウェイ装置。
- 前記Ack到達パケット検出処理においては、前記TCPコネクション上で最後にインターセプトしたパケットのシーケンス番号から、前記TCPコネクション構築時に決定されたWindow Scaleオプション値により計算される前記TCPコネクション上で利用可能な最大受信Window Sizeを引いた値よりも小さいシーケンス番号を持つパケットを前記Ack到達パケットとして把握することを特徴とする請求項6または7に記載のゲートウェイ装置。
- 前記Ack到達パケット検出処理においては、前記TCPコネクション上で最後にインターセプトしたパケットのシーケンス番号から、前記TCPコネクション構築後に前記TCPコネクションにおいてパケット受信側から通知された最大のWindow Sizeを引いた値よりも小さいシーケンス番号を持つパケットを前記Ack到達パケットとして把握することを特徴とする請求項6または7に記載のゲートウェイ装置。
- 転送パケットを記憶するバッファを有し、アプリケーションプロトコルのメッセージの先頭と終端位置を検索して前記APヘッダパース手段に通知するメッセージ先頭終端位置検索処理を行うパケットバッファ手段を備え、
前記パケットバッファ手段は、前記メッセージ先頭終端位置検索処理において最後に記憶したパケットにアプリケーションプロトコルのメッセージの終端位置を検出した場合は、前記メッセージに対する前記APヘッダパース手段による解析が終了した時点で、最後に記憶したパケットを除き記憶している全てのパケットをバッファから消去することを特徴とする請求項4または5に記載のゲートウェイ装置。 - 転送パケットのうち、シーケンス番号と同じ予想シーケンス番号を持つエントリが前記番号変換テーブルにすでに登録されているパケットについては、前記パケットバッファ手段によるバッファへの記憶は行わないことを特徴とする請求項10に記載のゲートウェイ装置。
- ゲートウェイ装置において端末間のTCPコネクションを流れるパケットのTCPヘッダ以降のデータであるAPヘッダを書換えて転送する方法であって、
前記ゲートウェイ装置が、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のシーケンス番号との組を、予想シーケンス番号および変換シーケンス番号の組、ならびに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack番号および変換Ack番号の組として番号変換テーブルに登録するステップと、
前記ゲートウェイ装置が、パケットの転送時に、前記番号変換テーブルを参照して、転送するパケットのTCPヘッダに含まれるシーケンス番号およびAck番号を、それらに一致する予想シーケンス番号および予想Ack番号に対応する変換シーケンス番号および変換Ack番号に書換える番号書換処理を行うステップとを含むことを特徴とするパケット転送方法。 - 前記番号変換テーブルは、予想シーケンス番号と変換シーケンス番号の組からなるエントリと、予想Ack番号と変換Ack番号の組からなるエントリとが、前記パケットの転送方向毎に登録されるものであり、
前記番号書換処理においては、転送パケットと転送方向が同じでかつ転送パケットのTCPヘッダのシーケンス番号及びAck番号と一致する予想シーケンス番号及び予想Ack番号を持つエントリを前記番号変換テーブルから検索し、転送パケットのTCPヘッダのシーケンス番号及びAck番号を前記検索したエントリに記載された変換シーケンス番号および変換Ack番号に書換えることを特徴とする請求項12に記載のパケット転送方法。 - 前記ゲートウェイ装置が、番号変換テーブル管理処理を行うステップを含み、
前記番号変換テーブル管理処理は、転送パケットと転送方向が同じエントリを登録する同一転送方向エントリ登録処理と転送方向が逆のエントリを登録する逆転送方向エントリ登録処理とを含み、前記同一転送方向エントリ登録処理においては、転送パケットに対してシーケンス番号およびAck番号の書換処理およびAPヘッダの書換処理を行う前の転送パケットのTCPヘッダのシーケンス番号とAPヘッダのサイズの和を予想シーケンス番号に持ち、シーケンス番号およびAck番号の書換処理および前記APヘッダの書換処理を行った後の転送パケットのTCPヘッダのシーケンス番号とAPヘッダのサイズの和を変換シーケンス番号に持つエントリを前記番号変換テーブルに登録し、前記逆転送方向エントリ登録処理においては、前記同一転送方向エントリ登録処理において登録したエントリの予想シーケンス番号と同じ値を変換Ack番号に持ち、前記同一転送方向エントリ登録処理において登録したエントリの変換シーケンス番号と同じ値を予想Ack番号に持つエントリを前記番号変換テーブルに登録することを特徴とする請求項13に記載のパケット転送方法。 - 前記ゲートウェイ装置は、前記パケットのシーケンス番号とAPヘッダの書換位置の組を記載したエントリが前記パケットの転送方向毎に登録された書換位置管理テーブルを備え、
前記ゲートウェイ装置が、転送パケットのAPヘッダを解析して書換位置を検索する書換位置検索処理と、該書換位置検索処理で検索された書換位置を含むエントリを前記書換位置管理テーブルに登録する書換位置管理テーブル管理処理とを行うステップと、
前記ゲートウェイ装置が、前記書換位置管理テーブルを参照して転送パケットのAPヘッダを書換えるAPヘッダ書換処理を行うステップとを含むことを特徴とする請求項12乃至14の何れか1項に記載のパケット転送方法。 - 前記ゲートウェイ装置は、転送パケットのうち、シーケンス番号と同じ予想シーケンス番号を持つエントリが前記番号変換テーブルにすでに登録されているパケットについては、前記APヘッダの書換位置検索処理を行わないことを特徴とする請求項15に記載のパケット転送方法。
- 前記ゲートウェイ装置が、パケットの送信側へ受信側から対応するAckが届いたことが保証されたAck到達パケットを把握するAck到達パケット検出処理と、前記Ack到達パケットと同一の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さい予想シーケンス番号を持つエントリと、前記Ack到達パケットと逆の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さい変換Ack番号を持つエントリを、前記番号変換テーブルから削除する番号変換テーブルエントリ削除処理を行うステップを含むことを特徴とする請求項12乃至16の何れか1項に記載のパケット転送方法。
- 前記ゲートウェイ装置が、パケットのうち送信側へ受信側から対応するAckが届いたことが保証されたAck到達パケットを把握するAck到達パケット検出処理と、前記Ack到達パケットと同一の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さいシーケンス番号を持つエントリを、前記書換位置管理テーブルから削除する書換位置管理テーブルエントリ削除処理を行うステップを含むことを特徴とする請求項15または16に記載のパケット転送方法。
- 前記Ack到達パケット検出処理においては、前記TCPコネクション上で最後にインターセプトしたパケットのシーケンス番号から、前記TCPコネクション構築時に決定されたWindow Scaleオプション値により計算される前記TCPコネクション上で利用可能な最大受信Window Sizeを引いた値よりも小さいシーケンス番号を持つパケットを前記Ack到達パケットとして把握することを特徴とする請求項17または18に記載のパケット転送方法。
- 前記Ack到達パケット検出処理においては、前記TCPコネクション上で最後にインターセプトしたパケットのシーケンス番号から、前記TCPコネクション構築後に前記TCPコネクションにおいてパケット受信側から通知された最大のWindow Sizeを引いた値よりも小さいシーケンス番号を持つパケットを前記Ack到達パケットとして把握することを特徴とする請求項17または18に記載のパケット転送方法。
- 前記ゲートウェイ装置は転送パケットを記憶するバッファを有し、
前記ゲートウェイ装置が、アプリケーションプロトコルのメッセージの先頭と終端位置を検索して前記APヘッダパース手段に通知するメッセージ先頭終端位置検索処理を行うステップと、
前記ゲートウェイ装置が、前記メッセージ先頭終端位置検索処理において最後に記憶したパケットにアプリケーションプロトコルのメッセージの終端位置を検出した場合は、前記メッセージに対する前記APヘッダパース手段による解析が終了した時点で、最後に記憶したパケットを除き記憶している全てのパケットをバッファから消去するステップとを含むことを特徴とする請求項15または16に記載のパケット転送方法。 - 前記ゲートウェイ装置が、転送パケットのうち、シーケンス番号と同じ予想シーケンス番号を持つエントリが前記番号変換テーブルにすでに登録されているパケットについては、バッファへの記憶は行わないことを特徴とする請求項21に記載のパケット転送方法。
- 端末間のTCPコネクションを流れるパケットのTCPヘッダ以降のデータであるAPヘッダを書換えて転送するゲートウェイ装置であって、パケットの転送時に、次に転送するパケットのTCPヘッダに含まれることが予想されるシーケンス番号とAPヘッダの書換えによるパケットサイズの変更を考慮して求めた変換後のシーケンス番号との組を、予想シーケンス番号および変換シーケンス番号の組、ならびに、前記転送したパケットの転送方向と逆の転送方向におけるパケットのTCPヘッダに含まれる予想Ack番号および変換Ack番号の組として登録するエントリを有する番号変換テーブルを有するゲートウェイ装置を構成するコンピュータを、
パケットの転送時に、前記番号変換テーブルを参照して、転送するパケットのTCPヘッダに含まれるシーケンス番号およびAck番号を、それらに一致する予想シーケンス番号および予想Ack番号に対応する変換シーケンス番号および変換Ack番号に書換える番号書換処理を行う変換手段として機能させるためのプログラム。 - 前記番号変換テーブルは、予想シーケンス番号と変換シーケンス番号の組からなるエントリと、予想Ack番号と変換Ack番号の組からなるエントリとが、前記パケットの転送方向毎に登録されるものであり、
前記変換手段が行う番号書換処理においては、転送パケットと転送方向が同じでかつ転送パケットのTCPヘッダのシーケンス番号及びAck番号と一致する予想シーケンス番号及び予想Ack番号を持つエントリを前記番号変換テーブルから検索し、転送パケットのTCPヘッダのシーケンス番号及びAck番号を前記検索したエントリに記載された変換シーケンス番号および変換Ack番号に書換えることを特徴とする請求項23に記載のプログラム。 - 前記変換手段は、前記番号書換処理に加えて番号変換テーブル管理処理を行うものであり、前記番号変換テーブル管理処理は、転送パケットと転送方向が同じエントリを登録する同一転送方向エントリ登録処理と転送方向が逆のエントリを登録する逆転送方向エントリ登録処理とを含み、前記同一転送方向エントリ登録処理においては、転送パケットに対してシーケンス番号およびAck番号の書換処理およびAPヘッダの書換処理を行う前の転送パケットのTCPヘッダのシーケンス番号とAPヘッダのサイズの和を予想シーケンス番号に持ち、シーケンス番号およびAck番号の書換処理および前記APヘッダの書換処理を行った後の転送パケットのTCPヘッダのシーケンス番号とAPヘッダのサイズの和を変換シーケンス番号に持つエントリを前記番号変換テーブルに登録し、前記逆転送方向エントリ登録処理においては、前記同一転送方向エントリ登録処理において登録したエントリの予想シーケンス番号と同じ値を変換Ack番号に持ち、前記同一転送方向エントリ登録処理において登録したエントリの変換シーケンス番号と同じ値を予想Ack番号に持つエントリを前記番号変換テーブルに登録することを特徴とする請求項24に記載のプログラム。
- 前記コンピュータをさらに、
転送パケットのAPヘッダを解析して書換位置を検索する書換位置検索処理と、該書換位置検索処理で検索された書換位置を含むエントリを、パケットのシーケンス番号とAPヘッダの書換位置の組を記載したエントリが前記パケットの転送方向毎に登録される書換位置管理テーブルに登録する書換位置管理テーブル管理処理とを行うAPヘッダパース手段、
前記書換位置管理テーブルを参照して転送パケットのAPヘッダを書換えるAPヘッダ書換処理を行うAPヘッダ書換手段として機能させることを特徴とする請求項23乃至25の何れか1項に記載のプログラム。 - 転送パケットのうち、シーケンス番号と同じ予想シーケンス番号を持つエントリが前記番号変換テーブルにすでに登録されているパケットについては、前記APヘッダ書換位置検索処理を行わないことを特徴とする請求項26に記載のプログラム。
- 前記変換手段は、前記番号変換テーブル管理処理において、さらに、パケットの送信側へ受信側から対応するAckが届いたことが保証されたAck到達パケットを把握するAck到達パケット検出処理と、前記Ack到達パケットと同一の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さい予想シーケンス番号を持つエントリと、前記Ack到達パケットと逆の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さい変換Ack番号を持つエントリを、前記番号変換テーブルから削除する番号変換テーブルエントリ削除処理を行うことを特徴とする請求項23乃至27の何れか1項に記載のプログラム。
- 前記APヘッダパース手段は、前記書換位置管理テーブル管理処理において、さらに、パケットのうち送信側へ受信側から対応するAckが届いたことが保証されたAck到達パケットを把握するAck到達パケット検出処理と、前記Ack到達パケットと同一の転送方向でかつ前記Ack到達パケットのシーケンス番号よりも小さいシーケンス番号を持つエントリを、前記書換位置管理テーブルから削除する書換位置管理テーブルエントリ削除処理を行うことを特徴とする請求項26または27に記載のプログラム。
- 前記Ack到達パケット検出処理においては、前記TCPコネクション上で最後にインターセプトしたパケットのシーケンス番号から、前記TCPコネクション構築時に決定されたWindow Scaleオプション値により計算される前記TCPコネクション上で利用可能な最大受信Window Sizeを引いた値よりも小さいシーケンス番号を持つパケットを前記Ack到達パケットとして把握することを特徴とする請求項28または29に記載のプログラム。
- 前記Ack到達パケット検出処理においては、前記TCPコネクション上で最後にインターセプトしたパケットのシーケンス番号から、前記TCPコネクション構築後に前記TCPコネクションにおいてパケット受信側から通知された最大のWindow Sizeを引いた値よりも小さいシーケンス番号を持つパケットを前記Ack到達パケットとして把握することを特徴とする請求項28または29に記載のプログラム。
- 前記コンピュータをさらに、
転送パケットをバッファに記憶し、アプリケーションプロトコルのメッセージの先頭と終端位置を検索して前記APヘッダパース手段に通知するメッセージ先頭終端位置検索処理を行うパケットバッファ手段であって、前記メッセージ先頭終端位置検索処理において最後に記憶したパケットにアプリケーションプロトコルのメッセージの終端位置を検出した場合は、前記メッセージに対する前記APヘッダパース手段による解析が終了した時点で、最後に記憶したパケットを除き記憶している全てのパケットをバッファから消去するパケットバッファ手段として機能させるための請求項26または27に記載のプログラム。 - 転送パケットのうち、シーケンス番号と同じ予想シーケンス番号を持つエントリが前記番号変換テーブルにすでに登録されているパケットについては、前記パケットバッファ手段によるバッファへの記憶は行わないことを特徴とする請求項32に記載のプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007329803A JP2009152953A (ja) | 2007-12-21 | 2007-12-21 | ゲートウェイ装置およびパケット転送方法 |
US12/337,983 US7969976B2 (en) | 2007-12-21 | 2008-12-18 | Gateway apparatus, packet forwarding method, and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007329803A JP2009152953A (ja) | 2007-12-21 | 2007-12-21 | ゲートウェイ装置およびパケット転送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009152953A true JP2009152953A (ja) | 2009-07-09 |
Family
ID=40788554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007329803A Withdrawn JP2009152953A (ja) | 2007-12-21 | 2007-12-21 | ゲートウェイ装置およびパケット転送方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7969976B2 (ja) |
JP (1) | JP2009152953A (ja) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010283615A (ja) * | 2009-06-04 | 2010-12-16 | Canon Inc | 通信装置、通信装置の制御方法、及びコンピュータプログラム |
JP2011172201A (ja) * | 2010-01-19 | 2011-09-01 | Alaxala Networks Corp | アドレス変換装置およびアドレス変換テーブルの管理方法 |
JP2012028888A (ja) * | 2010-07-21 | 2012-02-09 | Nippon Telegr & Teleph Corp <Ntt> | Sip通信システム、sipクライアント、sipサーバ、sip通信方法、sip通信プログラム |
WO2013172391A1 (ja) | 2012-05-15 | 2013-11-21 | 日本電気株式会社 | マルチテナントシステム、スイッチ、コントローラ、及びパケット転送方法 |
JP2014511073A (ja) * | 2011-03-25 | 2014-05-01 | コスモス | Ipネットワーク上を移動するデータストリームからデータを抽出する方法および装置 |
JP2016086232A (ja) * | 2014-10-23 | 2016-05-19 | 西日本電信電話株式会社 | クラウド交換機システム及びゲートウェイ装置とゲートウェイプログラム |
JP2017538335A (ja) * | 2014-10-30 | 2017-12-21 | 中国科学院声学研究所Institute Of Acoustics, Chinese Academy Of Sciences | プロトコルスタックがないモードにおけるtcpの中間者処理方法 |
JP2020523950A (ja) * | 2017-06-08 | 2020-08-06 | ハイアニス・ポート・リサーチ・インコーポレーテッドHyannis Port Research,Inc | 変更通知ありのtcpストリーム動的処理 |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2202935B1 (en) * | 2008-12-23 | 2012-06-20 | Nokia Siemens Networks OY | Method and device for processing data in a network |
JP5239966B2 (ja) * | 2009-03-17 | 2013-07-17 | 富士通株式会社 | 中継装置、テナント管理プログラム |
US9009293B2 (en) * | 2009-11-18 | 2015-04-14 | Cisco Technology, Inc. | System and method for reporting packet characteristics in a network environment |
US9015318B1 (en) | 2009-11-18 | 2015-04-21 | Cisco Technology, Inc. | System and method for inspecting domain name system flows in a network environment |
US9148380B2 (en) * | 2009-11-23 | 2015-09-29 | Cisco Technology, Inc. | System and method for providing a sequence numbering mechanism in a network environment |
US8792495B1 (en) | 2009-12-19 | 2014-07-29 | Cisco Technology, Inc. | System and method for managing out of order packets in a network environment |
US8935427B2 (en) * | 2010-09-23 | 2015-01-13 | Microsoft Corporation | Providing virtual networks using multi-tenant relays |
US8787303B2 (en) | 2010-10-05 | 2014-07-22 | Cisco Technology, Inc. | Methods and apparatus for data traffic offloading at a router |
US9003057B2 (en) | 2011-01-04 | 2015-04-07 | Cisco Technology, Inc. | System and method for exchanging information in a mobile wireless network environment |
CN102143078B (zh) * | 2011-03-29 | 2013-10-02 | 华为技术有限公司 | 一种报文处理方法、转发设备及系统 |
US8948013B1 (en) | 2011-06-14 | 2015-02-03 | Cisco Technology, Inc. | Selective packet sequence acceleration in a network environment |
US8737221B1 (en) | 2011-06-14 | 2014-05-27 | Cisco Technology, Inc. | Accelerated processing of aggregate data flows in a network environment |
US8743690B1 (en) | 2011-06-14 | 2014-06-03 | Cisco Technology, Inc. | Selective packet sequence acceleration in a network environment |
US8792353B1 (en) | 2011-06-14 | 2014-07-29 | Cisco Technology, Inc. | Preserving sequencing during selective packet acceleration in a network environment |
EP2571223A1 (en) * | 2011-09-14 | 2013-03-20 | Telefonaktiebolaget LM Ericsson (publ) | A gateway and a method therein for enabling sip communication over a non-standard sip transport protocol |
US9025475B1 (en) * | 2012-01-16 | 2015-05-05 | Amazon Technologies, Inc. | Proactively retransmitting data packets in a low latency packet data network |
US9027129B1 (en) * | 2012-04-30 | 2015-05-05 | Brocade Communications Systems, Inc. | Techniques for protecting against denial of service attacks |
FR3023663B1 (fr) * | 2014-07-11 | 2016-08-05 | Sagemcom Broadband Sas | Passerelle residentielle relais entre un dispositif terminal et un serveur |
US10382591B2 (en) | 2014-10-13 | 2019-08-13 | International Business Machines Corporation | Transparent inline content inspection and modification in a TCP session |
US9774631B2 (en) | 2014-10-29 | 2017-09-26 | International Business Machines Corporation | TLS connection abandoning |
CN105763474B (zh) * | 2014-12-19 | 2019-10-25 | 华为技术有限公司 | 数据传输方法和装置 |
GB2539003B (en) * | 2015-06-03 | 2018-05-09 | Openwave Mobility Inc | A method and apparatus for managing connections in a communication network |
US9990400B2 (en) | 2015-10-26 | 2018-06-05 | Salesforce.Com, Inc. | Builder program code for in-memory cache |
US9984002B2 (en) | 2015-10-26 | 2018-05-29 | Salesforce.Com, Inc. | Visibility parameters for an in-memory cache |
US10013501B2 (en) * | 2015-10-26 | 2018-07-03 | Salesforce.Com, Inc. | In-memory cache for web application data |
US10798159B2 (en) * | 2017-07-26 | 2020-10-06 | Netapp, Inc. | Methods for managing workload throughput in a storage system and devices thereof |
CN108111509B (zh) * | 2017-12-19 | 2020-11-06 | 北京百度网讯科技有限公司 | 数据传输方法 |
US10642745B2 (en) | 2018-01-04 | 2020-05-05 | Salesforce.Com, Inc. | Key invalidation in cache systems |
CN111741127B (zh) * | 2020-07-23 | 2020-11-13 | 杭州海康威视数字技术股份有限公司 | 通信连接阻断方法、装置、电子设备及存储介质 |
CN113347119B (zh) * | 2021-04-30 | 2023-01-06 | 北京华为数字技术有限公司 | 一种发送数据包的方法、装置、设备和存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3642305B2 (ja) | 2000-12-28 | 2005-04-27 | 日本電気株式会社 | 通信システムとそのパケット交換方法、及び交換プログラムを記録した記録媒体 |
JP4221646B2 (ja) | 2002-06-26 | 2009-02-12 | 日本電気株式会社 | 共有キャッシュサーバ |
US7277963B2 (en) * | 2002-06-26 | 2007-10-02 | Sandvine Incorporated | TCP proxy providing application layer modifications |
US7391768B1 (en) * | 2003-05-13 | 2008-06-24 | Cisco Technology, Inc. | IPv4-IPv6 FTP application level gateway |
US7392323B2 (en) * | 2004-11-16 | 2008-06-24 | Seiko Epson Corporation | Method and apparatus for tunneling data using a single simulated stateful TCP connection |
JP4154615B2 (ja) | 2005-12-08 | 2008-09-24 | 日本電気株式会社 | Sipサーバ共有モジュール装置、sipメッセージ中継方法、及びプログラム |
JP4634320B2 (ja) * | 2006-02-28 | 2011-02-16 | 株式会社日立製作所 | 対異常通信防御を行うための装置とネットワークシステム |
-
2007
- 2007-12-21 JP JP2007329803A patent/JP2009152953A/ja not_active Withdrawn
-
2008
- 2008-12-18 US US12/337,983 patent/US7969976B2/en not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010283615A (ja) * | 2009-06-04 | 2010-12-16 | Canon Inc | 通信装置、通信装置の制御方法、及びコンピュータプログラム |
JP2011172201A (ja) * | 2010-01-19 | 2011-09-01 | Alaxala Networks Corp | アドレス変換装置およびアドレス変換テーブルの管理方法 |
JP2012028888A (ja) * | 2010-07-21 | 2012-02-09 | Nippon Telegr & Teleph Corp <Ntt> | Sip通信システム、sipクライアント、sipサーバ、sip通信方法、sip通信プログラム |
JP2014511073A (ja) * | 2011-03-25 | 2014-05-01 | コスモス | Ipネットワーク上を移動するデータストリームからデータを抽出する方法および装置 |
WO2013172391A1 (ja) | 2012-05-15 | 2013-11-21 | 日本電気株式会社 | マルチテナントシステム、スイッチ、コントローラ、及びパケット転送方法 |
US9654394B2 (en) | 2012-05-15 | 2017-05-16 | Nec Corporation | Multi-tenant system, switch, controller and packet transferring method |
JP2016086232A (ja) * | 2014-10-23 | 2016-05-19 | 西日本電信電話株式会社 | クラウド交換機システム及びゲートウェイ装置とゲートウェイプログラム |
JP2017538335A (ja) * | 2014-10-30 | 2017-12-21 | 中国科学院声学研究所Institute Of Acoustics, Chinese Academy Of Sciences | プロトコルスタックがないモードにおけるtcpの中間者処理方法 |
JP2020523950A (ja) * | 2017-06-08 | 2020-08-06 | ハイアニス・ポート・リサーチ・インコーポレーテッドHyannis Port Research,Inc | 変更通知ありのtcpストリーム動的処理 |
JP7184881B2 (ja) | 2017-06-08 | 2022-12-06 | ハイアニス・ポート・リサーチ・インコーポレーテッド | 変更通知ありのtcpストリーム動的処理 |
Also Published As
Publication number | Publication date |
---|---|
US7969976B2 (en) | 2011-06-28 |
US20090161680A1 (en) | 2009-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009152953A (ja) | ゲートウェイ装置およびパケット転送方法 | |
US10158570B2 (en) | Carrying TCP over an ICN network | |
US9008100B2 (en) | Wavefront detection and disambiguation of acknowledgments | |
WO2020063298A1 (zh) | 处理tcp报文的方法、toe组件以及网络设备 | |
US7656799B2 (en) | Flow control system architecture | |
US8462630B2 (en) | Early generation of acknowledgements for flow control | |
US8233392B2 (en) | Transaction boundary detection for reduction in timeout penalties | |
US7698453B2 (en) | Early generation of acknowledgements for flow control | |
US8411560B2 (en) | TCP selection acknowledgements for communicating delivered and missing data packets | |
EP3035638A1 (en) | Interest acknowledgements for information centric networking | |
EP2892189A1 (en) | System and method for diverting established communication sessions | |
US20060221825A1 (en) | Congestion control network relay device and method | |
US20040006643A1 (en) | TCP proxy providing application layer modifications | |
US10361921B2 (en) | Method and apparatus for managing connections in a communication network | |
CN105939297B (zh) | 一种tcp报文重组方法和装置 | |
JP2008536369A (ja) | 接続転送 | |
US10516615B2 (en) | Network traffic congestion control | |
US20150373135A1 (en) | Wide area network optimization | |
US20070291782A1 (en) | Acknowledgement filtering | |
JP4658546B2 (ja) | フェイルオーバーイベントをサポートするネットワーク状態オブジェクトの多重オフロード | |
JP2005520374A (ja) | Tcp/ipに対する変更 | |
WO2019243890A2 (en) | Multi-port data transmission via udp | |
JP2016019066A (ja) | パケット中継システム、パケット中継装置、およびパケット中継方法 | |
JP2000232480A (ja) | パケットヘッダ変換装置および通信ノード装置 | |
EP3525419A1 (en) | Connectionless protocol with bandwidth and congestion control |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20091008 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20091008 |
|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20110301 |