(57)【要約】【課題】受信側の通信装置でのバッファのオーバーフローを防止する。【解決手段】通信システムは、バッファを備える第１の通信装置と、第１の通信装置にデータを送信する第２の通信装置を備える。第１の通信装置は、第２の通信装置から送信されるデータ信号のデータ量の予測値と、バッファに蓄積可能なデータの量を用いて、受信可能なデータ信号数を算出する。第１の通信装置は、第２の通信装置から送信されたシーケンス番号である送信番号と、データ信号数を第２の通信装置に送信する。第２の通信装置は、送信番号と受信可能なデータ信号数に基づいて、送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定し、決定した数以下のデータ信号を第１の通信装置に送信する。【選択図】図３
2017085258.tif 000002
【特許請求の範囲】
【請求項１】
バッファを備える第１の通信装置と、
前記第１の通信装置にデータを送信する第２の通信装置
を備え、
前記第１の通信装置は、
前記第２の通信装置から送信されるデータ信号のデータ量の予測値と、前記バッファに蓄積可能なデータの量を用いて、受信可能なデータ信号数を算出し、
前記第２の通信装置から送信されたシーケンス番号である送信番号と、前記データ信号数を前記第２の通信装置に送信し、
前記第２の通信装置は、
前記送信番号と前記受信可能なデータ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定し、
該決定した数以下のデータ信号を前記第１の通信装置に送信する
ことを特徴とする通信システム。
【請求項２】
前記第２の通信装置は、前記第１の通信装置で受信可能なデータ信号数から、前記送信番号に対応付けられたデータ信号の送信後に送信したデータ信号数を減算して得られる数のデータ信号を、前記第１の通信装置に送信可能であると判定する
ことを特徴とする請求項１に記載の通信システム。
【請求項３】
前記第１の通信装置は、前記バッファの空き容量が閾値以下になると、前記送信番号と前記第１の通信装置が受信可能なデータ信号数の組み合わせを、前記バッファの空き容量と前記閾値と共に、前記第２の通信装置に送信し、
前記第２の通信装置は、前記第１の通信装置中の前記バッファの空き容量が前記閾値以下であると判定すると、前記送信番号と前記第１の通信装置が受信可能なデータ信号数の和の値以下のシーケンス番号に対応付けられたデータのうちで、前記第１の通信装置に送信していないデータを含めたデータ信号を、前記第１の通信装置に送信する
ことを特徴とする請求項１または２に記載の通信システム。
【請求項４】
前記第１の通信装置は、前記バッファの空き容量が前記閾値より大きい他の閾値を越えると、前記第１の通信装置での前記バッファの空き領域の大きさを前記他の閾値と共に前記第２の通信装置に通知し、
前記第２の通信装置は、前記第１の通信装置中の前記バッファの空き容量が前記他の閾値以上であると判定すると、前記バッファの空き領域の大きさを用いて決定した数のデータ信号を、前記第１の通信装置に送信する
ことを特徴とする請求項３に記載の通信システム。
【請求項５】
前記第２の通信装置は、前記第１の通信装置への再送処理を行う場合、
再送対象のデータ信号を前記第１の通信装置に送信し、
前記第１の通信装置が受信可能なデータ信号数と前記再送対象のデータ信号数との差分を求め、
前記送信番号と前記差分の合計値以下のシーケンス番号に対応付けられたデータのうちで、前記第１の通信装置に送信していないデータを含めたデータ信号を、前記第１の通信装置に送信する
ことを特徴とする請求項１〜４のいずれか１項に記載の通信システム。
【請求項６】
データの宛先装置との通信処理を行う通信部と、
前記宛先装置に送信したデータに対応付けられたシーケンス番号である送信番号と、前記宛先装置がバッファに蓄積可能なデータ信号数とを含む通知を前記通信部が受信すると、前記送信番号と前記データ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定する決定部
を備え、
前記通信部は、前記決定部により決定された数以下のデータ信号を前記第１の通信装置に送信する
ことを特徴とする通信装置。
【請求項７】
バッファを備える第１の通信装置と、前記第１の通信装置にデータを送信する第２の通信装置を含むネットワークにおいて、
前記第１の通信装置は、
前記第２の通信装置から送信されるデータ信号のデータ量の予測値と、前記バッファに蓄積可能なデータの量を用いて、受信可能なデータ信号数を算出し、
前記第２の通信装置から送信されたシーケンス番号である送信番号と、前記データ信号数を前記第２の通信装置に送信し、
前記第２の通信装置は、
前記送信番号と前記受信可能なデータ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定し、
該決定した数以下のデータ信号を前記第１の通信装置に送信する
ことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置間の通信に関する。
【背景技術】
【０００２】
無線基地局装置等のネットワーク機器では、ＳＣＴＰ（Stream Control Transfer Protocol）を用いた通信が行われることがある。ＳＣＴＰでは、データの送信側の装置は、受信応答（ＳＡＣＫ、Selective Acknowledgement）を用いて、受信側の装置でのデータの受信が成功しているかを判定し、受信側の装置が受信に失敗したデータを再送する。このため、ＳＣＴＰを用いた通信の信頼性は高い。また、ＳＣＴＰでは、通信を行う装置間で通信を確立するときに、受信可能なデータ情報として、受信ウィンドウを通知する。また、通信中に受信可能なデータ情報が変動する時にも当該受信ウィンドウを通知して受信ウィンドウによる通信量を制限させることで、輻輳制御を行う。
【０００３】
図１は、ＳＣＴＰを用いた通信処理の例を説明するシーケンス図である。図１では、通信装置５ａが通信装置５ｂからデータを受信する場合を例として説明する。なお、通信装置５ａは、受信ウィンドウ６を備えているとする。
【０００４】
ステップＳ１において、通信装置５ａは、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクを用いて、受信ウィンドウ（ａ＿ｒｗｎｄ）のサイズを通知する。ここで、受信ウィンドウ（ａ＿ｒｗｎｄ）は、通信装置５ａがデータを受信するときに使用するバッファの空き容量である。このため、通信装置５ｂは、通信装置５ａから通知された受信ウィンドウ６のサイズを超えない範囲の量のデータを、通信装置５ａからＳＡＣＫを受信するまでの間に送信することができる。図１の例では、通信装置５ａの受信ウィンドウ６は１０キロバイトである。
【０００５】
通信装置５ｂは、ＴＳＮ＝１〜３の各々のデータを通信装置５ａに順に送信する（ステップＳ２）。ＴＳＮ＝１〜３の各データは、いずれも１キロバイトであるとする。通信装置５ａへのデータの送信速度が通信装置５ａでの受信処理能力を上回っていない場合、通信装置５ａは、データ信号の受信に引き続き、データ信号を処理する。このため、通信装置５ａの受信ウィンドウ６にはデータが蓄積されない。通信装置５ａは、所定の間隔で、通信装置５ｂに対してＳＡＣＫチャンクを送信する（ステップＳ３）。ステップＳ３で送信されるＳＡＣＫチャンクには、受信ウィンドウ６の空き容量が１０キロバイトであること（ａ＿ｒｗｎｄ＝１０ｋ）が記載されている。
【０００６】
ステップＳ４において、通信装置５ｂがＴＳＮ＝４〜９の各々のデータを通信装置５ａに順に送信する。ステップＳ４の時点では、通信装置５ａの処理速度が通信装置５ｂからのデータ信号の送信速度に追いつかなくなっているとする。この場合、ＴＳＮ＝４〜９のデータは、受信ウィンドウ６に格納される。すると、通信装置５ａは、受信ウィンドウ６の空き容量が４キロバイトになっていること（ａ＿ｒｗｎｄ＝４ｋ）を、ＳＡＣＫで通信装置５ｂに通知する（ステップＳ５）。このため、通信装置５ｂは、通信装置５ａからＳＡＣＫを受信するまでの間に送信することができるデータの量を４キロバイトに変更した上で、通信装置５ａとの間の通信を継続する。
【０００７】
関連する技術として、受信バッファから送信バッファへのデータ移動を制御する中継装置が提案されている。中継装置は、受信端末へのセッションでのパケット廃棄率を求め、送信バッファ内滞留データ量とパケット廃棄率を用いて、受信端末へのセッションの制御パラメータを変更する（例えば特許文献１など）。また、フロー制御を行う第１のプロトコルを用いて第１の受信端末にコンテンツを送信し、他の複数の受信端末にフロー制御を行わない第２のプロトコルを用いたマルチキャストでそのコンテンツを送信する送信サーバが提案されている。この送信サーバは、第２のプロトコルによるコンテンツのデータ送信速度を、第１の受信端末へのデータ送信速度と同じ速度になるように制御する（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２００５／０２０５２４号
【特許文献２】特開２００６−２２９８４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
データの受信側の通信装置が送信側の通信装置に受信ウィンドウの空き容量を通知しても、データの受信側の通信装置でバッファのオーバーフローが発生することにより、データが廃棄されてしまうことがある。また、関連する技術として述べたいずれの技術を用いても、データの受信側の通信装置でバッファのオーバーフローが発生することがある。なお、ＳＣＴＰ以外のプロトコルが使用される場合も、同様の問題が発生しうる。
【００１０】
本発明は、一つの側面では、受信側の通信装置でのバッファのオーバーフローを防止することを目的とする。
【課題を解決するための手段】
【００１１】
ある１つの実施形態にかかる通信システムは、バッファを備える第１の通信装置と、前記第１の通信装置にデータを送信する第２の通信装置を備える。前記第１の通信装置は、前記第２の通信装置から送信されるデータ信号のデータ量の予測値と、前記バッファに蓄積可能なデータの量を用いて、受信可能なデータ信号数を算出する。前記第１の通信装置は、前記第２の通信装置から送信されたシーケンス番号である送信番号と、前記データ信号数を前記第２の通信装置に送信する。前記第２の通信装置は、前記送信番号と前記受信可能なデータ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定し、該決定した数以下のデータ信号を前記第１の通信装置に送信する。
【発明の効果】
【００１２】
受信側の通信装置でのバッファのオーバーフローを防止する。
【図面の簡単な説明】
【００１３】
【図１】ＳＣＴＰを用いた通信処理の例を説明するシーケンス図である。
【図２】データの破棄が発生する場合の例を説明するシーケンス図である。
【図３】実施形態にかかる通信方法の例を説明するシーケンス図である。
【図４】通信装置の構成の例を説明する図である。
【図５】通信装置のハードウェア構成の例を説明する図である。
【図６】ネットワークの例を説明する図である。
【図７】ＩＮＩＴ  ＡＣＫチャンクのフォーマットの例を説明する図である。
【図８】データチャンクのフォーマットの例を説明する図である。
【図９】ＳＡＣＫチャンクのフォーマットの例を説明する図である。
【図１０】通信装置間での通信を確立する際の処理の例を説明する図である。
【図１１】第１の実施形態にかかる通信処理の例を説明するシーケンス図である。
【図１２】データの受信側の通信装置の処理の例を説明するフローチャートである。
【図１３】データの送信側の通信装置の処理の例を説明するフローチャートである。
【図１４】通信システムの例を説明する図である。
【図１５】第２の実施形態にかかる通信処理の例を説明するシーケンス図である。
【図１６】第３の実施形態にかかる通信処理の例を説明するシーケンス図である。
【図１７】データの送信側の通信装置の処理の例を説明するフローチャートである。
【図１８】第４の実施形態にかかる通信処理の例を説明するシーケンス図である。
【図１９】データの受信側の通信装置の処理の例を説明するフローチャートである。
【図２０】データの送信側の通信装置の処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１４】
受信側の通信装置５が受信ウィンドウの空き容量を送信側の通信装置５に通知してもデータの破棄が発生するケースとして、クロスシーケンスが発生しているケースが考えられる。
【００１５】
図２は、データの破棄が発生する場合の例を説明するシーケンス図である。図２を参照しながら、受信ウィンドウ６を用いて輻輳制御を行っても、データの破棄が発生してしまうケースの例を説明する。図２においても、図１のステップＳ３で説明したように、受信ウィンドウ６にデータが蓄積されていないときに、通信装置５ａは、通信装置５ｂに対して、受信ウィンドウ６の空き容量が１０キロバイトであることを通知しているとする。その後、通信装置５ｂが通信装置５ａにＴＳＮ＝４〜９のデータを送信したが、通信装置５ａでの処理がデータの受信に追いつかない場合、図２の受信ウィンドウ６＿１に示すように、ＴＳＮ＝４〜９のデータが受信ウィンドウ６に蓄積される。
【００１６】
ステップＳ１１において、通信装置５ａは、受信ウィンドウ６の空き容量が４キロバイトであることを通知するためのＳＡＣＫを、通信装置５ｂに送信する。なお、図２の例において、受信ウィンドウ６の空き容量が４キロバイトになっているのは、通信装置５ａがＴＳＮ＝９のデータを受信した時点である。ここで、通信装置５ａでの処理に時間がかかるため、通信装置５ａがＳＡＣＫに受信ウィンドウ６の空き容量が４キロバイトであることを格納することを決定してから、実際にＳＡＣＫが送信されるまでに時間がかかったとする。
【００１７】
一方、ステップＳ１１で通信装置５ａが送信したＳＡＣＫが届くまでは、通信装置５ｂは、通信装置５ａへのＴＳＮ＝４のデータの送信開始時点での受信ウィンドウ６の容量が１０キロバイトであると認識している。このため、通信装置５ｂは、ＴＳＮ＝９のデータの送信後も、あと４キロバイト分のデータを送信できると判定し、ＴＳＮ＝１０〜１３のデータを通信装置５ａに向けて送信する（ステップＳ１２）。
【００１８】
通信装置５ａでは、ＴＳＮ＝１０〜１３のデータを受信ウィンドウ６に格納する。このため、ＴＳＮ＝１３の受信後は、通信装置５ａが保持する受信ウィンドウ６には、受信ウィンドウ６＿２に示すように、空き容量がなくなっている。
【００１９】
通信装置５ｂがＴＳＮ＝１３のデータを通信装置５ａに送信した後に、ステップＳ１１において通信装置５ａから送信されたＳＡＣＫが通信装置５ｂに到達したとする。すると、通信装置５ｂは、ＴＳＮ＝１３のデータを通信装置５ａに送信した後の段階で、通信装置５ａの受信ウィンドウ６に４キロバイトの空き容量があると誤認してしまう。すると、通信装置５ｂは、ＴＳＮ＝１４のデータを通信装置５ａに送信する（ステップＳ１３）。しかし、通信装置５ｂが受信したＳＡＣＫは、通信装置５ａがＴＳＮ＝９のデータを受信した段階での受信ウィンドウ６の空き容量（６＿１）を通知するための確認応答である。通信装置５ａがＴＳＮ＝１３を受信した時点では、受信ウィンドウ６＿２に示すように、通信装置５ａ中の受信ウィンドウ６には空き容量がなくなっている。このため、通信装置５ａは、ＴＳＮ＝１４のデータを受信ウィンドウ６に格納することも処理することもできず、破棄してしまう。
【００２０】
なお、通信装置５ａと通信装置５ｂの間の回線で輻輳が発生した場合も、通信装置５ａから送信されたＳＡＣＫがデータの送信元の通信装置５ｂに届くまでに時間がかかるため、図２と同様のクロスシーケンスが発生しうる。また、通信装置５ａから送信されたＳＡＣＫと通信装置５ｂから送信されたデータとの間のクロスシーケンスに起因して、データの破棄も行われてしまう。
【００２１】
図３は、実施形態にかかる通信方法の例を説明するシーケンス図である。図３は、通信装置１０ａが通信装置１０ｂからデータを取得する場合に、通信装置１０ａと通信装置１０ｂの間で行われる輻輳制御の例である。
【００２２】
通信装置１０ａは、受信ウィンドウとして使用しているバッファの空き容量と、データ信号のデータ量から、通信装置１０ａが受信可能なデータ信号数（ＲＤ）を計算する（ステップＳ２１）。次に、通信装置１０ａは、受信済みデータのシーケンス番号の最大値（ＴＳＮｍａｘ）と、受信可能なデータ信号数（ＲＤ）を含む通知情報を生成する（ステップＳ２２）。通信装置１０ａは、シーケンス数（ＴＳＮｍａｘ）とデータ信号数（ＲＤ）を含む通知情報を、通信装置１０ｂに送信する（ステップＳ２３）。なお、通知情報として、例えば、ＳＡＣＫチャンクが使用されても良い。
【００２３】
通信装置１０ｂは、通信装置１０ａから通知されたシーケンス番号（ＴＳＮｍａｘ）と受信可能なデータ信号数ＲＤを用いて、シーケンス番号ＴＳＮｍａｘに対応付けられたデータ信号の後に送信するデータ信号の数を決定する（ステップＳ２４）。このとき、通信装置１０ｂは、シーケンス番号ＴＳＮｍａｘに対応付けられたデータ信号を通信装置１０ａが受信した時点において、通信装置１０ａが受信可能なデータ信号数がＲＤであると判定する。つまり、通信装置１０ｂは、シーケンス番号＝ＴＳＮｍａｘのデータの送信後に通信装置１０ａに送信したデータ数（Ａ）を、データ信号数ＲＤから引いた数と同数のデータ信号を通信装置１０ａに送信可能だと判定する。
【００２４】
通信装置１０ｂは、シーケンス番号ＴＳＮｍａｘに対応付けられたデータ信号の後に送信可能なデータ信号として決定した信号数だけのデータ信号を送信済みであるかを判定する（ステップＳ２５）。このとき、通信装置１０ｂはＴＳＮｍａｘのデータ信号の送信後に０個以上のデータ信号を送信していると考えられるので、通信装置１０ｂは、ステップＳ２５において、ＲＤ−Ａの値が０を超えているかを判定しても良い。なお、Ａは０以上の値であり、ＲＤ−Ａは、通信装置１０ｂがＴＳＮｍａｘのデータ信号を送信後に通信装置１０ａに送信したデータ数を考慮した上で、通信装置１０ａに送信可能な信号数として計算される値である。ＲＤ−Ａが０を超えている場合、通信装置１０ｂは、ＲＤ−Ａ以下の数のデータ信号を通信装置１０ａに送信する（ステップＳ２５でＹｅｓ、ステップＳ２６）。一方、ＲＤ−Ａが０以下の場合、通信装置１０ｂは、通信装置１０ａへのデータ信号の送信を中断する（ステップＳ２５でＮｏ）。なお、通信装置１０ｂが通信装置１０ａへのデータ信号の送信を中断した場合も、通信装置１０ｂは、ＲＤ−Ａ＞０という条件を満たすような通知情報が得られれば、通信装置１０ａへのデータの送信を再開する。
【００２５】
このように、実施形態にかかる通信装置１０は、その通信装置１０が受信可能なデータ信号の数とともに、受信可能なデータ信号を算出したときに受信しているデータのシーケンス番号も送信側の通信装置１０に通知する。また、送信側の通信装置１０は、受信側で受信可能なデータ信号数から、受信可能なデータ信号数が計算されたときに受信側の装置が受信しているデータ信号の後に送信したデータ信号数を差し引いた値を、送信可能なデータ数とする。このため、データの受信側の装置からの通知情報と、送信側の装置から送信されたデータ信号との間でクロスシーケンスが発生しても、送信側の通信装置１０は、受信側の通信装置１０からの受信ウィンドウの空き容量を誤認しない。従って、受信側の通信装置１０でのオーバーフローが防止され、受信側の通信装置１０でのデータの破棄を防止できる。
【００２６】
＜装置構成＞
図４は、通信装置１０の構成の例を説明する図である。通信装置１０は、通信部１１、制御部２０、記憶部３０、処理部４０を備える。また、通信装置１０が無線基地局として実現される場合など、無線通信を行う装置とも通信する場合、無線通信部１２も備える。制御部２０は、計算部２１、通知部２２、決定部２３、転送制御部２４を有する。記憶部３０は、バッファ空き容量３１を記憶し、受信ウィンドウ３２としても動作する。処理部４０はアプリケーション処理部４１を有する。
【００２７】
通信部１１は、他の通信装置１０との間の通信のための送受信処理を行う。無線通信部１２は、無線通信を行う装置との間で通信装置１０が通信をする場合、無線チャネルを用いてデータの送受信を行う。
【００２８】
計算部２１と通知部２２はデータの受信側の通信装置１０で動作する。一方、決定部２３は、データの送信側の通信装置１０で動作する。計算部２１は、受信ウィンドウ３２の空き領域をバッファ空き容量３１として記憶部３０に格納する。さらに、計算部２１は、バッファ空き容量３１を用いて、受信可能なデータ信号の数を計算する。通知部２２は、受信可能なデータ信号数と、受信済みのデータのシーケンス番号を通知するための通知メッセージを生成する。ここで、通信プロトコルとしてＳＣＴＰが用いられる場合、通知メッセージとしてＳＡＣＫチャンクが用いられる。また、データ信号として、ＳＣＴＰデータチャンクが用いられる。
【００２９】
決定部２３は、通信部１１を介して通知メッセージを取得すると、通知メッセージ中の受信可能なデータ信号数と、シーケンス番号を用いて、データの受信側の通信装置１０に送信可能なデータ信号数を算出する。転送制御部２４は、データ転送のための処理を行う。例えば、転送制御部２４は、ＳＣＴＰデータチャンクの生成などの処理を行う。アプリケーション処理部４１は、アプリケーションによる処理を行う。
【００３０】
図５は、通信装置１０のハードウェア構成の例を説明する図である。なお、図５は通信装置１０が無線基地局（evolved Node B、ｅＮＢ）として実現される場合の例である。通信装置１０は、インタフェース１０１、プロセッサ１０２、メモリ１０３、スイッチ回路１０４、ＲＦ（radio frequency）回路１０５、ベースバンド処理回路１１０を備える。ベースバンド処理回路１１０は、プロセッサ１１１とデジタルシグナルプロセッサ（digital signal processor、ＤＳＰ）１１２を含む。
【００３１】
プロセッサ１０２は、Central Processing Unit（ＣＰＵ）を含む任意の処理回路であり、メモリ１０３に記憶されたプログラムを実行することにより、制御部２０および処理部４０として動作する。メモリ１０３には、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、フラッシュメモリ等の半導体メモリが含まれ、処理に用いられるプログラム及びデータを格納する。メモリ１０３は、記憶部３０として動作する。
【００３２】
スイッチ回路１０４、ＲＦ回路１０５、ベースバンド処理回路１１０は、無線通信部１２を実現する。ベースバンド処理回路１１０中のプロセッサ１１１は、無線基地局が形成する通信エリア内に位置する端末に対して、その端末の通信に使用可能な周波数帯域を割り当てる処理等を行う。ＤＳＰ１１２は、符号化処理、変調処理、復号処理、復調処理等を行う。ＲＦ回路１０５は、ベースバンド処理回路１１０から出力されるベースバンド信号をＲＦ信号に変換して無線基地局の通信エリア中に位置する端末へ送信する。また、ＲＦ回路１０５は、無線基地局の通信エリア内に位置する端末から受信するＲＦ信号をベースバンド信号に変換して、ベースバンド処理回路１１０へ出力する。
【００３３】
なお、図５は通信装置１０のハードウェア構成の一例であり、実装に応じて通信装置１０のハードウェア構成は変更され得る。また、通信装置１０は、ＭＭＳ（Multimedia Messaging Service）サーバ、ＲＮＣ（Radio Network Controller）、Ｓ−ＧＷ（Serving Gateway）などとして実現されても良く、この場合は、通信装置１０がＲＦ回路１０５を備えていなくても良い。
【００３４】
図６は、ネットワークの例を説明する図である。通信装置１０ａと通信装置１０ｂは、インターネット１２０を介して接続されている。また、通信装置１０ａはＳＣＴＰクライアントとして動作し、通信装置１０ｂはＳＣＴＰサーバとして動作するものとする。
【００３５】
図６では、通信装置１０ａと通信装置１０ｂがＳＣＴＰを用いて通信する場合のプロトコルスタックを表わしている。通信装置１０ａでは、ＡＰＩ（Application Programming Interface）５１ａは、処理部４０の一部として動作する。ＡＰＩ５１ａは、ＳＣＴＰ５２ａによる通信の結果として、アプリケーション処理部４１での処理に使用されるデータを取得する。一方、通信装置１０ｂで動作するＡＰＩ５１ｂは、通信装置１０ａ宛のデータをＳＣＴＰ５２ｂによって送信する。ＳＣＴＰ５２ｂは、ＡＰＩ５１ｂから入力されたデータを含むＳＣＴＰデータチャンクを生成し、アソシエーション１２５を介して通信装置１０ａに送信する。なお、ＳＣＴＰプロトコルを用いたアソシエーション１２５を介した通信では、レイヤ３以下の通信処理は、通信制御部５３（５３ａ、５３ｂ）やネットワークインタフェース５４（５４ａ、５４ｂ）によって実現される。図６中のＳＣＴＰ５２と通信制御部５３は制御部２０によって実現される。さらに、ネットワークインタフェース５４は、通信部１１として動作する。
【００３６】
＜チャンクのフォーマット例＞
図７は、ＩＮＩＴ  ＡＣＫチャンクのフォーマットの例を説明する図である。ＩＮＩＴ  ＡＣＫチャンクは、タイプ、チャンクフラグ（Chunk Flags）、チャンク長（Length）、イニシエートタグ（Initiate Tag）、受信ウィンドウ保証量広告（Advertised Receiver Window Credit）を含む。ＩＮＩＴ  ＡＣＫチャンクには、送出ストリーム数（Number of Outbound Streams）、流入ストリーム数（Number of Inbound Streams）、初期ＴＳＮ（Initial TSN）、Optional/Variable-Length Parametersも含まれる。さらに、ＩＮＩＴ  ＡＣＫチャンクは、データ長フラグ、データ信号数情報、閾値フラグ、閾値を含む。タイプフィールドはチャンクの種類の識別に使用され、ＩＮＩＴ  ＡＣＫチャンクでは２に設定される。チャンク長は、省略可能なパラメータも含めたパケット全体のデータ長である。
【００３７】
実施形態にかかる輻輳制御では、主に、受信ウィンドウ保証量広告、データ長フラグ、データ信号数情報、閾値フラグ、閾値の各フィールドに格納された値が使用される。受信ウィンドウ保証量広告フィールドには、ＩＮＩＴ  ＡＣＫチャンクを送信する通信装置１０においてＩＮＩＴ  ＡＣＫチャンクの宛先の通信装置１０との間の通信に使用されるバッファのサイズが格納される。すなわち、受信ウィンドウ保証量広告フィールドには、受信ウィンドウ（ａ＿ｒｗｎｄ）のサイズが格納される。
【００３８】
データ長フラグは、送信側の通信装置１０がデータチャンクに含めて送信するデータの長さを、可変長と固定長のいずれに設定するかを示す。以下の説明では、データ長フラグ＝１の場合、送信されるデータ長は固定長であり、データ長フラグ＝０の場合、送信されるデータ長は可変長であるものとする。
【００３９】
データ信号数情報フィールドには、受信側の通信装置１０が受信可能なデータ信号の数か、受信側の通信装置１０が受信可能なデータ信号の数を特定するために使用可能な情報が含められる。例えば、データ長フラグ＝１に設定されている場合、データ信号数情報フィールドには、データの長さが含められる。このため、送信側の通信装置１０は、データ信号数情報フィールドに含められた値で、受信ウィンドウ保証量広告フィールド中の数値を割ることによって得られた商を、送信可能なデータ信号数であると判定する。一方、データ長フラグ＝０に設定されている場合、データ信号数情報フィールドには、ＩＮＩＴ  ＡＣＫチャンクの送信元の通信装置１０が受信可能なデータ信号数が含められる。この場合、データ信号数は、受信ウィンドウ保証量広告フィールド中の数値をＭＴＵ（Maximum Transmission Unit）で割ったときに得られる商である。
【００４０】
閾値フラグフィールドには、輻輳制御方法の切り替えに閾値が使用されるかを表わす情報が格納される。輻輳制御方法の切り替えについては後述する。閾値フラグ＝１の場合は、受信ウィンドウの空き容量が閾値フィールド中の値以下となると、輻輳制御方法の切り替えが行われる。一方、閾値フラグ＝０の場合は、輻輳制御方法の切り替えが行われないので、閾値フィールドには無効値が含められる。
【００４１】
図８は、データチャンク（ＳＣＴＰデータチャンク）のフォーマットの例を説明する図である。データチャンクは、タイプ、予約領域（Reserved）、制御ビット、チャンク長（Length）、ＴＳＮ、ストリーム識別子（Stream Identifier）、ストリームシーケンス番号（Stream Sequence Number）、ペイロードプロトコル識別子（Payload Protocol Identifier）、データを含む。データチャンクでは、タイプフィールドの値は０に設定される。制御ビットは、Ｕビット、Ｂビット、Ｅビットを含み、データが順不同かを示す情報やフラグメンテーションに関する情報などの通知に使用される。
【００４２】
ＴＳＮは確認応答の際に使用される。データの受信側の通信装置１０は、受信したデータチャンクのＴＳＮを、ＳＡＣＫチャンクを用いて送信元の通信装置１０に通知することにより、確認応答を行う。
【００４３】
ストリーム識別子は、送信対象のデータが属するストリームの識別に用いられる。一方、ストリームシーケンス番号は、送信対象のデータについての、ストリーム識別子で識別されるストリーム中でのシーケンス番号である。図８の例では、ストリーム識別子＝Ｓ、ストリームシーケンス番号＝ｎである。このため、図８のデータチャンク中のデータは、ストリーム識別子＝Ｓ、ストリームシーケンス番号＝ｎで特定されるデータである。
【００４４】
図９は、ＳＡＣＫチャンクのフォーマットの例を説明する図である。ＳＡＣＫチャンクは、タイプ、チャンクフラグ、チャンク長、累積ＴＳＮ  Ａｃｋ（Cumulative TSN Ack）、受信ウィンドウ保証量広告（Advertised Receiver Window Credit）を含み、未受信のＴＳＮの情報、重複して受信したＴＳＮの情報も含む。
【００４５】
未受信のＴＳＮの情報として、ギャップＡｃｋブロック数（Number of Gap Ack Blocks）と、検出された各ギャップについての開始点と終点の組み合わせが使用される。ギャップＡｃｋブロック数は、受信した最大のＴＳＮよりも小さなＴＳＮに対応付けられたデータのうちで未受信のブロックの数である。また、未受信のブロック数だけ、ギャップＡｃｋブロックの開始点となるＴＳＮと、ギャップＡｃｋブロックの終点となるＴＳＮの組合せがＳＡＣＫチャンクに含められる。重複して受信したＴＳＮの情報として、重複ＴＳＮ数（Number of Duplicate TSNs）と、重複して受信したデータ信号中のＴＳＮ（重複ＴＳＮ、Duplicate TSN）が使用される。
【００４６】
さらに、ＳＡＣＫチャンクは、Ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ、受信可能データ信号数（ＲＤ）、ｍｏｄｅ＿ｏｖｅｒ、ｍｏｄｅ＿ｕｎｄｅｒを含む。Ｍｏｄｅ＿ｎｏｍ＿ｅｘｔは、受信可能なデータ信号数を用いた輻輳制御の種類の指定に使用される。Ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ＝０に設定されている場合、受信側の通信装置１０での受信ウィンドウの空き容量に関わらず、受信可能なデータ信号数を用いた輻輳制御が行われる。一方、Ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ＝１に設定されている場合、受信側の通信装置１０での受信ウィンドウの空き容量がｍｏｄｅ＿ｕｎｄｅｒ以下になると、受信可能なデータ信号数を用いた輻輳制御が開始される。しかし、Ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ＝１に設定されている場合、受信ウィンドウの空き容量がｍｏｄｅ＿ｏｖｅｒ以上になると、受信可能なデータ信号数を用いた輻輳制御が行われない。輻輳制御の切り替えの詳細については後述する。
【００４７】
＜第１の実施形態＞
図１０は、通信装置間での通信を確立する際の処理の例を説明する図である。図１０は、通信装置１０ａと通信装置１０ｂの間で、ＳＣＴＰアソシエーションを確立する場合の処理の例を示している。なお、以下の説明では、動作を行っている装置を区別し易くするために、符号の後に動作を行っている通信装置１０の符号の末尾と同じアルファベットを記載することがある。例えば、転送制御部２４ａは、通信装置１０ａに含まれている転送制御部２４である。
【００４８】
ステップＳ３１において、通信装置１０ｂの転送制御部２４ｂは、通信装置１０ａとの間のＳＣＴＰアソシエーションを確立するためにＩＮＩＴチャンク信号を送信する。ここで、ＩＮＩＴチャンク信号は、ＳＣＴＰで定義されている情報要素を含む。すなわち、ＩＮＩＴチャンク信号には、図７に示すＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクのタイプフィールドからOptional/Variable-Length Parametersまでの情報が含まれる。なお、ＩＮＩＴチャンク信号では、タイプフィールドの値は１に設定される。
【００４９】
通信装置１０ａの通信部１１ａは、ＩＮＩＴチャンク信号を受信すると、転送制御部２４ａに出力する。計算部２１ａは、通信装置１０ｂとの間の通信に使用する受信ウィンドウ３２ａを設定する。転送制御部２４ａは、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクを生成する。このとき、データ長フラグ、データ信号数情報、閾値フラグ、閾値の値を含むＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク中の各フィールドの値が設定される。転送制御部２４ａは、通信部１１ａを介して、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクを通信装置１０ｂに送信する（ステップＳ３２）。
【００５０】
通信装置１０ｂ中の転送制御部２４ｂは、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクを、通信部１１ｂを介して取得する。転送制御部２４ｂは、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクに含まれている値を用いて、通信装置１０ａが通信装置１０ｂとの間の通信に使用する受信ウィンドウの大きさ、通信装置１０ａが通信装置１０ｂとの間で行う輻輳制御の種類などを特定する。その後、転送制御部２４ｂは、通信装置１０ｂと通信装置１０ａの間のアソシエーションを確立するために、ＣＯＯＫＩＥ−ＥＣＨＯチャンクを生成する。転送制御部２４ｂは、通信部１１ｂを介して、ＣＯＯＫＩＥ−ＥＣＨＯチャンクを通信装置１０ａに向けて送信する（ステップＳ３３）。
【００５１】
通信装置１０ａ中の転送制御部２４ａは、通信部１１ａを介してＣＯＯＫＩＥ−ＥＣＨＯチャンクを取得すると、取得したＣＯＯＫＩＥ−ＥＣＨＯチャンクに対する応答としてＣＯＯＫＩＥ−ＥＣＨＯ  ＡＣＫチャンクを生成する。転送制御部２４ａは、ＣＯＯＫＩＥ−ＥＣＨＯ  ＡＣＫチャンクを、通信装置１０ｂに向けて送信する（ステップＳ３４）。通信装置１０ｂの転送制御部２４ｂでＣＯＯＫＩＥ−ＥＣＨＯ  ＡＣＫチャンクが処理されると、通信装置１０ａと通信装置１０ｂの間でのアソシエーションが確立される。その後、通信装置１０ｂと通信装置１０ａの間では、データチャンクを用いた通信が行われる。
【００５２】
図１１は、第１の実施形態にかかる通信処理の例を説明するシーケンス図である。以下、図１１を参照しながら、個々のデータチャンクに含まれるデータが固定長であり、輻輳制御の切り替えが行われない場合について、処理の例を説明する。
【００５３】
ステップＳ４１は、通信装置１０ａと通信装置１０ｂの間でのアソシエーションの確立の際に、通信装置１０ａから通信装置１０ｂに送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクの送信の例を示す。ステップＳ４１で送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクには、以下の情報が含まれているとする。なお、分かりやすくするために、各情報の示す意味をカッコ書きで記載している。
タイプ＝２（ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク）
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝１０ｋＢ
データ長フラグ＝１（固定長）
サイズ        ＝１ｋＢ
閾値フラグ    ＝０（輻輳制御方法の切り替えなし）
閾値            なし
なお、通信装置１０ａと通信装置１０ｂの間での通信の確立は、図１０を参照しながら説明した通りであり、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク以外のチャンクも使用される。
【００５４】
通信装置１０ｂの通信部１１ｂは、ステップＳ４１に示すＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクを受信すると、受信したチャンクを転送制御部２４ｂに出力する。転送制御部２４ｂは、通信装置１０ａとの間の通信では、チャンク長を１キロバイトとすることと、通信装置１０ａでの受信ウィンドウ３２ａの空き容量（ａ＿ｒｗｎｄ）が１０キロバイトであることを認識する。すると、決定部２３ｂは、通信装置１０ａからＳＡＣＫチャンクを受信しなくても１０個のデータチャンクを送信可能であると判定する。そこで、決定部２３ｂは、送信可能であると判定した数以下のデータチャンクを通信装置１０ａに送信することを決定する。図１１の例では、決定部２３ｂは、６個のデータチャンクを送信することを決定している。転送制御部２４ｂは、ＴＳＮ＝４〜９の６つのデータチャンクを生成し、通信部１１ｂを介して、通信装置１０ａに向けて送信する（ステップＳ４２）。
【００５５】
通信装置１０ａの通信部１１ａは、受信したデータチャンクを計算部２１ａに出力する。計算部２１ａは、アプリケーション処理部４１ａでの処理速度に合わせて、受信したデータチャンクを適宜、受信ウィンドウ３２ａに格納するとともに、バッファ空き容量３１ａを更新する。図１１の例では、ＴＳＮ＝４〜９の６つのデータチャンクが受信ウィンドウ３２ａに格納されたとする。受信ウィンドウ３２＿１１の斜線の領域はデータが格納されていることと、格納されているデータのＴＳＮを示し、白地の領域は空き領域を示す。受信ウィンドウ３２＿１１に示す段階では空き容量は４キロバイトになるので、計算部２１ａは、バッファ空き容量３１ａを、４キロバイトに更新する。さらに、計算部２１ａは、データチャンクに含まれるデータが１キロバイトの固定長であることから、４つのデータチャンクを受信可能であると計算する。
【００５６】
通信装置１０ａの通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、通信装置１０ｂに送信するためのＳＡＣＫチャンクを生成する。ここで生成されるＳＡＣＫチャンクには、以下の情報が含まれる。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値（Cumulative TSN Ack）＝９
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）          ＝４ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ          ＝０
受信可能なデータチャンク数（ＲＤ）＝４
ｍｏｄｅ＿ｏｖｅｒ                なし
ｍｏｄｅ＿ｕｎｄｅｒ              なし
なお、ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ＝０は、受信側の通信装置１０から通知された受信可能なデータ信号数を用いた制御が行われ、輻輳制御のモードが切り替えられないことを表わす。通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する（ステップＳ４３）。
【００５７】
通信装置１０ｂの決定部２３ｂは、通信部１１ｂを介して、ＳＡＣＫチャンクを取得する。決定部２３ｂは、通信装置１０ａがＴＳＮ＝９のチャンクを受信した時点でさらに４つのデータチャンクを受信できることを認識する。通信装置１０ｂから通信装置１０ａにＴＳＮ＝９以降のデータチャンクを送信していないので、決定部２３ｂは、さらに４つのデータチャンクを通信装置１０ａに送信可能であると判定する。
【００５８】
転送制御部２４ｂは、ＴＳＮ＝１０のデータチャンクを生成し、通信部１１ｂを介して、通信装置１０ａに向けて送信する（ステップＳ４４）。その後、さらに、転送制御部２４ｂは、ＴＳＮ＝１１〜１３のデータチャンクも生成し、通信部１１ｂを介して、通信装置１０ａに向けて送信する（ステップＳ４５）。
【００５９】
ここで、ＴＳＮ＝１０のデータチャンクは、相対的に短い時間で通信装置１０ａに到達したのに対し、ＴＳＮ＝１１〜１３のデータチャンクが通信装置１０ａに到達するまでには時間がかかったとする。また、ＴＳＮ＝１０が通信装置１０ａに到達した後で、ＴＳＮ１１〜１３のデータチャンクが通信装置１０ａに到達する前に、ＴＳＮ＝４のデータチャンク中のデータがアプリケーション処理部４１ａで処理されたとする。すると、ＴＳＮ１１〜１３が通信装置１０ａに到達する前では、３２＿１２に示すように、受信ウィンドウ３２ａの空き容量が４キロバイトになる。計算部２１ａは、データチャンクに含まれるデータが１キロバイトの固定長であることから、ＴＳＮ＝１０のデータチャンクまでを受信した時点では、さらに４つのデータチャンクを受信可能であると計算する。
【００６０】
通信装置１０ａの通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、通信装置１０ｂに送信するためのＳＡＣＫチャンクを生成する。ここでは、ＴＳＮ＝１０の受信後で、ＴＳＮ＝１１〜１３のデータチャンクが通信装置１０ａに到達する前に、ＳＡＣＫチャンクが生成されている。このため、生成されるＳＡＣＫチャンクには、以下の情報が含まれる。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝１０
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝４ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ          ＝０
受信可能なデータチャンク数（ＲＤ）＝４
ｍｏｄｅ＿ｏｖｅｒ                  なし
ｍｏｄｅ＿ｕｎｄｅｒ                なし
通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する（ステップＳ４６）。
【００６１】
その後、ステップＳ４５で通信装置１０ａに向けて送信されたＴＳＮ＝１１〜１３のデータチャンクが通信装置１０ａに到達したとする。通信装置１０ａの計算部２１ａは、通信部１１ａからＴＳＮ＝１１〜１３のデータチャンクを取得すると、未処理のデータが受信ウィンドウ３２ａに蓄積されているため、受信したデータチャンクを、受信ウィンドウ３２ａに格納する。すると、受信ウィンドウ３２ａの使用状況は、３２＿１３に示すとおりになる。計算部２１ａは、３キロバイトのデータを新たに受信ウィンドウ３２ａに格納したことから、バッファ空き容量３１ａを１キロバイトに変更する。計算部２１ａは、データチャンクに含まれるデータが１キロバイトの固定長であることから、あと１つのデータチャンクを受信可能であると計算する。
【００６２】
通信装置１０ｂの決定部２３ｂは、通信部１１ｂを介して、ステップＳ４６で送信されたＳＡＣＫチャンクを取得する。決定部２３ｂは、通信装置１０ａがＴＳＮ＝１０のチャンクを受信した時点でさらに４つのデータチャンクを受信できることを認識する。すなわち、ＴＳＮ＝１０の受信時点での通信装置１０ａでの受信可能なデータチャンク数（ＲＤ）＝４と認識する。一方、通信装置１０ｂから通信装置１０ａには、ＴＳＮ＝１０以降にＴＳＮ＝１１〜１３の３つのデータチャンクを送信しているので、通信装置１０ａから受信が通知されたデータチャンク以降に通信装置１０ｂが送信したデータチャンク数（Ａ）は３である。そこで、決定部２３ｂは、次式から、通信装置１０ａに送信可能なデータチャンク数を求める。
ＲＤ−Ａ＝４−３＝１
このように、決定部２３は、通知された受信可能数と、受信が確認されたチャンクの後に通信装置１０ｂが送信したチャンク数を用いて、送信済みの全てのチャンクが通信装置１０ａに到達したときの受信ウィンドウ３２ａの空き容量を計算する。図１１の例では、既に通信装置１０ｂからＴＳＮ＝１３のチャンクまでが送信されているので決定部２３ｂは、通信装置１０ａがＴＳＮ＝１３を受信した場合、通信装置１０ａはさらに１つのデータチャンクを受信可能であると判定する。このため、第１の実施形態では、通信装置１０ｂが送信したデータチャンクと通信装置１０ａが送信したＳＡＣＫの間でクロスシーケンスが発生しても、通信装置１０ａでのオーバーフローによるデータの破棄を回避することができる。
【００６３】
図１２は、データの受信側の通信装置１０の処理の例を説明するフローチャートである。通信装置１０の通信部１１は、データを受信する（ステップＳ５１）。計算部２１は、受信したデータの受信処理が可能であるかを判定する（ステップＳ５２）。データの処理が可能である場合、アプリケーション処理部４１は受信処理を行う（ステップＳ５２でＹｅｓ、ステップＳ５３）。一方、データの処理が可能ではない場合、計算部２１は、データを受信ウィンドウ３２に格納した上で、バッファ空き容量３１の値を更新する（ステップＳ５２でＮｏ、ステップＳ５４、Ｓ５５）。ステップＳ５３かＳ５５の処理が終わると、計算部２１は、バッファ空き容量３１とデータチャンク中のデータ長を用いて、受信可能なデータ数を計算する（ステップＳ５６）。通知部２２は、データの送信側の通信装置１０に送信するＳＡＣＫチャンクに、受信可能なデータ数やバッファ空き容量３１の値などを含め、通信部１１を介して送信する（ステップＳ５７）。
【００６４】
図１３は、データの送信側の通信装置１０の処理の例を説明するフローチャートである。図１３において、ＴＳＮｍａｘは、ＳＡＣＫチャンクを生成した時点で、受信側の通信装置１０が受信に成功した信号中のシーケンス番号の最大値である。また、ＲＤは、受信側の通信装置１０がＳＡＣＫチャンクを生成した時点で、受信側の通信装置１０が受信可能なデータ信号数である。
【００６５】
通信部１１は、信号を受信する（ステップＳ６１）。決定部２３は、受信信号がＳＡＣＫチャンクであるかを判定する（ステップＳ６２）。受信信号がＳＡＣＫチャンクである場合、決定部２３は、ＳＡＣＫチャンク中に受信可能なデータ信号数（ＲＤ）が含まれているかを判定する（ステップＳ６３）。ＳＡＣＫチャンク中にＲＤが含まれている場合、決定部２３は、ＴＳＮｍａｘ＋ＲＤを送信可能なデータのシーケンス数の上限として送信処理を行う（ステップＳ６３でＹｅｓ、ステップＳ６４）。一方、ＳＡＣＫチャンク中にＲＤが含まれていない場合、ＳＡＣＫチャンク中の受信ウィンドウの空き容量の情報から求めた送信可能なデータ数を用いて送信処理を行う（ステップＳ６３でＮｏ、ステップＳ６５）。ステップＳ６２において、受信した信号がＳＡＣＫチャンクではないと判定した場合、データの受信処理が行われる（ステップＳ６６）。なお、ステップＳ６６で行われる処理の詳細は、図１２を参照しながら説明した処理と同様である。
【００６６】
図１４は、ｅＮＢ６０（６０ａ、６０ｂ）とコアネットワーク装置７０を含む通信システムの例である。ｅＮＢ６０ａ、ｅＮＢ６０ｂ、コアネットワーク装置７０は、ネットワーク６５を介して通信可能である。また、ｅＮＢ６０ａは伝送路終端部６１ａとベースバンド処理部６２ａを備え、通信エリア６７ａを形成する。一方、ｅＮＢ６０ｂは、伝送路終端部６１ｂとベースバンド処理部６２ｂを備え、通信エリア６７ｂを形成する。ここで、伝送路終端部６１は、コアネットワーク側の装置や他のｅＮＢ６０との間の通信を終端する。一方、ベースバンド処理部６２は、無線通信処理を行う。
【００６７】
ＵＥ（User Equipment）６６ａは、通信エリア６７ａに位置し、ｅＮＢ６０ａを介して通信先の装置と通信する。同様に、ＵＥ６６ｂは、通信エリア６７ｂに位置し、ｅＮＢ６０ｂを介して通信先の装置と通信する。
【００６８】
第１の実施形態にかかる通信装置１０は、図１４に示す通信システム中のｅＮＢ６０として動作することができる。通信装置１０がｅＮＢ６０として動作する場合、制御部２０と処理部４０は、伝送路終端部６１を実現する。また、通信装置１０はコアネットワーク装置７０として動作しても良い。
【００６９】
このように、受信側の通信装置１０が、受信可能なデータ信号数と、受信可能なデータ信号数の算出時点で受信しているデータのシーケンス番号を通知することにより、送信側の通信装置１０は、受信側の通信装置１０に通知可能なデータ数を正確に計算できる。このため、第１の実施形態によると、受信側の通信装置１０でのバッファのオーバーフローを防止することができる。バッファのオーバーフローが発生すると、大量のデータが消失し、消失した全てのデータの再送が発生することになる。従って、受信側の通信装置１０でのオーバーフローを防止することにより、結果的に、通信が効率化できる。
【００７０】
さらに、バッファのオーバーフローなどの理由により、データが消失すると、消失したデータ以降のデータはアプリケーション処理部４１で処理されず、受信ウィンドウ３２に蓄積されたままになる。消失したデータが再送によって受信側の通信装置１０に到達すると、再送されたデータの後続データも合わせてアプリケーション処理部４１に出力される。このため、バッファのオーバーフローの発生後は、受信側の通信装置１０ではバースト的にデータを受信することになってしまう。第1の実施形態にかかる方法では、オーバーフローを防止することにより、受信側の通信装置１０でデータをバースト的に受信することも防ぐことができる。
【００７１】
＜第２の実施形態＞
図１５は、第２の実施形態にかかる通信処理の例を説明するシーケンス図である。以下、図１５を参照しながら、個々のデータチャンクに含まれるデータが可変長であり、輻輳制御の切り替えが行われない場合について、処理の例を説明する。
【００７２】
ステップＳ７１は、通信装置１０ａと通信装置１０ｂの間でのアソシエーションの確立の際に、通信装置１０ａから通信装置１０ｂに送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクの送信の例を示す。データチャンクに含まれるデータ長が可変長である場合、受信側の通信装置１０中の計算部２１は、データチャンクに使用可能なデータ長の最大値を用いて、受信可能なデータ信号数を求める。ここで、データチャンクに使用可能なデータ長の最大値として、計算部２１は、ＭＴＵを使用する。例えば、通信装置１０ａが通信装置１０ｂとの間の通信に使用する受信ウィンドウ３２の容量が１０キロバイトであり、ＭＴＵが２キロバイトの場合、計算部２１は、５つのデータ信号を受信可能であると計算する。そこで、通知部２２は、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクに以下の情報を含める。
タイプ＝２（ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク）
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝１０ｋＢ
データ長フラグ        ＝０（可変長）
受信可能なデータ信号数＝５
閾値フラグ            ＝０（輻輳制御方法の切り替えなし）
閾値                    なし
なお、第２の実施形態においても、通信装置１０ａと通信装置１０ｂの間での通信の確立は、図１０を参照しながら説明した通りであり、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク以外のチャンクも使用される。
【００７３】
通信装置１０ｂの転送制御部２４ｂは、通信部１１ｂを介して、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫ  チャンクを取得する。転送制御部２４ｂは、通信装置１０ａとの間の通信では、チャンク中のデータ長が可変であることと、通信装置１０ａでの受信可能なデータ数が５つであることを認識する。また、決定部２３ｂは、通信装置１０ａからＳＡＣＫチャンクを受信しなくても５個のデータチャンクを送信可能であると決定する。そこで、決定部２３ｂが送信可能であると決定した数以下のデータチャンクが、通信装置１０ａに送信される。ここで送信されるデータチャンク中のデータ長は、ＭＴＵ以下の任意の値である。図１５では、転送制御部２４ｂは、データ長が１キロバイトの５つのデータチャンクを生成したとする。また、生成されたデータチャンクのシーケンス番号はＴＳＮ＝１〜５である。転送制御部２４ｂは、通信部１１ｂを介して、ＴＳＮ＝１〜５のデータチャンクを通信装置１０ａに向けて送信する（ステップＳ７２）。
【００７４】
通信装置１０ａの計算部２１ａは、通信部１１ａを介して、データチャンクを取得する。計算部２１ａは、アプリケーション処理部４１ａでの処理速度に合わせて、受信したデータチャンクを適宜、受信ウィンドウ３２ａに格納する。図１５の例では、ＴＳＮ＝１〜５の５つのデータチャンクに含まれているデータが受信ウィンドウ３２ａに格納されたとする。すると、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿２１に示す通りであり、受信ウィンドウ３２ａの空き容量は５キロバイトになる。そこで、計算部２１ａは、バッファ空き容量３１ａを、５キロバイトに更新する。さらに、計算部２１ａは、データチャンクに含まれるデータがＭＴＵと同じ長さである場合でも、さらに２つのデータチャンクを受信可能であると計算する。
【００７５】
通信装置１０ａの通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、通信装置１０ｂに送信するためのＳＡＣＫチャンクを生成する。ここで生成されるＳＡＣＫチャンクには、以下の情報が含まれる。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝５
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝５ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝０
受信可能なデータチャンク数（ＲＤ）  ＝２
ｍｏｄｅ＿ｏｖｅｒ                  なし
ｍｏｄｅ＿ｕｎｄｅｒ                なし
通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する（ステップＳ７３）。
【００７６】
通信装置１０ｂの決定部２３ｂは、通信部１１ｂを介して、ＳＡＣＫチャンクを取得する。決定部２３ｂは、通信装置１０ａがＴＳＮ＝５のチャンクを受信した時点でさらに２つのデータチャンクを受信できることを認識する。通信装置１０ｂから通信装置１０ａにＴＳＮ＝５以降のデータチャンクを送信していないので、決定部２３ｂは、さらに２つのデータチャンクを通信装置１０ａに送信可能であると判定する。
【００７７】
転送制御部２４ｂは、２キロバイトのデータを含むＴＳＮ＝６のデータチャンクを生成し、通信部１１ｂを介して、通信装置１０ａに向けて送信する（ステップＳ７４）。その後、さらに、転送制御部２４ｂは、２キロバイトのデータを含むＴＳＮ＝７のデータチャンクも生成し、通信部１１ｂを介して、通信装置１０ａに向けて送信する（ステップＳ７５）。
【００７８】
ここで、ＴＳＮ＝６のデータチャンクは相対的に短い時間で通信装置１０ａに到達したのに対し、ＴＳＮ＝７のデータチャンクが通信装置１０ａに到達するまでには時間がかかったとする。ＴＳＮ＝６のデータチャンクは受信ウィンドウ３２ａに格納されるため、受信ウィンドウ３２＿２２に示すように、ＴＳＮ＝６のデータチャンクが到達したときのバッファ空き容量３１ａは３キロバイトに更新される。
【００７９】
図１５の例では、ＴＳＮ＝７のデータチャンクが送信された後で、ＴＳＮ＝７のデータチャンクが通信装置１０ａに到達する前に、通信装置１０ａでＳＡＣＫが生成されたとする。この場合、通信装置１０から送信されるＳＡＣＫチャンクには、以下の情報が含まれる（ステップＳ７６）。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝６
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝３ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝０
受信可能なデータチャンク数（ＲＤ）  ＝１
ｍｏｄｅ＿ｏｖｅｒ                    なし
ｍｏｄｅ＿ｕｎｄｅｒ                  なし
通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する。
【００８０】
その後、ステップＳ７５で通信装置１０ａに向けて送信されたＴＳＮ＝７のデータチャンクが通信装置１０ａに到達したとする。通信装置１０ａの計算部２１ａは、ＴＳＮ＝７のデータチャンクを取得すると、未処理のデータが受信ウィンドウ３２ａに蓄積されているため、受信したデータチャンクを、受信ウィンドウ３２ａに格納する。このとき、受信ウィンドウ３２ａの使用状況は受信ウィンドウ３２＿２３に示すとおりである。計算部２１ａは、２キロバイトのデータを受信ウィンドウ３２ａに格納したことから、バッファ空き容量３１ａを１キロバイトに変更する。計算部２１ａは、データチャンクに含まれるデータ長がＭＴＵ以下の値であり、ＭＴＵが２キロバイトであることから、データチャンクの受信可能数は０になっていると計算する。
【００８１】
通信装置１０ｂの決定部２３ｂは、通信部１１ｂを介して、ステップＳ７６で送信されたＳＡＣＫチャンクを取得する。決定部２３ｂは、通信装置１０ａがＴＳＮ＝６のチャンクを受信した時点でさらに１つのデータチャンクを受信できることを認識する（ＲＤ＝１）。一方、通信装置１０ｂから通信装置１０ａには、ＴＳＮ＝６以降にＴＳＮ＝７のデータチャンクを送信しているので、通信装置１０ａから受信が通知されたデータチャンク以降に送信したデータチャンク数（Ａ）は１である。そこで、決定部２３ｂは、次式から、通信装置１０ａに送信可能なデータチャンク数が０であると計算する。
ＲＤ−Ａ＝１−１＝０
そこで、通信装置１０ｂは、ＴＳＮ＝７のデータチャンクを受信した後の通信装置１０ａでの受信可能なデータ数が１以上になるまで、通信装置１０ａへのデータチャンクの送信を中断する。
【００８２】
このように、第２の実施形態でも、送信側の通信装置１０は、ＳＡＣＫで通知された受信可能数と、ＳＡＣＫで受信が確認されたチャンクの後に通信装置１０ｂが送信したチャンク数を用いて、送信可能なデータチャンク数を計算している。このため、第２の実施形態でも、第１の実施形態と同様に、通信装置１０ｂが送信したデータチャンクと通信装置１０ａが送信したＳＡＣＫの間でクロスシーケンスが発生しても、通信装置１０ａでのオーバーフローによるデータの破棄を回避することができる。
【００８３】
また、受信側の通信装置１０は、データ格納後での受信ウィンドウ３２の空き容量を逐次計算すると共に、最新の空き状況に応じて受信可能なデータ信号数を求めて、ＳＡＣＫの送信時に送信側の通信装置１０に通知している。このため、送信側の通信装置１０ｂから送信されたデータチャンク中のデータ長がＭＴＵより短いなどの理由により、受信側の受信ウィンドウ３２ａに空きがある場合、送信側の通信装置１０ｂには受信側の通信装置１０ａでデータ受信が可能であることが通知される。従って、受信側の通信装置１０ａがデータの格納に使用する受信ウィンドウ３２ａは効率的に使用される。
【００８４】
＜第３の実施形態＞
図１６は、第３の実施形態にかかる通信処理の例を説明するシーケンス図である。以下、図１６を参照しながら、通信装置１０ａがデータの受信側であり、通信装置１０ｂとの間での通信において、データチャンクの再送が発生した場合の処理の例を説明する。なお、図１６では、個々のデータチャンクに含まれるデータが可変長であり、輻輳制御の切り替えが行われない場合の例を説明する。なお、通信装置１０ａと通信装置１０ｂの間での通信の確立の際の処理は、図１０を参照しながら説明した処理と同様である。
【００８５】
ステップＳ８１は、通信装置１０ａから通信装置１０ｂに送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクの送信の例を示す。ステップＳ８１での処理は、図１５を参照しながら説明したステップＳ７１の処理と同様である。ステップＳ８１で送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクには、以下の情報が含まれている。
タイプ＝２（ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク）
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝１０ｋＢ
データ長フラグ        ＝０（可変長）
受信可能なデータ信号数＝５
閾値フラグ            ＝０（輻輳制御方法の切り替えなし）
閾値                    なし
【００８６】
通信装置１０ｂの転送制御部２４ｂは、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫ  チャンクを取得する。決定部２３ｂは、図１５のステップＳ７１を参照しながら説明した処理と同様の処理により、送信可能なデータチャンク数が５つであることを特定する。転送制御部２４ｂは、ＴＳＮ＝１〜５の５つのデータチャンクを生成し、通信部１１ｂ経由で通信装置１０ａに向けて送信したとする（ステップＳ８２）。なお、ＴＳＮ＝１〜４のデータチャンクはそれぞれ１キロバイトであり、ＴＳＮ＝５のデータチャンクは２キロバイトであるとする。
【００８７】
ステップＳ８２で送信されたデータチャンクのうち、ＴＳＮ＝１〜３、５のデータチャンクは通信装置１０ａに到達したが、ＴＳＮ＝４のデータチャンクは、ネットワークの通信状況などの要因により、通信装置１０ａに到達しなかったとする。
【００８８】
通信装置１０ａでは、ＴＳＮ＝１〜３のデータチャンクを受信ウィンドウ３２ａに格納する。ＴＳＮ＝３のデータチャンクの次に、ＴＳＮ＝５のデータチャンクを取得すると、計算部２１ａはＴＳＮ＝４のデータチャンクを未受信であることを記憶した上で、ＴＳＮ＝５のデータチャンク中のデータを受信ウィンドウ３２ａに格納する。受信ウィンドウ３２ａには、１キロバイトのデータチャンクが３つ（ＴＳＮ＝１〜３）と２キロバイトのデータチャンク（ＴＳＮ＝５）が格納されるため、受信ウィンドウ３２ａの空き容量は５キロバイトになる。なお、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿３１に示すように表わされる。受信ウィンドウ３２＿３１でＴＳＮ＝４の部分が白地で示されているのは、通信装置１０ａがＴＳＮ＝４を受信していないことを記憶していることを表わしている。
【００８９】
通信装置１０ａの通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、通信装置１０ｂにＴＳＮ＝４のデータチャンクが未受信であることと、ＴＳＮ＝５までのデータチャンクの受信を通知するためのＳＡＣＫチャンクを生成する。このため、ここで生成されるＳＡＣＫチャンクには、以下の情報が含まれる。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝５
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝５ｋＢ
ギャップＡｃｋブロック数            ＝１
ギャップＡｃｋブロック＃１開始点    ＝ＴＳＮ４
ギャップＡｃｋブロック＃１終点      ＝ＴＳＮ４
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝０
受信可能なデータチャンク数（ＲＤ）  ＝２
ｍｏｄｅ＿ｏｖｅｒ                  なし
ｍｏｄｅ＿ｕｎｄｅｒ                なし
なお、ＳＡＣＫチャンク中のギャップＡＣＫブロック数、ギャップＡｃｋブロック＃１開始点、ギャップＡｃｋブロック＃１終点の情報により、ＴＳＮ＝４のデータチャンクの欠損が通知される。通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する（ステップＳ８３）。
【００９０】
通信装置１０ｂの決定部２３ｂは、ＳＡＣＫチャンクを取得すると、通信装置１０ａがＴＳＮ＝５のチャンクを受信した時点でさらに２つのデータチャンクを受信できることと、ＴＳＮ＝４を通信装置１０ａに再送することを認識する。通信装置１０ｂから通信装置１０ａにＴＳＮ＝５以降のデータチャンクを送信していないので、決定部２３ｂは、さらに２つのデータチャンクを通信装置１０ａに送信可能であると決定する。
【００９１】
転送制御部２４ｂは、決定部２３ｂが１つ以上のデータチャンクを送信可能であると判定しているので、再送が要求されているＴＳＮ＝４のデータチャンクを通信装置１０ａに向けて送信する（ステップＳ８４）。通信装置１０ａは、ＴＳＮ＝４のデータチャンクを受信すると、受信ウィンドウ３２ａに確保する。
【００９２】
一方、通信装置１０ｂでは、決定部２３ｂが通信装置１０ａへ送信可能なデータ数を更新する。このとき、決定部２３ｂは、再送するデータチャンクと初めて送信するデータチャンクとの合計が、宛先の通信装置１０において受信可能なデータ信号の数を超えないように、送信可能なデータチャンク数を決定する。この際、決定部２３ｂは、受信側の通信装置１０ａから通知された受信可能なデータ信号数ＲＤを、データチャンクを１つ再送するごとに１つデクリメントしても良い。
【００９３】
図１６の例では、決定部２３ｂは、再送処理により１つのデータチャンクを通信装置１０ａに送信しているので、通信装置１０ａが送信可能なデータ数ＲＤを１つデクリメントする。すなわち、決定部２３ｂは、通信装置１０ａがＴＳＮ＝５のデータの受信後に、もう１つのデータチャンクを受信できることが通知され、再送処理が行われない場合と同様であると判定する（ステップＳ８５）。この場合、通信装置１０ｂは、ＴＳＮ＝５のデータチャンクの後に再送対象ではないデータチャンクを送信していないので、決定部２３ｂは、送信可能なデータチャンク数を１に決定する。
【００９４】
転送制御部２４ｂは、決定部２３ｂでの処理に基づいて、１つのデータチャンクを送信するための処理を行う。転送制御部２４ｂは、２キロバイトのデータを含むＴＳＮ＝６のデータチャンクを、通信装置１０ａに送信するための処理を行ったとする（ステップＳ８６）。
【００９５】
決定部２３ｂは、ＴＳＮ＝６のデータチャンクを通信装置１０ａに送信すると、通信装置１０ｂが送信可能なデータ数を１つ減算する。このため、決定部２３ｂは、ＴＳＮ＝６のデータチャンクの送信後、通信装置１０ｂが送信可能なデータ信号数を０に更新する（ステップＳ８７）。そこで、決定部２３ｂは、ＴＳＮ＝６のデータチャンクを受信した後の通信装置１０ａでの受信可能なデータ数が１以上であることを通知されるまで、通信装置１０ａへのデータチャンクの送信を中断させる。
【００９６】
一方、通信装置１０ａでは、ＴＳＮ＝６のデータチャンクを受信すると、受信ウィンドウ３２ａに確保する。このため、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿３２に示す通りになり、受信ウィンドウ３２ａの空き容量は２キロバイトになる。そこで、計算部２１ａは、ＭＴＵ＝２キロバイトであることから、あと１つのデータ信号を受信可能であると計算する。通知部２２ａは、計算部２１ａでの計算結果を用いて、以下の情報を含むＳＡＣＫを生成し、通信装置１０ｂに向けて送信する（ステップＳ８８）。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝６
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝２ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝０
受信可能なデータチャンク数（ＲＤ）  ＝１
ｍｏｄｅ＿ｏｖｅｒ                    なし
ｍｏｄｅ＿ｕｎｄｅｒ                  なし
【００９７】
ステップＳ８８でＳＡＣＫを受信した通信装置１０ｂでは、決定部２３ｂは、受信側の通信装置１０ａでの受信可能なデータ信号数が１以上になったことを認識し、通信装置１０ａへのデータチャンクの送信を再開する。
【００９８】
図１７は、データの送信側の通信装置１０の処理の例を説明するフローチャートである。図１７では、受信側の通信装置１０での受信可能なデータ数を用いて輻輳処理を行うモードを「ＲＤモード」と記載している。
【００９９】
決定部２３は、ＲＤモードに設定されているかを判定する（ステップＳ９１）。ＲＤモードに設定されていない場合、転送制御部２４は、受信ウィンドウ保証量（ａ＿ｒｗｎｄ）により通知されたサイズに従って送信処理を行う（ステップＳ９１でＮｏ、ステップＳ９２）。なお、ａ＿ｒｗｎｄは、受信側の通信装置１０が使用している受信ウィンドウ３２の空き容量のサイズである。
【０１００】
ＲＤモードに設定されている場合、決定部２３は、受信成功が通知されたデータのシーケンス番号（Ｘ）と、受信側の通信装置１０から通知された受信可能なデータ数（ＲＤ）から送信可能なデータ信号数（Ｚ）を求める（ステップＳ９１でＹｅｓ）。さらに、決定部２３は、送信可能なデータ信号数（Ｚ）の値が１以上であるかを判定する（ステップＳ９３）。送信可能なデータ信号数が１以上ではない場合、決定部２３は、送信処理を中断させると共に、タイマを起動する（ステップＳ９３でＮｏ、ステップＳ９４）。決定部２３は、タイマがタイムアウトするまで、送信処理を中断させて待機する（ステップＳ９５でＮｏ）。決定部２３は、タイマがタイムアウトすると、ステップＳ９３に戻る。
【０１０１】
送信可能なデータ信号数が１以上である場合、決定部２３は、再送対象のデータがあるかを判定する（ステップＳ９６）。再送対象のデータがある場合、決定部２３は、転送制御部２４に再送処理を要求する。転送制御部２４は、通信部１１を介して、再送対象のデータを送信する（ステップＳ９６でＹｅｓ、ステップＳ９７）。決定部２３は、送信可能なデータ信号数（Ｚ）から、再送したデータチャンク数（Ｙ）を引いた値を求める（ステップＳ９８）。転送制御部２４は、Ｙ個以下のデータチャンクを送信する（ステップＳ９９）。一方、再送対象のデータがない場合、転送制御部２４は、シーケンス数が（Ｘ＋ＲＤ）以下のデータチャンクを送信する（ステップＳ９６でＮｏ、ステップＳ１００）。
【０１０２】
第３の実施形態では、再送されるデータチャンクも含めたデータチャンクの送信数の合計値が、受信側の通信装置１０での受信可能なデータ数を上回らないように調整することにより、受信側の通信装置１０でのオーバーフローを防止している。また、受信側の通信装置１０は、データ格納後での受信ウィンドウ３２の空き容量を逐次計算すると共に、最新の空き状況に応じて受信可能なデータ信号数を求めて、ＳＡＣＫの送信時に送信側の通信装置１０に通知している。このため、第２の実施形態と同様に、送信側の通信装置１０ｂから送信されたデータチャンク中のデータ長がＭＴＵより短いなどの理由により、受信側の受信ウィンドウ３２ａに空きがある場合も、受信ウィンドウ３２ａは効率的に使用される。
【０１０３】
＜第４の実施形態＞
図１８は、第４の実施形態にかかる通信処理の例を説明するシーケンス図である。以下、図１８を参照しながら、受信側の通信装置１０ａで受信可能なデータ信号数を用いたモード（ＲＤモード）と、通信装置１０ａから通知された受信ウィンドウ保証量を用いるモード（ｒｗｎｄモード）を切り替える場合の処理の例を説明する。以下、ＲＤモードは、通信装置１０ａ中の受信ウィンドウ３２ａの空き容量が第１の閾値（ｍｏｄｅ＿ｕｎｄｅｒ）以下になってから、受信ウィンドウ３２ａの空き容量が第２の閾値（ｍｏｄｅ＿ｏｖｅｒ）以上になるまでの間、使用されるものとする。なお、第４の実施形態においても、通信装置１０ａと通信装置１０ｂの間での通信の確立の際の処理は、図１０を参照しながら説明した処理と同様である。
【０１０４】
ステップＳ１１１は、通信装置１０ａから通信装置１０ｂに送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクの送信の例を示す。ステップＳ１１１で送信されるＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンクには、以下の情報が含まれているとする。
タイプ＝２（ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク）
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝１０ｋＢ
データ長フラグ                      ＝１（固定長）
サイズ                              ＝１ｋＢ
閾値フラグ                          ＝１（輻輳制御方法の切り替えあり）
閾値ｍｏｄｅ＿ｕｎｄｅｒ          ＝４ｋＢ
なお、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫチャンク中のサイズは、ＲＤモードが用いられる場合に使用されるデータ長である。すなわち、ステップＳ１１１では、ＲＤモードでの輻輳制御の際にはデータ長として１キロバイトの固定長を用いる設定が行われている。換言すると、第４の実施形態において、ＲＤモードが用いられていない場合は、データチャンク中のデータ長は可変長である。
【０１０５】
通信装置１０ｂの決定部２３ｂは、ＳＣＴＰ  ＩＮＩＴ  ＡＣＫ  チャンク中の情報から、受信側の通信装置１０ａの受信ウィンドウ３２ａの容量と、受信ウィンドウ３２ａの空き容量が閾値を下回ると輻輳制御をＲＤモードで行うことを認識する。図１８の例では、閾値は４キロバイトであるので、受信ウィンドウ３２ａの空き容量が４キロバイト以下になるとＲＤモードでの処理が開始される。また、受信ウィンドウ３２ａの容量は１０キロバイトであり、通信装置１０ａと通信装置１０ｂの通信の開始時点では受信ウィンドウ３２ａにはデータが格納されていないことから、決定部２３ｂは、輻輳制御がｒｗｎｄモードで行われると判定する。決定部２３ｂは、通信装置１０ａからＳＡＣＫを受信するまでに、通信装置１０ａに１０キロバイトまでのデータを送信可能であることを、転送制御部２４ｂに通知する。
【０１０６】
転送制御部２４ｂは、１キロバイトのデータを含むＴＳＮ＝４のデータチャンクと、２キロバイトのデータを含むＴＳＮ＝５のデータチャンクを生成し、通信部１１ｂを介して通信装置１０ａに送信したとする（ステップＳ１１２）。
【０１０７】
通信装置１０ａの計算部２１ａは、通信部１１ａを介して、データチャンクを取得する。計算部２１ａは、アプリケーション処理部４１ａでの処理待ちが発生しているので、受信したデータチャンクを受信ウィンドウ３２ａに格納する。図１８の例では、ＴＳＮ＝４、５のデータチャンク中のデータが受信ウィンドウ３２ａに格納されるので、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿４１に示す通りになる。またこのときの、受信ウィンドウ３２ａの空き容量は７キロバイトになるので、計算部２１ａは、バッファ空き容量３１ａを７キロバイトに更新する。
【０１０８】
通信装置１０ａの通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、通信装置１０ｂに送信するためのＳＡＣＫチャンクを生成する。この時点では、通信装置１０ａと通信装置１０ｂの間の輻輳制御はｒｗｎｄモードで行われているので、ＳＡＣＫチャンクには、以下の情報が含まれていればよく、ＲＤ値などを含まなくても良い。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝５
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝７ｋＢ
通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する（ステップＳ１１３）。
【０１０９】
通信装置１０ｂの決定部２３ｂは、ＳＡＣＫチャンクを取得すると、受信側の通信装置１０ａの受信ウィンドウ３２ａの容量と、通信装置１０ａで受信されたチャンク中のＴＳＮを認識する。決定部２３ｂは、受信ウィンドウ保証量として７キロバイトが通知されていることから、通信装置１０ａから次のＳＡＣＫを受信するまでに、通信装置１０ａに７キロバイトまでのデータを送信可能であることを、転送制御部２４ｂに通知する。転送制御部２４ｂは、２キロバイトのデータを含むＴＳＮ＝６、７のデータチャンクを生成し、通信部１１ｂを介して通信装置１０ａに送信したとする（ステップＳ１１４）。
【０１１０】
通信装置１０ａの計算部２１ａは、通信部１１ａを介して、ＴＳＮ＝６、７のデータチャンクを取得する。計算部２１ａは、アプリケーション処理部４１ａでの処理待ちが継続しているので、受信したデータチャンクを受信ウィンドウ３２ａに格納する。このため、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿４２に示す通りになる。また、受信ウィンドウ３２ａの空き容量は３キロバイトになるので、計算部２１ａは、バッファ空き容量３１ａを３キロバイトに更新する。バッファ空き容量３１ａが閾値（ｍｏｄｅ＿ｕｎｄｅｒ）である４キロバイトを下回っているので、計算部２１ａは、通信装置１０ａと通信装置１０ｂの間の輻輳制御をＲＤモードに切り替えることを決定する。ＲＤモードへの切り替えに伴い、計算部２１ａは、受信可能なチャンク数の計算を開始する。ＲＤモードではデータ長として１キロバイトの固定長を用いる設定が行われているので、計算部２１ａは、バッファ空き容量３１ａより、通信装置１０ａでの受信可能なデータチャンク数は３であると判定する。
【０１１１】
通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、通信装置１０ｂに送信するためのＳＡＣＫチャンクを生成する。この時点では、通信装置１０ａと通信装置１０ｂの間の輻輳制御をＲＤモードに切り替えるので、ＳＡＣＫチャンクには、以下の情報が含まれる。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝７
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝３ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝１
受信可能なデータチャンク数（ＲＤ）  ＝３
ｍｏｄｅ＿ｏｖｅｒ                  ＝７ｋＢ
ｍｏｄｅ＿ｕｎｄｅｒ                ＝４ｋＢ
なお、ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ＝１は、輻輳制御に使用するモードを閾値と受信ウィンドウ報告量の値との比較結果に応じて切り替えることを表わす。通知部２２ａは、生成したＳＡＣＫチャンクを、通信部１１ａを介して、通信装置１０ｂに送信する（ステップＳ１１５）。
【０１１２】
通信装置１０ｂの決定部２３ｂは、通信部１１ｂを介して、ＳＡＣＫチャンクを取得する。決定部２３ｂは、ＳＡＣＫチャンクにｍｏｄｅ＿ｎｏｍ＿ｅｘｔ＝１という情報が含まれているので、受信ウィンドウ保証量とｍｏｄｅ＿ｕｎｄｅｒの値を比較する。ステップＳ１１５で送信されたＳＡＣＫチャンクでは、受信ウィンドウ保証量が３キロバイトであるのに対し、ｍｏｄｅ＿ｕｎｄｅｒが４キロバイトであるので、受信ウィンドウ保証量がｍｏｄｅ＿ｕｎｄｅｒを下回っている。そこで、決定部２３ｂは、通信装置１０ａでのバッファの空き容量が閾値ｍｏｄｅ＿ｕｎｄｅｒ以下になっていると判定し、輻輳制御をＲＤモードに切り替える（ステップＳ１１６）。
【０１１３】
決定部２３ｂは、ＳＡＣＫチャンクを用いて、通信装置１０ａがＴＳＮ＝７のチャンクを受信した時点でさらに３つのデータチャンクを受信できることを認識する。通信装置１０ｂから通信装置１０ａにＴＳＮ＝７以降のデータチャンクを送信していないので、決定部２３ｂは、さらに３つのデータチャンクを通信装置１０ａに送信可能であると判定する。転送制御部２４ｂは、ＴＳＮ＝８、９のデータチャンクを生成し、通信部１１ｂを介して、通信装置１０ａに向けて送信する（ステップＳ１１７）。ここで、ＴＳＮ＝８、９のデータチャンクは、いずれも１キロバイトである。
【０１１４】
通信装置１０ａの計算部２１ａは、通信部１１ａを介して、ＴＳＮ＝８、９のデータチャンクを取得する。計算部２１ａは、アプリケーション処理部４１ａでの処理待ちが継続しているので、受信したデータチャンクを受信ウィンドウ３２ａに格納する。このため、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿４３に示す通りになる。また、受信ウィンドウ３２ａの空き容量は１キロバイトになるので、計算部２１ａは、バッファ空き容量３１ａを１キロバイトに更新する。計算部２１ａは、更新後のバッファ空き容量３１ａを用いて、受信可能なチャンク数が１であると計算する。
【０１１５】
通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、ＳＡＣＫチャンクを生成する。この時点では、以下の情報を含むＳＡＣＫチャンクが生成され、通信部１１ｂ経由で通信装置１０ｂに送信される（ステップＳ１１８）。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝９
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝１ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝１
受信可能なデータチャンク数（ＲＤ）  ＝１
ｍｏｄｅ＿ｏｖｅｒ                  ＝７ｋＢ
ｍｏｄｅ＿ｕｎｄｅｒ                ＝４ｋＢ
【０１１６】
通信装置１０ｂの通信部１１ｂは、ＳＡＣＫチャンクを受信する。通信装置１０ｂの決定部２３ｂは、ＲＤモードで輻輳制御中であるので、ＳＡＣＫチャンク中の受信ウィンドウ保証量と、閾値ｍｏｄｅ＿ｏｖｅｒを比較する。ステップＳ１１８で送信されてきたＳＡＣＫでは、受信ウィンドウ保証量が１キロバイトであるのに対し、閾値ｍｏｄｅ＿ｏｖｅｒは７キロバイトである。そこで、決定部２３は、ＲＤモードでの輻輳制御を続行することを決定する。決定部２３ｂは、通信装置１０ａがＴＳＮ＝９のチャンクを受信した時点で１つのデータチャンクを受信できることを認識する。通信装置１０ｂから通信装置１０ａへは、ＴＳＮ＝９以降のデータチャンクを送信していないので、決定部２３ｂは、１つのデータチャンクを通信装置１０ａに送信可能であると判定する。
【０１１７】
一方、通信装置１０ａにおいて、ステップＳ１１８でＳＡＣＫチャンクを送信してから、アプリケーション処理部４１ａでの処理待ちが解消したとする。アプリケーション処理部４１ａによって、ＴＳＮ＝４〜８のデータチャンクの処理が終了したとする（ステップＳ１１９）。すると、計算部２１ａは、受信ウィンドウ３２ａには、ＴＳＮ＝９を含む１キロバイトのデータチャンクだけが格納されているので、バッファ空き容量３１ａを９キロバイトに変更する。
【０１１８】
通信装置１０ｂでは、ステップＳ１１８で受信したＳＡＣＫチャンクの処理結果に基づいて、転送制御部２４ｂが通信装置１０ａ宛てに、ＴＳＮ＝１０のデータチャンクを生成したとする。ＴＳＮ＝１０のデータチャンクも１キロバイトである。転送制御部２４ｂは、生成したデータチャンクを通信装置１０ａに向けて送信する（ステップＳ１２０）。
【０１１９】
通信装置１０ａの計算部２１ａは、通信部１１ａを介して、ＴＳＮ＝１０のデータチャンクを取得する。計算部２１ａは、アプリケーション処理部４１ａでの処理待ちが発生したため、受信したデータチャンクを受信ウィンドウ３２ａに格納する。すると、受信ウィンドウ３２ａには、ＴＳＮ＝９、１０のデータチャンクが格納されるので、受信ウィンドウ３２ａの使用状態は、受信ウィンドウ３２＿４４に示す通りになる。また、受信ウィンドウ３２ａの空き容量は８キロバイトになるので、計算部２１ａは、バッファ空き容量３１ａを８キロバイトに更新すると共に、受信可能なチャンク数が８であると計算する。
【０１２０】
通知部２２ａは、ＳＡＣＫチャンクの送信タイミングになると、ＳＡＣＫチャンクを生成する。この時点では、以下の情報を含むＳＡＣＫチャンクが生成され、通信装置１０ｂに送信される（ステップＳ１２１）。
タイプ＝３（ＳＡＣＫチャンク）
受信済みのＴＳＮの最大値＝１０
受信ウィンドウ保証量（ａ＿ｒｗｎｄ）＝８ｋＢ
ｍｏｄｅ＿ｎｏｍ＿ｅｘｔ            ＝１
受信可能なデータチャンク数（ＲＤ）  ＝８
ｍｏｄｅ＿ｏｖｅｒ                  ＝７ｋＢ
ｍｏｄｅ＿ｕｎｄｅｒ                ＝４ｋＢ
【０１２１】
ステップＳ１２１のＳＡＣＫチャンクでは、受信ウィンドウ保証量は閾値ｍｏｄｅ＿ｏｖｅｒ以上になっている。そこで、計算部２１ａは、データの送信元の通信装置１０ｂがステップＳ１２１のＳＡＣＫチャンクを受信すると、ＲＤモードでの輻輳制御を終了すると認識する。このため、以降はＲＤモードで使用される受信可能なデータチャンク数の計算を中断し、ｒｗｎｄモードに移行する。
【０１２２】
通信装置１０ｂの決定部２３ｂは、通信部１１ｂを介して、ＳＡＣＫチャンクを取得する。通信装置１０ｂの決定部２３ｂは、ＲＤモードで輻輳制御中であるので、ＳＡＣＫチャンク中の受信ウィンドウ保証量と、閾値ｍｏｄｅ＿ｏｖｅｒを比較する。ステップＳ１１８で送信されてきたＳＡＣＫでは、受信ウィンドウ保証量が８キロバイトであるのに対し、閾値ｍｏｄｅ＿ｏｖｅｒは７キロバイトであるため、受信ウィンドウ保証量が閾値ｍｏｄｅ＿ｏｖｅｒ以上になっている。そこで、決定部２３は、ＲＤモードでの輻輳制御を中断し、ｒｗｎｄモードに移行することを決定する（ステップＳ１２２）。決定部２３ｂは、受信側の通信装置１０ａの受信ウィンドウ保証量が８キロバイトであるため、通信装置１０ａから次のＳＡＣＫを受信するまでに、通信装置１０ａに８キロバイトまでのデータを送信可能であると判定する。
【０１２３】
なお、図１８は処理の一例であり、実装に応じて変更され得る。例えば、計算部２１ａは、ステップＳ１２１のＳＡＣＫチャンクを生成する時点において、バッファ空き容量３１ａが８キロバイトになっていることからｒｗｎｄモードに移行しても良い。この場合、ステップＳ１２１で送信されるＳＡＣＫチャンクには、受信可能データ数（ＲＤ）が含まれなくてもよい。
【０１２４】
図１９は、データの受信側の通信装置１０の処理の例を説明するフローチャートである。図１９では、変数ｎと定数Ｎを使用する。変数ｎは処理した信号数の計数に使用され、定数Ｎは受信した信号中に含まれる信号数である。信号が結合されていない場合、定数Ｎは１となるが、受信信号中に複数の信号が結合されていると、定数Ｎは、受信信号中で結合されている信号の数に設定される。
【０１２５】
決定部２３は、通信部１１を介して受信した信号に複数の信号が結合されている場合、信号分離を行う（ステップＳ１３１でＹｅｓ、ステップＳ１３２）。ステップＳ１３２の処理が行われた場合と、ステップＳ１３１において受信した信号に複数の信号が結合されていないと判定された場合（ステップＳ１３１でＮｏ）、決定部２３は、変数ｎを１に設定する（ステップＳ１３３）。決定部２３は、ｎ番目の信号がＳＡＣＫであるかを判定する（ステップＳ１３４）。ｎ番目の信号がＳＡＣＫである場合、ＳＡＣＫの受信処理を行うことにより、自装置が送信するデータの宛先の装置での受信ウィンドウ３２の空き容量を取得する（ステップＳ１３５）。その後、変数ｎと定数Ｎを比較する（ステップＳ１５０）。変数ｎが定数Ｎ以上の場合、決定部２３は、全ての信号に対する処理が終わったと判定して、処理を終了する（ステップＳ１５０でＹｅｓ）。一方、変数ｎが定数Ｎ未満の場合、決定部２３は、変数ｎを１つインクリメントしてステップＳ１３４に戻る（ステップＳ１５０でＮｏ、ステップＳ１５１）。
【０１２６】
ｎ番目の信号がＳＡＣＫではない場合、閾値を用いて輻輳制御を切り替える設定が行われているかを判定する（ステップＳ１３６）。なお、図１９では、紙面の関係から、閾値を用いて輻輳制御を切り替える設定のことを「閾値モード」と記載している。閾値を用いて輻輳制御を切り替える設定が行われていない場合、計算部２１は、データを受信ウィンドウ３２に格納し、バッファ空き容量３１を更新する（ステップＳ１３６でＮｏ、ステップＳ１３７）。通知部２２は、ＳＡＣＫの送信タイミングであるかを判定する（ステップＳ１３８）。ＳＡＣＫの送信タイミングである場合、通知部２２は、ＳＡＣＫの送信処理を行う（ステップＳ１３８でＹｅｓ、ステップＳ１３９）。ＳＡＣＫの送信タイミングではない場合と、ステップＳ１３９の処理が終わった場合、ステップＳ１５０以降の処理が行われる。
【０１２７】
次に、閾値を用いて輻輳制御を切り替える設定が行われていると判定された場合について説明する（ステップＳ１３６でＹｅｓ）。この場合、計算部２１は、バッファ空き容量３１が閾値ｍｏｄｅ＿ｕｎｄｅｒ以下であるかを判定する（ステップＳ１４０）。バッファ空き容量３１が閾値ｍｏｄｅ＿ｕｎｄｅｒ以下である場合、計算部２１は、輻輳制御のモードをＲＤモードにすることを決定する（ステップＳ１４０でＹｅｓ、ステップＳ１４１）。バッファ空き容量３１が閾値ｍｏｄｅ＿ｕｎｄｅｒ以下でない場合と、ステップＳ１４１の処理が行われた場合、計算部２１は、バッファ空き容量３１が閾値ｍｏｄｅ＿ｏｖｅｒ以上であるかを判定する（ステップＳ１４２）。バッファ空き容量３１が閾値ｍｏｄｅ＿ｏｖｅｒ以上である場合、計算部２１は、輻輳制御のモードをｒｗｎｄモードにすることを決定する（ステップＳ１４２でＹｅｓ、ステップＳ１４３）。
【０１２８】
輻輳制御のモードがＲＤモードである場合、通知部２２は、ＳＡＣＫの送信タイミングであるかを判定する（ステップＳ１４４でＹｅｓ、ステップＳ１４５）。ＳＡＣＫの送信タイミングである場合、通知部２２は、ＳＡＣＫチャンクに、受信済みのチャンク中のシーケンス番号（ＴＳＮ）と、受信可能なデータ信号数（ＲＤ）を含めてデータの送信元に通知する（ステップＳ１４５でＹｅｓ、ステップＳ１４６）。ＳＡＣＫの送信タイミングではない場合と、ステップＳ１４６の処理が行われた場合は、ステップＳ１５０以降の処理が行われる。
【０１２９】
輻輳制御のモードがＲＤモードでない場合、通知部２２は、データの受信に伴ってバッファ空き容量３１を削減する（ステップＳ１４４でＮｏ、ステップＳ１４７）。その後、通知部２２は、ＳＡＣＫの送信タイミングであるかを判定する（ステップＳ１４８）。ＳＡＣＫの送信タイミングである場合、通知部２２は、ＳＡＣＫチャンクに、受信ウィンドウ３２の空き容量を含めてデータの送信元に通知する（ステップＳ１４８でＹｅｓ、ステップＳ１４９）。ＳＡＣＫの送信タイミングではない場合と、ステップＳ１４９の処理が行われた場合は、ステップＳ１５０以降の処理が行われる。
【０１３０】
なお、図１９は処理の一例であり、実装に応じて処理の手順は変更され得る。例えば、ステップＳ１４１の処理が行われた場合は、ステップＳ１４２とＳ１４３の処理が行われずに、ステップＳ１４４以降の処理が行われても良い。
【０１３１】
図２０は、データの送信側の通信装置１０の処理の例を説明するフローチャートである。図２０では、閾値ｍｏｄｅ＿ｕｎｄｅｒを第１の閾値、閾値ｍｏｄｅ＿ｏｖｅｒを第２の閾値と記載する。
【０１３２】
通信部１１は、信号を受信する（ステップＳ１６１）。決定部２３は、受信信号がＳＡＣＫチャンクであるかを判定する（ステップＳ１６２）。受信信号がＳＡＣＫチャンクでない場合、データ受信処理が行われる（ステップＳ１６２でＮｏ、ステップＳ１６３）。受信信号がＳＡＣＫチャンクである場合、決定部２３は、輻輳制御をＲＤモードで行っているかを判定する（ステップＳ１６２でＹｅｓ、ステップＳ１６４）。
【０１３３】
輻輳制御をＲＤモードで行っていない場合、第１の閾値（閾値ｍｏｄｅ＿ｕｎｄｅｒ）が通知されているかを判定する（ステップＳ１６５）。第１の閾値が通知されていない場合、決定部２３は、処理を終了する（ステップＳ１６５でＮｏ）。第１の閾値が通知されている場合、決定部２３は、受信側の通信装置１０から通知されたバッファ空き容量３１が第１の閾値以下であるかを判定する（ステップＳ１６６）。なお、バッファ空き容量３１は、受信ウィンドウ保証量（受信ウィンドウ３２の空き容量）である。受信側の通信装置１０から通知されたバッファ空き容量３１が第１の閾値以下である場合、決定部２３は、輻輳制御のモードをＲＤモードに切り替えることを決定する（ステップＳ１６６でＹｅｓ、ステップＳ１６７）。決定部２３は、受信側の通信装置１０から通知されたシーケンス番号（ＴＳＮ）と、受信可能数ＲＤの合計値を、再送処理を行わない場合の送信可能なシーケンス番号の最大値として記憶する（ステップＳ１６８）。一方、受信側の通信装置１０から通知されたバッファ空き容量３１が第１の閾値以下ではない場合、ＳＡＣＫ中の受信ウィンドウ保証量から、送信可能なデータのサイズを求める（ステップＳ１６６でＮｏ、ステップＳ１６９）。
【０１３４】
輻輳制御をＲＤモードで行っている場合、受信側の通信装置１０から通知されたバッファ空き容量３１（受信ウィンドウ保証量）が第２の閾値（閾値ｍｏｄｅ＿ｏｖｅｒ）以上であるかを判定する（ステップＳ１６４でＹｅｓ、ステップＳ１７０）。受信側の通信装置１０から通知された受信ウィンドウ保証量が第２の閾値以上である場合、決定部２３はｒｗｎｄモードに切り替え、ＳＡＣＫ中の受信ウィンドウ保証量から、送信可能なデータのサイズを求める（ステップＳ１７０でＹｅｓ、ステップＳ１７１）。一方、受信側の通信装置１０から通知された受信ウィンドウ保証量が第２の閾値未満の場合、ステップＳ１６８以降の処理が行われる（ステップＳ１７０でＮｏ）。
【０１３５】
以上説明したように、第４の実施形態では、ＲＤモードは、通信装置１０ａ中の受信ウィンドウ３２ａの空き容量が第１の閾値以下になってから、受信ウィンドウ３２ａの空き容量が第２の閾値以上になるまでの間、使用される。ここで、ＲＤモードでは、受信可能なデータ数を正確に求めるので、ｒｗｎｄモードよりも通信装置１０での処理負荷が高くなることが予想される。第４の実施形態では、ＲＤモードが使用される期間を限定することにより、通信装置１０の処理負荷を軽減することができる。また、他の実施形態と同様に、第４の実施形態でも、受信側の通信装置１０でのオーバーフローを回避できる。
【０１３６】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１３７】
以上の例で説明したチャンクのフォーマット例は一例であり、各チャンクに含まれるデータ要素や各データ要素の格納位置は、実装に応じて変更され得る。
【０１３８】
第４の実施形態では、第１の閾値（ｍｏｄｅ＿ｕｎｄｅｒ）と第２の閾値（ｍｏｄｅ＿ｏｖｅｒ）の両方がＳＡＣＫチャンクに含まれる場合での処理例を述べたが、実装に応じてＳＡＣＫチャンクには、第１の閾値と第２の閾値の一方だけが含まれていても良い。例えば、受信側の通信装置１０ａは、バッファ空き容量３１ａが第１の閾値を下回ると、第１の閾値を含むＳＡＣＫチャンクを送信側の通信装置１０ｂに送信しても良い。この場合、送信側の通信装置１０ｂ中の決定部２３ｂでは、ＳＡＣＫチャンクで通知された受信ウィンドウ保証量（ａ＿ｒｎｗｄ）と第１の閾値を比較することにより、通信装置１０ａにおいて、バッファ空き容量３１ａが第１の閾値を下回ったことを認識できる。通信装置１０ａにおいてバッファ空き容量３１ａが第１の閾値を下回ったことを認識すると、決定部２３ｂは、通信装置１０ａとの間の輻輳制御をＲＤモードで行う。
【０１３９】
同様に、受信側の通信装置１０ａは、通信装置１０ａと通信装置１０ｂとの間の輻輳制御がＲＤモードで行われているときに、バッファ空き容量３１ａが第２の閾値以上になると、ＳＡＣＫチャンクに第２の閾値を含めても良い。すると、送信側の通信装置１０ｂ中の決定部２３ｂでは、ＳＡＣＫチャンクで通知された受信ウィンドウ保証量（ａ＿ｒｎｗｄ）と第２の閾値を比較することにより、通信装置１０ａにおいて、バッファ空き容量３１ａが第２の閾値以上になったことを認識できる。通信装置１０ａにおいてバッファ空き容量３１ａが第２の閾値以上になった場合、決定部２３ｂは、通信装置１０ａとの間の輻輳制御をｒｗｎｄモードに戻す。
【０１４０】
さらに、以上の説明で述べた閾値の値等も一例であり、実装に応じて格式位置の値は変更され得る。また、第１の閾値（ｍｏｄｅ＿ｕｎｄｅｒ）と第２の閾値（ｍｏｄｅ＿ｏｖｅｒ）の両方が同じ値に設定されても良い。
【０１４１】
なお、以上の説明では、ＳＣＴＰを使用した通信を例として説明したが、他のプロトコルが使用される場合にも、以上で説明した実施形態を適用することができる。
【０１４２】
上述の第１〜第４の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
バッファを備える第１の通信装置と、
前記第１の通信装置にデータを送信する第２の通信装置
を備え、
前記第１の通信装置は、
前記第２の通信装置から送信されるデータ信号のデータ量の予測値と、前記バッファに蓄積可能なデータの量を用いて、受信可能なデータ信号数を算出し、
前記第２の通信装置から送信されたシーケンス番号である送信番号と、前記データ信号数を前記第２の通信装置に送信し、
前記第２の通信装置は、
前記送信番号と前記受信可能なデータ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定し、
該決定した数以下のデータ信号を前記第１の通信装置に送信する
ことを特徴とする通信システム。
（付記２）
前記第２の通信装置は、前記第１の通信装置で受信可能なデータ信号数から、前記送信番号に対応付けられたデータ信号の送信後に送信したデータ信号数を減算して得られる数のデータ信号を、前記第１の通信装置に送信可能であると判定する
ことを特徴とする付記１に記載の通信システム。
（付記３）
前記第１の通信装置は、前記バッファの空き容量が閾値以下になると、前記送信番号と前記第１の通信装置が受信可能なデータ信号数の組み合わせを、前記バッファの空き容量と前記閾値と共に、前記第２の通信装置に送信し、
前記第２の通信装置は、前記第１の通信装置中の前記バッファの空き容量が前記閾値以下であると判定すると、前記送信番号と前記第１の通信装置が受信可能なデータ信号数の和の値以下のシーケンス番号に対応付けられたデータのうちで、前記第１の通信装置に送信していないデータを含めたデータ信号を、前記第１の通信装置に送信する
ことを特徴とする付記１または２に記載の通信システム。
（付記４）
前記第１の通信装置は、前記バッファの空き容量が前記閾値より大きい他の閾値を越えると、前記第１の通信装置での前記バッファの空き領域の大きさを前記他の閾値と共に前記第２の通信装置に通知し、
前記第２の通信装置は、前記第１の通信装置中の前記バッファの空き容量が前記他の閾値以上であると判定すると、前記バッファの空き領域の大きさを用いて決定した数のデータ信号を、前記第１の通信装置に送信する
ことを特徴とする付記３に記載の通信システム。
（付記５）
前記第２の通信装置は、前記第１の通信装置への再送処理を行う場合、
再送対象のデータ信号を前記第１の通信装置に送信し、
前記第１の通信装置が受信可能なデータ信号数と前記再送対象のデータ信号数との差分を求め、
前記送信番号と前記差分の合計値以下のシーケンス番号に対応付けられたデータのうちで、前記第１の通信装置に送信していないデータを含めたデータ信号を、前記第１の通信装置に送信する
ことを特徴とする付記１〜４のいずれか１項に記載の通信システム。
（付記６）
前記第１の通信装置は、
前記第２の通信装置が送信するデータ信号に含められる送信データ量を特定可能な場合、前記送信データ量を前記予測値として用いて前記第１の通信装置が受信可能なデータ信号数を計算し、
前記送信データ量を特定しない場合、１つのデータ信号で送信できるデータ量の最大値を前記予測値として用いて、前記第１の通信装置が受信可能なデータ信号数を計算する
ことを特徴とする付記１〜５のいずれか１項に記載の通信システム。
（付記７）
データの宛先装置との通信処理を行う通信部と、
前記宛先装置に送信したデータに対応付けられたシーケンス番号である送信番号と、前記宛先装置がバッファに蓄積可能なデータ信号数を含む通知とを前記通信部が受信すると、前記送信番号と前記データ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定する決定部
を備え、
前記通信部は、前記決定部により決定された数以下のデータ信号を前記第１の通信装置に送信する
ことを特徴とする通信装置。
（付記８）
前記決定部は、前記宛先装置がバッファに蓄積可能なデータ信号数から、前記送信番号に対応付けられたデータ信号の送信後に送信したデータ信号数を減算して得られる数のデータ信号を、前記宛先装置に送信可能なデータ信号数とする
ことを特徴とする付記７に記載の通信装置。
（付記９）
前記通信部は、前記宛先装置に送信可能なデータ信号数として前記決定部で決定された送信数が正であり、かつ、前記宛先装置から再送が要求されると、再送対象のデータ信号を前記宛先装置に送信し、
前記決定部は、
前記宛先装置がバッファに蓄積可能なデータ信号数と前記再送対象のデータ信号数との差分を求め、
前記送信番号と前記差分の合計値以下のシーケンス番号に対応付けられたデータのうちで、前記宛先装置に送信していないデータを、前記宛先装置に送信可能であると判定する
ことを特徴とする付記７または８に記載の通信装置。
（付記１０）
前記通信装置に送信されてきたデータ信号を格納する受信バッファと、
前記受信バッファの空き容量と、前記通信装置に送信されてきたデータ信号の送信元が１つのデータ信号に含めるデータ量の予測値を用いて、前記受信バッファに蓄積可能なデータ信号数を計算する計算部
をさらに備え、
前記通信部は、前記計算部が計算したデータ信号数を、前記送信元から受信したデータ信号中のシーケンス数と共に、前記送信元に通知する
ことを特徴とする付記７〜９のいずれか１項に記載の通信装置。
（付記１１）
前記受信バッファの空き容量が閾値以下になると、
前記計算部は、前記受信バッファに蓄積可能なデータ信号数を計算し、
前記通信部は、前記計算部が計算したデータ信号数を前記送信元に通知し、
前記受信バッファの空き容量が前記閾値より大きい他の閾値以上になると、
前記計算部は前記データ信号数の計算を中断し、
前記通信部は、前記受信バッファの空き領域の大きさを前記送信元に通知する
ことを特徴とする付記１０に記載の通信装置。
（付記１２）
バッファを備える第１の通信装置と、前記第１の通信装置にデータを送信する第２の通信装置を含むネットワークにおいて、
前記第１の通信装置は、
前記第２の通信装置から送信されるデータ信号のデータ量の予測値と、前記バッファに蓄積可能なデータの量を用いて、受信可能なデータ信号数を算出し、
前記第２の通信装置から送信されたシーケンス番号である送信番号と、前記データ信号数を前記第２の通信装置に送信し、
前記第２の通信装置は、
前記送信番号と前記受信可能なデータ信号数に基づいて、前記送信番号に対応付けられたデータ信号より後に送信するデータ信号数を決定し、
該決定した数以下のデータ信号を前記第１の通信装置に送信する
ことを特徴とする通信方法。
（付記１３）
前記第２の通信装置は、前記第１の通信装置で受信可能なデータ信号数から、前記送信番号に対応付けられたデータ信号の送信後に送信したデータ信号数を減算して得られる数のデータ信号を、前記第１の通信装置に送信可能であると判定する
ことを特徴とする付記１２に記載の通信方法。
（付記１４）
前記第１の通信装置は、前記バッファの空き容量が閾値以下になると、前記送信番号と前記第１の通信装置が受信可能なデータ信号数の組み合わせを、前記バッファの空き容量および前記閾値と共に、前記第２の通信装置に送信し、
前記第２の通信装置は、前記第１の通信装置中の前記バッファの空き容量が前記閾値以下であると判定すると、前記送信番号と前記第１の通信装置が受信可能なデータ信号数の和の値以下のシーケンス番号に対応付けられたデータのうちで、前記第１の通信装置に送信していないデータを含めたデータ信号を、前記第１の通信装置に送信する
ことを特徴とする付記１２または１３に記載の通信方法。
（付記１５）
前記第２の通信装置は、前記第１の通信装置への再送処理を行う場合、
再送対象のデータ信号を前記第１の通信装置に送信し、
前記第１の通信装置が受信可能なデータ信号数と前記再送対象のデータ信号数との差分を求め、
前記送信番号と前記差分の合計値以下のシーケンス番号に対応付けられたデータのうちで、前記第１の通信装置に送信していないデータを含めたデータ信号を、前記第１の通信装置に送信する
ことを特徴とする付記１２〜１４のいずれか１項に記載の通信システム。
【符号の説明】
【０１４３】
５  通信装置
６、３２  受信ウィンドウ
１０  通信装置
１１  通信部
１２  無線通信部
２０  制御部
２１  計算部
２２  通知部
２３  決定部
２４  転送制御部
３０  記憶部
３１  バッファ空き容量
４０  処理部
４１  アプリケーション処理部
５１  ＡＰＩ
５２  ＳＣＴＰ
５３  通信制御部
５４  ネットワークインタフェース
６０  ｅＮＢ
６１  伝送路終端部
６２  ベースバンド処理部
６５  ネットワーク
６６  ＵＥ
６７  通信エリア
７０  コアネットワーク装置
１０１  インタフェース
１０２、１１１  プロセッサ
１０３  メモリ
１０４  スイッチ回路
１０５  ＲＦ回路
１１２  ＤＳＰ
１２０  インターネット
１２５  アソシエーション
【図１】
2017085258.tif 000003
【図２】
2017085258.tif 000004
【図３】
2017085258.tif 000005
【図４】
2017085258.tif 000006
【図５】
2017085258.tif 000007
【図６】
2017085258.tif 000008
【図７】
2017085258.tif 000009
【図８】
2017085258.tif 000010
【図９】
2017085258.tif 000011
【図１０】
2017085258.tif 000012
【図１１】
2017085258.tif 000013
【図１２】
2017085258.tif 000014
【図１３】
2017085258.tif 000015
【図１４】
2017085258.tif 000016
【図１５】
2017085258.tif 000017
【図１６】
2017085258.tif 000018
【図１７】
2017085258.tif 000019
【図１８】
2017085258.tif 000020
【図１９】
2017085258.tif 000021
【図２０】
2017085258.tif 000022