(57)【要約】【課題】通信効率を低下させることなく、受信したデータセグメントに周回したシーケンス番号が付されていてもタイムスタンプを用いて正しいオクテットストリームを得る。【解決手段】ＣＰＵ４１は、送信ノード３との間にコネクションを確立し、送信ノード３から逐次送信されるデータセグメントを当該コネクションを用いて受信する。また、ＣＰＵ４１は、受信したデータセグメントを、シーケンス番号が周回するまではタイムスタンプを用いずに並べてオクテットストリームを再生し、シーケンス番号が周回してからはタイムスタンプを用いて並べてオクテットストリームを再生する。【選択図】      図１
2005064595.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
オクテットストリームから切り出されたデータと前記ストリームにおける前記データのオクテット位置を示す有限のシーケンス番号と送信されたタイミングを示すタイムスタンプとを有するセグメントを逐次受信する受信手段と、
前記受信手段が１つ目の前記セグメントを受信する以前に、オフを値としたフラグを前記メモリに書き込む初期化手段と、
前記シーケンス番号が周回したこと又は周回する可能性が充分に高いことを検出する検出手段と、
前記検出手段により前記シーケンス番号が周回したこと又は周回する可能性が充分に高いことが検出された場合には、オンを値とするように前記フラグを書き換えるとともに直前に前記受信手段により受信された前記セグメントの前記タイムスタンプを最新タイムスタンプとして前記メモリに書き込む、切り換え手段と、
前記受信手段が１つの前記セグメントを受信すると、前記メモリ上の前記フラグがオンを値とする場合には、前記１つのセグメントの前記タイムスタンプにより示されるタイミングが前記メモリ上の前記最新タイムスタンプにより示されるタイミングよりも前であるか否かを判定し、判定結果が肯定的であれば前記１つのセグメントを破棄する、破棄手段と、
前記破棄手段による判定結果が否定的であれば、前記１つのセグメントの前記シーケンス番号と受信が期待される前記セグメントの前記シーケンス番号とを比較し、前者が後者以前のオクテット位置を示す場合には、前記１つのセグメントの前記タイムスタンプにより示されるタイミングを示すように前記最新タイムスタンプを書き換える、更新手段と、
前記破棄手段により破棄されなかった前記セグメントを用いて前記ストリームを再生する再生手段とを有する通信装置。
【請求項２】
前記受信手段が前記１つ目の前記セグメントを受信すると、前記１つ目のセグメントの前記シーケンス番号または前記１つ目のセグメントの前記シーケンス番号に近い前記シーケンス番号を、基準シーケンス番号として前記メモリに書き込む、初期設定手段を有し、
前記検出手段は、前記受信手段により受信された前記セグメントの前記シーケンス番号が前記メモリに記憶されている前記基準シーケンス番号と一致するか又は前記基準シーケンス番号を超えると、前記シーケンス番号が周回したこと又は周回する可能性が充分に高いことを検出したとすることを特徴とする請求項１に記載の通信装置。
【請求項３】
広帯域の通信リンクを提供する高速通信手段と、
狭帯域の通信リンクを提供する低速通信手段と、
前記高速通信手段と前記低速通信手段とのいずれか一方を選択する選択手段とを有し、
前記受信手段は、前記選択手段により選択された通信手段により提供される通信リンクを用いて前記セグメントを逐次受信することを特徴とする請求項１に記載の通信装置。
【請求項４】
有線通信リンクを提供する有線通信手段と、
無線通信リンクを提供する無線通信手段と、
前記有線通信手段と前記無線通信手段とのいずれか一方を選択する選択手段とを有し、
前記受信手段は、前記選択手段により選択された通信手段により提供される通信リンクを用いて前記セグメントを逐次受信することを特徴とする請求項１に記載の通信装置。
【請求項５】
コンピュータに、
オクテットストリームから切り出されたデータと前記ストリームにおける前記データのオクテット位置を示す有限のシーケンス番号と送信されたタイミングを示すタイムスタンプとを有するセグメントを、前記シーケンス番号が周回するまで又は周回する可能性が充分に高くなるまで逐次受信し、受信した前記セグメントを前記タイムスタンプを用いずに並べて前記オクテットストリームを再生する過程と、
前記シーケンス番号が周回してから又は周回する可能性が充分に高くなってから前記セグメントを逐次受信し、受信した前記セグメントを前記タイムスタンプを用いて並べて前記オクテットストリームを再生する過程とを実行させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、受信ノードにおいて、受信したデータセグメントの順序を各セグメントが有するシーケンス番号を用いて定める順序保証技術に関する。
【０００２】
【従来の技術】
順序保証技術を採用した通信プロトコルの１つにＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）がある。ＴＣＰに従う通信において、オクテットストリームを送信しようとする送信ノードは、当該オクテットストリームから、予め定められたサイズのデータを順に切り出し、データ毎にデータセグメントを生成し、これらのデータセグメントを受信ノードへ送信する。
【０００３】
１つのデータセグメントは、１つのデータと、上記オクテットストリームにおける当該データのオクテット位置を示すシーケンス番号とを有する。受信ノードは、受信バッファに書き込まれたデータセグメントからデータを抽出し、抽出したデータをシーケンス番号に応じた順序で並べることにより、上記オクテットストリームを再生する。
【０００４】
ところで、データセグメントにおけるシーケンス番号のフィールド長は固定長である。つまり、シーケンス番号は有限である。したがって、送信ノードは、１つのコネクションを用いて送信するデータ量が限界を超えると、既に使用したシーケンス番号と同一のシーケンス番号を再び使用することになる。このように再使用されたシーケンス番号は「周回シーケンス番号」と呼ばれる。
【０００５】
周回シーケンス番号の使用により問題が生じるのは、今後の普及が予想される広帯域かつ高遅延の通信網である。このような通信網を介してＴＣＰに従う通信を行うと、図５におけるデータセグメントＤＳ１及びデータセグメントＤＳ２のような、同一のシーケンス番号が付された複数のデータセグメントが通信網内に存在する状況が生じ得る。
【０００６】
図６は、このような状況下で行われる通信の一例を模式的に示すシーケンス図であり、問題に直結するデータセグメントのみを示している。この図の例では、送信ノードから送信されたデータセグメントＤＳ１が何らかの要因により大幅に遅延する。このため、再送タイマがタイムアウトし、送信ノードは、時刻ｔ１にて、データセグメントＤＳ１と同一内容のデータセグメントを再送する。
【０００７】
再送されたデータセグメントは時刻ｔ２にて受信ノードに到着する。このデータセグメントを受信した受信ノードは、当該データセグメントに対する肯定的同期セグメントを返信する。この肯定的同期セグメントには、当該データセグメントを受信したことを通知する肯定的な確認応答と、次に受信を期待するデータセグメントのシーケンス番号（以降、「ＡＣＫシーケンス番号」）とが含まれている。
【０００８】
遅延したデータセグメントＤＳ１は時刻ｔ３にて受信ノードに到着するが、再送されたデータセグメントは時刻ｔ３以前の時刻ｔ２にて受信ノードに到着しているから、受信ノードにおいて、データセグメントＤＳ１は不要となり、通常であれば破棄される。しかし、通信網が広帯域であるために、時刻ｔ３以前にシーケンス番号が周回し、受信ノードは、時刻ｔ３にて、データセグメントＤＳ１と同一値の周回シーケンス番号を含むデータセグメントＤＳ２を受け付けることができる状態となっている。このため、時刻ｔ３にて、データセグメントＤＳ２の到着前にデータセグメントＤＳ１を受信した受信ノードは、そのシーケンス番号がデータセグメントＤＳ２と同一であることから、データセグメントＤＳ２を受信したと誤認してしまう。この結果、受信ノードでは不適切なオクテットストリームが再生されることになる。
【０００９】
もちろん、受信ノードがデータセグメントＤＳ２を受信した場合に当該データセグメントを受け付けることができる状態となってから、データセグメントＤＳ２が受信ノードに到着するまでの時間が充分に短ければ、上述した問題は生じ難い。しかし、高遅延の通信網を用いる場合、この時間が長くなってしまう。つまり、上記の問題は、広帯域かつ高遅延の通信網に特有の問題といえる。
【００１０】
このような問題を解決するために、ＰＡＷＳ（Ｐｒｏｔｅｃｔｉｏｎ  Ａｇａｉｎｓｔ  Ｗｒａｐｐｅｄ  Ｓｅｑｕｅｎｃｅ  ｎｕｍｂｅｒ）アルゴリズムをＴＣＰに追加することが提案されている（例えば、非特許文献１参照。）。ＰＡＷＳアルゴリズムでは、送信ノードが、送信しようとするデータセグメントに送信タイミングを示すタイムスタンプを付し、受信ノードが、受信したデータセグメントに付されたタイムスタンプの値を用いて破棄すべきデータセグメントを特定する、ことにより、問題の解決が図られている。以降、ＰＡＷＳアルゴリズムを追加したＴＣＰを、「ＴＣＰ−Ｐ」という。
【００１１】
図７は、ＴＣＰ−Ｐに従って通信する受信ノードが行う処理の流れの一例を示すフローチャートである。この図に示す例では、受信ノードは、まず、送信ノードとの間にコネクションを確立し、ＡＣＫシーケンス番号を初期化する（ステップＡ１）。次に、受信ノードは、後述のタイムスタンプ対応処理のために、最新タイムスタンプを初期化する（ステップＡ２）。
【００１２】
最新タイムスタンプは、当該コネクションを用いて正常に受け付けた直前のデータセグメントに付されたタイムスタンプであり、初期化の際には、使用が想定される任意のタイムスタンプよりも小さな値（例えば、ゼロ）を示すように設定される。次に、受信ノードは、当該コネクションが切断されるまで、データセグメントの受信を繰り返す（ステップＡ３〜Ａ５）。この繰り返しにおいて、データセグメントを受信する度に行われるのが、図８に示すタイムスタンプ対応処理である（ステップＡ４）。このタイムスタンプ対応処理について、図８及び図９を参照して説明する。
【００１３】
図９は、図６と同じ条件下でのＴＣＰ−Ｐに従った通信の一例の様子を模式的に示すシーケンス図である。この図に示す例では、送信ノードから送信されたデータセグメントＤＳ３が何らかの要因により大幅に遅延し、時刻ｔ１にて、送信ノードから、シーケンス番号およびデータがデータセグメントＤＳ３と同一のデータセグメントが再送される。ただし、再送されたデータセグメントのタイムスタンプ（例えば“３２２２２２”）は、データセグメントＤＳ３のタイムスタンプ（例えば“１１１０００”）よりも大きな値を示す。
【００１４】
受信ノードは、再送されたデータセグメントを時刻ｔ２にて受信すると、まず、当該データセグメントがタイムスタンプを有するか否かを判定し、タイムスタンプを有さない場合には、一般的なＴＣＰに定められている通常の処理を行う（ステップＢ１：ＮＯ、Ｂ２）。しかし、再送されたデータセグメントはタイムスタンプを有し、かつ当該タイムスタンプ“３２２２２２”が最新タイムスタンプ“３２２２２１”以上の値を示すから（ステップＢ１：ＹＥＳ、Ｂ３：ＮＯ）、受信ノードは、受信データセグメントがウィンドウ内のデータセグメントであるか否かを判定する。
【００１５】
当該データセグメントがウィンドウ内のデータセグメントでなければ、受信ノードは拒絶処理を行う（ステップＢ５：ＮＯ、Ｂ６）。拒絶処理では、受信ノードは、受信バッファ内の当該データセグメントが書き込まれた領域を開放し、当該データセグメントの受信が拒絶されたことを通知する否定的な確認応答を含んだ同期セグメント（以降、「否定的同期セグメント」）を返信する。しかし、当該データセグメントはウィンドウ内のデータセグメントであるから、受信ノードは、当該データセグメントを正常なデータセグメントとして受信バッファに残し、肯定的同期セグメントを返信する（ステップＢ５：ＹＥＳ、Ｂ７：ＮＯ、Ｂ９）。この返信の際に、受信ノードは、当該データセグメント中のシーケンス番号がＡＣＫシーケンス番号よりも前のオクテット位置を示す場合には、当該データセグメント中のタイムスタンプを新しい最新タイムスタンプとする（ステップＢ７：ＹＥＳ、Ｂ８）。
【００１６】
一方、受信ノードは、時刻ｔ３にてデータセグメントＤＳ３を受信した場合、当該データセグメントはタイムスタンプ“１１１０００”を有し、かつ当該タイムスタンプは最新タイムスタンプ“８６６６６６”より小さな値を示すから（ステップＢ１：ＹＥＳ、Ｂ３：ＹＥＳ）、破棄処理を行う（ステップＢ４）。破棄処理では、受信ノードは、当該データセグメントをドロップする。すなわち、受信バッファにすら書き込まない。そして、何らかのデータセグメントを受信したことを通知する単純な確認応答を含んだ同期セグメント（以降、「単純同期セグメント」）を返信する。このように、データセグメントＤＳ３は受信バッファにすら書き込まれないから、このデータセグメントが同じシーケンス番号を有するデータセグメントＤＳ４と誤認される虞はない。
【００１７】
【非特許文献１】
”ＲＦＣ１３２３”、［ｏｎｌｉｎｅ］、ＲＦＣ−ｎｅｔ、［平成１５年６月２５日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｒｆｃ．ｎｅｔ／ｒｆｃ１３２３．ｈｔｍｌ＞
【００１８】
【発明が解決しようとする課題】
上述したように、ＴＣＰ−Ｐを用いれば、周回シーケンス番号の使用に起因した問題を回避することができる。しかし、ＴＣＰ−Ｐに従って通信する装置が、無線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ  ）や移動パケット通信網等の無線パケット通信網を介して通信する場合、以下に述べるような問題が生じ得る。
【００１９】
図１０は無線パケット通信網を介してＴＣＰ−Ｐに従った通信を行う通信システムの構成を示す図である。この図では、説明を簡明とするために、通信システムを構成する多数のノードのうち、問題の発生に関与するルータ１、ルータ１に接続された基地局２Ａ及び２Ｂ、ルータ１に直結された送信ノード３、及び、基地局２Ａ及び２Ｂを介して送信ノード３と通信する受信ノード４、のみが示されている。
【００２０】
図１１は当該通信システムにおける通信の一例の様子を模式的に示すシーケンス図である。以降、この図に示す通信を行うことを前提として、当該通信システムの動作について説明する。
【００２１】
送信ノード３はサーバ型のコンピュータであり、受信ノード４との間にコネクションを確立すると、このコネクションを用いて、シーケンス番号が“１０００”であり、かつタイムスタンプが“１”であるデータセグメントＤＳ５を送信する。
このデータセグメントＤＳ５を受信したルータ１は、宛先の受信ノード４が在圏しているエリアをカバーする基地局を示す基地局番号をメモリから読み出し、当該基地局番号の基地局へ、データセグメントＤＳ５を転送する。受信ノード４は基地局２Ａによりカバーされるエリアに在圏しているから、データセグメントＤＳ５は基地局２Ａへ転送される。基地局２Ａは、ルータ１から転送されてきたデータセグメントＤＳ５を受信し、宛先の受信ノード４に割り当てた無線チャネルを用いて受信ノード４へ転送する。
【００２２】
受信ノード４は、当該通信システムを構成する全ての基地局と通信するための無線部を有する携帯型のコンピュータであり、無線部を用いて、基地局２Ａから転送されてきたデータセグメントＤＳ５を受信する。このデータセグメントＤＳ５は、タイムスタンプを有するデータセグメントであり、かつ予め設定された最新タイムスタンプ“０”以上の値を示すタイムスタンプ“１”を有し、かつウィンドウ内のデータセグメントであり、かつ予め定められたＡＣＫシーケンス番号“１０００”以下のシーケンス番号を有するから、受信ノード４は、ＡＣＫシーケンス番号を“１５００”とする一方、データセグメントＤＳ５中のタイムスタンプ“１”を新しい最新タイムスタンプとする。さらに受信ノード４は、このＡＣＫシーケンス番号と拡大したウィンドウを有する肯定的同期セグメントＡＳ１を、上記コネクションを用いて送信ノード３へ返信する。
【００２３】
この同期セグメントＡＳ１は、基地局２Ａ及びルータ１により転送され、送信ノード３に到着する。送信ノード３は、同期セグメントＡＳ１を受信すると、このセグメントにより通知されたウィンドウの範囲内で、データセグメントＤＳ５に後続するデータセグメントを、同期セグメントの到着を待つことなく連続して送信する。こうしてデータセグメントＤＳ６〜ＤＳ９が順に送信される。データセグメントＤＳ６はシーケンス番号“１５００”とタイムスタンプ“２”を、データセグメントＤＳ７はシーケンス番号“２０００”とタイムスタンプ“３”を、…、データセグメントＤＳ９はシーケンス番号“３０００”とタイムスタンプ“５”を有する。
【００２４】
ここで、図１０に示すように、受信ノード４が基地局２Ａにカバーされるエリアから基地局２Ｂにカバーされるエリアに移動し、データセグメントＤＳ６〜ＤＳ９が基地局２Ａに到着した時には基地局２Ａと受信ノード４との間で直接的な通信を行うことができない状態になっていたとする。このような場合、基地局２Ａは、より上流のルータ１へデータセグメントＤＳ６〜ＤＳ９を返信する。
【００２５】
基地局２Ａから返信されたデータセグメントＤＳ６〜ＤＳ９を受信したルータ１は、受信ノード４の移動により更新された基地局番号を読み出し、当該基地局番号の基地局２ＢへデータセグメントＤＳ６〜ＤＳ９を転送する。こうして、データセグメントＤＳ６〜ＤＳ９は、ルータ１、基地局２Ａ、ルータ１、基地局２Ｂという長い経路を通って受信ノード４に到着する。
【００２６】
このようなことが行われている間に、送信ノード３では、再送タイマがタイムアウトし、シーケンス番号が“１５００”のデータセグメントＤＳ６の再送が行われる。すなわち、送信ノード３は、データセグメントＤＳ６のタイムスタンプを“６”に変更して得られるデータセグメントＤＳ１０を送信する。このデータセグメントＤＳ１０は、ルータ１、基地局２Ｂという短い経路を通って、受信ノード４に到着する。
【００２７】
図１１に示すように、この例では、短い経路を通ったデータセグメントＤＳ１０が、長い経路を通ったデータセグメントＤＳ６〜ＤＳ９に先行して、受信ノード４に到着する。データセグメントＤＳ１０は、タイムスタンプを有するデータセグメントであり、かつ最新タイムスタンプ“１”以上の値を示すタイムスタンプ“６”を有し、かつウィンドウ内のデータセグメントであり、かつＡＣＫシーケンス番号“１５００”以下のシーケンス番号を有するから、受信ノード４は、ＡＣＫシーケンス番号を“２０００”とする一方、データセグメントＤＳ１０のタイムスタンプ“６”を新しい最新タイムスタンプとする。さらに受信ノード４は、このＡＣＫシーケンス番号と上記の拡大したウィンドウを有する肯定的同期セグメントＡＳ２を、上記コネクションを用いて送信ノード３へ返信する。
【００２８】
受信ノード４は、このような処理を行った後に、長い経路を通ったデータセグメントＤＳ６〜ＤＳ９を受信することになる。データセグメントＤＳ６〜ＤＳ９のタイムスタンプは“２”〜“５”であり、最新タイムスタンプ“６”よりも小さな値を示すから、受信ノード４は、データセグメントＤＳ６〜ＤＳ９を受信すると、これらを破棄してしまう。
【００２９】
データセグメントＤＳ６の破棄については、これと同一のデータを有するデータセグメントＤＳ１０を既に受信しているから、問題ない。しかし、未だ受信していないデータを有するデータセグメントＤＳ７〜ＤＳ９を破棄してしまうと、これらのデータセグメントの再送を待たねばならず、通信効率が低くなってしまう。
【００３０】
本発明は、上述した事情に鑑みてなされたものであり、通信効率を低下させることなく、受信したデータセグメントに周回したシーケンス番号が付されていてもタイムスタンプを用いて正しい順序で並べることができる技術を提供することを目的とする。
【００３１】
【課題を解決するための手段】
本発明は、メモリと、オクテットストリームから切り出されたデータと前記ストリームにおける前記データのオクテット位置を示す有限のシーケンス番号と送信されたタイミングを示すタイムスタンプとを有するセグメントを逐次受信する受信手段と、前記受信手段が１つ目の前記セグメントを受信する以前に、オフを値としたフラグを前記メモリに書き込む初期化手段と、前記シーケンス番号が周回したこと又は周回する可能性が高いことを検出する検出手段と、前記検出手段により前記シーケンス番号が周回したこと又は周回する可能性が高いことが検出された場合には、オンを値とするように前記フラグを書き換えるとともに直前に前記受信手段により受信された前記セグメントの前記タイムスタンプを最新タイムスタンプとして前記メモリに書き込む、切り換え手段と、前記受信手段が１つの前記セグメントを受信すると、前記メモリ上の前記フラグがオンを値とする場合には、前記１つのセグメントの前記タイムスタンプにより示されるタイミングが前記メモリ上の前記最新タイムスタンプにより示されるタイミングよりも前であるか否かを判定し、判定結果が肯定的であれば前記１つのセグメントを破棄する、破棄手段と、前記破棄手段による判定結果が否定的であれば、前記１つのセグメントの前記シーケンス番号と受信が期待される前記セグメントの前記シーケンス番号とを比較し、前者が後者以前のオクテット位置を示す場合には、前記１つのセグメントの前記タイムスタンプにより示されるタイミングを示すように前記最新タイムスタンプを書き換える、更新手段と、前記破棄手段により破棄されなかった前記セグメントを用いて前記ストリームを再生する再生手段とを有する通信装置を提供する。
【００３２】
この通信装置によれば、フラグの値は、シーケンス番号の周回が検出されるまではオフとなり、検出されてからはオンとなる。また、シーケンス番号の周回が検出されると、直前に受信手段により受信されたセグメントのタイムスタンプが最新タイムスタンプとしてメモリに書き込まれる。そして、通信装置は、フラグの値がオンの場合には、受信したセグメントのタイムスタンプにより示されるタイミングがメモリ上の最新タイムスタンプにより示されるタイミングよりも前であれば、受信したセグメントを破棄する。そして、破棄しなかったセグメントを用いてオクテットストリームを再生する。
【００３３】
また、本発明は、コンピュータに、オクテットストリームから切り出されたデータと前記ストリームにおける前記データのオクテット位置を示す有限のシーケンス番号と送信されたタイミングを示すタイムスタンプとを有するセグメントを、前記シーケンス番号が周回するまで又は周回する可能性が充分に高くなるまで逐次受信し、受信した前記セグメントを前記タイムスタンプを用いずに並べて前記オクテットストリームを再生する過程と、前記シーケンス番号が周回してから又は周回する可能性が充分に高くなってから前記セグメントを逐次受信し、受信した前記セグメントを前記タイムスタンプを用いて並べて前記オクテットストリームを再生する過程とを実行させるプログラムを提供する。
【００３４】
このプログラムを実行したコンピュータは、シーケンス番号が周回するまでは、セグメントを逐次受信し、受信した前記セグメントをタイムスタンプを用いずに並べてオクテットストリームを再生し、シーケンス番号が周回してからは、セグメントを逐次受信し、受信したセグメントをタイムスタンプを用いて並べてオクテットストリームを再生する。
【００３５】
【発明の実施の形態】
［実施形態］
以下、図面を参照して、本発明の実施の形態について説明する。本実施形態では、基本的に、シーケンス番号の周回が検出されるまではタイムスタンプを無視し、検出されてからはタイムスタンプを参照するようにしている。また、本実施形態に係る通信装置４０は、基本的に、既存のＴＣＰやＴＣＰ−Ｐに従った通信を行うものであるから、本発明に直接的に関係しない部分については説明を省略する。なお、図面において、共通する部分には同一の符号が付されている。
【００３６】
［構成］
図１は、本発明の一実施形態に係る通信装置４０の構成を示すブロック図である。この図から明らかなように、通信装置４０は携帯型のコンピュータであり、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４１を有する。ＣＰＵ４１は、操作子を備えた操作部４２からの操作信号を受け取るためのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）、不揮発性メモリ４３及びＲＡＭ４４に対してデータの読み出し／書き込みを行うためのＡＰＩ、ディスプレイ４５に画像を表示させるためのＡＰＩ、無線部４６を用いて図１０に示す無線パケット通信網を構成する基地局との間で無線通信を行うためのＡＰＩ、及び、ＬＡＮインタフェース４７を用いて図示しない有線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介した有線通信を行うためのＡＰＩを提供する。
【００３７】
また、ＣＰＵ４１は、操作部４２からの操作信号がアプリケーションプログラムの実行指示を示す場合には、ＲＡＭ４４をワークエリアとし、不揮発性メモリ４３から該当するプログラムを読み出し、実行する。不揮発性メモリ４３に記憶されているアプリケーションプログラムの１つに、通信制御プログラムＰがある。ＣＰＵ４１は、所望の送信ノードからのオクテットストリームの受信を開始する旨の開始指示を示す操作信号を受け取ると通信制御プログラムＰを実行し、この受信を終了する旨の終了指示を示す操作信号を受け取ると当該実行を終了する。
【００３８】
通信制御プログラムＰは、通信装置４０に、不揮発性メモリ４３に記憶されている選択情報ｄ１に示される通信手段を用いたＴＣＰ通信処理（図２及び図３参照）を行わせるためのものである。選択情報ｄ１は無線部４６またはＬＡＮインタフェース４７のいずれか一方を示す情報であり、ＣＰＵ４１は、使用する通信手段をユーザに選択させ、選択された通信手段を示すように選択情報ｄ１を書き換えることができる。
【００３９】
ＴＣＰ通信処理では、ＣＰＵ４１は、処理の開始時に、指定された送信ノードとの間にコネクションを確立し、処理の終了時に、当該コネクションを切断する。また、ＣＰＵ４１は、当該コネクションを用いてデータセグメントを受信し、受信したデータセグメントを用いてオクテットストリームを再生する。また、ＣＰＵ４１は、当該コネクションを用いて１つ目のデータセグメントを受信する以前に、すなわち当該コネクションの確立直後に、「オフ」を示すフラグｄ２を不揮発性メモリ４３に書き込む。
【００４０】
また、ＣＰＵ４１は、当該コネクションを用いて１つ目のデータセグメントを受信すると、このデータセグメントが有するシーケンス番号を基準シーケンス番号ｄ３として不揮発性メモリ４３に書き込む。
【００４１】
また、ＣＰＵ４１は、当該コネクションを用いて２つ目以降のデータセグメントを受信する度に、受信したデータセグメントのシーケンス番号と基準シーケンス番号ｄ３とを比較し、両者が一致すれば、「オン」を示すようにフラグｄ２を書き換えるとともに、受信したデータセグメントのタイムスタンプを最新タイムスタンプｄ４として不揮発性メモリ４３に書き込む。
【００４２】
また、ＣＰＵ４１は、当該コネクションを用いてデータセグメントを受信する度に、以下に列記する処理を行う。
・フラグｄ２が「オン」を示す場合には、受信したデータセグメントのタイムスタンプにより示されるタイミングが最新タイムスタンプｄ４により示されるタイミングよりも前であるか否かを判定する。この判定結果が肯定的であれば当該データセグメントを破棄し、否定的であれば、当該データセグメントのシーケンス番号とＡＣＫシーケンス番号ｄ５とを比較し、前者が後者以下であれば、当該データセグメントのタイムスタンプにより示されるタイミングを示すように最新タイムスタンプｄ４を書き換える。
・破棄されなかったデータセグメントを、ＲＡＭ４４に確保された記憶領域である受信バッファｄ６に書き込む。
【００４３】
［動作］
次に、ＣＰＵ４１が、図１０の送信ノード３からのオクテットストリームの受信を開始する旨の開始指示を示す操作信号を受け取った場合の、通信装置４０の動作について、主に図２〜図４を参照して説明する。
【００４４】
［無線通信の場合］
まず、選択情報ｄ１が無線部４６を示す場合の動作について説明する。ただし、通信装置４０は図１０の基地局２Ａにカバーされるエリアに在圏しているものとする。また、図４に示すように、図１１と同じ条件下で通信が行われるものとする。
【００４５】
ＣＰＵ４１は、無線部４６を用いて、送信ノード３との間にコネクションを確立し、ＡＣＫシーケンス番号ｄ５を初期化する（ステップＣ１）。つまり、不揮発性メモリ４３には“１０００”を値としたＡＣＫシーケンス番号ｄ５が書き込まれる。次に、ＣＰＵ４１はフラグｄ２を初期化する（ステップＣ２）。これにより、不揮発性メモリ４３には、オフを値としたフラグｄ２が書き込まれる。
【００４６】
次に、ＣＰＵ４１は、１つ目のデータセグメントを受信すると、当該データセグメントのシーケンス番号を基準シーケンス番号ｄ３として不揮発性メモリ４３に書き込み、一般的なＴＣＰに定められている通常の処理を行う（ステップＣ３〜Ｃ５）。これにより、不揮発性メモリ４３には“１０００”を値とした基準シーケンス番号ｄ３が書き込まれる。また、データセグメントＤＳ５が正しく受け付けられて受信バッファｄ６に書き込まれ、ＡＣＫシーケンス番号ｄ５が“１５００”を値とするように書き換えられ、肯定的同期セグメントＡＳ１が返信される。
【００４７】
送信ノード３は、肯定的同期セグメントＡＳ１を受信すると、データセグメントＤＳ５に後続するデータセグメントＤＳ６〜ＤＳ９を順に送信する。ここで、通信装置４０が基地局２Ａにカバーされるエリアから基地局２Ｂにカバーされるエリアに移動し、データセグメントＤＳ６〜ＤＳ９が基地局２Ａに到着した時には基地局２Ａと通信装置４０との間で直接的な通信を行うことができない状態になっていたとする。この場合、データセグメントＤＳ６〜ＤＳ９は、ルータ１、基地局２Ａ、ルータ１、基地局２Ｂという長い経路を通って通信装置４０に到着することになる。
【００４８】
このようなことが行われている間に、再送制御により、送信ノード３から、データセグメントＤＳ６のタイムスタンプ値を“６”に変更して得られるデータセグメントＤＳ１０が送信され、ルータ１、基地局２Ｂという短い経路を通って、通信装置４０に到着する。
【００４９】
図４では、短い経路を通ったデータセグメントＤＳ１０が、長い経路を通ったデータセグメントＤＳ６〜ＤＳ９に先行して、通信装置４０に到着する。ＣＰＵ４１は、データセグメントＤＳ１０を受信し、以下に述べるセグメント処理を行う（ステップＣ６、Ｃ７）。
【００５０】
セグメント処理では、ＣＰＵ４１は、まず、フラグｄ２の値がオンであるか否かを判定する。データセグメントＤＳ１０を受信した時点では、フラグｄ２の値は初期値のままであるから、判定結果は否定的となる（ステップＤ１：ＮＯ）。
次に、ＣＰＵ４１は、シーケンス番号の周回の検出を試みる。具体的には、受信したデータセグメントと基準シーケンス番号ｄ３とを比較し、両者が一致するか否かを判定する。データセグメントＤＳ１０のシーケンス番号が“１５００”であるのに対し、基準シーケンス番号ｄ３は“１０００”であるから、判定結果は否定的となる（ステップＤ２：ＮＯ）。よって、ＣＰＵ４１は、シーケンス番号の周回が検出されなかったとし、一般的なＴＣＰに定められている通常の処理を行う（ステップＤ３）。この結果、データセグメントＤＳ１０が正しく受け付けられて受信バッファｄ６に書き込まれ、ＡＣＫシーケンス番号ｄ５の値が“２０００”となり、肯定的同期セグメントＡＳ２が返信される。
【００５１】
次に、ＣＰＵ４１は、データセグメントＤＳ６を受信し、セグメント処理を行う（ステップＣ８：ＮＯ、Ｃ６、Ｃ７）。このセグメント処理では、フラグｄ２の値がオフであり、データセグメントＤＳ６のシーケンス番号“１５００”が基準シーケンス番号ｄ３“１０００”と一致しないから、ＣＰＵ４１は、一般的なＴＣＰに定められている通常の処理を行う（ステップＤ１：ＮＯ、Ｄ２：ＮＯ、Ｄ３）。
この結果、データセグメントＤＳ６は正しく受け付けられず、否定的同期セグメントＮＳ１が返信される。
【００５２】
次に、ＣＰＵ４１は、終了指示を示す操作信号を受け取っていないから、データセグメントＤＳ７を受信し、セグメント処理を行う（ステップＣ８：ＮＯ、Ｃ６、Ｃ７）。このセグメント処理では、フラグｄ２の値がオフであり、データセグメントＤＳ７のシーケンス番号“２０００”が基準シーケンス番号ｄ３“１０００”と一しないから、ＣＰＵ４１は、一般的なＴＣＰに定められている通常の処理を行う（ステップＤ１：ＮＯ、Ｄ２：ＮＯ、Ｄ３）。この結果、データセグメントＤＳ７が正しく受け付けられて受信バッファｄ６に書き込まれ、ＡＣＫシーケンス番号ｄ５の値が“２５００”となり、肯定的同期セグメントＡＳ３が返信される。
【００５３】
以降、データセグメントＤＳ８及びＤＳ９の各々についても、データセグメントＤＳ７について行われた処理と同様の処理が行われる。この結果、データセグメントＤＳ８及びＤＳ９が正しく受け付けられて受信バッファｄ６に書き込まれ、ＡＣＫシーケンス番号ｄ５の値が“３５００”となる。なお、ＣＰＵ４１は、送信ノード３からのオクテットストリームの受信を終了する旨の終了指示を示す操作信号を受け取ると、当該コネクションを切断し、ＴＣＰ通信処理を終了する（ステップＣ８、Ｃ９）。
【００５４】
このように、無線通信の場合には、タイムスタンプが無視されるから、通信装置４０は、データセグメントＤＳ７〜ＤＳ９を正しく受け付けることができる。
なお、狭帯域の無線通信であっても、１つのコネクションを用いた通信が長時間に及ぶと周回シーケンス番号が使用される可能性がある。通信装置４０は、このような場合にも適切に対処可能であるが、周回シーケンス番号が使用される可能性が高いのは広帯域の有線通信の場合であるから、周回シーケンス番号の使用に起因した問題に如何に対処するのかについては、有線通信の場合の動作を説明する際に述べる。
【００５５】
［有線通信の場合］
次に、選択情報ｄ１がＬＡＮインタフェース４７を示す場合の動作について説明する。ただし、通信装置４０は、送信ノード３が接続された有線ＬＡＮに接続されているものとする。また、シーケンス番号が周回するまでの動作は無線通信の場合と同様であることから、説明を省略する。
【００５６】
シーケンス番号が周回し、“１０００”を値としたシーケンス番号を有するデータセグメントが通信装置４０に到着したとする。ＣＰＵ４１は、このデータセグメントを受信し、セグメント処理を行う（ステップＣ６、Ｃ７）。フラグｄ２の値はオフであり、当該データセグメントのシーケンス番号“１０００”は基準シーケンス番号ｄ３“１０００”と一致するから、ＣＰＵ４１は、シーケンス番号の周回が検出されたとし、値がオンとなるようにフラグｄ２を書き換える一方、当該データセグメントのタイムスタンプを最新タイムスタンプｄ４として不揮発性メモリ４３に書き込む（ステップＤ１：ＮＯ、Ｄ２：ＹＥＳ、Ｄ４）。さらに、ＣＰＵ４１は、一般的なＴＣＰに定められている通常の処理を行う（ステップＤ３）。
【００５７】
次に、ＣＰＵ４１は、後続するデータセグメントを受信し、セグメント処理を行う（ステップＣ８：ＮＯ、Ｃ６、Ｃ７）。フラグｄ２の値はオンであるから、ＣＰＵ４１は、図８に示すタイムスタンプ対応処理を行う（ステップＤ５）。以降、終了指示を示す操作信号を受け取るまで、ＣＰＵ４１は、ＴＣＰ−Ｐに従った通信を行うことになる。よって、例えば、何らかの事情により、データセグメントＤＳ７が大幅に遅延し、通信装置４０が当該データセグメントＤＳ７と同一のシーケンス番号を有するデータセグメントの到着を待っているときに届いたとしても、データセグメントＤＳ７は、タイムスタンプに基づいて破棄される。
【００５８】
以上説明したように、本実施形態では、シーケンス番号の周回が検出されるまではタイムスタンプを無視し、シーケンス番号の周回が検出されてからはタイムスタンプを参照する。これにより、無線パケット通信網のような、シーケンス番号の周回が発生する可能性が比較的に低い狭帯域の通信網を介した通信においては効率を低下させないこと、シーケンス番号の周回が発生する可能性が比較的に高い広帯域の通信網を介した通信においては周回が発生してもオクテットストリームを正しく再生すること、ができる。
【００５９】
また、本実施形態では、１つ目のデータセグメントのシーケンス番号が基準シーケンス番号ｄ３として不揮発性メモリ４３に書き込まれ、この基準シーケンス番号ｄ３を用いてシーケンス番号の周回が検出される。これにより、コネクションを確立する度に１つ目のデータセグメントのシーケンス番号を異ならせる、ということが規定されているＴＣＰに従った通信においても、シーケンス番号の周回を正確に検出することができる。
【００６０】
また、本実施形態では、通信装置４０は狭帯域の通信網と広帯域の通信網の両方を使用することができるが、通信制御プログラムＰは１つだけである。つまり、通信網毎に通信制御プログラムを用意せずに済む。この特徴は、通常は広帯域かつ高遅延の通信網を利用し、携帯されて移動している間は狭帯域の通信網を利用するような通信装置として実施した場合に、この通信装置の構成を簡素とすることができる、という効果をもたらす。
【００６１】
また、本実施形態によれば、シーケンス番号の周回の検出は、受信したデータセグメントのシーケンス番号と基準シーケンス番号とを比較するのみで実現される。つまり、簡素な構成で、シーケンス番号の周回を正確に検出することができる。
【００６２】
［変形］
以上、本発明の一実施形態について説明したが、本発明は他の様々な形態で実施することが可能である。例えば、上述の実施形態を以下のように変形して本発明を実施してもよい。
【００６３】
上述した実施形態では２つの通信手段を切り換えて通信を行うことができるようにしたが、１つの通信手段しか備えていない通信装置として本発明を実施してもよい。この場合、選択情報ｄ１が不揮発性メモリ４３に書き込まれる必要はなくなる。また、３つ以上の通信手段を備えた通信装置として実施してもよい。また、本発明は、通信網に限らず、赤外線通信インタフェースや近距離無線通信インタフェースのように、ローカルな通信路を提供する通信手段を備える通信装置に適用してもよい。
【００６４】
上述した実施形態ではＴＣＰに従うことを前提としたが、本発明が従う通信プロトコルはＴＣＰに限らない。データセグメントの順序を保証する必要のある通信プロトコルであればよい。したがって、上述の実施形態における、ＴＣＰの規定に起因した仕様は任意に変更可能である。例えば、１つ目のデータセグメントのシーケンス番号が常に規定値となるような通信プロトコルに従う場合には、１つ目のデータセグメントのシーケンス番号を基準シーケンス番号ｄ３とするのではなく、規定値を基準シーケンス番号ｄ３とするようにしてもよい。また、例えば、拒絶があり得ない通信プロトコルに従う場合には、破棄も拒絶もされなかったデータセグメントのタイムスタンプを最新タイムスタンプｄ４の候補とするのではなく、破棄されなかったデータセグメントのタイムスタンプを最新タイムスタンプｄ４の候補とするようにしてもよい。なお、データセグメントとは異なるデータブロック単位でデータを取り扱う通信プロトコルに従う場合には、上記実施形態の説明中の「セグメント」を「ブロック」と読み替えることで本発明を実施することができる。
【００６５】
上述した実施形態では、受信したデータセグメントのシーケンス番号と基準シーケンス番号とを比較し、一致するか否かを調べることによりシーケンス番号の周回を検出するようにしたが、他の手法により周回を検出するようにしてもよい。例えば、受信したデータセグメントのシーケンス番号が基準シーケンス番号を超えたときにシーケンス番号の周回を検出したとするようにしてもよい。
【００６６】
また、コネクション確立後に最初に受信したデータセグメントのシーケンス番号よりも前のシーケンス番号や後のシーケンス番号を基準シーケンス番号とするようにしてもよい。この場合、周回の検出タイミングと周回シーケンス番号を有するデータセグメントの到着し得る最先のタイミングとが懸け離れる可能性があるが、最初に受信したデータセグメントのシーケンス番号に近いシーケンス番号を基準シーケンス番号とするようにすれば、両タイミングを近接させることができる。なお、前のシーケンス番号を基準シーケンス番号とし、基準シーケンス番号よりも前のシーケンス番号を有するデータセグメントが到着したときに検出したとするように実施形態を変形した場合、検出されるのは、シーケンス番号が周回したことではなく、シーケンス番号が周回する可能性が充分に高いこととなる。
【００６７】
また、コネクション確立からの経過時間を計測し、この経過時間と当該コネクションの帯域幅とに基づいて周回の検出を行うようにしてもよい。あるいは、コネクション確立からの経過時間のみに基づいて周回を検出するようにしてもよい。これらの態様は、時間を用いて間接的な検出を行うことになるから、周回したことを確実に検出するという用途には向かないが、近い将来に周回が行われ得ることを検出するという用途であれば、充分に適用可能である。
【００６８】
上述した実施形態では、通信制御プログラムＰが不揮発性メモリ４３に予め書き込まれている構成としたが、通信制御プログラムＰをダウンロードして不揮発性メモリ４３に書き込む構成としてもよい。もちろん、コンピュータ読み取り可能な可搬型の記録媒体に記録された通信制御プログラムＰを読み出し、不揮発性メモリ４３に書き込む構成としてもよい。
【００６９】
【発明の効果】
以上説明したように、本発明によれば、シーケンス番号が周回するまで又は周回する可能性が充分に高くなるまではタイムスタンプを用いずにセグメントを並べてオクテットストリームが再生され、シーケンス番号が周回してから又は周回する可能性が充分に高くなってからはタイムスタンプを用いてセグメントを並べてオクテットストリームが再生される。周回シーケンス番号の使用に起因した問題が発生するのはシーケンス番号が周回してからであることを考えれば、本発明により、通信効率を低下させることなく、受信したデータセグメントに周回したシーケンス番号が付されていてもタイムスタンプを用いて正しい順序で並べることができる、ということが分かる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る通信装置４０の構成を示すブロック図である。
【図２】同通信装置４０の動作の流れを示すフローチャートである。
【図３】同通信装置４０の動作の流れの一部を示すフローチャートである。
【図４】同通信装置４０を用いて行われる通信の一例を模式的に示すシーケンス図である。
【図５】同一のシーケンス番号を有する複数のデータセグメントが通信網上に存在する様子を模式的に示す図である。
【図６】図５の状況下で行われる通信例の一例を模式的に示すシーケンス図である。
【図７】ＴＣＰ−Ｐに従って通信する受信ノードが行う処理の流れの一例を示すフローチャートである。
【図８】同受信ノードが行うタイムスタンプ対応処理の流れを示すフローチャートである。
【図９】ＴＣＰ−Ｐに従った通信の一例を模式的に示すシーケンス図である。
【図１０】無線パケット通信網を介してＴＣＰ−Ｐに従った通信を行う通信システムの構成を示す図である。
【図１１】同通信システムにおける通信の一例を模式的に示すシーケンス図である。
【符号の説明】
４０…通信装置、４１…ＣＰＵ、４２…操作部、４３…不揮発性メモリ、４４…ＲＡＭ、４５…ディスプレイ、４６…無線部、４７…ＬＡＮインタフェース
【図１】
2005064595.tif 000003
【図２】
2005064595.tif 000004
【図３】
2005064595.tif 000005
【図４】
2005064595.tif 000006
【図５】
2005064595.tif 000007
【図６】
2005064595.tif 000008
【図７】
2005064595.tif 000009
【図８】
2005064595.tif 000010
【図９】
2005064595.tif 000011
【図１０】
2005064595.tif 000012
【図１１】
2005064595.tif 000013