JP2009164947A - サーバ、パケット転送方法およびプログラム - Google Patents
サーバ、パケット転送方法およびプログラム Download PDFInfo
- Publication number
- JP2009164947A JP2009164947A JP2008001164A JP2008001164A JP2009164947A JP 2009164947 A JP2009164947 A JP 2009164947A JP 2008001164 A JP2008001164 A JP 2008001164A JP 2008001164 A JP2008001164 A JP 2008001164A JP 2009164947 A JP2009164947 A JP 2009164947A
- Authority
- JP
- Japan
- Prior art keywords
- address
- message
- received
- syn
- connection
- 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.)
- Pending
Links
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/163—In-band adaptation of TCP data exchange; In-band control procedures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/029—Firewall traversal, e.g. tunnelling or, creating pinholes
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Small-Scale Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
【課題】中継サーバを介して通信を行う端末間でのTCPオプションの不整合によるスループットの低下を防ぐ。
【解決手段】中継サーバ100は互いに通信を行う2つのクライアント端末A200、クライアント端末B300からのSYNメッセージ受信を待ち、クライアント端末A200、クライアント端末B300の双方からのSYNメッセージ受信後、クライアント端末A200から受信したSYNメッセージに含まれるTCPオプションを含むSYN ACKメッセージを生成し、クライアント端末B300へ送信するとともに、クライアント端末B300から受信したSYNメッセージに含まれるTCPオプションを含むSYN ACKメッセージを生成し、クライアント端末A200へ送信する。
【選択図】図1
【解決手段】中継サーバ100は互いに通信を行う2つのクライアント端末A200、クライアント端末B300からのSYNメッセージ受信を待ち、クライアント端末A200、クライアント端末B300の双方からのSYNメッセージ受信後、クライアント端末A200から受信したSYNメッセージに含まれるTCPオプションを含むSYN ACKメッセージを生成し、クライアント端末B300へ送信するとともに、クライアント端末B300から受信したSYNメッセージに含まれるTCPオプションを含むSYN ACKメッセージを生成し、クライアント端末A200へ送信する。
【選択図】図1
Description
本発明は、クライアント端末間で送受信されるパケットの転送を行うサーバ、パケット転送方法およびプログラムに関し、特にクライアント端末間で構築されるTCPコネクションを終端せずにパケット転送を行うサーバ、パケット転送方法およびプログラムに関する。
近年企業や部門をまたがったコラボレーションが活発化するなど業務形態が多様化しており、異なる企業LANや部門LANに接続しているクライアント端末同士(すなわち異なるプライベートネットワークに接続しているクライアント端末同士)の通信へのニーズが急速に高まっている。こうした背景から近年異なるプライベートネットワークに接続するクライアント端末同士の通信を可能にする方式が提案されている。従来方式はグローバルネットワークに設置された中継サーバを介することによって、異なるプライベートネットワークに接続しているクライアント端末同士の通信を実現している。こうした方式を採用している代表的なシステムとしてはSoftEther、PacketixVPNやOpenVPNなどが挙げられる。
通常、プライベートネットワークにはグローバルネットワークからの通信を遮断するファイヤウォールが設置されている。ファイヤウォールはプライベートネットワークからグローバルネットワークへ向けて構築が開始される特定のTCPコネクション上の通信のみ許可する設定がなされているため(通常はWeb閲覧用通信に用いられる宛先ポート80番のTCP通信(すなわちHTTP通信)及び宛先ポート443番のTCP通信(すなわちHTTPS通信))、従来方式ではまず、プライベートネットワーク上のクライアント端末から中継サーバに対してTCPコネクションの構築を開始する。クライアント端末と中継サーバの間でTCPコネクションの構築が完了した後はクライアント端末と中継サーバの間で双方向の通信が行える状態なる。その後、クライアント端末は通信相手のクライアント端末に渡したいデータを中継サーバとの間に構築したTCPコネクションを利用して送信する。中継サーバは受信したデータを通信相手のクライアント端末との間に構築したTCPコネクションを利用して送信する。
以下こうした方式をFirewall透過通信方式と呼ぶ。従来のFirewall透過通信方式では中継サーバがクライアント端末間でパケットの転送を行う際TCPコネクションを終端していたため、中継サーバにパケットの再送処理やフロー制御処理に伴う負荷がかかっていた。
一方で、TCPコネクション上を流れるデータの転送方式として、前述のように中継サーバにおいて処理負荷の高いTCPコネクションの終端処理をすることなく、パケットのヘッダを書き換えて転送するTCPスプライシング方式がある(非特許文献1参照)。
図8に非特許文献1に記載されているパケット転送方式を示す。図8ではクライアント端末A1000、B2000と中継サーバ3000が示されており、クライアント端末A1000、B2000は中継サーバ3000を介して通信を行う。クライアント端末A1000はまず中継サーバ3000に対してSYNメッセージを送信し(S1000)、3Way−Handshakeを行い(S1000〜S3000)、TCPコネクションを中継サーバ3000に対して構築する。中継サーバ3000は内部のパケット転送テーブル3100にクライアント端末A1000との間で構築したTCPコネクションに関する情報を登録する。また、クライアント端末A1000とのTCPコネクション構築完了後、クライアント端末B2000に対してSYNメッセージを送信し(S4000)、3Way−Handshakeを行って(S4000〜S6000)TCPコネクションをクライアント端末B2000に対して構築する。クライアント端末A1000、B2000双方との間でTCPコネクションが構築されたのち、中継サーバ3000は一方のTCPコネクションから受信したパケットの他方のコネクションへの転送を開始する(S7000)。
パケットの転送は具体的に以下のように行う(S8000〜S9000)。図8の例ではパケット転送テーブル3100にはクライアント端末A1000、B2000との間に構築した2つのTCPコネクションについて、
・クライアント側IPアドレス、ポート番号
・中継サーバ側IPアドレス、ポート番号
・転送開始前までにクライアント端末及び中継サーバが当該TCPコネクションを利用してどのSeq番号のパケットまで送信したか
が登録されており、中継サーバ3000は一方のTCPコネクションから受信したパケットのSeq番号、Ack番号、送信元および宛先IPアドレス、ポート番号(および書き変えに伴うチェックサム再計算)を書き換え、他方のTCPコネクションへパケットに転送する。中継サーバ3000はTCPコネクションを終端した場合に必要なパケットロスに備えた再送用パケットのバッファリング処理や、受信したパケットのSeq番号やAck番号の解析によるパケットロスの検出処理、パケットロス検出に伴うパケットの再送処理、フロー制御処理等を行わない。これらの処理は全てクライアント端末で行われる。したがって非特許文献1に記載されるパケット転送方式では従来方式に比べ中継サーバの負荷が軽減される。
D. A. Maltz, et al., "TCP Splice application layer proxy performance," Journal of High Speed Networks, Volume 8, Issue 3, 1999, p.225-240
・クライアント側IPアドレス、ポート番号
・中継サーバ側IPアドレス、ポート番号
・転送開始前までにクライアント端末及び中継サーバが当該TCPコネクションを利用してどのSeq番号のパケットまで送信したか
が登録されており、中継サーバ3000は一方のTCPコネクションから受信したパケットのSeq番号、Ack番号、送信元および宛先IPアドレス、ポート番号(および書き変えに伴うチェックサム再計算)を書き換え、他方のTCPコネクションへパケットに転送する。中継サーバ3000はTCPコネクションを終端した場合に必要なパケットロスに備えた再送用パケットのバッファリング処理や、受信したパケットのSeq番号やAck番号の解析によるパケットロスの検出処理、パケットロス検出に伴うパケットの再送処理、フロー制御処理等を行わない。これらの処理は全てクライアント端末で行われる。したがって非特許文献1に記載されるパケット転送方式では従来方式に比べ中継サーバの負荷が軽減される。
D. A. Maltz, et al., "TCP Splice application layer proxy performance," Journal of High Speed Networks, Volume 8, Issue 3, 1999, p.225-240
上述した非特許文献1の方式の課題は、中継サーバを介して互いに通信を行うクライアント端末間のTCPオプションの整合を考慮していない点にある。
通常、TCPではオプションとして最大セグメントサイズ(以下、MSS)、ウィンドウスケール(以下、WS)、選択的受信確認(以下、SACK)など様々なものがある。こうしたオプションは3Way−HandShake時にSYNメッセージおよびSYN ACKメッセージによってTCPコネクションを終端する双方の端末間で整合される。たとえばMSSについては、双方SYNメッセージ、SYN ACKメッセージに利用したいMSS値を挿入して送信し、お互いが提示したMSS値の小さい方をTCPコネクション構築後の通信に利用する。また、WSについてはWSを利用するか否かのフラグ(以下、WS利用フラグ)及び利用する場合のシフトカウントをSYNメッセージ、SYN ACKメッセージに挿入し、双方ともWS利用フラグがOnの場合コネクション構築後の通信においてWSを利用し、SYNメッセージ、SYN ACKメッセージにより相手から通知されたシフトカウント値を利用して相手からの広告ウィンドウサイズを計算する。SACKについても同様にSACKを利用するか否かのフラグ(以下、SACK利用フラグ)をSYNメッセージ、SYN ACKメッセージに挿入し、双方ともSACK利用フラグがOnの場合コネクション構築後の通信においてSACKを利用する。
非特許文献1の方式では、3Way−HandShake後の再送処理やフロー制御等はクライアント端末と中継サーバではなく、クライアント端末間で行われる。このためTCPオプションはクライアント端末間で整合しておく必要がある。
しかし、非特許文献1には3Way−Handshakeがクライアント端末と中継サーバの間で行われることしか記載されておらず、クライアント端末間のTCPオプションの整合については触れられていない。例えば図8においてクライアント端末A1000、B2000共に3Way−HandShake時にWS利用フラグをOnにしたSYNメッセージおよびSYN ACKメッセージを中継サーバ3000に送信したとしても、中継サーバ3000がWS利用フラグをオフにしたSYN ACKメッセージおよびSYNメッセージをクライアント端末に送信すると、クライアント端末は中継サーバ3000との間で構築したTCPコネクションにおいてWSを利用せずにフロー制御を行うことになる。このため、WSを利用した場合と比較してクライアント端末間の通信スループットが低くなる可能性がある。また、中継サーバがWS利用フラグをオンにしたSYN ACKメッセージおよびSYNメッセージをクライアント端末に送信すると、一方のクライアント端末ではWS利用フラグがオン、他方のクライアント端末ではWS利用フラグがオフとなっている場合、一方のクライアント端末ではWSを利用してフロー制御を行おうとし、他方のクライアント端末ではWSを利用せずにフロー制御を行おうとするため、クライアント端末間で正しくフロー制御が行えなくなる。SACKについても同様のことが言える。特にWSやSACKはTCPコネクションのスループットに与える影響が大きく、これらのオプションが整合できなかった場合にはスループットが大幅に低下する可能性がある。
上記の課題は従来のFirewall透過通信方式のように通信を行う二つのクライアント端末の双方が中継サーバに対してTCPコネクションの構築を開始するケースにも当てはまる。
本発明の目的は、中継サーバに対して構築したTCPコネクションを利用して互いに通信する2つのクライアント端末の双方が中継サーバに対してTCPコネクションの構築を開始する場合において、クライアント端末間のTCPオプションを整合させるサーバ、パケット転送方法およびプログラムを提供することにある。
上記目的を達成するために本発明は、
複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記パケットデータを送信する端末と当該サーバとを接続するための第1のコネクションアドレスと、当該サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアが記載された転送テーブルと、
前記端末それぞれからTCPコネクションを構築するためのSYNメッセージを受信した場合、該SYNメッセージの応答メッセージであるSYN ACKメッセージを送信するコネクション構築メッセージ処理部とを有し、
前記コネクション構築メッセージ処理部は、前記転送テーブルに記載されたコネクションアドレスペアの一方のコネクションアドレスを利用して前記SYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信するとともに、前記一方のコネクションアドレスを利用して受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する。
複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記パケットデータを送信する端末と当該サーバとを接続するための第1のコネクションアドレスと、当該サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアが記載された転送テーブルと、
前記端末それぞれからTCPコネクションを構築するためのSYNメッセージを受信した場合、該SYNメッセージの応答メッセージであるSYN ACKメッセージを送信するコネクション構築メッセージ処理部とを有し、
前記コネクション構築メッセージ処理部は、前記転送テーブルに記載されたコネクションアドレスペアの一方のコネクションアドレスを利用して前記SYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信するとともに、前記一方のコネクションアドレスを利用して受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する。
また、複数の端末が互いに送受信するパケットデータを転送するサーバにおけるパケット転送方法であって、
前記パケットデータを送信する端末と前記サーバとを接続するための第1のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からTCPコネクションを構築するためのSYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージとは異なるSYNメッセージを受信済みである場合、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含む前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信する処理と、
前記受信したSYNメッセージに含まれるTCPオプション情報を含む前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する処理とを有する。
前記パケットデータを送信する端末と前記サーバとを接続するための第1のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からTCPコネクションを構築するためのSYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージとは異なるSYNメッセージを受信済みである場合、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含む前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信する処理と、
前記受信したSYNメッセージに含まれるTCPオプション情報を含む前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する処理とを有する。
また、複数の端末が互いに送受信するパケットデータを転送するサーバに実行させるプログラムであって、
前記パケットデータを送信する端末と前記サーバとを接続するための第1のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からTCPコネクションを構築するためのSYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージとは異なるSYNメッセージを受信済みである場合、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含む前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信する手順と、
前記受信したSYNメッセージに含まれるTCPオプション情報を含む前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する手順とを前記サーバに実行させる。
前記パケットデータを送信する端末と前記サーバとを接続するための第1のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からTCPコネクションを構築するためのSYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージとは異なるSYNメッセージを受信済みである場合、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含む前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信する手順と、
前記受信したSYNメッセージに含まれるTCPオプション情報を含む前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する手順とを前記サーバに実行させる。
以上説明したように本発明においては、2つのコネクションアドレスがお互いに対応付けられたコネクションペアのうち、一方のコネクションアドレスを利用して受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成し、当該SYN ACKメッセージを他方のコネクションアドレスを利用して送信する構成としたため、中継サーバを介して通信を行う端末間でのTCPオプションの不整合によるスループットの低下を防ぐことができる。
以下に、本発明の実施の形態について図面を参照して詳細に説明する。
(第1の実施の形態)
まず本発明の第1の実施の形態における通信システムの構成について説明する。
(第1の実施の形態)
まず本発明の第1の実施の形態における通信システムの構成について説明する。
図1に本発明の第1の実施の形態における通信システムの構成例を示す。第1の実施の形態における通信システムは中継サーバ100、クライアント端末A200、クライアント端末B300、ファイヤウォール400、プライベートネットワーク500、インターネット600から成る。
クライアント端末A200、クライアント端末B300は中継サーバ100に対して構築したTCPコネクションを利用して互いに通信を行う。なお、クライアント端末A200、クライアント端末B300は図8と異なりプライベートネットワーク500ではなく、インターネット600に直接接続していても良い。
ファイヤウォール400はプライベートネットワーク500に対する外部からの接続を遮断する装置であり、例えばプライベートネットワーク500に接続する端末(クライアント端末A200、クライアント端末B300など)からインターネット600に接続する端末に対して構築されたTCPコネクション上の通信のみ許可する設定がなされている。
中継サーバ100は転送テーブル101、コネクションペア作成部102、コネクション構築メッセージ処理部103、パケット転送部104から成る。
<転送テーブル101>
転送テーブル101にはクライアント端末から受信したパケットの転送を行うのに必要な情報が記載される。具体的に中継サーバ100はクライアント端末からパケットを受信すると、パケットの転送先を判断しパケットヘッダの書き換え処理を行う。これら転送先判断と書き換え処理に必要な情報が転送テーブル101に登録される。
<転送テーブル101>
転送テーブル101にはクライアント端末から受信したパケットの転送を行うのに必要な情報が記載される。具体的に中継サーバ100はクライアント端末からパケットを受信すると、パケットの転送先を判断しパケットヘッダの書き換え処理を行う。これら転送先判断と書き換え処理に必要な情報が転送テーブル101に登録される。
図2に転送テーブル101の例を示す。図2を参照すると、転送テーブル101にはエントリ番号、コネクションアドレス情報、転送開始時Seq番号情報、TCPオプション情報が登録されている。また、エントリxとしてクライアント端末A200とクライアント端末B300が中継サーバ100を介して通信を行う際のエントリの例が登録されている。
コネクションアドレス情報は、通信を行う2つのクライアント端末が中継サーバ100を介して他のクライアント端末と通信を行う際に利用するTCPコネクションのIPアドレス、ポート番号(アドレス情報)であり、クライアント端末側、中継サーバ100側双方のアドレス情報がクライアント端末毎に記載されている。たとえば図2のエントリxにはコネクション1の第1のコネクションアドレス情報としてクライアント端末A200が中継サーバ100に対して構築したTCPコネクションのコネクションアドレス情報が登録されており、クライアント端末A200がIPアドレスIP_A、ポート番号Port_Aを、中継サーバ100がIP_X,Port_Xをそれぞれ利用する旨登録されている。また、コネクション2の第2のコネクションアドレス情報として中継サーバ100がクライアント端末B300に対して構築したTCPコネクションのコネクションアドレス情報が登録されており、クライアント端末B300がIPアドレスIP_B、ポート番号Port_Bを、中継サーバ100がIP_X,Port_Xをそれぞれ利用する旨登録されている。これらの第1及び第2のコネクションアドレス情報がコネクションアドレスペアとなって登録されている。
転送開始時Seq番号情報には、中継サーバ100がクライアント端末から受信したパケットを他のクライアント端末へ転送する処理を開始した際に、クライアント端末及び中継サーバ100がどのSeq番号までのパケットを送信したかが登録される。図2のエントリxには、コネクション1側の情報として転送開始までにクライアント端末A200がSeq番号:a+1までのパケットを、中継サーバ100がSeq番号:b+1までのパケットをそれぞれ送信した旨登録されている。
TCPオプション情報には、クライアント端末が中継サーバ100に対して提示したTCPオプション情報が登録される。図2のエントリxには、コネクション1側の情報としてクライアント端末A200がMSS:1460バイト、WS:フラグOn、5ビットシフト、SACK:フラグOnを提示した旨登録されている。
<コネクションペア作成部102>
コネクションペア作成部102は中継サーバ100がクライアント端末から受信したパケットについて、どのTCPコネクションから受信したパケットをどのTCPコネクションに転送するかを決定し、これらTCPコネクションのコネクションアドレス情報を転送テーブル101に登録する。
<コネクションペア作成部102>
コネクションペア作成部102は中継サーバ100がクライアント端末から受信したパケットについて、どのTCPコネクションから受信したパケットをどのTCPコネクションに転送するかを決定し、これらTCPコネクションのコネクションアドレス情報を転送テーブル101に登録する。
コネクションペア作成部102はクライアント端末から受信したパケットの転送を開始する前に転送テーブル101に通信を行う2つのクライアント端末(図1の場合はクライアント端末A200、クライアント端末B300)が利用するTCPコネクションのコネクションアドレス情報を登録しておく。以下具体的な登録方法の例を説明する。
例えば、各クライアント端末にIDを割り当て、各クライアント端末は他のクライアント端末と通信を開始する前に自身のIDと通信相手のクライアント端末との通信に利用するTCPコネクションのコネクションアドレス情報、及び通信相手のクライアント端末のIDをコネクションペア作成部102に通知する方法が考えられる。これによりコネクションペア作成部102は、互いに通信を行う2つのクライアント端末のコネクションアドレス情報を取得し、転送テーブル101に当該アドレス情報を登録する。例えば図1に示す構成において、クライアント端末A200、クライアント端末B300が通信を行う場合、予めコネクションアドレス情報としてクライアント端末A200がIPアドレス:IP_A、TCPポート番号:Port_Aを、クライアント端末B300がIPアドレス:IP_B、TCPポート番号:Port_Bをコネクションペア作成部102に通知しておき、通信開始時にクライアント端末A200がコネクションペア作成部102に対して通信相手がクライアント端末B300であることを通知することで、上記アドレス情報をコネクションペア作成部102が転送テーブル101に登録する。
なお、クライアント端末がコネクションペア作成部102に予め通知しておくアドレス情報は複数でもよく、例えばクライアント端末A200がアドレス情報としてIPアドレス:IP_A,TCPポート番号:Port_A1〜n、クライアント端末B300がアドレス情報としてIPアドレス:IP_B、TCPポート番号:Port_B1〜nをそれぞれ一括して通知しておき、クライアント端末A200からクライアント端末B300と通信したい旨通知を受けた場合に、コネクションペア作成部102が予め通知されたアドレス情報の中から未使用のアドレス情報を選択し、クライアント端末A200、クライアント端末B300それぞれに対して、クライアント端末A200とクライアント端末B300との間の通信に利用すべきアドレス情報を通知しても良い。なお、例えばクライアント端末A200とクライアント端末B300との間の通信においてクライアント端末A200が利用すべきアドレス情報としてIPアドレス:IP_A、TCPポート番号:Port_A1が選択された場合、クライアント端末A200がクライアント端末Cと通信する際にはコネクションペア作成部102はIPアドレス:IP_A、TCPポート番号:Port_AX(2<X≦n)を選択する。複数のアドレス情報を一括して登録することにより、クライアント端末間で通信を開始するたびに、コネクションペア作成部102にアドレス情報を逐一通知する手間を省くことができる。
<コネクション構築メッセージ処理部103>
コネクション構築メッセージ処理部103は、クライアント端末とTCPコネクションを構築するためのメッセージ、すなわち3Way−Handshake(以下3WH)メッセージの送受信を行う。また、パケット転送部104に対してクライアント端末から受信したパケットの転送開始のタイミングを指示するとともに、転送開始前までに、クライアント端末と中継サーバ100が3WHメッセージの送受信に利用したコネクションアドレスを使って、それぞれSeq番号が何番のデータパケットまで送信したかを転送テーブルに記録しておく。以下具体的な処理内容を説明する。
<コネクション構築メッセージ処理部103>
コネクション構築メッセージ処理部103は、クライアント端末とTCPコネクションを構築するためのメッセージ、すなわち3Way−Handshake(以下3WH)メッセージの送受信を行う。また、パケット転送部104に対してクライアント端末から受信したパケットの転送開始のタイミングを指示するとともに、転送開始前までに、クライアント端末と中継サーバ100が3WHメッセージの送受信に利用したコネクションアドレスを使って、それぞれSeq番号が何番のデータパケットまで送信したかを転送テーブルに記録しておく。以下具体的な処理内容を説明する。
まず、3WHメッセージの送受信処理について説明する。図3にクライント端末からSYNメッセージを受信した際のコネクション構築メッセージ処理部103の処理フローチャートを示す。コネクション構築メッセージ処理部103はSYNメッセージを受信すると(S101)、受信したSYNメッセージのコネクションアドレス情報(送信元IPアドレス、TCPポート番号、宛先IPアドレス、TCPポート番号)に一致するアドレス情報を持つエントリ(以下SYN対応エントリと呼ぶ)が転送テーブル101に登録されているか否かをチェックする(S102)。
SYN対応エントリが登録されていない場合はこれを廃棄し(S103)、登録されている場合はSYN対応エントリに登録されている他方のコネクションアドレスを利用してSYNメッセージを受信済みか否かチェックする(S104)。
受信していない場合は受信したSYNメッセージの内容をキャッシュしておく(S105)。受信済みの場合は、S101において受信したSYNメッセージ(新規受信SYNメッセージ)とキャッシュしておいたSYNメッセージのうち、SYN対応エントリに登録されたコネクションアドレス情報と同一の送信元・宛先アドレス情報を持つSYNメッセージ(新規受信SYN対応キャッシュメッセージ)を元にSYN ACKメッセージを生成し、送信する(S106)。
新規受信SYN対応キャッシュメッセージに対しては、新規受信SYNメッセージを元に以下のSYN ACKメッセージを生成し、送信する。
・送信元IPアドレス/ポート番号
新規受信SYN対応キャッシュメッセージの宛先IPアドレスとポート番号(つまり中継サーバが新規受信SYN対応キャッシュメッセージ受信に利用したIPアドレス、ポート番号)。
・宛先IPアドレス/ポート番号
新規受信SYN対応キャッシュメッセージの送信元IPアドレスとポート番号。
・Seq番号/Ack番号
Seq番号:ランダムに選択した値。新規受信SYNメッセージのSeq番号と同じ値でも良い。
・送信元IPアドレス/ポート番号
新規受信SYN対応キャッシュメッセージの宛先IPアドレスとポート番号(つまり中継サーバが新規受信SYN対応キャッシュメッセージ受信に利用したIPアドレス、ポート番号)。
・宛先IPアドレス/ポート番号
新規受信SYN対応キャッシュメッセージの送信元IPアドレスとポート番号。
・Seq番号/Ack番号
Seq番号:ランダムに選択した値。新規受信SYNメッセージのSeq番号と同じ値でも良い。
Ack番号:新規受信SYN対応キャッシュメッセージのSeq番号に1を加えた値。
・TCPオプション情報
新規受信SYNメッセージのTCPオプション情報。
・TCPオプション情報
新規受信SYNメッセージのTCPオプション情報。
また、新規受信SYNメッセージに対しては、新規受信SYN対応キャッシュメッセージを元に以下のSYN ACKメッセージを生成し、送信する。
・送信元IPアドレス/ポート番号
新規受信SYNメッセージの宛先IPアドレスとポート番号(つまり中継サーバが新規受信SYNメッセージ受信に利用したIPアドレス、ポート番号)。
・宛先IPアドレス/ポート番号
新規受信SYNメッセージの送信元IPアドレスとポート番号。
・Seq番号/Ack番号
Seq番号:ランダムに選択した値。新規受信SYN対応キャッシュメッセージのSeq番号と同じ値でも良い。
・送信元IPアドレス/ポート番号
新規受信SYNメッセージの宛先IPアドレスとポート番号(つまり中継サーバが新規受信SYNメッセージ受信に利用したIPアドレス、ポート番号)。
・宛先IPアドレス/ポート番号
新規受信SYNメッセージの送信元IPアドレスとポート番号。
・Seq番号/Ack番号
Seq番号:ランダムに選択した値。新規受信SYN対応キャッシュメッセージのSeq番号と同じ値でも良い。
Ack番号:新規受信SYNメッセージのSeq番号に1を加えた値。
・TCPオプション情報
新規受信SYN対応キャッシュメッセージのTCPオプション情報。
・TCPオプション情報
新規受信SYN対応キャッシュメッセージのTCPオプション情報。
次に、転送開始タイミングの指示について説明する。クライアント端末と中継サーバの間で3WHメッセージの送受信を完了した後(直後とは限らない)、パケット転送部104に対してデータパケットの転送開始を指示する。
指示のタイミングは中継サーバ100においてクライアント端末から受信したパケットを解析し中継サーバ100が決定する方法や、クライアント端末から中継サーバ100に対してデータパケットの転送開始のタイミングを通知するための特別のメッセージを送信する方法を採ることができる。
前者の場合は、3WHメッセージの交換が完了した直後に受信したパケットから転送を開始したり、3WHメッセージの最後のメッセージ、すなわちSYN ACKメッセージに対するACKメッセージ以降のパケット(ACKメッセージ自体も含む)から転送開始を指示したりしても良い。また、3WHメッセージの送受信完了後、更にクライアント端末と中継サーバ100の間でSSLのハンドシェイクメッセージの送受信を完了した後に開始を指示しても良い。
また、データパケット転送開始直前までにクライアント端末との通信によってクライアント端末及び中継サーバ100がどのSeq番号のパケットまで送信したかを転送テーブル101に登録しておく。
<パケット転送部104>
パケット転送部104は、中継サーバ100がクライアント端末から受信したパケットのIPヘッダおよびTCPヘッダの書き換えを行い、パケットを他方のクライアントへ転送する。具体的な処理内容は以下のとおりである。
<パケット転送部104>
パケット転送部104は、中継サーバ100がクライアント端末から受信したパケットのIPヘッダおよびTCPヘッダの書き換えを行い、パケットを他方のクライアントへ転送する。具体的な処理内容は以下のとおりである。
受信パケットの送信元および宛先IPアドレス、ポート番号と一致するエントリを転送テーブル101から検索し当該エントリ(以下、受信パケット対応エントリ)を参照して、送信元IPアドレス、ポート番号、宛先IPアドレス、ポート番号、Seq番号、Ack番号を以下のように書き変えて、チェックサム再計算後ネットワークに送出する。
・送信元IPアドレス、ポート番号
受信パケット対応エントリに登録されたコネクションアドレスの内、パケット受信に利用したコネクションアドレス(以下送信元コネクションアドレス)ではない方のコネクションアドレス(以下転送先コネクションアドレス)。図2に示す転送テーブル101において受信パケット対応エントリがエントリx、送信元コネクションアドレスがコネクション1のコネクションアドレスの場合、コネクション2側のサーバ側アドレス情報、IP_X、Port_Xを送信元IPアドレス、ポート番号とする。
・宛先IPアドレス、ポート番号
転送先コネクションアドレスの端末側のアドレス情報を宛先IPアドレス、ポート番号とする。上述の例の場合、IP_B、Port_Bとする。
・Seq番号、Ack番号
Seq番号:受信パケットのSeq番号−受信パケット対応エントリに記載された送信元コネクションのクライアント端末側のSeq番号+受信パケット対応エントリに記載された転送先コネクションのサーバ側Seq番号。
・送信元IPアドレス、ポート番号
受信パケット対応エントリに登録されたコネクションアドレスの内、パケット受信に利用したコネクションアドレス(以下送信元コネクションアドレス)ではない方のコネクションアドレス(以下転送先コネクションアドレス)。図2に示す転送テーブル101において受信パケット対応エントリがエントリx、送信元コネクションアドレスがコネクション1のコネクションアドレスの場合、コネクション2側のサーバ側アドレス情報、IP_X、Port_Xを送信元IPアドレス、ポート番号とする。
・宛先IPアドレス、ポート番号
転送先コネクションアドレスの端末側のアドレス情報を宛先IPアドレス、ポート番号とする。上述の例の場合、IP_B、Port_Bとする。
・Seq番号、Ack番号
Seq番号:受信パケットのSeq番号−受信パケット対応エントリに記載された送信元コネクションのクライアント端末側のSeq番号+受信パケット対応エントリに記載された転送先コネクションのサーバ側Seq番号。
Ack番号:受信パケットのAck番号−受信パケット対応エントリに記載された送信元コネクションのサーバ側Seq番号+受信パケット対応エントリに記載された転送先コネクションのクライアント端末側Seq番号。
次に本発明の第1の実施の形態における通信システムの動作について説明する。
図1の構成においてクライアント端末A200とクライアント端末B300が中継サーバ100を介して通信する際の動作例を説明する。
<アドレス情報の登録>
まず、前述の方法等によって転送テーブル101にクライアント端末A200、クライアント端末B300がクライアント端末A200−クライアント端末B300の通信に利用するコネクションアドレス情報が登録される。例えば転送テーブル101が図2に示すフォーマットの場合、コネクションアドレス情報として、コネクション1側にクライアント端末A200のIPアドレス、IP_AとTCPポート番号Port_Aが、コネクション2側にクライアント端末B300のIPアドレス、IP_BとTCPポート番号Port_Bがそれぞれ登録される。中継サーバ100のIPアドレスIP_X、ポート番号Port_Xもサーバ側のアドレス情報として登録される。なお、図2の例ではコネクション1、2でサーバ側アドレス情報が共通だが、異なっていても良い。転送開始時Seq番号情報およびTCPオプション情報はこの段階では登録されない。
<SYNメッセージの送出>
次にクライアント端末A200又はクライアント端末B300のいずれかが中継サーバ100に対してSYNメッセージを送信する。以降のメッセージシーケンスを図4に示す。
[S211]
クライアント端末A200が中継サーバ100に対してIP_A:Port_AからSYNメッセージを送信する。中継サーバ100がこのメッセージを受信するとコネクション構築メッセージ処理部103は受信したSYNメッセージの送信元および宛先IPアドレス、ポート番号と同一のコネクションアドレス情報を持つエントリを転送テーブル101から検索する。この場合エントリ番号xのエントリが検索される。また、コネクション構築メッセージ処理部103は受信したSYNメッセージに記載されたTCPオプション情報、MSS:1460バイト、WS:フラグOn、5バイトシフト、SACK:フラグOnをエントリxに登録する。
<アドレス情報の登録>
まず、前述の方法等によって転送テーブル101にクライアント端末A200、クライアント端末B300がクライアント端末A200−クライアント端末B300の通信に利用するコネクションアドレス情報が登録される。例えば転送テーブル101が図2に示すフォーマットの場合、コネクションアドレス情報として、コネクション1側にクライアント端末A200のIPアドレス、IP_AとTCPポート番号Port_Aが、コネクション2側にクライアント端末B300のIPアドレス、IP_BとTCPポート番号Port_Bがそれぞれ登録される。中継サーバ100のIPアドレスIP_X、ポート番号Port_Xもサーバ側のアドレス情報として登録される。なお、図2の例ではコネクション1、2でサーバ側アドレス情報が共通だが、異なっていても良い。転送開始時Seq番号情報およびTCPオプション情報はこの段階では登録されない。
<SYNメッセージの送出>
次にクライアント端末A200又はクライアント端末B300のいずれかが中継サーバ100に対してSYNメッセージを送信する。以降のメッセージシーケンスを図4に示す。
[S211]
クライアント端末A200が中継サーバ100に対してIP_A:Port_AからSYNメッセージを送信する。中継サーバ100がこのメッセージを受信するとコネクション構築メッセージ処理部103は受信したSYNメッセージの送信元および宛先IPアドレス、ポート番号と同一のコネクションアドレス情報を持つエントリを転送テーブル101から検索する。この場合エントリ番号xのエントリが検索される。また、コネクション構築メッセージ処理部103は受信したSYNメッセージに記載されたTCPオプション情報、MSS:1460バイト、WS:フラグOn、5バイトシフト、SACK:フラグOnをエントリxに登録する。
次にコネクション構築メッセージ処理部103は、エントリxに登録されているもう一方のコネクションアドレス情報(すなわち送信元IPアドレスIP_B、ポート番号Port_B、宛先IPアドレスIP_X、ポート番号Port_X)からSYNメッセージを受信しているか否かを調べる。S211の段階では未だ受信していないのでSYNメッセージがキャッシュされる。
[S221]
S211の後、クライアント端末B300が中継サーバ100に対してIP_B:Port_BからSYNメッセージを送信する。中継サーバ100がこのメッセージを受信するとコネクション構築メッセージ処理部103は転送テーブル101に受信したSYNメッセージの送信元および宛先IPアドレス、ポート番号と同一のコネクションアドレス情報を持つエントリを検索する。この場合エントリ番号xのエントリが検索される。また、コネクション構築メッセージ処理部103は受信したSYNメッセージに記載されたTCPオプション情報、MSS:1454バイト、WS:フラグOn、3バイトシフト、SACK:フラグOnをエントリxに登録する。
[S221]
S211の後、クライアント端末B300が中継サーバ100に対してIP_B:Port_BからSYNメッセージを送信する。中継サーバ100がこのメッセージを受信するとコネクション構築メッセージ処理部103は転送テーブル101に受信したSYNメッセージの送信元および宛先IPアドレス、ポート番号と同一のコネクションアドレス情報を持つエントリを検索する。この場合エントリ番号xのエントリが検索される。また、コネクション構築メッセージ処理部103は受信したSYNメッセージに記載されたTCPオプション情報、MSS:1454バイト、WS:フラグOn、3バイトシフト、SACK:フラグOnをエントリxに登録する。
次にコネクション構築メッセージ処理部103は、エントリxに登録されているもう一方のコネクションアドレス情報(すなわち送信元IPアドレスIP_A、ポート番号Port_A、宛先IPアドレスIP_X、ポート番号Port_X)からSYNメッセージを受信しているか否かを調べる。S211の段階で既にIP_A、Port_Aを送信元、IP_X、Port_Xを宛先とするSYNメッセージを受信しているので、SYN ACKメッセージを生成し送信する。以下、SYN ACKメッセージ送信時の具体的な動作を述べる。
[S212、S222]
コネクション構築メッセージ処理部103は、以下のSYN ACKメッセージを生成しネットワークに送出する。
・送信元IPアドレス、ポート番号
S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはキャッシュしたSYNメッセージの宛先IPアドレス、ポート番号(IP_X、Port_X)に、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついては受信したSYNメッセージの宛先IPアドレス、ポート番号(IP_X、Port_X)にする。
・宛先IPアドレス、ポート番号
S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはキャッシュしたSYNメッセージの送信元IPアドレス、ポート番号(IP_A、Port_A)に、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついては受信したSYNメッセージの宛先IPアドレス、ポート番号(IP_B、Port_B)にする。
・Seq番号、Ack番号
Seq番号は、ランダムな値に変換しても良いし、キャッシュまたは受信したメッセージのものをそのまま利用しても良い。
[S212、S222]
コネクション構築メッセージ処理部103は、以下のSYN ACKメッセージを生成しネットワークに送出する。
・送信元IPアドレス、ポート番号
S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはキャッシュしたSYNメッセージの宛先IPアドレス、ポート番号(IP_X、Port_X)に、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついては受信したSYNメッセージの宛先IPアドレス、ポート番号(IP_X、Port_X)にする。
・宛先IPアドレス、ポート番号
S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはキャッシュしたSYNメッセージの送信元IPアドレス、ポート番号(IP_A、Port_A)に、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついては受信したSYNメッセージの宛先IPアドレス、ポート番号(IP_B、Port_B)にする。
・Seq番号、Ack番号
Seq番号は、ランダムな値に変換しても良いし、キャッシュまたは受信したメッセージのものをそのまま利用しても良い。
Ack番号については、S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはキャッシュしたSYNメッセージのSeq番号に1足したもの(a+1)を、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついては受信したSYNメッセージのSeq番号に1足したもの(c+1)とする。
・TCPオプション情報
S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはS221で受信したSYNメッセージに含まれるTCPオプション情報を、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついてはS211でキャッシュしたSYNメッセージに含まれるTCPオプション情報をそれぞれ含める。
・TCPオプション情報
S211でキャッシュしたSYNメッセージに対して送信するSYN ACKメッセージについてはS221で受信したSYNメッセージに含まれるTCPオプション情報を、S221で受信したSYNメッセージに対して送信するSYN ACKメッセージついてはS211でキャッシュしたSYNメッセージに含まれるTCPオプション情報をそれぞれ含める。
これにより、クライアント端末A200、クライアント端末B300はそれぞれ以下のSYN ACKメッセージを受信する。
・クライアント端末A200の受信するSYN ACKメッセージ(S212)
(1)送信元IPアドレス:ポート番号/宛先IPアドレス:ポート番号
IP_X:Port_X/IP_A:Port_A
(2)Seq番号、Ack番号
Seq番号/Ack番号:b/a+1
(3)TCPオプション
クライアント端末B300がSYNメッセージによって提示したTCPオプション情報。
・クライアント端末A200の受信するSYN ACKメッセージ(S212)
(1)送信元IPアドレス:ポート番号/宛先IPアドレス:ポート番号
IP_X:Port_X/IP_A:Port_A
(2)Seq番号、Ack番号
Seq番号/Ack番号:b/a+1
(3)TCPオプション
クライアント端末B300がSYNメッセージによって提示したTCPオプション情報。
MSS:1454バイト、WS:フラグOn、3ビットシフト、SACK:フラグOn
・クライアント端末B300の受信するSYN ACKメッセージ(S222)
(1)送信元IPアドレス:ポート番号/宛先IPアドレス:ポート番号
IP_X:Port_X/IP_B:Port_B
(2)Seq番号、Ack番号
Seq番号/Ack番号:d/c+1
(3)TCPオプション
クライアント端末A200がSYNメッセージによって提示したTCPオプション情報。
・クライアント端末B300の受信するSYN ACKメッセージ(S222)
(1)送信元IPアドレス:ポート番号/宛先IPアドレス:ポート番号
IP_X:Port_X/IP_B:Port_B
(2)Seq番号、Ack番号
Seq番号/Ack番号:d/c+1
(3)TCPオプション
クライアント端末A200がSYNメッセージによって提示したTCPオプション情報。
MSS:1460バイト、WS:フラグOn、5ビットシフト、SACK:フラグOn
[S213、S223]
S212、S222のSYN ACKメッセージによってクライアント端末A200にはクライアント端末B300が提示したTCPオプション情報が、クライアント端末B300にはクライアント端末Aが提示したTCPオプション情報がそれぞれ提示されるため、クライアント端末A200、クライアント端末B300はクライアント端末A200−クライアント端末B300間の通信で利用するTCPコネクションのオプション値を整合させることができる。図4の場合、TCPコネクションのオプション値はMSS:1454バイト、WS:フラグOn、A→Bに広告するWindowサイズは5ビットシフト、B→Aに広告するWindowサイズは3ビットシフト、SACK:フラグOnとなる。
<3WHの完了>
[S214、S215]
オプション値整合後、クライアント端末A200、クライアント端末B300は中継サーバ100へACKメッセージを送信し、クライアント端末A200及び、クライアント端末B300と中継サーバ100の間の3WHメッセージの交換が完了する。
<データパケットの転送>
クライアント端末A200、クライアント端末B300との3WHメッセージ交換完了以降、中継サーバ100はクライアント端末A200、クライアント端末B300間のデータパケットの転送を開始する。データパケットの転送開始のタイミングは中継サーバ100においてクライアント端末A200、クライアント端末B300から受信したパケットを解析し中継サーバ100が決定する方法や、クライアント端末A200、クライアント端末B300から中継サーバ100に対してデータパケットの転送開始のタイミングを通知するための特別のメッセージを送信する方法を採ることができる。
[S213、S223]
S212、S222のSYN ACKメッセージによってクライアント端末A200にはクライアント端末B300が提示したTCPオプション情報が、クライアント端末B300にはクライアント端末Aが提示したTCPオプション情報がそれぞれ提示されるため、クライアント端末A200、クライアント端末B300はクライアント端末A200−クライアント端末B300間の通信で利用するTCPコネクションのオプション値を整合させることができる。図4の場合、TCPコネクションのオプション値はMSS:1454バイト、WS:フラグOn、A→Bに広告するWindowサイズは5ビットシフト、B→Aに広告するWindowサイズは3ビットシフト、SACK:フラグOnとなる。
<3WHの完了>
[S214、S215]
オプション値整合後、クライアント端末A200、クライアント端末B300は中継サーバ100へACKメッセージを送信し、クライアント端末A200及び、クライアント端末B300と中継サーバ100の間の3WHメッセージの交換が完了する。
<データパケットの転送>
クライアント端末A200、クライアント端末B300との3WHメッセージ交換完了以降、中継サーバ100はクライアント端末A200、クライアント端末B300間のデータパケットの転送を開始する。データパケットの転送開始のタイミングは中継サーバ100においてクライアント端末A200、クライアント端末B300から受信したパケットを解析し中継サーバ100が決定する方法や、クライアント端末A200、クライアント端末B300から中継サーバ100に対してデータパケットの転送開始のタイミングを通知するための特別のメッセージを送信する方法を採ることができる。
前者の場合は、図4に示すように3WHメッセージの交換が完了した直後に受信したパケットから転送を開始したり(S231)、ACKメッセージ(S214、S215)以降のパケット(ACKメッセージ自体も含む)から転送を開始したりしても良い。また、3WHメッセージの交換完了後、更にクライアント端末A200、クライアント端末B300と中継サーバ100の間でSSLのハンドシェイクメッセージの交換を完了した後に開始しても良い。
コネクション構築メッセージ処理部103はデータパケット転送開始までにクライアント端末A200およびクライアント端末B300との通信によってSeq番号およびAck番号がどこまで進んだかを転送テーブル101に登録する。図4の例ではSYN ACKメッセージに対するACKメッセージ受信(S214、S224)後からデータパケットの転送を開始するので、ACKメッセージのSeq番号、Ack番号を元に、クライアント端末A200側のTCPコネクションについてはクライアント端末側がSeq番号:a+1まで、サーバ側がSeq番号:b+1までそれぞれ送信完了、クライアント端末B300側のTCPコネクションについてはクライアント端末側がSeq番号:c+1まで、サーバ側がSeq番号:d+1までそれぞれ送信完了した旨転送テーブル101に登録する。
データパケットの転送を開始して以降は、受信パケットの送信元IPアドレス、ポート番号と一致するエントリを転送テーブル101から検索し(図2に示す転送テーブルの場合、エントリxが該当)、当該エントリを参照して、送信元IPアドレス、ポート番号、宛先IPアドレス、ポート番号、Seq番号、Ack番号を以下のように書き変えて、チェックサム再計算後ネットワークに送出する(S215、S225)。
・送信元IPアドレス、ポート番号
クライアント端末A200、クライアント端末B300から受信したパケットの送信元IPアドレス、ポート番号を中継サーバ100のIPアドレス、ポート番号(IP_X:Port_X)に変換する。
・宛先IPアドレス、ポート番号
クライアント端末A200から受信したパケットについては宛先IPアドレス、ポート番号をクライアント端末B300のアドレス情報(IP_B、Port_B)に、クライアント端末B300から受信したパケットについては宛先IPアドレス、ポート番号をクライアント端末A200のアドレス情報(IP_A、Port_A)に変換する。
・Seq番号、Ack番号
(1)クライアント端末A200から受信したパケットのSeq番号:受信パケットのSeq番号−エントリxに記載された転送開始時のクライアント端末A200のSeq番号+エントリxに記載された転送開始時のクライアント端末BのSeq番号。
・送信元IPアドレス、ポート番号
クライアント端末A200、クライアント端末B300から受信したパケットの送信元IPアドレス、ポート番号を中継サーバ100のIPアドレス、ポート番号(IP_X:Port_X)に変換する。
・宛先IPアドレス、ポート番号
クライアント端末A200から受信したパケットについては宛先IPアドレス、ポート番号をクライアント端末B300のアドレス情報(IP_B、Port_B)に、クライアント端末B300から受信したパケットについては宛先IPアドレス、ポート番号をクライアント端末A200のアドレス情報(IP_A、Port_A)に変換する。
・Seq番号、Ack番号
(1)クライアント端末A200から受信したパケットのSeq番号:受信パケットのSeq番号−エントリxに記載された転送開始時のクライアント端末A200のSeq番号+エントリxに記載された転送開始時のクライアント端末BのSeq番号。
S215の場合、(a+1+x)−(a+1)+(d+1)
(2)クライアント端末A200から受信したパケットのAck番号:受信パケットのAck番号−エントリxに記載された転送開始時のクライアント端末A200との通信における中継サーバ100側のSeq番号+エントリxに記載された転送開始時のクライアント端末B300との通信における中継サーバ100側のSeq番号。
(2)クライアント端末A200から受信したパケットのAck番号:受信パケットのAck番号−エントリxに記載された転送開始時のクライアント端末A200との通信における中継サーバ100側のSeq番号+エントリxに記載された転送開始時のクライアント端末B300との通信における中継サーバ100側のSeq番号。
S215の場合、(b+1)−(b+1)+(c+1)
(3)クライアント端末B300から受信したパケットのSeq番号:受信パケットのSeq番号−エントリxに記載された転送開始時のクライアント端末B300のSeq番号+エントリxに記載された転送開始時のクライアント端末A200のSeq番号。
(4)クライアント端末B300から受信したパケットのAck番号:受信パケットのAck番号−エントリxに記載された転送開始時のクライアント端末B300との通信における中継サーバ100側のSeq番号+エントリxに記載された転送開始時のクライアント端末A200との通信における中継サーバ100側のSeq番号。
(3)クライアント端末B300から受信したパケットのSeq番号:受信パケットのSeq番号−エントリxに記載された転送開始時のクライアント端末B300のSeq番号+エントリxに記載された転送開始時のクライアント端末A200のSeq番号。
(4)クライアント端末B300から受信したパケットのAck番号:受信パケットのAck番号−エントリxに記載された転送開始時のクライアント端末B300との通信における中継サーバ100側のSeq番号+エントリxに記載された転送開始時のクライアント端末A200との通信における中継サーバ100側のSeq番号。
以上述べたように、第1の実施の形態ではクライアント端末が中継サーバに対して構築したTCPコネクションを利用して互いに通信を行う通信システムにおいて、クライアント端末から中継サーバへのTCPコネクションの構築を開始する場合に、一方のクライアント端末が中継サーバへ送信したSYNメッセージに記載されるTCPオプション情報が他方のクライアント端末へ提示され、中継サーバを介して通信を行うクライアント端末同士でTCPオプションの整合することができる。
その理由は、中継サーバ内のコネクション構築メッセージ処理部が、互いに通信を行うクライアント端末の双方からのSYNメッセージを受信した後に、一方のクライアント端末から受信したSYNメッセージに記載されたTCPオプション情報を含むSYN ACKメッセージを生成し、当該SYN ACKメッセージを他方のクライアント端末から受信したSYNメッセージに対するSYN ACKメッセージとして送信するからである。
(第2の実施の形態)
次に本発明の第2の実施の形態について説明する。図5に第2の実施の形態における通信システムの構成例を示す。
(第2の実施の形態)
次に本発明の第2の実施の形態について説明する。図5に第2の実施の形態における通信システムの構成例を示す。
図5に示す構成ではクライアント端末A200とクライアント端末B300とが中継サーバ110を介して通信を行う。クライアント端末A200、クライアント端末B300は中継サーバ110と直接TCPコネクションを構築することはできず、一旦Web Proxy700とTCPコネクションを構築した後、Web Proxy700が中継サーバ110に対してTCPコネクションを構築する。クライアント端末は通信相手のクライアント端末に送信したいデータをWeb Proxy700との間で構築したTCPコネクションを利用して送信し、Web Proxy700が当該TCPコネクションで受信したデータを中継サーバ110との間で構築したTCPコネクションへ転送する。中継サーバ110は、クライアント端末が送信したデータをWeb Proxy700との間に構築したTCPコネクションによって受信する。
第2の実施の形態は図5に示す構成のように、中継サーバ110とクライアント端末の間でTCPコネクションが終端されるような構成においても、中継サーバ110に対して直接TCPコネクションの構築を行うノード(図5の場合Web Proxy700)同士のTCPオプションを整合させることを目的とする(図5の例においてはクライアント端末A200側Web Proxy700とクライアント端末B300側Web Proxy700の間でTCPオプションを整合させる)。
図6に第2の実施の形態における中継サーバ110によって実現されるTCPオプション整合の例を示す。なお、図6に示す全てのケースにおいてクライアント端末A200、クライアント端末B300が中継サーバ110を介して通信を行うものとする。
図6(A)はWeb ProxyA701によってクライアント端末A200と中継サーバ110の間でTCPコネクションが終端され、Web ProxyB702によってクライアント端末B300と中継サーバ110の間でTCPコネクションが終端されるケースを示している。この場合、中継サーバ110はWeb ProxyA701とWeb ProxyB702の間のTCPオプションを整合させる。
図6(B)はWeb ProxyC703およびWeb ProxyA701によってクライアント端末A200と中継サーバ110の間でTCPコネクションが終端され、Web ProxyB702によってクライアント端末B300と中継サーバ110の間でTCPコネクションが終端されるケースを示している。この場合、中継サーバ110はWeb ProxyA701とWeb ProxyB702の間のTCPオプションを整合させる。
図6(C)はWeb ProxyC703、Web ProxyA701によってクライアント端末A200と中継サーバ110の間でTCPコネクションが終端されるケースを示している。この場合、中継サーバ110はWeb ProxyA701とクライアント端末B300の間のTCPオプションを整合させる。
第1の実施の形態では、中継サーバ100がSYNメッセージを受信する前にコネクションペア作成部102が転送テーブル101にクライアント端末間の通信に利用するコネクションアドレス情報を登録しておくことで、SYNメッセージで提示されたTCPオプション情報の提示先(すなわちSYNメッセージにて提示されたTCPオプション情報を含むSYN ACKメッセージの送信先)を判断していた。しかし、本実施の形態ではTCPオプション情報の提示先がクライアント端末でないケースがあり、提示先のコネクションアドレス情報をSYNメッセージ受信前に把握しておくことが不可能である。
例えば、図6の(A)の場合Web ProxyA701からSYNメッセージで提示されたTCPオプション情報を含むSYN ACKメッセージを、Web ProxyB702が中継サーバ110へのSYNメッセージ送信に利用した送信元IPアドレス、送信元ポート番号へ送信する必要があるが、当該送信元アドレス情報はWeb ProxyB702がSYNメッセージを送信する際にWeb ProxyB702内部で自動的に決められるため、SYNメッセージ送信前に外部から判断することができない。このため、第1の実施の形態における中継サーバ100は、中継サーバ100とクライアント端末の間でTCPコネクションが終端されるような構成に対応することができない。
本実施の形態ではこのようなケースに対応するため、中継サーバ110が受信したSYNメッセージの宛先アドレス情報を元にTCPオプション情報の提示先を判断する方法を採る。本実施の形態において中継サーバ110はSYNメッセージの受信に利用するIPアドレス、ポート番号のペア(以下、TCPコネクション待受け用アドレスと呼ぶ)を1つ以上持ち、互いに通信を行うクライアント端末のペアは、中継サーバ110のどのTCPコネクション待受け用アドレスを利用するかをはじめに決めておく。以降、互いに通信を行うクライアント端末のペアが利用するTCPコネクション待受け用アドレスをランデブーアドレスと呼ぶ。
クライアント端末は自身が構築したTCPコネクションを終端しているWeb Proxy等の途中ノードに対してランデブーアドレスにTCPコネクションを構築するよう要求する。クライアント端末が直接中継サーバ110とTCPコネクションを構築できる場合は、自らが直接ランデブーアドレスに対してSYNメッセージを送信する。
中継サーバ110は同一ランデブーアドレス宛てのSYNメッセージを2つ受け取ることになる。中継サーバ110はSYNメッセージで提示されたTCPオプション情報を含むSYN ACKメッセージを生成し、当該SYNメッセージの宛先ランデブーアドレスと同一のランデブーアドレス宛ての他方のSYNメッセージの送信元アドレスへSYN ACKメッセージを送信する。これによりTCPオプションの整合が実現される。
以下、本実施の形態における中継サーバ110の構成について説明する。図5を参照すると本実施の形態における中継サーバ110は空きアドレス管理テーブル115を持つ点が第1の実施の形態における中継サーバ100と異なる。
図7に空きアドレス管理テーブル115の例を示す。空きアドレス管理テーブル115には、中継サーバ110が保持するTCPコネクション待受け用アドレスとその使用状況が管理されている。なお、図7にはTCPコネクション待受け用アドレスとしてIPアドレスのみ記載したが、IPアドレスとポート番号の組やポート番号のみでも良い。前者の場合IPアドレスが同一でもポート番号が異なれば異なるアドレスとして扱われる。使用状況はコネクションペア作成部112によって更新される。
コネクションペア作成部112は互いに通信を行いたいクライアント端末のペアがあると、空きアドレス管理テーブル115から使用されていないTCPコネクション待受け用アドレスを検索し、未使用のTCPコネクション待受け用アドレスをランデブーアドレスとして選択、クライアント端末へ通知する。なお、通知の方法としてはクライアント端末にメールを送信したり別途Webページを設けてそこへクライアント端末がアクセスして確認したりするなどの方法が考えられる。
コネクションペア作成部112はランデブーアドレスとして選択したTCPコネクション待受け用アドレスの使用状況を使用中として空きアドレス管理テーブル115を更新するとともに、ランデブーアドレスを転送テーブル101へサーバ側のコネクションアドレス情報として登録する。
クライアント端末へランデブーアドレスを通知した後、2つの異なる送信元アドレスからランデブーアドレス宛てのSYNメッセージを受信した場合、コネクションペア作成部112は転送テーブル101へ端末側のコネクションアドレス情報としてSYNメッセージの送信元アドレスを登録する。
(ランデブーアドレスの解放)
空きアドレス管理テーブル115に使用中と登録されているランデブーアドレスは、当該ランデブーアドレス宛に2つの異なる送信元アドレスからSYNメッセージを受信し、中継サーバ100が当該SYNメッセージの受信に利用したコネクションアドレスに対してSYN ACKメッセージを送信後、当該SYN ACKメッセージに対するACKメッセージを受信した時点(すなわち3WHメッセージの送受信が完了した時点)で、未使用に戻す。これによりSYN ACKメッセージのパケットロス等によりSYNメッセージが再送されるケースに対応することができる。
(ランデブーアドレスの解放)
空きアドレス管理テーブル115に使用中と登録されているランデブーアドレスは、当該ランデブーアドレス宛に2つの異なる送信元アドレスからSYNメッセージを受信し、中継サーバ100が当該SYNメッセージの受信に利用したコネクションアドレスに対してSYN ACKメッセージを送信後、当該SYN ACKメッセージに対するACKメッセージを受信した時点(すなわち3WHメッセージの送受信が完了した時点)で、未使用に戻す。これによりSYN ACKメッセージのパケットロス等によりSYNメッセージが再送されるケースに対応することができる。
コネクション構築メッセージ処理部103やパケット転送部104は第1の実施の形態と同様の処理を行うため説明を省略する。
第2の実施の形態ではクライアント端末が中継サーバを介して通信を行う通信システムにおいて、クライアント端末と中継サーバの間でTCPコネクションを終端するノード(以下、TCPコネクション終端ノード)が存在し、TCPコネクション終端ノードが中継サーバへのTCPコネクションの構築を開始する場合に、一方のTCPコネクション終端ノードが中継サーバへ送信したSYNメッセージに記載されるTCPオプション情報が他方のTCPコネクション終端ノードへ提示され、TCPコネクション終端ノード同士でTCPオプションの整合することができる。
その理由は、中継サーバが受信したSYNメッセージに含まれるTCPオプションの提示先をSYNメッセージの宛先アドレスから判断するため、事前にSYNメッセージの送信元アドレスが分からない場合であっても、SYNメッセージに含まれるTCPオプションの提示先を正しく判断できるためである。
なお、図1に示す中継サーバ100または図5に示す中継サーバ110の処理は、目的に応じて作製された論理回路で行うようにしても良い。また、処理内容を記述したプログラムを中継サーバ100,110にて読取可能な記録媒体に記録し、この記録媒体に記録されたプログラムを中継サーバ100,110に読み込ませ、実行するものであっても良い。中継サーバ100,110にて読取可能な記録媒体とは、フロッピーディスク(登録商標)、光磁気ディスク、DVD、CDなどの移設可能な記録媒体の他、中継サーバ100,110に内蔵されたHDD等を指す。この記録媒体に記録されたプログラムは、中継サーバ100,110内のCPU(不図示)にて読み込まれ、CPUの制御によって、上述したものと同様の処理が行われる。ここで、中継サーバ100,110は、プログラムが記録された記録媒体から読み込まれたプログラムを実行するコンピュータとして動作するものである。
以上説明したように、本発明においては以下の効果を有する。
第1の効果は、クライアント端末が中継サーバを介して通信を行う通信システムにおいて、クライアント端末から中継サーバへのTCPコネクションの構築を開始する場合に、一方のクライアント端末が中継サーバへ送信したSYNメッセージに記載されるTCPオプション情報が他方のクライアント端末へ提示され、中継サーバを介して通信を行うクライアント端末同士でTCPオプションの整合することができる点である。
その理由は、中継サーバ内のコネクション構築メッセージ処理部が、一方のクライアント端末から受信したSYNメッセージに記載されたTCPオプション情報を含むSYN ACKメッセージを生成し、当該SYN ACKメッセージを他方のクライアント端末から受信したSYNメッセージに対するSYN ACKメッセージとして送信するからである。
第2の効果は、クライアント端末が中継サーバを介して通信を行う通信システムにおいて、クライアント端末と中継サーバの間でTCPコネクションを終端するノード(以下、TCPコネクション終端ノード)が存在し、TCPコネクション終端ノードが中継サーバへのTCPコネクションの構築を開始する場合に、一方のTCPコネクション終端ノードが中継サーバへ送信したSYNメッセージに記載されるTCPオプション情報が他方のTCPコネクション終端ノードへ提示され、TCPコネクション終端ノード同士でTCPオプションの整合することができる。
その理由は、中継サーバが受信したSYNメッセージに含まれるTCPオプションの提示先をSYNメッセージの宛先アドレスから判断するため、事前にSYNメッセージの送信元アドレスが分からない場合であっても、SYNメッセージに含まれるTCPオプションの提示先を正しく判断できるためである。
100,110 中継サーバ
101 転送テーブル
102,112 コネクションペア作成部
103 コネクション構築メッセージ処理部
104 パケット転送部
115 空きアドレス管理テーブル
200 クライアント端末A
300 クライアント端末B
400 ファイヤウォール
500 プライベートネットワーク
600 インターネット
700〜703 Web Proxy
101 転送テーブル
102,112 コネクションペア作成部
103 コネクション構築メッセージ処理部
104 パケット転送部
115 空きアドレス管理テーブル
200 クライアント端末A
300 クライアント端末B
400 ファイヤウォール
500 プライベートネットワーク
600 インターネット
700〜703 Web Proxy
Claims (10)
- 複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記パケットデータを送信する端末と当該サーバとを接続するための第1のコネクションアドレスと、当該サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアが記載された転送テーブルと、
前記端末それぞれからTCPコネクションを構築するためのSYNメッセージを受信した場合、該SYNメッセージの応答メッセージであるSYN ACKメッセージを送信するコネクション構築メッセージ処理部とを有し、
前記コネクション構築メッセージ処理部は、前記転送テーブルに記載されたコネクションアドレスペアの一方のコネクションアドレスを利用して前記SYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信するとともに、前記一方のコネクションアドレスを利用して受信したSYNメッセージに含まれるTCPオプション情報を含むSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信するサーバ。 - 請求項1に記載のサーバにおいて、
前記コネクションアドレスは、前記端末のIPアドレス及びポート番号と、当該サーバのIPアドレス及びポート番号とから構成されていることを特徴とするサーバ。 - 複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記端末からTCPコネクションを構築するためのSYNメッセージを受信した場合、該SYNメッセージの応答メッセージであるSYN ACKメッセージを送信するコネクション構築メッセージ処理部を有し、
前記コネクション構築メッセージ処理部は、前記複数の端末のうち1つの端末から送信されたSYNメッセージを受信した際、該受信したSYNメッセージに含まれる宛先IPアドレスと宛先ポート番号とを宛先とするSYNメッセージを受信済みかどうかを調べ、受信済みである場合、前記受信したSYNメッセージに含まれるTCPオプション情報を含み、前記受信済みであるSYNメッセージの宛先IPアドレス及び宛先ポート番号を送信元アドレスとし、前記受信済みであるSYNメッセージの送信元IPアドレス及び送信元ポート番号を宛先アドレスとするSYN ACKメッセージを生成して送信するとともに、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含み、前記受信したSYNメッセージの宛先IPアドレス及び宛先ポート番号を送信元アドレスとし、前記受信したSYNメッセージの送信元IPアドレス及び送信元ポート番号を宛先アドレスとするSYN ACKメッセージを生成して送信するサーバ。 - 請求項3に記載のサーバにおいて、
当該サーバが前記SYNメッセージの受信に利用するIPアドレスおよびポート番号からなるTCPコネクション待受け用アドレスと、該TCPコネクション待受け用アドレスの使用状況とが、対応付けられて登録された空きアドレス管理テーブルと、
前記端末に対して前記TCPコネクション待受け用アドレスを通知するコネクションペア作成部とをさらに有し、
前記コネクションペア作成部は、前記端末から通信開始を要求されると前記使用状況が未使用となっているTCPコネクション待受け用アドレスを前記端末に通知し、前記空きアドレス管理テーブルに対して、前記通知したTCPコネクション待受け用アドレスと対応付けられた使用状況を使用中と登録し、前記TCPコネクション待受け用アドレスと対応付けられた使用状況が使用中となっている場合、当該使用状況が使用中となっているTCPコネクション待受け用アドレスを利用した3Way−Handshakeメッセージの送受信を完了した際に当該使用状況を未使用と登録することを特徴とするサーバ。 - 複数の端末が互いに送受信するパケットデータを転送するサーバにおけるパケット転送方法であって、
前記パケットデータを送信する端末と前記サーバとを接続するための第1のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からTCPコネクションを構築するためのSYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージとは異なるSYNメッセージを受信済みである場合、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含む前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信する処理と、
前記受信したSYNメッセージに含まれるTCPオプション情報を含む前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する処理とを有するパケット転送方法。 - 複数の端末が互いに送受信するパケットデータを転送するサーバにおけるパケット転送方法であって、
前記複数の端末のうち1つの端末から送信されたSYNメッセージを受信した際、該受信したSYNメッセージに含まれる宛先IPアドレスと宛先ポート番号とを宛先とするSYNメッセージを受信済みかどうかを調べる処理と、
受信済みである場合、前記受信したSYNメッセージに含まれるTCPオプション情報を含み、前記受信済みであるSYNメッセージの宛先IPアドレス及び宛先ポート番号を送信元アドレスとし、前記受信済みであるSYNメッセージの送信元IPアドレス及び送信元ポート番号を宛先アドレスとする前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して送信する処理と、
前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含み、前記受信したSYNメッセージの宛先IPアドレス及び宛先ポート番号を送信元アドレスとし、前記受信したSYNメッセージの送信元IPアドレス及び送信元ポート番号を宛先アドレスとする前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して送信する処理とを有するパケット転送方法。 - 請求項6に記載のパケット転送方法において、
前記端末から通信開始を要求されると、前記SYNメッセージの受信に利用するIPアドレスおよびポート番号からなるTCPコネクション待受け用アドレスに対応付けられた使用状況が未使用となっているTCPコネクション待受け用アドレスを前記端末に通知する処理と、
前記通知したTCPコネクション待受け用アドレスと対応付けられた使用状況を使用中と登録する処理と、
前記TCPコネクション待受け用アドレスと対応付けられた使用状況が使用中となっている場合、当該使用状況が使用中となっているTCPコネクション待受け用アドレスを利用した3Way−Handshakeメッセージの送受信を完了した際に当該使用状況を未使用と登録する処理とを有することを特徴とするパケット転送方法。 - 複数の端末が互いに送受信するパケットデータを転送するサーバに実行させるプログラムであって、
前記パケットデータを送信する端末と前記サーバとを接続するための第1のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第2のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からTCPコネクションを構築するためのSYNメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したSYNメッセージとは異なるSYNメッセージを受信済みである場合、前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含む前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記一方のコネクションアドレスを利用して送信する手順と、
前記受信したSYNメッセージに含まれるTCPオプション情報を含む前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して前記他方のコネクションアドレスを利用して送信する手順とを前記サーバに実行させるプログラム。 - 複数の端末が互いに送受信するパケットデータを転送するサーバに実行させるプログラムであって、
前記複数の端末のうち1つの端末から送信されたSYNメッセージを受信した際、該受信したSYNメッセージに含まれる宛先IPアドレスと宛先ポート番号とを宛先とするSYNメッセージを受信済みかどうかを調べる手順と、
受信済みである場合、前記受信したSYNメッセージに含まれるTCPオプション情報を含み、前記受信済みであるSYNメッセージの宛先IPアドレス及び宛先ポート番号を送信元アドレスとし、前記受信済みであるSYNメッセージの送信元IPアドレス及び送信元ポート番号を宛先アドレスとする前記受信済みであるSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して送信する手順と、
前記受信済みであるSYNメッセージに含まれるTCPオプション情報を含み、前記受信したSYNメッセージの宛先IPアドレス及び宛先ポート番号を送信元アドレスとし、前記受信したSYNメッセージの送信元IPアドレス及び送信元ポート番号を宛先アドレスとする前記受信したSYNメッセージの応答メッセージであるSYN ACKメッセージを生成して送信する手順とを前記サーバに実行させるプログラム。 - 請求項9に記載のプログラムにおいて、
前記端末から通信開始を要求されると、前記SYNメッセージの受信に利用するIPアドレスおよびポート番号からなるTCPコネクション待受け用アドレスに対応付けられた使用状況が未使用となっているTCPコネクション待受け用アドレスを前記端末に通知する手順と、
前記通知したTCPコネクション待受け用アドレスと対応付けられた使用状況を使用中と登録する手順と、
前記TCPコネクション待受け用アドレスと対応付けられた使用状況が使用中となっている場合、当該使用状況が使用中となっているTCPコネクション待受け用アドレスを利用した3Way−Handshakeメッセージの送受信を完了した際に当該使用状況を未使用と登録する手順とを前記サーバに実行させることを特徴とするプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008001164A JP2009164947A (ja) | 2008-01-08 | 2008-01-08 | サーバ、パケット転送方法およびプログラム |
US12/348,507 US7984164B2 (en) | 2008-01-08 | 2009-01-05 | Server, and packet transferring method and program therefor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008001164A JP2009164947A (ja) | 2008-01-08 | 2008-01-08 | サーバ、パケット転送方法およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009164947A true JP2009164947A (ja) | 2009-07-23 |
Family
ID=40845476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008001164A Pending JP2009164947A (ja) | 2008-01-08 | 2008-01-08 | サーバ、パケット転送方法およびプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7984164B2 (ja) |
JP (1) | JP2009164947A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018019161A (ja) * | 2016-07-26 | 2018-02-01 | 株式会社ソニー・インタラクティブエンタテインメント | 送信制御装置、送信制御方法及び送信制御プログラム |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9059968B2 (en) * | 2009-11-06 | 2015-06-16 | Telefonaktiebolaget L M Ericsson (Publ) | Stateless transmission control protocol rendezvous solution for border gateway function |
US9363240B2 (en) * | 2012-08-30 | 2016-06-07 | Excalibur Ip, Llc | Method and system for reducing network latency |
JP6236933B2 (ja) * | 2013-07-02 | 2017-11-29 | 富士通株式会社 | 中継装置 |
CN110213761B (zh) * | 2019-05-27 | 2020-06-02 | 中国海洋大学 | 基于双向syn反射的多模型伪ap检测方法及检测装置 |
CN112511522B (zh) * | 2020-11-24 | 2022-10-25 | 和中通信科技有限公司 | 探测扫描中减少内存占用的方法、装置和设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020143922A1 (en) * | 2001-04-03 | 2002-10-03 | Murata Kikai Kabushiki Kaisha | Relay server and relay system |
US20080130900A1 (en) * | 2003-10-20 | 2008-06-05 | Hsieh Vincent W | Method and apparatus for providing secure communication |
US8224966B2 (en) * | 2004-08-24 | 2012-07-17 | Cisco Technology, Inc. | Reproxying an unproxied connection |
-
2008
- 2008-01-08 JP JP2008001164A patent/JP2009164947A/ja active Pending
-
2009
- 2009-01-05 US US12/348,507 patent/US7984164B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018019161A (ja) * | 2016-07-26 | 2018-02-01 | 株式会社ソニー・インタラクティブエンタテインメント | 送信制御装置、送信制御方法及び送信制御プログラム |
Also Published As
Publication number | Publication date |
---|---|
US20090177787A1 (en) | 2009-07-09 |
US7984164B2 (en) | 2011-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2007338514B2 (en) | Ethernet/TMPLS hybrid network OAM frame creation method and corresponding signals | |
US7646739B2 (en) | Multicast routing over unidirectional links | |
JP4995891B2 (ja) | Macブリッジを用いたマルチホップメッシュネットワークの接続 | |
KR100811890B1 (ko) | 인터넷 시스템에서 서비스 플로우를 보장하는 애니캐스트라우팅 방법 및 장치 | |
US20040088389A1 (en) | Methods and apparatus for automated edge device configuration in a heterogeneous network | |
JPH0522345A (ja) | 最大転送単位の最適値管理決定方式 | |
US7526556B2 (en) | Method and apparatus for managing keepalive transmissions | |
US9043477B2 (en) | Communication system, server, terminal, packet data transferring method, and program therefor | |
EP3061276B1 (en) | Distributed data transmission in data networks | |
JP2009164947A (ja) | サーバ、パケット転送方法およびプログラム | |
US11381501B2 (en) | Coordinating pseudowire connection characteristics and multi-homed provider edge device capabtilities | |
CN106688209B (zh) | 用于传输广播数据的方法和*** | |
JP5801887B2 (ja) | 無線ネットワークのノード間で通信するためのシステムおよび方法 | |
US8156209B1 (en) | Aggregation devices processing keep-alive messages of point-to-point sessions | |
EP3866391B1 (en) | Controlling protocol independent multicast (pim) join/prune messages from a downstream pim neighbor using a pim join/prune response(s) from an upstream pim neighbor | |
US7151780B1 (en) | Arrangement for automated teller machine communications based on bisync to IP conversion | |
Rayes et al. | The internet in IoT—OSI, TCP/IP, IPv4, IPv6 and internet routing | |
JP5438624B2 (ja) | 通信システム、制御サーバ、フロー制御方法およびそのプログラム | |
CN102946350B (zh) | 一种基于优先级的数据传输方法和设备 | |
US8509235B2 (en) | Layer-2 packet return in proxy-router communication protocol environments | |
Rayes et al. | The internet in IoT | |
CN109413142B (zh) | 一种Linux下的iSCSI虚拟代理实现方法 | |
US10361997B2 (en) | Auto discovery between proxies in an IPv6 network | |
JP2013110689A (ja) | ネットワークシステム、中継装置、通信方法、中継方法及び中継プログラム | |
JP2009231986A (ja) | 通信装置 |