JP6279970B2 - プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム - Google Patents

プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム Download PDF

Info

Publication number
JP6279970B2
JP6279970B2 JP2014094116A JP2014094116A JP6279970B2 JP 6279970 B2 JP6279970 B2 JP 6279970B2 JP 2014094116 A JP2014094116 A JP 2014094116A JP 2014094116 A JP2014094116 A JP 2014094116A JP 6279970 B2 JP6279970 B2 JP 6279970B2
Authority
JP
Japan
Prior art keywords
communication
transmission
communication unit
frame
unit
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.)
Expired - Fee Related
Application number
JP2014094116A
Other languages
English (en)
Other versions
JP2015210793A (ja
Inventor
隆博 山浦
隆博 山浦
優太 小林
優太 小林
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2014094116A priority Critical patent/JP6279970B2/ja
Priority to US14/696,654 priority patent/US20150319225A1/en
Publication of JP2015210793A publication Critical patent/JP2015210793A/ja
Application granted granted Critical
Publication of JP6279970B2 publication Critical patent/JP6279970B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/14Multichannel or multilink protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • 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
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Cardiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Small-Scale Networks (AREA)
  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

本発明の実施形態は、プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラムに関する。
従来の通信装置において、TCP/IP(Transmission Control Protocol/Internet Protocol)の処理を、CPU(Central Processing Unit)ではなく、専用のハードウェアで行うTOE(TCP/IP Offload Engine)が知られている。このTOEを複数組み合わせ、通信の耐障害性、負荷分散、速度の向上を実現する方法がある。しかしながら、この方法では、それぞれのTOEでセッション情報を管理するため、第1のTOEで、あるセッションのフレームを送信している場合に、異なる第2のTOEから、同じセッションのフレームを送信させるためには、第1のTOEから第2のTOEへ、セッション情報をCPUで移行する処理が必要になる。このため、TOE間の切り替えを迅速に行うことができなかった。また、この方法では、TOEごとにMAC(Media Access Controler)を設ける必要があり、複数のMACを用いるためには、MACと同数のTOEが必要であった。このため、回路規模が増大になり、コスト高になる問題があった。
特開2011−18106号公報
本発明の実施形態は、通信部であるMACを切り換えて送信することを、低回路規模または低コストで、実現しようとするものである。
本発明の実施形態としてのプロセッサは、ネットワークに接続される複数の通信部を備えた通信装置に対するプロセッサであって、管理部と、選択部とを備える。前記管理部は、通信装置における前記複数の通信部の状態を管理する。前記選択部は、前記通信部の状態に基づき、前記通信装置が前記ネットワークを介して通信する相手装置に対して生成されたソケット情報に関連するフレームを送信する通信部を選択する。前記プロセッサは、選択した通信部で前記ソケット情報に関連するフレームの送信を前記通信装置が行うように制御する。
第1の実施形態に係わる通信システムを示すブロック図。 HTTPを用いた通信の動作シーケンスを示す図。 通信カードとCPUの詳細な構成を示す図。 ソケット情報を説明する図。 送信キューと送信リクエストを説明する図。 第1の送信フレーム処理部の動作例のフローチャート。 第2の実施形態に係わる通信システムのブロック図。 4つの通信部を含む仮想通信部でラウンドロビモードを行う場合の動作例を示す図。 4つの通信部を含む仮想通信部でラウンドロビモードを行う場合の通信できない通信部がある場合の動作例を示す図。 ある仮想通信部をラウンドロビンモードで、別の仮想通信部をXOR負荷分散モードで動作させる例を示す図。 出力先切替えテーブルを説明する図。
以下、図面を参照しながら、本発明の実施形態について説明する。
(第1の実施形態)
図1は、本発明の第1の実施形態に係わる通信システムを示すブロック図である。
本実施形態の通信システムは、視聴端末301に映像を配信する映像配信サーバ101である。映像配信サーバ101と各視聴端末301はTCP(Transmission Control Protocol/Internet Protocol)を用いて通信を行う。映像配信サーバ101は各視聴端末301からのTCPのコネクション要求を受けて、TCPコネクションを確立する。映像配信サーバ101は、確立したTCPコネクションに基づき、各視聴端末301からHTTPによる映像コンテンツのリクエストを受け、映像コンテンツを配信する。視聴端末301は、映像配信サーバ101から送信されたコンテンツを受信して、画面に映像を表示する。
映像配信サーバ101は、システムメモリ111、CPU121(Central Processing Unit)、チップセット151、ストレージ141、通信カード131を備え、これらがバスに接続されている。
CPU121は、プロセッサの一形態であり、ストレージ141に格納されたプログラムをメモリに読み出し、それを実行する。CPU121は、バスにより通信カード131と接続される。通信カード131は、通信装置の一形態であり、TOE(TCP/IP Offload Engine)機能を搭載したカードである。一例として、PCI Expressバスで接続されるカード(PCI Expressカード)を用いることができる。
通信カード131は、FPGA(Field Programmable Gate Array)、メモリ、CPU121と接続するためのコネクタ、および、ネットワーク201と接続される複数のコネクタが搭載されている。ネットワーク201とのコネクタは、一例として、SFP+コネクタを用いることができる。通信カード131は、CPU121に代わり、FPGAでTCP/IP処理を行うことにより、CPU121の処理負荷をオフロードして、高速かつ省電力な通信を行う。
なお、通信カード131は、図1に示すようにCPU121と直接接続される形態の他、チップセット151を介してCPU121に接続されてもよい。また、図では、CPU121が、チップセット151を介してストレージ141に接続されているが、ストレージ141を直接、通信カード131に接続する形態も可能である。この場合、通信カード131からストレージ141にCPU121を介さずに直接、アクセスできるため、高速なデータ送信および受信が可能になる。
図2は、HTTPを用いた通信の動作シーケンスを示す。まず視聴端末301は、TCPのコネクションを確立するため、TCPヘッダのフラグフィールドのうち、SYNビットが1のSYNセグメントを送信し、コネクションの確立を要求する。これを受けた映像配信サーバ101は、視聴端末301から送られたSYNセグメントのシーケンス番号に1を加えた値をTCPの確認応答番号として設定し、フラグフィールドのSYNビットとACKビットが1のセグメントであるSYN/ACKセグメントを送信する。次に、これを受信した視聴端末301が、映像配信サーバ101の送信したSYN/ACKセグメントのシーケンス番号に1を加えた値を確認応答番号として、フラグフィールドのACKビットを1にしたACKセグメントを送信する。これによりTCPコネクションが確立される(S101)。
その後、視聴端末301は、この確立したTCPコネクションを用いて、HTTPのGETリクエストを用いて映像コンテンツを要求し(S102)、映像配信サーバ101はそのレスポンスとして、ステータスとヘッダとコンテンツの送信を行う(S103)。
送信が終わるとTCPのフラグフィールドのFINビットを1にしたFINセグメントを送信し、視聴端末301からACKセグメントとFINセグメントを受信した後、そのFINセグメントのシーケンス番号に1を加えたACKセグメントを送信する。これにより、TCPのコネクションが切断される(S104)。なお、HTTP1.1を用いると、1つのTCPコネクション内で、HTTPのリクエスト(S102)とレスポンス(S103)は、それぞれの上限回数に達するまで繰り返すことができる。
図3に通信カード131とCPU121の詳細な構成を示す。図中の点線は制御の流れ、実線はデータの流れを示す。また、図中の黒丸は、制御またはデータの信号線が接続されていることを示す。
通信カード131は、複数の通信部0、1、2、3と、第1の受信フレーム処理部31と、複数の送信キュー0、1、2、3と、第1の送信フレーム処理部33と、ソケット情報記憶部32を備えている。各通信部は、ネットワーク201に接続され、ネットワーク201へのフレームの送信と、ネットワーク201からのフレームの受信を行う。第1の受信フレーム処理部31は、各通信部で受信したフレームのプロトコルを処理する。複数の送信キューは、各通信部への送信リクエストを蓄積する。第1の送信フレーム処理部33は、送信キューから送信リクエストを読み出し、送信リクエストに応じたフレームをプロトコル処理により生成して、送信キューに対応する通信部から送信する。ソケット情報記憶部32は、TCPのコネクションに関するソケット情報を記憶する記憶装置である。一例として、ソケット情報記憶部32と送信キュー0〜3は、通信カード131上のメモリで実現され、通信部0〜3と第1の送信フレーム処理部33と第1の受信フレーム処理部31はFPGAで実現される。ソケット情報記憶部32は通信カードに設けられる他、システムメモリ111に設けられても良いし、CPU121内に設けられても良い。
CPU121は、第2の受信フレーム処理部22と、第2の送信フレーム処理部23と、状態管理部26と、出力先選択部25と、出力先設定部21を備えている。またCPU121は、アプリケーションを実行する実行部24を備えている。第2の受信フレーム処理部22は、通信カードから渡されたフレームのプロトコルの処理を行う。第2の送信フレーム処理部23は、送信するフレームのプロトコルの処理を行う。状態管理部26は、各通信部が通信可能な状態かどうか(稼働の有無)、各通信部の負荷状態など、各通信部の状態を管理する。出力先選択部25は、各通信部の状態などに基づきフレームを送信する通信部を選択する。出力先設定部21は、出力先選択部25で選択された通信部の識別情報(以下、出力通信部識別子と称する)を、ソケット情報記憶部32において、該当するソケット情報に設定する。ソケット情報は、当該ソケット情報に関連するフレームを送信する通信部の識別情報(出力通信部識別子)を含んでいる。CPU121は、これらの処理部を用いて、出力先選択部25で選択した通信部で、通信カードからフレームが送信されるよう制御する。
通信部0〜3は、有線または無線の通信ネットワーク201と接続されている。有線ネットワークの例としては、イーサネット(Ethernet(登録商標))などがあり、無線ネットワークの例としては、IEEE規格の無線LANネットワーク、携帯電話等のセルラーネットワークなどがある。図では、通信部0〜3が同じネットワークに接続されているように描かれているが、通信部0〜3の一部がそれぞれ異なるネットワークに接続されてもよい。例えば、通信部0、1が同じネットワーク、通信部2、3が同じネットワークといったように、ネットワークアドレスの異なるネットワーク(例えばそれぞれ異なるイーサネット)に接続されてもよい。通信部0〜3は、当該通信部で送信、受信または送受信されたデータ量(バイト数など)を計算するカウンタを備えていてもよい。
通信部0〜3は、OSI(Open Systems Interconnection)参照モデルの物理層とデータリンク層にあたる機能を実行する。一例として、通信部0〜3は、FPGA上に実装されたMAC(Media Access Control)機能とPHY(Physical Layer)機能を実行する。通信部0〜3は、ネットワーク201から受信した信号をPHY処理およびMAC処理してフレーム(MACフレーム)を取得し、バスで接続された第1の受信フレーム処理部31に、そのフレームを出力する。また、第1の送信フレーム処理部33から入力されたフレームを、ネットワーク201に出力する。
ソケット情報記憶部32は、TCPのコネクションに関するソケット情報を記憶する。ソケットは通信を行うためのインタフェースであり、ソケット情報には各通信プロトコルで通信を行うために必要な情報が含まれる。ソケット情報に記憶される情報は各通信プロトコルによって異なり、例えば、TCPのソケット情報では、図4(B)に示すように、自装置のIPアドレス、相手装置のIPアドレス、自装置のポート番号、相手装置のポート番号を記憶し、これらの組でソケットあるいは、ソケットに基づくコネクションを識別することができる。コネクションレスのプロトコルでは、例えば自装置のIPアドレスと自装置のポート番号などを用いてソケットを識別することもできる。また、TCPのコネクション状態、出力通信部識別子、これまで送信した最大のシーケンス番号、確認応答未受信のシーケンス番号、相手のウィンドウサイズ、次に相手が送信すると期待されるシーケンス番号(例えばこれまで受信済みのシーケンス番号の最小値+1)、自身のウィンドウサイズ(受信ウィンドウサイズ)、相手に送信する送信データが格納されているアドレス、当該送信データの長さ、MTU(Maximum Transmission Unit)、宛先MACアドレス、送信バイト数(これまで当該ソケット情報に関連して送信したデータの合計のバイト数)、受信バイト数(これまで当該ソケット情報に関連した受信データの合計のバイト数)などの情報を、ソケット毎に記憶する。本実施形態では、特にソケット情報に出力通信部識別子(通信部の識別情報)を含めていることを特徴の1つとしている。ソケット情報記憶部32は、図4(A)に示すように、ソケット毎のソケット情報を、メモリの容量が許す限り記憶することができ、各ソケット情報にはアドレスを付与できる。
第1の受信フレーム処理部31は、通信部から入力されたフレーム(MACフレーム)に対し各層のプロトコルの処理を行う。例えば、第1の受信フレーム処理部31は、イーサネットプロトコルとIPv4とTCPの処理を行うことができる。具体的に、第1の受信フレーム処理部31は、受信したフレームのイーサネットヘッダのタイプ値から上位層プロトコルの番号を取り出し、IPv4のバージョンチェックやチェックサムの検証、TCPのフラグのチェックやチェックサムの検証、シーケンス番号の検証、確認応答番号の検証、ウィンドウサイズの取得、確認応答セグメント(ACKセグメント)の送信指示、受信データの書き込みなどを行う。
第1の受信フレーム処理部31は、受信したフレームが、上記プロトコル(IPv4、TCP)以外であった場合には、CPU121で動作する第2の受信フレーム処理部22に、受信フレームを渡す。ただし、第1の受信フレーム処理部31は、上記プロトコル(IPv4、TCP)のすべての処理を行うことができるわけではなく、TCPのフラグフィールドのSYNフラグまたはFINフラグが1のTCPのセグメントを受信した場合も、CPU121上のソフトウェアで動作する第2の受信フレーム処理部22に受信フレームを渡す。これら以外の場合は、受信フレームを第2の受信フレーム処理部22に渡すことなく、通信カード131内で処理する。なお、第1の受信フレーム処理部31は、受信したTCPセグメントのSYNフラグが1でACKフラグが0の場合(すなわち、受信したTCPセグメントがコネクション確立要求の場合)は、ソケット情報記憶部32内にソケット情報の生成(確保)を行う。また、SYNフラグが1で、ACKフラグが0のTCPセグメントを送信する場合(サーバからコネクション確立要求を送信する場合)、ソケット情報記憶部32内にソケット情報の生成(確保)を行う。
第1の受信フレーム処理部31は、コネクション状態がSYN_SENT状態で、SYNフラグとACKフラグが1のセグメントを受信した場合(すなわちサーバが送信したコネクション確立要求に対するACKセグメントを受信した場合)、シーケンス番号や確認応答番号のチェックを行い、ソケット情報のコネクション状態をESTABLISHED状態に遷移させることで、コネクションを確立する。なお、ソケット情報は、受信フレームのIPアドレスとポート番号を用いて、ソケット情報記憶部32から合致するソケット情報を探索することで特定する。同様に、コネクション状態がSYN_RECEIVED状態で、SYNフラグが0、ACKフラグが1のセグメントを受信した場合(すなわち、視聴端末301から受信したコネクション確立要求に対してSYNフラグとACKフラグが1のセグメントを返し、それに対するACKセグメントを受信した場合)も、シーケンス番号や確認応答番号のチェックを行い、コネクション状態をESTABLISHED状態に遷移させ、コネクションを確立する。
第1の受信フレーム処理部31は、コネクション確立後に、データを含むTCPセグメントを受信した場合、ソケット情報記憶部32内の該当するソケット情報から、受信データ(TCPセグメントのペイロード部)を格納するためのアドレス(ソケット情報の“受信データの格納されるアドレス”)を読み出し、そのアドレスにデータを書き込む。また、第1の受信フレーム処理部31は、受信したTCPセグメントのデータ量であるデータバイト数をカウントする手段を有し、当該手段でカウントした値を、ソケット情報に記憶する機能も備える。
また、第1の受信フレーム処理部31は、コネクション確立後に受信したTCPセグメントに対する確認応答(ACK)セグメントを送信するように指示する。ACKセグメントの送信は、各通信部のうちの1つに対応する送信キューに、送信リクエストを入れることで行う。この時、送信リクエストのタイプに“ACK”を指定し(送信リクエストの詳細は後述する)、送信する確認応答番号と、送信するウィンドウサイズも送信リクエスト内で指定する。送信する確認応答番号と、送信するウィンドウサイズは、該当するソケット情報と受信したTCPセグメントのヘッダから特定する。また、送信リクエストを追加するキューは、該当するソケット情報内の出力通信部識別子が示す通信部に対応する送信キューである。
第2の受信フレーム処理部22は、第1の受信フレーム処理部31から転送されたフレームの処理を行う。一例として、第2の受信フレーム処理部22では、ARPやIPv6、UDPなどの処理を行う。また、TCPのSYNフラグまたはFINフラグが1のセグメントの処理を行う。
ここで、第1の受信フレーム処理部31は、第2の受信フレーム処理部22に受信フレームを伝達する際は、デスクリプタを用いる。システムメモリ111または他のメモリ上に例えばリングバッファなどで構成される複数のデスクリプタを格納できる領域を配置し、第1の受信フレーム処理部31がフレーム毎にデスクリプタに、受信フレームの情報(例えば受信フレームが格納されているアドレスなど)に加えて、対応するソケット情報のアドレス(図4(A)参照)などの情報を書き込み、第2の受信フレーム処理部22がこれを読み出すことで、受信フレームおよびこれに関する情報の伝達を行っても良い。このようにしてソケット情報を用いて、第1の受信フレーム処理部31と第2の受信フレーム処理部22が協調して動作する。
状態管理部26は、各通信部が通信可能かなど、各通信部の状態を管理する。状態管理部26は、通信部の状態に変化があれば、出力先設定部21に通知を行う。各通信部が通信可能かを判別する方法には主として2つある。それぞれ、各通信部のPHYのリンク情報を監視する方法と、ARP(Address Resolution Protocol)パケット等のパケットを送信して、その応答を監視する方法である。
リンク情報の監視は、各通信部のレジスタインタフェースに、バス経由でアクセスし、レジスタの値を確認することで行う。レジスタの値に基づき、リンクアップしているか否かを監視し、各通信部の状態を把握する。レジスタの値はMII(Media Independent Interface)などでPHYからMACに伝達された値が反映される。
ARPパケットによる監視は、第2の送信フレーム処理部23に、指定した通信部を用いてARPパケットを送信するように指示することで行う。その応答となるARPパケットを第2の受信フレーム処理部22で受信し、状態管理部26にその応答があったことを通知することで、送信した通信部が通信可能であることを把握する。ARPパケットの応答がない場合は、応答がなかったことを状態管理部26に通知することで、その通信部が通信可能でないことを把握する。ARPパケットの送信は一例であり、PINGパケットなど、ICMP(Internet Control Message Protocol)プロトコルのパケットを送信してもよい。
出力先選択部25は、複数の通信部を仮想的に1つの通信部として扱う機能を有する。例えば通信部0、通信部1、通信部2、通信部3を1つの仮想通信部0として扱ったり、通信部0と通信部1を仮想通信部0として、通信部2と通信部3を仮想通信部1として扱ったりできる。Linux(登録商標)などでは、複数の通信部を1つの仮想通信部として扱うことをボンディングと呼び、仮想通信部のことをボンディングデバイスと呼ぶ。複数の通信部の一部をボンディングし、残りはボンディングしない構成も可能である。例えば、通信部0、通信部1をボンディングして1つの仮想通信部0とし、通信部2および通信部3はボンディングしないことも可能である。仮想通信部を構成する通信部をスレーブと呼ぶ。仮想通信部および(ボンディングしない)通信部にはIPアドレスを割り当てることができる。各スレーブにはIPアドレスを割り当てることができず、仮想通信部に割り当てられたIPアドレスが適用される。
それぞれの仮想通信部には、個別にモードを設定できる。モードの種類としては、例えば、フェイルオーバーモード、XOR負荷分散モード、送信負荷分散モード、送受信負荷分散モードがある。
フェイルオーバーモードは、仮想通信部内の通信部のうち、優先的に送信する1つの通信部(スレーブ)を決め、その通信部が通信不可能と検出された場合には、他の通信部(他のスレーブ)に切り替えるモードである。
XOR負荷分散モードは、送信元と宛先のMACアドレスやIPアドレス、ポート番号の排他的論理和を通信部の数で割った場合の剰余を用いて、仮想通信部において、送信する通信部を決定するモードである。例えば、仮想通信部内の通信部が4つあるとする。送信元と宛先のMACアドレスやIPアドレス、ポート番号の各ビット列のXORを計算する。求めたXORの値を通信部の数である4で割り、その剰余に対応する通信部を用いる。ここでは、送信元と宛先のMACアドレスやIPアドレス、ポート番号を用いたが、IPアドレスとポート番号だけ用いるなど種々の変形が可能である。また、演算対象とするビットも、全ビットを用いずとも、任意の箇所の2ビットなどを利用してもよい。また、通信部を選択した後、その通信部のリンクが切断された場合には、次の値の通信部を用いるようにしてもよい。
送信負荷分散モードは、仮想通信部内の各通信部の送信負荷に応じて、送信する通信部を切り換えるモードである。例えば各通信部で送信されるデータ量の合計を、各通信部のカウンタから取得し、各通信部で送信される合計データ量の差またはばらつきを抑制する(すなわち送受信の負荷を分散させる)ように通信部を切り換えてもよい。または、ソケット情報に含まれる送信バイト数を利用して、各通信部で送信されるデータ量の合計を計算し、各通信部で送信される合計データ量の差またはばらつきを抑制するように通信部を切り換えてもよい。
送受信負荷分散モードは、仮想通信部内の各通信部の送受信の負荷に応じて、送信する通信部を切り換えるモードである。例えば各通信部で送受信されるデータ量の合計を、各通信部のカウンタから取得し、各通信部で送受信される合計データ量の差またはばらつきを抑制する(すなわち送受信の負荷を分散させる)ように通信部を切り換えてもよい。または、ソケット情報に含まれる送信バイト数と受信バイト数の合計を利用して、各通信部で送信されるデータ量の合計を計算し、各通信部で送信される合計データ量の差またはばらつきを抑制するように通信部を切り換えてもよい。
ここで述べた4つのモード以外のモードを設定してもよい。モードの設定や変更は、装置の管理者が、図示しない専用のユーティリティを用いて行うことができる。
出力先設定部21は、ソケット情報記憶部32内のソケット情報から第1の送信フレーム処理部33によりフレームの出力先として決定される仮想通信部と、以下に述べる付加情報を、出力先選択部25に通知して、当該ソケット情報に関連するフレームを、仮想通信部の通信部のうちどの通信部から送信するかを問い合わせる。付加情報は、仮想通信部のモードに応じて、適切な情報を取得して、通知する。第1の送信フレーム処理部33がどのようにしてフレームの出力先を決定するかは後述する。
仮想通信部のモードがXOR負荷分散モードであれば、付加情報として、送信元と宛先のMACアドレス、IPアドレス、ポート番号を、出力先選択部25に通知する。そして、出力先設定部21は、出力先選択部25によって選択された通信部の識別情報を受け取り、ソケット情報の出力通信部識別子として、この通信部の識別情報を設定する。なお、仮想通信部のモードがフェイルオーバーモードであれば、予め出力先選択部には優先して使用される通信部が設定されているから、付加情報を伝達する必要はない。
出力先設定部21は、第1の受信フレーム処理部31、第2の送信フレーム処理部23、状態管理部26、出力先選択部25からの指示を契機に、出力先選択部25に問い合わせることにより、使用する通信部の識別情報を取得し、ソケット情報に出力通信部識別子を設定する。
より詳細に、第1の受信フレーム処理部31は、TCPのコネクション状態がESTABLISHED状態になった場合に、そのソケット情報に出力通信部識別子を設定するように、出力先設定部21に指示する。
第2の送信フレーム処理部23は、アプリケーション24からデータの送信指示があった場合に、そのデータを送信するソケットのソケット情報に出力通信部識別子を設定するように、出力先設定部21に指示する。
状態管理部26は、通信部の状態の変化(通信可から通信不可への変化など)を検知した際に、当該通信部、または当該通信部と同じ仮想通信部に属する他の通信部、またはこれらの両者を出力先としている全てのソケット情報の出力通信部識別子を再設定するように、出力先設定部21に指示する。
出力先選択部25は、仮想通信部のモードの変更がなされた時や、仮想通信部を構成する通信部に変更があった場合(例えば通信部が増減した場合)に、該当する全てのソケット情報(例えば、当該仮想通信部内の通信部を出力先に指定している全てのソケット情報)の出力通信部識別子を、再設定するよう出力先設定部21に指示する。また、出力先選択部25においてフェイルオーバーモードで優先する通信部が管理者により変更された場合や、送信負荷分散モードと送受信負荷分散モードであらかじめ設定された時間(10秒など)が経過した場合も、同様にして、該当する全てのソケット情報の出力通信部識別子を再設定するよう出力先設定部21に指示する。
第2の送信フレーム処理部23は、アプリケーション24、第2の受信フレーム処理部22、または状態管理部26からの指示により、フレームを送信するための処理を行う。
例えば、第2の送信フレーム処理部23は、アプリケーション24からは、コネクション確立などのイベントの指示が通知される。また、コネクション確立後にデータ送信の指示が通知される。
また、第2の送信フレーム処理部23は、第2の受信フレーム処理部22からは、第2の受信フレーム処理部22でICMPのエコー要求パケットを受信した場合などにICMPのエコー応答パケットを送信する指示が通知される。また、第2の受信フレーム処理部22でTCPのSYNセグメントを受信した場合に、SYN/ACKセグメントを送信するよう指示が通知される。
また、第2の送信フレーム処理部23は、状態管理部26からは、各通信部の通信状態を調べるためにARPパケットの送信指示が通知される。
第2の送信フレーム処理部23は、ソケット情報記憶部32にアクセスできる。第2の送信フレーム処理部23は、必要に応じて、ソケット情報の値を設定する機能を備える。例えば、シーケンス番号や、MTU、送信データを格納するアドレス、送信データの長さ等を設定する。
第2の送信フレーム処理部23は、指示されたフレームの送信にどの通信部を用いるべきか、すなわち、フレームの出力先を決定する。これは一般的にルーティングと呼ばれる動作で、基本的にはルーティングテーブルと呼ばれるテーブルに記載されているルールに従って、複数の通信部のうち、どの通信部を用いてフレームの送信を行うかを決定する。ここでいう複数の通信部は、仮想通信部、および仮想化されていない通信部の両方を指す。例えば通信部0と通信部1が1つの仮想通信部0として扱われ、通信部2および通信部3が仮想化されていない(どの仮想通信部にも属していない)とすると、複数の通信部とは、仮想通信部0と、通信部2および通信部3の3つである。
ルーティングテーブルは、例えば、宛先IPアドレスと同じネットワークセグメントに属する通信部があれば、その通信部を用いて通信し、同じセグメントに属する通信部がなければ、予め定めた通信部を用いてデフォルトゲートウェイと通信するよう設定されている。デフォルトゲートウェイとは、送信すべき経路がわからない時に使用されるゲートウェイのことである。
ルーティングの結果、仮想通信部を用いて通信を行うと判定された場合には、出力先設定部21に、出力先選択部25に問い合わせて出力通信部識別子を設定するように指示する。出力先設定部21は、出力先選択部25に仮想通信部内のどの通信部(スレーブ)を使用するかを問い合わせ、出力先選択部25から指定された通信部の識別情報を、ソケット情報の出力通信部識別子に設定する。あるいは、第2の送信フレーム処理部23が、出力先選択部25に問い合わせて出力通信部識別子を取得し、出力先設定部21に、当該取得した出力通信部識別子をソケット情報に設定するよう指示してもよい。仮想通信部を用いる場合は、このように出力先選択部25を用いて、出力する通信部を決定する。
なお、第2の送信フレーム処理部23または出力先設定部21は、出力先選択部25に問い合わせる際には、仮想通信部の識別情報、および当該仮想通信部のモードに応じて必要な情報を、出力先選択部25に通知する。必要な情報として、例えば、送信元と宛先のMACアドレス、送信元と宛先のIPアドレス、送信元と宛先のTCPポート番号の全部または一部などがある。
一方、第2の送信フレーム処理部23は、ルーティングの結果、仮想通信部ではない通信部を用いて通信を行うと判定した場合には、その通信部を、出力する通信部として決定する。
第2の送信フレーム処理部23は、こうして決定した通信部(仮想通信部を用いて通信を行うと判定した場合は、出力先選択部25に問い合わせて得た通信部、仮想通信部ではない通信部を用いて通信を行うと判定した場合には、その通信部)に対応した送信キューに、フレームの送信リクエストを追加する。
送信キュー0〜3は、それぞれ通信部1〜3に対応している。送信キュー0〜3は、第1の受信フレーム処理部31、第2の送信フレーム処理部23、または第1の送信フレーム処理部33からの送信リクエストを受付け、受け付けた送信リクエストを内部で保持する。送信キューは、内部で保持している送信リクエストを、FIFO(First In First Out)で第1の送信フレーム処理部33に出力する。
図5(A)に、送信キューの構成、図5(B)に送信リクエストの構成を示す。
送信リクエストは、タイプフィールドとその他のフィールドとを含み、タイプフィールドの値(タイプ値)に応じて、その他のフィールドが異なる。その他のフィールドとしては、ソケット情報のアドレス、送信する確認応答番号、送信するウィンドウサイズ、フレームのアドレス、フレームの長さがあり、タイプ値に応じて、これらのうち1つもしくは複数のフィールドを用いる。図では、便宜上、これらのすべてのフィールドを示している。
タイプには“DATA”、“FRAME”、“ACK”がある。“DATA”は、TCPセグメントでデータの送信を指示するタイプであり、“FRAME”は第2の送信フレーム処理部23で生成されたフレームの送信を指示するタイプであり、“ACK”は、ACKセグメントの送信を指示するタイプである。“DATA”、“ACK”の場合、送信するフレームは、第1の送信フレーム処理部33でソケット情報を利用して生成されるが、“FRAME”の場合は、第2の送信フレーム処理部23でソケット情報を利用してフレームが生成される。
上述したように、タイプ値ごとに、使用する送信リクエストのフィールドが異なる。タイプがDATAの場合には、ソケット情報のアドレスのみが使用される。タイプがFRAMEの場合には、フレームのアドレスと、フレームの長さのみが使用される。タイプがACKの場合には、ソケット情報のアドレスと、送信する確認応答番号と、送信するウィンドウサイズのみが使用される。
第1の受信フレーム処理部31からは、タイプがACKの送信リクエストが入力される。この際、第1の受信フレーム処理部31は、送信リクエストに、ACKセグメントを送信するソケット情報のアドレス(図4(A)参照)と、送信する確認応答番号と、送信するウィンドウサイズを設定する。第1の受信フレーム処理部31は、ソケット情報の出力通信部識別子が指す通信部に対応する送信キューに、この送信リクエストを出力する。第1の受信フレーム処理部31は、TCPのデータの受信処理を行った場合などに、この送信リクエストを生成する。
また、第2の送信フレーム処理部23からは、タイプがFRAMEの送信リクエストが入力される。この際、第2の送信フレーム処理部23は、送信リクエストに、送信するフレームが格納されているアドレスとフレームの長さを設定する。第2の送信フレーム処理部23は、アプリケーション24、第2の受信フレーム処理部22、または状態管理部26からの指示で、例えばARPパケットやICMPパケット、TCPのSYNセグメントや、SYN/ACKセグメントなどのフレームを生成し、このフレームの送信リクエストを生成する。
さらに、第2の送信フレーム処理部23からは、タイプがDATAの送信リクエストが入力される。この際、第2の送信フレーム処理部23は、ソケット情報に、アプリケーションから指定された送信データのアドレスと長さを設定し、さらにソケット情報の出力通信部識別子を設定するよう出力先設定部21に指示し、そして送信リクエストのソケット情報のアドレスフィールドに、そのソケット情報のアドレスを設定する。第2の送信フレーム処理部23は、アプリケーション24からのデータ送信指示で、アプリケーション24の指定したデータの送信リクエストを生成する。
第1の送信フレーム処理部33は、各送信キューを、所定の順序で順番に選択し、選択した送信キューから送信リクエストを取り出す。そして、取り出した送信リクエストに含まれるタイプに応じたフレームを、当該送信キューに対応する通信部に出力する。第1の送信フレーム処理部33は、最後まで選択したら、また最初から上記所定の順序で選択することを繰り返す。このような循環的な選択方法を、ラウンドロビンと呼ぶ。
図6に第1の送信フレーム処理部33の動作例のフローチャートを示す。第1の送信フレーム処理部33は、各送信キューからラウンドロビンで送信リクエストを取り出す(S101)。
第1の送信フレーム処理部33は、取り出した送信リクエストのタイプが“DATA”の場合、送信リクエストからソケット情報のアドレスを読み出し、ソケット情報記憶部32から該当するソケット情報を読み出す(S131)。ソケット情報には、送信データの格納されたアドレスと送信データの長さが設定されており、長さが0でなければ、データの送信を行うことを決定する(S132、S133のYES)。
第1の送信フレーム処理部33は、ソケット情報から、相手のウィンドウサイズやMTU、輻輳ウィンドウサイズ(図4において図示せず)などを読み出し、送信可能なバイトを算出して、その分のデータをペイロードにのせ、TCPのデータセグメントを生成し、さらにIP、イーサネットプロトコルのヘッダ生成やチェックサムなどの処理を行うことでフレームを生成する(S134)。
第1の送信フレーム処理部33は、データを送信した分、送信した最大のシーケンス番号を加算したり、送信データの格納されたアドレスを進めたり、送信データの長さを減算するなどソケット情報を更新する(S135)。また、第1の送信フレーム処理部33は、送信したTCPセグメントのデータ量であるデータバイト数をカウントし、ソケット情報に記憶する機能も備える。第1の送信フレーム処理部33は、送信キューに対応する通信部に、生成したフレームを出力する(S136)。ソケット情報の更新ステップとフレームの出力ステップの順序は逆でもよいし、並行して行ってもよい。
第1の送信フレーム処理部33は、フレームを出力すると、当該ソケット情報と同じアドレスを、ソケット情報のアドレスフィールドに設定した、タイプがDATAの送信リクエストを生成する。この際、送信リクエストには、ステップS135で更新されたソケット情報に基づき、送信データのアドレスと長さを設定する。第1の送信フレーム処理部33は、生成した送信リクエストを、当該ソケット情報の出力通信部識別子が指す通信部に対応する送信キューに出力する(S137)。ステップS133〜S137までの処理を、送信データがなくなるまで繰り返す。
ステップS133〜S137までの処理により、出力通信部識別子が更新されない限り、同じ送信キューおよび通信部が繰り返し使用されて、データ送信が行われる。ただし、通信部の通信不可、仮想通信部のモード変更などの理由で、ソケット情報の出力通信部識別子が、出力先設定部21により途中で、更新された場合は、使用される送信キューおよび通信部が変更される可能性がある。このように、同じソケットを使いつつも、使用する通信部を切り換えることができる。
一方、第1の送信フレーム処理部33は、ステップS101で取り出した送信リクエストのタイプが“ACK”の場合、送信リクエストから、ソケット情報のアドレスと、送信する確認応答番号、送信するウィンドウサイズを読み出す。ソケット情報のアドレスから該当するソケット情報を読み出し(S121)、読み出したソケット情報に含まれる送信した最大のシーケンス番号と、送信リクエストから読み出した、送信する確認応答番号、送信するウィンドウサイズを使って、TCPのACKセグメントを生成し、さらにIP、イーサネットプロトコルのヘッダ生成やチェックサム計算を行ってフレームを生成する(S122)。第1の送信フレーム処理部33は、生成したフレームを、送信リクエストを取り出した送信キューに対応する通信部に出力する(S123)。
また、第1の送信フレーム処理部33は、ステップS101で取り出した送信リクエストのタイプが“FRAME”の場合、送信リクエストからフレーム情報として、フレームのアドレスと、フレームの長さを取り出す(S111)。フレーム情報に従ってフレームを読み出し、読み出したフレームを、送信リクエストを取り出した送信キューに対応する通信部に出力する(S112)。
以上、本実施形態によれば、CPU121の出力先設定部21によりソケット情報の出力通信部識別子を設定し、それを参照して、通信カード131(ハードウェア)の第1の送信処理部と第1の受信フレーム処理部31が送信リクエストを出力する送信キューを決定する。ソケット情報の出力通信部識別子を変更することで、同じソケットでも使用する通信部を容易に切り換えることができる。つまり、使用する通信部の選択(出力通信部識別子の設定)などの処理をCPU121上で動作するソフトウェアで動作させ、通信カード131(ハードウェア)は、CPU121で選択された通信部からフレームが出力されるように、送信リクエストを入力する送信キューを切り替えるよう動作する。これにより、ハードウェアの回路規模増大を抑えながら、耐障害性の向上や負荷分散と通信速度の向上を実現できる。
(第2の実施形態)
図7は、第2の実施形態に係わる通信システムのブロック図である。
本実施形態では、第1の実施形態に加えて、通信カード131側に、通信部の使用順序を定義した出力先切替えテーブル(出力先切替え情報)34を備える。第1の送信フレーム処理部33が、送信リクエストを送信キューから取り出して処理した後、この出力先切替えテーブル34に従って、ソケット情報の出力通信部識別子を書き換える。書き換え後のソケット情報の出力通信部識別子で指定された通信部に対応する送信キューに、当該ソケットで送信する次のフレームを送信するための送信リクエストを生成して出力する。このように同じソケットで次に送信するフレームの送信リクエストを再び送信キューに出力することを、送信リクエストを書き戻す、と表現することがある。
この出力先切替えテーブル34は、一例として、図11に示すように定義されるFPGAで実現されるレジスタとして構成することができる。通信部の個数と同じ数のレジスタが存在し、各レジスタにはアドレスが設定されており、それぞれ図示のレジスタ名が付与されている。レジスタは32ビット幅のデータを指定可能であり、それぞれ読み出しおよび書き込みの両方が可能である。ここでは、“next_to_enqueue0”、“next_to_enqueue1”、“next_to_enqueue2”、“next_to_enqueue3”の4つのレジスタ名が示される。
“next_to_enqueue0”のレジスタは、読み出したソケット情報の出力通信部識別子が0であった場合に、送信リクエストを書き戻す先の送信キューの識別子(通信部の識別子)を格納する。
“next_to_enqueue1”のレジスタは、読み出したソケット情報の出力通信部識別子が1であった場合に、送信リクエストを書き戻す先の送信キューの識別子(通信部の識別子)を格納する。
“next_to_enqueue2”のレジスタは、読み出したソケット情報の出力通信部識別子が2であった場合に、送信リクエストを書き戻す先の送信キューの識別子(通信部の識別子)を格納する。
“next_to_enqueue3”のレジスタは、読み出したソケット情報の出力通信部識別子が3であった場合に、送信リクエストを書き戻す先の送信キューの識別子(通信部の識別子)を格納する。
上記のレジスタ定義に基づき、仮想通信部でラウンドロビンモードを行う場合の動作を説明する。ラウンドロビンモードは、仮想通信部内の通信部間で、フレームを送信するたびに、通信部を順番に切り替えるモードである。
図8に、通信部0、通信部1、通信部2、通信部3の4つの通信部を含む仮想通信部でラウンドロビモードを行う場合の動作例を示す。図の左には、各レジスタの値の例が示されている。出力先切替えテーブルに従ってレジスタの値を参照することで、次に使用する通信部(送信キュー)が特定できる。next_to_enqueue0に1、next_to_enqueue1に2、next_to_enqueue2に3、next_to_enqueue3に0が指定されている。この場合、例えば、ある1つのソケットについて着目すると、送信リクエストが最初に送信キュー0に格納された場合、出力先切替えテーブルに従って、通信部0、通信部1、通信部2、通信部3、通信部0、通信部1…といったように、順次、使用する通信部が切り換えられて、TCPセグメントを含むフレームが送信される。
より詳細な第1の送信フレーム処理部33の動作として、送信リクエストを各送信キューからラウンドロビンで取り出し、そのタイプが“DATA”の場合、取り出した送信キューに対応する通信部に、データセグメントを含むフレームを出力する。この後、ソケット情報のシーケンス番号、送信データのアドレスと長さ等を更新するとともに、出力先切替えテーブル34に従って、次に使用する通信部を特定し、ソケット情報の出力通信部識別子を書き換える。そして、書き換えた出力通信部識別子が指す通信部に対応する送信キューに、次にフレームを送信するためのタイプが“DATA”でソケット情報のアドレスフィールドには同じソケット情報のアドレスを指定した送信リクエストを追加する。この際、送信リクエストにおける送信データのアドレスと長さを、更新後のソケット情報に基づき再設定する。タイプが“ACK”の送信リクエストを取り出した場合は、取り出した送信キューに対応する通信部に、ACKセグメントを含むフレームを出力した後、ソケット情報のシーケンス番号を更新するとともに、出力先切替えテーブル34に従って、ソケット情報の出力通信部識別子を書き換える。これによりTCPのセグメントを送信するたびに、通信部を切り替えて送信を行うことができる。
具体的な動作例として、図8に示すように、送信キュー0からタイプが“DATA”送信リクエストを取り出した場合(S201)、フレームを出力し(S202)、ソケット情報の出力通信部識別子を出力先切替えテーブル34に従って1に書き換えた後、送信データの格納されたアドレスや送信データの長さなどの、ソケット情報の他のフィールドを更新し、同じソケットの次に送信するデータフレームの送信リクエストを送信キュー1に追加する(S203)。この送信リクエストは、ラウンドロビンに従って、後に送信キュー1から取り出されることになる(S204)。この送信リクエストに基づき、フレームを出力し(S205)、ソケット情報の出力通信部識別子を出力先切替えテーブル34に従って2に書き換え、ソケット情報の他のフィールドを更新し、次のフレームの送信のため、同じソケットの、タイプが“DATA”の送信リクエストを送信キュー2に追加する(S206)。この際、送信リクエストの送信データのアドレスと長さを、更新後のソケット情報に基づき再設定する。以降、同様にして、使用する送信キューおよび通信部が順次、循環的に切り換えられていく(S207、S208、S209、S210、S211、S212)。
ここで、例えば、データ送信中に通信部2が、リンク切断により通信できなくなったとする。この場合には、状態管理部26がそのことを検知し、出力先選択部25によりnext_to_enqueue1に3を指定するように、出力先切替えテーブル34を更新する。この後、出力先設定部21により、ソケット情報の出力通信部識別子を、通信部2以外の通信部を指すように書き換える。更新後の出力先切替えテーブル34を用いて、第1の送信フレーム処理部33が処理を行うと、図9に示すような動作となる。すなわち、送信キュー1から送信リクエストが取り出された場合(S231)、これまでと同様に、この送信リクエストに基づき、フレームを出力する(S232)。次に、ソケット情報の出力通信部識別子を出力先切替えテーブル34に従って、(2ではなく)3に書き換え、ソケット情報の他のフィールドを更新し、同じソケットの次に送信するデータフレームの送信リクエストを(送信キュー2ではなく)送信キュー3に追加する(S233)。この動作により、通信部0、通信部1、通信部3、通信部0、・・・といったように、通信ができない通信部2を除いて、ラウンドロビンで送信が行われる。通信部2が、再び通信可能な状態に戻った場合は、状態管理部26がそのことを検知し、出力先選択部25により、next_to_enqueue1を2に指定する。これにより、再度、通信部2も使用してラウンドロビンで送信ができる。
図8および図9では、通信部0〜3を1つの仮想通信部としてラウンドロビンモードで動作させる場合を示した。図10に、通信部0と通信部1を仮想通信部0としてラウンドロビンモードで、通信部2と通信部3を仮想通信部1としてXOR負荷分散モードで動作させる例を示す。
この場合は、図10の左に示すように、出力先切替えテーブル34を、next_to_enqueue0は1、next_to_enqueue1は0、next_to_enqueue2は2、next_to_enqueue3は3と設定すればよい。仮想通信部0を使った通信では、通信部0と通信部1が交互に切り換えられるが、仮想通信部1を使った通信では、通信部の切り替えは行われない。
より詳細に、仮想通信部0を使った通信では、送信キュー0から送信リクエストを取り出し(S241)、通信部0からフレームを送信した後(S242)、同じソケットの次に送信するデータフレームの送信リクエストが送信キュー1に追加される(S243)。後に、ラウンドロビンでこの送信リクエストが送信キュー1から取り出され(S244)、通信部1からフレームが送信され(S245)、同じソケットの次の送信するフレームの送信リクエストが送信キュー0に追加される(S246)。このように、通信部0、通信部1、通信部0、通信部1・・・といったように、ラウンドロビンで負荷分散しながら、フレームの送信を行うことができる。なお、ここでは説明を省略したが、これらの処理でも、前述と同様に、出力先切替えテーブル34に従って、ソケット情報が更新される。
また、仮想通信部1を用いた通信では、出力先設定部21によって設定されたキューに、同じソケットの次の送信するフレームの送信リクエストが書き戻される。よって、出力先選択部25が設定したルール通りに負荷分散させることができる。
以上、本実施形態によれば、出力先選択部25で出力先切替えテーブル34に出力通信部識別子の書き換えのルールを設定し、第1の送信フレーム処理部33でフレーム送信毎に、出力先切替えテーブル34に従って、該当するソケット情報の出力通信部識別子を書き換える。そして、書き換え後の出力通信部識別子が示す通信部に対応する送信キューに、同じソケットの次に送信するフレームの送信リクエストを追加する。これにより、FPGAの実装回路規模の増大を抑えながら、仮想通信部にラウンドロビンモードを適用できる。また、耐障害性の向上や負荷分散と通信速度の向上を実現できる。
(変形例1)
第1および第2の実施形態の通信カード131に搭載されるFPGAの代わりに、マイクロプロセッサやDSP(Digital Signal Processor)、GPU(Graphics Processing Unit)、ASIC(Application Specific Integrated Circuit)を用いてもよい。また、ソケット情報記憶部32は、通信カード131に搭載されるメモリの代わりに、システムメモリ111に設けてもよい。
(変形例2)
また、第1および第2の実施形態において、各通信部は、各々異なるデータリンク層プロトコルを用いることが可能である。例えば、全ての通信部がイーサネットプロトコルを用いてもよいし、3つの通信部がイーサネットプロトコルで、1つの通信部はIEEE802.11acなどの無線LAN規格のプロトコルを用いてもよい。
(変形例3)
また、第1および第2の実施形態では、送信負荷分散モードや送受信負荷分散モードで動作する場合に、ソケット情報に送信バイト数と受信バイト数を格納する例を示した。送信負荷分散モードや送受信負荷分散モードを実現する別の例として、以下の方法も可能である。通信カード131上のメモリを用いて、宛先IPアドレスごとのハッシュテーブルを作成し、第2の送信フレーム処理部23または第1の送信フレーム処理部33で、宛先IPアドレスごとに送信バイト数または受信バイト数またはこれらの両方をカウントしてハッシュテーブルに格納する。状態管理部26および出力先選択部25は、この情報を用いて負荷分散を行ってもよい。
(変形例4)
また、第1および第2の実施形態では、TCPを用いる例を示したが、UDPなどの別のプロトコルを用いることも可能である。UDPでは、コネクションの形成を行わず、ACKパケットの送信もないため、ソケット情報の出力通信部識別子を用いなくとも、ラウンドロビンモードで動作させることができる。
ソケット情報の出力通信部識別子を用いない場合、出力通信部識別子の代わりに送信キューの識別子を用いて動作させる。最初は、例えば、あるソケット情報に対して決定された仮想通信部に対し、出力先選択部25が選択した通信部、あるいは任意に決めた通信部に対応する送信キューに送信リクエストを追加する。第1の送信フレーム処理部33は、各送信キューから送信リクエストを取り出し、UDP、IPおよびイーサネットプロトコルの処理を行って、取り出した送信キューに対応する通信部にフレームを出力する。この時、送信するべきUDPデータグラムが複数のIPフラグメントパケットに分割されて送信される場合には(UDPソケットにMTUよりも大きなデータを書き込んだ場合など)、出力先切替えテーブル34に従って(第2の実施形態の場合)定まる送信キューに、同じソケットの次にフレームを送信するための送信リクエストを追加する(ソケット情報の出力通信部識別子は用いない)。このようにすることで、UDPデータグラムが複数のIPのフラグメントパケットに分割されて送信される場合にも、IPのフラグメントパケットの送信ごとに、通信部を切り替えて送信できる。第1の実施形態の場合で、UDPの送信を行い、使用する通信部を変える場合は、次の送信リクエストを生成する前に送信リクエストの出力先を変更後の送信キューに切り換えればよい。
なお、例えばソケット情報における送信データのアドレスと長さを、配列やリストで保持できるようにしておき、アプリケーション24からUDPデータグラムの送信要求を受けると、当該配列やリストに追加していき、第1の送信フレーム処理部33が当該配列やリストの要素を先頭側から順に、送信処理を行うようにしてもよい(TCPでも同様にすることも可能である)。
(変形例5)
第1および第2の実施形態では、送信キューの個数は通信部の個数と同一であったが、通信部の個数と送信キューの個数は異なってもよい。例えば、1つの送信キューと4つの通信部などの構成をとり、ソケット情報の出力通信部識別子を用いて制御してもよい。
(変形例6)
また、第1および第2の実施形態では、第1の送信フレーム処理部33が1個である例を示したが、例えば、通信部4個に対して、第1の送信フレーム処理部33を2個にし、それぞれが、異なる2つの通信部に対してフレームを出力する構成にしてもよい。
(変形例7)
また、第2の実施形態では、出力先切替えテーブルをFPGAのレジスタで実現する例を示したが、これはシステムメモリ111や通信カードのメモリで実現してもよい。これらレジスタ、システムメモリ111、通信カードのメモリは、出力先切替えテーブル(出力先切替え情報)を記憶する記憶装置の一例である。
なお、この通信装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、通信装置の各処理ブロックを、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現できる。このとき、通信装置は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、通信装置およびCPU内の記憶部および送信キューは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体などを適宜利用して実現できる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
101:映像配信サーバ
111:システムメモリ
121:CPU
131:通信カード
141:ストレージ
151:チップセット
201:ネットワーク
301:視聴端末
21:出力先設定部
22:第2の受信フレーム処理部
23:第2の送信フレーム処理部
24:アプリケーション
25:出力先選択部
26:状態管理部
31:第1の受信フレーム処理部
32:ソケット情報記憶部
33:第1の送信フレーム処理部

Claims (19)

  1. ネットワークに接続される複数の通信部を備えた通信装置に対するプロセッサであって、
    前記通信装置における前記複数の通信部の状態を管理する管理部と、
    前記通信部の状態に基づき、前記通信装置が前記ネットワークを介して通信する相手装置に対して生成されたソケット情報に対する通信部を前記複数の通信部から選択し、選択した通信部の識別情報を、前記ソケット情報と対応づけて、第1記憶装置に格納し、前記第1記憶装置における前記ソケット情報に対応する前記識別情報を、前記複数の通信部の状態に基づき更新する選択部を備え、
    前記ソケット情報に関連するフレームの送信リクエストに基づく前記フレームの送信処理前記第1記憶装置において前記ソケット情報に対応する前記識別情報が示す前記通信部を用いて行うように前記通信装置を制御する、プロセッサ。
  2. 前記プロセッサは、前記フレームの送信リクエスト毎に前記ソケット情報に対応する前記識別情報が示す前記通信部を用いて前記フレームの送信処理を行うように前記通信装置を制御する
    請求項1に記載のプロセッサ。
  3. 前記選択部は、2つ以上の通信部を前記通信装置が予め定めた使用順序で用いるように前記識別情報を更新する
    請求項1ないし2のいずれか一項に記載のプロセッサ。
  4. 前記ソケット情報に関連するフレームにより送信または送受信されるデータ量を計算する手段を備え、
    前記選択部は、前記手段により計算されるデータ量に基づき、前記複数の通信部間で送信または送受信の負荷が分散するように、前記識別情報を更新する
    請求項1ないしのいずれか一項に記載のプロセッサ。
  5. 前記管理部は、前記複数の通信部のそれぞれで送信または送受信されるデータ量を管理し、
    前記選択部は、前記管理部で管理される各通信部の送信または送受信のデータ量に基づき、前記通信部間で送信または送受信の負荷が分散されるように、前記識別情報を更新する
    請求項1ないしのいずれか一項に記載のプロセッサ。
  6. 前記管理部は、前記複数の通信部の通信可否をそれぞれ監視し、
    前記選択部は、各通信部の通信可否に応じて、前記識別情報を更新する
    請求項1ないしのいずれか一項に記載のプロセッサ。
  7. 前記識別情報が示す通信部で前記フレームの送信を行うように前記通信装置を設定する
    請求項に記載のプロセッサ。
  8. 前記ソケット情報は、前記通信装置のIPアドレス、前記相手装置のIPアドレス、前記通信装置のポート番号、前記相手装置のポート番号の組を含む
    請求項1ないしのいずれか一項に記載のプロセッサ。
  9. ネットワークを介して相手装置と通信する通信装置であって、
    前記ネットワークに接続される複数の通信部と、
    前記相手装置に対して生成されたソケット情報と、前記複数の通信部からプロセッサにより選択された通信部の識別情報とを対応づけて格納し、前記識別情報は、前記プロセッサにより前記複数の通信部の状態に基づき更新される第1記憶装置にアクセスする手段と、
    前記ソケット情報に関連するフレームの送信リクエストに基づき、前記フレームを送信する通信部を、前記第1記憶装置に格納されている前記ソケット情報に対応する前記識別情報に基づき決定し、決定した通信部から前記フレームの送信処理を行う送信フレーム処理部と
    を備えた通信装置。
  10. 前記送信フレーム処理部は、前記フレームの送信リクエスト毎に、前記フレームを送信する通信部を、前記ソケット情報に対応する前記識別情報に基づき決定する
    請求項9に記載の通信装置。
  11. 前記プロセッサにより選択された通信部は、前記プロセッサが前記複数の通信部の通信可否をそれぞれ監視し、各通信部の通信可否に応じて選択した通信部である
    請求項9または10に記載の通信装置。
  12. 前記複数の通信部に対応し、前記ソケット情報に関連するフレームの送信リクエストを格納する複数の送信キューを備え、
    前記ソケット情報に関連するフレームの送信リクエストを、前記識別情報が示す前記通信部に対応する送信キューに格納し、
    前記送信フレーム処理部は、各送信キューから取り出した送信リクエストにしたがって、各送信キューに対応する通信部を用いて、前記ソケット情報に関連するフレームの送信を行う
    請求項に記載の通信装置。
  13. 前記複数の通信部に対応し、前記ソケット情報に関連するフレームの送信リクエストを格納する複数の送信キューを備え、
    前記ソケット情報に関連するフレームの送信リクエストを、前記識別情報が示す前記通信部に対応する送信キューに格納し、
    前記送信フレーム処理部は、各送信キューから取り出した送信リクエストにしたがって、各送信キューに対応する通信部を用いて、前記ソケット情報に関連するフレームの送信を行い、前記送信リクエストの処理後、前記第1記憶装置にアクセスして、前記ソケット情報に関連する前記識別情報を取得し、前記識別情報に示される前記通信部に対応する送信キューに、前記ソケット情報に関連する次のフレームの送信リクエストを出力する
    請求項に記載の通信装置。
  14. 前記第1記憶装置は、前記通信装置内に設けられた
    請求項9ないし13のいずれか一項に記載の通信装置。
  15. 通信カードとして構成された
    請求項9ないし14のいずれか一項に記載の通信装置。
  16. 前記ソケット情報は、前記通信装置のIPアドレス、前記相手装置のIPアドレス、前記通信装置のポート番号、前記相手装置のポート番号の組を含む
    請求項9ないし15のいずれか一項に記載の通信装置。
  17. ネットワークを介して相手装置と通信を行う通信システムであって、
    前記ネットワークに接続される複数の通信部を有する通信装置と、
    前記通信装置における前記複数の通信部の状態を管理する管理部と、前記相手装置に対して生成されたソケット情報に対して、前記複数の通信部から通信部を選択し、選択した通信部の識別情報を、前記ソケット情報と対応づけて、第1記憶装置に格納し、前記第1記憶装置における前記ソケット情報に対応する前記識別情報を、前記複数の通信部の状態に基づき更新する選択部と、含むプロセッサと、を備え、
    前記通信装置は、前記ソケット情報に関連するフレームの送信リクエストに基づき、前記フレームを送信する通信部を、前記第1記憶装置に格納されている前記ソケット情報に対応する前記識別情報に基づき決定し、決定した通信部から前記フレームの送信処理を行う送信フレーム処理部を含む
    通信システム。
  18. ネットワークを介して、相手装置と通信を行う通信方法であって、
    前記ネットワークに接続される複数の通信部を備えた通信装置における前記複数の通信部の状態を管理するステップと、
    前記相手装置に対して生成されたソケット情報に対して、前記複数の通信部から通信部を選択するステップと、
    選択した通信部の識別情報を、前記ソケット情報と対応づけて、第1記憶装置に格納するステップと、
    前記第1記憶装置における前記ソケット情報に対応する前記識別情報を、前記複数の通信部の状態に基づき更新するステップと、
    前記ソケット情報に関連するフレームの送信リクエストに基づき、前記フレームを送信する通信部を、前記第1記憶装置に格納されている前記ソケット情報に対応する前記識別情報に基づき決定し、決定した通信部から前記フレームの送信処理を行うステップと、
    を備えた通信方法。
  19. ネットワークに接続される複数の通信部を備えた通信装置における前記複数の通信部の状態を管理する管理ステップと、
    前記通信装置が前記ネットワークを介して通信する相手装置に対して生成されたソケット情報に対して、前記複数の通信部から通信部を選択するステップと、
    選択した通信部の識別情報を、前記ソケット情報と対応づけて、第1記憶装置に格納するステップと、
    前記第1記憶装置における前記ソケット情報に対応する前記識別情報を、前記複数の通信部の状態に基づき更新するステップと、
    前記ソケット情報に関連するフレームの送信リクエストに基づき、前記フレームを送信する通信部を、前記第1記憶装置に格納されている前記ソケット情報に対応する前記識別情報に基づき決定し、決定した通信部から前記フレームの送信処理を行うステップと、
    をコンピュータに実行させるためのプログラム。
JP2014094116A 2014-04-30 2014-04-30 プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム Expired - Fee Related JP6279970B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014094116A JP6279970B2 (ja) 2014-04-30 2014-04-30 プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム
US14/696,654 US20150319225A1 (en) 2014-04-30 2015-04-27 Processor, communication device, communication system, communication method and non-transitory computer readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014094116A JP6279970B2 (ja) 2014-04-30 2014-04-30 プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2015210793A JP2015210793A (ja) 2015-11-24
JP6279970B2 true JP6279970B2 (ja) 2018-02-14

Family

ID=54356097

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014094116A Expired - Fee Related JP6279970B2 (ja) 2014-04-30 2014-04-30 プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム

Country Status (2)

Country Link
US (1) US20150319225A1 (ja)
JP (1) JP6279970B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2024017943A (ja) * 2022-07-28 2024-02-08 株式会社東芝 サーバ装置、通信装置、及び制御システム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6314525B1 (en) * 1997-05-13 2001-11-06 3Com Corporation Means for allowing two or more network interface controller cards to appear as one card to an operating system
US6687758B2 (en) * 2001-03-07 2004-02-03 Alacritech, Inc. Port aggregation for network connections that are offloaded to network interface devices
US6970419B1 (en) * 1998-08-07 2005-11-29 Nortel Networks Limited Method and apparatus for preserving frame ordering across aggregated links between source and destination nodes
US6473424B1 (en) * 1998-12-02 2002-10-29 Cisco Technology, Inc. Port aggregation load balancing
US6512774B1 (en) * 1999-03-18 2003-01-28 3Com Corporation Fail over with multiple network interface cards
US20040158651A1 (en) * 2003-02-10 2004-08-12 Fan Kan Frankie System and method for teaming
US8447898B2 (en) * 2005-10-28 2013-05-21 Microsoft Corporation Task offload to a peripheral device
US7693044B2 (en) * 2005-12-15 2010-04-06 Nvidia Corporation Single logical network interface for advanced load balancing and fail-over functionality
KR100832544B1 (ko) * 2006-12-08 2008-05-27 한국전자통신연구원 Toe와 이더넷 네트워크 인터페이스 카드를 동시에 지원하는 소켓 구조체 생성 방법, 소켓 구조체를 이용한 통신 방법 및 소켓 구조체를 기록한 기록매체
JP2009053770A (ja) * 2007-08-23 2009-03-12 Ricoh Co Ltd 通信制御装置、通信制御方法及び通信制御プログラム
JP5168166B2 (ja) * 2009-01-21 2013-03-21 富士通株式会社 通信装置および通信制御方法
JP2011175531A (ja) * 2010-02-25 2011-09-08 Nec Corp 情報処理装置、および情報処理装置の制御方法
JP5060572B2 (ja) * 2010-03-09 2012-10-31 株式会社東芝 データ通信装置及び方法
CN103780419B (zh) * 2012-10-24 2018-12-21 中兴通讯股份有限公司 一种分布式链路聚合组业务切换方法和装置
US9154427B2 (en) * 2012-12-31 2015-10-06 Emulex Corporation Adaptive receive path learning to facilitate combining TCP offloading and network adapter teaming

Also Published As

Publication number Publication date
US20150319225A1 (en) 2015-11-05
JP2015210793A (ja) 2015-11-24

Similar Documents

Publication Publication Date Title
US10694005B2 (en) Hardware-based packet forwarding for the transport layer
US10484518B2 (en) Dynamic port type detection
JP6670109B2 (ja) ネットワーク内のスケーラブルなフロー及び輻輳制御
US8493839B2 (en) Method and system of teamed network adapters with offloaded connections
WO2020063298A1 (zh) 处理tcp报文的方法、toe组件以及网络设备
US20210329069A1 (en) Distributed resilient load-balancing for multipath transport protocols
US20170033992A1 (en) METHOD FOR PROCESSING VxLAN DATA UNITS
US9548930B1 (en) Method for improving link selection at the borders of SDN and traditional networks
WO2014023003A1 (zh) 控制数据传输的方法、装置和系统
US10009282B2 (en) Self-protecting computer network router with queue resource manager
US9356989B2 (en) Learning values of transmission control protocol (TCP) options
US8619631B2 (en) Information communication system, information communication method, node device included in information communication system and recording medium recording information processing program
TW201737664A (zh) 集群精確限速方法和裝置
CN112154633B (zh) 用于tcp通信的接收装置和传输装置
JP4658546B2 (ja) フェイルオーバーイベントをサポートするネットワーク状態オブジェクトの多重オフロード
US9832072B1 (en) Self-configuring computer network router
JP6279970B2 (ja) プロセッサ、通信装置、通信システム、通信方法およびコンピュータプログラム
US9847929B2 (en) Cluster and forwarding method
WO2024024280A1 (ja) 通信処理装置および通信方法
JP5752644B2 (ja) 通信路終端装置、データサイズ決定方法およびデータサイズ決定プログラム
JP2024051680A (ja) 通信制御装置、通信制御システム及び通信制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160912

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170707

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170714

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170912

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171219

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180118

R151 Written notification of patent or utility model registration

Ref document number: 6279970

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees