以下、本発明の実施の形態を図面に基づいて説明する。
(第1の実施形態)図1に本発明の第1の実施形態に係るデータ通信装置の概略構成を示す。なお、以下の説明では、各プロトコルが扱うデータの単位を、データリンク層についてはフレーム、ネットワーク層についてはパケット、トランスポート層のTCPについてはセグメント、トランスポート層のUDPについてはデータグラムと呼ぶ。
データ通信装置10は、通信部(例えば、メディアアクセス制御等)11、12、ハードウェアプロトコル処理部13、ソフトウェアプロトコル処理部14、セッション情報記憶部15、及びフレーム情報記憶部16を備える。
通信部11、12はそれぞれ異なるネットワークに接続され、ネットワークからのフレーム受信及びネットワークへのフレーム送信を行う。ここで、ネットワークとは、上位層のプロトコルにTCP/IPを使用できるネットワークであり、例えば、有線の規格であるギガビットEthernet(登録商標)、10ギガビットEthernet、40ギガビットEthernet、100ギガビットEthernetなどのEthernet規格やIEEE802.11b/g/a/nで規定される無線ネットワークや、有線と無線が混在するネットワーク等である。
ハードウェアプロトコル処理部13は、ネットワークプロトコル処理(例えば、TCP/IPのプロトコル処理)を行う専用ハードウェアであり、アプリケーション20との間でデータの転送を行う。ハードウェアプロトコル処理部13は、TOE(TCP/IP Offload Engine)によって実現され、Ethernetの処理機能と、ルーティング機能を除くIPv4(Internet Protocol Version 4)の処理機能と、TCPのデータ処理機能を有する。
ここで、Ethernetの処理とは、Ethernetの受信処理および送信処理をいう。Ethernetの受信処理は、受信したEthernetフレームのFCS(Frame Check Sequence)の検算処理と、Ethernetヘッダの宛先MACアドレスの解析処理、送信元MACアドレスの解析処理、上位層プロトコルを示すタイプの解析処理を含む。また、Ethernetの送信処理は、Ethernetヘッダの宛先MACアドレスの設定、送信元MACアドレスの設定、上位層プロトコルを示すタイプの設定、FCSの計算を含む。
また、IPv4の処理は、IPv4の受信処理とIPv4の送信処理をいう。IPv4の受信処理は、IPv4ヘッダのチェックサムの検算処理と、IPv4ヘッダのバージョン、ヘッダ長、サービスタイプ、パケット長、識別子、コントロールフラグ、フラグメントオフセット、生存時間、プロトコル番号、送信元IPアドレス、及び宛先IPアドレスの解析と、フラグメントしたパケットのリアセンブル処理とを含む。また、IPv4の送信処理は、IPv4ヘッダのバージョン、ヘッダ長、サービスタイプ、パケット長、識別子、コントロールフラグ、フラグメントオフセット、生存時間、プロトコル番号、送信元IPアドレス、宛先IPアドレスの設定と、IPv4ヘッダのチェックサム計算と、フラグメンテーションの処理とを含む。
TCPのデータ処理は、TCPの受信処理とTCPの送信処理をいう。TCPの受信処理では、TCPヘッダの送信元ポート番号、宛先ポート番号、シーケンス番号、確認応答番号、データオフセット、コントロールフラグ、ウィンドウサイズ、及び緊急ポインタの解析と、TCPのチェックサムの検算とが行われ、既にセッションが確立している場合は、セグメントを結合してアプリケーションにデータを転送し、必要に応じて確認応答セグメントを作成して送信する。
TCPのデータ送信処理では、既にセッションが確立している場合に、必要に応じてセグメントを分割し、TCPヘッダの送信元ポート番号、宛先ポート番号、シーケンス番号、確認応答番号、データオフセット、コントロールフラグ、ウィンドウサイズ、及び緊急ポインタの設定、TCPのチェックサム計算、セグメント分割/結合処理、確認応答セグメントの送信処理が行われる。
ソフトウェアプロトコル処理部14は、ネットワークプロトコル処理をCPU(Central Processing Unit)上で動作するソフトウェアによって実現され、ARP(Address Resolution Protocol)処理機能、ルーティング処理機能、及びTCPのセッション管理処理機能を有する。
ここで、ARPの処理機能とは、ARPの受信処理とARPの送信処理をいう。
ARPの受信処理では、ARPヘッダのハードウェアアドレスフォーマット、プロトコルアドレスフォーマット、ハードウェアアドレス長、プロトコルアドレス長、オペレーション、送信元MACアドレス、送信元IPアドレス、ターゲットMACアドレス、ターゲットIPアドレスのフィールドが解析され、必要に応じて応答パケットが作成される。
ARPの送信処理では、ARPヘッダのハードウェアアドレスフォーマット、プロトコルアドレスフォーマット、ハードウェアアドレス長、プロトコルアドレス長、オペレーション、送信元MACアドレス、送信元IPアドレス、ターゲットMACアドレス、及びターゲットIPアドレスのフィールドが設定される。
ルーティング処理機能は、宛先IPアドレスと通信部11、12のインタフェースとの対応関係を保持するルーティングテーブルを管理し、宛先IPアドレスに向けてパケットを送信する場合に、このテーブルを参照して、出力を行う通信部11、12のインタフェースを決定する機能である。
TCPのセッション管理処理は、TCPのセッション確立やセッション切断を行うRSTフラグ、SYNフラグ、FINフラグ等を含んだセグメントや、これらセグメントに対する応答セグメントのTCPヘッダ解析処理や、TCPヘッダ設定処理を含む。
セッション情報記憶部15は、TCPセッション情報を記憶する。そのため、ハードウェアプロトコル処理部13とソフトウェアプロトコル処理部14との間で、TCPセッション情報を共有することができる。ここで、TCPセッション情報とは、自装置側のIPアドレス及びポート番号と、相手装置側のIPアドレス及びポート番号とによって識別されるコネクション情報である。TCPセッション情報は、ハードウェアプロトコル処理部13及びソフトウェアプロトコル処理部14が協調してTCP処理を行う上で必要な、シーケンス番号、ウィンドウサイズ、MACアドレス、セッションがどのネットワークに属するか示す識別情報などを含む。
フレーム情報記憶部16は、受信フレームや送信フレームに関する情報を記憶する。ハードウェアプロトコル処理部13及びソフトウェアプロトコル処理部14の一方がフレーム情報記憶部16に情報を書き込み、他方が当該情報を読み出すことで、ハードウェアプロトコル処理部13とソフトウェアプロトコル処理部14との間で、受信フレームや送信フレームに関する情報を伝達することができる。
セッション情報記憶部15及びフレーム情報記憶部16は、バスを介してハードウェアプロトコル処理部(TOE)13及びソフトウェアプロトコル処理部(CPU)14に接続される共有メモリにより実現できる。
次に、データ通信装置10による受信処理を図2に示すフローチャートを用いて説明する。
(ステップS101)通信部11、12が、ネットワークからフレームを受信する。
(ステップS102)ハードウェアプロトコル処理部13が、受信フレームのEthernetの受信処理、IPv4の受信処理、及びTCPの受信データ処理を行う。
(ステップS103)受信フレームがTCPセグメントであり、かつ、既にセッション確立中のTCPデータセグメントであるか否か判定される。受信フレームがTCPセグメントであり、かつ、既にセッション確立中のTCPデータセグメントである場合はステップS104に進み、それ以外の場合はステップS105に進む。
(ステップS104)ハードウェアプロトコル処理部13が、アプリケーション20にデータを転送する。
(ステップS105)ハードウェアプロトコル処理部13が、受信フレームが通信部11、12のどちらのインタフェースにより受信されたかを示す識別子を、ソフトウェアプロトコル処理部14に通知する。具体的には、ハードウェアプロトコル処理部13が、前記識別子をフレーム情報記憶部16に書き込み、ソフトウェアプロトコル処理部14が、当該識別子をフレーム情報記憶部16から読み出す。
(ステップS106)ソフトウェアプロトコル処理部14が受信フレームのTCP/IP処理を行う。
(ステップS107)受信フレームが自ら送信したSYNフラグを含むTCPセグメントへの応答セグメントであり、処理の結果、セッションが確立した場合はステップS108に進む。受信フレームが上記以外のTCPセグメントや、ARPパケット等であり、セッションが確立しなかった場合は、処理を完了する。
(ステップS108)ソフトウェアプロトコル処理部14が、フレーム情報記憶部16からそのセッションがどのネットワークに属するか、すなわち、どの通信部のインタフェースに属するかを読み出し、セッション情報記憶部15に書き込む。
続いて、データ通信装置10による送信処理を図3に示すフローチャートを用いて説明する。
(ステップS201)ハードウェアプロトコル処理部13が、セッション情報記憶部15に記憶されている情報を参照して、送信データがセッション確立中のTCPデータであるか否か判断する。セッション確立中のTCPデータの場合はステップS202に進む。送信データが、セッション確立中のTCPデータでなく、ARPパケットや、TCPのセッション確立のためのSYNフラグなどの含まれるTCPセグメントであった場合は、ステップS203に進む。
(ステップS202)ハードウェアプロトコル処理部13が、セッション情報記憶部15から、セッションの属する通信部のインタフェースを示す識別子を取得する。
(ステップS203)ソフトウェアプロトコル処理部14がハードウェアプロトコル処理部13で処理されなかったプロトコルのTCP/IP処理を行う。
(ステップS204)ソフトウェアプロトコル処理部14は、ルーティング処理機能を有しており、送信先のIPアドレスがどのネットワークセグメントに送信するべきものか、すなわち、どの通信部のインタフェースから送信するべきかを調べる。そして、ソフトウェアプロトコル処理部14は、データ送信を行う通信部のインタフェースを示す識別子を、ハードウェアプロトコル処理部13に通知する。具体的には、ソフトウェアプロトコル処理部14が、前記識別子をフレーム情報記憶部16に書き込み、ハードウェアプロトコル処理部13が、当該識別子をフレーム情報記憶部16から読み出す。
(ステップS205)ハードウェアプロトコル処理部13が、TCPの送信データ処理、IPv4の送信処理、及びEthernetの送信処理を行う。ソフトウェアプロトコル処理部14でプロトコル処理が行われている場合、ハードウェアプロトコル処理部13は、ソフトウェアプロトコル処理部13により処理されなかった送信フレームのTCP/IP処理を行う。
(ステップS206)通信部11又は12が、フレームを相手装置へ送信する。
図4に本実施形態に係るデータ通信装置を用いたデータ通信システムの概略構成を示す。このデータ通信システムは、ビデオカメラ21、エンコーダ22、フラッシュメモリ23、データ通信装置110、210、スイッチングハブ31及び32を備える。本システムでは、ビデオカメラ21で撮影した映像をエンコーダ22がエンコードし、エンコード後の映像データをデータ通信装置110が、複数(ここでは2つ)の通信路を介してデータ通信装置210に送信し、データ通信装置210が受信した映像データをフラッシュメモリ23に記録する。各通信路にはスイッチングハブ31、32が設けられている。
データ通信装置110、210は、図1に示すデータ通信装置10と同様のものである。データ通信装置110は、通信部11に対応するMAC111、通信部12に対応するMAC112、ハードウェアプロトコル処理部13に対応するTOE113、及びソフトウェアプロトコル処理部14に対応するCPU114を備える。また、データ通信装置110は、図1に示すデータ通信装置10におけるセッション情報記憶部15及びフレーム情報記憶部16に対応する構成要素を備えるが、図4では示していない。
また、データ通信装置210は、通信部11に対応するMAC211、通信部12に対応するMAC212、ハードウェアプロトコル処理部13に対応するTOE213、及びソフトウェアプロトコル処理部14に対応するCPU214を備える。また、データ通信装置210は、図1に示すデータ通信装置10におけるセッション情報記憶部15及びフレーム情報記憶部16に対応する構成要素を備えるが、図4では示していない。
エンコーダ22は、TOE113及びCPU114とバスを介して接続される。TOE113は、異なるハードウェアで構成されるMAC111、112を介して、スイッチングハブ31、32とEthernetで接続されている。
エンコーダ22は、SMPTE-259Mで定められるSD-SDI(Standard Definition Serial Digital Interface)規格やSMPTE-292Mで定められるHD-SDI(High Definition Serial Digital Interface)規格の入力端子を備えており、ビデオカメラ21から出力されたSD-SDI信号またはHD-SDI信号をMPEG-2やH.264といった動画像符号化規格で符号化して、TOE113に出力する。
フラッシュメモリ23は、TOE213及びCPU214とバスを介して接続される。TOE213は、異なるハードウェアで構成されるMAC211、212を介して、スイッチングハブ31、32とEthernetで接続されている。
TOE113は、2つのMAC111、112から受信したフレームをシリアライズして処理するハードウェア(シリアライザ)が搭載されている。同様に、TOE213には、2つのMAC211、212から受信したフレームをシリアライズして処理するハードウェアが搭載されている。
また、図4に示すように、スイッチングハブ31によって構成されるネットワークに割り当てられたアドレスを192.168.1.0/24、スイッチングハブ32によって構成されるネットワークに割り当てられたアドレスを192.168.2.0/24、TOE113のMAC111側に割り当てられたIPアドレスを192.168.1.1、MAC112側に割り当てられたIPアドレスを192.168.2.1、TOE213のMAC211側に割り当てられたIPアドレスを192.168.1.2、MAC212側に割り当てられたIPアドレスを192.168.2.2とする。
本システムでは、TCPを用いてエンコーダ22から出力された映像ストリームをフラッシュメモリ23に送信する。まず、TCPによる転送をおこなうために、エンコーダ22側からTCPのセッション確立を行う。セッション確立を行うためには、事前に転送相手(TOE213)のMAC(Media Access Control)アドレスを取得する必要がある。
CPU114上で動作するソフトウェアは、転送相手のMACアドレスを取得するため、まず、相手のIPアドレスである192.168.1.2に対するMACアドレスを解決するためのARP要求パケットの送信処理を行う。フレームを出力できるMACは2つあるが、ここで解決しようとしているIPアドレスは、MAC111の属するネットワークに存在することがわかるので、CPU114は、ディスクリプタを用いて、TOE113に対し、Ethernetの送信処理を行い、MAC111を介してフレームを送信するよう指示する。なお、わからない場合はMAC111およびMAC112の両方からフレームを送信してもよい。
ディスクリプタは、TOE113(ハードウェアプロトコル処理部13)とCPU114(ソフトウェアプロトコル処理部14)とで情報を伝達するためのインタフェースである。1つのディスクリプタのエントリは、固定長のDESCRIPTOR_TYPE、NETWORK_ID、BUFFER_ADDRESS、及びPROCESS_DONEのフィールドにより構成され、このエントリが共有メモリ上に複数配列で配置されリングバッファを形成している。ソフトウェアプロトコル処理部14及びハードウェアプロトコル処理部13の一方が、処理させたいディスクリプタのエントリ番号を他方の処理部に通知することで、情報の伝達を行うことができる。このディスクリプタにより、高速に動作するハードウェアプロトコル処理部13からソフトウェアプロトコル処理部14への指示をバッファすることもできる。
DESCRIPTOR_TYPEは、CPUからTOEに対するフレーム送信指示に使われるか、又はTOEからCPUに対するフレーム受信指示に使われるかを示す。DESCRIPTOR_TYPEが、CPUからTOEに対するフレーム送信指示の場合は、CPUが、NETWORK_IDにフレームを送信するMACの識別子を格納し、BUFFER_ADDRESSに送信フレームが記憶されている共有メモリのアドレスを格納し、PROCESS_DONEにはCPUで処理が完了しているプロトコルの情報を格納する。
一方、DESCRIPTOR_TYPEが、TOEからCPUに対するフレーム受信指示の場合は、TOEが、NETWORK_IDにフレームを受信したネットワークの識別子を格納し、BUFFER_ADDRESSに受信フレームが記憶されている共有メモリのアドレスを格納し、PROCESS_DONEにTOEで処理が完了しているプロトコルの情報を格納する。
CPU113がARP要求パケットを送信する場合は、CPU114により、ディスクリプタのDESCRIPTOR_TYPEに送信指示を示す値が格納され、NETWORK_IDにMAC112の属するネットワークを示す情報が格納され、BUFFER_ADDRESSに送信フレームが記憶されている共有メモリのアドレスが格納され、PROCESS_DONEにARPの処理が完了していることを示す情報が格納されている。
このようにMAC111から送信されたARP要求パケットは、スイッチングハブ31を経由して、MAC211に受信される。TOE213は、MAC211が受信したフレームに対してEthernetの受信処理を行い、上位層プロトコルであるARPを処理するため、ディスクリプタを用いて、CPU214に対して受信フレームに関する情報を伝達する。この場合、DESCRIPTOR_TYPEには受信指示を示す値が格納され、NETWORK_IDにはMAC211の属するネットワークを示す値が格納され、BUFFER_ADDRESSには受信フレームが記憶されている共有メモリのアドレスが格納され、PROCESS_DONEにはEthernetの処理が完了していることを示す情報が格納される。
CPU214上で動作するソフトウェアは、ディスクリプタから得られた受信フレームのARPの受信処理を行い、このARP要求に応えるため、ARPの送信処理によりARP応答パケットを生成する。そして、CPU214は、ディスクリプタを用いて、TOE213に対し、Ethernet処理した後に、フレームを受信したネットワークを介してARP応答パケットを送信するよう指示する。
この時、DESCRIPTOR_TYPEには送信指示を示す値が格納され、NETWORK_IDにはARP要求パケットを受信したネットワークインタフェースであるMAC211を示す識別子が格納され、BUFFER_ADDRESSにはCPU214で生成されたARP応答パケットが記憶されている共有メモリのアドレスが格納され、PROCESS_DONEにはARPの処理が完了したことを示す情報が格納される。これにより、TOE213でEthernetの送信処理が行われ、MAC211を介してARP応答パケットが送信される。
TOE113は、スイッチングハブ31及びMAC111を介してフレーム(ARP応答パケット)を受信すると、Ethernetの受信処理を行い、ディスクリプタを用いて、CPU114に受信処理を行うように指示する。CPU114は、このARP応答パケットを受信処理し、フラッシュメモリ23に接続されているTOE213のMAC211側に付与されているIPアドレスに対応するMACアドレスを取得する。
このように、フレーム毎に、そのフレームを受信したネットワーク、又はフレームを送信するネットワークを、CPU114、214とTOE113、213との間で通知することで、複数のMACと接続された1つのTOEを用いて通信を行うことが可能となる。
上記のようにして得られたMACアドレスを用いて、192.168.1.1と192.168.1.2との間でセッションを確立するため、CPU114上で動作するソフトウェアから、SYNフラグを含むTCPセッション確立要求セグメントが、TOE113及びMAC111を介して送信される。スイッチングハブ31を介してMAC211に到達したTCPセッション確立セグメントは、MAC211によりフレームの受信処理が行われ、TOE213によりEthernetの受信処理、IPv4の受信処理、TCPのデータ受信処理が行われる。
そして、TOE213が、ディスクリプタを用いて、受信フレームの情報をCPU214に通知する。CPU214は、TCPのSYNフラグを含むセグメントのTCPヘッダ解析処理を行う。CPU214は、そのSYNフラグを含むセグメントが受け入れ可能な場合、SYNフラグとACKフラグを含むセグメントを生成し、ディスクリプタを用いてTOE213に送信フレームの情報を伝達する。TOE213は、TCPデータ処理、IPv4処理、Ethernet処理を行い、MAC211を介してフレームを送信する。
SYNフラグ及びACKフラグを含むセグメントは、スイッチングハブ31を介してMAC111で受信され、フレームの受信処理が行われる。受信フレームは、TOE113によりEthernetの受信処理、IPv4の受信処理、TCPの受信データ処理が行われる。そして、TOE113が、ディスクリプタを用いて、受信フレームの情報をCPU114に通知する。CPU114は、SYNフラグ及びACKフラグを含んだセグメントのTCPヘッダ解析受信処理を行う。このセグメントが受け入れ可能でありセッションが確立されれば、CPU114は、データ通信装置110内のセッション情報記憶部15(図4には示さず)に、ディスクリプタに設定されているNETWORK_IDを、セッションの属するネットワークとして記録する。
さらに、CPU114は、ACKフラグを含むTCPセグメントを生成し、TOE113及びMAC111を介して、フレームを送出する。このフレームがスイッチングハブ31及びMAC211を介してTOE213で受信処理され、ディスクリプタでCPU214にフレームの情報が伝達される。CPU214においてセッションの確立処理が行われると、CPU214は、データ通信装置210内のセッション情報記憶部15(図4には示さず)に、ディスクリプタに設定されているNETWORK_IDを、セッションの属するネットワークとして記録する。
同様に、CPU114上で動作するソフトウェアにより、ARPを用いて、192.168.2.2に対応するMACアドレスを解決し、192.168.2.1と192.168.2.2との間でTCPのセッション確立を行う。
なお、同様の方法により、エンコーダ22側からではなく、フラッシュメモリ23側からTCPのセッション確立を行ってもよい。
上述のように、エンコーダ22とフラッシュメモリ23との間で2つのセッションを確立したら、エンコーダ22は、ビデオカメラ21からの入力データをエンコードする。TOE113は、エンコーダ22の出力データを、2つのセッションを用いてTCPにより送信する。2つのセッションでは同一のデータが送信される。
TOE113は、読み出したデータをMTU(Maximum Transfer Unit)から求めたMSS(Maximum Segment Size)以下の値にセグメント分割してTCPの送信処理、IPv4の送信処理、Ethernetの送信処理を行う。なお、MSSは、TCPのオプションによりスリーウェイハンドシェイク時に伝達し合ったMSSの値を用いてもよいし、Path MTU Discoveryにより求めてもよい。
送信処理を行う場合、TCPセグメントをどのネットワークから送信するかを決定する必要がある。TCPセグメントは、セッション情報記憶部15に記憶されているセッションの属するMACから出力する。
このように、TOE113が、フレーム毎ではなく、それよりも大きなデータ送信の単位で、エンコーダ22からデータを読み出し、セッション情報からセッションの属するMACの識別子を用いて送信を行うことにより、CPU114からフレーム毎に出力するネットワークを指示する必要なく、送信速度を高速化することができる。また、CPU114の処理負荷を低減できる。図5に、TOE113の構成の一例を示す。TOE113は、送信要求受付部121、送信キュー部122、123、送信指示部124、フレーム生成部125、及び送信先選択部126を有する。
送信要求受付部121は、CPU114やフラッシュメモリ23からデータ送信要求を受け付ける。送信キュー部122、123は、通信部111、112のインタフェースに対応して複数設けられ、それぞれ対応する通信部から送信するデータ送信要求をキューイングする。
送信指示部124は、送信キュー部122、123にキューイングされた送信要求を取り出し、その要求に基づき送信指示を出力する。フレーム生成部125は、送信指示に基づいて送信フレームを生成する。送信先選択部126は、生成された送信フレームを、送出先の通信部に対応して設けられたフレームバッファ部131、132に格納する。フレームバッファ部131、132は、通信部111、112の前段に設けられ、送信先選択部126から出力されたフレームをバッファリングする。
送信指示部124は、フレームバッファ部131、132のバッファ可能な残り容量が所定のサイズを上回っているか確認し、上回っているものと上回ってないものとがある場合、上回っているものに対応する送信キュー部122、123から優先的に送信要求を取り出す。
ここで、所定のサイズとは、現在、送信指示部124が処理している送信要求によって生成されるフレームを遅延無く格納するために十分な容量である。これは、送信指示部124とフレーム生成部125との間、又はフレーム生成部125と送信先選択部126との間にバッファがある場合、そのバッファに保持されているフレームを先に格納する必要があるため、最低限、これらの合計のサイズがフレームバッファ部の残り容量に必要とされる。
特に、TCPのようにデータ全体のチェックサムを計算してヘッダに格納する場合、データより計算結果を先に送信する必要があるため、フレーム全体を一旦保持するバッファが途中で必要となる。このような場合は、現在、送信指示部124が処理している送信要求によって生成されるフレームのサイズに加え、チェックサム計算用のバッファに格納されているフレームのサイズがさらに必要となる。
このような送信要求の優先的な選択を行わないと、残り容量の少ないフレームバッファ部131、132にフレームを渡した場合、フレームバッファ部131、132の容量が空くまで、少なくとも送信先選択部126が待ち続けることになり、その間は、他方のMAC111、112からの送信ができなくなる。これは、一方に障害が発生したときに、他方からも送信が出来なくなることを意味し、複数の通信路で通信を行う利点を失う。TOE113を、図5に示すような構成にすることで、このような問題を解決することができる。
上述のようにしてMAC111、112から送信されたTCPデータセグメントは、それぞれスイッチングハブ32、31を経由して、MAC211、212で受信され、TOE213により受信処理され、セッション毎にフラッシュメモリ23の別の記憶領域に書き込まれる。データの転送がすべて完了すると、データ通信装置110及び210がFINフラグを含むセグメントを送信し、TCPのセッション終了処理を行う。セッション終了が受け入れられるとセッション情報記憶部15内のセッション情報は破棄される。
セッション終了処理後、通信路に障害が発生せず、どちらのセッションのストリームもすべて損失なくフラッシュメモリ23に書き込まれた場合は、いずれか一方のストリームが破棄される。一方、通信路を構成する機器が故障した場合には、正常に受信されたストリームを残し、故障が発生した側のストリームが破棄される。
なお、通信路に障害が発生した場合、TOE113から送信ができず、エンコーダ22内のバッファがオーバーフローするため、フラッシュメモリ23に書き込まれたストリームのうち、ファイルサイズの大きい方を正常に受信できたストリームと判断してもよい。
このように、本実施形態に係るデータ通信装置によれば、1つのTOE(ハードウェアオフロードエンジン)で複数の通信路を介した通信を行うことができるため、通信路での機器の故障が発生した場合にも、高速かつ損失なく映像ストリームを伝送することが可能となる。また、通信路の数だけTOEを設ける必要がないため、コストを低減できる。従って、データ通信の高速化及び信頼性向上を低コストに実現できる。
上記第1の実施形態では、データ通信装置10の通信部が複数のハードウェアによって構成される、すなわち、データ通信装置10が2つの通信部11、12を備える構成について説明した。しかし、2つのネットワークの通信速度の合計が1つの通信部で処理できる範囲であれば、図6に示すように、データ通信装置10に通信部を1つだけ設け、MII(Media Independent Interface)、GMII(Gigabit Media Independent Interface)、XGMII(10Gigabit Media Independent Interface)等の複数のインタフェースに分岐させるハードウェアを搭載するようにしてもよい。なお、この場合は、受信したフレームをシリアライズする処理はハードウェアプロトコル処理部13ではなく、通信部で行ってもよい。
上記第1の実施形態において、TOE213が、フラッシュメモリ23から読み出したデータを送信することもできる。
(第2の実施形態)図7に、本発明の第2の実施形態に係るデータ通信システムの概略構成を示す。本システムは、ビデオカメラ21で撮影された映像データを複数の通信路を介して送信し、データ通信装置210が受信した映像データをフラッシュメモリ23に記憶するシステムである。データ通信装置210は、図1に示す上記第1の実施形態に係るデータ通信装置10、図4に示すデータ通信装置210と同様の構成である。図7において、図4に示す第1の実施形態と同一部分には同一符号を付して説明を省略する。
エンコーダ41、42は、ビデオカメラ21から入力されたSD-SDI信号やHD-SDI信号をMPEG-2やH.264といった動画像符号化規格に符号化する。エンコーダ41は、CPU43及びTOE44に接続され、MAC45を介してスイッチングハブ31とEthernetで接続されている。エンコーダ42も同様に、CPU46及びTOE47に接続され、MAC48を介してスイッチングハブ31とEthernetで接続されている。TOE44、47は、上記第1の実施形態と異なり、1つの通信路を介した通信を行うものである。
スイッチングハブ31によって構成されるネットワークのアドレスは192.168.1.0/24であり、スイッチングハブ32によって構成されるネットワークのアドレスは192.168.2.0/24であり、TOE44には192.168.1.1、TOE47には192.168.2.1、TOE213のMAC211側には192.168.1.2、TOE213のMAC212側には192.168.2.2とIPアドレスが割り当てられている。
ビデオカメラ21で撮影され、エンコーダ41、42にて符号化された2つの映像ストリームは、それぞれ異なるスイッチングハブ31、32を介して伝送され、フラッシュメモリ23に書き込まれる。ビデオカメラ21からの入力信号は同一のものであるが、エンコーダ41、42による符号化結果は、同一のエンコーダを用いても異なることがあるため、それぞれのストリームを異なるTCPコネクションで送信する。
まず、TCPによる転送をおこなうために、エンコーダ41側とエンコーダ42側から192.168.1.2と192.168.2.2に対するARPによるMACアドレスの解決と、TCPのセッション確立を行う。これは上記第1の実施形態と同様に、ディスクリプタとセッション情報を用いた方法で行われる。
エンコーダ41とフラッシュメモリ23との間でのTCPセッション及びエンコーダ42とフラッシュメモリ23との間でのTCPセッションが確立した後、エンコーダ41及びエンコーダ42からのデータ出力を開始し、TCPによるデータ送信を行う。
エンコーダ41側のTOE44でTCPの送信処理、IPv4の送信処理、Ethernetの送信処理が行われ、MAC45から送信されたTCPデータセグメントは、スイッチングハブ31を介してMAC211で受信される。MAC211でフレームの受信処理が行われ、TOE213でEthernetの受信処理、IPv4の受信処理、TCPの受信処理が行われ、フラッシュメモリ23にデータが書き込まれる。
エンコーダ42側のTOE47でTCPの送信処理、IPv4の送信処理、Ethernetの送信処理が行われ、MAC48から送信されたTCPデータセグメントは、スイッチングハブ32を介して、MAC212で受信される。MAC212でフレームの受信処理が行われ、TOE213でEthernetの受信処理、IPv4の受信処理、TCPの受信処理が行われ、フラッシュメモリ23にデータが書き込まれる。
データの転送がすべて完了すると、エンコーダ41、42側及びフラッシュメモリ23側からFINフラグを含むセグメントが送信され、TCPのセッション終了処理が行われる。セッション終了が受け入れられると、セッション情報記憶部15内のセッション情報は破棄される。
セッション終了処理後、通信路に障害が発生せず、どちらのセッションのストリームもすべて損失なくフラッシュメモリ23に書き込まれた場合には、いずれか一方のストリームが破棄される。一方、通信路を構成する機器が故障した場合には、正常に受信されたストリームを残し、故障が発生した側のストリームが破棄される。
また、動画像のタイムスタンプから、異なるセッションから損失した部分を補完し合い、ストリームを復元してもよい。また、同一のストリームが異なるセッションで送られる場合には、ストリームの先頭からの位置を計算し、損失した部分を補完してもよい。
このように、本実施形態では、2つのエンコーダ41、42を用いて冗長化を行い、エンコーダや通信路での機器の故障が発生した場合にも、データを損失させる可能性をさらに低減し、高速に映像ストリームを伝送することが可能となる。従って、データ通信の信頼性をさらに向上させることができる。
(第3の実施形態)図8に、本発明の第3の実施形態に係るデータ通信システムの概略構成を示す。本システムは、フラッシュメモリ51に蓄積されているMPEG-2やH.264などの規格により動画像符号化された映像ストリームをデータ通信装置310が取り出して送信し、データ通信装置410が受信し、デコーダ52がデコードして出力するシステムである。
データ通信装置310、410は、図1に示すデータ通信装置10に対応する。データ通信装置310、410と、データ通信装置10を比較すると、MAC311、312、411、412は、通信部11、12と同様の構成になっている。また、データ通信装置310、410に設けられるフレーム情報記憶部(図示せず)は、図1に示すフレーム情報記憶部16と同様の構成である。一方、図1に示すデータ通信装置10のハードウェアプロトコル処理部13、ソフトウェアプロトコル処理部14、及びセッション情報記憶部15に対応するデータ通信装置310、410内の構成要素は、その構成や動作が異なる。
本実施形態において、ハードウェアプロトコル処理部13は、UOE(UDP/IP Offload Engine)313、413によって実現され、Ethernetの処理機能と、ルーティング機能を除くIPv4の処理機能と、UDPのデータ処理機能と、UDPのペイロードに格納されるユーザ定義プロトコルの処理機能とを有する。
Ethernetの処理機能とIPv4の処理機能は上記第1の実施形態と同様である。UDPのデータ処理機能は、UDPのデータ受信処理と、UDPのデータ送信処理をいう。UDPのデータ受信処理では、UDPヘッダの宛先ポート番号、送信元ポート番号、パケット長の解析、及びUDPのチェックサム計算が行われる。UDPのデータ送信処理では、UDPヘッダの宛先ポート番号、送信元ポート番号、パケット長の設定と、UDPのチェックサム計算とが行われる。
ユーザ定義プロトコルの処理は、ユーザ定義プロトコルの受信処理、及びユーザ定義プロトコルの送信処理をいう。ユーザ定義プロトコルの受信処理では、後述するフォーマットで定義されるユーザ定義プロトコルのシーケンス番号が解析され、シーケンス番号と対応付けてチェックサムの正しいデータがアプリケーションに転送される。ユーザ定義プロトコルの送信処理では、アプリケーションから指定されたデータが必要に応じて分割され、分割されたデータ毎にシーケンス番号が設定される。
ソフトウェアプロトコル処理部14(CPU314、414)は、CPU上で動作するソフトウェアによって実現され、ARP処理機能、ルーティング処理機能、及びUDPのセッション管理処理機能を有する。UDPのセッション管理処理機能とは、アプリケーションからポートをオープンした場合にセッション情報を生成し、アプリケーションからポートをクローズした場合にセッション情報を破棄する機能である。なお、ソフトウェアプロトコル処理部14は、ポートをオープンし、セッション情報を生成する際に、宛先のIPアドレスから、セッションがどのMACに属するかを示す識別子を設定する。
セッション情報記憶部15(図8には示さず)は、UDPセッション情報を記憶し、ハードウェアプロトコル処理部13とソフトウェアプロトコル処理部14との間でのUDPセッション情報の共有機能を提供する。ここで、UDPのセッション情報とは、自装置側のIPアドレスとポート番号、相手装置側のIPアドレスとポート番号、セッションがどのMACのインタフェースに属するかを示す識別子などを含む。
本実施形態に係るデータ通信装置の受信処理では、まず通信部11、12による受信処理により、ネットワークからフレームを受信する。次に、ハードウェアプロトコル処理部13が受信したフレームのEthernetの受信処理、IPv4の受信処理およびUDPのデータ受信処理を行う。ここで、受信フレームがUDPデータグラムであり、既にセッションが確立中であれば、ハードウェアプロトコル処理部13によりアプリケーションにデータが転送される。
一方、セッション確立中のUDPデータグラム以外であれば、ハードウェアプロトコル処理部13からソフトウェアプロトコル処理部14に受信フレームがどの通信部のインタフェースから受信したかを示す識別子を通知し、ソフトウェアプロトコル処理部14により受信フレームの処理が行われる。
本実施形態に係るデータ通信装置の送信処理では、まず送信しようとするデータがセッション確立中のデータであるか否か判断される。セッション確立中のデータであった場合、セッション情報記憶部からセッションの属する通信部のインタフェースの識別子が取得され、ハードウェアプロトコル処理部13によってユーザ定義プロトコルの送信処理、UDPのデータ送信処理、IPv4の送信処理、及びEthernetの送信処理が行われ、通信部によってフレームが相手装置へと出力される。
一方、送信データがセッション確立中のUDPデータでなく、ARPパケットであった場合には、ソフトウェアプロトコル処理部14によりARPの送信プロトコル処理が行われる。ソフトウェアプロトコル処理部14は、ルーティング処理機能を有しているので、送信しようとしているIPアドレスがどのネットワークセグメントに送信するべきものかを調べ、対応する通信部のインタフェースを示す識別子をハードウェアプロトコル処理部13に通知する。次に、ハードウェアプロトコル処理部13は、送信フレームのプロトコル処理を行い、通信部によりフレームをネットワークに送信する。
本実施形態に係るデータ通信システムでは、フラッシュメモリ51は、UOE313及びCPU314にバスを介して接続されており、UOE313は2つのMAC311、312にバスを介して接続されている。MAC311、312はそれぞれスイッチングハブ31、32とEthernetで接続されている。
デコーダ52は、UOE413及びCPU414にバスを介して接続されており、UOE413は2つのMAC411、412にバスを介して接続されている。MAC411、412はそれぞれスイッチングハブ31、32とEthernetで接続されている。
スイッチングハブ31によって構成されるネットワークのアドレスは192.168.1.0/24であり、スイッチングハブ32によって構成されるネットワークのアドレスは192.168.2.0/24であり、UOE313のMAC311側には192.168.1.1、UOE313のMAC312側には192.168.2.1、UOE413のMAC411側には192.168.1.2、UOE413のMAC412側には192.168.2.2とIPアドレスが割り当てられている。
本システムでは、UOE313とUOE413との間で、192.168.1.1と192.168.1.2との間における1つのセッション、192.168.2.1と192.168.2.2との間における1つのセッションの合計2つのセッションが確立され、UOE313からUOE413に対してUDPデータグラムが伝送される。なお、本システムにおいては、同一のデータを送るセッションの識別はUOE413のUDPポート番号が同一か否かで判断される。
UOE313からUDPデータグラムの送信を開始する前に、UDPデータグラムの受信を行うために、CPU414でのポートをオープンし、セッション情報の作成を行い、セッションを確立状態にする。一方、UOE313ではUOE413のIPアドレス192.168.1.2及び192.168.2.2のMACアドレスの解決を行う必要があるが、これは上記第1の実施形態と同様に、ARPを用いて解決する。次に、CPU314でもポートをオープンし、セッション情報の作成を行う。この際、セッション情報に含まれるセッションの属するネットワークを、CPU314のルーティング機能を用いて指定する。
UOE313とUOE413でセッションを確立状態にしたら、2つのセッションを用いた伝送を開始する。フラッシュメモリ51から読み出された映像ストリームは、UOE313により高速にUDP処理され、MAC311、スイッチングハブ31、MAC411(192.168.1.1と192.168.1.2)を介した通信路と、MAC312、スイッチングハブ32、MAC412(192.168.2.1と192.168.2.2)を介した通信路の2つの通信路を介して、UOE413に送信される。
UOE313からUOE413に対して送信されるフレームのフォーマットは、先頭から、Ethernetヘッダ、IPv4ヘッダ、UDPヘッダ、シーケンス番号、データという構成になっている。シーケンス番号は32ビットの固定長であり、以降は映像データという構成になっている。
UOE313では、フラッシュメモリ51から読み出したデータを、CPU314などからセッション情報記憶部を介して指示されたMTUを超えないサイズに分割し、それぞれにシーケンス番号を付加する。そして、そのシーケンス番号と分割したデータをペイロードとして、UDPのデータ送信処理、IPv4の送信処理、Ethernetの送信処理を行って、セッション情報記憶部をから読み出したセッションの属するMACに出力する。
この時に設定する宛先IPアドレスおよび宛先MACアドレスは、セッション情報記憶部から読み出され、MAC311から送信されるフレームには、MAC411のIPアドレス及びMACアドレスが設定され、MAC312から送信されるフレームには、MAC412のIPアドレス及びMACアドレスが設定される。
このようにすることで、フレームの送信毎にCPU314が送信するMACを指定することなく、セッション情報記憶部からUOE313がフレームを送信するMACの識別子を読み出して送信処理を行うことが可能となる。
UOE313およびUOE413では、UDPデータグラムの宛先のポート番号によってセッションを識別し、同一の宛先ポート番号であれば同一のセッションと判別する。このため、2つのセッションのUDPヘッダの宛先ポート番号には、同一のポート番号が指定される。なお、UOE313は、デコーダ52のバッファがアンダーフローしないように、一定の間隔でフラッシュメモリ51からデータを読み出して送信する必要がある。
図9にUOE313の構成の一例を示す。UOE313は、データ送信要求を受け付ける送信要求受付部321と、受け付けた送信要求をキューイングする送信キュー部322と、キューイングされた送信要求に基づき送信フレームを生成するフレーム生成部324と、送信を各通信部に渡すフレーム送信部325を備える。フレーム送信部325が、複数のMAC(通信部)311、312のうち、送信フレームを受け付け可能なMACにのみフレームを渡している間に、フレーム生成部324が、送信キュー部322へ新たにキューイングされた送信要求に基づき、新たな送信フレームを生成したとき、送信指示部323が、フレーム送信部325に対して送信中フレームの破棄を指示する。フレーム送信部325は、送信中フレームを破棄して、フレーム生成部324により生成された新たなフレームの送信を開始する。
本実施形態に係るデータ通信装置を適用しない従来のデータ通信装置では、フレーム生成部が複製して生成した各フレームを、通信部へ渡し始めると、それらのフレームの送出が完了するまで、これを継続する必要がある。このような構成では、フレーム送信部が1つ乃至複数の通信部へフレームを渡せない状況が継続すると、フレーム生成部による次のフレーム生成を停止せざるを得なくなり、結果として後続のフレームの送出が滞る。
一方、本実施形態に係るデータ通信装置は、フレーム生成部324によって次に送信すべきフレームの生成が完了した場合、送信指示部323は、フレーム送信部325に対して、通信部311、312に渡しているフレームの送出を中断させると共に、次に送信すべきフレームの送出を開始させる。
送信指示部323はフレーム送信部325による各フレームの送出時間を監視し、送信制限時間を超えた時に、フレーム送信部325に対して、フレームの送出を中断させると共に、次に送信すべきフレームの送出を開始させるようにしてもよい。
このようにデータ通信装置を構成することで、通信路が輻輳してスイッチングハブからPauseフレームを受けた場合や、スイッチングハブの故障やケーブルの断線などによりMACのリンクがダウンした場合など、フレーム送信部325が1つ乃至複数の通信部へフレームを渡せない状況に陥っても、それを破棄して次に送信すべきフレームを渡せるようになり、各フレームを滞りなく送出し続けることが可能となる。
一方、受信処理を行うUOE413では、2つのセッションで受信したデータを管理するため、セッション情報から参照できる形で、受信状態ビットマップを共有メモリに記憶する。受信状態ビットマップは、受信したシーケンス番号毎に、受信完了していれば1、受信未完了であれば0が設定される。全シーケンス番号のビットマップは正常受信未完了を意味する0で初期化されている。
UOE313からMAC311、312を介して送信されたフレームは、スイッチングハブ31、32を介してMAC411、412に伝送され、フレームの受信処理が行われる。2つのMAC411、412で受信されたフレームは、UOE413でシリアライズされ、プロトコル処理が行われる。
図10に示すフローチャートを用いて、UOE413で行われる受信処理を説明する。
(ステップS301)IPv4の受信処理およびチェックサム計算を除くUDPのデータ受信処理が行われ、UDPのペイロードデータグラムからユーザ定義プロトコルのシーケンス番号とデータが取得される。取得されたシーケンス番号に対応する受信状態ビットマップが読み出され、その値が受信完了を表す1であればステップS305に進む。一方、読み出された値が受信未完了を表す0であれば、ステップS302に進む。
(ステップS302)UOE413は、受信したデータをメモリ(図示せず)に書き込む。
(ステップS303)UOE413は、UDPのチェックサムを計算する。チェックサムが正しい場合はステップS304に進み、正しくない場合はシーケンス番号に対応するデータの受信状態を変化させず、受信未完了を表す0のままにしておく。
(ステップS304)UOE413は、受信データのシーケンス番号に対応する受信状態ビットマップを、受信完了を表わす1に設定する。
(ステップS305)UOE413は受信したデータグラムを破棄する。
これにより、一方の通信路にてパケットロスや障害などが発生した場合にも、他方の通信路からチェックサムの正しいデータグラムが受信できれば、正常にデータを受信することが可能となる。
このように、本実施形態に係るデータ通信装置によれば、1つのUOE(ハードウェアオフロードエンジン)を用いて複数の通信路でデータを高速に伝送することが可能となる。フラッシュメモリ51から読み出した同一のデータを、UDPを用いて2つのセッションで伝送することで、通信路に障害が発生した場合や、通信路においてロスが発生した場合にも、2つあるインタフェースのうち、少なくともいずれか一方でチェックサムの正しいUDPデータグラムが受信できればデータを受信することが可能となる。
また、通信路の数だけUOEを設ける必要がないため、コストを低減できる。従って、データ通信の高速化及び信頼性向上を低コストに実現できる。
なお、パケットロスなどの損失を補償するために、フラッシュメモリ51から読みだしたストリームに対して、LDPC(Low Density Parity Check)符号や、リードソロモン符号、ターボ符号などの誤り訂正符号を付加して送信し、デコーダ52に出力する前段で誤り訂正処理を行ってもよい。
また、UOEに対してMACを2つ接続する例を示したが、信頼性を向上させるため、MACを3つ以上に増やしてもよい。また、セッション数を3つ以上に増やして通信を行ってもよい。
また、本実施形態では、UDPデータグラムの宛先ポート番号を用いて同一セッションか否かの判定を行ったが、これは、送信元のポート番号やIPアドレスを用いて行ってもよいし、宛先のIPアドレスを用いて行ってもよいし、UDPのペイロードにセッション識別子を設けて行ってもよい。
また、本実施形態では、相手端末のMACアドレスをARPによって解決したが、これは予め固定的にMACアドレスを割り振っておき、この値を用いて通信してもよい。
(第4の実施形態)図11に、本発明の第4の実施形態に係るデータ通信装置60の概略構成を示す。データ通信装置60は、通信部61、62、ハードウェアプロトコル処理部63、64、ソフトウェアプロトコル処理部65、セッション情報記憶部66、及びフレーム情報記憶部67を備える。
通信部61、62、ソフトウェアプロトコル処理部65は、図1に示す上記第1の実施形態における通信部11、12、ソフトウェアプロトコル処理部14と同様のものである。
ハードウェアプロトコル処理部63、64は、TOE(TCP/IP Offload Engine)によって実現され、Ethernetの処理機能と、ルーティング機能を除くIPv4の処理機能と、TCPのデータ処理機能と、を有する。ハードウェアプロトコル処理部63、64は、設定されていない宛先MACアドレスと宛先IPアドレスのユニキャストパケットを受信するとそのパケットを破棄する。
セッション情報記憶部66は、TCPセッション情報を記憶し、ハードウェアプロトコル処理部63、64とソフトウェアプロトコル処理部65との間でTCPセッション情報が共有できるようにする。ここで、TCPのセッション情報とは、自装置側のIPアドレスとポート番号、相手装置側のIPアドレスとポート番号によって識別されるコネクション情報であり、ハードウェアプロトコル処理部63、64とソフトウェアプロトコル処理部65が協調してTCP処理を行う上で必要な、シーケンス番号やウィンドウサイズ、MACアドレス、セッションがどのネットワークに属するか示す識別情報などが含まれる。
フレーム情報記憶部67は、受信フレームや送信フレームに関する情報を記憶する。
セッション情報記憶部66やフレーム情報記憶部67は、TOE及びCPUにバスを介して接続される共有メモリにより実現される。
次に、データ通信装置60の受信処理を図12に示すフローチャートを用いて説明する。
(ステップS401)通信部61、62による受信処理により、ネットワークからフレームが受信される。
(ステップS402)ハードウェアプロトコル処理部63、64が、受信フレームのEthernetの受信処理、IPv4の受信処理およびTCPの受信データ処理を行う。
(ステップS403)受信フレームが既にセッション確立中のTCPデータセグメントの場合はステップS404に進み、セッション確立中のTCPデータセグメント以外の場合はステップS405に進む。
(ステップS404)ハードウェアプロトコル処理部63、64がアプリケーション70にデータを転送する。
(ステップS405)ハードウェアプロトコル処理部63、64が、ソフトウェアプロトコル処理部65に、どのハードウェアプロトコル処理部が受信フレームの処理を行ったか、及びどの通信部のインタフェースがフレームを受信したかを示す識別子をフレーム情報記憶部を介して通知する。
(ステップS406)ソフトウェアプロトコル処理部65が受信フレームの処理を行う。
(ステップS407)ソフトウェアプロトコル処理部65が処理した受信フレームが自分が送信したSYNフラグを含むTCPセグメントに対する応答セグメントで、処理の結果セッションが確立した場合はステップS408に進み、受信フレームが上記以外のTCPセグメントや、ARPパケットなどで、セッションが確立しなかった場合は処理を完了する。
(ステップS408)セッション情報記憶部66に、そのセッションがどのネットワークに属するか、すなわち、プロトコル処理を行うハードウェアプロトコル処理部及び送受信を行う通信部のインタフェースを示す識別情報が記憶される。
続いて、データ通信装置60の送信処理を図13に示すフローチャートを用いて説明する。
(ステップS501)送信しようとするデータがセッション確立中のデータであるか否か判定される。セッション確立中のTCPデータである場合はステップS502に進み、送信データがセッション確立中のTCPデータでなく、ARPパケットや、TCPのセッション確立のためのSYNフラグの含まれるTCPセグメントであった場合はステップS503に進む。
(ステップS502)セッション情報記憶部66から、プロトコル処理を行うハードウェアプロトコル処理部13を示す識別子及び送信処理を行う通信部のインタフェースを示す識別子が取得される。
(ステップS503)ソフトウェアプロトコル処理部65がTCP/IP処理を行う。
(ステップS504)ソフトウェアプロトコル処理部65は、ルーティング機能を有しているので、送信しようとしているIPアドレスがどのネットワークセグメントに送信するべきものかを調べ、その通信部のインタフェースを示す識別子を該当するハードウェアプロトコル処理部に通知する。
(ステップS505)ハードウェアプロトコル処理部63又は64が、TCPのデータ送信処理、IPv4の送信処理およびEthernetの送信処理を行う。ソフトウェアプロトコル処理部65でプロトコル処理が行われている場合、ハードウェアプロトコル処理部63又は64は、ソフトウェアプロトコル処理部65により処理されなかった送信フレームのTCP/IP処理を行う。プロトコル処理が完了したら取得または指示されたメディアアクセス処理部にフレームを出力する。
(ステップS506)通信部61又は62が、送信フレームを相手装置へ出力する。
図14に、本実施形態に係るデータ通信装置を用いたデータ通信システムの概略構成を示す。このデータ通信システムは、ビデオカメラ21、エンコーダ22、フラッシュメモリ23、データ通信装置560、660、スイッチングハブ31及び32を備える。本システムでは、ビデオカメラ21で撮影した映像をエンコーダ22がエンコードし、エンコード後の映像データをデータ通信装置560が、複数(ここでは2つ)のスイッチングハブを介してデータ通信装置660に送信し、データ通信装置660が受信した映像データをフラッシュメモリ23に記録する。各通信路にはスイッチングハブ31、32が設けられている。
データ通信装置560、660は、図11に示すデータ通信装置60と同様のものである。データ通信装置560は、通信部61、62に対応するMAC561、562、ハードウェアプロトコル処理部63、64に対応するTOE563、564、及びソフトウェアプロトコル処理部65に対応するCPU565を備える。また、データ通信装置560は、図11に示すデータ通信装置60におけるセッション情報記憶部66及びフレーム情報記憶部67に対応する構成要素を備えるが、図14では示していない。
また、データ通信装置660は、通信部61、62に対応するMAC661、662、ハードウェアプロトコル処理部63、64に対応するTOE663、664、及びソフトウェアプロトコル処理部65に対応するCPU665を備える。また、データ通信装置660は、図11に示すデータ通信装置60におけるセッション情報記憶部66及びフレーム情報記憶部67に対応する構成要素を備えるが、図14では示していない。
エンコーダ22は、TOE563、564、CPU565にバスを介して接続される。エンコーダ22は、ビデオカメラから出力されたSD-SDI信号またはHD-SDI信号をMPEG-2やH.264といった動画像符号化規格で符号化して、TOE563、564に出力する。TOE563は、異なるハードウェアで構成されるMAC561、562を介して、スイッチングハブ31、32とEthernetで接続されている。同様に、TOE564は、MAC561、562を介して、スイッチングハブ31、32とEthernetで接続されている。なお、TOE563及び564には、2つのMAC561、562から受信したフレームをシリアライズして処理するハードウェアが搭載されている。
フラッシュメモリ23は、TOE663、664、CPU665にバスを介して接続される。TOE663は、異なるハードウェアで構成されるMAC661、662を介して、スイッチングハブ31、32とEthernetで接続されている。同様に、TOE664は、MAC661、662を介して、スイッチングハブ31、32とEthernetで接続されている。なお、TOE663及び664には、2つのMAC661、662から受信したフレームをシリアライズして処理するハードウェアが搭載されている。
図14に示すように、スイッチングハブ31によって構成されるネットワークのアドレスを192.168.1.0/24と192.168.3.0/24、スイッチングハブ32によって構成されるネットワークのアドレスを192.168.2.0/24と192.168.4.0/24とする。また、TOE563のMAC561側には192.168.1.1を、TOE563のMAC562側には192.168.2.1を、TOE564のMAC561側には192.168.3.1、TOE564のMAC562側には192.168.4.1とIPアドレスを割り当てる。また、TOE663のMAC661側には192.168.1.2、TOE663のMAC662側には192.168.2.2、TOE664のMAC661側には192.168.3.2、TOE664のMAC662側には192.168.4.2とIPアドレスを割り当てる。
本システムでは、TCPを用いてエンコーダ22から出力された映像ストリームをフラッシュメモリ23に送信する。まず、TCPによる転送をおこなうために、エンコーダ22側からTCPのセッション確立を行う。セッション確立を行うためには、事前に相手のMAC(Media Access Control)アドレスを取得する必要がある。
相手のMACアドレスを取得するために、まずCPU565上で動作するソフトウェアにより、相手のIPアドレスである192.168.1.2に対するMACアドレスを解決するためのARP要求パケットの生成処理を行う。フレームを出力できるMACは2つあるが、今回解決しようとしているIPアドレスは、MAC561の属するネットワークに存在することがわかるので、CPU565はディスクリプタを用いて、TOE563に対して、Ethernetの送信処理を行い、MAC561を介してフレームを送信するよう指示する。わからない場合は接続される全てのMACから出力してもよい。
本実施形態におけるディスクリプタは、上記第1の実施形態で説明したディスクリプタと同様に、DESCRIPTOR_TYPE、NETWORK_ID、BUFFER_ADDRESS、及びPROCESS_DONEのフィールドにより構成されるが、NETWORK_IDに指定される内容が異なる。DESCRIPTOR_TYPEがCPUからTOEに対する送信指示の場合は、CPUが、NETWORK_IDにフレームを送信するネットワークの識別子としてMACとTOEの識別子を指定する。一方、DESCRIPTOR_TYPEがTOEからCPUに対するフレーム受信指示の場合は、TOEが、NETWORK_IDに、フレームを受信したネットワークの識別子としてMACとTOEの識別子を格納する。
CPU565からARP要求パケットの送信を行う場合には、ディスクリプタのDESCRIPTOR_TYPEには、送信指示を示す値が格納され、NETWORK_IDにはMAC561とTOE563の識別子が格納され、BUFFER_ADDRESSには送信するフレームの格納されている共有メモリのアドレスが格納され、PROCESS_DONEにはARPの処理が完了していることを示す情報が格納される。
このようにCPU565から送信されたARP要求パケットは、スイッチングハブ31を経由してMAC661により受信される。MAC661が受信したフレームに対して、TOE663がEthernetの受信処理を行う。TOE663は、上位層プロトコルであるARPを処理するため、ディスクリプタを用いて、受信フレームに関する情報をCPU665に伝達する。この場合、DESCRIPTOR_TYPEには受信指示を示す値が格納され、NETWORK_IDにはMAC661とTOE663を示す識別子が格納され、BUFFER_ADDRESSには受信フレームの格納されている共有メモリのアドレスが格納され、PROCESS_DONEにはEthernetの処理が完了していることを示す情報が格納される。
CPU665上で動作するソフトウェアは、ディスクリプタから得られた受信フレームのARPの受信処理を行い、ARP応答パケットを生成する。そして、CPU665は、ディスクリプタを用いて、TOE663に、フレームを受信したネットワークを介してARP応答パケットを送信するよう指示する。この際、DESCRIPTOR_TYPEには送信指示を示す値が格納され、NETWORK_IDにはARP要求パケットを受信したネットワークであるMAC661とTOE663を示す識別子が格納され、BUFFER_ADDRESSにはCPU665が生成したARP応答パケットを格納した共有メモリのアドレスが指定される。指示を受けたTOE663は、Ethernetの送信処理を行った後、MAC661を介してフレームを送信する。これにより、TOE663とMAC661を介してARP応答パケットが送信される。
スイッチングハブ31及びMAC561を介してフレーム(ARP応答パケット)を受信したTOE563は、Ethernetの受信処理を行った後、ディスクリプタを用いて、CPU565に受信処理を行うように指示する。TOE564でも同じフレームが受信されるが、受信するように設定されているIPアドレスとMACアドレスではないため、フレームは破棄される。CPU565が、このARP応答パケットを受信することにより、TOE663のMAC661側に付与されているIPアドレスに対応するMACアドレスを取得できる。
このように、フレーム毎にそのフレームを受信したネットワークまたは、フレームを送信するネットワークをCPUとTOEとの間で通知することで、複数のMACと接続された複数のTOEを用いて通信を行うことが可能となる。
上述の方法で得られたMACアドレスを用いて、192.168.1.1と192.168.1.2との間でセッションを確立するため、CPU565上で動作するソフトウェアが、SYNフラグを含むTCPセッション確立要求セグメントをTOE563およびMAC561を介して送信する。
スイッチングハブ31を介してMAC661に到達したTCPセッション確立要求セグメントは、MAC661によりフレームの受信処理、TOE663によりEthernetの受信処理、IPv4の受信処理、TCPの受信データ処理が行われる。TOE663は、ディスクリプタを用いて、受信フレームの情報をCPU665に通知する。CPU665は、TCPのSYNフラグを含むセグメントの処理を行う。CPU665は、そのSYNフラグを含むセグメントが受け入れ可能な場合、SYNフラグとACKフラグを含むセグメントを生成して、ディスクリプタを用いて、TOE663に送信フレームの情報を伝達する。
TOE663は、TCPの送信データ処理、IPv4の送信処理、Ethernetの送信処理を行い、MAC661を介してフレームを送信する。SYNフラグとACKフラグを含むセグメントは、スイッチングハブ31を介してMAC561に受信される。MAC561で受信されたフレームは、TOE563により、Ethernetの受信処理、IPv4の受信処理、TCPの受信データ処理が行われ、CPU565によりSYNフラグとACKフラグを含んだセグメントの受信処理が行われる。このセグメントが受け入れ可能であれば、CPU565はセッション情報を作成してセッションを確立させ、セッション情報記憶部(図示せず)に、フレームを受信したディスクリプタに設定されているNETWORK_IDをセッションの属するネットワークとして記録する。
CPU565は、ACKフラグを含むTCPセグメントを生成し、TOE563およびMAC561を介して、フレームを送出する。このフレームがスイッチングハブ31とMAC661を介してTOE663で受信処理される。TOE663は、ディスクリプタを用いてCPU665にフレームの情報を伝達する。CPU665は、セッションの確立処理を行うと、セッション情報記憶部(図示せず)に、フレームを受信したディスクリプタに設定されているNETWORK_IDをセッションの属するネットワークとして記録する。
192.168.2.1から192.168.2.2、192.168.3.1から192.168.3.2 、192.168.4.1から192.168.4.2についても同様にして、CPU565上で動作するソフトウェアがARPを用いてMACアドレスを解決し、TCPのセッション確立を行う。なお、エンコーダ22側からではなく、フラッシュメモリ23側からTCPのセッション確立を行ってもよい。
上述のように、エンコーダ22とフラッシュメモリ23との間で4つのセッションを確立したら、エンコーダ22がビデオカメラ21からの入力をエンコードする。エンコーダ22の出力データに対して、TOE563から2つのセッション、TOE564から2つのセッションの合計4セッションで、TCPによる送信処理を開始する。
なお、TOE563、564は、図5に示すTOE113と同様の構成になっており、MAC前段に設けられたフレームバッファ部の残り容量が所定のサイズを上回っているものに対応するデータ送信を優先的に行う。
上述のように送信されたTCPデータセグメントは、TOE663およびTOE664により受信処理され、セッション毎にフラッシュメモリ23の別の記憶領域にデータが書き込まれる。データの転送がすべて完了すると、エンコーダ22側およびフラッシュメモリ23側からFINフラグを含むセグメントを送信し、TCPのセッション終了処理を行う。セッション終了が受け入れられると、セッション情報記憶部内のセッション情報は破棄される。
セッション終了処理後、フラッシュメモリ23では、正常に受信された1つのストリームを残して、他のストリームが破棄される。なお、通信路に障害が発生した場合、TOE563、564から送信ができず、エンコーダ22内のバッファがオーバーフローするため、ファイルサイズの大きいストリームを正常に受信できたものと判定してもよい。
データ通信装置560、660はそれぞれ2つのTOEを備えているため、一方のTOEが故障した場合でも、他方のTOEにより複数のネットワークを介して通信を行うことができる。
このように、本実施形態に係るデータ通信装置によれば、2つのTOEと2つのMACを用いて4つのネットワークを介した通信を行うことにより、TOEの故障を保証しながら、高速かつ損失なく映像ストリームを伝送することが可能となる。また、MACとTOEがそれぞれ独立に接続され、2つの通信路によって伝送される場合よりも、各機器の故障に対する耐性を高めることが可能となる。また、通信路の数だけTOEを設ける必要がないため、コストを低減できる。従って、データ通信の高速化及び信頼性向上を低コストに実現できる。
なお、本実施形態では2つのハードウェアオフロードエンジンと2つのMACで構成される例を示したが、それぞれ個数は2つに限定されず、複数のオフロードエンジンと複数のMACであれば、同様に信頼性を高めることが可能である。
また、本実施形態においては、1つのエンコーダから出力した映像ストリームを複数の通信路を介して伝送する例を示したが、エンコーダの数を増やして信頼性を高めてもよい。
なお、上記第1〜第4の実施形態におけるデータ通信装置のハードウェアプロトコル処理部13、63、64は、TCPやUDPのプロトコル以外にも、SCTP(Stream Control Transmission Protocol)、DCCP(Datagram Congestion Control Protocol)、RTP(Real-time Transport Protocol)、IPv6(Internet Protocol Version 6)などのプロトコルを備えてもよい。
また、上記実施形態ではデータ通信装置の通信路として、スイッチングハブを1台経由する例を示したが、通信路を複数のスイッチングハブで構成してもよいし、ルータを経由してもよい。また、MACとスイッチングハブとの接続には、PHYを用いて接続してもよいし、SGMII(Serial Gigabit Media Independent Interface)などの規格により接続してもよい。
また、上記実施例では記憶媒体としてフラッシュメモリを用いる例をあげたが、これはハードディスクや磁気テープなどでもよい。
上述した実施形態で説明したデータ通信装置の少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、データ通信装置の少なくとも一部の機能を実現するプログラムをフレキシブルディスクやCD−ROM等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
また、データ通信装置の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線(無線通信も含む)を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。