JP2020028074A - 通信装置、通信プログラム、及び通信方法 - Google Patents

通信装置、通信プログラム、及び通信方法 Download PDF

Info

Publication number
JP2020028074A
JP2020028074A JP2018153065A JP2018153065A JP2020028074A JP 2020028074 A JP2020028074 A JP 2020028074A JP 2018153065 A JP2018153065 A JP 2018153065A JP 2018153065 A JP2018153065 A JP 2018153065A JP 2020028074 A JP2020028074 A JP 2020028074A
Authority
JP
Japan
Prior art keywords
data
application
communication
bundle
socket
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
Application number
JP2018153065A
Other languages
English (en)
Inventor
裕子 久木園
Yuko Kukizono
裕子 久木園
山村 新也
Shinya Yamamura
新也 山村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018153065A priority Critical patent/JP2020028074A/ja
Priority to US16/533,960 priority patent/US20200059440A1/en
Publication of JP2020028074A publication Critical patent/JP2020028074A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • H04L69/162Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/321Interlayer communication protocols or service data unit [SDU] definitions; Interfaces between layers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9005Buffering arrangements using dynamic buffer space allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Communication Control (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Computer And Data Communications (AREA)

Abstract

【課題】アプリケーション間の通信の安定性を向上することができる通信装置、通信プログラム、及び通信方法を提供する。【解決手段】通信装置は、第1アプリケーションから第2アプリケーションに送信されたデータのうち、第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、複数のデータ片を第2アプリケーションに送信する送信部とを有する。【選択図】図16

Description

本件は、通信装置、通信プログラム、及び通信方法に関する。
近年、無線アクセスポイント(以下、「AP」と表記)が普及した結果、スマートフォンなどの端末は、APと通信キャリアの広域無線接続を切り替えながら通信を行うスタイルが広まっている。このような環境において、通信状態は、端末の接続数や周囲の電波状況に影響されるため、通信品質が場所や時間によりばらついて、通信が断続的となる。
例えば、ユーザが移動中、リンク対象のAPを切り替えながらインターネット上のサーバと通信を行う場合、通信のデータ量が多く、APのリンク可能範囲内の滞在時間が短いと、通信が途中で切断されるため、他のAPとの再リンク後に通信のやり直しが必要となる。
これに対し、端末及びサーバに実装された各アプリケーションに、その通信の遅延や途絶に対する耐性を持たせることが検討されている。例えば、通信が断続的となる環境でも円滑な通信を可能にする技術として、途絶耐性ネットワーク(DTN:Delay, Disruption Tolerant Networking)が知られている(例えば特許文献1及び2参照)。この技術は、IETF(The Internet Engineering Task Force)により標準化が進められ、例えばRFC(Request For Comments)5050には、DTNに適用するバンドルプロトコルが規定されている。
DTNによると、例えば端末とサーバの間のコネクションの切断時、端末のアプリケーションから送信されたデータを、バンドルプロトコルに従って、バンドルと呼ばれる単位で分割して一時的に蓄積し、コネクションの再接続時にサーバに送信することが可能となる。サーバではバンドルから端末のアプリケーションのデータが復元されて、サーバのアプリケーションに渡される。
国際公開第2015/133055号 特開2014−60533号公報
しかし、端末のアプリケーションのデータは、送信単位のパケットごとにバンドル化されるため、サーバではデータがバンドルからパケットごとに復元されてアプリケーションに渡される。このため、アプリケーションのデータは、パケット単位で分断された状態でサーバのアプリケーションに渡される。
例えば端末とサーバの間のコネクションの切断時間が長引いた場合、一部のパケットが遅延してサーバに到着するおそれがある。このとき、サーバに先行して到着したパケットはサーバのアプリケーションにすでに渡されているため、サーバのアプリケーションでは、不完全なデータの受信により通信時間がタイムアウトしてエラーが検出されるおそれがある。
そこで本件は、アプリケーション間の通信の安定性を向上することができる通信装置、通信プログラム、及び通信方法を提供することを目的とする。
1つの態様では、通信装置は、第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、前記複数のデータ片を前記第2アプリケーションに送信する送信部とを有する。
他の態様では、通信装置は、第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信する受信部と、前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信するデータ処理部とを有する。
1つの態様では、通信プログラムは、第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与し、前記複数のデータ片を前記第2アプリケーションに送信する、処理を、コンピュータに実行させる。
他の態様では、通信プログラムは、第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信し、前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する、処理を、コンピュータに実行させる。
1つの態様では、通信方法は、第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する工程と、前記複数のデータ片を前記第2アプリケーションに送信する工程とを、コンピュータが実行する方法である。
他の態様では、通信方法は、第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信する工程と、前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する工程とを、コンピュータが実行する方法である。
1つの側面として、アプリケーション間の通信の安定性を向上することができる。
DTNアプリケーションを介したアプリケーション間通信の比較例を示す図である。 端末の一例を示す構成図である。 サーバの一例を示す構成図である。 端末及びサーバの各機能構成の一例を示す構成図である。 バンドルのフォーマットが示す図である。 コネクションリスト、フィルタテーブル、及びバンドルバッファの一例を示す図である。 プロトコル変換の一例が示す図である。 クライアントアプリケーションのデータ送信処理の一例を示すフローチャートである。 バンドルの送信処理の一例を示すフローチャートである。 バンドルの受信処理の一例を示すフローチャートである。 バンドルプロトコルの適用の切り替え処理の一例を示すフローチャートである。 ストリーム出力処理の一例を示すフローチャートである。 アプリケーションデータをフラグメントに分割する処理の一例を示す図である。 ストリーム入力処理の一例を示すフローチャートである。 アプリケーションデータの復元処理の一例を示す図である。 DTNアプリケーションを介したアプリケーション間通信の実施例を示す図である。
図1は、DTNアプリケーション1b,2bを介したアプリケーション間通信の比較例を示す図である。端末1及びサーバ2は無線ネットワーク9を介して互いに通信する。端末1としては、例えば、スマートフォンやパーソナルコンピュータなどの通信装置が挙げられるが、これに限定されない。
端末1にはクライアントアプリケーション1a及びDTNアプリケーション1bが実装されている。サーバ2にはサーバアプリケーション2a及びDTNアプリケーション2bが実装されている。クライアントアプリケーション1a及びサーバアプリケーション2aは互いに通信することにより、端末1のユーザに各種のサービスを提供する。
クライアントアプリケーション1a及びサーバアプリケーション2aは、端末1とサーバ2の間のリンクが接続されている場合、DTNアプリケーション1b,2bを介さずに互いに通信する。しかし、クライアントアプリケーション1a及びサーバアプリケーション2aは、リンクが切断されると、DTNアプリケーション1b,2bを介して互いに通信する。
DTNアプリケーション1b,2bは、DTNのバンドルプロトコルに従ってクライアントアプリケーション1a及びサーバアプリケーション2aの間の通信のプロキシとして通信を中継する。以下に、リンクが切断された場合のクライアントアプリケーション1aからサーバアプリケーション2aへの通信について述べる。
クライアントアプリケーション1aは、アプリケーションデータ(APLデータ)#1,#2をDTNアプリケーション1bに送信する。APLデータ#1,#2は、それぞれ、サーバアプリケーション2aの処理に必要となる一塊のデータである。例えば、ある処理はAPLデータ#1の全てが揃わなければ実行することができず、他の処理はAPLデータ#2の全てが揃わなければ実行することができない。つまり、サーバアプリケーション2aは、APLデータ#1,#2の一部だけでは処理を実行することができない。
クライアントアプリケーション1aは、一例として、APLデータ#1をパケット(PKT)#1,#2に分割して送信し、APLデータ#2をPKT#3,#4に分割して送信する。PKT#1〜#4としては例えばIP(Internet Protocol)が挙げられる。
DTNアプリケーション1bは、一例として、PKT#1をバンドル#1,#2に分割して収容し、PKT#2をバンドル#3,#4に分割して収容する。また、DTNアプリケーション1bは、一例として、PKT#3をバンドル#5,#6に分割して収容し、PKT#4をバンドル#7に収容する。
バンドル#1,#2は、リンクが再接続されたときにサーバ2に送信される。DTNアプリケーション2bは、バンドル#1,#2からPKT#1を復元してサーバアプリケーション2aに送信する。サーバアプリケーション2aは、APLデータ#1の一部のAPLデータ#1AとしてPKT#1を受信する。
その後、リンクが再び切断すると、バンドル#1,#2の後続のバンドル#3,#4は遅延してサーバ2に到着する。DTNアプリケーション2bは、バンドル#3,#4からPKT#2を再生してサーバアプリケーション2aに送信する。サーバアプリケーション2aは、APLデータ#1の残りのAPLデータ#1BとしてPKT#2を受信する。
しかし、サーバアプリケーション2aでは、APLデータ#1Bに先立って不完全なAPLデータ#1Aを受信したことにより通信時間がタイムアウトしてエラーが検出される。このため、サーバアプリケーション2aは、APLデータ#1A,#1Bを廃棄し、APLデータ#1による処理を実行することができない。
また、APLデータ#2のバンドル#5〜7は、送信中にリンクが切断されることなく、サーバ2に到着する。このため、DTNアプリケーション2bは、バンドル#5〜#7からPKT#3,#4を再生してサーバアプリケーション2aに送信する。サーバアプリケーション2aは、PKT#3,#4からAPLデータ#2を再生して処理を実行する。
このように、サーバアプリケーション2aは、パケット単位で分断されたAPLデータ#1A,#1BをDTNアプリケーション2bから受信する。このため、後続のAPLデータ#1Bの受信が遅延すると、不完全なデータの受信により通信時間がタイムアウトしてエラーが検出される。
そこで、端末1のDTNアプリケーション1bは、サーバアプリケーション2aの処理ごとのAPLデータ#1,#2が区別できるように、クライアントアプリケーション1aがソケットのオープンからクローズまでに送信されたデータを複数のフラグメントに分割して各フラグメントに共通の識別番号を付与する。また、サーバ2のDTNアプリケーション2bは、共通の識別番号が付与された各フラグメントからPKT#1,#2を生成してサーバアプリケーション2aに転送する。以下に端末1及びサーバ2の構成を述べる。
図2は、端末1の一例を示す構成図である。端末1は、CPU(Central Processing Unit)10、ROM(Read Only Memory)11、RAM(Random Access Memory)12、HDD(Hard Disk Drive)やメモリなどの記憶部13、無線LAN(Local Area Network)モジュール14、入力部15、及び表示部16を有する。CPU10は、互いに信号の入出力ができるように、ROM11、RAM12、記憶部13、無線LANモジュール14、入力部15、及び表示部16と、バス19を介して接続されている。
ROM11は、CPU10を駆動するプログラムが格納されている。ROM11内のプログラムには、実施例の通信方法を実行する通信プログラムが含まれる。
RAM12は、CPU10のワーキングメモリとして機能する。記憶部13には、プログラムの実行に用いられる各種の情報が記憶されている。無線LANモジュール14は、例えば、アクセス系ネットワークに接続されたAPとリンクアップすることによりインターネット上のサーバと通信する。
入力部15は、端末1に情報を入力する手段である。入力部15としては、例えばキーボード、マウス、及びタッチパネルなどが挙げられる。入力部15は、入力された情報を、バス19を介しCPU10に出力する。
表示部16は、端末1の情報を出力する手段である。表示部16としては、例えばディスプレイ、タッチパネル、及びプリンタなどが挙げられる。表示部16は、CPU10からバス19を介して情報を取得して表示する。表示部16には、後述するように端末1のクライアントアプリケーションの通信の状況及び結果が表示される。
CPU10は、ROM11からプログラムを読み込むと、通信方法を実行するための各種の機能が形成される。CPU10は、通信プログラムを実行するコンピュータの一例である。なお、端末1の機能構成については後述する。
図3は、サーバ2の一例を示す構成図である。サーバ2は、例えばインターネットに接続され、端末1と通信することにより所定のサービスを提供する通信装置である。
サーバ2は、CPU20、ROM21、RAM22、HDD23、及び通信ポート24を有する。CPU20は、互いに信号の入出力ができるように、ROM21、RAM22、HDD23、及び通信ポート24と、バス29を介して接続されている。
ROM21は、CPU20を駆動するプログラムが格納されている。ROM21内のプログラムには、実施例の通信方法を実行する通信プログラムが含まれる。RAM22は、CPU20のワーキングメモリとして機能する。通信ポート24は、例えばNIC(Network Interface Card)であり、インターネットを介し端末1と通信する。
CPU20は、ROM21からプログラムを読み込むと、各種の機能が形成される。CPU20は、通信プログラムを実行するコンピュータの一例である。
図4は、端末1及びサーバ2の各機能構成の一例を示す構成図である。端末1及びサーバ2は、通信システムの一例であり、無線ネットワーク9を介して接続されている。なお、以下の説明では、端末1からサーバ2にAPLデータを送信する場合の動作を挙げるが、サーバ2から端末1にAPLデータを送信する場合も、端末1及びサーバ2間で送信処理と受信処理が逆転する以外は上記の場合と同様である。
端末1は、アプリケーション機能部100と、プロキシプロトコル機能部110と、バンドル制御部120と、バンドルバッファ122と、経路テーブル(経路TBL)123とを有する。
アプリケーション機能部100は、クライアントアプリケーション(APLc)1aと、TCP(Transmission Control Protocol)処理部102とを有する。プロキシプロトコル機能部110は、プロキシ制御部111と、コネクション監視部112と、アドレス変換部113と、送受信制御部114と、応答制御部115と、コネクションリスト116と、初期設定ファイル117と、フィルタテーブル(フィルタTBL)118と、ストリーム管理部119とを有する。ストリーム管理部119は、複数のバッファを備えるバッファ部(BUF)119aを有する。
クライアントアプリケーション1a、TCP処理部102、プロキシ制御部111、コネクション監視部112、アドレス変換部113、送受信制御部114、応答制御部115、ストリーム管理部119、及びバンドル制御部120は、端末1のCPU10に形成される機能である。また、コネクションリスト116と、初期設定ファイル117と、フィルタTBL118、バンドルバッファ122、及び経路TBL123は、記憶部13に記憶されている。
なお、図4に示された端末1の機能構成のうち、アプリケーション機能部100を除く部分は、実施例の通信装置及び通信プログラムとして機能し、クライアントアプリケーション1aからサーバアプリケーション2aへの通信を中継するDTNアプリケーション1bである。実施例の通信装置及び通信プログラムは、本例のように端末1の内部に設けられてもよいが、端末1とは別の装置に設けられてもよい。
一方、サーバ2は、アプリケーション機能部200と、プロキシプロトコル機能部210と、バンドル制御部220と、バンドルバッファ222と、経路TBL223とを有する。
アプリケーション機能部200は、サーバアプリケーション(APLs)2aと、TCP処理部202とを有する。プロキシプロトコル機能部210は、プロキシ制御部211と、コネクション監視部212と、アドレス変換部213と、送受信制御部214と、応答制御部215と、コネクションリスト216と、初期設定ファイル217と、フィルタTBL218と、ストリーム管理部219とを有する。ストリーム管理部219は、複数のバッファを備えるバッファ部(BUF)219aを有する。
サーバアプリケーション2a、TCP処理部202、プロキシ制御部211、コネクション監視部212、アドレス変換部213、送受信制御部214、応答制御部215、ストリーム管理部219、及びバンドル制御部220は、サーバ2のCPU20に形成される機能である。また、コネクションリスト216と、初期設定ファイル217と、フィルタTBL218、バンドルバッファ222、及び経路TBL223は、HDD23に記憶されている。
なお、図4に示されたサーバ2の機能構成のうち、アプリケーション機能部200を除く部分は、実施例の通信装置及び通信プログラムとして機能し、クライアントアプリケーション1aからサーバアプリケーション2aへの通信を中継するDTNアプリケーション2bである。実施例の通信装置及び通信プログラムは、本例のようにサーバ2の内部に設けられてもよいが、端末1とは別の装置に設けられてもよい。
サーバアプリケーション2aとクライアントアプリケーション1aは、TCP処理部102,202により通信することにより連携して所定の機能を提供する。サーバアプリケーション2aとクライアントアプリケーション1aの機能としては、例えばファイル転送機能やウェブブラウザ機能などが挙げられるが限定はない。
TCP処理部102,202は、例えばOS(Operating System)のドライバなどにより提供されるTCP/IPの通信機能を備える。端末1のTCP処理部102は、無線LANモジュール14を制御してパケットの送受信を行い、サーバ2のTCP処理部202は、通信ポート24を制御してパケットの送受信を行う。
サーバアプリケーション2aとクライアントアプリケーション1aは、端末1とサーバ2の間のリンクが確立されているとき、直接的にTCP/IPに基づく通信を行う。しかし、リンクが安定せず、通信が断続的となる環境においては、バンドル制御部120,220が、TCP/IPに基づく通信に代えて、DTNのバンドルプロトコルに基づく通信を行う。
バンドル制御部120は、クライアントアプリケーション1aからサーバアプリケーション2aへの通信を、そのサーバアプリケーション2aとのコネクションの状態に応じて、TCP/IPに基づく通信からDTNのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部112は、サーバアプリケーション2aとのコネクションを状態を監視し、コネクションの状態に応じてアドレス変換部113を制御する。
これにより、コネクション監視部112は、クライアントアプリケーション1aの通信をTCP/IPによる通信からDTNのバンドルプロトコルによる通信に切り替える。したがって、クライアントアプリケーション1aの通信が、TCP処理部102による通信からバンドル制御部120による通信に切り替えられる。
また、バンドル制御部220は、サーバアプリケーション2aからクライアントアプリケーション1aへの通信を、そのクライアントアプリケーション1aとのコネクションの状態に応じて、TCP/IPに基づく通信からDTNのバンドルプロトコルに基づく通信に切り替えて行う。このとき、コネクション監視部212は、クライアントアプリケーション1aとのコネクションを状態を監視し、コネクションの状態に応じて、アドレス変換部213を制御する。
これにより、コネクション監視部212は、サーバアプリケーション2aの通信をTCP/IPによる通信からDTNのバンドルプロトコルによる通信に切り替える。したがって、サーバアプリケーション2aの通信が、TCP処理部202による通信からバンドル制御部220による通信に切り替えられる。
バンドル制御部120,220は、例えば、RFC5050の規定に従い、バンドルプロトコルに基づく通信を行う。バンドル制御部120,220は、サーバアプリケーション2aとクライアントアプリケーション1aの送信対象データを、バンドルと呼ばれるデータメッセージのペイロード部分に収容して送信する。
図5には、バンドルのフォーマットが示されている。バンドルは、プライマリバンドルブロック及びバンドルペイロードブロックを含む。プライマリバンドルブロックには、送信元や宛先に関する情報、及び、バンドルの削除までの時間を示すライフタイム(「Life time」)などが含まれる。バンドルペイロードブロックには、データを収容するペイロード(「Bundle Payload」)が含まれる。なお、バンドル内の各項目についてはRFC5050に規定されている。
バンドル制御部120,220は、バンドルを送信するとき、経路TBL123,223を参照して、バンドルプロトコルにおける宛先を示すEID(Endpoint ID)に対応するTCP/IP上の宛先IPアドレス及びTCPポート番号(以下、「ポート番号」と表記)を取得する。
バンドル制御部120,220は、その宛先とのコネクション、つまり端末1とサーバ2の間のコネクションが切断されているとき、バンドルバッファ122にバンドルを格納しておき、コネクションが再接続されたとき、バンドルバッファ122からバンドルを読み出して送信する。これにより、DTNに基づく通信が行われる。なお、バンドルの送受信は、端末1の場合、バンドル制御部120が無線LANモジュール14を制御して行い、サーバ2の場合、バンドル制御部220が通信ポート24を制御して行う。
図6には、バンドルバッファ122,222の一例が示されている。バンドルバッファ122,222はバンドルの格納領域である。バンドルは、バンドルを識別するバンドルIDとともにバンドルバッファ122に格納される。なお、バンドル制御部120,220は、バンドルの送信時だけでなく、バンドルの受信時もバンドルをバンドルバッファ122に格納する。
再び図4を参照すると、プロキシプロトコル機能部110,210は、クライアントアプリケーション1a及びサーバアプリケーション2aの通信を、TCPのソケット通信からバンドルプロトコルの通信に変換する。このとき、プロキシプロトコル機能部110,210は、バンドル制御部120,220に対しバンドルAPI(Application Programing Interface)により設定及び制御を行うことにより、一般的なアプリケーションでもDTNを利用可能とする。以下にプロキシプロトコル機能部110,210の詳細を説明する。
アドレス変換部113,213は、クライアントアプリケーション1a及びサーバアプリケーション2aの通信の宛先を送受信制御部114,214の宛先に変換する。例えば端末1において、アドレス変換部113は、サーバ2を宛先とするパケットの宛先IPアドレス及びポート番号を、送受信制御部114に設定されたTCPソケット(以下、「ソケット」と表記)の宛先IPアドレス及びポート番号に変換する。
このため、プロキシプロトコル機能部110,210は、クライアントアプリケーション1a及びサーバアプリケーション2aから通信先に送信されるパケットのデータを受信することができる。なお、アドレス変換部113,213は、例えば、OSとしてWindows(登録商標)が使用される場合、WFP(Windows Filtering Platform)により実現され、OSとしてLinux(登録商標)が使用される場合、「iptables」により実現される。
送受信制御部114,214は、クライアントアプリケーション1a及びサーバアプリケーション2aのTCPのソケット通信を終端する。送受信制御部114,214は、装置内のローカルなループバックコネクションを確立する。
例えば、端末1の送受信制御部114は、クライアントアプリケーション1aからのソケットの接続を監視し、プロキシ制御部111からの指示に従い、サーバアプリケーション2aに対するソケットの確立と、指示されたソケットへのデータの送信を行う。
端末1の送受信制御部114は、クライアントアプリケーション1aからソケット経由で受信したパケットを、ストリーム管理部119に出力する。ストリーム管理部119は、クライアントアプリケーション1aからサーバアプリケーション2aに送信されたデータのうち、クライアントアプリケーション1aのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のフラグメントに分割して各フラグメントに共通のシーケンス番号(以下、「SN」と表記)を付与する。フラグメントはデータ片の一例であり、SNは識別番号の一例である。
また、サーバ2の送受信制御部214は、サーバアプリケーション2aからソケット経由で受信したパケットを、ストリーム管理部219に出力する。ストリーム管理部219は、端末1のストリーム管理部119と同様の処理を行う。なお、ストリーム管理部119,219はデータ処理部の一例であり、クライアントアプリケーション1a及びサーバアプリケーション2aは第1及び第2アプリケーションの一例である。
このように、ストリーム管理部119,219は、APLデータから、共通のSNが付与された複数のフラグメントを生成する。このため、端末1及びサーバ2は、フラグメントを受信したとき、フラグメントからアプリケーション間の通信プロトコルを解析することなく、SNに基づいてフラグメントごとに分割元のAPLデータを識別することができる。
例えばストリーム管理部119,219は、パケットのデータをバッファ部119a,219aに格納し、バッファ部119a,219aの各バッファのサイズに従って各フラグメントに分割する。このため、バッファのサイズを適切な値とすることによりパケットの遅延が低減される。ストリーム管理部119,219は、各フラグメントをプロキシ制御部111,211に出力する。
プロキシ制御部111,211は、各フラグメントをプロキシメッセージのペイロードに収容して、バンドルAPIによりバンドル制御部120,220に出力する。これにより、プロキシ制御部111,211からバンドル制御部120,220に対してバンドルの送信が要求される。
プロキシ制御部111,211は、プロキシメッセージを宛先に応じたコネクション番号により管理する。プロキシ制御部111,211は、送受信制御部114,214によりソケットがオープンされるたびに新規のコネクション番号をコネクションリスト116,216に登録する。
図6には、コネクションリスト116,216の一例が示されている。コネクションリスト116,216には、コネクション番号、ソケットチャネルID、及び宛先EIDが対応付けられて登録されている。ソケットチャネルIDは、送受信制御部114,214のソケットの識別子である。
プロキシ制御部111,211は、パケットの受信元のソケットのソケットチャネルIDに応じたコネクション番号をプロキシメッセージに付与してバンドル制御部120,220に出力する。また、プロキシ制御部111,211は、該当する宛先EIDへのバンドルの送信をバンドル制御部120,220に要求する。したがって、端末1のコネクションリスト116の宛先EIDには、サーバ2のEIDが登録され、サーバ2のコネクションリスト216の宛先EIDには、端末1のEIDが登録されている。なお、プロキシ制御部111,211は、初期設定ファイル117,217を読み出すことにより、自装置のEIDや通信先のEIDなどの通信に必要な情報を取得する。
また、プロキシ制御部111,211は、バンドル制御部120,220からプロキシメッセージを受信する。プロキシ制御部111,211は、受信したプロキシメッセージのコネクション番号がコネクションリスト116,216に未登録である場合、送受信制御部114,214に新規のソケットのオープンを指示し、そのソケットによる通信を開始する。
また、プロキシ制御部111,211は、受信したプロキシメッセージにデータが収容されていない場合、そのコネクション番号に対応するソケットチャネルIDをコネクションリスト116から検索する。プロキシ制御部111,211は、検索したソケットチャネルIDのソケットの削除を送受信制御部114,214に指示する。
このように、ソケットとEIDは、コネクションリスト116により対応付けられて管理される。このため、ソケットを用いるTCP/IPの通信をバンドルプロトコルに基づき行うことが可能となる。
また、バンドル制御部120,220は、プロキシ制御部111,211からのバンドルの送信要求に応じてバンドルを送信する。したがって、バンドル制御部120,220は、クライアントアプリケーション1a及びサーバアプリケーション2aから通信先への通信を途絶耐性ネットワークのプロトコルに基づいて行うことができる。
応答制御部115,215は、クライアントアプリケーション1a及びサーバアプリケーション2aからの通信が応答を要する場合、その応答を生成してクライアントアプリケーション1a及びサーバアプリケーション2aに出力する。このため、コネクションの切断により通信先との通信が途絶した場合でも、クライアントアプリケーション1a及びサーバアプリケーション2aは、通信の途絶を知ることなく動作を行う。したがって、コネクションの再接続後に通信のやり直しを必要としない。
例えば、端末1において、プロキシ制御部111がクライアントアプリケーション1aの通信を行った場合、応答制御部115はその通信に対する応答をクライアントアプリケーション1aに出力する。クライアントアプリケーション1aからサーバアプリケーション2aに対してファイルを分割して転送する場合、端末1の応答制御部115は、サーバアプリケーション2aに代わり、応答として、クライアントアプリケーション1aに対し次のファイルデータの送信を促す。
コネクション監視部112,212は、バンドル制御部120,220のコネクションの状態を監視する。コネクション監視部112,212は、コネクションが切断された状態ではコネクションの接続を行い、接続に成功した場合、コネクション監視部112,212にバンドルバッファ122,222内の送信対象のバンドルの送信を指示する。
また、コネクション監視部112,212は、コネクションの状態に応じて、アドレス変換部113,213に対し変換情報の設定及び削除を行う。コネクション監視部112,212は、フィルタTBL118,218に基づき変換情報を設定する。
図6には、フィルタTBL118,218の一例が示されている。フィルタTBL118,218には、パケットのフィルタ条件、変換情報、及び設定状態が対応付けられて登録されている。フィルタ条件には、アドレス変換の対象のパケットの送信元及び宛先のIPアドレスやポート番号などが指定されている。変換情報には、フィルタ条件に合致するパケットの書き換え対象の部分及び書き換え後の値を示す。設定状態は、フィルタ条件及び変換情報の設定の有効または無効を示す。
コネクション監視部112,212は、コネクションの状態に応じて、アドレス変換部113,213の変換情報の設定または削除を行う。このため、クライアントアプリケーション1a及びサーバアプリケーション2aの通信に自動的にバンドルプロトコルが適用される。
このように、コネクション監視部112,212は、通信先とのコネクションの状態を検出し、コネクションの状態に応じて、クライアントアプリケーション1a及びサーバアプリケーション2aの通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルは、コネクションの状態に応じてクライアントアプリケーション1a及びサーバアプリケーション2aの通信に使用される。
クライアントアプリケーション1a及びサーバアプリケーション2aは、通信が断続的となる場合、上記の構成によりTCP/IPをプロトコル変換することにより通信を行う。
図7にはプロトコル変換の一例が示されている。図7には、図4に示された構成のうち、端末1のクライアントアプリケーション1a、プロキシ制御部111、及びバンドル制御部120と、サーバ2のサーバアプリケーション2a、プロキシ制御部211、及びバンドル制御部220が示されている。
クライアントアプリケーション1a及びサーバアプリケーション2aの間では、IPアドレス及びポート番号によるTCP/IPの通信が行われる。クライアントアプリケーション1aには任意のソケットSC1がオープンされ、サーバアプリケーション2aには固定のソケットSC6がオープンされる。
プロキシ制御部111,211の間では、コネクション番号によるプロキシ間プロトコルによる通信が行われる。プロキシ制御部111には、送受信制御部114によりサーバアプリケーション2aのソケットSC6に1対1で対応するソケットSC2がオープンされる。プロキシ制御部211には、送受信制御部214によりクライアントアプリケーション1aのソケットSC1に1対1で対応するソケットSC5がオープンされる。
クライアントアプリケーション1aとプロキシ制御部111の間ではソケットSC1,SC2による通信が行われ、サーバアプリケーション2aとプロキシ制御部211の間ではソケットSC5,SC6による通信が行われる。このため、送受信制御部114,214は、クライアントアプリケーション1a及びサーバアプリケーション2aの各ソケットSC1,SC6に合わせてソケットSC2,SC5のオープン及びクローズを行いい、そのソケットSC2,SC5によるデータ送受信を行う。
クライアントアプリケーション1aは、ソケットSC1のオープンからクローズまでの間にAPLデータをパケット単位で送信する。図1の例を挙げると、ソケットSC1の1回目のオープンからクローズまでの間にAPLデータ#1のPKT#1,#2が送信され、2回目のオープンからクローズまでの間にAPLデータ#2のPKT#3,#4が送信される。
バンドル制御部120,220の間では、EIDによるバンドルプロトコルの通信が行われる。バンドル制御部120,220には、ソケットSC3,SC4がそれぞれオープンされる。
クライアントアプリケーション1aからサーバアプリケーション2aへの通信が行われる場合、端末1において、プロキシ制御部111は、初期設定ファイル117に基づきパケットのポート番号を宛先EIDに変換し、バンドル制御部120は、経路TBL123に基づき宛先EIDを宛先IPアドレス及びポート番号に変換する。
また、サーバ2において、バンドル制御部220は、宛先EIDを、後述する出力ポインタに変換し、プロキシ制御部211は、出力ポインタを宛先IPアドレス及びポート番号に変換する。このようにして、クライアントアプリケーション1aからサーバアプリケーション2aへの通信は行われる。以下に通信において実行される処理について述べる。
図8は、クライアントアプリケーション1aのデータ送信処理の一例を示すフローチャートである。端末1のプロキシ制御部111は、符号G1で示されるような初期設定ファイル117を読み出す(ステップSt1)。初期設定ファイル117には、「TCP_PROXY_CLIENT」として、端末1のEID「dtn://node1」と、通信先のサーバアプリケーション2a宛てのパケットをTCPで受信するためのポート番号「8001」が書き込まれている。
次に、プロキシ制御部111は、クライアントアプリケーション1aからサーバアプリケーション2a宛のパケットを受信するためのソケットを送受信制御部114に生成する(ステップSt2)。ソケットには、上記のポート番号「8001」、またはループバックIPアドレス「127.0.0.1」が設定される。クライアントアプリケーション1aは、サーバアプリケーション2aのソケットに代えて、送受信制御部114が生成したソケットにパケットを送信する。このとき、パケットの宛先IPアドレス及びポート番号は、所定の設定またはアドレス変換部113により変換される。
次に、送受信制御部114は、ソケットでのパケットの受信の有無を判定する(ステップSt3)。送受信制御部114は、パケットが受信されていない場合(ステップSt3のNo)、再度、ステップSt3の判定処理を実行する。
送受信制御部114は、パケットが受信された場合(ステップSt3のYes)、パケットをフラグメント化してストリーム管理部119に出力してストリーム出力処理を実行させる(ステップSt3a)。なお、ストリーム出力処理の内容は後述する。
次に、プロキシ制御部111は、パケットの送信元ポート番号が新規であるか否かを判定する(ステップSt4)。つまり、プロキシ制御部111は、クライアントアプリケーション1aのポート番号が変更され、新たなチャネルが確立されたか否かを判定する。
プロキシ制御部111は、送信元ポート番号が新規である場合(ステップSt4のYes)、コネクションリスト116に新たなコネクション番号と、そのコネクション番号に対応するソケットチャネルID及び宛先EIDを登録する(ステップSt9)。また、プロキシ制御部111は、送信元ポート番号が新規ではない場合(ステップSt4のNo)、ステップSt9の処理を実行しない。
次に、プロキシ制御部111は、符号G2で示されるようなプロキシメッセージを生成する(ステップSt5)。プロキシメッセージには、コネクション番号及びペイロードが含まれる。プロキシ制御部111は、ペイロードに各フラグメントを収容し、コネクションリスト116から検索したコネクション番号を付与することにより、プロキシメッセージを生成する。プロキシメッセージは、バンドルAPIによりバンドル制御部120に出力される。
次に、応答制御部115は、送信対象のパケットに対する応答の要否を判定する(ステップSt6)。応答制御部115は、TCPのACKではなく、アプリケーションレベルでの通信の継続に必要な応答の有無を判定する。
応答制御部115は、応答が必要である場合(ステップSt6のYes)、所定のアルゴリズムに基づき、サーバアプリケーション2aの代わりに応答データを生成してクライアントアプリケーション1aに送信する(ステップSt7)。つまり、応答制御部115,215は、クライアントアプリケーション1a及びサーバアプリケーション2aに通信の完了を通知する。また、応答制御部115は、応答が不要である場合(ステップSt6のNo)、応答データを生成しない。
次に、プロキシ制御部111は、バンドルAPIによりバンドル制御部120にバンドルの送信を要求する(ステップSt8)。バンドル制御部120は、プロキシメッセージからバンドルを生成して送信する。これにより、バンドル制御部120,220は、クライアントアプリケーション1a及びサーバアプリケーション2aから通信先への通信を途絶耐性ネットワークのプロトコルに基づいて行う。このようにして、クライアントアプリケーション1aのデータ送信処理は実行される。
図9は、バンドルの送信処理の一例を示すフローチャートである。バンドル制御部120は、プロキシ制御部111からバンドルの送信を要求されると、経路TBL123を読み出す(ステップSt11)。次に、バンドル制御部120は、経路TBL123に基づき、宛先IPアドレス及びポート番号に対応する宛先EIDのバンドルを生成する(ステップSt12)。
次に、バンドル制御部120は、宛先EIDに応じた通信先とのコネクションが確立状態であるか否かを判定する(ステップSt14)。バンドル制御部120は、コネクションが確立状態でない場合(ステップSt14のNo)、バンドルをバンドルバッファ122に格納し(ステップSt13)、再びステップSt14の処理を実行する。
バンドル制御部120は、コネクションが確立状態である場合(ステップSt14のYes)、バンドルを送信する(ステップSt15)。このようにして、バンドルの送信処理は実行される。
図10は、バンドルの受信処理の一例を示すフローチャートである。本処理は、サーバ2において実行される。
プロキシ制御部211は、符号G3で示されるような初期設定ファイル217を読み出す(ステップSt21)。初期設定ファイル217には、「COM_EID」として、サーバ2のEID「dtn://node1」が記録され、「TCP_PROXY_REGISTRATION」として、サーバ2の受信データの出力ポインタ「data/service」が記録され、「TCP_PROXY_SERVER」として、サーバ2のIPアドレス「192.168.1.1」及びポート番号「8001」が記録されている。
次に、プロキシ制御部211は、バンドル制御部220に対して端末1のクライアントアプリケーション1aからバンドルを受信できるように、バンドルAPIによりEID及び出力ポインタを登録する(ステップSt22)。このとき、プロキシ制御部211は、初期設定ファイル217の「COM_EID」及び「TCP_PROXY_REGISTRATION」でそれぞれ指定されたEID及び出力ポインタを登録する。これにより、バンドル制御部220は、バンドルを受信したとき、出力ポインタ「data/receive」の指定ディレクトリにバンドルを出力する。
次に、バンドル制御部220は、バンドルの受信の有無を判定する(ステップSt23)。バンドル制御部220は、バンドルを受信していない場合(ステップSt23のNo)、再びステップSt23の処理を実行する。また、バンドル制御部220は、バンドルを受信した場合(ステップSt23のYes)、ステップSt22で登録済みのEIDとバンドルの宛先EIDが一致するか否かを判定する(ステップSt24)。
バンドル制御部220は、登録済みのEIDとバンドルの宛先EIDが不一致である場合(ステップSt24のNo)、自装置宛てのバンドルではないため、バンドルを廃棄して処理を終了する。バンドル制御部220は、登録済みのEIDとバンドルの宛先EIDが一致する場合(ステップSt24のYes)、バンドルのペイロードからデータを取得してプロキシメッセージを生成して、出力ポインタの指定ディレクトリに出力する(ステップSt25)。
次に、プロキシ制御部211は、出力ポインタの指定ディレクトリを参照して、プロキシメッセージを取得する(ステップSt26)。プロキシメッセージのペイロードにはフラグメントが格納されており、プロキシ制御部211は、受信部の一例として、フラグメントを受信する。次に、プロキシ制御部211は、プロキシメッセージのコネクション番号がコネクションリスト116に登録済みであるか否かを判定する(ステップSt27)。
プロキシ制御部211は、コネクション番号が未登録である場合(ステップSt27のNo)、送受信制御部214に対し、初期設定ファイル217の「TCP_PROXY_SERVER」で指定されたIPアドレス及びポート番号のソケットのオープンを指示する(ステップSt28)。また、プロキシ制御部211は、コネクション番号が登録済みである場合(ステップSt27のYes)、プロキシメッセージのペイロードにデータが収容されているか否かを判定する(ステップSt30)。
プロキシ制御部211は、データが収容されている場合(ステップSt30のYes)、データ、つまりフラグメントをストリーム管理部219に入力することにより、該当するソケットからパケットをサーバアプリケーション2aに出力するためのストリーム入力処理を実行させる(ステップSt29)。これにより、ストリーム管理部219は、共通のSNが付与された各フラグメントからAPLデータを生成してサーバアプリケーション2aに送信する。なお、データ送信処理の詳細は後述する。
また、プロキシ制御部211は、データが収容されていない場合(ステップSt30のNo)、送受信制御部114に対し、該当するソケットのクローズを指示する(ステップSt31)。このようにして、バンドルの受信処理は実行される。
このように、クライアントアプリケーション1a及びサーバアプリケーション2aの間では、端末1とサーバ2の間のリンク状態とは無関係に、アプリケーションの動作に基づきプロキシプロトコル機能部110,210によりソケットのオープン及びクローズが再現される。このため、クライアントアプリケーション1a及びサーバアプリケーション2aの間では、コネクションが切断されている場合でも通信の継続が可能となる。
上述したように、コネクション監視部112,212は、コネクションの状態に応じて、アドレス変換部113,213の変換情報の設定または削除を行う。このため、クライアントアプリケーション1a及びサーバアプリケーション2aの通信に自動的にバンドルプロトコルが適用される。
図11は、バンドルプロトコルの適用の切り替え処理の一例を示すフローチャートである。コネクション監視部112,212は、通信先とのコネクションの接続の有無を検出する(ステップSt41)。
バンドル制御部120,220は、経路TBL123,223に設定された宛先IPアドレス及びポート番号に基づき、該当する通信先とのリンクのアップ・ダウンや、キープアライブ(keep alive)機能により通信の状態を検出する。コネクション監視部112,212は、バンドル制御部120,220の検出結果を取得し、またはバンドルAPIによる制御などによりコネクションの状態を検出する。
コネクション監視部112,212は、コネクションが接続されている場合(ステップSt41のYes)、バンドルバッファ122,222に送信待ちのバンドルが格納されているか否かを判定する(ステップSt42)。コネクション監視部112,212は、格納済みのバンドルがない場合(ステップSt42のNo)、再びステップSt41の処理を実行する。
また、コネクション監視部112,212は、格納済みのバンドルがある場合(ステップSt42のYes)、フィルタTBL118,218の設定状態を参照することによりアドレス変換部113,213に対する変換情報の設定の有無を判定する(ステップSt43)。コネクション監視部112,212は、変換情報の設定がない場合(ステップSt43のNo)、処理を終了する。また、コネクション監視部112,212は、変換情報の設定が有る場合(ステップSt43のYes)、変換情報を削除する(ステップSt44)。
これにより、TCP処理部102,202から送受信制御部114,214のソケットに対するパケットの転送が停止する。したがって、クライアントアプリケーション1a及びサーバアプリケーション2aの間の通信に対してバンドルプロトコルの適用が停止されるため、プロキシプロトコル機能部110,210を介さない直接的なTCP/IPの通信が行われる。
一方、コネクション監視部112,212は、コネクションが切断されている場合(ステップSt41のNo)、フィルタTBL118,218の設定状態を参照することによりアドレス変換部113,213に対する変換情報の設定の有無を判定する(ステップSt45)。コネクション監視部112,212は、変換情報の設定が有る場合(ステップSt45のYes)、処理を終了する。また、コネクション監視部112,212は、変換情報の設定がない場合(ステップSt45のNo)、変換情報を設定する(ステップSt46)。
これにより、TCP処理部102,202から送受信制御部114,214のソケットに対するパケットの転送が開始される。したがって、クライアントアプリケーション1a及びサーバアプリケーション2aの間の通信に対してバンドルプロトコルの適用が開始されるため、プロキシプロトコル機能部110,210を介した通信が行われる。
このように、コネクション監視部112,212は、通信先とのコネクションの状態を検出し、そのコネクションの状態に応じて、クライアントアプリケーション1a及びサーバアプリケーション2aの間の通信に対するバンドルプロトコルの適用の可否を決定する。このため、バンドルプロトコルの適用が自動的に行われる。
図12は、ストリーム出力処理の一例を示すフローチャートである。ストリーム出力処理は、ステップSt3aにおいて実行される。なお、本例では、端末1のストリーム管理部119の処理を挙げるが、サーバ2のストリーム管理部219もストリーム管理部119と同様の処理を実行する。
ストリーム管理部119は、クライアントアプリケーション1aのソケットSC1がオープンしているか否かを判定する(ステップSt51)。ストリーム管理部119は、ソケットSC1がクローズしている場合(ステップSt51のNo)、処理を終了する。
また、ストリーム管理部119は、ソケットSC1がオープンしている場合(ステップSt51のYes)、SNに1を加算し、フラグメント番号(以下、「FN」と表記)を1に設定する(ステップSt52)。FNは、SNが共通である複数のフラグメントの各々のAPLデータ内の位置に応じた位置情報であり、フラグメントからパケットを再生するときのフラグメントの配置に用いられる。なお、端末1の起動時、SNの初期値として例えば1が設定される。
次にストリーム管理部119は、クライアントアプリケーション1aがソケットSC1から送信したパケットのデータ、つまりAPLデータをバッファ部119aのバッファに格納する(ステップSt53)。次にストリーム管理部119は、バッファが満タンであるか否かを判定する(ステップSt54)。ストリーム管理部119は、バッファが満タンではない場合(ステップSt54のNo)、以下のステップSt57の処理を実行する。
また、ストリーム管理部119は、バッファが満タンである場合(ステップSt54のYes)、バッファ内のデータ、つまりフラグメントにFNを付与する(ステップSt55)。このため、サーバ2は、端末1から受信した各フラグメントのAPLデータ内の位置を識別して容易にパケットを復元することができる。次にストリーム管理部119は、データの格納先のバッファを他のバッファに切り替える(ステップSt56)。
次にストリーム管理部119は、クライアントアプリケーション1aのソケットSC1がクローズしたか否かを判定する(ステップSt57)。ストリーム管理部119は、ソケットSC1がクローズしていない場合(ステップSt57のNo)、タイマにより一定時間パケットが未受信であるか否かを判定する(ステップSt58)。ストリーム管理部119は、一定時間パケットが未受信ではない場合(ステップSt58のNo)、ステップSt53以降の各処理を再び実行する。
ストリーム管理部119は、ソケットSC1がクローズしている場合(ステップSt57のYes)、または一定時間パケットが未受信である場合(ステップSt58のYes)、各バッファからフラグメントを読み出す(ステップSt59)。次にストリーム管理部119は、各フラグメントに共通のSNを付与する(ステップSt60)。
このため、各フラグメントは分割元のAPLデータに応じたSNが付与される。したがって、サーバ2のストリーム管理部219は、フラグメントからアプリケーション間の通信プロトコルを解析することなく、端末1から受信した各フラグメントの分割元のAPLデータを識別することができる。そして、ストリーム管理部219は、共通のAPLデータから分割された全てのパケットを復元した後、サーバアプリケーション2aに送信することができる。これにより、サーバアプリケーション2aに不完全なデータが渡されることが抑制されるため、アプリケーション間の通信の安定性が向上する。
次にストリーム管理部119は、各フラグメントに終了フラグを付与する(ステップSt61)。終了フラグは、付与されたフラグメントがAPLデータの最後尾に位置するか否かを示す。終了フラグ「1」は、フラグメントが最後尾であることを示し、終了フラグ「0」は、フラグメントが最後尾ではないことを示す。
このように、ストリーム管理部119は、APLデータの最後尾のフラグメントに、最後尾を示す情報として終了フラグ「1」を付与する。このため、サーバ2のストリーム管理部119は、終了フラグ「1」を検出することによりフラグメントからAPLデータを完了してサーバアプリケーション2aにパケットを送信することができる。
次にストリーム管理部119は、各フラグメントをプロキシ制御部111に出力する(ステップSt62)。これにより、各フラグメントは、バンドル制御部120によりバンドルに収容されてサーバアプリケーション2aに送信される。なお、プロキシ制御部111,211は送信部の一例である。このようにしてストリーム出力処理は実行される。
図13は、APLデータをフラグメントに分割する処理の一例を示す。図13において、紙面右方向を時刻の進む方向とする。なお、本例では、端末1のストリーム管理部119の処理を挙げるが、サーバ2のストリーム管理部219もストリーム管理部119と同様にAPLデータを分割する。
クライアントアプリケーション1aは、ソケットSC1のオープンからクローズまでの間にAPLデータ#1を送信する。クライアントアプリケーション1aは、その後のソケットSC1のオープンからクローズまでの間にAPLデータ#2を送信する。
ストリーム管理部119は、APLデータ#1をバッファのサイズLごとにn個(n:正の整数)のフラグメントに分割して、各フラグメントに共通のSN#1を付与し、また、FN#1〜#nを先頭のフラグメントから順に付与する。さらにストリーム管理部119は、APLデータ#1の最後尾のFN#nのフラグメントに終了フラグ「1」を付与し、他のフラグメントに終了フラグ「0」を付与する。
ストリーム管理部119は、APLデータ#2をバッファのサイズLごとにm個(m:正の整数)のフラグメントに分割して、各フラグメントに共通のSN#2を付与し、また、FN#1〜#mを先頭のフラグメントから順に付与する。さらにストリーム管理部119は、APLデータ#2の最後尾のFN#mのフラグメントに終了フラグ「1」を付与し、他のフラグメントに終了フラグ「0」を付与する。
このように、各フラグメントには、SN、FN、及び終了フラグが付与される。このため、サーバ2のストリーム管理部219は、SNに基づき各フラグメントの分割元のAPLデータ#1,#2を識別子、FNに基づき各フラグメントのAPLデータ#1,#2内の位置を識別することができる。また、ストリーム管理部219は、終了フラグ「1」を検出することにより、APLデータから分割された全てのフラグメントの受信を確認することができる。
図14は、ストリーム入力処理の一例を示すフローチャートである。ストリーム入力処理は、ステップSt29において実行される。なお、本例では、サーバ2のストリーム管理部219の処理を挙げるが、端末1のストリーム管理部119もストリーム管理部219と同様の処理を実行する。
ストリーム管理部219は、プロキシメッセージからフラグメントを取得する(ステップSt70)。フラグメントはバッファ部219aのバッファに格納される。
次にストリーム管理部219は、フラグメントに付与されたSNの正常性をチェックする(ステップSt71)。例えばストリーム管理部219は、SNに連続性がない場合、または、終了フラグ「1」が付与されたフラグメントが未受信であるのにSNが変化した場合、SNの異常を検出する。
ストリーム管理部219は、SNが異常である場合(ステップSt72のNo)、フラグメントを廃棄する(ステップSt77)。その後、ステップSt76の処理が実行される。
また、ストリーム管理部219は、SNが正常である場合(ステップSt72のYes)、フラグメントに付与された終了フラグが「1」であるか否かを判定する(ステップSt73)。ストリーム管理部219は、終了フラグが「0」である場合(ステップSt73のNo)、ステップSt70以降の各処理を再び実行する。
また、ストリーム管理部219は、終了フラグが「1」である場合(ステップSt73のYes)、共通のAPLデータから分割されたパケットを復元する(ステップSt74)。このとき、ストリーム管理部219は、共通のSNが付与された各フラグメントをFNに従って配置することによりパケットを復元する。このため、ストリーム管理部219は、各フラグメントからアプリケーション間の通信プロトコルを解析する必要がない。
次にストリーム管理部219は、送受信制御部214からサーバアプリケーション2aのソケットSC6にパケットを送信する(ステップSt75)。次に、ストリーム管理部219は、プロキシメッセージから取得していないフラグメントの有無を判定する(ステップSt76)。
ストリーム管理部219は、未取得のフラグメントが有る場合(ステップSt76のYes)、ステップSt70以降の各処理を再び実行する。このとき、新たに取得されるフラグメントのSNは、前回のSNから1つ増加する。
また、ストリーム管理部219は、未取得のフラグメントが無い場合(ステップSt76のNo)、処理を終了する。このようにして、ストリーム入力処理は実行される。
図15は、APLデータの復元処理の一例を示す図である。符号Gaは、ストリーム管理部219がAPLデータ#1のフラグメントの一部のみを取得したときの動作を示し、符号Gbは、ストリーム管理部219がAPLデータ#1の全てのフラグメントを取得したときの動作を示す。
ストリーム管理部219は、APLデータ#1から分割されたSN#1の各フラグメントのうち、FN#1〜#3のフラグメントだけを取得しても、サーバアプリケーション2aに送信せずに待機する。このため、サーバアプリケーション2aは、図1の例のように不完全なAPLデータ#1を受け取ることがない。
また、ストリーム管理部219は、APLデータ#1の全てのフラグメント(FN#1〜#n)を取得すると、APLデータ#1の全パケットを復元してサーバアプリケーション2aに送信する。このため、サーバアプリケーション2は、完全なAPLデータ#1を受け取ることができ、エラーの発生が抑制される。
このように、ストリーム管理部219は、クライアントアプリケーション1aから受信された各フラグメントのうち、共通のSNが付与された各フラグメントからAPLデータを生成してサーバアプリケーション2aに送信する。このため、ストリーム管理部219は、フラグメントからアプリケーション間の通信プロトコルを解析することなく、APLデータを復元してサーバアプリケーション2aに渡すことができる。
したがって、サーバアプリケーション2aにAPLデータの一部が他の部分から遅延して渡されることが抑制されるため、エラーの発生を抑制することができる。よって、アプリケーション間の通信の安定性が向上する。
また、ストリーム管理部219は、APLデータの最後尾のフラグメントを、そのフラグメントに付与された終了フラグ「1」に基づいて検出し、検出後にAPLデータを生成してサーバアプリケーション2aに送信する。このため、ストリーム管理部219は、終了フラグ「1」を検出することにより、APLデータから分割された全てのフラグメントの受信を確認することができる。
図16は、DTNアプリケーション1a,1bを介したアプリケーション間通信の実施例を示す図である。図16において、図1と共通する構成には同一の符号を付し、その説明は省略する。なお、DTNアプリケーション1aは、図4に示された端末1の機能のうち、アプリケーション機能部100以外の機能を含み、DTNアプリケーション1bは、図4に示されたサーバ2の機能のうち、アプリケーション機能部200以外の機能を含む。
端末1のDTNアプリケーション1bは、APLデータ#1から分割されたPKT#1,#2をFN#1〜#6のフラグメントに分割する。FN#1〜#6のフラグメントには、APLデータ#1に応じた共通のSN#1が付与される。
DTNアプリケーション1bは、FN#1〜#6のフラグメントをバンドル#1〜#6にそれぞれ収容してサーバ2に送信する。なお、本例では、一例として、1つのフラグメントが1つのバンドルに収容されるが、1つのバンドルに収容されるフラグメントの個数はバンドル及びフラグメントの各サイズに応じて決定されるため、これに限定されない。
また、DTNアプリケーション1bは、後続のAPLデータ#2をSN#2のフラグメント(FN#1〜#4)に分割してバンドル#7〜#10に収容してサーバ2に送信する。
サーバ2のDTNアプリケーション2bは、バンドル#1〜#3を受信した後にリンクが切断され、その再接続後にバンドル#4〜#10を受信する。このため、SN#1の各フラグメントのうち、FN#4〜#6のフラグメントは、FN#1〜#3のフラグメントに対してサーバ2への到着が遅延する。
しかし、DTNアプリケーション2bは、先行のFN#1〜#3のフラグメントだけを取得しても、PKT#1を復元してサーバアプリケーション2aに送信することはない。DTNアプリケーション2bは、残りのFN#4〜#6のフラグメントを取得したことを契機として、APLデータ#1のPKT#1,#2を復元しサーバアプリケーション2aに送信する。
このため、本実施例によると、完全なAPLデータ#1がサーバアプリケーション2aに渡されるため、不完全なAPLデータ#1の受信によりタイムアウトが発生してエラーが検出されることが抑制される。また、本例では、クライアントアプリケーション1aからサーバアプリケーション2aへAPLデータ#1,#2を送信する場合を挙げたが、サーバアプリケーション2aからクライアントアプリケーション1aへAPLデータを送信する場合、DTNアプリケーション1b,2bの処理が逆転するだけで、その内容は上記と同様である。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体(ただし、搬送波は除く)に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形して実施可能である。
なお、以上の説明に関して更に以下の付記を開示する。
(付記1) 第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、
前記複数のデータ片を前記第2アプリケーションに送信する送信部とを有することを特徴とする通信装置。
(付記2) 前記データ処理部は、前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与することを特徴とする付記1に記載の通信装置。
(付記3) 前記データ処理部は、前記第1アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする付記1または2に記載の通信装置。
(付記4) 前記データ処理部は、前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与することを特徴とする付記1乃至3の何れかに記載の通信装置。
(付記5) 第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信する受信部と、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信するデータ処理部とを有することを特徴とする通信装置。
(付記6) 前記データ処理部は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第2アプリケーションに送信することを特徴とする付記5に記載の通信装置。
(付記7) 第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与し、
前記複数のデータ片を前記第2アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
(付記8) 前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与する処理を、前記コンピュータに実行させることを特徴とする付記7に記載の通信プログラム。
(付記9) 前記複数のデータ片に分割する処理は、前記第1アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする付記7または8に記載の通信プログラム。
(付記10) 前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与する処理を、前記コンピュータに実行させることを特徴とする付記7乃至9の何れかに記載の通信プログラム。
(付記11) 第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信し、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
(付記12) 前記第1アプリケーションのデータを送信する処理は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第2アプリケーションに送信することを特徴とする付記11に記載の通信プログラム。
(付記13) 第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する工程と、
前記複数のデータ片を前記第2アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
(付記14) 前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与する工程を、前記コンピュータが実行することを特徴とする付記13に記載の通信方法。
(付記15) 前記第1アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする付記14または14に記載の通信方法。
(付記16) 前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与する工程を、前記コンピュータが実行することを特徴とする付記13乃至15の何れかに記載の通信方法。
(付記17) 第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信する工程と、
前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
(付記18) 前記第1アプリケーションのデータを送信する工程は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第2アプリケーションに送信することを特徴とする付記17に記載の通信方法。
(付記19) 第1通信装置と第2通信装置を含み、
前記第1通信装置は、
第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する第1データ処理部と、
前記複数のデータ片を前記第2通信装置に送信する送信部とを有し、
前記第2通信装置は、
前記複数のデータ片を前記第1通信装置から受信する受信部と、
前記複数のデータ片のうち、前記共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する第2データ処理部とを有することを特徴とする通信システム。
1 端末
1a クライアントアプリケーション
2 サーバ
2a サーバアプリケーション
111,211 プロキシ制御部
119,219 ストリーム管理部
SC1〜SC6 ソケット

Claims (10)

  1. 第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与するデータ処理部と、
    前記複数のデータ片を前記第2アプリケーションに送信する送信部とを有することを特徴とする通信装置。
  2. 前記データ処理部は、前記複数のデータ片のうち、前記ソケットがオープンしてからクローズするまでの間に送信されたデータの最後尾のデータ片に、前記最後尾を示す情報を付与することを特徴とする請求項1に記載の通信装置。
  3. 前記データ処理部は、前記第1アプリケーションから送信されたデータをバッファに格納し、前記バッファのサイズに従って前記複数のデータ片に分割することを特徴とする請求項1または2に記載の通信装置。
  4. 前記データ処理部は、前記複数のデータ片の各々に、前記ソケットがオープンしてからクローズするまでの間に送信されたデータ内の位置に応じた位置情報を付与することを特徴とする請求項1乃至3の何れかに記載の通信装置。
  5. 第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信する受信部と、
    前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信するデータ処理部とを有することを特徴とする通信装置。
  6. 前記データ処理部は、前記複数のデータ片のうち、前記データの最後尾のデータ片を、前記最後尾のデータ片に付与された情報に基づいて検出し、検出後に前記データを生成して前記第2アプリケーションに送信することを特徴とする請求項5に記載の通信装置。
  7. 第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与し、
    前記複数のデータ片を前記第2アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
  8. 第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信し、
    前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する、処理を、コンピュータに実行させることを特徴とする通信プログラム。
  9. 第1アプリケーションから第2アプリケーションに送信されたデータのうち、前記第1アプリケーションのソケットがオープンしてからクローズするまでの間に送信されたデータを複数のデータ片に分割して前記複数のデータ片の各々に共通の識別番号を付与する工程と、
    前記複数のデータ片を前記第2アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
  10. 第1アプリケーションから第2アプリケーションに送信された複数のデータ片を受信する工程と、
    前記複数のデータ片のうち、共通の識別番号が付与された各データ片から前記第1アプリケーションのデータを生成して前記第2アプリケーションに送信する工程とを、コンピュータが実行することを特徴とする通信方法。
JP2018153065A 2018-08-16 2018-08-16 通信装置、通信プログラム、及び通信方法 Pending JP2020028074A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018153065A JP2020028074A (ja) 2018-08-16 2018-08-16 通信装置、通信プログラム、及び通信方法
US16/533,960 US20200059440A1 (en) 2018-08-16 2019-08-07 Communication device and communication method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018153065A JP2020028074A (ja) 2018-08-16 2018-08-16 通信装置、通信プログラム、及び通信方法

Publications (1)

Publication Number Publication Date
JP2020028074A true JP2020028074A (ja) 2020-02-20

Family

ID=69523042

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018153065A Pending JP2020028074A (ja) 2018-08-16 2018-08-16 通信装置、通信プログラム、及び通信方法

Country Status (2)

Country Link
US (1) US20200059440A1 (ja)
JP (1) JP2020028074A (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6011775B2 (ja) * 2012-04-23 2016-10-19 パナソニックIpマネジメント株式会社 分散装置、復元装置、分散方法、復元方法及び分散復元システム
US9680739B2 (en) * 2014-01-31 2017-06-13 The University Of Tokyo Information transmission system, information communication apparatus, and information transmission apparatus

Also Published As

Publication number Publication date
US20200059440A1 (en) 2020-02-20

Similar Documents

Publication Publication Date Title
JP6859795B2 (ja) 中継通信方法、中継通信プログラム、及び中継通信装置
US5745685A (en) Protocol extension in NSPP using an acknowledgment bit
EP1393496B1 (en) System and methods for providing differentiated services within a network communication system
JP4230663B2 (ja) 無線通信ネットワークにおけるパケット・ヘッダの削減
JP5696724B2 (ja) 中継装置,中継システム,中継方法,プログラム,及びプログラムを記録したコンピュータ読み取り可能な記録媒体
JP3985638B2 (ja) Rsvp代理応答ルータ、rsvp代理応答システム及びそれに用いるrsvp代理応答方法
JP2005529545A (ja) パケットフローに基づくセッションサービスの適用
JP2008020977A (ja) ネットワークプロセッサシステムおよびネットワークプロトコル処理方法
US8009683B2 (en) IP network system
CN102629944B (zh) 网络加速方法、装置及系统
JP5014199B2 (ja) 通信記録装置、通信データ処理方法および通信データ処理プログラム
US7535916B2 (en) Method for sharing a transport connection across a multi-processor platform with limited inter-processor communications
CN113765865B (zh) 一种报文处理方法、设备及系统
JP6662152B2 (ja) 通信プログラム、通信方法、及び通信装置
JP2020028074A (ja) 通信装置、通信プログラム、及び通信方法
WO2002093867A2 (en) Service-based compression of content within a network communication system
US20190205189A1 (en) Communication system, terminal, and server
JP7509209B2 (ja) 通信システム、通信方法、通信装置及びプログラム
JP2005072701A (ja) インタフェース提供装置
WO2022038771A1 (ja) 通信システム、通信方法、中継サーバ及びプログラム
JPH11249978A (ja) データ転送方法および装置
WO2024150381A1 (ja) 通信装置、通信方法、及びプログラム
WO2018061213A1 (ja) 通信システム、端末装置、サーバ装置、通信プログラム、及び通信方法
WO2023078031A1 (zh) 一种报文发送方法及装置
JP2003283577A (ja) IPv4/IPv6デュアルスタック機能を備えた通信装置