(57)【特許請求の範囲】
【請求項１】
パケット送信装置から受け取った受信パケットに応答して、確認応答を前記パケット送信装置に返信する確認応答部と、
前記受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、
前記ネットワークプロトコルスタックよりも下位層において、前記受信パケットの順序制御を行う順序制御部と、
前記受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納されるバッファ部と
を備え、
前記パケット送信装置は、送信パケットの送信後、所定の時間以内に前記送信パケットに対する前記確認応答を受け取らない場合、前記送信パケットを再送信し、
前記順序制御部は、前記受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定し、
前記受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、前記順序制御部は、前記受信パケットを前記ネットワークプロトコルスタックに転送し、
前記受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、前記あるフローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが前記バッファ部に格納されている場合、前記順序制御部は、前記受信パケットを前記ネットワークプロトコルスタックに転送した後、前記バッファ部に格納されている前記あるフローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送する
パケット受信装置。
【請求項２】
請求項１に記載のパケット受信装置であって、
前記受信パケットは、第１フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットであり、
前記順序制御部は、前記バッファ部に前記第１フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されているか否かを調べ、
前記バッファ部に前記第１フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されている場合、前記順序制御部は、前記バッファ部に前記受信パケットを追加可能か否かを調べ、
前記バッファ部に前記受信パケットを追加可能である場合、前記順序制御部は、前記受信パケットを前記第１フローと関連付けて前記バッファ部に追加格納する
パケット受信装置。
【請求項３】
請求項２に記載のパケット受信装置であって、
前記バッファ部に前記受信パケットを追加不可能である場合、前記順序制御部は、前記受信パケット及び前記バッファ部に既に格納されている前記第１フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送する
パケット受信装置。
【請求項４】
請求項２又は３に記載のパケット受信装置であって、
前記バッファ部には、前記第１フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを最大Ｎ個（Ｎは自然数）格納可能であり、
Ｎ個の前記第１フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に前記バッファ部に格納されている場合、前記順序制御部は、前記バッファ部に前記受信パケットを追加不可能であると判断する
パケット受信装置。
【請求項５】
請求項２乃至４のいずれか一項に記載のパケット受信装置であって、
前記バッファ部は、所定容量のパケット格納領域を有し、
前記パケット格納領域には前記第１フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されており、
前記パケット格納領域に前記受信パケットを格納する余裕がない場合、前記順序制御部は、前記バッファ部に前記受信パケットを追加不可能であると判断する
パケット受信装置。
【請求項６】
請求項２乃至５のいずれか一項に記載のパケット受信装置であって、
前記バッファ部は、少なくとも１つのパケット格納領域を有し、
前記少なくとも１つのパケット格納領域は、それぞれ、１つのフローに割り当てられ、
前記１つのフローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットは、前記割り当てられたパケット格納領域に格納される
パケット受信装置。
【請求項７】
請求項６に記載のパケット受信装置であって、
前記パケット格納領域の数は１つであり、
前記１つのパケット格納領域に前記第１フローと異なる第２フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されている場合、前記順序制御部は、前記受信パケットを前記ネットワークプロトコルスタックに転送する
パケット受信装置。
【請求項８】
請求項６に記載のパケット受信装置であって、
前記パケット格納領域の数は１つであり、
前記１つのパケット格納領域に前記第１フローと異なる第２フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されている場合、前記順序制御部は、前記１つのパケット格納領域に格納されている前記第２フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送し、更に、前記受信パケットを前記第１フローと関連付けて前記１つのパケット格納領域に格納する
パケット受信装置。
【請求項９】
請求項６に記載のパケット受信装置であって、
前記受信パケットのシーケンス番号と期待されるシーケンス番号との間の差は、シーケンス差分値であり、
前記パケット格納領域の数は１つであり、
前記１つのパケット格納領域に前記第１フローと異なる第２フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されている場合、前記順序制御部は、前記第１フローと前記第２フローとの間で前記シーケンス差分値を比較し、
前記第１フローの前記シーケンス差分値が前記第２フローの前記シーケンス差分値より大きい場合、前記順序制御部は、前記受信パケットを前記ネットワークプロトコルスタックに転送し、
前記第１フローの前記シーケンス差分値が前記第２フローの前記シーケンス差分値より小さい場合、前記順序制御部は、前記１つのパケット格納領域に格納されている前記第２フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送し、更に、前記受信パケットを前記第１フローと関連付けて前記１つのパケット格納領域に格納する
パケット受信装置。
【請求項１０】
請求項６に記載のパケット受信装置であって、
前記パケット格納領域の数は複数であり、
前記複数のパケット格納領域に前記第１フローと異なるフローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが既に格納されている場合、前記順序制御部は、前記複数のパケット格納領域のうちいずれか１つを選択し、
前記順序制御部は、前記選択されたパケット格納領域に格納されている全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送し、更に、前記受信パケットを前記第１フローと関連付けて前記選択されたパケット格納領域に格納する
パケット受信装置。
【請求項１１】
請求項１乃至１０のいずれか一項に記載のパケット受信装置であって、
ＯＳ（Operating System）を実行するプログラム処理装置と、
前記プログラム処理装置に接続されたネットワークインタフェース装置と
を備え、
前記ネットワークプロトコルスタックは、前記ＯＳに組み込まれており、
前記順序制御部及び前記バッファ部は、前記ネットワークインタフェース装置に組み込まれている
パケット受信装置。
【請求項１２】
請求項１乃至１０のいずれか一項に記載のパケット受信装置であって、
ＯＳ（Operating System）を実行するプログラム処理装置と、
前記プログラム処理装置に接続されたネットワークインタフェース装置と
を備え、
前記ネットワークプロトコルスタックは、オフロードエンジンとして前記ネットワークインタフェース装置に組み込まれており、
前記順序制御部及び前記バッファ部は、前記ネットワークインタフェース装置に組み込まれている
パケット受信装置。
【請求項１３】
送信パケットを送信するパケット送信装置と、
前記パケット送信装置からの前記送信パケットを受信パケットとして受け取るパケット受信装置と
を具備し、
前記パケット受信装置は、
前記受信パケットに応答して、確認応答を前記パケット送信装置に返信する確認応答部と、
前記受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、
前記ネットワークプロトコルスタックよりも下位層において、前記受信パケットの順序制御を行う順序制御部と、
前記受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納されるバッファ部と、
を備え、
前記パケット送信装置は、前記パケット受信装置に前記送信パケットを送信した後、所定の時間以内に前記送信パケットに対する前記確認応答を受け取らない場合、前記送信パケットを前記パケット受信装置に再送信するパケット再送制御を行い、
前記順序制御部は、前記受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定し、
前記受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、前記順序制御部は、前記受信パケットを前記ネットワークプロトコルスタックに転送し、
前記受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、前記あるフローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが前記バッファ部に格納されている場合、前記順序制御部は、前記受信パケットを前記ネットワークプロトコルスタックに転送した後、前記バッファ部に格納されている前記あるフローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送する
パケット通信システム。
【請求項１４】
請求項１３に記載のパケット通信システムであって、
前記パケット送信装置は、ネットワークプロトコルスタックよりも下位層において前記パケット再送制御を行う再送制御部を備える
パケット通信システム。
【請求項１５】
パケット受信装置におけるパケット順序制御方法であって、
前記パケット受信装置は、
パケット送信装置から受け取った受信パケットに応答して、確認応答を前記パケット送信装置に返信する確認応答部と、
前記受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、
前記受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納されるバッファ部と
を備え、
前記パケット送信装置は、送信パケットの送信後、所定の時間以内に前記送信パケットに対する前記確認応答を受け取らない場合、前記送信パケットを再送信し、
前記パケット順序制御方法は、
前記ネットワークプロトコルスタックよりも下位層において、前記受信パケットの順序制御を行うことを含み、
前記順序制御を行うことは、
前記受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定することと、
前記受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、前記受信パケットを前記ネットワークプロトコルスタックに転送することと、
前記受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、前記あるフローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが前記バッファ部に格納されている場合、前記受信パケットを前記ネットワークプロトコルスタックに転送した後、前記バッファ部に格納されている前記あるフローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送することと
を含む
パケット順序制御方法。
【請求項１６】
パケット受信装置にパケット順序制御処理を実行させるパケット順序制御プログラムが記録されたコンピュータ読み取り可能な記録媒体であって、
前記パケット受信装置は、
パケット送信装置から受け取った受信パケットに応答して、確認応答を前記パケット送信装置に返信する確認応答部と、
前記受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、
前記受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納されるバッファ部と
を備え、
前記パケット送信装置は、送信パケットの送信後、所定の時間以内に前記送信パケットに対する前記確認応答を受け取らない場合、前記送信パケットを再送信し、
前記パケット順序制御処理は、
前記ネットワークプロトコルスタックよりも下位層において、前記受信パケットの順序制御を行うことを含み、
前記順序制御を行うことは、
前記受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定することと、
前記受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、前記受信パケットを前記ネットワークプロトコルスタックに転送することと、
前記受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、前記あるフローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが前記バッファ部に格納されている場合、前記受信パケットを前記ネットワークプロトコルスタックに転送した後、前記バッファ部に格納されている前記あるフローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットを前記ネットワークプロトコルスタックに転送することと
を含む
コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット通信に関する。特に、本発明は、パケット通信におけるパケット再送制御（packet
retransmission control）及びパケット順序制御（packet reordering）に関する。
【背景技術】
【０００２】
トランスポート層におけるＴＣＰ（Transmission Control Protocol）の役割の１つは、パケット通信の信頼性を確保することである。パケット通信の信頼性を確保するための技術として、「パケット再送制御（packet transmission control）」が知られている。【０００３】
具体的には、送信装置は受信装置にパケットを送信し、受信装置は、パケットを受信すると確認応答（acknowledgement）を送信装置に返信する。この確認応答をもって、送信装置は、送出パケットが受信装置に無事到達したことを認識する。しかしながら、例えば送信装置と受信装置との間のネットワークでパケットが廃棄された場合、送信装置は、当該パケットに対する確認応答を受け取らない。パケット送出後、所定の待ち時間以内に確認応答を受け取らない場合、送信装置は、当該パケットを受信装置に再度送信する。尚、上記所定の待ち時間は、「再送タイムアウト（RTO: Retransmission Time Out）」と呼ばれている。【０００４】
このようなパケット再送制御に関連する技術が、特許文献１（特開２００７−１８１１２７号公報）、特許文献２（特開２００８−２７８０１４号公報）、非特許文献１（高道
透  他，“Ultra-High Speed MAC Technology for Terabit-Class LAN”，電子情報通信学会通信ソサイエティ大会,２００８年．）に記載されている。【０００５】
非特許文献１によれば、トランスポート層よりも下位のＭＡＣ（Media Access Control）層において、パケット再送制御が実施される。その理由は次の通りである。例として、データセンター内のネットワークのような、ＲＴＴ（Round Trip Time）が非常に短いネットワークを考える。このようなネットワークでは、再送タイムアウトをマイクロ秒レベルにまで短縮することにより、ＦＣＴ（Flow Completion Time）を減少させ、通信効率を向上させることができる。しかしながら、一般的にＴＣＰはＯＳ（Operating System）に実装されているため、ＴＣＰによるパケット再送制御では、再送タイムアウトをマイクロ秒レベルまで短縮できない。例えば、Ｌｉｎｕｘにおける単位時間（Jiffies）は１０ミリ秒であるため、Ｌｉｎｕｘの標準的なＴＣＰでは再送タイムアウトを１０ミリ秒未満に短縮できない。このような問題を解決するために、非特許文献１によれば、ＭＡＣ層においてパケット再送制御を実施し、それにより、再送タイムアウトをマイクロ秒レベルにまで短縮する。【０００６】
その一方で、上述のようなパケット再送制御が実施されると、受信装置に到着するパケットの順序が入れ替わってしまう。従って、受信装置は、受信パケットを順番通りに並べ替える必要がある。この処理が、「パケット順序制御（packet reordering）」である。このパケット順序制御も、ＴＣＰの機能の１つである。【０００７】
特許文献３（特開２００７−２８１８０８号公報）は、パケット順序制御に関連した技術を開示している。特許文献３に記載されたパケット通信装置は、並べ替え処理手段と、タイマー制御手段と、再送カウンタと、受信パケット順序制御手段と、を備える。並べ替え処理手段は、到着パケットをパケットデータ並べ替え用バッファに滞留して、順序通りに並べる。一定時間内にパケットが到着しない場合には、タイマー制御手段は、並べ替え処理手段における正常受信を諦め、上位レイヤでの再送に任せるタイマー制御を行う。再送カウンタは、不連続受信待ち状態発生時に起動される未受信パケットの再送回数をカウントする。受信パケット順序制御手段は、再送カウンタによりカウントした再送回数が所定の再送回数に達したとき、受信待ち状態を諦め、既に受信済みのパケットを上位レイヤに送出する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−１８１１２７号公報
【特許文献２】特開２００８−２７８０１４号公報
【特許文献３】特開２００７−２８１８０８号公報
【非特許文献】
【０００９】
【非特許文献１】高道 透  他，“Ultra-High Speed MAC Technology forTerabit-Class LAN”，電子情報通信学会通信ソサイエティ大会,２００８年．
【発明の概要】
【００１０】
上述の通り、パケット再送制御が行われる環境下では、受信側のＴＣＰはパケット順序制御を実施する必要がある。このパケット順序制御は、ＴＣＰを含む「ネットワークプロトコルスタック（network protocol stack）」にかかる負荷を増大させる。ネットワークプロトコルスタックは他の様々な機能も提供する必要があるため、パケット順序制御による負荷をなるべく軽減することが望ましい。
【００１１】
本発明の１つの目的は、ネットワークプロトコルスタックにかかるパケット順序制御の負荷を軽減することにある。
【００１２】
本発明の１つの観点において、パケット受信装置が提供される。パケット受信装置は、パケット送信装置から受け取った受信パケットに応答して、確認応答をパケット送信装置に返信する確認応答部を備える。パケット送信装置は、送信パケットの送信後、所定の時間以内に当該送信パケットに対する確認応答を受け取らない場合、当該送信パケットを再送信する。パケット受信装置は、更に、受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、ネットワークプロトコルスタックよりも下位層において受信パケットの順序制御を行う順序制御部と、バッファ部と、を備える。バッファ部には、受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納される。順序制御部は、受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定する。受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、順序制御部は、当該受信パケットをネットワークプロトコルスタックに転送する。受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、当該フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがバッファ部に格納されている場合、順序制御部は、当該受信パケットをネットワークプロトコルスタックに転送した後、バッファ部に格納されている当該フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットをネットワークプロトコルスタックに転送する。
【００１３】
本発明の他の観点において、パケット通信システムが提供される。パケット通信システムは、送信パケットを送信するパケット送信装置と、パケット送信装置からの送信パケットを受信パケットとして受け取るパケット受信装置と、を具備する。パケット受信装置は、受信パケットに応答して、確認応答をパケット送信装置に返信する確認応答部を備える。パケット送信装置は、パケット受信装置に送信パケットを送信した後、所定の時間以内に当該送信パケットに対する確認応答を受け取らない場合、当該送信パケットをパケット受信装置に再送信するパケット再送制御を行う。パケット受信装置は、更に、受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、ネットワークプロトコルスタックよりも下位層において受信パケットの順序制御を行う順序制御部と、バッファ部と、を備える。バッファ部には、受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納される。順序制御部は、受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定する。受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、順序制御部は、当該受信パケットをネットワークプロトコルスタックに転送する。受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、当該フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがバッファ部に格納されている場合、順序制御部は、当該受信パケットをネットワークプロトコルスタックに転送した後、バッファ部に格納されている当該フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットをネットワークプロトコルスタックに転送する。
【００１４】
本発明の更に他の観点において、パケット受信装置におけるパケット順序制御方法が提供される。パケット受信装置は、パケット送信装置から受け取った受信パケットに応答して、確認応答をパケット送信装置に返信する確認応答部を備える。パケット送信装置は、送信パケットの送信後、所定の時間以内に当該送信パケットに対する確認応答を受け取らない場合、当該送信パケットを再送信する。パケット受信装置は、更に、受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、バッファ部と、を備える。バッファ部には、受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納される。本発明に係るパケット順序制御方法は、ネットワークプロトコルスタックよりも下位層において、受信パケットの順序制御を行うことを含む。この順序制御を行うことは、（Ａ）受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定することと、（Ｂ）受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、当該受信パケットをネットワークプロトコルスタックに転送することと、（Ｃ）受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、当該フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがバッファ部に格納されている場合、当該受信パケットをネットワークプロトコルスタックに転送した後、バッファ部に格納されている当該フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットをネットワークプロトコルスタックに転送することと、を含む。
【００１５】
本発明の更に他の観点において、パケット受信装置にパケット順序制御処理を実行させるパケット順序制御プログラムが提供される。パケット受信装置は、パケット送信装置から受け取った受信パケットに応答して、確認応答をパケット送信装置に返信する確認応答部を備える。パケット送信装置は、送信パケットの送信後、所定の時間以内に当該送信パケットに対する確認応答を受け取らない場合、当該送信パケットを再送信する。パケット受信装置は、更に、受信パケットの順序制御を行う機能を有するネットワークプロトコルスタックと、バッファ部と、を備える。バッファ部には、受信パケットのうちＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがフローと関連付けられて格納される。本発明に係るパケット順序制御処理は、ネットワークプロトコルスタックよりも下位層において、受信パケットの順序制御を行うことを含む。この順序制御を行うことは、（Ａ）受信パケットがＩｎ−ＯｒｄｅｒパケットかＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットかを判定することと、（Ｂ）受信パケットがＩｎ−Ｏｒｄｅｒパケットである場合、当該受信パケットをネットワークプロトコルスタックに転送することと、（Ｃ）受信パケットがあるフローのＩｎ−Ｏｒｄｅｒパケットであり、且つ、当該フローのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットがバッファ部に格納されている場合、当該受信パケットをネットワークプロトコルスタックに転送した後、バッファ部に格納されている当該フローの全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットをネットワークプロトコルスタックに転送することと、を含む。
【００１６】
本発明によれば、ネットワークプロトコルスタックにかかるパケット順序制御の負荷を軽減することが可能となる。
【図面の簡単な説明】
【００１７】
上記及び他の目的、長所、特徴は、次の図面と共に説明される本発明の実施の形態により明らかになるであろう。【００１８】
【図１】図１は、本発明の実施の形態におけるパケット通信システムの構成を概略的に示すブロック図である。
【図２】図２は、データセンターの構成を示す概念図である。
【図３】図３は、本発明の実施の形態におけるサーバの構成例を示すブロック図である。
【図４】図４は、本発明の実施の形態における順序制御データ領域の一例を示す概念図である。
【図５】図５は、本発明の実施の形態における期待シーケンス番号情報を示す概念図である。
【図６】図６は、本発明の実施の形態におけるエントリ情報及びパケット格納領域の一例を示す概念図である。
【図７】図７は、本発明の実施の形態におけるパケット順序制御処理を示すフローチャートである。
【図８】図８は、本発明の実施の形態におけるステップＳ１００を示すフローチャートである。
【図９】図９は、本発明の実施の形態におけるステップＳ２００の第１の例を示すフローチャートである。
【図１０】図１０は、本発明の実施の形態におけるステップＳ２００の第２の例を示すフローチャートである。
【図１１】図１１は、本発明の実施の形態におけるステップＳ２００の第３の例を示すフローチャートである。
【図１２】図１２は、本発明の実施の形態における順序制御データ領域の他の例を示す概念図である。
【図１３】図１３は、本発明の実施の形態におけるステップＳ２００の第４の例を示すフローチャートである。
【図１４】図１４は、本発明の実施の形態におけるパケット順序制御処理を示すフローチャートである。
【図１５】図１５は、本発明の実施の形態におけるサーバの構成の一例を示すブロック図である。
【図１６】図１６は、本発明の実施の形態におけるサーバの構成の他の例を示すブロック図である。
【図１７】図１７は、本発明の実施の形態におけるサーバの構成の更に他の例を示すブロック図である。
【図１８】図１８は、本発明の実施の形態におけるネットワーク装置の構成例を示すブロック図である。
【発明を実施するための形態】
【００１９】
添付図面を参照して、本発明の実施の形態を説明する。
【００２０】
１．概要
図１は、本実施の形態におけるパケット通信システム１の構成を概略的に示すブロック図である。パケット通信システム１は、送信装置（パケット送信装置）ＴＲＮと受信装置（パケット受信装置）ＲＣＶを備えている。送信装置ＴＲＮと受信装置ＲＣＶとは、ネットワークを介して互いに接続されている。送信装置ＴＲＮは、ネットワークを介して受信装置ＲＣＶにパケットＰＫＴ（送信パケット）を送信する。受信装置ＲＣＶは、ネットワークを介して送信装置ＴＲＮからパケットＰＫＴ（受信パケット）を受け取る。
【００２１】
但し、送信装置ＴＲＮから送出されたパケットＰＫＴが受信装置ＲＣＶに正常に届かない場合がある。例えば、信号のビットエラーにより、ネットワークの途中でパケットＰＫＴが廃棄される場合がある。また、ネットワークの輻輳により、複数のパケットが連続して廃棄される場合がある（これは、「バースト廃棄」と呼ばれている）。
【００２２】
このようなパケット廃棄に対処するため、「パケット再送制御」が実施される。具体的には、受信装置ＲＣＶは、確認応答部２を備えている。確認応答部２は、送信装置ＴＲＮからパケットＰＫＴを受け取ると、その受信パケットＰＫＴに応答して、確認応答ＡＣＫを送信装置ＴＲＮに返信する。ネットワークの途中であるパケットＰＫＴが廃棄された場合、送信装置ＴＲＮは、当該パケットＰＫＴに対する確認応答ＡＣＫを受け取らない。受信装置ＲＣＶにパケットＰＫＴを送出した後、所定の再送タイムアウト（ＲＴＯ）以内に当該パケットＰＫＴに対する確認応答ＡＣＫを受け取らない場合、送信装置ＴＲＮは、当該パケットＰＫＴを受信装置ＲＣＶに再度送信する。
【００２３】
その一方で、パケット再送制御が実施されると、受信装置ＲＣＶに到着するパケットＰＫＴの順序が入れ替わってしまう。従って、受信装置ＲＣＶは、受信パケットＰＫＴを順番通りに並べ替える「パケット順序制御」を実施する。尚、受信パケットＰＫＴは、「Ｉｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉ」と「Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏ」に区分される。Ｉｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉは、期待された順番で受け取るパケットである。一方、Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏは、期待された順番ではないパケットであり、Ｉｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉが抜けた場合に受け取るパケットである。
【００２４】
一般的に、受信パケットＰＫＴの順序制御は、ネットワークプロトコルスタック１０の機能の１つである。ネットワークプロトコルスタック１０は、トランスポート層やネットワーク層のプロトコル機能を提供する手段である。例えば、ネットワークプロトコルスタック１０は、ＴＣＰ／ＩＰ（Transport Control Protocol / Internet Protocol）の機能を提供する。典型的には、ネットワークプロトコルスタック１０は、処理装置によって実行されるＯＳ（Operating System）のカーネルプログラムの一部である。あるいは、ネットワークプロトコルスタック１０は、ＴＣＰ／ＩＰオフロードエンジンのようなハードウェアで実現されてもよい。尚、ネットワークプロトコルスタック１０は、パケット順序制御の機能だけでなく、パケット再送制御の機能も有している。
【００２５】
本実施の形態によれば、更に、ネットワークプロトコルスタック１０よりも下位層においてもパケット順序制御が実施される。そのために、図１に示されるように、受信装置ＲＣＶは、ネットワークプロトコルスタック１０とは別に、順序制御部３及びバッファ部４を備えている。順序制御部３は、ネットワークプロトコルスタック１０よりも下位層において、例えばＭＡＣ（Media Access Control）層において、受信パケットＰＫＴの順序制御を行う。バッファ部４は、Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを一時的に格納（バッファ）するために利用される。
【００２６】
より詳細には、順序制御部３は、送信装置ＴＲＮからパケットＰＫＴを受け取ると、その受信パケットＰＫＴがＩｎ−ＯｒｄｅｒパケットＰＫＴ−ＩかＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏかを判定する。受信パケットＰＫＴがＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉである場合、順序制御部３は、その受信パケットＰＫＴ−Ｉを上位層のネットワークプロトコルスタック１０に転送する。一方、受信パケットＰＫＴがＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏである場合、順序制御部３は、その受信パケットＰＫＴ−Ｏを、可能な範囲内でバッファ部４に格納する。このとき、受信パケットＰＫＴ−Ｏは、自身が属するフローと関連付けられて、バッファ部４に格納される。つまり、バッファ部４には、Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがフローと関連付けられて一時的に格納（バッファ）される。
【００２７】
更に、受信パケットＰＫＴがあるフローのＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉであり、且つ、同じフローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがバッファ部４に既に格納されている場合、順序制御部３は、次のような処理を行う。まず、順序制御部３は、Ｉｎ−Ｏｒｄｅｒの受信パケットＰＫＴ−Ｉを上位層のネットワークプロトコルスタック１０に転送する。その後、順序制御部３は、バッファ部４に格納されている同じフローの“全ての”Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを読み出し、それら“全ての”Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを上位層のネットワークプロトコルスタック１０に順番に転送する。
【００２８】
単一のパケットＰＫＴが廃棄されていた場合を考える。この場合は、Ｉｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉの到着により“パケット抜け”が解消され、当該フローの一連のパケットＰＫＴは、順番通りにネットワークプロトコルスタック１０に転送される。すなわち、下位層からネットワークプロトコルスタック１０に対するインシーケンスデリバリ（ISD: In Sequence Delivery）が保証される。従って、ネットワークプロトコルスタック１０においてパケット順序制御を行う必要がなくなり、ネットワークプロトコルスタック１０にかかる負荷が軽減される。
【００２９】
複数のパケットＰＫＴが連続して廃棄されたバースト廃棄の場合を考える。この場合は、１個のＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉが到着しても、パケット抜けは完全には解消されない。しかしながら、本実施の形態によれば、このような場合であっても、バッファ部４に格納されている同じフローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏは全てネットワークプロトコルスタック１０に転送される。すなわち、インシーケンスデリバリが保証されないまま、当該フローのパケットはネットワークプロトコルスタック１０に転送される。この場合は、通常通り、ネットワークプロトコルスタック１０がパケット順序制御を行う。
【００３０】
以上に説明されたように、本実施の形態の受信装置ＲＣＶによれば、ネットワークプロトコルスタック１０よりも下位層において、パケット順序制御がある程度実行される。その結果、ネットワークプロトコルスタック１０におけるパケット順序制御の機会が減少する。すなわち、ネットワークプロトコルスタック１０にかかるパケット順序制御の負荷が軽減される。ネットワークプロトコルスタック１０は他の様々な機能も提供する必要があるため、パケット順序制御による負荷が軽減されることは好適である。
【００３１】
更に、本実施の形態によれば、Ｉｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉが到着した場合、当該フローのパケットＰＫＴの整列状況に拘わらず、当該フローのパケットＰＫＴは全てネットワークプロトコルスタック１０に送られる。また、後述されるが、Ｉｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉの到着時だけでなく他の機会にも、バッファ部４に格納されている全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがネットワークプロトコルスタック１０に送られてもよい。これらのことは、パケット順序制御をある程度は下位層で行うが、それにいたずらに固執しないことを意味する。下位層は、できる範囲でパケット順序制御を行うが、場合によってはパケット順序制御を上位層のネットワークプロトコルスタック１０に委ねる。
【００３２】
比較例として、上記特許文献３（特開２００７−２８１８０８号公報）に記載された方式を考える。比較例では、Ｉｎ−Ｏｒｄｅｒパケットが到着した場合、順番通り整列したパケットだけが上位層に転送され、不連続な部分は上位層に転送されずバッファに残留する。つまり、バッファに格納されている全てのＯｕｔ−ｏｆ−Ｏｒｄｅｒパケットが上位層に転送されるわけではない。この方式は、下位層において煩雑な処理が必要であり、受信装置に実装することが容易ではない。
【００３３】
一方、本実施の形態によれば、下位層は、できる範囲でパケット順序制御を行うが、場合によってはパケット順序制御を上位層のネットワークプロトコルスタック１０に委ねる。従って、順序制御部３及びバッファ部４を簡易な構成で実現することが可能である。また、順序制御部３及びバッファ部４を受信装置ＲＣＶに容易に実装することができる。このとき、既存のネットワークプロトコルスタック１０を改変する必要もない。このように、本実施の形態によれば、ネットワークプロトコルスタック１０にかかる負荷を軽減し、且つ、コストを抑えることが可能となる。
【００３４】
２．構成例
以下、本実施の形態を更に詳しく説明する。一例として、図２で示されるようなデータセンター（Data
Center）を考える。データセンターでは、多数のサーバＳＶが、フロントエンド、ミドルエンド、及びバックエンドに分かれて配置されている。フロントエンドとミドルエンドとの間、及び、ミドルエンドとバックエンドとの間には、スイッチＳＷのネットワークが介在している。このようなデータセンター内において、サーバＳＶ間でパケット通信を行うことを考える。パケットを送信するサーバＳＶが上述の送信装置ＴＲＮであり、パケットを受信するサーバＳＶが上述の受信装置ＲＣＶである。
【００３５】
図３は、１つのサーバＳＶ（送信装置ＴＲＮ、受信装置ＲＣＶ）の構成例を示している。サーバＳＶは、プログラム処理装置１００とネットワークインタフェース装置２００を備えている。
【００３６】
プログラム処理装置１００は、ＣＰＵ（Central Processing Unit）を備えており、アプリケーションやＯＳを含む各種ソフトウェア・プログラムを実行する。本構成例では、ネットワークプロトコルスタック１０は、ＯＳのカーネルプログラムの一部であり、ソフトウェアで実現されている。ネットワークプロトコルスタック１０は、パケット再送制御及びパケット順序制御を含むＴＣＰ／ＩＰ機能を有している。
【００３７】
アプリケーションは、ネットワーク通信処理を行う。アプリケーションから送信要求されたデータは、ネットワークプロトコルスタック１０によって、ネットワークへ送出可能なサイズ毎に分割される。分割されたデータには、トランスポート層のヘッダが付与され、送信パケットとしてネットワークインタフェース装置２００に送られる。
【００３８】
ネットワークインタフェース装置２００は、例えばＮＩＣ（Network Interface Card）である。このネットワークインタフェース装置２００は、ネットワークプロトコルスタック１０よりも下位層のＭＡＣ層の機能を提供する。また、図３に示されるように、ネットワークインタフェース装置２００は、再送制御ブロック２０、順序制御ブロック３０、及び記憶ブロック４０を備えている。これら再送制御ブロック２０、順序制御ブロック３０、及び記憶ブロック４０は、ハードウェアで実現される。
【００３９】
再送制御ブロック２０は、ネットワークプロトコルスタック１０よりも下位層においてパケット再送制御を行う。具体的には、送信装置ＴＲＮの再送制御ブロック２０は、上位層のネットワークプロトコルスタック１０から送信パケットＰＫＴを受け取る。続いて、送信装置ＴＲＮの再送制御ブロック２０は、送信パケットＰＫＴを受信装置ＲＣＶに送信し、また、その送信パケットＰＫＴのコピーを記憶ブロック４０中の再送制御データ領域５０（再送バッファ）に格納する。このとき、再送制御ブロック２０は、下位層専用のヘッダを送信パケットＰＫＴに付与しても構わない。
【００４０】
受信装置ＲＣＶの再送制御ブロック２０は、送信装置ＴＲＮからパケットＰＫＴを受け取ると、その受信パケットＰＫＴに応答して、“下位層の確認応答ＡＣＫ”を送信装置ＴＲＮの再送制御ブロック２０に返信する。つまり、受信側の再送制御ブロック２０は、図１中の確認応答部２に相当している。尚、ここで“下位層の確認応答ＡＣＫ”と記載したのは、ネットワークプロトコルスタック１０によって処理される通常の確認応答と区別するためである。送信装置ＴＲＮと受信装置ＲＣＶとの間では、周知の通り、ネットワークプロトコルスタック１０によってもパケット再送制御は行われており、それは本構成例でも同じである。
【００４１】
送信装置ＴＲＮの再送制御ブロック２０は、送信パケットＰＫＴに対する“下位層の確認応答ＡＣＫ”を受け取ると、再送制御データ領域５０に一時的に格納しておいた当該送信パケットＰＫＴを解放（消去）する。またこの時、再送制御ブロック２０は、“下位層の確認応答ＡＣＫ”を上位層に渡すことなく、終端する。一方、送信パケットＰＫＴの送出後、所定の再送タイムアウト（ＲＴＯ）以内に当該送信パケットＰＫＴに対する“下位層の確認応答ＡＣＫ”を受け取らない場合、送信装置ＴＲＮの再送制御ブロック２０は、パケット再送を行う。具体的には、送信装置ＴＲＮの再送制御ブロック２０は、再送制御データ領域５０に格納しておいた当該送信パケットＰＫＴを読み出し、その送信パケットＰＫＴを受信装置ＲＣＶに対して再度送信する。
【００４２】
本構成例において、ネットワークプロトコルスタック１０よりも下位層においてパケット再送制御を行う理由は、次の２つである。１つ目の理由は、下位層の再送制御ブロック２０がパケット再送制御を行うことにより、上位層のネットワークプロトコルスタック１０にかかるパケット再送制御の負荷が軽減されることである。
【００４３】
２つ目の理由は、再送タイムアウト（ＲＴＯ）をなるべく短縮することである。例えば、図２で示されたデータセンター内のサーバ間通信の場合、ＲＴＴ（Round Trip Time）は非常に短く、マイクロ秒レベルである。この場合、再送タイムアウトをマイクロ秒レベルにまで短縮することにより、ＦＣＴ（Flow Completion Time）を減少させ、通信効率を向上させることができる。しかしながら、ネットワークプロトコルスタック１０はＯＳに実装されているため、ＴＣＰによるパケット再送制御では、再送タイムアウトをマイクロ秒レベルまで短縮できない。例えば、Ｌｉｎｕｘにおける単位時間（Jiffies）は１０ミリ秒であるため、Ｌｉｎｕｘの標準的なＴＣＰでは再送タイムアウトを１０ミリ秒未満に短縮できない。そこで、本構成例では、ネットワークプロトコルスタック１０よりも下位層に再送制御ブロック２０が設けられる。そして、ネットワークプロトコルスタック１０の場合よりも短い再送タイムアウト（例：マイクロ秒レベル）で、パケット再送制御が実施される。それにより、ＦＣＴが減少し、通信効率が向上する。
【００４４】
ネットワークインタフェース装置２００の順序制御ブロック３０は、図１中の順序制御部３に相当しており、ネットワークプロトコルスタック１０よりも下位層において「パケット順序制御」を行う。これにより、ネットワークプロトコルスタック１０にかかるパケット順序制御の負荷が軽減される。本実施の形態に係る順序制御ブロック３０によるパケット順序制御処理は、後に詳しく説明される（第３節参照）。
【００４５】
記憶ブロック４０は、例えばＳＲＡＭ（Static Random Access Memory）である。この記憶ブロック４０は、再送制御データ領域５０及び順序制御データ領域６０を有している。再送制御データ領域５０は、再送制御ブロック２０によるパケット再送制御において利用される再送バッファである。順序制御データ領域６０は、図１中のバッファ部４に相当しており、順序制御ブロック３０によるパケット順序制御において利用される。
【００４６】
図４は、順序制御データ領域６０を示す概念図である。順序制御データ領域６０には、期待シーケンス番号情報６１と少なくとも１つのエントリ情報６２が格納される。また、順序制御データ領域６０は、少なくとも１つのパケット格納領域６５を有している。
【００４７】
図５は、期待シーケンス番号情報６１を示す概念図である。期待シーケンス番号情報６１は、フロー毎に「期待シーケンス番号ＥＳＱＮ」を示しており、フロー識別情報と期待シーケンス番号ＥＳＱＮとの対応関係を示している。フロー識別情報は、フローを特定するための情報であり、送信元ＭＡＣアドレス、宛先ＭＡＣアドレス、送信元ＩＰアドレス、宛先ＩＰアドレス等の組み合わせで与えられる。このフロー識別情報は、パケットＰＫＴのヘッダから抽出可能である。期待シーケンス番号ＥＳＱＮは、次に受信が期待されるパケットＰＫＴのシーケンス番号である。期待シーケンス番号ＥＳＱＮは、次の式（１）で表される。
【００４８】
式（１）：［期待シーケンス番号ＥＳＱＮ］＝［上位層に転送済みのパケットのシーケンス番号の最大値］＋［その最大シーケンス番号のパケットのサイズ］
【００４９】
パケット格納領域６５は、Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが格納される所定容量の記憶領域である。エントリ情報６２は、パケット格納領域６５に格納されているＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏの管理情報である。パケット格納領域６５及びエントリ情報６２は、フロー毎に設けられる。つまり、１つのフローに対して、１つのパケット格納領域６５が割り当てられ、あるフローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏは、当該フローに割り当てられた１つのパケット格納領域６５に格納される。パケット格納領域６５は、１フロー分だけ設けられてもよいし、複数フロー分設けられてもよい。複数のパケット格納領域６５が設けられる場合、複数の異なるフローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを並列的にバッファしておくことができる。
【００５０】
図６は、あるフローに関するエントリ情報６２とパケット格納領域６５の例を示している。エントリ情報６２は、フロー識別情報、エントリ番号、有効ビット、先頭アドレス、パケットサイズ等を含んでいる。フロー識別情報は、対応するパケット格納領域６５に格納されているＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが属するフローを示す。エントリ番号は、対応するパケット格納領域６５に格納されている各Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏの識別番号である。本例では、１つのパケット格納領域６５に、最大Ｎ個（Ｎは自然数）のＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを格納可能である。有効ビットは、各エントリが使用中か無効かを示す。先頭アドレスは、パケット格納領域６５中のアドレスであり、該当するエントリのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏの格納先の先頭を示す。パケットサイズは、該当するエントリに格納されているＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏのサイズ（パケット長）を示す。図６の例において、あるフローの２個のＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏ−１、ＰＫＴ−Ｏ−２が、パケット格納領域６５にバッファされている。そのパケット格納領域６５全体のサイズ（容量）は、Ｍｂｙｔｅｓである。パケット格納領域６５の先頭アドレスは基準アドレスＢＡであり、パケットＰＫＴ−Ｏ−１の先頭アドレスは「ＢＡ＋１０００」であり、パケットＰＫＴ−Ｏ−２の先頭アドレスは「ＢＡ＋２５００」である。
【００５１】
３．パケット順序制御処理
以下、本実施の形態に係る順序制御ブロック３０によるパケット順序制御処理を詳しく説明する。図７は、本実施の形態におけるパケット順序制御処理を示すフローチャートである。
【００５２】
３−１．基本フロー
ステップＳ１０：
順序制御ブロック３０は、送信装置ＴＲＮから、あるフローのパケットＰＫＴを受信する。以下の説明において、この受信パケットＰＫＴは、第１フローのパケットであるとする。
【００５３】
ステップＳ２０：
順序制御ブロック３０は、受信パケットＰＫＴからヘッダ情報を抽出する。ヘッダ情報は、当該受信パケットＰＫＴに関するシーケンス番号、フロー識別情報、パケットサイズ等を含んでいる。
【００５４】
ステップＳ３０：
順序制御ブロック３０は、記憶ブロック４０中の期待シーケンス番号情報６１（図５参照）を参照して、第１フローの期待シーケンス番号ＥＳＱＮを取得する。
【００５５】
ステップＳ４０：
順序制御ブロック３０は、第１フローの期待シーケンス番号ＥＳＱＮと受信パケットＰＫＴのシーケンス番号とに基づいて、受信パケットＰＫＴがＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉか否かを判定する。具体的には、順序制御ブロック３０は、期待シーケンス番号ＥＳＱＮと受信パケットＰＫＴのシーケンス番号との比較を行う。そして、次の条件式（２）が満たされる場合、すなわち、受信パケットＰＫＴのシーケンス番号が期待シーケンス番号ＥＳＱＮと一致した場合、順序制御ブロック３０は、受信パケットＰＫＴをＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉと判定する。
【００５６】
式（２）：［受信パケットのシーケンス番号］  ＝  ［期待シーケンス番号ＥＳＱＮ］
【００５７】
ステップＳ５０：
受信パケットＰＫＴがＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉである場合（ステップＳ４０；Ｙｅｓ）、順序制御ブロック３０は、その受信パケットＰＫＴ−Ｉを上位層のネットワークプロトコルスタック１０に転送する。
【００５８】
ステップＳ６０：
続いて、順序制御ブロック３０は、記憶ブロック４０中のエントリ情報６２を参照して、同じ第１フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがパケット格納領域６５に既に格納（バッファ）されているか否かをチェックする。第１フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがパケット格納領域６５に格納されていない場合（ステップＳ６０；Ｎｏ）、処理は、ステップＳ９０に進む。
【００５９】
ステップＳ７０：
第１フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがパケット格納領域６５に格納されている場合（ステップＳ６０；Ｙｅｓ)、順序制御ブロック３０は、そのパケット格納領域６５に格納されている第１フローの“全ての”Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを順番に読み出す。そして、順序制御ブロック３０は、第１フローの“全ての”Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを、上位層のネットワークプロトコルスタック１０に順番に転送する。
【００６０】
ステップＳ８０：
第１フローの全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを上位層に転送した後、順序制御ブロック３０は、第１フローに対応していたエントリ情報６２を初期化する。これにより、それまで第１フローに割り当てられていたパケット格納領域６５が解放され、未使用領域となる。
【００６１】
ステップＳ９０：
順序制御ブロック３０は、上記式（１）に従って、第１フローの新たな期待シーケンス番号ＥＳＱＮを算出し、期待シーケンス番号情報６１を更新する。
【００６２】
ステップＳ１００：
一方、受信パケットＰＫＴがＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉではなく、Ｏｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏである場合（ステップＳ４０；Ｎｏ）、順序制御ブロック３０は、その第１フローの受信パケットＰＫＴ−Ｏを次のように処理する。
【００６３】
３−２．ＰＫＴ−Ｏの処理（ステップＳ１００）
図８は、本実施の形態におけるステップＳ１００を示すフローチャートである。
【００６４】
ステップＳ１１０：
順序制御ブロック３０は、受信パケットＰＫＴ−Ｏに関する「シーケンス差分値ＤＩＦ」を算出する。シーケンス差分値ＤＩＦとは、受信パケットＰＫＴ−ＯがＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉからどれだけ逸脱しているかを示す指標である。例えば、シーケンス差分値ＤＩＦは、受信パケットＰＫＴ−Ｏのシーケンス番号と期待シーケンス番号ＥＳＱＮとの間の差であり、次の式（３）で表される。
【００６５】
式（３）：［シーケンス差分値ＤＩＦ］＝［受信パケットのシーケンス番号］−［期待シーケンス番号ＥＳＱＮ］
【００６６】
ステップＳ１２０：
また、順序制御ブロック３０は、記憶ブロック４０中のエントリ情報６２を参照する。
【００６７】
ステップＳ１３０：
順序制御ブロック３０は、エントリ情報６２を参照して、受信パケットＰＫＴ−Ｏと同じ第１フローに割り当てられているパケット格納領域６５があるかどうかをチェックする。つまり、順序制御ブロック３０は、同じ第１フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが既にバッファされているか否かを調べる。
【００６８】
ステップＳ１４０：
第１フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが既にバッファされている場合（ステップＳ１３０；Ｙｅｓ）、順序制御ブロック３０は、そのパケット格納領域６５に受信パケットＰＫＴ−Ｏを追加登録可能か否かを調べる。
【００６９】
例えば、図６で示されたように、１つのパケット格納領域６５には、最大Ｎ個（Ｎは自然数）のＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを格納可能である。順序制御ブロック３０は、エントリ情報６２中の有効ビットを参照することによって、第１フローに割り当てられたパケット格納領域６５に格納されているＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏの個数を調べる。第１フローに割り当てられたパケット格納領域６５にＮ個のＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが既に格納されている場合、順序制御ブロック３０は、当該パケット格納領域６５に受信パケットＰＫＴ−Ｏを追加不可能であると判断する。
【００７０】
また、パケット格納領域６５全体のサイズ（容量）は、Ｍｂｙｔｅｓである。第１フローに割り当てられたパケット格納領域６５に受信パケットＰＫＴ−Ｏを格納する余裕がもう無い場合、順序制御ブロック３０は、当該パケット格納領域６５に受信パケットＰＫＴ−Ｏを追加不可能であると判断する。例えば、次に説明されるように、書き込みアドレスがシーケンス差分値ＤＩＦに応じて決定される場合、シーケンス差分値ＤＩＦ、パケットサイズ及びパケット格納領域６５の容量に基づいて可否判定を行うことができる。
【００７１】
ステップＳ１５０：
ステップＳ１４０での判定の結果が「可能」である場合（ステップＳ１４０；Ｙｅｓ）、順序制御ブロック３０は、第１フローに割り当てられているパケット格納領域６５に受信パケットＰＫＴ−Ｏを格納する。ここで、図６に示されるように、パケット格納領域６５への書き込みアドレスは、上記式（３）によって算出されたシーケンス差分値ＤＩＦに応じて決定される。つまり、書き込みアドレスは、基準アドレスＢＡからシーケンス差分値ＤＩＦに応じた分だけアドレスをシフトさせることにより算出される。シーケンス差分値ＤＩＦが大きくなるにつれて、受信パケットＰＫＴ−Ｏは、パケット格納領域６５中のより後ろの部分に格納されることになる。受信パケットＰＫＴ−Ｏの格納と共に、順序制御ブロック３０は、第１フローに関するエントリ情報６２を更新する。
【００７２】
ステップＳ１６０：
一方、ステップＳ１４０での判定の結果が「不可能」である場合（ステップＳ１４０；Ｎｏ）、順序制御ブロック３０は、第１フローの全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを、上位層のネットワークプロトコルスタック１０に順番に転送する。転送されるＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏは、第１フローに割り当てられているパケット格納領域６５に既に格納されている全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏだけでなく、今回の受信パケットＰＫＴ−Ｏも含む。この場合、インシーケンスデリバリが保証されないまま、第１フローのパケットはネットワークプロトコルスタック１０に転送される。よって、通常通り、ネットワークプロトコルスタック１０がパケット順序制御を行う。
【００７３】
ステップＳ１７０：
また、順序制御ブロック３０は、上記式（１）に従って、第１フローの新たな期待シーケンス番号ＥＳＱＮを算出し、期待シーケンス番号情報６１を更新する。
【００７４】
ステップＳ１８０：
また、順序制御ブロック３０は、第１フローに対応していたエントリ情報６２を初期化する。これにより、それまで第１フローに割り当てられていたパケット格納領域６５が解放され、未使用領域となる。
【００７５】
ステップＳ１９０：
次に、上記ステップＳ１３０において、第１フローに割り当てられているパケット格納領域６５が存在しない場合を考える（ステップＳ１３０；Ｎｏ）。この場合、順序制御ブロック３０は、エントリ情報６２を参照して、順序制御データ領域６０中に未使用のパケット格納領域６５があるかどうかを調べる。未使用のパケット格納領域６５がある場合（ステップＳ１９０；Ｙｅｓ）、順序制御ブロック３０は、そのパケット格納領域６５を新たに第１フローに割り当て、上述のステップＳ１５０を実行する。
【００７６】
ステップＳ２００：
一方、順序制御データ領域６０中に未使用のパケット格納領域６５がもう無い場合（ステップＳ１９０；Ｎｏ）、それは、他のフローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがパケット格納領域６５を占有していることを意味する。この場合、順序制御ブロック３０は、ステップＳ２００を実行する。ステップＳ２００のアルゴリズムとしては、以下に例示されるように様々考えられる。
【００７７】
＜第１の例＞
図９は、ステップＳ２００の第１の例を示している。第１の例は、既にバッファされている他フローを優先するという最も単純なアルゴリズムである。ここでは、パケット格納領域６５の数は１つだけであり、第１フローとは異なる第２フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが当該１つのパケット格納領域６５に既に格納されている場合を考える。
【００７８】
この場合、順序制御ブロック３０は、第１フローの受信パケットＰＫＴ−Ｏのバッファを諦めて、第１フローの受信パケットＰＫＴ−Ｏを上位層のネットワークプロトコルスタック１０に転送する（ステップＳ２１０）。更に、順序制御ブロック３０は、上記式（１）に従って、第１フローの新たな期待シーケンス番号ＥＳＱＮを算出し、期待シーケンス番号情報６１を更新する（ステップＳ２２０）。この場合、第１フローに関しては、ネットワークプロトコルスタック１０がパケット順序制御を行う。
【００７９】
＜第２の例＞
図１０は、ステップＳ２００の第２の例を示している。第２の例は、第１の例とは逆に、新たに受信したフローを優先するというアルゴリズムである。ここでも、パケット格納領域６５の数は１つだけであり、第１フローとは異なる第２フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが当該１つのパケット格納領域６５に既に格納されている場合を考える。
【００８０】
この場合、順序制御ブロック３０は、当該パケット格納領域６５に格納されている第２フローの全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを、上位層のネットワークプロトコルスタック１０に順番に転送する（ステップＳ２３０）。すなわち、第２フローのパケットは、インシーケンスデリバリが保証されないまま、ネットワークプロトコルスタック１０に転送される。よって、第２フローに関しては、ネットワークプロトコルスタック１０がパケット順序制御を行う。
【００８１】
また、順序制御ブロック３０は、上記式（１）に従って、第２フローの新たな期待シーケンス番号ＥＳＱＮを算出し、期待シーケンス番号情報６１を更新する（ステップＳ２４０）。また、順序制御ブロック３０は、第２フローに対応していたエントリ情報６２を初期化する（ステップＳ２５０）。これにより、それまで第２フローに割り当てられていたパケット格納領域６５が解放され、未使用領域となる。その後、順序制御ブロック３０は、未使用となったパケット格納領域６５を新たに第１フローに割り当て、上述のステップＳ１５０を実行する。
【００８２】
＜第３の例＞
図１１は、ステップＳ２００の第３の例を示している。第３の例は、第１の例と第２の例の組み合わせである。ここでも、パケット格納領域６５の数は１つだけであり、第１フローとは異なる第２フローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが当該１つのパケット格納領域６５に既に格納されている場合を考える。
【００８３】
まず、順序制御ブロック３０は、第２フローに関するエントリ情報６２を参照して、第２フローに関する最小のシーケンス差分値ＤＩＦ−ｍを取得する。図６の例で言えば、最小シーケンス差分値ＤＩＦ−ｍは、１番目のパケットＰＫＴ−Ｏ−１の先頭アドレスと基準アドレスＢＡとの差に応じた値である。そして、順序制御ブロック３０は、今回の受信パケットＰＫＴ−Ｏから得られる第１フローのシーケンス差分値ＤＩＦと、第２フローの最小シーケンス差分値ＤＩＦ−ｍとを比較する（ステップＳ２６０）。
【００８４】
第１フローのシーケンス差分値ＤＩＦが第２フローの最小シーケンス差分値ＤＩＦ−ｍ以上の場合（ステップＳ２７０；Ｎｏ）、それは、第２フローの方が“パケット抜け”が少ないことを意味する。この場合、順序制御ブロック３０は、第２フローの方を優先して、上記第１の例と同様の処理を実行する（ステップＳ２１０〜Ｓ２２０）。
【００８５】
一方、第１フローのシーケンス差分値ＤＩＦが第２フローの最小シーケンス差分値ＤＩＦ−ｍより小さい場合（ステップＳ２７０；Ｙｅｓ）、それは、第１フローの方が“パケット抜け”が少ないことを意味する。この場合、順序制御ブロック３０は、第１フローの方を優先して、上記第２の例と同様の処理を実行する（ステップＳ２３０〜Ｓ２５０、Ｓ１５０）。
【００８６】
このように、第３の例では、シーケンス差分ＤＩＦがより小さい方のフローに対して、下位層でのパケット順序制御が優先的に実施される。パケット廃棄には、ビットエラー等に起因する単一パケットの廃棄と、ネットワークの輻輳に起因するバースト廃棄がある。本例では、このうち単一パケットが廃棄された場合の順序制御を優先的に下位層で行うと言える。これにより、パケット抜けを早急に解消し、スループットの低下を効率的に抑制することができる。
【００８７】
＜第４の例＞
第４の例では、順序制御データ領域６０が複数種類のフローに対応している。図１２に示されるように、順序制御データ領域６０には、エントリ情報６２とパケット格納領域６５が複数フロー分設けられている。よって、パケット順序制御を、複数フローに対して並列的に実行することができる。例えば、エントリ情報６２−１とパケット格納領域６５−１が既にフローＡに割り当てられていたとしても、エントリ情報６２−２とパケット格納領域６５−２を別のフローＢに割り当てることができる。
【００８８】
図１３は、第４の例におけるステップＳ２００を示すフローチャートである。ここで、未使用のパケット格納領域６５は無く、第１フローとは異なるフローのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏがそれぞれのパケット格納領域６５に既に格納されている場合を考える。この場合、順序制御ブロック３０は、第１フローの受信パケットＰＫＴ−Ｏをバッファするために、複数のパケット格納領域６５のいずれか１つを解放することを試みる。以下、解放されるパケット格納領域６５は「リプレース領域」と参照され、そのリプレース領域に割り当てられているフローは「リプレースフロー」と参照される。
【００８９】
まず、順序制御ブロック３０は、複数のパケット格納領域６５の中から１つのリプレース領域を選択する、すなわち、複数の既存フローの中から１つのリプレースフローを選択する（ステップＳ２８０）。この選択アルゴリズムとしては、ランダム方式やラウンドロビン方式が考えられる。また、上記第３の例と同様に、シーケンス差分値ＤＩＦが最も大きいものをリプレースフローとして選択してもよい。但し、受信パケットＰＫＴ−Ｏが属する第１フローのシーケンス差分値ＤＩＦが最大であることも考えられる。その場合は、リプレースフローは無しとなり（ステップＳ２９０；Ｎｏ）、順序制御ブロック３０は、上記第１の例と同様の処理を実行する（ステップＳ２１０〜Ｓ２２０）。
【００９０】
それ以外の場合（ステップＳ２９０；Ｙｅｓ）、順序制御ブロック３０は、選択したリプレースフローに対して、第２の例と同様の処理を実行する（ステップＳ２３０〜Ｓ２５０）。つまり、順序制御ブロック３０は、選択されたリプレース領域に格納されている全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏをネットワークプロトコルスタック１０に転送し、リプレース領域を解放する。その後、順序制御ブロック３０は、未使用となったリプレース領域を新たに第１フローに割り当て、上記ステップＳ１５０を実行する。
【００９１】
３−３．タイマー制御
上述の処理と並行して、図１４で示されるような処理が実施されてもよい。順序制御ブロック３０は、パケット格納領域６５毎にタイマーを有しており、各パケット格納領域６５に関して「無書き込み期間」を計測する（ステップＳ３００）。無書き込み期間とは、該当するパケット格納領域６５に最後にＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏが書き込まれてからの経過時間である。
【００９２】
あるパケット格納領域６５（つまり、あるフロー）に関して、無書き込み期間が所定の閾値を超えたとする。つまり、あるフローに関してタイムアウトが発生したとする（ステップＳ３１０；Ｙｅｓ）。この場合、順序制御ブロック３０は、該当パケット格納領域６５に格納されている全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏを順番にネットワークプロトコルスタック１０に転送する（ステップＳ３２０）。更に、順序制御ブロック３０は、上記式（１）に従って、該当フローの新たな期待シーケンス番号ＥＳＱＮを算出し、期待シーケンス番号情報６１を更新する（ステップＳ３３０）。また、順序制御ブロック３０は、該当フローのエントリ情報６２を初期化し、該当パケット格納領域６５を解放する（ステップＳ３４０）。
【００９３】
これにより、パケット格納領域６５がいたずらに長い期間占有されることが防止される。結果として、順序制御ブロック３０によるパケット順序制御の効率が向上する。また、記憶ブロック４０の容量を小さくすることができる。
【００９４】
３−４．Ｒｅ−Ｏｒｄｅｒフラグ
尚、本実施の形態において、順序制御ブロック３０は、フロー毎に「Ｒｅ−Ｏｒｄｅｒフラグ」を保持する。Ｒｅ−Ｏｒｄｅｒフラグの初期値は「０」である。受信パケットのフローに関するＲｅ−Ｏｒｄｅｒフラグが「０」である場合、順序制御ブロック３０は、上記ステップＳ４０において、受信パケットを無条件にＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉと判定し、更に、当該フローに関するＲｅ−Ｏｒｄｅｒフラグを「１」に設定する。一方、受信パケットのフローに関するＲｅ−Ｏｒｄｅｒフラグが「１」である場合、順序制御ブロック３０は、上記ステップＳ４０において、上記条件式（２）に従ってＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉの判定を行う。
【００９５】
また、上述の通り、順序制御ブロック３０は、様々なトリガーに応答して、パケット格納領域６５に格納されている全てのＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏをネットワークプロトコルスタック１０に転送する場合がある。このようなＯｕｔ−ｏｆ−ＯｒｄｅｒパケットＰＫＴ−Ｏの転送処理を行った場合、順序制御ブロック３０は、該当フローのＲｅ−Ｏｒｄｅｒフラグを「０」に再設定する。その後、最初に受け取る同フローのパケットは、無条件にＩｎ−ＯｒｄｅｒパケットＰＫＴ−Ｉと判定されることになる。
【００９６】
４．様々な構成例
図１５は、本実施の形態におけるサーバの構成の一例を示している。サーバは、プログラム処理装置１００及びネットワークインタフェース装置２００を備えている。プログラム処理装置１００は、ＣＰＵ１１０と記憶装置１２０を備えている。ＣＰＵ１１０は、アプリケーションやＯＳを含む各種ソフトウェア・プログラムを実行する。ネットワークプロトコルスタック１０は、ＯＳのカーネルプログラムの一部であり、ソフトウェアで実現されている。ネットワークインタフェース装置２００は、プログラム処理装置１００に接続されたネットワークインタフェースカード（ＮＩＣ）である。このネットワークインタフェース装置２００が、上述の再送制御ブロック２０、順序制御ブロック３０、及び記憶ブロック４０を備えている。この場合、これら再送制御ブロック２０、順序制御ブロック３０、及び記憶ブロック４０は、ハードウェアで実現される。
【００９７】
図１６は、本実施の形態におけるサーバの構成の他の例を示している。本構成例では、ネットワークプロトコルスタック１０が、ＴＣＰ／ＩＰオフロードエンジンのようなハードウェアで実現されており、ネットワークインタフェース装置２００に組み込まれている。その他は、図１５で示された例と同じである。本構成例によっても、同じ効果が得られる。
【００９８】
図１７は、本実施の形態におけるサーバの構成の更に他の例を示している。本構成例では、再送制御ブロック２０及び順序制御ブロック３０が、ソフトウェア処理によって実現される。より詳細には、再送制御ブロック２０及び順序制御ブロック３０はドライバとして提供され、プログラム処理装置１００のＣＰＵ１１０がそのドライバを実行することにより、再送制御ブロック２０及び順序制御ブロック３０が実現される。既存のＯＳやネットワークプロトコルスタック１０に改変は不要である。尚、そのドライバ（ソフトウェア）は、コンピュータ読み取り可能な記録媒体に記録されていてもよい。また、プログラム処理装置１００の記憶装置１２０が、記憶ブロック４０となる。本構成例によっても、同じ効果が得られる。
【００９９】
図１８は、アプリケーションルータ等のネットワーク装置３００の場合の構成例を示している。ネットワーク装置３００は、アプリケーションを実行するアプリケーション処理ブロック３１０、ネットワークプロトコルスタック１０、再送制御ブロック２０、順序制御ブロック３０、及び記憶ブロック４０を備えている。これらは、全てハードウェアにより実現される。本構成例によっても、同じ効果が得られる。
【０１００】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【０１０１】
本出願は、２００９年１２月３日に出願された日本国特許出願２００９−２７５９３０を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
0005541293.tif 000002
【図２】
0005541293.tif 000003
【図３】
0005541293.tif 000004
【図４】
0005541293.tif 000005
【図５】
0005541293.tif 000006
【図６】
0005541293.tif 000007
【図７】
0005541293.tif 000008
【図８】
0005541293.tif 000009
【図９】
0005541293.tif 000010
【図１０】
0005541293.tif 000011
【図１１】
0005541293.tif 000012
【図１２】
0005541293.tif 000013
【図１３】
0005541293.tif 000014
【図１４】
0005541293.tif 000015
【図１５】
0005541293.tif 000016
【図１６】
0005541293.tif 000017
【図１７】
0005541293.tif 000018
【図１８】
0005541293.tif 000019