(58)【調査した分野】(Int.Cl.,DB名)
TCP(Transmission Control Protocol)に従ってデータを配信するソースから、配信されたデータを処理する複数のシンクにデータを転送する転送装置における転送方法であって、
前記ソースからパケットを受信するステップと、
TCPシーケンス番号の最大値の約数Lの格納領域を持つリングバッファにおいて、前記受信したパケットのTCPシーケンス番号に基づき、前記受信したパケット内のデータを、前記受信したパケットのTCPシーケンス番号をLでモジュロ演算して得られる値によって表される格納領域に格納するステップと、
前記受信したパケットをTCPに従った配信を要求する第1のシンクに転送するステップと、
前記リングバッファから前記データを読み出し、当該読み出したデータをUDP(User Datagram Protocol)に従った配信を要求する第2のシンクに転送するステップと、
前記受信したパケットのTCPシーケンス番号に基づき、受信していないデータが存在すると判断した場合、受信していないデータが存在することを示すロス情報を保持するステップと、
前記ロス情報が存在する場合には、当該ロス情報の手前まで受信したデータを前記リングバッファから読み出し、所定時間待機しても当該ロス情報に対応するデータが受信されない場合、当該ロス情報の後に受信したデータを前記リングバッファから読み出すステップと、
を有する転送方法。
【背景技術】
【0002】
IP(Internet Protocol)ネットワークでは、TCP(Transmission Control Protocol)及びUDP(User Datagram Protocol)等のトランスポートプロトコルが利用される。
【0003】
TCPは、再送制御等を行うことができるため信頼性の高いプロトコルである。UDPは、信頼性を確保する仕組みがないが、処理が簡単で遅延が少ないプロトコルである。
【0004】
1つのソース(防犯カメラ等)から複数のシンク(ビュワー等)に映像配信する従来の技術では、TCPベースのPUB/SUBモデルを用いた配信形態(非特許文献1参照)や、UDPベースのマルチキャスト(非特許文献2参照)が提案されている。
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来の技術では、ノイズの無い高品質な映像視聴を必要とするシンクに対しては、TCPベースの配信が行われ、リアルタイムなストリームの映像視聴を必要とするシンクに対しては、UDPベースの配信が行われる。
【0007】
しかし、TCPベースの配信による高品質性の通信要件を持つシンクと、UDPベースの配信によるリアルタイム性の通信要件を持つシンクとが存在する場合、それぞれに対するソースが必要となり、1つのソースから、異なる通信要件を持つシンクに対して適切なトランスポートでの転送を行うことができない。
【0008】
本発明は、1つのソースから異なる通信要件を持つシンクに対してトランスポートでの転送を行うことを目的とする。
【課題を解決するための手段】
【0009】
本発明の一形態に係る転送装置は、
TCP(Transmission Control Protocol)に従ってデータを配信するソースからパケットを受信する受信部と、
TCPシーケンス番号の最大値の約数Lの格納領域を持つリングバッファにおいて、前記受信したパケットのTCPシーケンス番号に基づき、前記受信したパケット内のデータを、前記受信したパケットのTCPシーケンス番号をLでモジュロ演算して得られる値によって表される格納領域に格納する格納部と、
前記受信したパケットをTCPに従った配信を要求する第1のシンクに転送するTCP転送部と、
前記リングバッファから前記データを読み出し、当該読み出したデータをUDP(User Datagram Protocol)に従った配信を要求する第2のシンクに転送するUDP転送部と、
を有し
、
前記格納部は、前記受信したパケットのTCPシーケンス番号に基づき、受信していないデータが存在すると判断した場合、受信していないデータが存在することを示すロス情報を保持し、
前記UDP転送部は、前記ロス情報が存在する場合には、当該ロス情報の手前まで受信したデータを前記リングバッファから読み出し、所定時間待機しても当該ロス情報に対応するデータが受信されない場合、当該ロス情報の後に受信したデータを前記リングバッファから読み出す、
ことを特徴とする。
【0010】
また、本発明の一形態に係る転送方法は、
TCP(Transmission Control Protocol)に従ってデータを配信するソースから、配信されたデータを処理する複数のシンクにデータを転送する転送装置における転送方法であって、
前記ソースからパケットを受信するステップと、
TCPシーケンス番号の最大値の約数Lの格納領域を持つリングバッファにおいて、前記受信したパケットのTCPシーケンス番号に基づき、前記受信したパケット内のデータを、前記受信したパケットのTCPシーケンス番号をLでモジュロ演算して得られる値によって表される格納領域に格納するステップと、
前記受信したパケットをTCPに従った配信を要求する第1のシンクに転送するステップと、
前記リングバッファから前記データを読み出し、当該読み出したデータをUDP(User Datagram Protocol)に従った配信を要求する第2のシンクに転送するステップと、
前記受信したパケットのTCPシーケンス番号に基づき、受信していないデータが存在すると判断した場合、受信していないデータが存在することを示すロス情報を保持するステップと、
前記ロス情報が存在する場合には、当該ロス情報の手前まで受信したデータを前記リングバッファから読み出し、所定時間待機しても当該ロス情報に対応するデータが受信されない場合、当該ロス情報の後に受信したデータを前記リングバッファから読み出すステップと、
を有することを特徴とする。
【0011】
また、本発明の一形態に係るプログラムは、
上記の転送装置の各部としてコンピュータを機能させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、1つのソースから異なる通信要件を持つシンクに対してトランスポートでの転送を行うことが可能になる。
【発明を実施するための形態】
【0014】
以下、図面を参照して本発明の実施例について説明する。
【0015】
<データ配信システムの全体構成>
図1は、本発明の実施例に係るデータ配信システムの全体構成を示す図である。データ配信システムは、転送装置A10と、転送装置B20と、ソース30と、1つ以上のシンク40と、1つ以上のシンク50とを有する。それぞれの装置は、パケットロスが生じる可能性がある通信路を用いて接続される。
【0016】
ソース30は、TCPに従って映像のようなデータを配信する装置(配信元ノード)である。ソース30の例として、カメラ、映像配信サーバ等がある。なお、ソース30は、カメラと映像配信サーバの組み合わせのように、複数の装置によって構成されることも可能である。
【0017】
シンク40は、高品質性の通信要件を持ち、ソース30からTCPに従ったデータの配信を要求し、受信したデータを処理(表示、解析、保存など)する装置(配信先ノード)である。シンク50は、リアルタイム性の通信要件を持ち、ソース30からUDPに従ったデータの配信を要求し、受信したデータを処理(表示、解析、保存など)する装置(配信先ノード)である。シンク40及び50の例として、ビュワー等がある。シンク40及び50も、それぞれビュワーと映像再生サーバの組み合わせのように、複数の装置によって構成されることも可能である。
【0018】
転送装置A10は、ソース30と、シンク40に対してパケットを転送する転送装置B20との間に介在し、ソース30から受信したデータをシンク50に対しても転送する装置である。転送装置A10は、異なる通信要件を持つシンク40及び50に対してデータを転送するために、TCPに従って配信されるデータを、コネクションを終端することなくミラーリングする。シンク40に対しては、そのまま受信したパケットを転送し、シンク50に対してはUDPに従った通信に載せ替えて転送する。具体的には、転送装置A10は、シンク50に対してデータを転送するために、受信したパケットのTCPシーケンス番号に基づき、受信したパケット内のデータをリングバッファに一時的に格納する。TCPシーケンス番号に基づき、受信していないデータが存在すると判断した場合、受信していないデータが存在することを示すロス情報を保持する。UDPに従った通信への載せ替えは、リングバッファからデータを読み出して転送することによって実現する。ただし、ロス情報が存在する場合には、ロス情報の手前まで受信したデータをリングバッファから読み出し、所定時間待機してもロス情報に対応するデータが受信されない場合、ロス情報のデータの受取は破棄し、ロス情報の後に受信したデータの読み出しを再開する。なお、本発明の実施例において、転送装置A10においてリングバッファを用いる例について説明するが、UDPに従った通信への載せ替えのために用いるバッファは、リングバッファに限定されず、他の種類のバッファでもよい。
【0019】
転送装置B20は、ソース30とTCPで接続し、ソース30から受信したパケットを宛先の装置に転送する装置である。転送装置B20は、TCPに従った配信を要求するシンク40に対してパケットを転送する必要がある場合、ソース30とのTCPコネクションを終端して、シンク40に対してTCPコネクションを設定してパケットを転送することができる。
【0020】
上記のデータ配信システムにおける通信手順について説明する。
【0021】
図2は、正常時の通信手順を示すシーケンス図である。
【0022】
ソース30は、転送装置B20に対してTCPに従ってデータを配信する(S101)。ソース30と転送装置B20との間に介在する転送装置A10は、コネクションを終端することなく、TCPシーケンス番号に基づき、受信したパケット内のデータをリングバッファに格納し、リングバッファからデータを読み出して、UDPに従った配信を要求するシンク50に転送する(S103)。なお、転送装置A10は、複数のシンク50に対してデータを転送することができる。
【0023】
転送装置B20がパケットを受信した場合、次に受け取る予定のデータを示す確認応答をソース30に送信すると共に(S105)、パケットをシンク40に転送する(S107)。なお、転送装置B20は、複数のシンク40に対してパケットを転送することができる。シンク40がパケットを受信した場合、次に受け取る予定のデータを示す確認応答を転送装置B20に送信する(S109)。
【0024】
ソース30が次のデータを送信する場合も同様に、データが配信される(S111〜S119)。
【0025】
図3は、パケットロス発生時の通信手順を示すシーケンス図である。
【0026】
ソース30がデータを配信する途中でパケットロスが発生したものとする(S121)。ソース30は、転送装置B20に対して次のデータを配信する(S123)。転送装置A10は、TCPシーケンス番号に基づき、データをリングバッファに格納しているため、受信していないデータが存在することを認識できる。転送装置A10は、ロス情報を保持し、受信していないデータの受取を所定時間待機する。所定時間待機しても受信していないデータが受け取れない場合、転送装置A10は、リングバッファからデータを読み出して、シンク50に転送する(S125)。
【0027】
転送装置B20がパケットを受信した場合、TCPシーケンス番号に基づき、受信していないデータが存在することを認識できる。転送装置B20は、受信できたデータを示す確認応答をソース30に送信すると共に(S127)、受信していないデータの再送要求をソース30に送信する(S129)。
【0028】
ソース30は、再送要求に応じてパケットを再送する(S131)。転送装置B20が再送要求に応じてパケットを受信した場合、次に受け取る予定のデータを示す確認応答をソース30に送信すると共に(S135)、パケットをシンク40に転送する(S137)。シンク40がパケットを受信した場合、次に受け取る予定のデータを示す確認応答を転送装置B20に送信する(S139)。なお、再送要求に応じて送信されたパケットが、転送装置A10が待機している間に到達した場合、転送装置A10は、パケット内のデータをシンク50に転送することができる(図示せず)。
【0029】
<転送装置の構成及び動作>
図4は、本発明の実施例に係る転送装置10の機能構成を示すブロック図である。転送装置10は、受信部101と、転送先判断部103と、格納部105と、TCP転送部107と、UDP転送部109とを有する。
【0030】
受信部101は、ソース30から送信されたパケットを受信する。また、受信部101は、シンク40及び50からソース30に対して送信されたデータ配信要求を受信する。
【0031】
転送先判断部103は、データの転送先のシンク40及び50を判断する。シンク40及び50がソース30に対してデータ配信要求を送信した場合、転送先判断部103は、ソース30のアドレス情報と、シンク40及び50のアドレス情報とをリスト等に保持する。転送先判断部103は、受信部101においてソース30からデータを受信した場合、保持したアドレス情報を参照して、転送先のシンク40及び50を判断することができる。
【0032】
格納部105は、受信したパケットのTCPシーケンス番号に基づき、パケット内のデータをリングバッファに格納する。格納部105におけるリングバッファ格納処理については以下に詳細に説明する。
【0033】
TCP転送部107は、受信したパケットをTCPに従った配信を要求するシンク40に転送する。
【0034】
UDP転送部109は、リングバッファからデータを読み出し、読み出したデータをUDPに従った配信を要求するシンク50に転送する。UDP転送部109におけるリングバッファ読み出し処理については以下に詳細に説明する。
【0035】
図5は、リングバッファ格納処理の概要を示す図であり、
図6は、リングバッファ格納処理を示すフローチャートである。
【0036】
格納部105は、TCPシーケンス番号の最大値の約数Lの格納領域を持つリングバッファを作成する。リングバッファには、書き込みを行うアドレスp_writeと、読み出しを行うアドレスp_readとが存在する。
【0037】
図5(1)に示すように、データを受信した場合、格納部105は、書き込みアドレスp_writeが、受信したパケットのTCPシーケンス番号TCPSEQをLでモジュロ演算して得られる値、すなわち、TCPSEQ mod Lに等しいかを判断する(S201)。等しい場合(S201:Yes)、
図5(2)に示すように、そのアドレスp_writeが示す格納領域に、受信したパケット内のデータを記憶する(S203)。このように、格納部105は、TCPSEQ mod Lによって表されるリングバッファの格納領域にデータを格納する。
【0038】
図5(3)に示すように、パケットロスが発生して受信すべきデータがリングバッファに格納されていない状態で次のデータを受信した場合、格納部105は、書き込みアドレスp_writeがTCPSEQ mod Lに等しくないことを認識する(S201:No)。この場合、格納部105は、ロス情報をリスト等に保持する(S205)。ロス情報は、受信していないパケットのTCPシーケンス番号としてもよく、受信していないデータがリングバッファに格納される領域の開始アドレスP_sol〜終了アドレスP_eolとしてもよい。以下の説明では、ロス情報をP_sol〜P_eolで表現する例について説明する。
図5(4)に示すように、格納部105は、次のデータをP_eolに続く格納領域に格納する。
【0039】
図7は、リングバッファ読み出し処理の概要を示す図であり、
図8は、リングバッファ読み出し処理を示すフローチャートである。
【0040】
図7(1)に示すように、UDP転送部109は、データの読み出しを受け付ける。UDP転送部109は、リングバッファの読み出しアドレスp_readが示す格納領域からデータを読み出す。
図7は、ロス情報が存在する例を示しているが、ロス情報が存在しない場合には(S301:Yes)、UDP転送部109は、書き込みアドレスp_writeまでデータを読み出す(S303)。
【0041】
図7(2)に示すように、ロス情報が存在する場合(S301:No)、UDP転送部109は、ロス情報の開始アドレスP_solまでデータを読み出す(S305)。また、UDP転送部109は、ロス情報に対応するデータを待機するため、所定時間後にタイムアウトするタイマーを開始する。
図7(3)に示すように、ロス情報に対応するデータが受信されたかの判断(S307)は、タイマーがタイムアウトするまで(S309)行われる。タイマーがタイムアウトする前に(S309:No)ロス情報に対応するデータが受信された場合(S307:No)、格納部105がTCPSEQ mod Lによって表されるリングバッファの格納領域にデータを格納し、ロス情報である開始アドレスP_sol及び終了アドレスP_eolを削除する。その他にロス情報が存在する場合(S301:No)、上記の処理が繰り返される。ロス情報が存在しなくなった場合(S301:Yes)、UDP転送部109は、書き込みアドレスp_writeまでデータを読み出す。
【0042】
図7(4)に示すように、タイマーがタイムアウトした場合(S309:Yes)、ロス情報に対応するデータの受取を破棄する(S311)。その後、リングバッファ内に読み出すべきデータが存在する場合(S313:No)、上記の処理が繰り返され、次のデータが読み出される。
【0043】
<本発明の実施例の効果>
本発明の実施例によれば、1つのソースから異なる通信要件を持つシンクに対してトランスポートでの転送を行うことが可能になる。その結果、高品質性の通信要件を持つシンクと、リアルタイム性の通信要件を持つシンクとの双方の要求に同時に対応することが可能になる。また、シンクが増加してもソースの処理負荷及びソースと転送装置との間のネットワーク負荷は増加せず、効率的なデータ伝送が可能になる。
【0044】
<ハードウェア構成例>
図9に、本発明の実施例に係る転送装置10のハードウェア構成例を示す。転送装置10は、CPU(Central Processing Unit)151等のプロセッサ、RAM(Random Access Memory)やROM(Read Only Memory)等のメモリ装置152、ハードディスク等の記憶装置153等から構成されたコンピュータでもよい。例えば、転送装置10の機能及び処理は、記憶装置153又はメモリ装置152に格納されているデータやプログラムをCPU151が実行することによって実現される。また、転送装置10へのデータの入力は、入出力インタフェース装置154から行われ、転送装置10からのデータの出力は、入出力インタフェース装置154から行われてもよい。
【0045】
<補足>
説明の便宜上、本発明の実施例に係る転送装置は機能的なブロック図を用いて説明しているが、本発明の実施例に係る転送装置は、ハードウェア、ソフトウェア又はそれらの組み合わせで実現されてもよい。例えば、本発明の実施例は、コンピュータに対して本発明の実施例に係る転送装置の機能を実現させるプログラム、コンピュータに対して本発明の実施例に係る方法の各手順を実行させるプログラム等により、実現されてもよい。また、各機能部が必要に応じて組み合わせて使用されてもよい。また、本発明の実施例に係る方法は、実施例に示す順序と異なる順序で実施されてもよい。
【0046】
以上、1つのソースから異なる通信要件を持つシンクに対してトランスポートでの転送を行うための手法について説明したが、本発明は、上記の実施例に限定されることなく、請求の範囲内において、種々の変更・応用が可能である。
【0047】
本国際出願は2017年2月6日に出願した日本国特許出願2017−019890号に基づく優先権を主張するものであり、2017−019890号の全内容を本国際出願に援用する。