説明

通信装置

【課題】 データの通信速度が低下するのを抑制し得る技術を提供すること。
【解決手段】 プリンタ10は、通信セッションが確立されている間に、プリンタ10でのデータの取りこぼし回数を生成する。プリンタ10は、取りこぼし回数が比較的に大きい場合に、プリンタ10のウィンドウサイズWS(P1)の値を、現在の値(14600バイト)から、現在の値よりも小さな新たな値(13140バイト)に変更する。プリンタ10は、次の通信セッションが確立されるべき際に、ウィンドウサイズWS(P1)の値として、新たな値(13140バイト)をPC100に通知する。

【発明の詳細な説明】
【技術分野】
【0001】
本明細書によって開示される技術は、通信装置に関する。特に、通信セッションを確立するために、外部装置にパラメータの値を通知する通信装置に関する。
【背景技術】
【0002】
通信装置は、通信装置と外部装置との間で通信セッションが確立されるべき際に、通常、通信装置のMSS(Maximum Segment Size)及びウィンドウサイズを外部装置に通知する。外部装置は、通常、通信装置のMSS及びウィンドウサイズに従って、データを通信装置に送信する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2001−237882号公報
【特許文献2】特開2006−217234号公報
【特許文献3】特開2003−258938号公報
【特許文献4】特開2008−118281号公報
【特許文献5】特開平5−83298号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、通信装置では、外部装置から送信されるデータの取りこぼしが発生する可能性がある。データの取りこぼしは、例えば、外部装置から通信装置へのデータの送信頻度が高い場合や、通信装置と外部装置との間でいわゆるジャンボフレーム(Jumbo Frame)の通信が実行される場合等に、発生し得る。通信装置でのデータの取りこぼしが発生すると、外部装置は、通常、当該データを通信装置に再送信する。このような再送信が実行されると、通信装置と外部装置との間でのデータの通信速度が低下する。
【0005】
本明細書では、通信装置と外部装置との間でのデータの通信速度が低下するのを抑制し得る技術を提供する。
【課題を解決するための手段】
【0006】
本明細書によって開示される通信装置は、取得部と、決定部と、通知部と、を備える。取得部は、通信装置でのデータの取りこぼしに関する特定情報を取得する。決定部は、通信装置と外部装置との間で通信セッションを確立するために外部装置に通知されるべきパラメータの値を決定する。決定部は、第1の特定情報が取得される場合に、第1の特定情報を用いて、第1種のパラメータの値として第1の値を決定する。通知部は、第1種のパラメータの値として第1の値が決定された後に、通信セッションが確立されるべき際に、第1種のパラメータの値として第1の値を外部装置に通知する。
【0007】
上記の構成では、通信装置は、通信装置でのデータの取りこぼしに関する特定情報を用いて、外部装置に通知されるべきパラメータの値を決定する。具体的には、通信装置は、第1の特定情報を用いて、第1種のパラメータの値として第1の値を決定する。従って、通信装置は、第1の特定情報の内容に応じて、通信装置でのデータの取りこぼしの発生を抑制し得る第1の値を決定することができる。そして、当該第1の値が外部装置に通知されるために、外部装置は、通常、第1の値に従って、通信装置にデータを送信する。従って、通信装置でのデータの取りこぼしの発生を抑制し得る。即ち、外部装置が通信装置にデータを再送信する事象の発生を抑制し得るために、通信装置と外部装置との間でのデータの通信速度が低下するのを抑制し得る。
【0008】
なお、上記の通信装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを格納するコンピュータ読取可能記録媒体も、新規で有用である。
【図面の簡単な説明】
【0009】
【図1】通信システムの構成の一例を示す。
【図2】PCとプリンタとの間で実行される通信の一例を示す。
【図3】ジャンボフレーム設定が「OFF」である場合に実行されるパラメータ変更処理のフローチャートを示す。
【図4】図3のフローチャートを利用する具体例を示す。
【図5】ジャンボフレーム設定が「ON」である場合に実行されるパラメータ変更処理のフローチャートを示す。
【図6】図5のフローチャートを利用する具体例を示す。
【図7】第2実施例のパラメータ変更処理のフローチャートを示す。
【図8】図7のフローチャートを利用する第1の具体例を示す。
【図9】図7のフローチャートを利用する第2の具体例を示す。
【発明を実施するための形態】
【0010】
(第1実施例)
(システムの構成)
図1に示されるように、通信システム2は、プリンタ10(PC100の周辺機器)と、PC100と、を備える。プリンタ10とPC100とは、LAN4に接続されており、LAN4を介して相互に通信可能である。
【0011】
LAN4は、イーサネット(登録商標)に準拠するネットワークである。特に、LAN4は、ギガビットイーサネット、即ち、1ギガビット/秒の通信速度を実現可能なネットワークである。なお、ギガビットイーサネットは、1000BASE−SXと、1000BASE−LXと、1000BASE−CX(これらはIEEE802.3zで規定される)と、1000BASE−T(これはIEEE802.3abで規定される)と、のいずれであってもよい。
【0012】
(プリンタ10の構成)
プリンタ10は、操作部12と、表示部14と、印刷実行部16と、制御部20と、MACチップ40と、PHYチップ50と、を備える。上記の各部12〜20は、バス線(符号省略)に接続されている。操作部12は、複数のキーによって構成される。ユーザは、操作部12を操作することによって、様々な指示をプリンタ10に入力することができる。表示部14は、様々な情報を表示するためのディスプレイである。印刷実行部16は、インクジェット方式、レーザ方式等の印刷機構を備え、制御部20からの指示に従って印刷を実行する。
【0013】
制御部20は、CPU22とメモリ24とを備える。CPU22は、メモリ24に格納されているプログラム(図示省略)に従って、様々な処理を実行する。CPU22が当該プログラムに従って処理を実行することによって、生成部30、取得部32、決定部34、及び、通知部36の各機能が実現される。
【0014】
メモリ24は、不揮発性メモリ、揮発性メモリ等によって構成される。メモリ24は、複数個の設定値SV(Setting Values)を記憶する。複数個の設定値SVは、プリンタ10のMSS(Maximum Segment Size)と、プリンタ10のウィンドウサイズWS(Window Size)と、を含む。なお、以下では、ウィンドウサイズWSのことを単に「WS」と記載することがある。
【0015】
(MSS)
MSSについて説明する前に、イーサネットフレームについて説明する。イーサネットのデータ通信は、フレームを最小単位として実行される。図1には、1個のフレームの構成が模式的に示されている。TCPのフレームは、イーサネットヘッダと、IPヘッダと、TCPヘッダと、アプリケーションデータと、FCS(Frame Check Sequence)と、を含む。イーサネットヘッダ、IPヘッダ、TCPヘッダ、FCSは、それぞれ、14バイト、20バイト、20バイト、4バイトのデータサイズを有する。これらのデータサイズは、イーサネットの規格として予め決められている。これに対し、アプリケーションデータのデータサイズは、フレームの通信を実行する通信装置(即ち、プリンタ10、PC100)によって決定される。
【0016】
MSSは、1個のフレームに含まれるアプリケーションデータのデータサイズとして許容される最大データサイズである。例えば、ギガビットイーサネットではなく、100BASE又は10BASEのような通常のイーサネットの規格では、1個のフレームの最大データサイズとして、1518バイトが予め決められている。従って、ギガビットイーサネットに対応せずに、通常のイーサネットのみに対応する通信装置は、通常、MSSとして1460(=1518−14−20−20−4)バイトを利用する。
【0017】
これに対し、ギガビットイーサネットに対応する通信装置は、MSSとして1460バイトを超える値を利用し得る。このように、MSSとして1460バイトを超える値が利用されると、通信対象のフレーム内のアプリケーションデータのデータサイズが、1460バイトよりも大きな値になる。1460バイトよりも大きなデータサイズを有するアプリケーションデータを含むフレームのことを「ジャンボフレーム」と呼ぶ。
【0018】
プリンタ10のユーザは、操作部12を操作して、ジャンボフレームを利用した通信が実行されるのを望むのか否か(ジャンボフレーム設定=ON又はOFF)を選択することができる。ユーザは、ジャンボフレーム設定として「ON」を選択する場合に、さらに、1個のジャンボフレームのデータサイズの値を指定することができる。ユーザは、通常のイーサネットで利用されるフレームのデータサイズである1518バイトよりも大きく、かつ、後述のFIFO受信バッファFRBの容量(=FIFO送信バッファFSBの容量)よりも小さい値を、1個のジャンボフレームのデータサイズの値として指定することができる。1個のジャンボフレームのデータサイズの値から58(=14+20+20+4)バイトが減算されると、ユーザによって指定されたMSSの値が得られる。なお、以下では、通常のイーサネットで利用されるMSSの値(即ち1460バイト)のことを「MSSの通常値」と呼び、ユーザによって指定されたMSSの値(例えば4000バイト)のことを「MSSの指定値」と呼ぶ。
【0019】
プリンタ10の決定部34(図1参照)は、ジャンボフレーム設定として「OFF」が選択される場合に、MSSの通常値(即ち1460バイト)を、メモリ24内の設定値SVとして記憶させる。即ち、決定部34は、プリンタ10のMSSとして、MSSの通常値を決定する。一方において、決定部34は、ジャンボフレーム設定として「ON」が選択される場合に、通常、MSSの指定値(例えば4000バイト)を、メモリ24内の設定値SVとして記憶させる。即ち、決定部34は、通常、プリンタ10のMSSとして、MSSの指定値を決定する。ただし、後述するように、決定部34は、ジャンボフレーム設定として「ON」が選択される場合に、データの取りこぼしの回数に応じて、プリンタ10のMSSの値を変更する(図5参照)。
【0020】
なお、プリンタ10は、複数個の通信プロトコルを利用して、データの通信を実行可能である。複数個の通信プロトコルは、例えば、印刷データの通信に利用されるLPR(Line PRinter daemon protocol)、ウェブコンテンツの通信に利用されるHTTP(Hyper Text Transfer Protocol)等を含む。プリンタ10のMSSは、複数個の通信プロトコルに共通する値である。即ち、プリンタ10は、複数個の通信プロトコルのうちのいずれに従って通信が実行されるべき際にも、MSSの値として共通の値を利用する。従って、後述のウィンドウサイズWSと異なり、プリンタ10には、1個のMSSの値が設定される。
【0021】
(ウィンドウサイズWS)
WSについて説明する前に、メモリバッファMB(Memory Buffer)について説明する。プリンタ10の制御部20は、通信相手(即ちPC10)と通信を実行すべき際に、メモリ24のRAM内にメモリバッファMBを確保する。メモリバッファMBは、LAN4から受信されるフレーム(以下では「受信フレーム」と呼ぶ)を記憶するための受信用バッファである。特に、メモリバッファMBは、後述のFIFO受信バッファFRBからメモリ24に移動させた後の受信フレームを記憶する。なお、プリンタ10の制御部20は、通信相手と通信を実行すべき際に、メモリ24のRAM内に、LAN4に送信されるフレーム(以下では「送信フレーム」と呼ぶ)を記憶するための送信用バッファも確保する。ただし、図1では、当該送信用バッファを図示省略している。
【0022】
プリンタ10のWSは、RAM内に確保されるメモリバッファMBの記憶容量に関係する値である。より具体的に言うと、WSは、メモリバッファMBが同時的に記憶可能な受信データ(1個以上の受信フレーム)のデータサイズである。WSの値は、通信プロトコル毎に異なる。即ち、本実施例では、図1に示されるように、複数個の通信プロトコルに対応する複数個のウィンドウサイズ(即ちWS(P1)、WS(P2)等)が存在する。なお、WS(P1)は、通信プロトコルP1(例えばLPR)に対応するウィンドウサイズを意味し、WS(P2)は、通信プロトコルP2(例えばHTTP)に対応するウィンドウサイズを意味する。
【0023】
通信プロトコルが異なれば、受信フレームに対する処理の内容が異なる。従って、例えば、比較的に長時間を要する処理が実行される通信プロトコルについては、比較的に大きなWSの値が採用されることが好ましい。本実施例では、このような観点に鑑みて、通信プロトコル毎にWSの値が決められる。
【0024】
プリンタ10の出荷段階では、複数個の通信プロトコルに対応する複数個のWSの値が、プリンタ10のベンダによって予め決められている。以下では、ベンダによって決められたWSの値のことを「WSの初期値」と呼ぶ。プリンタ10の決定部34(図1参照)は、通常、WSの初期値を、メモリ24内の設定値SVとして記憶させる。即ち、決定部34は、通常、プリンタ10のWSとして、WSの初期値を決定する。ただし、後述するように、決定部34は、ジャンボフレーム設定として「OFF」が選択される場合に、データの取りこぼしの回数に応じて、プリンタ10のWSの値を変更する(図3参照)。
【0025】
MACチップ40は、OSI(Open Systems Interconnection)参照モデルのデータリンク層の副層であるMAC層の処理を実行する。MACチップ40は、FIFO(First In First Out)送信バッファFSBと、FIFO受信バッファFRBと、を備える。FIFO送信バッファFSBは、少なくとも1個の送信フレームを記憶するための記憶容量を有する。FIFO受信バッファFRBは、少なくとも1個の受信フレームを記憶するための記憶容量を有する。2つのバッファFSB,FRBの記憶容量は等しい。この記憶容量は、通常のイーサネットで利用される1個のフレームの最大データサイズである1518バイトよりも大きい。
【0026】
PHYチップ50は、OSI参照モデルの物理層の処理を実行する。PHYチップ50は、LAN4に接続されていると共に、MACチップ40に接続されている。FIFO送信バッファFSBに記憶されている送信フレームは、PHYチップ50を介して、LAN4に送信される。また、LAN4から受信される受信フレームは、PHYチップ50を介して、FIFO受信バッファFRBに記憶される。
【0027】
(PC100の構成)
PC100は、図示省略の操作部、表示部、制御部等を備える。PC100は、プリンタ10のためのプリンタドライバを記憶している。PC100は、プリンタドライバに従って、印刷データをプリンタ10に送信可能である。なお、PC100には、PC100のMSSと、PC100のウィンドウサイズと、が設定される。
【0028】
(プリンタ10が実行する通信処理;図2)
プリンタ10とPC100との間では、TCP(Transmission Control Protocol)を利用した通信が実行される。例えば、ユーザは、PC100の操作部(図示省略)を操作して、印刷対象のデータ(以下では「印刷データ」と呼ぶ)を選択することができる。この場合、PC100は、印刷データをプリンタ10に送信するための通信セッションを確立するために、プリンタ10とネゴシエーションを実行する。
【0029】
具体的に言うと、PC100は、まず、PC100のMSSを含むSYN信号をプリンタ10に送信する。これにより、プリンタ10は、PC100のMSSを取得することができる。なお、SYN信号は、さらに、印刷データの通信に利用されるべき通信プロトコルに対応する情報(例えばLPRに対応するポート番号)を含む。これにより、プリンタ10は、プリンタ10が利用すべき通信プロトコル(以下では「対象の通信プロトコル」と呼ぶ)を知ることができる。
【0030】
次いで、プリンタ10の通知部36(図1参照)は、メモリ24内の設定値SVの中から、MSSと、対象の通信プロトコルに対応するWS(以下では「WS(Pt)」と表現する)と、を取得する。次いで、通知部36は、プリンタ10のMSS及びWS(Pt)を含むSYN/ACK信号をPC100に送信することによって、プリンタ10のMSS及びWS(Pt)をPC100に通知する。これにより、PC100は、プリンタ10のMSS及びWS(Pt)を取得することができる。
【0031】
次いで、PC100は、ACK信号をプリンタ10に送信する。この結果、プリンタ10とPC100との間で、通信セッションが確立される。なお、この際に、プリンタ10の制御部20は、メモリ24のRAM内に、WS(Pt)のデータサイズを有するメモリバッファ(受信用バッファ)MBを確保する。また、プリンタ10とPC100とは、対象の通信プロトコルに従って、以下の通信処理を実行する。
【0032】
まず、PC100は、印刷データを複数個の部分印刷データに分割する。この際に、PC100は、PC100のMSSとプリンタ10のMSSとのうちの小さい方の値を選択して、当該値を、1個の部分印刷データのデータサイズとして決定する。従って、PC100によって選択されるMSSの値が大きい程、分割後の部分印刷データの数が少なくなり、その結果、PC100でのデータ分割に要する処理時間と、プリンタ10でのデータ結合に要する処理時間と、を短くすることができる。即ち、MSSの値として大きな値が利用される場合、即ち、ジャンボフレームが利用される場合には、通常のイーサネットのフレーム(1518バイト)が利用される場合と比べて、プリンタ10及びPC100の処理時間が少なくて済み、その結果、データの通信速度が向上する。
【0033】
次いで、PC100は、1個の部分印刷データをアプリケーションデータとして含む1個のフレームF1を生成して、プリンタ10に送信する。フレームF1は、プリンタ10のPHYチップ50を介して、MACチップ40内のFIFO受信バッファFRBに記憶される。上述したように、FIFO受信バッファFRBの記憶容量は、通常のイーサネットで利用される1個のフレームの最大データサイズである1518バイトよりも大きく、しかも、ユーザによって指定される1個のジャンボフレームのデータサイズよりも大きい。従って、PC100が、PC100のMSSとプリンタ10のMSSとのうちの小さい方の値を基準として1個のフレームを生成すれば、当該フレームのデータサイズは、必ず、FIFO受信バッファFRBの記憶容量よりも小さくなる。従って、1個のフレームのデータサイズがFIFO受信バッファFRBの記憶容量よりも大きくなり、その結果、プリンタ10が1個のフレームも受信することができないという事象が発生するのを抑制することができる。
【0034】
プリンタ10の制御部20は、FIFO受信バッファFRB内のフレームF1を、メモリバッファMBに移動させる。これにより、FIFO受信バッファFRBが解放される。次いで、制御部20は、メモリバッファMB内のフレームF1に従った処理を実行する。例えば、制御部20は、フレームF1内の部分印刷データに従って、印刷実行部16に印刷を実行させるための処理(例えば、印刷実行部16に駆動信号を送信する処理)を実行する。制御部20は、フレームF1に従った処理を終えると、フレームF1をメモリバッファMBから消去する。これにより、メモリバッファMBが解放される。
【0035】
上述したように、PC100は、ネゴシエーションを実行する際に、プリンタ10のWS(Pt)を取得する。PC100は、PC100が生成する1個のフレームのデータサイズと、プリンタ10のWS(Pt)と、に基づいて、プリンタ10のメモリバッファMBが何個のフレームを同時的に記憶可能であるのかを算出する。例えば、プリンタ10のWS(Pt)の値が、1個のフレームのデータサイズの2倍に相当する値である場合には、プリンタ10のメモリバッファMBは、2個のフレームを同時的に記憶可能である。この場合、PC100は、プリンタ10からACK(即ち受信確認)を受信しなくても連続して送信可能なフレームの個数として、「2」を決定する。
【0036】
PC100が連続して送信可能なフレームの個数が「2」に決定される例(図2の例)では、PC100は、フレームF1を送信した後に、プリンタ10からACKを受信しなくても、次のフレームF2を送信する。次いで、PC100は、プリンタ10からACKを受信するまで待機する。PC100は、プリンタ10からACKを受信すると、2個のフレームF3,F4を連続して送信し、次いで、プリンタ10からACKを受信するまで再び待機する。
【0037】
なお、プリンタ10は、PC100と異なり、1個以上のフレームを受信すると、適宜、ACKをPC100に送信する。例えば、PC100が連続して送信可能なフレームの個数が「2」に決定される場合には、プリンタ10は、1個又は2個のフレームを受信すると、ACKをPC100に送信する。
【0038】
例えば、FIFO受信バッファFRB内のフレームがメモリバッファMBに移動される前に、PC100からプリンタ10に次のフレームが送信されると、FIFO受信バッファFRBの空き容量が足らないために、FIFO受信バッファFRBが上記の次のフレームを記憶することができない事象が発生し得る。この場合、MACチップ40において、上記の次のフレームが破棄される。以下では、このようにして、FIFO受信バッファFRBが、PC100からプリンタ10に送信されるフレーム(即ちデータ)を格納することができない現象のことを、「フレーム(データ)の取りこぼし(dropping of frame(data))」と呼ぶ。
【0039】
例えば、ギガビットイーサネットのように、PC100からプリンタ10へのフレームの送信頻度が高い環境では、フレームの取りこぼしが発生し易い。PC100からプリンタ10へのフレームの送信頻度(即ちPC100のソフトウェア処理の速度)が、FIFO受信バッファFRB内のフレームをメモリバッファMBに移動させる頻度(即ちプリンタ10のソフトウェア処理の速度)を上回ってしまうからである。特に、ギガビットイーサネットの環境において、ジャンボフレームが利用されると、フレームの取りこぼしがより発生し易くなる。ジャンボフレームが利用される場合には、1個のフレームのデータサイズが大きくなるために、FIFO受信バッファFRBは、1個のフレームを記憶するのに多くの記憶容量を必要とするからである。
【0040】
図2の例では、プリンタ10において、フレームF4の取りこぼしが発生している。プリンタ10の生成部30(図1参照)は、1回の通信セッションが確立されている期間Tの間に発生する取りこぼしの回数をカウントして、メモリ24に記憶させる。従って、生成部30は、フレームF4の取りこぼしが発生すると、取りこぼし回数として「1」をカウントする。なお、生成部30は、ソフトウェアによって実現されるカウンタである。
【0041】
プリンタ10でのフレームF4の取りこぼしが発生したために、プリンタ10は、フレームF3及びF4の受信確認であるACKをPC100に送信しない。PC100は、フレームF4を送信してから所定時間が経過しても、プリンタ10からACKを受信することができない場合に、フレームF3及びF4をプリンタ10に再び送信する。このような再送信が実行される場合には、プリンタ10とPC100との間でのデータ(図2の例では印刷データ)の通信速度が低下してしまう。従って、本実施例では、プリンタ10は、後述の図3及び図5の処理を実行することにより、フレームの取りこぼしが発生するのを抑制する。
【0042】
なお、PC100は、全ての印刷データをプリンタ10に送信し終えると、FIN信号をプリンタ10に送信する。次いで、プリンタ10とPC100との間で、ACK信号、FIN信号、ACK信号が順に通信される。これにより、プリンタ10とPC100との間で確立されていた通信セッションが切断される。プリンタ10の制御部20は、通信セッションが切断されると、当該通信セッションの次の通信セッションのためのネゴシエーションが実行される前に、パラメータ変更処理を実行する(S10)。
【0043】
(パラメータ変更処理)
制御部20は、まず、現在のジャンボフレーム設定が「ON」であるのか「OFF」であるのかを判断する。制御部20は、ジャンボフレーム設定が「OFF」である場合に、図3のパラメータ変更処理を実行し、ジャンボフレーム設定が「ON」である場合に、図5のパラメータ変更処理を実行する。
【0044】
(ジャンボフレーム設定=「OFF」である場合;図3)
ジャンボフレーム設定が「OFF」である場合には、プリンタ10の決定部34は、図3のパラメータ変更処理に従って、プリンタ10のWS(Pt)の値を変更し得る。ただし、この場合、決定部34は、プリンタ10のMSSの値(即ちMSSの通常値(1460バイト))を変更しない。
【0045】
図3のパラメータ変更処理では、S20において、取得部32(図1参照)は、期間T(即ち1回の通信セッションが確立されている期間;図2参照)の取りこぼし回数を取得する。上述したように、生成部30は、期間Tの取りこぼし回数をカウントしている。取得部32は、生成部30のカウンタから取りこぼし回数を読み込むことによって、取りこぼし回数を取得する。
【0046】
次いで、S22において、決定部34は、取りこぼし回数が閾値Th1以上であるのか否かを判断する。本実施例では、閾値Th1として「1」を採用するが、変形例では、他の値(「2」、「3」等)を採用してもよい。取りこぼし回数が閾値Th1以上である場合(S22でYESの場合)には、S24において、決定部34は、WS(Pt)の現在の値(即ち、メモリ24内の設定値SVとして現在記憶されているWS(Pt)の値)が下限値よりも大きいのか否かを判断する。WS(Pt)の下限値は、現在のMSS(即ち1460バイト)と58バイト(=14+20+20+4(図1参照))との和(即ち1518バイト)に相当する値である。即ち、WS(Pt)の下限値は、通常のイーサネットで利用される1個のフレームの最大データサイズである。このような下限値を採用することにより、WS(Pt)の値が1個のフレームのデータサイズよりも小さくなってしまって、メモリバッファMBに1個のフレームも記憶させることができない事象が発生するのを抑制することができる。
【0047】
WS(Pt)の現在の値が下限値よりも大きい場合(S24でYESの場合)には、S26において、決定部34は、WS(Pt)の新たな値を算出する。具体的に言うと、決定部34は、WS(Pt)の現在の値から所定値を減算することによって、WS(Pt)の新たな値を算出する。本実施例では、上記の所定値として、WS(Pt)の初期値の10%に相当する値を採用しているが、変形例では、他の値(例えば初期値の5%に相当する値)を採用してもよい。なお、S26では、決定部34は、WS(Pt)の新たな値が下限値よりも小さくならないように、WS(Pt)の新たな値を算出する。
【0048】
S26では、さらに、決定部34は、メモリ24内の設定値SVとして記憶されているWS(Pt)の現在の値に代えて、算出済みの新たな値を記憶させる。これにより、WS(Pt)が、現在の値から、現在の値よりも小さな新たな値に変更される。S26では、決定部34は、対象の通信プロトコルに対応するウィンドウサイズ(例えばWS(P1))を変更するが、対象の通信プロトコル以外の通信プロトコルに対応するウィンドウサイズ(例えばWS(P2))を変更しない。なお、WS(Pt)の現在の値が下限値に等しい場合(S24でNOの場合)には、決定部34は、S26を実行せずに、パラメータ変更処理を終了する。
【0049】
一方において、取りこぼし回数が閾値Th1よりも小さい場合(S22でNOの場合)には、S32において、決定部34は、取りこぼし回数が、閾値Th1と異なる閾値Th2以下であるのか否かを判断する。本実施例では、閾値Th2として「0」を採用するが、閾値Th2として別の値(「1」、「2」等)を採用してもよい。取りこぼし回数が閾値Th2以下である場合(S32でYESの場合)には、S34において、決定部34は、WS(Pt)の現在の値が上限値よりも小さいのか否かを判断する。WS(Pt)の上限値は、WS(Pt)の初期値である。このような上限値を採用することにより、WS(Pt)の値が、プリンタ10のベンダによって決められた値よりも大きくなってしまうことを抑制することができる。
【0050】
WS(Pt)の現在の値が上限値よりも小さい場合(S34でYESの場合)には、S36において、決定部34は、WS(Pt)の新たな値を算出する。具体的に言うと、決定部34は、WS(Pt)の現在の値に所定値を加算することによって、WS(Pt)の新たな値を算出する。本実施例では、S36で利用される所定値は、S26で利用される所定値と同じ値であるが、変形例では、2つの所定値は、異なる値であってもよい。なお、S36では、決定部34は、WS(Pt)の新たな値が上限値よりも大きくならないように、WS(Pt)の新たな値を算出する。
【0051】
S36では、さらに、決定部34は、メモリ24内の設定値SVとして記憶されているWS(Pt)の現在の値に代えて、算出済みの新たな値を記憶させる。これにより、WS(Pt)が、現在の値から、現在の値よりも大きな新たな値に変更される。S26と同様に、S36では、決定部34は、対象の通信プロトコルに対応するウィンドウサイズ(例えばWS(P1))のみを変更する。なお、WS(Pt)の現在の値が上限値に等しい場合(S34でNOの場合)には、決定部34は、S36を実行せずに、パラメータ変更処理を終了する。
【0052】
(図3のフローを利用する具体例;図4)
例えば、WS(P1)の初期値が14600バイトであり、メモリ24内の設定値SVとしてWS(P1)=14600バイトが記憶されている状況を想定する。PC100からプリンタ10に第1の印刷データが送信されるべき際には、プリンタ10の通知部36は、WS(P1)=14600バイトと、プリンタ10のMSSと、をPC100に通知する。これにより、プリンタ10とPC100との間で、第1の通信プロトコルP1(例えばLPR)を利用した第1の通信セッションが確立される。
【0053】
仮に、第1の通信セッションが確立されている間に、プリンタ10での取りこぼしが発生したとする。この場合、プリンタ10の決定部34は、第1の通信セッションが切断された後に、メモリ24内の設定値SVとして、WS(P1)=14600バイトの代わりに、WS(P1)=13140バイトを新たに記憶させる(図3のS26)。
【0054】
その後、PC100からプリンタ10に第2の印刷データが送信されるべき際には、プリンタ10の通知部36は、WS(P1)=13140バイトと、プリンタ10のMSSと、をPC100に通知する。これにより、プリンタ10とPC100との間で、第1の通信プロトコルP1を利用した第2の通信セッションが確立される。
【0055】
第2の通信セッションを利用した通信では、第1の通信セッションを利用した通信と比べて、プリンタ10のWS(P1)が小さい。従って、PC100が連続して送信可能なフレームの個数が少なくなり得る。この場合、PC100からプリンタ10へのフレームの送信頻度が低くなるために、プリンタ10でのフレームの取りこぼしが発生し難くなる。従って、図4の例では、第2の通信セッションが確立されている間に、プリンタ10での取りこぼしが発生しない。このように、本実施例では、通信対象のデータを受信する側のデバイスであるプリンタ10は、データの取りこぼしが発生する場合に、プリンタ10自身のウィンドウサイズを小さな値に変更する。従って、プリンタ10での取りこぼしの発生を適切に抑制することができる。この結果、PC100がフレームの再送信を実行しなくて済むために、通信速度が低下するのを抑制することができる。
【0056】
なお、第2の通信セッションが確立されている間に、プリンタ10での取りこぼしが発生しないために、プリンタ10の決定部34は、第2の通信セッションが切断された後に、メモリ24内の設定値SVとして、WS(P1)=13140バイトの代わりに、WS(P1)=14600バイトを新たに記憶させる(図3のS36)。このために、その後、、第1の通信プロトコルP1を利用した第3の通信セッションが新たに確立されるべき際には、プリンタ10の通知部36は、WS(P1)=14600バイトと、プリンタ10のMSSと、をPC100に通知する。このように、本実施例では、通信対象のデータを受信する側のデバイスであるプリンタ10は、データの取りこぼしが発生しない場合に、プリンタ自身のWSを大きな値に変更する。即ち、本実施例では、プリンタ10での取りこぼしの発生を抑制しながら、ある程度大きなWSの値を利用して、高い通信速度を実現することができる。
【0057】
なお、図4の例では、決定部34は、第1及び第2の通信セッションで利用された通信プロトコルP1に対応するウィンドウサイズWS(P1)を変更するが、他の通信プロトコルに対応するウィンドウサイズ(例えばWS(P2))を変更しない。従って、第2の通信セッションが切断された後に、第2の通信プロトコルP2を利用した通信セッションが確立されるべき際には、通知部36は、第2の通信セッションの通信結果に基づいて設定されるWS(P1)と異なる値であるWS(P2)を、PC100に通知する。従って、プリンタ10は、通信プロトコルに応じて、適切なWSの値をPC100に通知することができる。なお、変形例では、MSSと同様に、WSも、複数個の通信プロトコルに共通する値であってもよい。
【0058】
(ジャンボフレーム設定=「ON」である場合;図5)
ジャンボフレーム設定が「ON」である場合には、プリンタ10の決定部34は、図5のパラメータ変更処理に従って、プリンタ10のMSSの値を変更し得る。ただし、この場合、決定部34は、プリンタ10のWSの値(即ちWSの初期値)を変更しない。
【0059】
図5のパラメータ変更処理では、S40,S42,S52は、図3のS20,S22,S32と同様である。取りこぼし回数が閾値Th1以上である場合(S42でYESの場合)には、S44において、決定部34は、MSSの現在の値(即ち、メモリ24内の設定値SVとして現在記憶されているMSS)が下限値よりも大きいのか否かを判断する。MSSの下限値は、MSSの通常値(即ち1460バイト)である。このような下限値を採用することにより、プリンタ10のMSSの値がMSSの通常値よりも小さい値になってしまって、通信速度が大幅に低下する事象が発生するのを抑制することができる。
【0060】
MSSの現在の値が下限値よりも大きい場合(S44でYESの場合)には、S46において、決定部34は、MSSの新たな値を算出する。具体的に言うと、決定部34は、MSSの現在の値から所定値を減算することによって、MSSの新たな値を算出する。本実施例では、上記の所定値として、MSSの指定値の10%に相当する値を採用しているが、変形例では、他の値(例えば指定値の5%に相当する値)を採用してもよい。なお、S46では、決定部34は、MSSの新たな値が下限値よりも小さくならないように、MSSの新たな値を算出する。
【0061】
S46では、さらに、決定部34は、メモリ24内の設定値SVとして記憶されているMSSの現在の値に代えて、算出済みの新たな値を記憶させる。これにより、MSSが、現在の値から、現在の値よりも小さな新たな値に変更される。なお、MSSの現在の値が下限値に等しい場合(S44でNOの場合)には、決定部34は、S46を実行せずに、パラメータ変更処理を終了する。
【0062】
一方において、取りこぼし回数が閾値Th2以下である場合(S52でYESの場合)には、S54において、決定部34は、MSSの現在の値が上限値よりも小さいのか否かを判断する。MSSの上限値は、MSSの指定値である。このような上限値を採用することにより、MSSの値が、ユーザによって指定された値よりも大きくなってしまうことを抑制することができる。
【0063】
MSSの現在の値が上限値よりも小さい場合(S54でYESの場合)には、S56において、決定部34は、MSSの新たな値を算出する。具体的に言うと、決定部34は、MSSの現在の値に所定値を加算することによって、MSSの新たな値を算出する。本実施例では、S56で利用される所定値は、S46で利用される所定値と同じ値であるが、、変形例では、2つの所定値は、異なる値であってもよい。なお、S56では、決定部34は、MSSの新たな値が上限値よりも大きくならないように、MSSの新たな値を算出する。
【0064】
S56では、さらに、決定部34は、メモリ24内の設定値SVとして記憶されているMSSの現在の値に代えて、算出済みの新たな値を記憶させる。これにより、MSSが、現在の値から、現在の値よりも大きな新たな値に変更される。なお、MSSの現在の値が上限値に等しい場合(S54でNOの場合)には、決定部34は、S56を実行せずに、パラメータ変更処理を終了する。
【0065】
(図5のフローを利用する具体例;図6)
例えば、MSSの指定値が4000バイトであり、メモリ24内の設定値SVとしてMSS=4000バイトが記憶されている状況を想定する。図4の具体例と同様の第1の通信セッションが確立されるべき際に、プリンタ10の通知部36は、WS(P1)と、MSS=4000バイトと、をPC100に通知する。仮に、第1の通信セッションが確立されている間に、プリンタ10での取りこぼしが発生したとする。この場合、プリンタ10の決定部34は、第1の通信セッションが切断された後に、メモリ24内の設定値SVとして、MSS=4000バイトの代わりに、MSS=3600バイトを新たに記憶させる(図5のS46)。
【0066】
その後、第2の通信セッションが確立されるべき際に、プリンタ10の通知部36は、WS(P1)と、MSS=3600バイトと、をPC100に通知する。第2の通信セッションを利用した通信では、第1の通信セッションを利用した通信と比べて、プリンタ10のMSSが小さい。従って、PC100は、プリンタ10のMSSを基準として1個のフレームのデータサイズを決定すれば、当該データサイズとして比較的に小さな値を採用し得る。この場合、1個のフレームのデータサイズが小さくなるために、プリンタ10での取りこぼしが発生し難くなる。従って、図6の例では、第2の通信セッションが確立されている間に、プリンタ10での取りこぼしが発生しない。このように、本実施例では、プリンタ10は、データの取りこぼしが発生する場合に、プリンタ10自身のMSSを小さな値に変更する。従って、プリンタ10での取りこぼしの発生を適切に抑制することができ、通信速度が低下するのを抑制することができる。
【0067】
なお、第2の通信セッションが確立されている間に、プリンタ10でのフレームの取りこぼしが発生しないために、プリンタ10の決定部34は、第2の通信セッションが切断された後に、メモリ24内の設定値SVとして、MSS=3600バイトの代わりに、MSS=4000バイトを新たに記憶させる(図5のS56)。このように、本実施例では、プリンタ10は、データの取りこぼしが発生しない場合に、プリンタ自身のMSSを大きな値に変更する。即ち、本実施例では、プリンタ10での取りこぼしの発生を抑制しながら、ある程度大きなMSSの値を利用して、高い通信速度を実現することができる。
【0068】
なお、WSとは異なり、MSSは、複数個の通信プロトコルに共通する値である。従って、例えば、第1の通信プロトコルP1を利用した第2の通信セッションが切断された後に、第2の通信プロトコルP2を利用した第3の通信セッションが確立されるべき際に、通知部36は、第2の通信セッションの通信結果に基づいて決定されるMSSを、PC100に通知する。従って、本実施例では、プリンタ10は、複数個の通信プロトコルに共通するMSSの値として、取りこぼしの発生を抑制し得る適切な値を通知することができる。
【0069】
(対応関係)
プリンタ10、PC100が、それぞれ、「通信装置」、「外部装置」の一例である。期間Tの取りこぼし回数が「特定情報」の一例である。図4の例では、ウィンドウサイズWS、第1の通信プロトコルP1が、それぞれ、「第1種のパラメータ」、「特定の通信プロトコル」の一例である。図4の例において、通信結果「取りこぼし回数≧1」が「第1の特定情報」の一例である場合には、13140バイトが「現在の値よりも小さな第1の値」に対応し、通信結果「取りこぼし回数=0」が「第1の特定情報」の一例である場合には、14600バイトが「現在の値よりも大きな第1の値」に対応する。図6の例では、MSSが「第1種のパラメータ」の一例である。図6の例において、通信結果「取りこぼし回数≧1」が「第1の特定情報」の一例である場合には、3600バイトが「現在の値よりも小さな第1の値」に対応し、通信結果「取りこぼし回数=0」が「第1の特定情報」の一例である場合には、4000バイトが「現在の値よりも大きな第1の値」に対応する。
【0070】
(第1実施例の変形例)
第1実施例では、制御部20は、ジャンボフレーム設定が「ON」である場合に、図5のパラメータ変更処理を実行して、MSSの値を変更するが、WS(Pt)の値を変更しない。これに代えて、制御部20は、ジャンボフレーム設定が「ON」である場合に、1回の通信セッションが切断される毎に、図3のパラメータ変更処理と、図5のパラメータ変更処理と、の両方を実行してもよい。従って、例えば、取りこぼし回数が比較的に大きい場合には、決定部34は、WS(Pt)を、現在の値から、現在の値よりも小さな新たな値に変更すると共に、MSSを、現在の値から、現在の値よりも小さな新たな値に変更してもよい。また、例えば、取りこぼし回数が比較的に小さい場合には、決定部34は、WS(Pt)を、現在の値から、現在の値よりも大きな新たな値に変更すると共に、MSSを、現在の値から、現在の値よりも大きな新たな値に変更してもよい。
【0071】
一般的に言うと、決定部34は、第1の特定情報が取得される場合に、第1の特定情報を用いて、第1種のパラメータの値(例えばWS(Pt)の値)として第1の値を決定し、第2の特定情報が取得される場合に、第2の特定情報を用いて、第2種のパラメータの値(例えばMSSの値)として第2の値を決定してもよい。本変形例では、第1の特定情報と第2の特定情報とは、同じ通信セッションが確立されている期間Tの間の取りこぼし回数(即ち同じ情報)である。
【0072】
(第2実施例)
本実施例では、制御部20は、ジャンボフレーム設定が「OFF」である場合に、第1実施例と同様に、図3のパラメータ変更処理を実行する。ただし、制御部20は、ジャンボフレーム設定が「ON」である場合に、図5のパラメータ変更処理の代わりに、図7のパラメータ変更処理を実行する。図7のパラメータ変更処理では、決定部34は、取りこぼし回数が比較的に多い場合に、MSSとWS(Pt)のうち、MSSの値を優先的に小さくし、取りこぼし回数が比較的に少ない場合に、MSSとWS(Pt)のうち、WS(Pt)の値を優先的に大きくする。
【0073】
S60,S62,S82は、図3のS20,S22,S32(図5のS40,S42,S52)と同様である。取りこぼし回数が閾値Th1以上である場合(S62でYESの場合)には、S64において、決定部34は、MSSの現在の値が閾値Th3よりも大きいのか否かを判断する。閾値Th3は、MSSの指定値(例えば4000バイト)よりも小さく、かつ、MSSの通常値(即ち1460バイト)よりも大きい値である。例えば、閾値Th3は、MSSの指定値の50%に相当する値である。
【0074】
MSSの現在の値が閾値Th3よりも大きい場合(S64でYESの場合)には、S72において、決定部34は、MSSの値を、現在の値から、現在の値よりも小さな新たな値に変更する。S72は、図5のS46と同様である。なお、S64でYESの場合のS72では、決定部34は、MSSの新たな値が閾値Th3よりも小さくならないように、MSSの新たな値を算出する。
【0075】
MSSの現在の値が閾値Th3以下である場合(S64でNOの場合)には、S66において、決定部34は、WS(Pt)の現在の値が閾値Th4よりも大きいのか否かを判断する。閾値Th4は、閾値Th3と58バイト(=14+20+20+4(図2参照))との和に相当する値である。
【0076】
WS(Pt)の現在の値が閾値Th4よりも大きい場合(S66でYESの場合)には、S74において、決定部34は、WS(Pt)の値を、現在の値から、現在の値よりも小さな新たな値に変更する。S74は、図3のS26と同様である。なお、S66でYESの場合のS74では、決定部34は、WS(Pt)の新たな値が閾値Th4よりも小さくならないように、WS(Pt)の新たな値を算出する。これにより、WS(Pt)の値が1個のフレームのデータサイズ(即ちMSSの現在の値(閾値Th3)+58バイト)よりも小さくなってしまう事象が発生するのを抑制することができる。
【0077】
WS(Pt)の現在の値が閾値Th4以下である場合(S66でNOの場合)には、S68に進む。なお、S68、S70は、それぞれ、図5のS44、図3のS24と同様である。また、S68でYESの場合に実行されるS72、S70でYESの場合に実行されるS74は、それぞれ、図5のS46、図3のS26と同様である。
【0078】
一方において、取りこぼし回数が閾値Th2以下である場合(S82でYESの場合)には、S84において、決定部34は、WS(Pt)の現在の値が閾値Th4(S66で利用される閾値Th4と同じ値)以下であるのか否かを判断する。WS(Pt)の現在の値が閾値Th4以下である場合(S84でYESの場合)には、S92において、決定部34は、WS(Pt)の値を、現在の値から、現在の値よりも大きな新たな値に変更する。S92は、図3のS36と同様である。
【0079】
WS(Pt)の現在の値が閾値Th4よりも大きい場合(S84でNOの場合)には、S86において、決定部34は、MSSの現在の値が閾値Th3(S64で利用される閾値Th3と同じ値)以下であるのか否かを判断する。MSSの現在の値が閾値Th3以下である場合(S86でYESの場合)には、S94において、決定部34は、MSSの値を、現在の値から、現在の値よりも大きな新たな値に変更する。S94は、図5のS56と同様である。
【0080】
MSSの現在の値が閾値Th3よりも大きい場合(S86でNOの場合)には、S88に進む。なお、S88、S90は、それぞれ、図3のS34、図5のS54と同様である。また、S88でYESの場合に実行されるS92、S90でYESの場合に実行されるS94は、それぞれ、図3のS36、図5のS56と同様である。
【0081】
(図7のフローを利用する具体例;図8)
図8では、メモリ24内の設定値SVとして、WS(P1)=14600バイト(=WS(P1)の初期値)と、MSS=4000バイト(=MSSの指定値)と、が記憶されている状況を想定している。通信セッションが確立されるべき際に、プリンタ10の通知部36は、WS(P1)=14600バイトと、MSS=4000バイトと、をPC100に通知する。プリンタ10での取りこぼしが発生すると、プリンタ10の決定部34は、メモリ24内の設定値SVとして、MSS=4000バイトの代わりに、MSS=3600バイトを新たに記憶させる(図7のS64でYESの場合のS72)。その後の複数回の通信セッションでも、プリンタ10での取りこぼしが発生する状態が続くと、決定部34は、MSSの値を、3200、2800、・・・2000バイト(即ち図7のS64の閾値Th3)まで順に変更する。
【0082】
MSS=2000バイトである状態で、プリンタ10での取りこぼしが発生すると、決定部34は、図7のS64でNOと判断する。この場合、決定部34は、メモリ24内の設定値SVとして、WS(P1)=14600バイトの代わりに、WS(P1)=13140バイトを新たに記憶させる(図7のS66でYESの場合のS74)。その後の複数回の通信セッション(特に通信プロトコルP1が利用される複数回の通信セッション)でも、プリンタ10での取りこぼしが発生する状態が続くと、決定部34は、WS(P1)の値を、11680、10220、・・・2058バイト(即ち図7のS66の閾値Th4)まで順に変更する。
【0083】
WS(P1)=2058バイトである状態で、プリンタ10での取りこぼしが発生すると、決定部34は、図7のS66でNOと判断する。この場合、決定部34は、メモリ24内の設定値SVとして、MSS=2000バイトの代わりに、MSS=1600バイトを新たに記憶させる(図7のS68でYESの場合のS72)。その後の通信セッションでも、プリンタ10での取りこぼしが発生すると、決定部34は、MSSの値を1460バイト(即ちMSSの下限値(通常値))まで変更する。
【0084】
MSS=1460バイトである状態で、プリンタ10での取りこぼしが発生すると、決定部34は、図7のS68でNOと判断する。この場合、決定部34は、メモリ24内の設定値SVとして、WS(P1)=2058バイトの代わりに、WS(P1)=1518バイト(即ちWS(P1)の下限値(MSSの現在の値+58バイト))を新たに記憶させる(図7のS70でYESの場合のS74)。
【0085】
通常、MSSは、ウィンドウサイズと比べて、取りこぼしの発生に大きな影響を与える。例えば、MSSの値を10%小さくすると、ウィンドウサイズの値を10%小さくするよりも、取りこぼしの発生を効果的に抑制することができる。本実施例によると、プリンタ10は、取りこぼしの発生回数が比較的に多い場合に、MSS及びウィンドウサイズのうち、取りこぼしの発生に影響を与え易いMSSの値を優先的に小さくする。従って、取りこぼしの発生を効果的に抑制することができる。
【0086】
(図7のフローを利用する具体例;図9)
例えば、図8のシーケンスが実行された後、即ち、MSS=1460バイト、WS(P1)=1518バイトに変更された後に、プリンタ10での取りこぼしが発生しないと、図9に示されるように、プリンタ10の決定部34は、メモリ24内の設定値SVとして、WS(P1)=1518バイトの代わりに、WS(P1)=2978バイトを新たに記憶させる(図7のS84でYESの場合のS92)。
【0087】
WS(P1)=2978バイトである状態で、プリンタ10での取りこぼしが発生しないと、決定部34は、図7のS84でNOと判断する。この場合、決定部34は、メモリ24内の設定値SVとして、MSS=1460バイトの代わりに、MSS=1860バイトを新たに記憶させる(図7のS86でYESの場合のS94)。その後の通信セッションでも、プリンタ10での取りこぼしが発生しないと、決定部34は、MSSの値を、2260バイトに変更する。
【0088】
MSS=2260バイトである状態で、プリンタ10での取りこぼしが発生すると、決定部34は、図7のS86でNOと判断する。この場合、決定部34は、メモリ24内の設定値SVとして、WS(P1)=2978バイトの代わりに、WS(P1)=4438バイトを新たに記憶させる(図7のS88でYESの場合のS92)。その後の複数回の通信セッション(特に通信プロトコルP1が利用される複数回の通信セッション)でも、プリンタ10での取りこぼしが発生しない状態が続くと、決定部34は、WS(P1)の値を、5898、7358、・・・14600バイト(即ちWS(P1)の上限値(初期値))まで変更する。
【0089】
WS(P1)=14600バイトである状態で、プリンタ10での取りこぼしが発生しないと、決定部34は、図7のS88でNOと判断する。この場合、決定部34は、メモリ24内の設定値SVとして、MSS=2260バイトの代わりに、MSS=2660バイトを新たに記憶させる(図7のS90でYESの場合のS94)。その後の複数回の通信セッションでも、プリンタ10での取りこぼしが発生しない状態が続くと、決定部34は、MSSの値を、3060、3460、・・・4000バイト(即ちMSSの上限値(指定値))まで順に変更する。
【0090】
本実施例によると、プリンタ10は、取りこぼしの発生回数が比較的に少ない場合に、MSS及びウィンドウサイズのうち、取りこぼしの発生に影響を与え難いウィンドウサイズの値を優先的に大きくする。従って、取りこぼしの発生を抑制しながら、通信速度が向上するように、ウィンドウサイズの値を大きくすることができる。
【0091】
(対応関係)
図8及び図9の例では、MSS、WSが、それぞれ、「第1種のパラメータ」、「第2種のパラメータ」の一例である。図8の最も上の通信結果「取りこぼし回数≧1」が「第1のタイミングで取得される第1の特定情報」の一例である場合には、MSS=3600バイトが「現在の値よりも小さな第1の値」に対応し、図8の上から2番目の通信結果「取りこぼし回数≧1」が「第1のタイミングの後の第2のタイミングで取得される第2の特定情報」の一例である場合には、WS(P1)=13140バイトが「現在の値よりも小さな第2の値」に対応する。また、図9の最も上の通信結果「取りこぼし回数=0」が「第3のタイミングで取得される第2の特定情報」の一例である場合には、WS(P1)=2978バイトが「現在の値よりも大きな第2の値」に対応し、図9の上から2番目の通信結果「取りこぼし回数=0」が「第3のタイミングの後の第4のタイミングで取得される第1の特定情報」の一例である場合には、MSS=1860バイトが「現在の値よりも大きな第1の値」に対応する。
【0092】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【0093】
(変形例1)上記の各実施例では、WS,MSSの値を決定するために1回の通信セッションの間の取りこぼし回数が利用されているが、これに代えて、1回の通信セッションの間の取りこぼしの有又は無を示す情報、1回の通信セッションの間の取りこぼしの確率(取りこぼし回数/受信フレームの数)を示す情報、1回の通信セッションの間の単位時間当りの取りこぼし回数を示す情報等が利用されてもよい。一般的に言うと、決定部34は、データの取りこぼしに関する情報を用いて、WS,MSSの値を決定すればよい。
【0094】
(変形例2)上記の各実施例及び変形例1では、生成部30は、1回の通信セッションを基準として、「特定情報」を生成する。しかしながら、生成部30は、通信セッションに関係ない所定期間(例えば、パラメータ変更処理が実行される直前の所定時間)を基準として、「特定情報」を生成してもよい。
【0095】
(変形例3)上記の各実施例では、生成部30は、ソフトウェアによって実現されるカウンタである。これに代えて、MACチップ40が取りこぼし回数をカウントする機能を備えていてもよい。この場合、図3のS20等では、取得部32は、MACチップ40から取りこぼし回数を取得してもよい。本変形例では、MACチップが「生成部」の一例である。
【0096】
(変形例4)上記の各実施例では、制御部20は、1回の通信セッションが切断された直後に、パラメータ変更処理を実行する(図2のS10参照)。即ち、制御部20は、通信セッションが切断された後であって、次の通信セッションを確立するためのSYN信号の通信が実行される前に、パラメータ変更処理を実行する。これに代えて、制御部20は、通信セッションを確立するためのSYN信号を受信した後であって、当該通信セッションを確立するためのSYN/ACK信号を送信する前に、パラメータ変更処理を実行してもよい。また、制御部20は、通信セッションとは無関係のタイミングで(例えば定期的に)、パラメータ変更処理を実行してもよい。即ち、決定部がパラメータの値を決定するタイミングは、上記の各実施例のタイミングに限定されず、適宜変更することができる。
【0097】
(変形例5)「通信装置」は、プリンタ10に限られず、他のデバイス(例えば、スキャナ装置、FAX装置、コピー機、多機能機、電話機、PC、サーバ、携帯電話、PDA等)であってもよい。
【0098】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【0099】
2:通信システム、10:プリンタ、100:PC、WS(P1):通信プロトコルP1に対応するウィンドウサイズ、WS(P2):通信プロトコルP2に対応するウィンドウサイズ、MB:メモリバッファ、FSB:FIFO送信バッファ、FRB:FIFO受信バッファ

