説明

制御装置、制御方法、及びプログラム

【課題】従来技術では、パケットの送信において、送信パケットのすべてをキューイングするために、大容量のメモリを備える必要があった。
【解決手段】制御装置は、通信装置の通信を制御する制御装置であって、パケットを送信する際に用いるヘッダの一部をキューイングして一時的に記憶し、キューに応じて第一の記憶手段から出力されるヘッダの一部に対応させて、送信するペイロードを第二の記憶手段から取得し、パケットを送信する際に、当該パケットに対応するヘッダの一部を用いてヘッダを生成し、生成されたヘッダと、当該ヘッダに対応する第二の記憶手段から取得されたペイロードとを合成して送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、TCP(UDP)/IP処理に係り、特に、パケット生成に必要なヘッダ要素やペイロードをキューに蓄積し、パケット送出の際にこれらを組み合わせることでパケットを合成し、パケットを送信する装置および方法に関するものである。
【背景技術】
【0002】
インターネットの普及に伴い、ネットワーク層からトランスポート層までの処理を専用のハードウェアやプロセッサによって行うネットワークプロセッサやTOE(TCP/IPオフロードエンジン)などのデバイスが使用される機会が増えている。これらのデバイスでは、ヘッダの生成やパケットの組み立てを専用のプロセッサやハードウェアを用いて行うことを特徴とする。そして、この特徴により、通信装置全体のメインプロセッサの負荷を高めることなく短時間でパケットの送受信処理を行うことができる。パケットの送信処理においては、一台の通信端末でソケットと呼ばれる複数の通信チャネルを持つ。送信端末では、生成したパケットをまず送信キューに蓄積する。そして、送信端末は、一般的に、通信チャネルにおいて割り当てられる帯域や遅延量において公平性を担保するようにスケジューリングを行い、そのスケジュールにしたがって各キューを送信する。
【0003】
例えば、特許文献1では、データ通信に用いる汎用アダプタが複数のバッファに分割されているパケットメモリを有する構成が記載されている。そして、特許文献1の技術では、1つのデータパケットを構成する複数のバッファのグループに対して待ち行列を構成してパケットの送信を行う。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平4−336729号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、パケットの送信において、送信パケットのすべてをキューイングするために、大容量のメモリを備える必要があった。また、パケットがキューに滞留することで、パケットの送信が決定してから実際に送出するまでのACKポインタの遅延が増大することがあり、さらなる大容量のメモリを備える必要が生じることがあった。
【0006】
本発明は上記課題に鑑みなされたものであり、パケットの送信においてキューイングに必要なメモリの量を削減することが可能な制御装置、制御方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するため、本発明による制御装置は、通信装置の通信を制御する制御装置であって、パケットを送信する際に用いるヘッダの一部をキューイングして一時的に記憶する第一の記憶手段と、キューに応じて前記第一の記憶手段から出力される前記ヘッダの一部に対応させて送信するペイロードを、第二の記憶手段から取得する取得手段と、前記パケットを送信する際に、当該ペイロードと、当該パケットに対応する前記ヘッダの一部とを用いてヘッダを生成する生成手段と、前記生成手段により生成されたヘッダと、当該ヘッダに対応する前記ペイロードとを合成して送信する送信手段と、を有する。
【発明の効果】
【0008】
本発明によれば、パケットの送信において必要なメモリ量を削減してパケット送信を行う技術を提供することができる。
【図面の簡単な説明】
【0009】
【図1】通信制御装置を含む通信装置のブロック図。
【図2】TCP状態遷移表を示す図。
【図3】プロトコルコントロールブロックの構造体定義の一例を示す図。
【図4】メモリバッファ(mbuf)の説明図。
【図5】TCP/IPヘッダの説明図。
【発明を実施するための形態】
【0010】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【0011】
図1は本発明の実施形態に係る通信制御装置を含む通信装置の構成例である。図1において、通信装置は、プロセッサ101、メモリ102、入出力部103、システムバス104、及び通信制御装置200を有する。すなわち、通信装置は通信制御装置200を含む。また、通信制御装置200は、ペイロード転送部105、送信ヘッダキュー106、送信ヘッダレジスタ107、セレクタ108を有する。通信制御装置200は、さらに、チェックサム算出部109、ヘッダ生成部110、パケット合成部111、フレーム送信部112、受信管理部113、信号受信部114を有する。なお、115は通信メディアである。一般的な通信端末は受信に用いる構成を有するが、説明の簡単のため、図1では直接言及しない受信系の図示を省略し、主として送信側の構成を示している。なお、本実施形態では、通信制御装置200におけるペイロード転送部105は、通信装置からデータを取得するが、これに限られず、外部の装置からデータを取得する構成をとってもよい。なお、本実施形態では、送信ヘッダキュー106は送信ヘッダの一部をキューイングして記憶する第一の記憶部として動作する。また、通信装置のメモリ102は送信するデータであるペイロードを記憶する第二の記憶部として動作するものとする。
【0012】
図1では、システムバス104上にプロセッサ101、メモリ102、入出力部103、及び通信制御装置200が接続されている。プロセッサ101は、メモリ102に格納されているOSやアプリケーションなどのプログラムを実行し、メモリ102のデータ領域にアクセスして結果を書き込む。また、入出力部103によってプロセッサ101にプログラムの実行指示や結果の表示などを行うこともできる。通信制御装置200はプロセッサ101のプログラムの指示によって、メモリ102内のデータや、プロセッサ101が直接指定するデータをパケットとして送信することができる。
【0013】
図3は、プロトコルコントロールブロック(PCB)の構造体定義の一例を示した図である。これは、ネットワークで使用されるプロトコルを扱う際にUDPやTCPソケットに必要な様々な情報を保持するために各プロトコル層で使用される。この構造体の要素において、宛先のIPアドレス−Port番号、及びローカル(送信元)のIPアドレス−Port番号が格納される。この2組のIPアドレスとPort番号はソケットペアと呼ばれ、ソケットを確定する情報となる。TCPの場合はPCBのinp_inpcbからTCPCBというTCP用の構造体が呼び出され、シーケンス番号などが参照される。
【0014】
送信されるパケットは、メモリーバッファ(mbuf)に用意される。図4は一般的なmbufの説明図である。mbufはチェーン構造になっており、パケットの先頭からペイロードの最後まで連結されてパケットとして宛先に送られる。
【0015】
図5は、イーサネット(登録商標)に送信される、TCP/IPパケットのヘッダ、ペイロードの構造を示している。パケットの先頭に14オクテットのMACヘッダがあり、続いて20オクテットのIPヘッダ、さらにTCPヘッダが付加され、これらのヘッダとペイロードが一つのパケットとされる。なお、パケットの最後に、パケット全体に対する巡回冗長検査(CRC32)の結果であるFCS(フレームチェックシーケンス)が付与される。生成されたパケットは通信メディアへと送出され、通信の相手装置へと送信される。
【0016】
以下では、図1に示される構成例におけるパケット送信処理の動作について詳細に説明する。なお、システムが動作するオペレーティングシステムとしてUNIX(登録商標)ライクのOSを想定して本実施形態を説明する。
【0017】
図1における通信装置において、TCP/IPを使用して送信を開始するにあたり、ソケットを確立して用意する必要がある。これについて、図2を参照して説明する。図2はTCPの状態遷移表である。接続が確立した状態(ESTABLISHED、S5)とすることにより、ソケット通信が可能となる。
【0018】
まず、TCPの状態はCLOSED(S1)からコネクションの待ち受け状態であるLISTEN(S2)に遷移する。このとき、メモリ102に、図3に示すようなプロトコルコントロールブロックが用意される。LISTEN状態(S2)においては、図5の網掛け部分の情報が確定される。この確定されたヘッダ情報は送信ヘッダキュー106に事前情報として一時的に記憶される。このソケットを使用したパケットのデータ送信においては、この送信ヘッダキュー106の情報からヘッダが生成される。
【0019】
続いて通信制御装置200は、ソケットの確立先の相手装置に接続開始を示すSYNパケットを送出し、SYN_SENT状態(S4)に遷移する。なお、SYNパケットとは、TCPヘッダにおいてSYNフラグを「1」に設定しているパケットであり、SYNフラグは、図5における「Flags」の1要素として定義されるフラグである。SYN_SENT状態(S4)において、相手装置からSYNパケットに対する応答確認と、対応するコネクション要求であるSYN/ACKパケットを受信すると、受信パケットに対する応答確認であるACKパケットを送出する。これにより、ソケットのコネクションが確立したESTABLISHED状態(S5)になる。このような、通信制御装置200がSYNパケットを送信することにより接続を開始する手法をアクティブオープンという。
【0020】
一方、通信制御装置200は、SYNパケットを送らずに、相手装置からのSYNパケットを待ち受けてもよい。この場合、SYNパケットを受信すると、SYN/ACKパケットを相手装置へ返信し、SYN_RCVD状態(S3)へ遷移する。SYN_RCVD状態(S3)で相手装置からACKパケットを受信すると、接続が確立したESTABLISHED状態(S5)となる。このような手法を、パッシブオープンという。本実施形態では、アクティブオープンとパッシブオープンのどちらを用いてもよい。
【0021】
接続を閉鎖する場合、ESTABLISHED(S5)から、FIN_WAIT1(S6)またはCLOSE_WAIT(S10)へ進む。通信制御装置200がFINフラグを含むパケット(FINパケット)を送信すると、FIN_WAIT1(S6)状態となり、FINパケットに対するACKを待ち受ける。ACKを受信すると、FIN_WAIT2状態(S8)となり、この状態で相手装置からFINパケットを受信すると、ACKを返して所定の時間の経過を待ち(S9)、CLOSED状態(S1)へ遷移する。また、FIN_WAIT1状態(S6)において相手装置からFINパケットを受信すると、ACKを相手装置へ返して、閉鎖処理を実行する(S7)。そして、所定の時間の経過を待ち(S9)、CLOSED状態(S1)に遷移する。
【0022】
一方、ESTABLISHED状態(S5)において、相手装置からFINパケットを受信すると、ACKを返してCLOSE_WAIT状態(S10)へ遷移する。そしてFINパケットを相手装置へ送信すると、LAST_ACK状態(S11)へ遷移し、相手装置からのFINパケットへのACKを受信して、CLOSED状態(S1)へ遷移する。以上の動作によりTCPの状態遷移が定義される。
【0023】
TCPの状態がESTABLISHED(S5)となるまでに、図5における白抜き部分で示されるヘッダ情報であったAcknowledgement Number、Window Sizeが確定する。これらのソケット情報は、ソケット毎に図3に示すようなinpcb構造体とtcpcb構造体により管理される。これらのソケット情報のうち、パケットヘッダの生成に直接関与する一部の構造体の要素は送信ヘッダキュー106に転送される。送信ヘッダキュー106に転送される要素は、例えば、構造体inpcbにおけるIPアドレスやPort番号、フラグ情報、構造体tcpcbにおけるSequence番号、windowサイズなどである。転送されない要素は、例えば、IP Headerにおける、IPパケットの全長を示すTotal LengthやHeader Checksumである。また、例えば、TCP Headerにおける、相手装置が次に受け取るセグメントのシーケンス番号を示すAcknowledgement Numberや、Checksum、Windowフィールドも転送されない。すわなち、送信ヘッダキュー106は、ペイロードの内容の確定前に確定する要素について一時的に記憶し、ペイロードが確定されるまで、またはパケットが送出されるまで値が決定されない要素については記憶しない。
【0024】
送信されるパケットはmbufと呼ばれるメモリバッファに関連づけられる。mbufはメモリ102に格納される。mbufの構造を図4に示す。それぞれのmbufにある要素mh_nextにより、複数のmbufがチェーン状に連結される。先頭のmbuf_pkthdrはパケットのヘッダを示し、続くmbuf_dataはペイロード部分、すなわち送信するデータを示す。
【0025】
パケットのヘッダの一部の構成要素についてはコネクション生成時に送信ヘッダキュー106に送られ、一時的に記憶されている。そして、送信ヘッダキュー106は、パケット送信時に、送信が選択されたキューについて、対応するヘッダの構成要素をヘッダ生成部110に出力する。
【0026】
ペイロード転送部105は、mbuf_dataにペイロードが用意されると、メモリ102上に配置されたmbuf_dataのM_databufを取得し、パケット合成部111に転送する。転送時にペイロードのチェックサムをチェックサム算出部109によって算出し、算出結果をヘッダ生成部110へ出力する。この算出結果によって未確定であったTCPヘッダのChecksumフィールドが確定される。送信パケットに指定されるAcknowledgement Numberは、相手装置から受信したパケットから抽出された受信側のSequence Numberに基づいて、送信ヘッダレジスタ107を更新して得られる。
【0027】
パケット送信時には、最新のAcknowledgement Numberがヘッダ生成部110に送出され、ヘッダ生成部110は当該情報を含む送信ヘッダを生成してパケット合成部111に出力する。パケット合成部111は、ヘッダとペイロードが揃った時点で、パケットをフレーム送信部112へ出力し、当該送信フレームは通信メディア115に送出される。
【0028】
以上のように、本実施形態では、パケットのヘッダ情報をキューに蓄積し、ペイロードの転送時にヘッダを完成させて、パケットが送出される。このため、ペイロードをバッファリングしておくための送信キューが不要となり、通信制御装置におけるメモリの量を削減することができる。また、送信時にヘッダを完成させることに伴い、常に最新のAcknowledge Numberを送信することができる。
【0029】
また、上述の構成に加えて、受信したACKを解析して、送信済みの送信ヘッダキューやmbufを解放し、新たにWindow Sizeを割り当て、送信するTCPパケットに反映させてもよい。これにより、Window Sizeを適宜変更することができる。これにより、送信に係る遅延を極力低く抑えることが可能となり、特にTCP/IP処理において、RTT(ラウンド・トリップ・タイム)を抑制し、良好な通信品質を確保することが可能となる。
【0030】
また、送信ヘッダキュー106、送信ヘッダレジスタ107において、キューをソケットごとに分類して記憶するようにしてもよい。これにより、均等にキューを送出するFairQueue、ソケット別に重み付けを考慮してキューを送出するWeighted Fair Queueなどのフローコントロールを、セレクタ108において容易に実行することが可能となる。また、これにより、ソケットごとにスケジューリングや優先度に基づく送信制御が可能となる。
【0031】
<<その他の実施形態>>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

