以下、本発明の実施の形態について説明する。なお、以下に挙げる実施形態は例示であり、本発明は以下の実施形態の構成に限定されない。
[第1実施形態]
〔装置構成〕
図1は、第1実施形態における通信端末の構成例を概念的に示す図である。第1実施形態における通信端末10及び20は、各NIC12を通して回線1及び2により相互に接続される。
なお、本実施形態は、各通信端末に接続される他の通信端末の数や、伝送媒体を制限しない。伝送媒体は、例えば、無線、光ケーブル、UTP(Unshielded Twist Pair cable)等である。通信端末10及び20は、後述する同じNIC12をそれぞれ持てばよいが、以降、説明の便宜のため、通信端末10を送信用端末として説明し、通信端末20を受信用端末として説明する。ここで、送信用端末とは、フレームを送信しかつACK又はNAKを受信する端末を意味し、受信用端末とは、送信用端末から送信されたフレームを受信しかつACK又はNAKを送信する端末を意味する。また、図1の例では、本発明に関連しない構成要素は図示されていない。よって、通信端末10及びNIC12は、図1で示される構成以外にも、例えば、コネクション確立部、再送信タイマ等なども有している。
また、以降の説明では、NIC(Network Interface Card)としてイーサネット(登録商標)NICを例示し、送受信されるデータの単位をパケットではなくフレームと表記する。なお、本実施形態は、データリンク層をイーサネット(登録商標)に制限するものではなく、データリンク層はIEEE801.11(無線LAN)等であってもよい。
以下、通信端末10及び20は同じ構成を有すればよいため、通信端末10の構成を代表して図1を用いて説明する。通信端末10は、他ブロック11、NIC12等を有する。他ブロック11は、CPU(Central Processing Unit)等の上位構成の処理ブロックであり、外部へ送出するためのデータをNIC12へ送り、外部からのデータをNIC12経由で受信する。本実施形態は、他ブロック11の詳細処理を制限しない。
NIC12は、本発明の通信装置に相当し、回線1及び2を収容し、回線1を経由して受信用の通信端末20へデータを送信し、回線2を経由して通信端末20からのデータを受信する。NIC12は、図1に示されるように、内部インタフェース部100、ヘッダ付与部101、送信バッファ部102、ACK/NAK生成部103、トランザクション識別子付与部(以降、ID付与部と表記する)114、ヘッダ誤り訂正符号付与部(以降、ECC付与部と表記する)104、フレーム誤り検出符号付与部(以降、EDC付与部と表記する)105、送信部106、受信部108、ヘッダ誤り訂正部109、フレーム誤り検出部110、フレーム識別部111、送信バッファ制御部112、受信バッファ部113、再送データ量設定部115等を有する。
NIC12に含まれる各処理部は、個々に又は複数組み合わせられて、ハードウェア構成要素又はソフトウェア構成要素若しくはそれらの組み合わせにより実現される。ハードウェア構成要素とは、例えば、フィールド・プログラマブル・ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、ゲートアレイ、論理ゲートの組み合わせ、信号処理回路、アナログ回路等のようなハードウェア回路である。ソフトウェア構成要素とは、1又は複数のメモリ上のデータ(プログラム)が1又は複数のプロセッサ(例えば、CPU(Central Processing Unit)、DSP(Digital Signal Processor)等)で実行されることにより実現される、タスク、プロセス、関数のようなソフトウェア部品(断片)である。例えば、ACK/NAK生成部103、フレーム識別部111、送信バッファ制御部112及びID付与部114は、図示しないプログラム制御プロセッサ上で図示しないメモリに格納されたプログラムを実行することにより実現されてもよい。
内部インタフェース部100は、他ブロック11から送信用のデータを取得し、そのデータをヘッダ付与部101へ渡す。また、内部インタフェース部100は、読出し可能なデータが受信バッファ部113にある場合、受信バッファ部113からデータを取得し、その読み出されたデータを他ブロック11へ送る。
ヘッダ付与部101は、内部インタフェース部100からデータを取得し、そのデータにシーケンス番号を含むフレームヘッダを付加し、フレームヘッダが付加されたデータをフレームとして送信バッファ部102へ送る。また、ヘッダ付与部101は、送信バッファ部102からバッファ空き情報を入手し、空きサイズが閾値より小さくなった場合、内部インタフェース部100へデータ出力の停止を要求する。なお、フレームヘッダには、再送に使用するタイプ、フラグ、シーケンス番号に加えて、あて先アドレス、送信元アドレス等のフレームの送信に必要な情報が設定される。
送信バッファ部102は、ヘッダ付与部101から入力されたフレームをフレームに付与されているシーケンス番号に従い保存する。送信バッファ部102は本件発明の格納部及び読出処理部に相当する。送信バッファ部102は、読出し可能なフレームが保存されている場合には、そのフレームを読出し、読み出されたフレームをACK/NAK生成部103へ送る。送信バッファ部102は、ACK/NAK生成部103からの読出し停止に応じてフレームの読出しを停止する。更に、送信バッファ部102は、送信バッファ制御部112からの再送信指示に従い、当該再送信フレームを再度読出しその読み出された再送信フレームをACK/NAK生成部103へ送る。送信バッファ部102は、送信バッファ制御部112からの指示により、内部のフレームを削除する。
ACK/NAK生成部103は、フレーム識別部111からACK/NAK生成指示を受けると、送信バッファ部102へフレームの読出し停止を指示し、そのACK/NAK生成指示に応じてACKフレーム又はNAKフレームを生成する。ACK/NAK生成部103は、フレーム識別部111からACK/NAK生成指示を受けなくなると、送信バッファ部102へのフレームの読出し停止を解除し、送信バッファ部102から送られてきたフレームをID付与部114へ送る。ACK/NAK生成部103は本発明の生成部に相当する。
なお、ACK/NAK生成指示には、次に受信すべきフレームのシーケンス番号、そのフレームに付与されるはずのトランザクション識別子が含まれる。NAKの生成指示には、更に、シーケンス番号と後述する再送データ量RDS(Retransmission Data Size)とから生成される再送されるべきフレームの中の最終フレームを示すシーケンス番号(以降、EOS(End Of Sequence number)又は最終シーケンス番号と表記する)が含まれる。ACK/NAK生成部103は、生成するACK/NAKに、次に受信すべきフレームのシーケンス番号、トランザクション識別子、及びEOSを設定する。
ID付与部114は、フレーム識別部111から送られる再送/更新指示により、ACK/NAK生成部103から送られるフレームが再送フレームであるか否かを知る。ID付与部114は、そのフレームが再送フレームである場合、トランザクション識別子を更新又は付加し、当該フレームをECC付与部104へ送る。ID付与部114は、そのフレームが再送フレームでない場合、そのフレームに現在保持されているトランザクション識別子を付加し、当該フレームをECC付与部104へ送る。
なお、再送/更新指示には、NAKフレームに設定されている再送が要求されるフレームのシーケンス番号、EOS、及び当該NAKフレームに設定されていたトランザクション識別子が含まれる。
ECC付与部104は、ID付与部114からフレームを受けると、当該フレームのヘッダ部のための誤り訂正符号(以降、ヘッダ誤り訂正符号と表記する)を計算し、そのヘッダ誤り訂正符号をヘッダの一部として当該フレームに付与する。また、ECC付与部104は、ヘッダ誤り訂正符号が付与されたフレームをEDC付与部105へ送る。ヘッダ誤り訂正符号としては、一般的によく用いられるハミング、RS、BCH符号等が利用される。
EDC付与部105は、ECC付与部104からフレームを取得すると、当該フレームのための誤り検出符号(以降、フレーム誤り検出符号と表記する)を計算し、このフレーム誤り検出符号を当該フレームに付与する。EDC付与部105は、フレーム誤り検出符号が付加されたフレームを送信部106へ送る。フレーム誤り検出符号には、一般的によく用いられるCRC符号などが利用される。
送信部106は、EDC付与部105からフレームを取得し、取得されたフレームに対して符号化、スクランブル、シリアライズを行い、それら処理により得られた信号を回線1を介して送信する。例えば、送信部106は、イーサネット(登録商標)におけるPCS(Physical Coding Sub-layer)、PMA(Physical Medium Attachment)、PMD(Physical Medium Dependent)相当の送信機能を持つ。
受信部108は、回線2を介して受信された信号に対してデシリアライズ、デスクランブル、復号化を行い、得られたデータをフレームとしてヘッダ誤り訂正部109へ送る。例えば、受信部108は、イーサネット(登録商標)におけるPCS、PMA、PMD相当の受信機能を持つ。
ヘッダ誤り訂正部109は、受信部108からフレームを受けると、当該フレームのヘッダ部に対する誤り訂正を行い、このヘッダ誤り訂正の結果と訂正されたフレームとをフレーム誤り検出部110へ送る。
フレーム誤り検出部110は、ヘッダ誤り訂正部109からフレームを受けると、当該フレームの誤り検出を行い、このフレーム誤り検出の結果、上記ヘッダ誤り訂正の結果、当該フレーム、及び当該フレームのフレーム長をフレーム識別部111へ送る。なお、ヘッダ誤り訂正部109及びフレーム誤り検出部110は本件発明の検出部に相当する。
フレーム識別部111は、フレーム誤り検出部110からヘッダ誤り訂正の結果、フレーム誤り検出の結果、フレーム及びフレーム長を取得し、再送データ量設定部115から後述する再送データ量RDSを取得すると、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームヘッダの内容に応じた処理を行う。フレーム識別部111の具体的処理内容については後述する。フレーム識別部111は本発明の決定部及び更新部に相当する。
送信バッファ制御部112は、再送/更新指示をフレーム識別部111から受けると、その再送/更新指示が再送指示を示す場合には、送信バッファ部102へシーケンス番号、EOS及び再送指示を送る。送信バッファ制御部112は、その再送/更新指示が更新指示を示す場合には、送信バッファ部102内の当該フレームを削除するため、送信バッファ部102へシーケンス番号と更新指示を送る。送信バッファ制御部112は本件発明の読出処理部に相当する。
受信バッファ部113は、フレーム識別部111からフレームを受けると、当該フレームをシーケンス番号に従って保存する。受信バッファ部113は、フレーム識別部111からフレームの廃棄指示が受けるとそのフレームを廃棄する。更に、受信バッファ部113は、読出し可能なフレームが存在する場合には、内部インタフェース部100へその旨を通知し、内部インタフェース部100からのフレーム読出し指示に従いフレームを読出し、読み出されたフレームを内部インタフェース部100へ送る。なお、フレームの読出しはシーケンス番号順に行われる。
再送データ量設定部115は、CPU等の制御部(図示せず)から送られる再送データ量RDSを保持し、そのRDSをフレーム識別部111へ送る。RDSとは、誤りが発生したフレームからの再送信すべきデータ量を示す。再送データ量設定部115は、再送データ取得部と表記することもできる。
図2は、フレーム識別部111の処理構成例を概念的に示す図である。
フレーム識別部111は、図2に示されるように、ヘッダ処理部201、再送/更新処理部202、受信処理部203、NAKテーブル部204等を有する。
ヘッダ処理部201は、フレーム誤り検出部110からヘッダ誤り訂正の結果、フレーム誤り検出の結果、フレーム及びフレーム長を取得すると、そのフレームデータからフラグ、シーケンス番号、トランザクション識別子(XID)、EOSを抽出する。ヘッダ処理部201は、ヘッダ誤り訂正の結果、フラグの状態に応じて、それら抽出された情報を再送/更新処理部202及び受信処理部203へ送る。なお、ヘッダ処理部201は、ヘッダ誤り訂正の結果が訂正不能を示す場合、そのフレームを廃棄する。
再送/更新処理部202は、ヘッダ処理部201から取得されたフラグがACKフラグ又はNAKフラグを示す場合に、再送/更新指示を生成し、この再送/更新指示を送信バッファ制御部112及びID付与部114へ送る。
NAKテーブル部204は、受信処理部203から、正常受信されたフレームのシーケンス番号及びフレーム長を取得し、これら情報に基づいて既に受信されたフレームに関する情報を格納するテーブルを生成し、そのテーブル情報を受信処理部203へ送る。
受信処理部203は、ヘッダ処理部201から、SNフラグ、RTフラグ、フレーム誤り検出の結果を取得し、NAKテーブル部204から、当該フレームの受信状況を取得し、再送データ量設定部115からRDSを取得する。受信処理部203は、これら取得された情報に基づいて、ACK/NAK生成指示を生成する。受信処理部203は、NAK生成指示を生成する場合、上述したように、次に受信すべきフレームのシーケンス番号、そのフレームに付与されるはずのトランザクション識別子、EOSを当該NAK生成指示に含める。受信処理部203は、ACK/NAK生成指示をACK/NAK生成部103に送る。また、受信処理部203は、当該フレームデータの保存指示又はフレームの廃棄指示を受信バッファ部113へ送る。
受信処理部203は、フレーム種別(再送フレームか否か)及びフレーム誤りの条件に応じて、バースト誤りを検出し、バースト誤りに応じて最終シーケンス番号EOSの値を決定する。即ち、バースト誤りに応じてトータル再送データ量が調整される。なお、再送フレームが受信された場合と非再送フレームが受信された場合とでは、EOSの生成処理の方法が異なる。再送フレームが受信された場合、未受信フレームの情報は既にNAKテーブル部204で管理されているため、NAKテーブル部204に格納される情報を利用することによりEOSの値が決定される。
一方、非再送フレームが受信された場合、受信処理部203は、前回フレーム誤り又はフレームロスが発生したフレームからEOSで示されるフレームまでの間、即ち、再送データ量RDSの間、新たなフレーム誤り又はフレームロスを監視する。以降、フレーム誤り又はフレームロスを総称してフレーム障害と表記する場合もある。当該監視のために、例えば、受信処理部203は、後述する変数「TSEQ(Temporarily Sequence number)」を利用することにより、フレーム障害が検出される度に、最終シーケンス番号EOSが算出される。前回NAK送信時に付与された前EOSと一致しないEOSを含むNAKはeNAK(拡張NAK)と表記される。なお、TSEQの初期値には、NEXT_SEQが利用される。
フレーム識別部111内では、フレームの識別及び管理を行うために、例えば、以下のような変数を使用してもよい。
・NEXT_SEQ:受信側の変数であり、次に受信すべき先頭フレームのシーケンス番号を保持する。
・NHED_SEQ(1):受信側の変数であり、受信済み先頭フレームのシーケンス番号を保持し、NAKテーブル部204に登録される。
・NNAK_SEQ(1):受信側の変数であり、NEXT_SEQにより特定されるフレームの次に受信すべき先頭フレームのシーケンス番号を保持し、NAKテーブル部204に登録される。
・RCV_SEQ:受信フレームに含まれるシーケンス番号を保持する。
・RCV_XID:受信フレームに含まれるトランザクション識別子を保持する。
・LEN:受信フレームのフレーム長を保持する。LENには、例えば、MACのフレーム長である64バイトから1518バイトの値が設定される。
・RCV_EOS:受信されたNAKフレームに含まれる、再送すべきフレームの中の最終フレームのシーケンス番号を保持する。
・REG_SXID:送信側の変数であり、次の送信フレームに設定するためのトランザクション識別子を保持する。この変数は、受信されたACK/NAKフレームに含まれるトランザクション識別子(RCV_XID)と比較されることで、その受信フレームが対応済みか否かを判定するために利用される。
・REG_RXID:受信側の変数であり、受信済みのフレームのトランザクション識別子を保持する。この変数は、受信されたフレームに含まれるトランザクション識別子(RCV_XID)と比較されることで、その受信フレームが受信側で既に受信されたフレームであるか否かを判定するために利用される。
・PEOS:送信側の変数であり、直近で対応されたNAKフレーム又は拡張NAKフレームに設定されていたEOSの値を保持する。
・TSEQ:受信側の変数であり、次に受信予定のフレームのシーケンス番号を保持する。この変数は、フレーム障害が発生した後に受信されたフレームの連続性を確認するため、即ち、EOSを更新する必要のあるフレームロスが再度発生したことを確認するために設けられている。
受信側では、NEXT_SEQ以降のシーケンス番号を含むフレームが受信バッファ部113で管理される。受信側の通信端末20は、NAKテーブル部204に格納される情報に基づいて既に受信されたフレーム及び未だ受信されていないフレームを判別し、NEXT_SEQの次に受信すべきシーケンス番号を認識する。
図3A及び図3Bは、NAKテーブル部204への登録方法の例を概念的に示す図である。例えば、NAKテーブル部204には、正常受信されたフレームに関し、シーケンス番号(RCV_SEQ)と、シーケンス番号(RCV_SEQ)及びそのフレーム長(LEN)が加算された値とが格納される。図3A及び図3Bの例によれば、前者がNHED_SEQ(p)(図示されるH(p))として設定され、後者がNNAK_SEQ(p)(図示されるN(p))として設定される。図3A及び図3Bにおいて、F(w)は登録すべきフレームを示し、F(x)及びF(y)は既に登録されているフレームを示す。NAKテーブル部204に関してはフレームF(w)を登録する前後の各状態がそれぞれ示される。d−99は受信側で次に受信すべきシーケンス番号(NEXT_SEQ)を示し、d−100からd−107は受信フレームのシーケンス番号(RCV_SEQ)又は受信フレームのシーケンス番号(RCV_SEQ)に受信フレーム長(LEN)を加算して得られる値を示す。ここの説明では、或るフレームに関し、シーケンス番号(RCV_SEQ)をS値と表記し、シーケンス番号(RCV_SEQ)に受信フレーム長(LEN)を加算して得られる値をSL値と表記する場合もある。
図3Aの(1)には、何も登録されていないNAKテーブル部204にフレームF(w)を登録する場合が示される。この場合、フレームF(w)のd−102がH(1)に設定され、フレームF(w)のd−103がN(1)に設定される。d−102は、フレームF(w)のS値を示し、d−103は、フレームF(w)のSL値を示す。
図3Aの(2)には、フレームF(x)が既に登録されている状態で、フレームF(w)を登録する場合が示される。図3Aの(2)では、フレームF(x)のS値とフレームF(w)のSL値とが(d−102で)一致する場合が例示される。この場合、H(1)が、フレームF(w)のS値(d−101)に更新される。
図3Aの(3)には、フレームF(x)が既に登録されている状態で、フレームF(w)を登録する場合が示される。図3Aの(3)では、フレームF(x)のSL値とフレームF(w)のS値とが(d−103で)一致する場合が例示される。この場合、N(1)が、フレームF(w)のSL値(d−104)に更新される。
図3Aの(4)には、フレームF(x)が既に登録されている状態で、フレームF(w)を登録する場合が示される。図3Aの(4)では、フレームF(w)のSL値(d−101)がフレームF(x)のS値(d−102)よりも小さい場合が例示される。この場合、H(1)にフレームF(w)のS値(d−100)が設定され、N(1)にフレームF(w)のSL値(d−101)が設定され、H(2)にフレームF(x)のS値(d−102)が設定され、N(2)にフレームF(x)のSL値(d−103)が設定される。
図3Bの(5)には、フレームF(x)が既に登録されている状態で、フレームF(w)を登録する場合が示される。図3Bの(5)では、フレームF(w)のS値(d−106)がフレームF(x)のSL値(d−103)よりも大きい場合が例示される。この場合、H(1)にフレームF(x)のS値(d−102)が設定され、N(1)にフレームF(x)のSL値(d−103)が設定され、H(2)にフレームF(w)のS値(d−106)が設定され、N(2)にフレームF(w)のSL値(d−107)が設定される。
図3Bの(6)には、フレームF(x)及びF(y)が既に登録されている状態で、フレームF(w)を登録する場合が示される。図3Bの(6)では、フレームF(x)のSL値がフレームF(w)のS値と(d−103)で一致し、かつ、フレームF(w)のSL値がフレームF(y)のS値と(d−106)で一致する場合が例示される。この場合、N(1)がフレームF(y)のSL値(d−107)に更新され、H(2)及びN(2)が削除される。
図3Bの(7)には、フレームF(x)及びF(y)が既に登録されている状態で、フレームF(w)を登録する場合が示される。図3Bの(7)では、フレームF(x)のSL値(d−103)がフレームF(w)のS値(d−104)より小さく、かつ、フレームF(w)のSL値(d−105)がフレームF(y)のS値(d−106)よりも小さい場合が例示される。この場合、元のH(2)及び元のN(2)が新たなH(3)及び新たなN(3)に変更され、H(2)にはフレームF(w)のS値(d−104)が設定され、N(2)にはフレームF(w)のSL値(d−105)が設定される。
図3A及び図3Bの例によれば、NAKテーブル部204は、SEQの小さいフレームから順にその情報を登録し、H(p+1)とN(p)とが同じ値になるレコード(行)を統合する。このようにすれば、NAKテーブル部204の登録数を抑えることができる。
〔動作例〕
以下、第1実施形態における通信装置10及び20の動作例について説明する。
図4は、ACK/NAK生成部103の動作例を示すフローチャートである。
ACK/NAK生成部103は、送信バッファ部102から読み出し中のフレームの存在を確認する(S30)。ACK/NAK生成部103は、読み出し中のフレームが存在する場合(S30;YES)、更に、フレーム識別部111からのACK/NAK生成指示の存在を確認する(S31)。ACK/NAK生成部103は、読み出し中のフレームが有りかつACK/NAK生成指示が無い場合(S30;YESかつS31;NO)、その読み出されたフレームをID付与部114へ送る(S36)。
ACK/NAK生成部103は、読み出されたフレームが有りかつACK/NAK生成指示が有る場合(S30;YESかつS31;YES)、送信バッファ部102へフレームの読み出し停止指示を送る(S33)。続いて、ACK/NAK生成部103は、ACK/NAK生成指示に応じてACKフレーム又はNAKフレームを生成する(S34)。
ACK/NAK生成部103は、生成されたフレームをID付与部114へ送ると共に、送信バッファ部102へフレームの読み出し停止の解除指示を送る(S35)。以降、ACK/NAK生成部103は、送信バッファ部102から読み出されたフレームをID付与部114へ送る(S36)。
ACK/NAK生成部103は、送信バッファ部102から読み出されたフレームが無い場合でも(S30;NO)、ACK/NAK生成指示が有る場合(S32;YES)、上述と同様に、ACK/NAK生成指示に応じてACKフレーム又はNAKフレームを生成し(S37)、生成されたフレームをID付与部114へ送る。
図5は、ID付与部114の動作例を示すフローチャートである。
上述のように、ACK/NAK生成部103から送信用フレームを受けると(S40;YES)、ID付与部114は、送信用フレーム内のSNフラグが1であるか否かをチェックする(S41)。ID付与部114は、SNフラグが1でない場合(S41;FALSE)、そのフレームがACK/NAKフレームであり送信フレームでないと判断し、そのままそのフレームをECC付与部104へ送る(S47)。
一方、ID付与部114は、SNフラグが1である場合(S41;TRUE)、その送信用フレームが送信フレームであると判断し、フレーム識別部111からの再送指示の存在を確認する(S42)。ID付与部114は、再送指示が無い場合(S42;NO)、当該送信用フレームのシーケンス番号(SEQ)と一つ前のフレームに設定されていたシーケンス番号(PRE_SEQ)とを比較する(S48)。
PRE_SEQがSEQ以上である場合(S48;FALSE)、ID付与部114は、シーケンス番号が一巡していると判断し、そのフレームのトランザクション識別子を更新する(S44及びS45)。図5の例では、そのフレームのトランザクション識別子(RCV_XID)が1加算される。
続いて、ID付与部114は、SEQの値をPRE_SEQに反映させた後(S46)、当該フレームをECC付与部104へ送る(S47)。
一方、ID付与部114は、フレーム識別部111からの再送指示が有る場合(S42;YES)、その送信用フレームのRTフラグが1に設定されておりかつその送信用フレームのシーケンス番号(SEQ)がフレーム識別部111から当該再送指示と共に送られてきた受信フレームのシーケンス番号(RCV_SEQ)と一致しているか否かを確認する(S43)。RTフラグが1に設定されているフレームは再送フレームであることを示す。
ID付与部114は、その送信用フレームが再送フレームであり(RT=1)、かつ、その送信用フレームのシーケンス番号(SEQ)が受信側で要求されているシーケンス番号(RCV_SEQ)と等しい場合に(RCV_SEQ=SEQ)(S43;TRUE)、送信用フレームのトランザクション識別子を更新する(S44及びS45)。なお、ID付与部114は、RTが1でないか又はRCV_SEQとSEQとが異なる場合に(S43;FALSE)、フレーム識別部111で保持されている値(例えば、REG_SXID)をその送信用フレームに設定する(S45)。以降、上述したように、処理(S46)及び(S47)が実行される。
このように本実施形態では、通常のフレーム送信からフレームの再送信に移行する際に、トランザクション識別子が1インクリメントされる。以降、再送フレームが送出される間を再送シーケンス期間と表記する場合もある。これにより、各フレームに設定されるトランザクション識別子は、或る再送シーケンス期間の開始から次の再送シーケンス期間の開始までを示すということもできる。
次に、フレーム識別部111の動作例について図6、図7、図8A及び図8Bを用いて説明する。図6は、ヘッダ処理部201の動作例を示すフローチャートである。図6には、送信側及び受信側の両方の処理が示されている。
ヘッダ処理部201は、フレーム誤り検出部110から受信フレームを受けると、ヘッダ誤り訂正部109によるヘッダ誤り訂正が完了しているか否かをチェックする(S50)。ヘッダ誤り訂正が完了していない場合(S50;NO)、ヘッダ処理部201は、当該受信フレームを廃棄する(S51)。ヘッダ誤り訂正が完了している場合(S50;YES)、ヘッダ処理部201は、その受信フレームに設定されているフラグを確認する(S52)。
ヘッダ処理部201は、SNフラグが1に設定されている場合(S52;SN)、その受信フレームを送信フレームと判断し、その受信フレームからシーケンス番号RCV_SEQ及びトランザクション識別子RCV_XIDを抽出する。ヘッダ処理部201は、抽出されたRCV_SEQ及びRCV_XIDと共に、その受信フレームを受信処理部203に送る(S53)。
一方、ACKフラグ又はNAKフラグに1が設定されている場合(S52;ACK/NAK)、ヘッダ処理部201は、その受信フレームをACKフレーム又はNAKフレームであると判断し、その受信フレームからシーケンス番号RCV_SEQ、トランザクション識別子RCV_XID、最終シーケンス番号RCV_EOSを抽出する。ヘッダ処理部201は、抽出されたRCV_SEQ、RCV_XID及びRCV_EOSを再送/更新処理部202へ送る(S54)。
図7は、再送/更新処理部202の動作例を示すフローチャートである。再送/更新処理部202は、送信側の処理を行う。再送/更新処理部202は、ACKフレーム又はNAKフレームの受信に応じて動作する。
再送/更新処理部202は、ヘッダ処理部201からRCV_SEQ、RCV_XID、RCV_EOSを受けると(S60;YES)、トランザクション識別子RCV_XID及び最終シーケンス番号RCV_EOSが以下の条件4を満たすか否かをチェックする(S61)。
(条件4)RCV_XID≧REG_SXID又はRCV_EOS>PEOS
上記条件4の中の前者(RCV_XID≧REG_SXID)は、保持されるトランザクション識別子と受信されたトランザクション識別子とが同一となっているか又は更新されたか否かの判定を意味する。上記条件4の中の後者(RCV_EOS>PEOS)は、最終シーケンス番号が更新されたか否かの判定を意味する。再送/更新処理部202は、保持されるトランザクション識別子と受信されたトランザクション識別子とが同一となっているか又は更新された場合、若しくは、最終シーケンス番号が更新された場合には(S61;TRUE)、その受信フレームに対応する必要があると認識し、そうでない場合には(S61;FALSE)、その受信フレームは対応済みと認識する。
上記条件4を満たさない場合(S61;FALSE)、再送/更新処理部202は、受信されたACKフレーム又はNAKフレームは対応済みと判断し、その受信フレームを無視(廃棄)する。上記条件4を満たす場合(S61;TRUE)、再送/更新処理部202は、その受信フレームが未対応であると判断し、次のように動作する。
その受信フレームが未対応である場合(S61;TRUE)、再送/更新処理部202は、その受信フレームに設定されているフラグに基づいてその受信フレームがACKフレームであるか又はNAKフレームであるかを識別する(S62)。
その受信フレームがNAKフレームである場合(S62;NAK)、再送/更新処理部202は、ヘッダ処理部201から送られてきたRCV_SEQ、RCV_EOS及びRCV_XIDを含む再送指示を生成する。再送/更新処理部202は、その再送指示を送信バッファ制御部112及びID付与部114へ送る(S64)。再送/更新処理部202は、続いて、上記条件4に基づいて、REG_SXID及びPEOSの各値を更新する(S65)。具体的には、条件4の中のRCV_XID≧REG_SXIDが成立する場合、RCV_XIDに1を加算した値がREG_SXIDに設定される。また、条件4の中のRCV_EOS>PEOSが成立する場合、RCV_EOSの値がPEOSに代入される。なお、本実施形態では、REG_SXIDの更新にRCV_XIDを使用しているが、ID付与部114で保持されているXIDが使用されても良い。
これにより、未対応のNAKフレームが受信された場合には、再送シーケンスが開始されるか、又は、再送シーケンス中において最終シーケンス番号が更新される。結果、再送シーケンス期間中に受信された、拡張NAKフレーム以外のNAKフレームは、対応済みと判定される。
一方、当該受信フレームがACKフレームである場合(S62;ACK)、再送/更新処理部202は、更新指示を生成し、その更新指示を送信バッファ制御部112及びID付与部114へ送る(S63)。その更新指示には、そのACKフレームに含まれるRCV_SEQ、RCV_XIDが含まれる。これにより、ACKフレームに含まれるRCV_SEQより小さい(前の)シーケンス番号を含むフレームが送信バッファ部102から削除される。
図8A及び図8Bは、受信処理部203の動作例を示すフローチャートである。受信処理部203は受信側の処理を行う。
受信処理部203は、ヘッダ処理部201から、RCV_SEQ、RCV_XID及び受信フレームを受けると(S700;YES)、その受信フレームが次に受信すべき先頭フレームであるか否かを判定する(S701)。この判定は、その受信フレームのRCV_SEQとNEXT_SEQとが一致するか否かにより行われる。
まず、受信フレームが次に受信すべき先頭フレームであった場合(S701;TRUE)の処理について説明する。受信処理部203は、その受信フレームが次に受信すべき先頭フレームである場合には(S701;TRUE)、その受信フレームに含まれるトランザクション識別子(RCV_XID)をREG_RXIDに保持する(S702)。続いて、受信処理部203は、その受信フレームに誤りがあるか否かを判定する(S703)。
受信フレームに誤りがある場合で(S703;YES)かつその受信フレームが再送フレームである場合には(S704;FALSE)、受信処理部203は、NAKテーブル部204のNHED_SEQ(最大p)の値をEOSへ設定する(S706)。一方、受信フレームに誤りがある場合で(S703;YES)かつその受信フレームが再送フレームでない場合には(S704;TRUE)、受信処理部203は、その受信フレームのRCV_SEQにRDSを加算した値をEOSに設定することにより、EOSを更新する(S705)。
受信処理部203は、そのように更新されたEOSと共に、NEXT_SEQ及びREG_RXIDを含むNAK生成指示を生成し、そのNAK生成指示をACK/NAK生成部103へ送る(S742)。その後、受信処理部203は、その受信フレームを廃棄し(S746)、再度、ヘッダ処理部201からの入力を待つ(S700)。
その受信フレームに誤りがない場合には(S703;NO)、受信処理部203は、NAKテーブル部204にNNAK_SEQの登録があるか否かをチェックする(S710)。受信処理部203は、NNAK_SEQの登録がない場合(S710;NO)、当該受信フレーム以降、フレーム障害の発生したフレームが存在していないため、現状のNEXT_SEQにその受信フレームのフレーム長(LEN)を加算することにより、NEXT_SEQを更新し(S720)、その更新されたNEXT_SEQと共に、RCV_XIDを含むACK生成指示を生成する(S721)。受信処理部203は、そのACK生成指示をACK/NAK生成部103へ送り、その受信フレームを受信バッファ部113へ送る(S722)。
受信フレームに誤りがなく、かつ、NAKテーブル部204にNNAK_SEQの登録がある場合(S703;NO、S710;YES)、受信処理部203は、以下の条件3を判定する(S711)。以下の条件3は、既に受信しているフレームと現受信フレームとの間に未受信のフレームがあるか否かを判定するための条件である。以下の条件3が成立した場合(S711;TRUE)、当該未受信フレームがないことを示し、条件3が成立しない場合(S711;FALSE)、当該未受信フレームがあることを示す。
(条件3)NHED_SEQ(1)==NEXT_SEQ+LEN
上記条件3が成立しない場合(S711;FALSE)、受信処理部203は、現状のNEXT_SEQにその受信フレームのフレーム長(LEN)を加算することによりNEXT_SEQを更新する(S712)。その後、受信処理部203は、その受信フレームが再送フレームであれば(S713;FALSE)、更新されたNEXT_SEQと共に、RCV_XIDを含むACK生成指示を生成する(S733)。一方、その受信フレームが再送フレームでない場合(S713;TRUE)、受信処理部203は、NAKテーブル部204のNHED_SEQ(最大p)の値をEOSに設定し(S714)、更新されたEOSと共に、NEXT_SEQ及びRCV_XIDを含むNAK生成指示を生成する(S715)。受信処理部203は、そのように生成されたACK生成指示又はNAK生成指示をACK/NAK生成部103へ送り、その受信フレームを受信バッファ部113へ送る(S722)。
上記条件3が成立する場合(S711;TRUE)、未受信フレームがないため、受信処理部203は、現状のNEXT_SEQにNAKテーブル部204のNNAK_SEQ(1)を設定することにより、NEXT_SEQを更新する(S730)。これにより、NEXT_SEQには、現受信フレーム以降に受信されるべきフレームであって未だ受信されていない先頭フレームのシーケンス番号が設定されることになる。続いて、受信処理部203は、NAKテーブル部204から、NHED_SEQ(1)及びNNAK_SEQ(1)を含むレコードを削除する(S731)。これにより、NAKテーブル部204に格納される他のレコードのレコード番号pが繰り上げられる。
受信処理部203は、NAKテーブル部204の更新後、更に、NAKテーブル部204にNNAK_SEQ(1)の登録があり、かつ、当該受信フレームが再送フレームであるか否かが判定される(S732)。NAKテーブル部204にNNAK_SEQ(1)の登録があり、かつ、当該受信フレームが再送フレームでない場合(S732;TRUE)、受信処理部203は、上述した処理(S714)以降の処理を行う。一方、NAKテーブル部204にNNAK_SEQ(1)の登録がない場合、又は、当該受信フレームが再送フレームである場合(S732;FALSE)、受信処理部203は、上述した処理(S733)以降の処理を行う。
次に、受信フレームが次に受信すべき先頭フレームでなかった場合(S701;FALSE)の処理について説明する。受信処理部203は、その受信フレームが次に受信すべき先頭フレームでない場合には(S701;FALSE)、以下の条件1を判定する。以下の条件1は、受信フレームのシーケンス番号が次に受信すべき先頭フレームのシーケンス番号よりも小さく、かつ、受信フレームのトランザクション識別子が既に受信済みであることを判定する。
(条件1)RCV_SEQ<NEXT_SEQかつRCV_XID=REG_RXID
条件1が成立する場合(S740;TRUE)かつその受信フレームが再送フレームである場合(S741;FALSE)、受信処理部203は、現在、再送フレーム受信中であり、以後、NEXT_SEQのシーケンス番号を持つ再送フレームを受信する可能性があると判断し、NEXT_SEQ及びRCV_XIDを含むACK生成指示を生成する(S745)。一方、条件1が成立する場合(S740;TRUE)かつその受信フレームが再送フレームでない場合(S741;TRUE)、受信処理部203は、その受信フレームは既に受信しているフレームと判断し、NAK生成指示をACK/NAK生成部103へ送る(S742)。受信処理部203は、生成されたACK生成指示又はNAK生成指示をACK/NAK生成部103へ送り、その受信フレームを廃棄する(S746)。
条件1が成立しない場合(S740;FALSE)、受信処理部203は、その受信フレームに関する情報がNAKテーブル部204に登録されているか否かを確認する(S750)。その受信フレームに関する情報が登録されていない場合(S750;NO)、受信処理部203は、その受信フレームに関する情報をNAKテーブル部204へ登録する(S751)。NAKテーブル部204への登録では、上述した通りであり、受信フレームのシーケンス番号(RCV_SEQ)がNHED_SEQ(p)へ、シーケンス番号(RCV_REQ)にフレーム長(LEN)を加算して得られる値がNNAK_SEQ(p)へ設定される。
続いて、受信処理部203は、EOSを生成する(S752)。この処理(S752)については後述する。
受信処理部203は、NEXT_SEQ、RCV_XID及びEOSを含むNAK生成指示を生成し(S753)、このNAK生成指示をACK/NAK生成部103へ送る。その後、受信処理部203は、その受信フレームに誤りがあれば(S755;YES)、その受信フレームを廃棄し(S746)、その受信フレームに誤りがなければ(S755;NO)、その受信フレームを受信バッファ部113へ送る(S722)。
図8Bは、図8Aに示されるフローチャートにおけるEOS生成処理(S752)を更に詳細に示したフローチャートである。受信処理部203は、EOSを生成するにあたり次のように動作する。
受信処理部203は、受信フレームのRTフラグを確認することにより、その受信フレームが再送フレームであるか否かを判定する(S780)。受信処理部203は、その受信フレームが再送フレームであると判定すると(S780;FALSE)、NAKテーブル部204に格納されるNHED_SEQ(最大p)の値をEOSへ代入する(S781)。
一方、受信処理部203は、その受信フレームが再送フレームでないと判定すると(S780;TRUE)、フレーム誤り検出の結果を参照することにより、その受信フレームに誤りがあるか否かを確認する(S782)。このフレーム誤りの確認は、フレーム誤りとフレームロスとの違いにより、EOSの値を変えるために行われる。
受信フレームに誤りがある場合(S782;YES)、受信処理部203は、EOSより、受信フレームのRCV_SEQが大きいか否かを判定する(S783)。判定処理(S782)及び(S783)により、フレーム障害が発生した先頭フレーム(SEQ)から再送データ量RDSの間のフレームに次のフレーム障害が発生しているか否かが確認される。これは、言い換えれば、再送シーケンス間のフレーム障害の発生の確認である。RCV_SEQがEOS以下である場合(S783;FALSE)は、受信処理部203は、再送シーケンス間にフレーム障害が発生したと判断し、TSEQに、受信フレームのRCV_SEQを代入し、かつ、EOSに、そのRCV_SEQとRDSとの和を代入することにより、次に受信予定のフレームのシーケンス番号TSEQ及び最終シーケンス番号EOSを更新する(S785)。
RCV_SEQがEOSより大きい場合(S783;TRUE)、受信処理部203は、更に、NEXT_SEQがEOSより大きいか否かを判定する(S784)。NEXT_SEQがEOSより大きい場合とは、再送信が完了し、非再送フレームが受信されている状態を意味する。受信処理部203は、NEXT_SEQがEOS以下である場合(S784;FALSE)、フレーム障害の間隔が再送データ量RDSより大きいと判断し、EOS及びTSEQを更新しない(S786)。これにより、無駄な再送を抑える。NEXT_SEQがEOSより大きい場合(S784;TRUE)、受信処理部203は、再送シーケンスが終了した後にフレーム障害が発生したと判断し、上記処理(S785)を実行する。
受信処理部203は、フレームに誤りが無い場合(S782;NO)、受信フレームのシーケンス番号RCV_SEQがTSEQと一致するか否かを確認する(S790)。ここで、RCV_SEQがTSEQと一致しないことは(S790;FALSE)、NEXT_SEQ以降のシーケンス番号のフレームでフレームロスが発生していることを意味し、両者が一致することは(S790;TRUE)、その逆を意味する。受信処理部203は、両者が一致する場合(S790;TRUE)、フレームロスが発生していないため、TSEQに、RCV_SEQとLENとを加算した値を設定し、EOSを更新しない(S791)。
受信処理部203は、RCV_SEQとTSEQとが一致しない場合(S790;FALSE)、RCV_SEQがEOSより大きいか否かを判定する(S792)。これは、上述の判定処理(S783)と同意である。受信処理部203は、RCV_SEQがEOS以下である場合(S792;FALSE)、TSEQ及びEOSを次のように更新する(S793)。TSEQに、受信フレームのRCV_SEQとそのフレーム長との和が設定され、EOSに、更新前のTSEQと再送データ量RDSとの和が設定される。
受信処理部203は、RCV_SEQがEOSより大きい場合(S792;TRUE)、NEXT_SEQがEOSより大きいか否かを判定する(S794)。NEXT_SEQがEOSより大きい場合とは、再送信が完了し、非再送フレームが受信されている状態を意味する。受信処理部203は、NEXT_SEQがEOSより大きい場合(S794;TRUE)、TSEQに、受信フレームのRCV_SEQとそのフレーム長との和を設定し(S796)、NAKテーブル部204にNNAK_SEQ(1)が登録されているか否かを確認する(S797)。NAKテーブル部204にNNAK_SEQ(1)が登録されていない場合(S797;NO)、受信処理部203は、最終シーケンス番号EOSに、NEXT_SEQと再送データ量RDSの和を代入することで最終シーケンス番号EOSを更新する(S798)。NAKテーブル部204にNNAK_SEQ(1)が登録されている場合(S797;YES)、受信処理部203は、NAKテーブル部204で保持されているNHED_SEQ(最大p)の値をEOSに設定する(S781)。
一方、受信処理部203は、NEXT_SEQがEOS以下である場合(S794;FALSE)、再送信継続中であると判断し、EOS及びTSEQを更新しない(S795)。これにより、無駄な再送を抑える。
以下、第1実施形態における通信装置10及び20の動作例を図9に示される具体的な伝送シーケンス例に基づいて説明する。図9は、誤り発生時の通信端末間の伝送シーケンスの例を示す図である。図10は、図9の伝送シーケンスの各時点におけるNAKテーブル部204の登録例を示す図である。
図9中の"F(*)#"は送信フレーム又は再送信フレームを示し、"A(*)#"はACKフレームを示し、"N(*)#"及び"eN(*)#"はNAKフレームを示す。"*"はフレームに付与されるシーケンス番号であり、"#"は当該フレームのトランザクション識別子を示す。また、図9によれば、シーケンス番号の初期値は5であり、トランザクション識別子の初期値が0であると仮定される。
図10におけるH(p)及びN(p)は図3A及び図3Bと同じ意味で用いられる。即ち、H(p)は、NHED_SEQ(p)を示し、N(p)は、NNAK_SEQ(p)を示す。なお、B01時点では、NEXT_SEQを示すN(0)には、シーケンス番号の初期値(5)が設定されている。
図9の例では、説明の便宜上、ACKを受信せずに送信できる受信ウィンドウサイズが10フレームであり、再送データ量(RDS)が2であり、フレーム長(LEN)が1であると仮定される。また、図9では、送信フレームF(5)0、F(7)0、F(11)0でフレーム誤りが発生し、送信フレームF(10)0でフレームロスが発生し、フレーム誤り及びフレームロスから回復するまでの伝送シーケンスが示される。
図9の伝送シーケンスによれば、送信フレームF(5)0において第1のフレーム誤りが発生すると、受信側の通信端末20は、B01時点において、RDS(値2)に応じて決められたEOS(値7)を含むNAKフレームN(5)0を送信する。ここで、EOS(値7)は、誤りの発生したフレームのシーケンス番号(値5)にRDS(値2)を加算することにより得られる。
次に、上記EOSで示されるフレーム範囲内の送信フレームF(7)において第2のフレーム誤りが発生すると、受信側の通信端末20は、B03時点において、EOSの値を9に更新し、この更新されたEOS(値9)を含む拡張NAKフレームeN(5)0を送信する。これにより、フレームF(5)からフレームF(9)までが再送されている。
また、受信側の通信端末20は、再送シーケンス(フレームF(5)1からフレームF(9)1)の終了後、B09時点で、NAKテーブル部204に登録されている情報からEOS(値12)を生成し、NAKフレームN(10)1を送信することで、フレーム誤り及びフレームロスからの回復が実現される。
以下、図9に示すA01からA06及びB01からB10の各時点における送信側の通信端末10及び受信側の通信端末20の具体的動作をそれぞれ説明する。なお、フレーム識別部111の動作については、図6、図7、図8A及び図8Bを参照しながら、具体的に説明する。
〈A01〉
A01では、送信側の通信端末10は、送信フレームF(5)0を通信端末20へ送信する。図11A及び図11Bは、A01時点での送信側の通信端末10で処理されるフレーム及びそのフレームを格納する送信バッファ部102を概念的に示す図である。なお、図11Bでは、図面サイズの制限により、フレームF(5)を2段で示す場合もある。図11Aに示す送信データとは、NIC12が他ブロック11から取得するデータであり、図11Aに示すフレームF(5)とは、ヘッダ付与部101から送信バッファ部102へ送られるフレームである。
他ブロック11から取得される送信データにおける、ヘッダ情報g7−01はデータg7−02を宛先まで送り届けるために必要な情報である。ここではイーサネット(登録商標)が例示されているため、ヘッダ情報g7−01は、宛先アドレス、送信元アドレス及びType/Lengthなどを含み、MACヘッダとも呼ばれる。
《ヘッダ付与》
通信端末10と通信端末20との間でコネクションが確立し、図11Aに示される送信データが他ブロック11から内部インタフェース部100に送られると、内部インタフェース部100は、ヘッダ付与部101からの受け取り停止指示が有効でない限り、当該送信データをヘッダ付与部101へ送る。なお、ヘッダ付与部101からの受け取り停止指示が有効である場合、内部インタフェース部100は、送信データの停止要求を他ブロック11へ出力する。送信データがヘッダ付与部101に送られると、ヘッダ付与部101は、送信バッファ部102から出力停止指示が無い限り、送信データに再送ヘッダg7−03を挿入する。送信バッファ部102からの出力停止指示が有効であれば、ヘッダ付与部101は、受け取り停止指示を内部インタフェース部100へ送る。
図11Aに示されるように、再送ヘッダg7−03は、タイプ、フラグ及びシーケンス番号を含む。タイプには、再送ヘッダを識別するのに使用するため任意の値(イーサネット(登録商標)では2バイト分)が設定される。フラグは、例えば、SN、NAK、ACK及びRTを示す4ビットで構成され、フレームの識別に使用される。初回フレーム送信時は、SNフラグに1が設定され、再送時のフレームにはRTに1が設定される。また、ACKフレーム、NAKフレームには、ACKビット、NAKビットに1が設定される。A01の時点では、ヘッダ付与部101は、次のようなフラグ(SN=1、ACK=0、NAK=0、RT=0)を設定する。
シーケンス番号は、一般的な再送制御では、送信フレームを特定するために使用されるが、本実施形態では、その他に送信バッファ部102で格納されているフレームの先頭アドレスをも示す。すなわち、或るフレームのシーケンス番号とフレーム長との和が次フレームのシーケンス番号を示すと共に、送信バッファ部102へそのフレームを保存する際の先頭アドレスをも示す。このシーケンス番号を用いて送信バッファ部102及び受信バッファ部113に対する読出し及び書き込みが行われる。
ヘッダ付与部101により再送ヘッダg7−03が付加されたフレームF(5)は、送信バッファ部102へ送られる。
《送信バッファ保存》
図11Aには、送信バッファ部102に保存されたフレームと、当該フレームの先頭アドレスとシーケンス番号との関係とが示されている。SR、srd、src、SW及びswrは、送信バッファ部102においてフレームの保存及び読み出し制御に利用されるアドレス変数を示す。srcは通常srdと一緒にカウントされ、再送ではない初回送信のための読み出しが終了したアドレスを示す。言い換えれば、srcは再送前に読み出しが終了しているフレームの末尾アドレス(次フレームの先頭アドレス)を示す。SRはACKが未だ受信されていないフレームの先頭アドレス、srdは送信バッファ部102から現時点で次に読み出すべき箇所を示すアドレス、SWは次に送信バッファ部102に保存されるフレームの先頭アドレス、swrは送信バッファ部102に現時点で次に書き込むべき箇所を示すアドレスである。この時点では、SRがd−3に設定され、srd及びsrcがd−5に設定され、SWがd−6に設定され、swrがd−7に設定される。図11Aに示されるフレームF(5)(g7−05)に付与されるシーケンス番号g7−04はd−5である。
フレームg7−05を受けると、送信バッファ部102は、再送ヘッダg7−03内のシーケンス番号g7−04(値d−5)に従って、図11Aに示されるように、フレームg7−05をアドレスd−5に保存する。つまり、シーケンス番号g7−04の値はバッファ内アドレスd−5と等しい。なお、フレームの書き込み中はswrが利用され、1フレーム分の書き込みが終了する毎にSWにswrが代入されることにより、バッファの書き込みアドレスが更新されていく。例えば、フレームF(5)の書き込みが終了すると、SWには値'd−6'が設定される。
送信バッファ部102は、読み出し可能なフレームが存在する場合、当該フレームの読み出しを行い、ACK/NAK生成部103へ出力する。図11Aの場合、送信バッファ部102は、srdの値(d−5)がSWの値(d−6)より小さいため、読み出し可能なフレームが存在すると判断し、srdの値(d−5)からSWの値(d−6)までのフレームを読み出す。なお、送信バッファ部102は、srdの値とSWの値とが等しい場合、読み出し可能なフレームはないと判断する。ACK/NAK生成部103から読み出し停止指示が与えられると、送信バッファ部102は、読み出し停止指示が解除されるまでフレームの読み出しを停止する。
《ACK/NAK生成》
フレームg7−05(フレームF(5))が与えられると、ACK/NAK生成部103は、フレーム識別部111から、ACK/NAK生成指示がない限り、当該フレームをID付与部114へ送る(図4の処理S30、S31及びS36に相当)。但し、ここの例では、通信端末10から通信端末20への片方向通信のみを想定しているため、通信端末10のACK/NAK生成部103はACK又はNAKを生成しない。
《トランザクション識別子の付与》
図11Bの(1)には、送信バッファ部102から読み出されたフレームF(5)(g7−05)が示されている。図11Bの(1)に示されるフレームg7−05をACK/NAK生成部103から取得したID付与部114は、そのフレームg7−05にトランザクション識別子(図11Bに示されるXID)を挿入し、図11Bの(2)に示されるフレームg7−06を出力する。
ここで、図5を参照しながらトランザクション識別子の具体的な決定手法について説明する。ID付与部114は、フレームg7−05を受け(S40;YES)、そのフレームに含まれるSNフラグを確認する(S41)。A01時点では、フレームg7−05のSNフラグは1であるため(S41;TRUE)、ID付与部114は、更に、フレーム識別部111からの再送指示の存在を確認する(S42)。
A01時点では、再送指示は無いため(S42;NO)、ID付与部114は、フレームg7−05のシーケンス番号(SEQ=5)と一つ前のフレームに設定されていたシーケンス番号(PRE_SEQ=4)とを比較する(S48)。SEQはPRE_SEQより大きいため(S48;TRUE)、ID付与部114は、トランザクション識別子(XID=0)を当該フレームへ挿入し(S45)、PRE_SEQの値をSEQの値(5)とする(S46)。
《誤り訂正及び検出》
このようにフレームg7−06がID付与部114から出力されると、ECC付与部104は、そのフレームg7−06における宛先アドレスフィールドからType/Lengthフィールドまでのデータのための誤り訂正符号を算出する。ECC付与部104は、その算出されたヘッダ誤り訂正符号g7−09をType/Lengthフィールドの前に挿入することにより、図11Bの(3)に示されるフレームg7−08を生成する。ECC付与部104は、生成されたフレームg7−08をEDC付与部105へ送る。
当該フレームg7−08を受けると、EDC付与部105は、そのフレームg7−08における宛先アドレスフィールドからデータフィールドまでのデータのための誤り検出符号を算出する。EDC付与部105は、算出されたフレーム誤り検出符号g7−11をフレームの末尾に付加することにより、図11Bの(4)に示されるフレームg7−10を生成する。EDC付与部105は、生成されたフレームg7−10を送信部106へ送る。生成されたフレームg7−10は、図9のフレームF(5)0に相当する。
《送信》
送信部106は、EDC付与部105により生成されたフレームg7−10に対して符号化、スクランブリング、シリアライズを行うことにより送信信号を生成し、その送信信号を回線1を介して送出する。
このようなA01時点での処理は、ウィンドウサイズ(例えば10)に達するまで繰り返し実行される。但し、図9の例では、通信端末10は、A02時点でNAKを受信するため、ウィンドウサイズに達する前に処理を止め、NAKで要求されたシーケンス番号からRDS(再送データ量)分のフレームを再送する。このようなA02時点での処理については後述する。
〈B01〉
B01では、受信側の通信端末20は、フレーム誤りの発生したフレームF(5)0を受信してから、NAKフレームN(5)0を返信するまでの処理を実行する。
《受信》
図12A及び図12Bは、B01時点での受信側の通信端末20で処理されるフレームを概念的に示す図である。なお、図12A及び図12Bでは、図面サイズの制限により、フレームを2段で示す場合もある。
受信側の通信端末20では、受信部108が、通信端末10から送信されたデータ信号(フレームF(5)0)を受信すると、そのデータ信号に対してデシリアライズ、デスクランブリング、復号化を行うことにより、図12Aの(1)に示される受信フレームF(5)0を取得し、これをヘッダ誤り訂正部109へ送る。
《誤り訂正及び検出》
受信部108から受信フレームを受けると、ヘッダ誤り訂正部109は、その受信フレームにおける宛先アドレスフィールドからヘッダ誤り訂正符号フィールドまでのデータの誤り(ヘッダ誤り)を当該フレームに付与されているヘッダ誤り訂正符号を用いて訂正する。ヘッダ誤り訂正部109は、誤り訂正されたフレームと誤り訂正結果g8−01をフレーム誤り検出部110へ送る。誤り訂正結果は、訂正完了又は訂正未完了を示す。
フレーム誤り検出部110は、ヘッダ誤り訂正部109から誤り訂正されたフレームと誤り訂正の結果とを取得すると、そのフレームにおける宛先アドレスフィールドからデータフィールドまでのデータの誤り(フレーム誤り)をそのフレームに付与されているフレーム誤り検出符号を用いて検出する。更に、フレーム誤り検出部110は、そのフレームのフレーム長をカウントする。但し、送信バッファ部102のアドレスと受信バッファ部113のアドレスとの整合をとるため、そのフレームに含まれるXIDとフレーム誤り検出符号とを除外したフレームの長さがカウントされる。
フレーム誤り検出部110は、図12Aの(2)に示されるように、ヘッダ誤り訂正の結果g8−01、フレーム誤り検出の結果g8−02、フレーム長LENg8−03をそのフレームに含めた上で、そのフレームをフレーム識別部111へ送る。なお、フレームに誤りがある場合、当該フレーム長LENには例えば'0'が設定される。
《フレーム識別》
フレーム識別部111は、そのフレームに誤りが発生していること及びそのフレームが再送フレームでないことを確認し、EOSを生成する。EOSは、再送データ量設定部115から提供されるRDSとそのフレームに含まれるシーケンス番号とを加算することにより算出される。この例では、RDSを2とすると、EOSは、7(=5+2)に決定される。フレーム識別部111は、算出されたEOS(7)と、次に受信すべきフレームのシーケンス番号(NEXT_SEQ=5)と、トランザクション識別子とを含むNAK生成指示(図12Aの(3)参照)を生成しそのNAK生成指示をACK/NAK生成部103に送る。
ここで、上述した図6、図7、図8A及び図8Bと共に、図13A及び図13Bを参照しながら、B01時点におけるフレーム識別部111の処理をより具体的に説明する。図13Aは、送信側の通信端末10のフレーム識別部111で保持される各変数値と受信フレームと送信フレームとの関係を示す図であり、図13Bは、受信側の通信端末20のフレーム識別部111で保持される各変数値と受信フレームと送信フレームとの関係を示す図である。図13A及び図13Bには、図9に示される各時点での各変数値がそれぞれ表わされている。図13Bに示されるように、B01時点における受信側の通信端末20のフレーム識別部111では、各変数は次のような値に設定されている。NEXT_SEQ=5、REG_RXID=0、RCV_SEQ=5、RCV_XID=0、NHED_SEQ(1)、NNAK_SEQ(1)、REG_SXID、RCV_EOS及びLEN=NULL。
ヘッダ処理部201は、図12Aの(2)に示すフレームを受けると、ヘッダ誤り訂正が完了しているか否かをチェックする(図6のS50)。ここでは、フレームF(5)0にはフレーム誤りが生じているが、ヘッダ誤り訂正は完了したものと仮定する。また、A01時点で説明されたように、フレームF(5)0のフラグは次のように設定されている(SN=1、ACK=0、NAK=0、RT=0)。よって、ヘッダ処理部201は、ヘッダ誤り訂正が完了しており(S50;YES)、かつ、そのフレームのフラグがSN=1であることを確認すると(S52;SN)、当該受信フレームからシーケンス番号RCV_SEQ、トランザクション識別子RCV_XIDを抽出し、それら抽出されたデータと共にその受信フレームを受信処理部203へ送る(S53)。
受信処理部203は、ヘッダ処理部201から、RCV_SEQ、RCV_XID及び受信フレーム(図12Aの(2))を受けると(図8AのS700;YES)、RCV_SEQの値とNEXT_SEQの値とが一致するか否か判定する(S701)。B01時点では、RCV_SEQ(値5)とNEXT_SEQ(値5)(図13B参照)とが一致するため(S701;TRUE)、受信処理部203は、RCV_XID(値0)をREG_RXIDに設定することにより、REG_RXIDを更新する(S702)。これにより、受信側の通信端末20では、そのフレームF(5)0が既に受信されたフレームとして認識される。
続いて、受信処理部203は、その受信フレームのフレーム誤り検出の結果g8−02を参照することにより、その受信フレームに誤りが有るか否かを判定する(S703)。B01時点では、フレームF(5)0に誤りが含まれているため(S703;YES)、受信処理部203は、その受信フレームのRTフラグを確認する(S704)。B01時点ではRTフラグは0であるため(S704;TRUE)、受信処理部203は、その受信フレームが再送フレームでないと判断し、EOSを決定する(S705)。ここでは、再送データ量設定部115から供給される再送データ量RDS(例えば2)とその受信フレームのシーケンス番号RCV_SEQとを加算することにより、EOSは、7(=RCV_SEQ+RDS=5+2)に決定される。
続いて、受信処理部203は、NEXT_SEQ(値5)とEOS(値7)とREG_RXID(値0)とを含むNAK生成指示を生成し(S742)、そのNAK生成指示をACK/NAK生成部103へ送る。その後、受信処理部203は、その受信フレームを廃棄する(S746)。
《ACK/NAK生成》
ACK/NAK生成部103は、フレーム識別部111からNAK生成指示(図12Aの(3))を取得すると、そのNAK生成指示に応じてNAKフレームN(5)0(図12Aの(4))を生成する。このときNAKフレームN(5)0内のフラグは、次のように設定され(SN=0、ACK=0、NAK=1、RT=0)、シーケンス番号には5(NEXT_SEQ)が設定され、EOSg8−04には7が設定され、XIDには0が設定される。このようなACK/NAK生成部103の処理は、図4におけるS30、S32及びS37に相当する。
ACK/NAK生成部103は、生成されたNAKフレームN(5)0をID付与部114へ送る。なお、送信バッファ部102から読み出されたフレームが有る場合、ACK/NAK生成部103は、読み出し停止指示を送信バッファ部102へ出力した後、上述のような処理を行う(図4におけるS30、S31、S33、S34、S35及びS36に相当)。
《トランザクション識別子付与》
ID付与部114は、ACK/NAK生成部103からNAKフレームN(5)0(図12Aの(4))を受けると、このフレームのSNフラグ(=0)を確認することにより、そのフレームが送信フレーム又は再送信フレームでないと判断し、そのNAKフレームをECC付与部104へ送る。このようなID付与部114の処理は、図5におけるS40、S41及びS47に相当する。
《誤り訂正及び検出》
ECC付与部104は、ID付与部114からNAKフレームN(5)0を受けると、そのフレームの宛先アドレスフィールドからType/Lengthフィールドまでのデータのための誤り訂正符号を算出する。ECC付与部104は、その算出されたヘッダ誤り訂正符号g8−05をType/Lengthフィールドの前に挿入し、そのヘッダ誤り訂正符号g8−05を含むNAKフレーム(図12Bの(5)参照)をEDC付与部105へ送る。
EDC付与部105は、NAKフレームN(5)0(図12Bの(5))を受けると、そのフレームにおける宛先アドレスフィールドからパディングフィールドまでのデータのための誤り検出符号を算出する。EDC付与部105は、算出されたフレーム誤り検出符号g8−06をそのフレームの末尾に付加し、フレーム誤り検出符号g8−06を含むNAKフレームN(5)0を送信部106へ送る。
《送信》
送信部106は、EDC付与部105からNAKフレームN(5)0(図12Bの(6))を受けると、そのフレームデータに対して符号化、スクランブリング及びシリアライズを行うことで送信信号を生成し、その送信信号を回線2を介して送信する。
〈A02〉
A02では、送信側の通信端末10は、受信側の通信端末20から、NAKフレームN(5)0を受信してから、再送フレームF(5)1を送信するまでの処理を実行する。NAKフレームN(5)0が送信側の通信端末10の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Aに示されるように、A02時点における送信側の通信端末10のフレーム識別部111では、各変数は次のような値に設定されている。REG_SXID=0、RCV_SEQ=5、RCV_XID=0、RCV_EOS=7、LEN=1、その他の各変数値=NULL。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びNAKフレームN(5)0のフレーム長を取得すると、ヘッダ誤り訂正の結果を参照することによりヘッダ誤り訂正が完了していると判断する(図6のS50;YES)。続いて、ヘッダ処理部201は、当該フレームに含まれるフラグを確認することにより、受信フレームがNAKフレームであることを認識する(S52;ACK/NAK)。
ヘッダ処理部201は、当該受信フレームからRCV_SEQ、RCV_EOS、RCV_XIDを抽出し、これらデータを再送/更新処理部202へ送る(S54)。A02時点では、上述したように、RCV_SEQは5であり、RCV_EOSは7であり、RCV_XIDは0である。
再送/更新処理部202は、ヘッダ処理部201からRCV_SEQ(値5)、RCV_EOS(値7)及びRCV_XID(値0)を受けると(図7のS60;YES)、上述の条件4を判定する(S61)。A02時点では、RCV_XID(値0)≧REG_SXID(値0)が成立する(S61;TRUE)。また、当該受信フレームは、NAKフレームN(5)0である(S62;NAK)。よって、再送/更新処理部202は、RCV_SEQ(値5)、RCV_EOS(値7)、RCV_XID(値0)を含む再送指示を送信バッファ制御部112及びID付与部114へ送る(S64)。その後、再送/更新処理部202は、RCV_XID(値0)≧REG_SXID(値0)が成立しているため、RCV_XID(値0)に1を加算した値をREG_SXIDに設定し、RCV_EOS(7)をPEOSに設定する(S65)。これにより、REG_SXIDは1に設定され、PEOSは7に設定される。
図14A及び図14Bは、A02時点での送信側の通信端末10で処理されるフレーム及びそのフレームを格納する送信バッファ部102を概念的に示す図である。なお、図14Bでは、図面サイズの制限により、フレームを2段で示す場合もある。図14Aの(1)には、再送/更新処理部202により生成された再送指示が示される。
《送信バッファ制御》
図14Aの(1)に示される再送指示が送信バッファ制御部112に送られると、送信バッファ制御部112は、その再送指示に含まれるRCV_SEQ(値5)及びRCV_EOS(値7)と共に、再送指示を送信バッファ部102へ通知する。上述したように、シーケンス番号RCV_SEQは、送信バッファ部102に格納される再送フレームの先頭アドレスを示している。
送信バッファ部102は、RCV_SEQで示されるアドレス(d−5)が先頭アドレスとなるフレームから、RCV_EOSで示されるアドレス(d−7)が先頭アドレスとなるフレームまでを読み出す。このとき、既に初回読み出しが終了しているフレームに対して、再送フレームであることを示すフラグ(RT=1)が設定される。A02時点では、送信バッファ部102内の各アドレス変数は、図14Aの(2)に示されるような値となっている。即ち、SRはd−5を示し、srdとsrcはフレームF(11)0が送信されているためd−12を示し、SWはd−12を示し、swrはd−13を示す。
送信バッファ部102は、図14Aの(1)で示される再送指示を受けると、図14Aの(2)に示されるように、srdをRCV_SEQ(d−5)に設定し、srdで示されるアドレスからフレームを読み出す。送信バッファ部102は、srdがEOS(d−7)を超えるまで、読み出されたフレームのRTフラグに1を設定する。つまり、A02時点以降、フレームF(5)、F(6)及びF(7)が再送のために順次読み出される。図9の例によれば、A02時点では、フレームF(5)が読み出される。ところで、実際の運用ではフレーム長は可変長であるため、RDSの値によればEOSは必ずしもフレームの先頭アドレスを示さない場合もあり得る。このような場合、即ち、EOSがフレームの中間アドレスを示す場合には、そのフレームまでが読み出される。
《ACK/NAK生成》
上述のように再度読み出されたフレームF(5)(図14Bの(4))がACK/NAK生成部103に送られると、ACK/NAK生成部103は、上述したA01時点と同様に、フレーム識別部111からACK/NAK生成指示がないため、当該フレームF(5)をID付与部114へ送る。
《トランザクション識別子付与》
ID付与部114は、ACK/NAK生成部103からフレームF(5)(図14Bの(4))を受けると、そのフレームにトランザクション識別子g9−01を挿入し、図14Bの(5)で示されるフレームを出力する。トランザクション識別子の具体的な決定手法については以下のとおりである(図5参照)。
ID付与部114は、ACK/NAK生成部103からフレームF(5)を受け、フレーム識別部111から、RCV_SEQ(値5)、RCV_EOS(値7)及びRCV_XID(値0)を含む再送指示を受けている(図5のS40;YESかつS42;YES)。更に、フレームF(5)のSNフラグは1に設定されている(S41;TRUE)。よって、ID付与部114は、フレームF(5)のRTフラグ及びシーケンス番号SEQ、並びに受信されたNAKフレームのシーケンス番号RCV_SEQを確認する。ID付与部114は、RTフラグが1でありかつSEQ(値5)とRCV_SEQ(値5)とが等しいため(S43;TRUE)、RCV_XID(値0)に1を加算した値をトランザクション識別子g9−01としてそのフレームF(5)に挿入する(S44及びS45)。ID付与部114は、トランザクション識別子g9−01(値1)を含む再送フレームF(5)1をECC付与部104へ送る(S47)。
《誤り訂正及び検出》《送信》
ID付与部114からECC付与部104へ送られた再送フレームF(5)1は、A01時点の処理と同様に、回線1を介して通信端末20へ送信される。
〈B02〉
B02では、受信側の通信端末20は、フレームF(6)0を受信してから、NAKフレームN(5)0を返信するまでの処理を実行する。フレームF(6)0が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
図15A及び図15Bは、B02時点での受信側の通信端末20で処理されるフレーム及びそのフレームを格納する受信バッファ部113を概念的に示す図である。なお、図15Aでは、図面サイズの制限により、フレームを2段で示す場合もある。図15Aの(1)には、フレーム誤り検出部110から出力される受信フレームF(6)0が示される。
《フレーム識別》
図13Bに示されるように、B02時点では、B01時点からRCV_SEQが5から6に変わっており、LENがNULLから1に変わっている。その他の各変数は、B01時点と同様である。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(6)0(図15Aの(1))のフレーム長を取得すると、フレームF(6)0に関しヘッダ誤り訂正が完了している(訂正の必要ない)ことを確認する(図6のS50;YES)。ヘッダ処理部201は、フレームF(6)0のフラグの設定状況(SN=1、ACK=0、NAK=0、RT=0)に応じて(S52;SN)、そのフレームF(6)0が初回送信フレームであると判断する。ヘッダ処理部201は、その受信フレームF(6)0からRCV_SEQ、RCV_XIDを抽出し、それらデータ及びそのフレームを受信処理部203へ送る(S53)。
これらデータを取得した受信処理部203は、B02時点では、RCV_SEQ(値6)とNEXT_SEQ(値5)(図13B参照)とが一致しないため(S701;FALSE)、RCV_SEQ(6)及びRCV_XID(0)が以下の条件1を満たすか否かをチェックする(S740)。
(条件1)RCV_SEQ<NEXT_SEQかつRCV_XID=REG_RXID
B02時点では、RCV_SEQ(値6)がNEXT_SEQ(値5)より大きいため、条件1は成立しない(S740;FALSE)。そこで、受信処理部203は、フレームF(6)0がNAKテーブル部204に登録済みであるか否かをチェックする(S750)。フレームF(6)0が初めて正常に受信されたフレームであるため、B02時点では、NAKテーブル部204には登録がない(S750;NO)。そこで、受信処理部203は、そのフレームF(6)0をNAKテーブル部204へ登録する(S751)。B02時点では、RCV_SEQ(値6)及びLEN(値1)であるため、図15Aの(2)に示されるように、NHED_SEQ(1)にはd−6(=RCV_SEQ)が設定され、NNAK_SEQ(1)にはd−7(=RCV_SEQ+LEN)が設定される。
続いて、受信処理部203は、次のようにEOSを生成する(S752)。
具体的には、受信処理部203は、まず、RTフラグを確認することによりその受信フレームF(6)0が再送フレームでないことを確認する(図8BのS780;TRUE)。受信処理部203は、その受信フレームF(6)0に誤りが無いことを確認すると(S782;NO)、フレームF(6)0のRCV_SEQ(値6)がTSEQと一致するか否かを確認する(S790)。TSEQの初期値はNEXT_SEQとなるため、B02時点ではTSEQには5が設定されている。
受信処理部203は、RCV_SEQ(値6)とTSEQ(値5)とが一致しないため(S790;FALSE)、RCV_SEQとEOSとを比較する(S792)。B02時点では、EOSは7(=NEXT_SEQ(値5)+RDS(値2))であり、RCV_SEQは6である。よって、受信処理部203は、TSEQ及びEOSを更新する(S793)。具体的には、TSEQに、フレームF(6)0のRCV_SEQ(値6)とそのフレーム長LEN(値1)との和が設定され、EOSに、TSEQ(値5)と再送データ量RDS(値2)との和が設定される。結果、更新後のTSEQは7となり、更新後のEOSは7となる。
受信処理部203は、このように生成されたEOS(値7)、次に受信すべきフレームのシーケンス番号(NEXT_SEQ=5)、及びトランザクション識別子(RCV_XID=0)を含むNAK生成指示を生成しそのNAK生成指示をACK/NAK生成部103に送る(S753)。なお、このとき生成されたNAK生成指示は、B01時点で生成されたNAK生成指示(図12Aの(3))と同じ内容となる。
続いて、受信処理部203は、その受信フレームF(6)0に誤りが無いことを確認すると(S755;NO)、その受信フレームF(6)0(図15Aの(1))からRCV_XID、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びLENを削除したフレームF(6)(図15Bの(3))とNEXT_SEQ(値5)とを受信バッファ部113へ送る(S722)。
《受信バッファ》
受信バッファ部113は、フレームF(6)(図15Bの(3))及びNEXT_SEQ(値5)をフレーム識別部111から受けると、フレームF(6)内のRCV_SEQに基づいてそのフレームF(6)を保存する。
図15Bの(4)及び(5)に示されるRR、rrd、RW、rwrは、受信バッファ部113内でのフレームの保存及び読み出しに利用されるアドレス変数を示している。RRは、読み出しが完了していないフレームの先頭アドレスを示し、rrdは、受信バッファ部113から現時点で次に読み出すべき箇所を示すアドレスを示し、RWは、次に受信バッファ部113へ保存されるフレームの先頭アドレスを示し、rwrは、受信バッファ部113に現時点で次に書き込むべき箇所を示すアドレスを示す。
フレームF(6)が書き込まれる前では、RR、rrd、RW及びrwrにはそれぞれ同値(d−5)が設定されている。そして、当該フレームF(6)のRCV_SEQが6であることから、rwrにはd−7が設定され、アドレスd−6に当該フレームF(6)が保存される。フレームF(6)保存後の各アドレス変数は、図15Bの(5)に示されるような値に設定される。即ち、RR、rrd及びRWが同値(d−5)に設定され、rwrがd−7に設定される。受信バッファ部113は、フレームF(6)の保存終了後、RWにNEXT_SEQを代入し、更新されたRWとRRとを内部インタフェース部100へ送る。ここで、受信バッファ部113内のアドレスd−6はNAKテーブル部204のNHED_SEQ(1)となり、アドレスd−7は、NAKテーブル部204のNNAK_SEQ(1)となる。受信バッファ部113からのフレーム読み出しは、RWがRRより大きい場合に開始される。RWは、ACK/NAKを返信する際に更新され、その値はNEXT_SEQとなる。rrdとRRは受信バッファ部113からフレームを読み出す毎に更新される。
《読み出し》
内部インタフェース部100は、受信バッファ部113からアドレスRW及びRRを受けると、これらアドレスが以下の条件2を満たすか否かを判定する。
(条件2)RR<RW
B02時点では、RR及びRWは共に5であり、上記条件2が成立しないため、内部インタフェース部100は、受信バッファ部113内に読み出し可能なフレームがないと判断し、読み出し処理を行わない。なお、条件2が成立した場合、内部インタフェース部100は、受信バッファ部113へ読み出し指示を送り、受信バッファ部113から読み出されたフレームを他ブロック11へ送る。
《送信》
EOS(値7)、次に受信すべきフレームのシーケンス番号(NEXT_SEQ=5)、及びトランザクション識別子(RCV_XID=0)を含むNAK生成指示がフレーム識別部111からACK/NAK生成部103に送られると、B01時点と同様に、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106は動作する。結果、NAKフレームN(5)0が回線2を介して通信端末10へ送られる。
〈A03〉
A03では、送信側の通信端末10は、受信側の通信端末20から、NAKフレームN(5)0を受信しそれに対応する処理を実行する。A03時点での通信端末20の処理は、対応済みのNAKフレームを受信した際の処理に相当する。NAKフレームN(5)0が送信側の通信端末10の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Aに示されるように、A03時点における送信側の通信端末10のフレーム識別部111では、各変数は次のような値に設定されている。REG_SXID=1、RCV_SEQ=5、RCV_XID=0、RCV_EOS=7、LEN=1、その他の各変数値=NULL。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びNAKフレームN(5)0のフレーム長を取得すると、A02時点と同じ処理を実行する(図6のS50;YES、S52;ACK/NAK、S54)。A03時点では、RCV_SEQ(値5)、RCV_EOS(値7)及びRCV_XID(値0)がヘッダ処理部201から再送/更新処理部202へ送られる。
再送/更新処理部202は、ヘッダ処理部201からRCV_SEQ(値5)、RCV_EOS(値7)及びRCV_XID(値0)を受けると(図7のS60;YES)、上記条件4を判定する(S61)。A03時点では、RCV_XID(0)がREG_SXID(値1)より小さく、かつ、RCV_EOS(値7)とPEOS(値7)とが一致するため、上記条件4は成立しない(S61;FALSE)。これにより、再送/更新処理部202は、受信フレームであるNAKフレームN(5)0が既に対応済みであると判断し、そのNAKフレームN(5)0を無視(廃棄)する。A02時点で既にフレームの再送が開始されており、かつ、その後EOSが更新されていないため、A03時点で受信されたNAKフレームN(5)0は対応済みである。
〈B03〉
B03では、受信側の通信端末20は、送信側の通信端末10から、フレーム誤りの発生したフレームF(7)0を受信してから、拡張NAKフレームeN(5)0を送信するまでの処理を実行する。拡張NAKフレームとは、上述したように、前回送信したNAKフレームに含まれるEOSとは異なる値を持つEOSを含むNAKフレームを意味する。なお、フレームF(7)0が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B03時点では、既にフレームF(6)0が正常に受信されているため、NHED_SEQ(1)に6(=RCV_SEQ)が設定され、NNAK_SEQ(1)に7(=RCV_SEQ+LEN)が設定されている。また、RCV_SEQが7に更新されている。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(7)0のフレーム長を取得すると、当該受信フレームからシーケンス番号RCV_SEQ(値7)、トランザクション識別子RCV_XID(値0)を抽出し、それら抽出されたデータと共にその受信フレームを受信処理部203へ送る(S50;YES、S52;SN、S53)。
受信処理部203は、ヘッダ処理部201から、RCV_SEQ(値7)、RCV_XID(値0)及び受信フレームF(7)0を受けると(図8AのS700;YES)、B02時点と同様に、処理(S701;FALSE、S740;FALSE、S750;NO、S751)を行う。なお、B03時点の処理(S751)では、フレームF(7)0には誤りがあるため、NAKテーブル部204にフレームF(7)0は登録されない。また、この時点での、TSEQ及びEOSは、B02時点において更新された値となるため、TSEQが7に設定され、EOSが7に設定されている。
続いて、受信処理部203は、次のようにEOSを生成する(S752)。受信フレームF(7)0のRTは0であり(S780;TRUE)、そのフレームF(7)0にはフレーム誤りが発生している(S782;YES)。そこで、受信処理部203は、EOS(値7)とRCV_SEQ(値7)とを比較する(S783)。B03時点では、両者は等しいため(S783;FALSE)、受信処理部203は、フレーム障害(フレームF(5)0)が発生したフレームからRDS(値2)の間のフレームにフレーム障害が発生したと判断する。よって、受信処理部203は、TSEQにフレームF(7)0のRCV_SEQ(値7)を代入し、EOSにRCV_SEQ(値7)とRDS(値2)との和(値9)を代入する(S785)。更新後のTSEQは7となり、更新後のEOSは9となる。
EOS(値9)の作成完了後、受信処理部203は、NEXT_SEQ(値5)、EOS(値9)及びRCV_XID(値0)を含むNAK生成指示を生成し、そのNAK生成指示をACK/NAK生成部103へ送る(S753)。ここで生成されたNAK生成指示は、B01時点及びB02時点で送信されたNAKフレームに含まれたEOSから更新されたEOSを含むため、拡張NAKの生成指示を意味する。その後、受信処理部203は、フレームF(7)0に誤りが含まれるため(S755;YES)、そのフレームF(7)0を廃棄する(S746)。
《送信》
EOS(9)、NEXT_SEQ(5)及びRCV_XID(0)を含むNAK生成指示がフレーム識別部111からACK/NAK生成部103に送られると、B01時点及びB02時点と同様に、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106は動作する。結果、7から9に更新されたEOSを含む拡張NAKフレームeN(5)0が回線2を介して通信端末10へ送られる。
〈A04〉
A04では、送信側の通信端末10は、受信側の通信端末20から、拡張NAKフレームeN(5)0を受信しそれに対応する処理を実行する。拡張NAKフレームeN(5)0が送信側の通信端末10の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Aに示されるように、A04時点でのフレーム識別部111で保持される各変数については、RCV_EOSのみがA03時点から変更されている。A04時点では、RCV_EOSは9である。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及び拡張NAKフレームeN(5)0のフレーム長を取得すると、A02時点と同じ処理を実行する(図6のS50;YES、S52;ACK/NAK、S54)。A04時点では、RCV_SEQ(値5)、RCV_EOS(値9)及びRCV_XID(値0)がヘッダ処理部201から再送/更新処理部202へ送られる。
再送/更新処理部202は、ヘッダ処理部201からRCV_SEQ(値5)、RCV_EOS(値9)及びRCV_XID(値0)を受けると(図7のS60;YES)、上記条件4を判定する(S61)。A04時点では、RCV_EOS(値9)がPEOS(値7)より大きいため、上記条件4が成立する(S61;TRUE)。また、当該受信フレームは、拡張NAKフレームeN(5)0である(S62;NAK)。よって、再送/更新処理部202は、RCV_SEQ(値5)、RCV_EOS(値9)、RCV_XID(値0)を含む再送指示を送信バッファ制御部112及びID付与部114へ送る(S64)。その後、再送/更新処理部202は、RCV_EOS(値9)がPEOS(値7)より大きい条件のみ成立するため、RCV_EOS(値9)をPEOSに設定する(S65)。これにより、REG_SXIDは1のまま維持され、PEOSは9に更新される。
図16は、A04時点での送信側の通信端末10で処理されるフレーム及びそのフレームを格納する送信バッファ部102を概念的に示す図である。図16の(1)には、フレーム識別部111(再送/更新処理部202)から出力される再送指示が示される。
《送信バッファ制御(eNAK受信時)》
図16の(1)に示される再送指示が送信バッファ制御部112に送られると、送信バッファ制御部112は、再送指示、再送フレームの先頭アドレスを示すRCV_SEQ(値5)及び再送フレームの終了アドレスを示すRCV_EOS(値9)を送信バッファ部102へ送る。
送信バッファ部102は、再送フレーム読出し中である場合には、再送するデータ量を更新する。具体的には、RCV_EOSのアドレスをd−7から、d−9へ更新する。つまり、eNAKによる再送指示を受けることで、送信バッファ部102は、図16の(3)に示されるように、d−8からd−10に保存されているフレームF(8)及びF(9)を追加で読み出す。送信バッファ部102は、このとき、初回読出しが終了しているフレームに対して、再送フレームであることを示すRT=1のフラグを付与する。
A04の時点で、送信バッファ部102内の各アドレスは、図16の(2)に示されるように設定されている。即ち、SRはd−5に設定され、srdはフレームF(6)0が送信されているためd−7に設定され、SW及びsrcはd−12に設定され、swrはd−13に設定されている。送信バッファ部102は、上述のように、RCV_SEQ(5)、RCV_EOS(9)等を受けると、図16の(3)に示されるように、フレームF(7)の読出し中であるため、srdを(d−7)のまま維持し、読み出しを継続する。送信バッファ部102は、EOSの値をd−7からd−9に更新し、srdがEOS(d−9)よりも大きくなるまで、フレームの読み出しを継続し、読み出されたフレームのRTフラグに1を設定する。即ち、A04時点では、フレームF(8)及びF(9)が追加で再送されることになる。図9によれば、再送されるデータ量が、g6−01からg6−02へ拡張される。
なお、実運用においてフレーム長は可変であり、RDSの値によって、EOSは、必ずしもフレームの先頭アドレスを示さないため、EOSがフレームの途中アドレスである場合、そのフレームまでが再送される。以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、A02時点と同様であり、フレームF(7)1が回線1を介して通信端末10へ送信される。その後、フレームF(8)1及びフレームF(9)1も再送信される。
〈B04〉
B04では、受信側の通信端末20は、誤りのないフレームF(8)0を受信してから、NAKフレームN(5)0を返信するまでの処理を実行する。フレームF(8)0が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B04時点でのフレーム識別部111で保持される各変数については、RCV_EOSのみがB03時点から変更されている。B04時点では、RCV_SEQは8である。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(8)0のフレーム長を取得すると、B02時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B04時点では、RCV_SEQ(値8)、RCV_XID(値0)及びフレームF(8)0がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、B02時点と同様に、図8AのS700;YES、S701;FALSE、S740;FALSE、S750;NO、及び、S751を実行する。なお、B04時点でのTSEQ及びEOSの各値は7及び9である。
続いて、受信処理部203は、B02時点と同様にEOSを生成する(S752)。具体的には、受信処理部203は、図8BのS780;TRUE、S782;NO、S790;FALSE、S792;FALSE、及び、S793を実行する。処理(S793)では、TSEQに、フレームF(8)0のRCV_SEQ(値8)とそのフレーム長LEN(値1)との和が設定され、EOSに、TSEQ(値7)と再送データ量RDS(値2)との和が設定される。結果、更新後のTSEQは9となり、更新後のEOSは9となる。
受信処理部203は、NEXT_SEQ(値5)及びEOS(値9)を含むNAK生成指示をACK/NAK生成部103へ送る(S753)。ここで出力されるNAK生成指示に含まれるNEXT_SEQ(値5)及びEOS(値9)は、B03時点で生成されたNAK生成指示に含まれるものと同じである。よって、ここで生成されたNAK生成指示は、拡張NAKを生成するための指示ではない。以降、受信処理部203は、B02時点と同様の処理(S755;NO、S722)を実行する。
以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、B02時点と同様であり、NAKフレームN(5)0が回線2を介して通信端末10へ送信される。
〈B05〉
B05では、受信側の通信端末20は、誤りのないフレームF(9)0を受信してから、NAKフレームN(5)0を返信するまでの処理を実行する。フレームF(8)0が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B05時点でのフレーム識別部111で保持される各変数については、RCV_SEQのみがB04時点から変更されている。B05時点では、RCV_SEQは9である。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(9)0のフレーム長を取得すると、B04時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B05時点では、RCV_SEQ(値9)、RCV_XID(値0)及びフレームF(9)0がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、B02時点と同様に、図8AのS700;YES、S701;FALSE、S740;FALSE、S750;NO、及び、S751を実行する。なお、B05時点でのTSEQ及びEOSの各値は9である。
続いて、受信処理部203は、次のようにEOSを生成する(S752)。
具体的には、受信処理部203は、図8BのS780;TRUE、及び、S782;NOを実行した後、TSEQとRCV_SEQとを比較する(S790)。B05時点では、TSEQ(値9)とRCV_SEQ(値9)とが一致する(S790;TRUE)。これは、受信フレームF(9)0が、連続して受信されたフレームであることを意味する。フレームF(8)0及びF(9)0は連続して受信されている。受信処理部203は、次に、TSEQに、受信フレームのシーケンス番号RCV_SEQとフレーム長LENとの和を代入することでTSEQを更新する。なお、EOSは、フレーム誤り又はフレームロスが発生していないので、値を維持する。更新後のTSEQ及びEOSは、10(=RCV_SEQ(9)+LEN(1))及び9となる。
受信処理部203は、B04時点と同じNAK生成指示をACK/NAK生成部103へ送る(S753)。即ち、ここで生成されたNAK生成指示についても拡張NAKを生成するための指示ではない。以降、受信処理部203は、B04時点と同様の処理(S755;NO、S722)を実行する。更に、以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、B04時点と同様であり、NAKフレームN(5)0が回線2を介して通信端末10へ送信される。
〈B06〉
B06では、受信側の通信端末20は、送信側の通信端末10から、フレーム誤りの発生したフレームF(11)0を受信してから、NAKフレームN(5)0を送信するまでの処理を実行する。なお、フレームF(11)0が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B06時点でのフレーム識別部111で保持される各変数については、RCV_EOSのみがB05時点から変更されている。B06時点では、RCV_SEQは11である。なお、図9に示されるように、フレームF(9)0の次に送信されたフレームF(10)0はフレームロスにより受信側の通信端末20で受信されていない。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(11)0のフレーム長を取得すると、B05時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B06時点では、RCV_SEQ(値11)、RCV_XID(値0)及びフレームF(11)0がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、B05時点と同様に、図8AのS700;YES、S701;FALSE、S740;FALSE、S750;NO、及び、S751を実行する。なお、B06時点でのTSEQ及びEOSの各値は10及び9である。
続いて、受信処理部203は次のようにEOSを生成する(S752)。
具体的には、受信処理部203は、図8BのS780;TRUE、及び、S782;YESを実行した後、EOSとRCV_SEQとを比較する(S783)。B06時点では、RCV_SEQ(値11)がEOS(値9)より大きいため(S783;TRUE)、受信処理部203は、次に、EOSとNEXT_SEQとを比較する(S784)。B06時点では、EOS(値9)はNEXT_SEQ(値5)よりも大きいため(S784;FALSE)、受信処理部203は、フレーム障害の間隔が再送データ量RDSより大きいと判断し、無駄な再送を抑えるためEOSの更新及びTSEQの更新を行わない(S786)。これにより、TSEQ及びEOSの各値は維持される(TSEQ=10、EOS=9)。
受信処理部203は、B05時点と同じNAK生成指示をACK/NAK生成部103へ送る(S753)。即ち、ここで生成されたNAK生成指示についても拡張NAKを生成するための指示ではない。以降、受信処理部203は、処理(S755;YES、S746)を実行する。更に、以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、B05時点と同様であり、NAKフレームN(5)0が回線2を介して通信端末10へ送信される。
〈A05〉
A05では、送信側の通信端末10は、再送フレームF(9)1を送信してから非再送フレームF(12)1を送信するまでの処理を実行する。A05時点での通信端末10の処理は、EOS超過時の処理に相当する。図17は、A05時点での送信側の通信端末10で処理されるフレーム及びそのフレームを格納する送信バッファ部102を概念的に示す図である。
《送信バッファ制御》
対応すべきNAKフレームを受信することなく、読み出しアドレスsrdが通信端末20からNAKフレームによって通知されたEOSを超えた場合、送信バッファ部102は、受信側の通信端末20から要求されたトータル再送データ量を満足したと判断し、再送フレームの読み出しを終了し、再送前のフレームの続きからフレームの送信を再開する。
A05時点での送信バッファ部102の各アドレス変数は、図17の(1)に示されるように設定されている。即ち、SRはd−5に設定され、srdはフレームF(9)1が送信されているためd−10に設定され、SWはフレームF(15)までの書き込みが終了していることから値d−16に設定され、srcは再送前に読み出したフレームのアドレスd−12に設定され、swrはd−17に設定される。この状態からフレームF(9)が読み出されると、srdがd−10に変更され、EOSがd−9に変更される。これにより、srdがEOSを超えるため、送信バッファ部102は、図17の(2)に示されるように、srdにsrcを代入し、フレームF(12)からの読み出しを再開する。つまり、フレームF(10)及びフレームF(11)は、読み飛ばされることとなる。このとき読み出されたフレームF(12)は、再送フレームでないため、RTフラグが0に設定される。
図17の(3)は、送信バッファ部102から読み出されたフレームF(12)を示す。このフレームF(12)は、ACK/NAK生成部103へ送られる。以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理がA02時点と同様に実行される。結果、フレームF(12)1が回線1を介して通信端末20へ送信される。
〈B07〉(再送フレームの受信)
B07では、受信側の通信端末20は、送信側の通信端末10から、フレームF(5)1を受信してから、ACKフレームA(7)1を送信するまでの処理を実行する。なお、フレームF(5)1が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図18は、B07時点での受信側の通信端末20で処理されるフレーム及びそのフレームを格納する受信バッファ部113並びに更新前後のNAKテーブル部204を概念的に示す図である。なお、図13Bに示されるように、B07時点でのフレーム識別部111で保持される各変数については、RCV_SEQ及びRCV_XIDのみがB06時点から変更されている。B07時点では、RCV_SEQは5であり、RCV_XIDは1である。
フレームF(5)1のフラグには、SN(値1)、ACK(値0)、NAK(値0)及びRT(値1)が設定されている。ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(5)1のフレーム長を取得すると、B05時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B07時点では、RCV_SEQ(値5)、RCV_XID(値1)及びフレームF(5)1がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、RCV_SEQの値とNEXT_SEQの値とが一致するか否か判定する(S701)。B07時点では、RCV_SEQ(値5)とNEXT_SEQ(値5)とが一致するため(S701;TRUE)、受信処理部203は、現在のトランザクションを示すRCV_XID(値1)をREG_RXIDに設定することにより、REG_RXIDを更新する(S702)。これにより、受信側の通信端末20では、そのフレームF(5)1が既に受信されたフレームとして認識される。
その後、受信処理部203は、フレームF(5)1に誤りがないため(S703;NO)、NAKテーブル部204にNNAK_SEQ(1)が登録されているか否かをチェックする(S710)。B07時点では、図13Bに示されるように、NAKテーブル部204にNNAK_SEQ(1)の登録があるため(S710;YES)、受信処理部203は、既に受信されているフレームと現在受信されたフレームとの間に未受信のフレームの存在を確認するため、以下の条件3を判定する(S711)。
(条件3)NHED_SEQ(1)==NEXT_SEQ+LEN
B07時点では、NHED_SEQ(1)(値6)、NEXT_SEQ(値5)、LEN(値1)であることから条件3は成立する(S711;TRUE)。この場合、受信処理部203は、既に受信されているフレームと現在受信されたフレームとの間に未受信のフレームがないと判定し、現状のNEXT_SEQにNAKテーブル部204のNNAK_SEQ(1)を代入することによりNEXT_SEQを更新する(S730)。結果、NEXT_SEQは7に更新される。
続いて、受信処理部203は、NAKテーブル部204から、NHED_SEQ(1)及びNNAK_SEQ(1)を削除する(S731)。この処理では、NHED_SEQ(p)にNHED_SEQ(p+1)が設定されかつNNAC_SEQ(p)にNNAC_SEQ(p+1)が設定される。更新後のNAKテーブル部204は、図18の(2)で示される。受信処理部203は、NAKテーブル部204にNNAK_SEQ(1)が登録されておりかつ当該受信フレームが再送フレームか否か確認する(S732)。
受信処理部203は、NAKテーブル部204にNNAK_SEQ(1)が登録されておりかつ当該受信フレームF(5)1が再送フレームであるため(S732;FALSE)、RCV_XID及び更新されたNEXT_SEQを含むACK生成指示を生成、ACK/NAK生成部103へ送る(S733)。更に、受信処理部203は、当該フレームF(5)1とNEXT_SEQとを受信バッファ部113へ送る(S722)。
《受信バッファ》
図18の(3)に示されるフレームF(5)及びNEXT_SEQ(値7)を受けると、受信バッファ部113は、フレームF(5)内のRCV_SEQ(値5)に応じて、当該フレームF(5)を格納する。図18の(4)には、フレームF(5)が格納される前の受信バッファ部113が示されている。RRは読み出しが完了していないフレームの先頭アドレス、rrdは受信バッファ部113から現時点で次に読み出すべき箇所を示すアドレス、RWは次に受信バッファ部113へ保存されるフレームの先頭アドレス、rwrは受信バッファ部113に現時点で次に書き込むべき箇所を示すアドレスを示す。フレームF(5)を格納する前では、RR、rrd及びRWは同じ値(d−5)に設定され、rwrはd−10に設定されている。
ここで、フレームF(5)のRCV_SEQの値は5であるため、受信バッファ部113のアドレスrwrがd−5に設定され、d−5から当該フレームF(5)が格納される。この格納終了後、RWはNEXT_SEQ(値7)に更新され、RWは(d−7)に更新される。これにより、フレームF(5)格納後においては、図18の(5)に示されるように、RR及びrrdが同じ値(d−5)に設定され、RWがd−7に設定され、rwrがd−6に設定される。受信バッファ部113からのフレーム読み出しは、RRがRWより小さい場合に開始される。RWはACK/NAKを返信する際に更新され、その値はNEXT_SEQとなる。rrdとRRは受信バッファ部113からフレームを読み出す毎に更新される。
《読み出し》
更新されたアドレスRWとアドレスRRが内部インタフェース部100に与えられると、内部インタフェース部100は、上記(条件2)を判定する。B07時点では、RRが5に設定され、RWが7に設定されている。また、上記(条件2)を満たすため、受信バッファ部113内に読出し可能なフレームが有ると判断し、受信バッファ部113へ読出し指示を出力する。この読み出し指示によって受信バッファ部113から読み出されたフレームF(5)及びF(6)が他ブロック11へ送られる。
《送信》
ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、B01時点と同様であり、ACKフレームA(7)1が回線2を介して送信側の通信端末10へ送られる。
〈A06〉
A06では、送信側の通信端末10は、受信側の通信端末20から、ACKフレームA(7)1を受信してから非再送フレームF(14)1を送信するまでの処理を実行する。ACKフレームA(7)1が送信側の通信端末10の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Aに示されるように、A06時点でのフレーム識別部111で保持される各変数は次のように設定されている。即ち、REG_SXIDが1に設定され、RCV_SEQが7に設定され、RCV_XIDが1に設定され、LENが1に設定され、その他の値はNULLに設定されている。
ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びACKフレームA(7)1のフレーム長を取得すると、A02時点と同じ処理を実行する(図6のS50;YES、S52;ACK/NAK、S54)。A06時点では、RCV_SEQ(値7)及びRCV_XID(値1)がヘッダ処理部201から再送/更新処理部202へ送られる。
再送/更新処理部202は、ヘッダ処理部201からRCV_SEQ(値7)及びRCV_XID(値1)を受けると(図7のS60;YES)、上記条件4を判定する(S61)。A06時点では、REG_SXIDが1でありかつRCV_XIDが1であるから、上記条件4が成立する(S61;TRUE)。これにより、再送/更新処理部202は、そのACKフレームA(7)1が未対応であると判定する。また、当該フレームは、ACKフレームである。よって、受信処理部203は、受信されたACKフレームに含まれるRCV_SEQ(値7)及びRCV_XID(値1)を含む更新指示を送信バッファ制御部112及びID付与部114へ送る(S63)。
《送信バッファ制御》
図19は、A06時点での送信側の通信端末10で処理されるフレームを概念的に示す図である。送信バッファ制御部112は、図19の(1)で示される更新指示を受けると、この更新指示及びRCV_SEQ(値7)を送信バッファ部102へ送る。これらを受けた送信バッファ部102は、アドレスsrdと受信されたRCV_SEQとを比較し、値の大きい方をsrdに設定し、フレームの読み出しを開始する。このとき、アドレスsrcが受信されたRCV_SEQより小さい場合には、同様にsrcの値も更新される。A06時点での更新前では、送信バッファ部102内の各アドレスは、図19の(2)に示されるように、SRがd−5に設定され、srd及びsrcがd−14に設定され、SWがd−17に設定され、swrがd−18に設定されている。
送信バッファ部102は、更新指示及びRCV_SEQ(値7)を受けると、図19の(3)に示されるように、SRの値を受信されたRCV_SEQ(値7)に更新する。これにより、SRはd−7に設定されるため、送信バッファ部102は、それより前のフレームF(5)及びフレームF(6)を削除する。A06時点において、srd(値d−14)は、RCV_SEQ(値7)より大きいため、アドレスsrdのフレームF(14)から継続してフレームが読み出される。
以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、A01時点と同様であり、フレームF(14)1が回線1を介して受信側の通信端末20へ送信される。
〈B08〉
B08では、受信側の通信端末20は、送信側の通信端末10から、フレームF(6)1を受信してから、ACKフレームA(7)1を送信するまでの処理を実行する。なお、フレームF(6)1が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B08時点でのフレーム識別部111で保持される各変数については、NEXT_SEQ、NHED_SEQ(1)、NNAK_SEQ(1)、REG_RXID、RCV_SEQがB07時点から変更されている。B08時点では、NEXT_SEQは7であり、NHED_SEQ(1)は8であり、NNAK_SEQ(1)は10であり、REG_RXIDは1であり、RCV_SEQは6である。
フレームF(6)1のフラグには、SN(値1)、ACK(値0)、NAK(値0)及びRT(値1)が設定されている。ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(6)1のフレーム長を取得すると、B05時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B08時点では、RCV_SEQ(値6)、RCV_XID(値1)及びフレームF(6)1がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、RCV_SEQ(値6)とNEXT_SEQ(値7)とが一致しないため(S701;FALSE)、上記(条件1)を満たすか否かをチェックする(S740)。B08時点では、RCV_SEQ(値6)、NEXT_SEQ(値7)、RCV_XID(値1)、REG_RXID(値1)であるため、条件1は成立する(S740;TRUE)。続いて、受信処理部203は、当該フレームF(6)1が再送フレームであるか否かを確認する(S741)。フレームF(6)1は再送フレーム(RT=1)であるため(S741;FALSE)、受信処理部203は、NEXT_SEQ(値7)、RCV_XID(値1)を含むACK生成指示を生成しACK/NAK生成部103へ送る(S745)。なお、ここで生成されるACK生成指示に含まれるNEXT_SEQ及びRCV_XIDは、B07時点で生成されたACK生成指示に含まれる値と同じである。その後、受信処理部203は、その受信フレームを廃棄する(S746)。
以降、ACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、B01時点と同様であり、ACKフレームA(7)1が回線2を介して送信側の通信端末10へ送信される。
〈B09〉
B09では、受信側の通信端末20は、非再送フレームF(12)1を受信してから、NAKフレームN(10)1を返信するまでの処理を実行する。B09時点における通信端末20の処理は、再送フレームが受信された後、非再送フレームが受信された際の処理に相当する。フレームF(12)1が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B09時点でのフレーム識別部111で保持される各変数については、NEXT_SEQ、NHED_SEQ(1)、NNAK_SEQ(1)、RCV_SEQがB08時点から変更されている。B09時点では、NEXT_SEQは10であり、NHED_SEQ(1)は12であり、NNAK_SEQ(1)は13であり、RCV_SEQは12である。
フレームF(12)1のフラグには、SN(値1)、ACK(値0)、NAK(値0)及びRT(値0)が設定されている。ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(12)1のフレーム長を取得すると、B05時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B09時点では、RCV_SEQ(値12)、RCV_XID(値1)及びフレームF(12)1がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、RCV_SEQ(値12)とNEXT_SEQ(値10)とが一致しないため(S701;FALSE)、上記(条件1)を満たすか否かをチェックする(S740)。B09時点では、RCV_SEQ(値12)、NEXT_SEQ(値10)、RCV_XID(値1)、REG_RXID(値1)であるため、条件1は成立しない(S740;FALSE)。そこで、受信処理部203は、フレームF(12)1がNAKテーブル部204に登録済みであるか否かをチェックする(S750)。このとき、フレームF(12)1はNAKテーブル部204には登録されていない(S750;NO)。そこで、受信処理部203は、そのフレームF(12)1をNAKテーブル部204へ登録する(S751)。B09時点では、RCV_SEQ(値12)及びLEN(値1)であるため、図10に示されるように、NHED_SEQ(1)(H(1))にはd−12(=RCV_SEQ)が設定され、NNAK_SEQ(1)(N(1))にはd−13(=RCV_SEQ+LEN)が設定される。
続いて、受信処理部203は、次のようにEOSを生成する(S752)。
具体的には、受信処理部203は、図8BのS780;TRUE、及び、S782;NOを実行した後、TSEQとRCV_SEQとを比較する(S790)。B09時点では、TSEQ(値10)とRCV_SEQ(値12)とは一致しない(S790;FALSE)ため、受信処理部203は、RCV_SEQとEOSとを比較する(S792)。B09時点では、RCV_SEQ(値12)がEOS(値9)より大きいため(S792;TRUE)、受信処理部203は、更に、NEXT_SEQとEOSとを比較する(S794)。NEXT_SEQ(値10)はEOS(値9)より大きいため(S794;TRUE)、受信処理部203は、再送信シーケンスが終了し、非再送フレームを受信している状態にあると判定する。この場合、受信処理部203は、次に受信予定のフレームのシーケンス番号TSEQに、RCV_SEQ(値12)とそのフレームのLEN(値1)との和を代入することによりTSEQを更新する(S796)。
続いて、受信処理部203は、NAKテーブル部204にNNAK_SEQ(1)が登録されているか否かをチェックする(S797)。このとき、NAKテーブル部204には、図10に示される以下のようなレコードが登録されている。
p=1;NHED_SEQ(1)=12;NNAK_SEQ(1)=13
受信処理部203は、NNAK_SEQ(1)が登録されているため(S797;YES)、NHED_SEQ(1)の値12をEOSへ代入することにより、EOSを更新する(S781)。更新後のTSEQ及びEOSは、13(=RCV_SEQ(値12)+LEN(値1))、12(=NHED_SEQ(1))となる。
なお、上述の例では、pが1であるNHED_SEQ(1)の値をEOSに代入しているが、NAKテーブル部204に複数レコードが登録されている場合には、最も大きいpのNHED_SEQ(p)の値をEOSに代入してもよい。また、NHED_SEQ(p)−1の値をEOSに代入することにより余分な再送を抑えるようにしてもよい。上述の例の場合、値11(=NHED_SEQ(1)−1)がEOSに代入されるようにしてもよい。
EOSの生成後、受信処理部203は、NEXT_SEQ(値10)及びEOS(値12)を含むNAK生成指示をACK/NAK生成部103へ送る(S753)。以降、受信処理部203は、B02時点と同様に処理を行う。結果、受信バッファ部113が、フレームF(12)内のRCV_SEQに基づいてそのフレームF(12)を保存する。また、それ以降のACK/NAK生成部103、ID付与部114、ECC付与部104、EDC付与部105及び送信部106の各処理は、B02時点と同様であり、NAKフレームN(10)1が回線2を介して送信側の通信端末10へ送信される。
〈B10〉
B10では、受信側の通信端末20は、非再送フレームF(19)2を受信してから、ACKフレームA(20)2を返信するまでの処理を実行する。B10時点での通信端末20の処理は、NAKテーブル部204に登録がない状態でNEXT_SEQにより示されるフレームが受信された際の処理に相当する。フレームF(19)2が受信側の通信端末20の受信部108で受信されてから、フレーム識別部111に送られるまでの処理は、上述のB01時点における受信側の通信端末20での処理(《受信》及び《誤り訂正及び検出》)と同様であるため、ここでは説明を省略する。
《フレーム識別》
図13Bに示されるように、B10時点でのフレーム識別部111で保持される各変数については、NEXT_SEQが19であり、REG_RXIDが2であり、RCV_SEQが19であり、RCV_XIDが2であり、LENが1であり、その他はNULLである。
フレームF(19)2のフラグには、SN(値1)、ACK(値0)、NAK(値0)及びRT(値0)が設定されている。ヘッダ処理部201は、フレーム誤り検出部110から、ヘッダ誤り訂正の結果、フレーム誤り検出の結果及びフレームF(19)2のフレーム長を取得すると、B09時点と同じ処理を実行する(図6のS50;YES、S52;SN、S53)。B10時点では、RCV_SEQ(値19)、RCV_XID(値2)及びフレームF(19)2がヘッダ処理部201から受信処理部203へ送られる。
これらデータを取得した受信処理部203は、B07時点と同様に、図8Aの各処理(S700;YES、S701;TRUE、S702、S703;NO)を行う。なお、B10時点では、処理S702において、RCV_XID(値2)がREG_RXIDに設定される。受信処理部203は、NAKテーブル部204にNNAK_SEQ(1)が登録されているか否かをチェックする(S710)。B10時点では、図13Bに示されるように、NAKテーブル部204にNNAK_SEQ(1)の登録がないため(S710;NO)、受信処理部203は、現状のNEXT_SEQ(値19)に当該フレーム長LEN(値1)を加算することによりNEXT_SEQを更新する(S720)。
そして、受信処理部203は、RCV_XID(値2)及び更新されたNEXT_SEQ(値20)を含むACK生成指示をACK/NAK生成部103へ送り(S721)、当該フレームF(19)2を受信バッファ部113へ送る(S722)。以降、《受信バッファ》、《読み出し》、《送信》の各処理は、B07時点と同様であるため、ここでは説明を省略する。
〔第1実施形態の作用及び効果〕
上述のように、第1実施形態では、受信側の通信端末20により、再送が要求されるフレーム群の中の最終フレームを特定するための最終シーケンス番号EOSが決定され、そのEOSと当該フレーム群の中の先頭フレームを特定するためのシーケンス番号とを含むNAKフレームが送信側の通信端末10へ送信される。送信側の通信端末10では、そのNAKフレームを受信すると、そのNAKフレームで要求される再送シーケンスが開始される。即ち、そのNAKフレームに含まれるシーケンス番号(RCV_SEQ)で特定される先頭フレームから、そのNAKフレームに含まれる最終シーケンス番号(RCV_EOS)で特定される最終フレームまでが送信バッファ部102から順次読み出され、読み出された各再送フレームが受信側の通信端末10へ連続的に送信される。
即ち、第1実施形態では、フレームロスやフレーム誤りなどのようなフレーム障害が発生した場合に、当該フレーム障害に対応するフレームから一定量(再送データ量RDS)のフレームが連続的に再送される。これにより、受信側の通信端末20は、前回、フレーム障害により正常に受信することができなかったフレームを正常に受信することができ、フレーム障害から回復することができる。また、第1実施形態によれば、フレーム障害が発生したフレームからの複数のフレームがまとめて再送されるため、無駄な再送を抑制し、かつ、制御信号量を削減することができ、ひいては、通信リソースの使用効率(利用可能な通信帯域)を向上させることができる。具体的には、フレーム障害の発生したフレームのみを再送するSR方式より、制御信号量を低減することができ、フレーム障害が発生したフレーム以降の全てを再送するGBN方式より、無駄な再送を抑えることができる。
更に、第1実施形態では、受信側の通信端末20において、障害が発生した先頭フレーム以降に送信側の通信端末10から連続して送信されるフレーム群の中の、当該先頭フレームから再送データ量RDS以内に送信されるフレームに、フレーム障害の発生の有無が判定され、そのフレーム障害が発生した場合には、最終シーケンス番号EOSが更新される。そして、更新された最終シーケンス番号EOSを含むNAKフレーム(拡張NAKフレーム)が送信側の通信端末10で受信され、再送シーケンスの最終フレームがその更新された最終シーケンス番号EOSで特定されるフレームに変更される。逆に、再送シーケンス終了後にフレーム障害が発生した場合には、そのフレーム障害に基づく再送シーケンスでは、元の再送データ量RDSが利用される。
このように、第1実施形態では、通常時には、再送データ量RDSに対応する数のフレームが連続再送されるが、障害が発生した先頭フレーム以降に送信側の通信端末10から連続して送信されるフレーム群の中の、当該先頭フレームから再送データ量RDS以内に送信されるフレームに、障害が発生した場合には、拡張NAKフレームを用いることにより、連続再送されるフレーム数が増やされる。従って、第1実施形態によれば、バースト誤りの発生状況に応じて、連続再送されるデータ量を柔軟に変更できるため、通信リソースの使用効率(利用可能な通信帯域)を向上させることができる。
更に、第1実施形態では、送信側の通信端末10において、既に初回読み出しが終了しているフレームの次に初回読み出しすべきフレームが格納されているアドレス(上記変数src)と、現在読み出すべきフレームが格納されているアドレス(上記変数srd)とが別々に保持される(送信バッファ部102)。そして、NAKフレームに含まれていた最終シーケンス番号EOSで特定される最終フレームの再送が完了する、即ち、再送シーケンスが終了すると、srdにsrcが代入されることにより、前回初回読み出しされたフレームの次のフレームから通常送信が再開される。
これにより、第1実施形態によれば、再送シーケンスからの復帰において、無駄なフレームが送信されることを防ぐことができる。これにより、通信リソースの使用効率を向上させることができる。
更に、第1実施形態では、送信側の通信端末10において、再送シーケンスを開始する際にのみ、フレームに含まれるトランザクション識別子が更新され、このトランザクション識別子により、再送シーケンスを開始するか否かが判定される。これにより、送信側の通信端末10において、再送シーケンス中であるか否かが適切に判定され、再送シーケンスが無駄に継続するような事態を防ぐことができる。
〔第1実施形態の補足〕
上述の第1実施形態では、通信端末10から通信端末20へのフレーム転送を例としたが、逆に、通信端末20から通信端末10へのフレーム転送でも同様の動作となる。また、ACK/NAK生成部103においてACK/NAK生成要求と読み出しフレームとが競合した場合、ACK/NAK生成部103が、ACK/NAK用のシーケンス番号(AN_SEQ)領域とACK/NAK用のトランザクション識別子(AN_XID)領域とを再送ヘッダに追加することにより、ACK/NAK情報を読み出しフレームに相乗り(Piggyback)させるようにしてもよい。この場合、双方向通信においてもACK/NAKフレームのオーバヘッドを抑え、スループットを向上させることができる。
上述の第1実施形態では、再送されるべきフレーム群の最終フレームを特定するための情報(最終フレーム情報)として最終シーケンス番号EOSがNAKフレームに設定されたが、このEOSの代わりに再送データ量RDSがNAKフレームに設定されるようにしてもよい。この場合、送信側の通信端末10が、NAKフレームに含まれるRDSに基づいて、最終フレームを特定するようにすればよい。この特定は、NAKフレームに設定されるシーケンス番号(RCV_SEQ)にRDSを加算して得られる値を用いることにより実現できる。
また、上述の第1実施形態における受信処理部203の処理を以下のように変更するようにしてもよい。図8Aの処理(S714)及び(S706)、図8Bの処理(S781)では、処理を容易にするために、NAKテーブル部204に登録されているNHED_SEQ(最大p)の値をEOSに設定しているが、以下の条件5を満たすpに関するNHED_SEQ(p)の値をEOSに設定するようにしてもよい。
(条件5)RDS<(NNAK_SEQ(p)−NHED_SEQ(p))
上記条件5が成立する場合、RDSを超える連続受信済みフレームを再送信することが無くなるため、再送効率を向上させることができる。具体的に、再送データ量RDSが2であり、NAKテーブル部204に以下の登録がある場合を例に挙げる。
p=1、NHED_SEQ(1)=50、NNAK_SEQ(1)=52
p=2、NHED_SEQ(2)=55、NNAK_SEQ(2)=58
p=3、NHED_SEQ(3)=59、NNAK_SEQ(3)=61
上述の第1実施形態では、NHED_SEQ(3)の値59がEOSに設定されるが、本変形例によれば、pが2の場合に条件5が成立するため、NHED_SEQ(2)の値55がEOSに設定される。この場合、シーケンス番号55から58で示されるフレームは再送されない。
[第2実施形態]
図20は、第2実施形態における通信端末の構成例を概念的に示す図である。第2実施形態における通信端末は、図20に示されるように、第1実施形態における再送データ量設定部115に代えて、バースト誤り量検出部116を有する。バースト誤り量検出部116は本件発明の再送データ量取得部に相当する。他の処理部については基本的には第1実施形態と同様である。以下、第2実施形態における通信端末について第1実施形態と異なる点を中心に説明する。
バースト誤り量検出部116は、フレーム誤り検出部110から提供されるフレーム誤り検出結果及びフレーム長LENに基づいて、バースト誤り量を算出する。バースト誤り量とは、所定のビットエラーレート(BER:Bit Error Rate)以上で誤りが発生している箇所のデータ量を意味する。よって、バースト誤り量検出部116は、所定のビットエラーレート(BER:Bit Error Rate)以上で発生しているフレーム障害に関し、前回のフレーム障害から今回のフレーム障害までの間のデータ量をバースト誤り量としてカウントする。
上記所定閾値Wは、バースト誤り量検出部116において、所定のBER以上の誤りが発生している箇所のデータ量を検出するために利用される。例えば、所定のBERが10−6の場合、106ビットの送信に対して1ビットの誤りが発生することを示すため、当該所定閾値Wには、125000バイト(=106/8)が設定される。
バースト誤り量検出部116は、検出されたバースト誤り量の統計情報(ヒストグラム)を生成することにより、その統計情報に応じて再送データ量RDSを決定し、決定された再送データ量RDSをフレーム識別部111へ送る。バースト誤り量の統計情報は、検出されたバースト誤り量の統計データ(例えば、ヒストグラム)である。
〔動作例〕
以下、第2実施形態における通信端末の動作例として、バースト誤り量検出部116の具体的な動作例を図21、図22A及び図22Bを用いて説明する。図21は、第2実施形態におけるバースト誤り量検出部116の動作例を示すフローチャートである。図22Aは、バースト誤り量検出部116内の変数の状態を示す図である。図22Bは、バースト誤り量の統計情報の例を示す図である。
ここでの例では、図21、図22A及びBに示されるように、バースト誤り量検出部116は、バースト誤り量を検出するために、以下のような変数を用いると仮定する。
・RCV_SEQ(j):受信フレームに含まれるシーケンス番号を示す。
・LEN(j):受信フレームのフレーム長を示す。なお、フレームデータ部に誤りがある場合、LEN(j)には0が設定される。
・ERR(j):受信フレームの誤りの有無を示す。値1の場合誤りが有ることを示す。
・EP(j):フレーム障害の発生したフレームのシーケンス番号が保持される。
・EP2(j):前にフレーム障害の発生したフレームのシーケンス番号が保持される。
・ST:バースト誤り量の監視が開始されているか否かを示すフラグである。ここでは、STが1に設定されていることが、バースト誤り量の監視が開始されていることを意味する。
・BE(j):バースト誤り量を示す。
・RDS(j):フレーム識別部111へ送られる再送データ量RDSを示す。
・NEXT_SEQ(j):次に受信すべきフレームのシーケンス番号を示す。
ここで、jは、1以上の正の整数で、受信されたフレームの順番(シーケンス番号)を示す。
バースト誤り量検出部116は、処理を開始するにあたり、フレーム誤り検出部110から、受信フレームF(j)に関し、ヘッダ誤り訂正の結果、フレーム誤り検出の結果ERR(j)、シーケンス番号RCV_SEQ(j)及びフレーム長LEN(j)を取得する。バースト誤り量検出部116は、ヘッダ誤り訂正の結果がヘッダ誤りの訂正の完了(ヘッダ誤り無しも含む)を示す場合には(S900;YES)、更に、フレーム誤り検出の結果及びシーケンス番号に基づいて、フレームの誤り又はフレームロス(フレーム障害)が生じているか否かを判定する(S901)。
この判定は、例えば、以下の条件に基づいて実施される。
(NEXT_SEQ(j)≠RCV_SEQ(j))or(ERR(j)=1)
この条件が成立した場合、フレーム障害が生じている。具体的には、前者が成立する場合、フレームロスが生じており、後者が成立する場合、フレーム誤りが生じている。
バースト誤り量検出部116は、フレーム障害が発生している場合(S901;YES)、監視フラグSTを確認する(S902)。バースト誤り量の監視が開始されていない場合(S902;NO)、バースト誤り量検出部116は、EP、EP2、ST及びBEの各変数を初期化する(S903)。具体的には、EP(j)及びEP2(j)に、NEXT_SEQを設定し、STに1を設定し(監視開始の設定)、BE(j)に0を設定する(バースト誤り量の初期化)。
続いて、バースト誤り量検出部116は、次に受信すべきフレームのシーケンス番号NEXT_SEQを更新する(S909)。ここで、NEXT_SEQには、フレームF(j)のシーケンス番号RCV_SEQ(j)にそのフレーム長LEN(j)を加算した値が設定される。
以上の処理は、バースト誤り量の監視を開始する際の処理に相当する。このバースト誤り量の監視を開始する際の処理について、図22Aの(1)及び(2)で示される具体例に基づいてより具体的に説明する。図22Aの(1)で示されるように、フレームF(j−1)がロスし、フレームF(j)が受信された場合、NEXT_SEQにd−200が設定されており、RCV_SEQ(j)がd−201であり、ERR(j)が0であるため、上記条件のうち、「NEXT_SEQ(j)≠RCV_SEQ(j)」が成立し、結果、フレームロスが発生していると判定される(S901;YES)。また、処理(903)では、EP(j)には、RCV_SEQ(j)の値d−201にLEN(j)の値1が加算された値d−202が設定され、EP2(j)には、NEXT_SEQの値であるd−200が設定される。処理(S909)では、NEXT_SEQには、RCV_SEQ(j)の値d−201にLEN(j)の値1が加算された値d−202が設定される。
一方、バースト誤り量検出部116は、バースト誤り量の監視が既に開始されている場合(S902;YES)、前回フレーム障害の発生したフレームの先頭から今回フレーム障害の発生したフレームの先頭までのデータ量を算出し、その算出されたデータ量をバースト誤り量BEへ加算する(S904)。更に、バースト誤り量検出部116は、変数EP及びEP2を更新した後(S905)、上述のようにNEXT_SEQを更新する(S909)。
以上の処理は、バースト誤り量BEをカウントする処理に相当する。この累積処理について、図22Aの(3)で示される具体例に基づいてより具体的に説明する。図22Aの(3)では、図22Aの(1)及び(2)に続いて、フレームF(j+1)がロスし、フレームF(j+2)が受信された場合が例示される。この例によれば、処理(S904)において、BE(j+2)に、BE(j)に、EP(j)からEP2(j)を減算した値を加算して得られる値((d−202)−(d−200))が設定されることにより、バースト誤り量がカウントされる。
処理(S905)では、EP(j+2)に、フレームF(j+2)のRCV_SEQ(j+2)の値d−203にLEN(j+2)の値1を加算した値d−204が設定され、EP2(j+2)に、EP(j)の値d−202が設定される。処理(909)では、NEXT_SEQ(j+2)に、受信フレームF(j+2)のRCV_SEQ(j+2)とそのフレーム長LEN(j+2)との和が代入される。
フレーム障害が発生していない場合(S901;NO)、バースト誤り量検出部116は、前回フレーム障害が発生してからのデータ間隔が所定値Wよりも長いか否かを判定する(S906)。前回フレーム障害が発生してからのデータ間隔が所定値W以下である場合には(S906;FALSE)、バースト誤り量検出部116は、バースト誤り量の監視(カウント)を継続し、NEXT_SEQを更新する(S909)。
一方、前回フレーム障害が発生してからのデータ間隔が所定値Wより長い場合には(S906;TRUE)、バースト誤り量検出部116は、バースト誤り量の統計処理を行い、この統計処理で得られたバースト誤り量の統計情報(ヒストグラム)から再送データ量RDSを決定し、その再送データ量RDSをフレーム識別部111へ送る(S907)。更に、バースト誤り量検出部116は、監視フラグSTを監視されていない状態(0)に設定する(S907)。これにより、バースト誤り量のカウントは終了する。
以上の処理は、バースト誤り量の監視を終了させる際の処理に相当する。この終了処理について、図22Aの(4)で示される具体例に基づいてより具体的に説明する。図22Aの(4)では、図22Aの(1)、(2)及び(3)に続いて、フレームF(j+2)及びフレームF(j+3)が順次正常に受信された後、フレームF(j+4)が正常に受信された場合が例示される。この例によれば、処理(S901)において、フレーム障害が発生していないと判定される(S901;NO)。
そして、図22Aの(4)の例によれば、処理(S906)において、フレームF(j+1)の先頭から今回受信されたフレームF(j+4)の先頭までのデータ量と所定値Wとが比較される。当該データ量が所定値Wよりも大きい場合には(S906;TRUE)、バースト誤り量BEの統計処理が行われ、バースト誤り量の統計情報が生成される。図22Bには、バースト誤り量の統計情報(ヒストグラム)の例が示される。図22Bの例では、各バースト誤り量の発生頻度が統計的に取得されている。例えば、バースト誤り量検出部116は、そのバースト誤り量の統計情報から、最頻値d−300を再送データ量RDSに決定する(S907)。なお、再送データ量RDSの値は、最頻値d−300でなくとも、中央値d−301、平均値d−302、又は最大値d−303のとされてもよい。
〔第2実施形態における作用及び効果〕
第1実施形態における作用及び効果を十分に得るためには、再送データ量RDSをどのような値に設定するかが重要となる。再送データ量RDSが小さすぎると、従来のSR方式と同じような動作となり、逆に再送データ量RDSが大きすぎると、従来のGBN方式と同じような動作となり、第1実施形態における作用及び効果を十分に得ることができない場合がある。
そこで、第2実施形態では、バースト誤り量検出部116により、バースト誤り量として、所定の誤り率以上で誤りが発生している箇所のデータ量がカウントされ、このバースト誤り量の統計情報から再送データ量RDSが決定される。これにより、第2実施形態によれば、バースト誤り量から最適な再送データ量RDSを決定することができる。これにより、例えば、再送が頻繁に繰り返されるような事態を防ぐことができる。従って、第2実施形態によれば、通信リソースの使用効率を一層向上させることができる。
なお、上述の説明で用いた複数のフローチャートでは、複数のステップ(処理)が順番に記載されているが、本実施形態で実行される処理ステップの実行順序は、その記載の順番に制限されない。本実施形態では、図示される処理ステップの順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態及び各変形例は、内容が相反しない範囲で組み合わせることができる。
上記の各実施形態及び各変形例の一部又は全部は、以下の付記のようにも特定され得る。但し、各実施形態及び各変形例が以下の記載に限定されるものではない。
(付記1)連続再送が要求されるデータ量を示す再送データ量を取得する再送データ量取得部と、
前記再送データ量に基づいて、障害が発生したフレームからの連続再送が要求されるフレーム群の中の最終フレームを特定するための最終フレーム情報を決定する決定部と、
前記連続再送が要求される前記フレーム群の中の先頭フレームを示す要求フレーム情報及び前記最終フレーム情報を少なくとも含むNAKフレームを生成する生成部と、
前記要求フレーム情報で特定される先頭フレームから前記最終フレーム情報で特定される最終フレームまでの連続再送を要求するために前記NAKフレームを送信側通信装置に送信する送信部と、
を備えることを特徴とする通信装置。
(付記2)前記NAKフレームを受信した前記送信側通信装置から連続再送されるフレーム群の中に障害を検出する検出部を更に備え、
前記決定部は、前記連続再送されているフレーム群の中に障害が検出された場合に、前記最終フレーム情報を更新する、
ことを特徴とする付記1に記載の通信装置。
(付記3)前記決定部は、前記最終フレーム情報に基づいて特定される連続再送の最終フレームの次に送信されるフレームに障害が検出された場合には、前記再送データ量に基づいて次の連続再送のための最終フレーム情報を再度決定する、
ことを特徴とする付記2に記載の通信装置。
(付記4)前記決定部は、前記最終フレーム情報として、前記再送データ量そのものを用いることを特徴とする付記1から3のいずれか1つに記載の通信装置。
(付記5)
前記再送データ量取得部は、所定の誤り率以上で誤りが発生している箇所のデータ量をバースト誤り量としてカウントし、このバースト誤り量の統計情報に基づいて、前記再送データ量を決定することを特徴とする付記1から4のいずれか1つに記載の通信装置。
(付記6)
前記再送データ量取得部は、前記バースト誤り量の統計情報における、最頻値、中央値、平均値、最大値のいずれか1つを前記再送データ量に設定することを特徴とする付記5に記載の通信装置。
(付記7)既に送信されたフレームデータを格納する格納部と、
受信側の通信装置から送信されたNAKフレームを受信する受信部と、
前記受信されたNAKフレームに含まれる要求フレーム情報及び最終フレーム情報に基づいて特定される先頭フレームから最終フレームまでの各再送フレームのデータを前記格納部から順次読み出す読出処理部と、
前記読み出された各再送フレームを連続的に送信する送信部と、
を備えることを特徴とする通信装置。
(付記8)前記読出処理部は、前記各再送フレームの連続送信中に、前記最終フレーム情報とは異なる更新された最終フレーム情報を含むNAKフレームが受信された場合に、前記最終フレームを該更新された最終フレーム情報に基づいて特定されるフレームに変更する、
ことを特徴とする付記7に記載の通信装置。
(付記9)前記読出処理部は、既に初回読み出しが終了しているフレームの次に初回読み出しすべきフレームが格納されている第1アドレスと、現在読み出すべきフレームが格納されている第2アドレスとを別々に保持し、前記第2アドレスを用いて前記最終フレームまでの各再送フレームの順次読み出しが終了した後、前記第1アドレスを前記第2アドレスと一致させることにより前記次に初回読み出しすべきフレームを前記格納部から読み出す、
ことを特徴とする付記7又は8に記載の通信装置。
(付記10)前記受信されたNAKフレームに含まれるトランザクション識別子と、既に送信されたフレームに含まれていたトランザクション識別子とを比較することにより、前記各再送フレームの連続送信を開始するか否かを判定し、前記各再送フレームの連続送信を開始する際及びシーケンス番号が一巡する際にのみ、送信されるフレームに含まれるトランザクション識別子を更新する更新部を更に備えることを特徴とする付記7から9のいずれか1つに記載の通信装置。
(付記11)前記受信されたNAKフレームには、前記最終フレーム情報として、連続再送が要求されるデータ量を示す再送データ量が含まれており、
前記読出処理部は、前記要求フレーム情報で前記先頭フレームを特定し、前記先頭フレーム及び前記再送データ量で前記最終フレームを特定する、
ことを特徴とする付記7から10のいずれか1つに記載の通信装置。
(付記12)受信側の通信装置が、
連続再送が要求されるデータ量を示す再送データ量を取得し、
前記再送データ量に基づいて、障害が発生したフレームからの連続再送が要求されるフレーム群の中の最終フレームを特定するための最終フレーム情報を決定し、
前記連続再送が要求される前記フレーム群の中の先頭フレームを特定するための要求フレーム情報及び前記最終フレーム情報を少なくとも含むNAKフレームを生成し、
前記生成されたNAKフレームを送信し、
送信側の通信装置が、
前記受信側の通信装置から送信されたNAKフレームを受信し、
前記受信されたNAKフレームに含まれる前記要求フレーム情報及び前記最終フレーム情報に基づいて特定される先頭フレームから最終フレームまでの各再送フレームを送信フレームを格納する格納部から順次読み出し、
前記読み出された各再送フレームを連続的に送信する、
ことを含む通信方法。
(付記13)前記受信側の通信装置が、
前記送信側の通信装置から連続再送されるフレーム群の中に障害を検出し、
前記連続再送されているフレーム群の中に障害が検出された場合に、前記最終フレーム情報を更新し、
前記送信側の通信装置が、
前記各再送フレームの連続送信中に、前記最終フレーム情報とは異なる更新された最終フレーム情報を含むNAKフレームが受信された場合に、前記最終フレームを該更新された最終フレーム情報に基づいて特定されるフレームに変更する、
ことを更に含む付記12に記載の通信方法。
(付記14)前記受信側の通信装置が、
前記最終フレーム情報に基づいて特定される連続再送の最終フレームの次に送信されるフレームに障害が検出された場合には、前記再送データ量に基づいて次の連続再送のための最終フレーム情報を再度決定する、
ことを更に含む付記12又は13に記載の通信方法。
(付記15)前記送信側の通信装置が、
既に初回読み出しが終了しているフレームの次に初回読み出しすべきフレームが格納されている第1アドレスと、現在読み出すべきフレームが格納されている第2アドレスとを別々に保持し、
前記第2アドレスを用いて前記最終フレームまでの各再送フレームの順次読み出しが終了した後、前記第1アドレスを前記第2アドレスと一致させることにより前記次に初回読み出しすべきフレームを前記格納部から読み出す、
ことを更に含む付記12から14のいずれか1つに記載の通信方法。
(付記16)前記送信側の通信装置が、
前記受信されたNAKフレームに含まれるトランザクション識別子と、既に送信されたフレームに含まれていたトランザクション識別子とを比較することにより、前記各再送フレームの連続送信を開始するか否かを判定し、
前記各再送フレームの連続送信を開始する際及びシーケンス番号が一巡する際にのみ、送信されるフレームに含まれるトランザクション識別子を更新する、
ことを更に含む付記12から15のいずれか1つに記載の通信方法。
(付記17)前記最終フレーム情報として前記再送データ量そのものが用いられ、
前記要求フレーム情報で前記先頭フレームが特定され、前記先頭フレーム及び前記再送データ量で前記最終フレームが特定される、
ことを特徴とする付記12から16のいずれか1つに記載の通信方法。
(付記18)
前記受信側の通信装置が、
所定の誤り率以上で誤りが発生している箇所のデータ量をバースト誤り量としてカウントし、
前記バースト誤り量の統計情報に基づいて、前記再送データ量を決定する、
ことを更に含む付記12から17のいずれか1つに記載の通信方法。
(付記19)
前記再送データ量の決定は、前記バースト誤り量の統計情報における、最頻値、中央値、平均値、最大値のいずれか1つを前記再送データ量に設定することを特徴とする付記18に記載の通信方法。
(付記20)コンピュータに、
連続再送が要求されるデータ量を示す再送データ量を取得する再送データ量取得部と、
前記再送データ量に基づいて、障害が発生したフレームからの連続再送が要求されるフレーム群の中の最終フレームを特定するための最終フレーム情報を決定する決定部と、
前記連続再送が要求される前記フレーム群の中の先頭フレームを示す要求フレーム情報及び前記最終フレーム情報を少なくとも含むNAKフレームを生成する生成部と、
前記要求フレーム情報で特定される先頭フレームから前記最終フレーム情報で特定される最終フレームまでの連続再送を要求するために前記NAKフレームを送信側通信装置に送信する送信部と、
を実現させることを特徴とする通信プログラム。
(付記21)コンピュータに、
既に送信されたフレームデータを格納する格納部と、
受信側の通信装置から送信されたNAKフレームを受信する受信部と、
前記受信されたNAKフレームに含まれる要求フレーム情報及び最終フレーム情報に基づいて特定される先頭フレームから最終フレームまでの各再送フレームのデータを前記格納部から順次読み出す読出処理部と、
前記読み出された各再送フレームを連続的に送信する送信部と、
を実現させることを特徴とする通信プログラム。