【特許請求の範囲】
【請求項1】
通信装置であって、
前記通信装置でのデータの取りこぼしに関する特定情報を取得する取得部と、
前記通信装置と外部装置との間で通信セッションを確立するために前記外部装置に通知されるべきパラメータの値を決定する決定部であって、第1の前記特定情報が取得される場合に、前記第1の特定情報を用いて、第1種の前記パラメータの値として第1の値を決定する前記決定部と、
前記第1種のパラメータの値として前記第1の値が決定された後に、前記通信セッションが確立されるべき際に、前記第1種のパラメータの値として前記第1の値を前記外部装置に通知する通知部と、
を備える通信装置。
【請求項2】
前記決定部は、
前記第1の特定情報が、前記取りこぼしの発生回数が比較的に多いことを示す場合に、前記第1種のパラメータの値を、現在の値から、前記現在の値よりも小さな前記第1の値に変更し、
前記第1の特定情報が、前記取りこぼしの発生回数が比較的に少ないことを示す場合に、前記第1種のパラメータの値を、前記現在の値から、前記現在の値よりも大きな前記第1の値に変更する、請求項1に記載の通信装置。
【請求項3】
前記第1の特定情報は、前記取りこぼしの発生回数に関する値を含み、
前記決定部は、
前記第1の特定情報に含まれる前記値を第1の閾値と比較することによって、前記第1種のパラメータの値を、前記現在の値から、前記現在の値よりも小さな前記第1の値に変更するのか否かを判断し、
前記第1の特定情報に含まれる前記値を第2の閾値と比較することによって、前記第1種のパラメータの値を、前記現在の値から、前記現在の値よりも大きな前記第1の値に変更するのか否かを判断する、請求項2に記載の通信装置。
【請求項4】
さらに、前記通信装置と前記外部装置との間で実行された通信の結果に基づいて前記特定情報を生成する生成部を備え、
前記取得部は、前記生成部によって生成される前記特定情報を取得する、請求項1から3のいずれか一項に記載の通信装置。
【請求項5】
前記決定部は、さらに、第2の前記特定情報が取得される場合に、前記第2の特定情報を用いて、前記第1種のパラメータと異なる第2種のパラメータの値として第2の値を決定し、
前記通知部は、前記第1種のパラメータの値として前記第1の値が決定された後であり、かつ、前記第2種のパラメータの値として前記第2の値が決定された後に、前記通信セッションが確立されるべき際に、前記第1種のパラメータの値として前記第1の値を前記外部装置に通知すると共に、前記第2種のパラメータの値として前記第2の値を前記外部装置に通知する、請求項1から4のいずれか一項に記載の通信装置。
【請求項6】
前記第1種のパラメータは、MSSであり、
前記第2種のパラメータは、ウィンドウサイズであり、
前記決定部は、
第1のタイミングで取得される前記第1の特定情報が、前記取りこぼしの発生回数が比較的に多いことを示す場合に、前記第2種のパラメータの値を変更せずに、前記第1種のパラメータの値を、現在の値から、前記現在の値よりも小さな前記第1の値に変更し、
前記第1のタイミングの後の第2のタイミングで取得される前記第2の特定情報が、前記取りこぼしの発生回数が比較的に多いことを示す場合に、前記第1種のパラメータの値を変更せずに、前記第2種のパラメータの値を、現在の値から、前記現在の値よりも小さな前記第2の値に変更する、請求項5に記載の通信装置。
【請求項7】
前記第1種のパラメータは、MSSであり、
前記第2種のパラメータは、ウィンドウサイズであり、
前記決定部は、
第3のタイミングで取得される前記第2の特定情報が、前記取りこぼしの発生回数が比較的に少ないことを示す場合に、前記第1種のパラメータの値を変更せずに、前記第2種のパラメータの値を、現在の値から、前記現在の値よりも大きな前記第2の値に変更し、
前記第3のタイミングの後の第4のタイミングで取得される前記第1の特定情報が、前記取りこぼしの発生回数が比較的に少ないことを示す場合に、前記第2種のパラメータの値を変更せずに、前記第1種のパラメータの値を、現在の値から、前記現在の値よりも大きな前記第1の値に変更する、請求項5に記載の通信装置。
【請求項8】
前記第1種のパラメータは、MSSであり、
前記決定部は、前記通信装置が利用可能な複数個の通信プロトコルに共通する前記第1種のパラメータの値として、前記第1の値を決定し、
前記通知部は、前記第1種のパラメータの値として前記第1の値が決定された後に、前記複数個の通信プロトコルのいずれに従った通信のための前記通信セッションが確立されるべき際にも、前記第1種のパラメータの値として前記第1の値を前記外部装置に通知する、請求項1から7のいずれか一項に記載の通信装置。
【請求項9】
前記第1種のパラメータは、ウィンドウサイズであり、
前記決定部は、前記通信装置が利用可能な複数個の通信プロトコルのうちの特定の通信プロトコルに対応する前記第1種のパラメータの値として、前記第1の値を決定し、
前記通知部は、
前記特定の通信プロトコルに対応する前記第1種のパラメータの値として前記第1の値が決定された後に、前記特定の通信プロトコルに従った通信のための前記通信セッションが確立されるべき際に、前記第1種のパラメータの値として前記第1の値を前記外部装置に通知し、
前記特定の通信プロトコルに対応する前記第1種のパラメータの値として前記第1の値が決定された後に、前記特定の通信プロトコルと異なる通信プロトコルに従った通信のための前記通信セッションが確立されるべき際に、前記第1種のパラメータの値として前記第1の値と異なる値を前記外部装置に通知する、請求項1から5のいずれか一項に記載の通信装置。
【請求項10】
通信装置のためのコンピュータプログラムであって、
前記通信装置に搭載されるコンピュータに、以下の各処理、即ち、
前記通信装置でのデータの取りこぼしに関する特定情報を取得する取得処理と、
前記通信装置と外部装置との間で通信セッションを確立するために前記外部装置に通知されるべきパラメータの値を決定する決定処理であって、第1の前記特定情報が取得される場合に、前記第1の特定情報を用いて、第1種の前記パラメータの値として第1の値を決定する前記決定処理と、
前記第1種のパラメータの値として前記第1の値が決定された後に、前記通信セッションが確立されるべき際に、前記第1種のパラメータの値として前記第1の値を前記外部装置に通知する通知処理と、
を実行させるコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2012−175560(P2012−175560A)
【公開日】平成24年9月10日(2012.9.10)
【国際特許分類】
【出願番号】特願2011−37415(P2011−37415)
【出願日】平成23年2月23日(2011.2.23)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】