【特許請求の範囲】
【請求項1】
通信装置の通信を制御する制御装置であって、
パケットを送信する際に用いるヘッダの一部をキューイングして一時的に記憶する第一の記憶手段と、
キューに応じて前記第一の記憶手段から出力される前記ヘッダの一部に対応させて、送信するペイロードを第二の記憶手段から取得する取得手段と、
前記パケットを送信する際に、当該パケットに対応する前記ヘッダの一部を用いてヘッダを生成する生成手段と、
前記生成手段により生成されたヘッダと、当該ヘッダに対応する前記第二の記憶手段から取得された前記ペイロードとを合成して送信する送信手段と、
を有する制御装置。
【請求項2】
前記通信装置が前記第二の記憶手段を備えることを特徴とする請求項1に記載の制御装置。
【請求項3】
前記第一の記憶手段に記憶される前記ヘッダの一部は、送信する前記パケットの内容が定まる前に確定する情報であることを特徴とする請求項1又は2に記載の制御装置。
【請求項4】
前記生成手段は、前記ペイロードのチェックサムを算出し、算出した値を前記ヘッダに含めることを特徴とする請求項1から3のいずれか1項に記載の制御装置。
【請求項5】
通信の相手装置から信号を受信する受信手段をさらに有し、
前記生成手段は、前記パケットを送信する際に、当該パケットと、当該パケットに対応する前記ヘッダの一部と、受信した前記信号とを用いてヘッダを生成する、
ことを特徴とする請求項1から4のいずれか1項に記載の制御装置。
【請求項6】
前記生成手段は、前記パケットを送信する際に、受信した前記信号に基づいて、Acknowledgement Numberの値を定め、その値を前記ヘッダに含めることを特徴とする請求項5に記載の制御装置。
【請求項7】
前記生成手段は、前記パケットを送信する際に、受信した前記信号に基づいて、Window Sizeの値を定め、その値を前記ヘッダに含めることを特徴とする請求項5または6に記載の制御装置。
【請求項8】
前記第一の記憶手段に記憶されている前記キューの出力のスケジューリングを実行する実行手段をさらに備え、
前記第一の記憶手段は、ソケット通信において、ソケットごとに前記ヘッダの一部をキューとして一時的に記憶し、
前記実行手段は、ソケットごとに送信の優先度およびスケジューリングを決定する、
ことを特徴とする請求項1から7のいずれか1項に記載の制御装置。
【請求項9】
パケットを送信する際に用いるヘッダの一部をキューイングして一時的に記憶する第一の記憶手段を備え、通信装置の通信を制御する制御装置における制御方法であって、
キューに応じて前記第一の記憶手段から出力される前記ヘッダの一部に対応させて、送信するペイロードを第二の記憶手段から取得する取得工程と、
前記パケットを送信する際に、当該パケットに対応する前記ヘッダの一部を用いてヘッダを生成する生成工程と、
前記生成工程において生成されたヘッダと、当該ヘッダに対応する前記第二の記憶手段から取得された前記ペイロードとを合成して送信する送信工程と、
を有する制御方法。
【請求項10】
コンピュータを請求項1から8のいずれか1項に記載の制御装置が備える各手段として機能させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2013−46173(P2013−46173A)
【公開日】平成25年3月4日(2013.3.4)
【国際特許分類】
【出願番号】特願2011−181930(P2011−181930)
【出願日】平成23年8月23日(2011.8.23)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】