(57)【要約】【課題】  データの通信速度が低下するのを抑制し得る技術を提供すること。【解決手段】  プリンタ１０は、通信セッションが確立されている間に、プリンタ１０でのデータの取りこぼし回数を生成する。プリンタ１０は、取りこぼし回数が比較的に大きい場合に、プリンタ１０のウィンドウサイズＷＳ（Ｐ１）の値を、現在の値（１４６００バイト）から、現在の値よりも小さな新たな値（１３１４０バイト）に変更する。プリンタ１０は、次の通信セッションが確立されるべき際に、ウィンドウサイズＷＳ（Ｐ１）の値として、新たな値（１３１４０バイト）をＰＣ１００に通知する。【選択図】  図４
2012175560.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
前記通信装置でのデータの取りこぼしに関する特定情報を取得する取得部と、
前記通信装置と外部装置との間で通信セッションを確立するために前記外部装置に通知されるべきパラメータの値を決定する決定部であって、第１の前記特定情報が取得される場合に、前記第１の特定情報を用いて、第１種の前記パラメータの値として第１の値を決定する前記決定部と、
前記第１種のパラメータの値として前記第１の値が決定された後に、前記通信セッションが確立されるべき際に、前記第１種のパラメータの値として前記第１の値を前記外部装置に通知する通知部と、
を備える通信装置。
【請求項２】
前記決定部は、
前記第１の特定情報が、前記取りこぼしの発生回数が比較的に多いことを示す場合に、前記第１種のパラメータの値を、現在の値から、前記現在の値よりも小さな前記第１の値に変更し、
前記第１の特定情報が、前記取りこぼしの発生回数が比較的に少ないことを示す場合に、前記第１種のパラメータの値を、前記現在の値から、前記現在の値よりも大きな前記第１の値に変更する、請求項１に記載の通信装置。
【請求項３】
前記第１の特定情報は、前記取りこぼしの発生回数に関する値を含み、
前記決定部は、
前記第１の特定情報に含まれる前記値を第１の閾値と比較することによって、前記第１種のパラメータの値を、前記現在の値から、前記現在の値よりも小さな前記第１の値に変更するのか否かを判断し、
前記第１の特定情報に含まれる前記値を第２の閾値と比較することによって、前記第１種のパラメータの値を、前記現在の値から、前記現在の値よりも大きな前記第１の値に変更するのか否かを判断する、請求項２に記載の通信装置。
【請求項４】
さらに、前記通信装置と前記外部装置との間で実行された通信の結果に基づいて前記特定情報を生成する生成部を備え、
前記取得部は、前記生成部によって生成される前記特定情報を取得する、請求項１から３のいずれか一項に記載の通信装置。
【請求項５】
前記決定部は、さらに、第２の前記特定情報が取得される場合に、前記第２の特定情報を用いて、前記第１種のパラメータと異なる第２種のパラメータの値として第２の値を決定し、
前記通知部は、前記第１種のパラメータの値として前記第１の値が決定された後であり、かつ、前記第２種のパラメータの値として前記第２の値が決定された後に、前記通信セッションが確立されるべき際に、前記第１種のパラメータの値として前記第１の値を前記外部装置に通知すると共に、前記第２種のパラメータの値として前記第２の値を前記外部装置に通知する、請求項１から４のいずれか一項に記載の通信装置。
【請求項６】
前記第１種のパラメータは、ＭＳＳであり、
前記第２種のパラメータは、ウィンドウサイズであり、
前記決定部は、
第１のタイミングで取得される前記第１の特定情報が、前記取りこぼしの発生回数が比較的に多いことを示す場合に、前記第２種のパラメータの値を変更せずに、前記第１種のパラメータの値を、現在の値から、前記現在の値よりも小さな前記第１の値に変更し、
前記第１のタイミングの後の第２のタイミングで取得される前記第２の特定情報が、前記取りこぼしの発生回数が比較的に多いことを示す場合に、前記第１種のパラメータの値を変更せずに、前記第２種のパラメータの値を、現在の値から、前記現在の値よりも小さな前記第２の値に変更する、請求項５に記載の通信装置。
【請求項７】
前記第１種のパラメータは、ＭＳＳであり、
前記第２種のパラメータは、ウィンドウサイズであり、
前記決定部は、
第３のタイミングで取得される前記第２の特定情報が、前記取りこぼしの発生回数が比較的に少ないことを示す場合に、前記第１種のパラメータの値を変更せずに、前記第２種のパラメータの値を、現在の値から、前記現在の値よりも大きな前記第２の値に変更し、
前記第３のタイミングの後の第４のタイミングで取得される前記第１の特定情報が、前記取りこぼしの発生回数が比較的に少ないことを示す場合に、前記第２種のパラメータの値を変更せずに、前記第１種のパラメータの値を、現在の値から、前記現在の値よりも大きな前記第１の値に変更する、請求項５に記載の通信装置。
【請求項８】
前記第１種のパラメータは、ＭＳＳであり、
前記決定部は、前記通信装置が利用可能な複数個の通信プロトコルに共通する前記第１種のパラメータの値として、前記第１の値を決定し、
前記通知部は、前記第１種のパラメータの値として前記第１の値が決定された後に、前記複数個の通信プロトコルのいずれに従った通信のための前記通信セッションが確立されるべき際にも、前記第１種のパラメータの値として前記第１の値を前記外部装置に通知する、請求項１から７のいずれか一項に記載の通信装置。
【請求項９】
前記第１種のパラメータは、ウィンドウサイズであり、
前記決定部は、前記通信装置が利用可能な複数個の通信プロトコルのうちの特定の通信プロトコルに対応する前記第１種のパラメータの値として、前記第１の値を決定し、
前記通知部は、
前記特定の通信プロトコルに対応する前記第１種のパラメータの値として前記第１の値が決定された後に、前記特定の通信プロトコルに従った通信のための前記通信セッションが確立されるべき際に、前記第１種のパラメータの値として前記第１の値を前記外部装置に通知し、
前記特定の通信プロトコルに対応する前記第１種のパラメータの値として前記第１の値が決定された後に、前記特定の通信プロトコルと異なる通信プロトコルに従った通信のための前記通信セッションが確立されるべき際に、前記第１種のパラメータの値として前記第１の値と異なる値を前記外部装置に通知する、請求項１から５のいずれか一項に記載の通信装置。
【請求項１０】
通信装置のためのコンピュータプログラムであって、
前記通信装置に搭載されるコンピュータに、以下の各処理、即ち、
前記通信装置でのデータの取りこぼしに関する特定情報を取得する取得処理と、
前記通信装置と外部装置との間で通信セッションを確立するために前記外部装置に通知されるべきパラメータの値を決定する決定処理であって、第１の前記特定情報が取得される場合に、前記第１の特定情報を用いて、第１種の前記パラメータの値として第１の値を決定する前記決定処理と、
前記第１種のパラメータの値として前記第１の値が決定された後に、前記通信セッションが確立されるべき際に、前記第１種のパラメータの値として前記第１の値を前記外部装置に通知する通知処理と、
を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書によって開示される技術は、通信装置に関する。特に、通信セッションを確立するために、外部装置にパラメータの値を通知する通信装置に関する。
【背景技術】
【０００２】
通信装置は、通信装置と外部装置との間で通信セッションが確立されるべき際に、通常、通信装置のＭＳＳ（Maximum Segment Size）及びウィンドウサイズを外部装置に通知する。外部装置は、通常、通信装置のＭＳＳ及びウィンドウサイズに従って、データを通信装置に送信する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２３７８８２号公報
【特許文献２】特開２００６−２１７２３４号公報
【特許文献３】特開２００３−２５８９３８号公報
【特許文献４】特開２００８−１１８２８１号公報
【特許文献５】特開平５−８３２９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、通信装置では、外部装置から送信されるデータの取りこぼしが発生する可能性がある。データの取りこぼしは、例えば、外部装置から通信装置へのデータの送信頻度が高い場合や、通信装置と外部装置との間でいわゆるジャンボフレーム（Jumbo Frame）の通信が実行される場合等に、発生し得る。通信装置でのデータの取りこぼしが発生すると、外部装置は、通常、当該データを通信装置に再送信する。このような再送信が実行されると、通信装置と外部装置との間でのデータの通信速度が低下する。
【０００５】
本明細書では、通信装置と外部装置との間でのデータの通信速度が低下するのを抑制し得る技術を提供する。
【課題を解決するための手段】
【０００６】
本明細書によって開示される通信装置は、取得部と、決定部と、通知部と、を備える。取得部は、通信装置でのデータの取りこぼしに関する特定情報を取得する。決定部は、通信装置と外部装置との間で通信セッションを確立するために外部装置に通知されるべきパラメータの値を決定する。決定部は、第１の特定情報が取得される場合に、第１の特定情報を用いて、第１種のパラメータの値として第１の値を決定する。通知部は、第１種のパラメータの値として第１の値が決定された後に、通信セッションが確立されるべき際に、第１種のパラメータの値として第１の値を外部装置に通知する。
【０００７】
上記の構成では、通信装置は、通信装置でのデータの取りこぼしに関する特定情報を用いて、外部装置に通知されるべきパラメータの値を決定する。具体的には、通信装置は、第１の特定情報を用いて、第１種のパラメータの値として第１の値を決定する。従って、通信装置は、第１の特定情報の内容に応じて、通信装置でのデータの取りこぼしの発生を抑制し得る第１の値を決定することができる。そして、当該第１の値が外部装置に通知されるために、外部装置は、通常、第１の値に従って、通信装置にデータを送信する。従って、通信装置でのデータの取りこぼしの発生を抑制し得る。即ち、外部装置が通信装置にデータを再送信する事象の発生を抑制し得るために、通信装置と外部装置との間でのデータの通信速度が低下するのを抑制し得る。
【０００８】
なお、上記の通信装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを格納するコンピュータ読取可能記録媒体も、新規で有用である。
【図面の簡単な説明】
【０００９】
【図１】通信システムの構成の一例を示す。
【図２】ＰＣとプリンタとの間で実行される通信の一例を示す。
【図３】ジャンボフレーム設定が「ＯＦＦ」である場合に実行されるパラメータ変更処理のフローチャートを示す。
【図４】図３のフローチャートを利用する具体例を示す。
【図５】ジャンボフレーム設定が「ＯＮ」である場合に実行されるパラメータ変更処理のフローチャートを示す。
【図６】図５のフローチャートを利用する具体例を示す。
【図７】第２実施例のパラメータ変更処理のフローチャートを示す。
【図８】図７のフローチャートを利用する第１の具体例を示す。
【図９】図７のフローチャートを利用する第２の具体例を示す。
【発明を実施するための形態】
【００１０】
（第１実施例）
（システムの構成）
図１に示されるように、通信システム２は、プリンタ１０（ＰＣ１００の周辺機器）と、ＰＣ１００と、を備える。プリンタ１０とＰＣ１００とは、ＬＡＮ４に接続されており、ＬＡＮ４を介して相互に通信可能である。
【００１１】
ＬＡＮ４は、イーサネット（登録商標）に準拠するネットワークである。特に、ＬＡＮ４は、ギガビットイーサネット、即ち、１ギガビット／秒の通信速度を実現可能なネットワークである。なお、ギガビットイーサネットは、１０００ＢＡＳＥ−ＳＸと、１０００ＢＡＳＥ−ＬＸと、１０００ＢＡＳＥ−ＣＸ（これらはＩＥＥＥ８０２．３ｚで規定される）と、１０００ＢＡＳＥ−Ｔ（これはＩＥＥＥ８０２．３ａｂで規定される）と、のいずれであってもよい。
【００１２】
（プリンタ１０の構成）
プリンタ１０は、操作部１２と、表示部１４と、印刷実行部１６と、制御部２０と、ＭＡＣチップ４０と、ＰＨＹチップ５０と、を備える。上記の各部１２〜２０は、バス線（符号省略）に接続されている。操作部１２は、複数のキーによって構成される。ユーザは、操作部１２を操作することによって、様々な指示をプリンタ１０に入力することができる。表示部１４は、様々な情報を表示するためのディスプレイである。印刷実行部１６は、インクジェット方式、レーザ方式等の印刷機構を備え、制御部２０からの指示に従って印刷を実行する。
【００１３】
制御部２０は、ＣＰＵ２２とメモリ２４とを備える。ＣＰＵ２２は、メモリ２４に格納されているプログラム（図示省略）に従って、様々な処理を実行する。ＣＰＵ２２が当該プログラムに従って処理を実行することによって、生成部３０、取得部３２、決定部３４、及び、通知部３６の各機能が実現される。
【００１４】
メモリ２４は、不揮発性メモリ、揮発性メモリ等によって構成される。メモリ２４は、複数個の設定値ＳＶ（Setting Values）を記憶する。複数個の設定値ＳＶは、プリンタ１０のＭＳＳ（Maximum Segment Size）と、プリンタ１０のウィンドウサイズＷＳ（Window Size）と、を含む。なお、以下では、ウィンドウサイズＷＳのことを単に「ＷＳ」と記載することがある。
【００１５】
（ＭＳＳ）
ＭＳＳについて説明する前に、イーサネットフレームについて説明する。イーサネットのデータ通信は、フレームを最小単位として実行される。図１には、１個のフレームの構成が模式的に示されている。ＴＣＰのフレームは、イーサネットヘッダと、ＩＰヘッダと、ＴＣＰヘッダと、アプリケーションデータと、ＦＣＳ（Frame Check Sequence）と、を含む。イーサネットヘッダ、ＩＰヘッダ、ＴＣＰヘッダ、ＦＣＳは、それぞれ、１４バイト、２０バイト、２０バイト、４バイトのデータサイズを有する。これらのデータサイズは、イーサネットの規格として予め決められている。これに対し、アプリケーションデータのデータサイズは、フレームの通信を実行する通信装置（即ち、プリンタ１０、ＰＣ１００）によって決定される。
【００１６】
ＭＳＳは、１個のフレームに含まれるアプリケーションデータのデータサイズとして許容される最大データサイズである。例えば、ギガビットイーサネットではなく、１００ＢＡＳＥ又は１０ＢＡＳＥのような通常のイーサネットの規格では、１個のフレームの最大データサイズとして、１５１８バイトが予め決められている。従って、ギガビットイーサネットに対応せずに、通常のイーサネットのみに対応する通信装置は、通常、ＭＳＳとして１４６０（＝１５１８−１４−２０−２０−４）バイトを利用する。
【００１７】
これに対し、ギガビットイーサネットに対応する通信装置は、ＭＳＳとして１４６０バイトを超える値を利用し得る。このように、ＭＳＳとして１４６０バイトを超える値が利用されると、通信対象のフレーム内のアプリケーションデータのデータサイズが、１４６０バイトよりも大きな値になる。１４６０バイトよりも大きなデータサイズを有するアプリケーションデータを含むフレームのことを「ジャンボフレーム」と呼ぶ。
【００１８】
プリンタ１０のユーザは、操作部１２を操作して、ジャンボフレームを利用した通信が実行されるのを望むのか否か（ジャンボフレーム設定＝ＯＮ又はＯＦＦ）を選択することができる。ユーザは、ジャンボフレーム設定として「ＯＮ」を選択する場合に、さらに、１個のジャンボフレームのデータサイズの値を指定することができる。ユーザは、通常のイーサネットで利用されるフレームのデータサイズである１５１８バイトよりも大きく、かつ、後述のＦＩＦＯ受信バッファＦＲＢの容量（＝ＦＩＦＯ送信バッファＦＳＢの容量）よりも小さい値を、１個のジャンボフレームのデータサイズの値として指定することができる。１個のジャンボフレームのデータサイズの値から５８（＝１４＋２０＋２０＋４）バイトが減算されると、ユーザによって指定されたＭＳＳの値が得られる。なお、以下では、通常のイーサネットで利用されるＭＳＳの値（即ち１４６０バイト）のことを「ＭＳＳの通常値」と呼び、ユーザによって指定されたＭＳＳの値（例えば４０００バイト）のことを「ＭＳＳの指定値」と呼ぶ。
【００１９】
プリンタ１０の決定部３４（図１参照）は、ジャンボフレーム設定として「ＯＦＦ」が選択される場合に、ＭＳＳの通常値（即ち１４６０バイト）を、メモリ２４内の設定値ＳＶとして記憶させる。即ち、決定部３４は、プリンタ１０のＭＳＳとして、ＭＳＳの通常値を決定する。一方において、決定部３４は、ジャンボフレーム設定として「ＯＮ」が選択される場合に、通常、ＭＳＳの指定値（例えば４０００バイト）を、メモリ２４内の設定値ＳＶとして記憶させる。即ち、決定部３４は、通常、プリンタ１０のＭＳＳとして、ＭＳＳの指定値を決定する。ただし、後述するように、決定部３４は、ジャンボフレーム設定として「ＯＮ」が選択される場合に、データの取りこぼしの回数に応じて、プリンタ１０のＭＳＳの値を変更する（図５参照）。
【００２０】
なお、プリンタ１０は、複数個の通信プロトコルを利用して、データの通信を実行可能である。複数個の通信プロトコルは、例えば、印刷データの通信に利用されるＬＰＲ（Line PRinter daemon protocol）、ウェブコンテンツの通信に利用されるＨＴＴＰ（Hyper Text Transfer Protocol）等を含む。プリンタ１０のＭＳＳは、複数個の通信プロトコルに共通する値である。即ち、プリンタ１０は、複数個の通信プロトコルのうちのいずれに従って通信が実行されるべき際にも、ＭＳＳの値として共通の値を利用する。従って、後述のウィンドウサイズＷＳと異なり、プリンタ１０には、１個のＭＳＳの値が設定される。
【００２１】
（ウィンドウサイズＷＳ）
ＷＳについて説明する前に、メモリバッファＭＢ（Memory Buffer）について説明する。プリンタ１０の制御部２０は、通信相手（即ちＰＣ１０）と通信を実行すべき際に、メモリ２４のＲＡＭ内にメモリバッファＭＢを確保する。メモリバッファＭＢは、ＬＡＮ４から受信されるフレーム（以下では「受信フレーム」と呼ぶ）を記憶するための受信用バッファである。特に、メモリバッファＭＢは、後述のＦＩＦＯ受信バッファＦＲＢからメモリ２４に移動させた後の受信フレームを記憶する。なお、プリンタ１０の制御部２０は、通信相手と通信を実行すべき際に、メモリ２４のＲＡＭ内に、ＬＡＮ４に送信されるフレーム（以下では「送信フレーム」と呼ぶ）を記憶するための送信用バッファも確保する。ただし、図１では、当該送信用バッファを図示省略している。
【００２２】
プリンタ１０のＷＳは、ＲＡＭ内に確保されるメモリバッファＭＢの記憶容量に関係する値である。より具体的に言うと、ＷＳは、メモリバッファＭＢが同時的に記憶可能な受信データ（１個以上の受信フレーム）のデータサイズである。ＷＳの値は、通信プロトコル毎に異なる。即ち、本実施例では、図１に示されるように、複数個の通信プロトコルに対応する複数個のウィンドウサイズ（即ちＷＳ（Ｐ１）、ＷＳ（Ｐ２）等）が存在する。なお、ＷＳ（Ｐ１）は、通信プロトコルＰ１（例えばＬＰＲ）に対応するウィンドウサイズを意味し、ＷＳ（Ｐ２）は、通信プロトコルＰ２（例えばＨＴＴＰ）に対応するウィンドウサイズを意味する。
【００２３】
通信プロトコルが異なれば、受信フレームに対する処理の内容が異なる。従って、例えば、比較的に長時間を要する処理が実行される通信プロトコルについては、比較的に大きなＷＳの値が採用されることが好ましい。本実施例では、このような観点に鑑みて、通信プロトコル毎にＷＳの値が決められる。
【００２４】
プリンタ１０の出荷段階では、複数個の通信プロトコルに対応する複数個のＷＳの値が、プリンタ１０のベンダによって予め決められている。以下では、ベンダによって決められたＷＳの値のことを「ＷＳの初期値」と呼ぶ。プリンタ１０の決定部３４（図１参照）は、通常、ＷＳの初期値を、メモリ２４内の設定値ＳＶとして記憶させる。即ち、決定部３４は、通常、プリンタ１０のＷＳとして、ＷＳの初期値を決定する。ただし、後述するように、決定部３４は、ジャンボフレーム設定として「ＯＦＦ」が選択される場合に、データの取りこぼしの回数に応じて、プリンタ１０のＷＳの値を変更する（図３参照）。
【００２５】
ＭＡＣチップ４０は、ＯＳＩ（Open Systems Interconnection）参照モデルのデータリンク層の副層であるＭＡＣ層の処理を実行する。ＭＡＣチップ４０は、ＦＩＦＯ（First In First Out）送信バッファＦＳＢと、ＦＩＦＯ受信バッファＦＲＢと、を備える。ＦＩＦＯ送信バッファＦＳＢは、少なくとも１個の送信フレームを記憶するための記憶容量を有する。ＦＩＦＯ受信バッファＦＲＢは、少なくとも１個の受信フレームを記憶するための記憶容量を有する。２つのバッファＦＳＢ，ＦＲＢの記憶容量は等しい。この記憶容量は、通常のイーサネットで利用される１個のフレームの最大データサイズである１５１８バイトよりも大きい。
【００２６】
ＰＨＹチップ５０は、ＯＳＩ参照モデルの物理層の処理を実行する。ＰＨＹチップ５０は、ＬＡＮ４に接続されていると共に、ＭＡＣチップ４０に接続されている。ＦＩＦＯ送信バッファＦＳＢに記憶されている送信フレームは、ＰＨＹチップ５０を介して、ＬＡＮ４に送信される。また、ＬＡＮ４から受信される受信フレームは、ＰＨＹチップ５０を介して、ＦＩＦＯ受信バッファＦＲＢに記憶される。
【００２７】
（ＰＣ１００の構成）
ＰＣ１００は、図示省略の操作部、表示部、制御部等を備える。ＰＣ１００は、プリンタ１０のためのプリンタドライバを記憶している。ＰＣ１００は、プリンタドライバに従って、印刷データをプリンタ１０に送信可能である。なお、ＰＣ１００には、ＰＣ１００のＭＳＳと、ＰＣ１００のウィンドウサイズと、が設定される。
【００２８】
（プリンタ１０が実行する通信処理；図２）
プリンタ１０とＰＣ１００との間では、ＴＣＰ（Transmission Control Protocol）を利用した通信が実行される。例えば、ユーザは、ＰＣ１００の操作部（図示省略）を操作して、印刷対象のデータ（以下では「印刷データ」と呼ぶ）を選択することができる。この場合、ＰＣ１００は、印刷データをプリンタ１０に送信するための通信セッションを確立するために、プリンタ１０とネゴシエーションを実行する。
【００２９】
具体的に言うと、ＰＣ１００は、まず、ＰＣ１００のＭＳＳを含むＳＹＮ信号をプリンタ１０に送信する。これにより、プリンタ１０は、ＰＣ１００のＭＳＳを取得することができる。なお、ＳＹＮ信号は、さらに、印刷データの通信に利用されるべき通信プロトコルに対応する情報（例えばＬＰＲに対応するポート番号）を含む。これにより、プリンタ１０は、プリンタ１０が利用すべき通信プロトコル（以下では「対象の通信プロトコル」と呼ぶ）を知ることができる。
【００３０】
次いで、プリンタ１０の通知部３６（図１参照）は、メモリ２４内の設定値ＳＶの中から、ＭＳＳと、対象の通信プロトコルに対応するＷＳ（以下では「ＷＳ（Ｐｔ）」と表現する）と、を取得する。次いで、通知部３６は、プリンタ１０のＭＳＳ及びＷＳ（Ｐｔ）を含むＳＹＮ／ＡＣＫ信号をＰＣ１００に送信することによって、プリンタ１０のＭＳＳ及びＷＳ（Ｐｔ）をＰＣ１００に通知する。これにより、ＰＣ１００は、プリンタ１０のＭＳＳ及びＷＳ（Ｐｔ）を取得することができる。
【００３１】
次いで、ＰＣ１００は、ＡＣＫ信号をプリンタ１０に送信する。この結果、プリンタ１０とＰＣ１００との間で、通信セッションが確立される。なお、この際に、プリンタ１０の制御部２０は、メモリ２４のＲＡＭ内に、ＷＳ（Ｐｔ）のデータサイズを有するメモリバッファ（受信用バッファ）ＭＢを確保する。また、プリンタ１０とＰＣ１００とは、対象の通信プロトコルに従って、以下の通信処理を実行する。
【００３２】
まず、ＰＣ１００は、印刷データを複数個の部分印刷データに分割する。この際に、ＰＣ１００は、ＰＣ１００のＭＳＳとプリンタ１０のＭＳＳとのうちの小さい方の値を選択して、当該値を、１個の部分印刷データのデータサイズとして決定する。従って、ＰＣ１００によって選択されるＭＳＳの値が大きい程、分割後の部分印刷データの数が少なくなり、その結果、ＰＣ１００でのデータ分割に要する処理時間と、プリンタ１０でのデータ結合に要する処理時間と、を短くすることができる。即ち、ＭＳＳの値として大きな値が利用される場合、即ち、ジャンボフレームが利用される場合には、通常のイーサネットのフレーム（１５１８バイト）が利用される場合と比べて、プリンタ１０及びＰＣ１００の処理時間が少なくて済み、その結果、データの通信速度が向上する。
【００３３】
次いで、ＰＣ１００は、１個の部分印刷データをアプリケーションデータとして含む１個のフレームＦ１を生成して、プリンタ１０に送信する。フレームＦ１は、プリンタ１０のＰＨＹチップ５０を介して、ＭＡＣチップ４０内のＦＩＦＯ受信バッファＦＲＢに記憶される。上述したように、ＦＩＦＯ受信バッファＦＲＢの記憶容量は、通常のイーサネットで利用される１個のフレームの最大データサイズである１５１８バイトよりも大きく、しかも、ユーザによって指定される１個のジャンボフレームのデータサイズよりも大きい。従って、ＰＣ１００が、ＰＣ１００のＭＳＳとプリンタ１０のＭＳＳとのうちの小さい方の値を基準として１個のフレームを生成すれば、当該フレームのデータサイズは、必ず、ＦＩＦＯ受信バッファＦＲＢの記憶容量よりも小さくなる。従って、１個のフレームのデータサイズがＦＩＦＯ受信バッファＦＲＢの記憶容量よりも大きくなり、その結果、プリンタ１０が１個のフレームも受信することができないという事象が発生するのを抑制することができる。
【００３４】
プリンタ１０の制御部２０は、ＦＩＦＯ受信バッファＦＲＢ内のフレームＦ１を、メモリバッファＭＢに移動させる。これにより、ＦＩＦＯ受信バッファＦＲＢが解放される。次いで、制御部２０は、メモリバッファＭＢ内のフレームＦ１に従った処理を実行する。例えば、制御部２０は、フレームＦ１内の部分印刷データに従って、印刷実行部１６に印刷を実行させるための処理（例えば、印刷実行部１６に駆動信号を送信する処理）を実行する。制御部２０は、フレームＦ１に従った処理を終えると、フレームＦ１をメモリバッファＭＢから消去する。これにより、メモリバッファＭＢが解放される。
【００３５】
上述したように、ＰＣ１００は、ネゴシエーションを実行する際に、プリンタ１０のＷＳ（Ｐｔ）を取得する。ＰＣ１００は、ＰＣ１００が生成する１個のフレームのデータサイズと、プリンタ１０のＷＳ（Ｐｔ）と、に基づいて、プリンタ１０のメモリバッファＭＢが何個のフレームを同時的に記憶可能であるのかを算出する。例えば、プリンタ１０のＷＳ（Ｐｔ）の値が、１個のフレームのデータサイズの２倍に相当する値である場合には、プリンタ１０のメモリバッファＭＢは、２個のフレームを同時的に記憶可能である。この場合、ＰＣ１００は、プリンタ１０からＡＣＫ（即ち受信確認）を受信しなくても連続して送信可能なフレームの個数として、「２」を決定する。
【００３６】
ＰＣ１００が連続して送信可能なフレームの個数が「２」に決定される例（図２の例）では、ＰＣ１００は、フレームＦ１を送信した後に、プリンタ１０からＡＣＫを受信しなくても、次のフレームＦ２を送信する。次いで、ＰＣ１００は、プリンタ１０からＡＣＫを受信するまで待機する。ＰＣ１００は、プリンタ１０からＡＣＫを受信すると、２個のフレームＦ３，Ｆ４を連続して送信し、次いで、プリンタ１０からＡＣＫを受信するまで再び待機する。
【００３７】
なお、プリンタ１０は、ＰＣ１００と異なり、１個以上のフレームを受信すると、適宜、ＡＣＫをＰＣ１００に送信する。例えば、ＰＣ１００が連続して送信可能なフレームの個数が「２」に決定される場合には、プリンタ１０は、１個又は２個のフレームを受信すると、ＡＣＫをＰＣ１００に送信する。
【００３８】
例えば、ＦＩＦＯ受信バッファＦＲＢ内のフレームがメモリバッファＭＢに移動される前に、ＰＣ１００からプリンタ１０に次のフレームが送信されると、ＦＩＦＯ受信バッファＦＲＢの空き容量が足らないために、ＦＩＦＯ受信バッファＦＲＢが上記の次のフレームを記憶することができない事象が発生し得る。この場合、ＭＡＣチップ４０において、上記の次のフレームが破棄される。以下では、このようにして、ＦＩＦＯ受信バッファＦＲＢが、ＰＣ１００からプリンタ１０に送信されるフレーム（即ちデータ）を格納することができない現象のことを、「フレーム（データ）の取りこぼし（dropping of frame(data)）」と呼ぶ。
【００３９】
例えば、ギガビットイーサネットのように、ＰＣ１００からプリンタ１０へのフレームの送信頻度が高い環境では、フレームの取りこぼしが発生し易い。ＰＣ１００からプリンタ１０へのフレームの送信頻度（即ちＰＣ１００のソフトウェア処理の速度）が、ＦＩＦＯ受信バッファＦＲＢ内のフレームをメモリバッファＭＢに移動させる頻度（即ちプリンタ１０のソフトウェア処理の速度）を上回ってしまうからである。特に、ギガビットイーサネットの環境において、ジャンボフレームが利用されると、フレームの取りこぼしがより発生し易くなる。ジャンボフレームが利用される場合には、１個のフレームのデータサイズが大きくなるために、ＦＩＦＯ受信バッファＦＲＢは、１個のフレームを記憶するのに多くの記憶容量を必要とするからである。
【００４０】
図２の例では、プリンタ１０において、フレームＦ４の取りこぼしが発生している。プリンタ１０の生成部３０（図１参照）は、１回の通信セッションが確立されている期間Ｔの間に発生する取りこぼしの回数をカウントして、メモリ２４に記憶させる。従って、生成部３０は、フレームＦ４の取りこぼしが発生すると、取りこぼし回数として「１」をカウントする。なお、生成部３０は、ソフトウェアによって実現されるカウンタである。
【００４１】
プリンタ１０でのフレームＦ４の取りこぼしが発生したために、プリンタ１０は、フレームＦ３及びＦ４の受信確認であるＡＣＫをＰＣ１００に送信しない。ＰＣ１００は、フレームＦ４を送信してから所定時間が経過しても、プリンタ１０からＡＣＫを受信することができない場合に、フレームＦ３及びＦ４をプリンタ１０に再び送信する。このような再送信が実行される場合には、プリンタ１０とＰＣ１００との間でのデータ（図２の例では印刷データ）の通信速度が低下してしまう。従って、本実施例では、プリンタ１０は、後述の図３及び図５の処理を実行することにより、フレームの取りこぼしが発生するのを抑制する。
【００４２】
なお、ＰＣ１００は、全ての印刷データをプリンタ１０に送信し終えると、ＦＩＮ信号をプリンタ１０に送信する。次いで、プリンタ１０とＰＣ１００との間で、ＡＣＫ信号、ＦＩＮ信号、ＡＣＫ信号が順に通信される。これにより、プリンタ１０とＰＣ１００との間で確立されていた通信セッションが切断される。プリンタ１０の制御部２０は、通信セッションが切断されると、当該通信セッションの次の通信セッションのためのネゴシエーションが実行される前に、パラメータ変更処理を実行する（Ｓ１０）。
【００４３】
（パラメータ変更処理）
制御部２０は、まず、現在のジャンボフレーム設定が「ＯＮ」であるのか「ＯＦＦ」であるのかを判断する。制御部２０は、ジャンボフレーム設定が「ＯＦＦ」である場合に、図３のパラメータ変更処理を実行し、ジャンボフレーム設定が「ＯＮ」である場合に、図５のパラメータ変更処理を実行する。
【００４４】
（ジャンボフレーム設定＝「ＯＦＦ」である場合；図３）
ジャンボフレーム設定が「ＯＦＦ」である場合には、プリンタ１０の決定部３４は、図３のパラメータ変更処理に従って、プリンタ１０のＷＳ（Ｐｔ）の値を変更し得る。ただし、この場合、決定部３４は、プリンタ１０のＭＳＳの値（即ちＭＳＳの通常値（１４６０バイト））を変更しない。
【００４５】
図３のパラメータ変更処理では、Ｓ２０において、取得部３２（図１参照）は、期間Ｔ（即ち１回の通信セッションが確立されている期間；図２参照）の取りこぼし回数を取得する。上述したように、生成部３０は、期間Ｔの取りこぼし回数をカウントしている。取得部３２は、生成部３０のカウンタから取りこぼし回数を読み込むことによって、取りこぼし回数を取得する。
【００４６】
次いで、Ｓ２２において、決定部３４は、取りこぼし回数が閾値Ｔｈ１以上であるのか否かを判断する。本実施例では、閾値Ｔｈ１として「１」を採用するが、変形例では、他の値（「２」、「３」等）を採用してもよい。取りこぼし回数が閾値Ｔｈ１以上である場合（Ｓ２２でＹＥＳの場合）には、Ｓ２４において、決定部３４は、ＷＳ（Ｐｔ）の現在の値（即ち、メモリ２４内の設定値ＳＶとして現在記憶されているＷＳ（Ｐｔ）の値）が下限値よりも大きいのか否かを判断する。ＷＳ（Ｐｔ）の下限値は、現在のＭＳＳ（即ち１４６０バイト）と５８バイト（＝１４＋２０＋２０＋４（図１参照））との和（即ち１５１８バイト）に相当する値である。即ち、ＷＳ（Ｐｔ）の下限値は、通常のイーサネットで利用される１個のフレームの最大データサイズである。このような下限値を採用することにより、ＷＳ（Ｐｔ）の値が１個のフレームのデータサイズよりも小さくなってしまって、メモリバッファＭＢに１個のフレームも記憶させることができない事象が発生するのを抑制することができる。
【００４７】
ＷＳ（Ｐｔ）の現在の値が下限値よりも大きい場合（Ｓ２４でＹＥＳの場合）には、Ｓ２６において、決定部３４は、ＷＳ（Ｐｔ）の新たな値を算出する。具体的に言うと、決定部３４は、ＷＳ（Ｐｔ）の現在の値から所定値を減算することによって、ＷＳ（Ｐｔ）の新たな値を算出する。本実施例では、上記の所定値として、ＷＳ（Ｐｔ）の初期値の１０％に相当する値を採用しているが、変形例では、他の値（例えば初期値の５％に相当する値）を採用してもよい。なお、Ｓ２６では、決定部３４は、ＷＳ（Ｐｔ）の新たな値が下限値よりも小さくならないように、ＷＳ（Ｐｔ）の新たな値を算出する。
【００４８】
Ｓ２６では、さらに、決定部３４は、メモリ２４内の設定値ＳＶとして記憶されているＷＳ（Ｐｔ）の現在の値に代えて、算出済みの新たな値を記憶させる。これにより、ＷＳ（Ｐｔ）が、現在の値から、現在の値よりも小さな新たな値に変更される。Ｓ２６では、決定部３４は、対象の通信プロトコルに対応するウィンドウサイズ（例えばＷＳ（Ｐ１））を変更するが、対象の通信プロトコル以外の通信プロトコルに対応するウィンドウサイズ（例えばＷＳ（Ｐ２））を変更しない。なお、ＷＳ（Ｐｔ）の現在の値が下限値に等しい場合（Ｓ２４でＮＯの場合）には、決定部３４は、Ｓ２６を実行せずに、パラメータ変更処理を終了する。
【００４９】
一方において、取りこぼし回数が閾値Ｔｈ１よりも小さい場合（Ｓ２２でＮＯの場合）には、Ｓ３２において、決定部３４は、取りこぼし回数が、閾値Ｔｈ１と異なる閾値Ｔｈ２以下であるのか否かを判断する。本実施例では、閾値Ｔｈ２として「０」を採用するが、閾値Ｔｈ２として別の値（「１」、「２」等）を採用してもよい。取りこぼし回数が閾値Ｔｈ２以下である場合（Ｓ３２でＹＥＳの場合）には、Ｓ３４において、決定部３４は、ＷＳ（Ｐｔ）の現在の値が上限値よりも小さいのか否かを判断する。ＷＳ（Ｐｔ）の上限値は、ＷＳ（Ｐｔ）の初期値である。このような上限値を採用することにより、ＷＳ（Ｐｔ）の値が、プリンタ１０のベンダによって決められた値よりも大きくなってしまうことを抑制することができる。
【００５０】
ＷＳ（Ｐｔ）の現在の値が上限値よりも小さい場合（Ｓ３４でＹＥＳの場合）には、Ｓ３６において、決定部３４は、ＷＳ（Ｐｔ）の新たな値を算出する。具体的に言うと、決定部３４は、ＷＳ（Ｐｔ）の現在の値に所定値を加算することによって、ＷＳ（Ｐｔ）の新たな値を算出する。本実施例では、Ｓ３６で利用される所定値は、Ｓ２６で利用される所定値と同じ値であるが、変形例では、２つの所定値は、異なる値であってもよい。なお、Ｓ３６では、決定部３４は、ＷＳ（Ｐｔ）の新たな値が上限値よりも大きくならないように、ＷＳ（Ｐｔ）の新たな値を算出する。
【００５１】
Ｓ３６では、さらに、決定部３４は、メモリ２４内の設定値ＳＶとして記憶されているＷＳ（Ｐｔ）の現在の値に代えて、算出済みの新たな値を記憶させる。これにより、ＷＳ（Ｐｔ）が、現在の値から、現在の値よりも大きな新たな値に変更される。Ｓ２６と同様に、Ｓ３６では、決定部３４は、対象の通信プロトコルに対応するウィンドウサイズ（例えばＷＳ（Ｐ１））のみを変更する。なお、ＷＳ（Ｐｔ）の現在の値が上限値に等しい場合（Ｓ３４でＮＯの場合）には、決定部３４は、Ｓ３６を実行せずに、パラメータ変更処理を終了する。
【００５２】
（図３のフローを利用する具体例；図４）
例えば、ＷＳ（Ｐ１）の初期値が１４６００バイトであり、メモリ２４内の設定値ＳＶとしてＷＳ（Ｐ１）＝１４６００バイトが記憶されている状況を想定する。ＰＣ１００からプリンタ１０に第１の印刷データが送信されるべき際には、プリンタ１０の通知部３６は、ＷＳ（Ｐ１）＝１４６００バイトと、プリンタ１０のＭＳＳと、をＰＣ１００に通知する。これにより、プリンタ１０とＰＣ１００との間で、第１の通信プロトコルＰ１（例えばＬＰＲ）を利用した第１の通信セッションが確立される。
【００５３】
仮に、第１の通信セッションが確立されている間に、プリンタ１０での取りこぼしが発生したとする。この場合、プリンタ１０の決定部３４は、第１の通信セッションが切断された後に、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝１４６００バイトの代わりに、ＷＳ（Ｐ１）＝１３１４０バイトを新たに記憶させる（図３のＳ２６）。
【００５４】
その後、ＰＣ１００からプリンタ１０に第２の印刷データが送信されるべき際には、プリンタ１０の通知部３６は、ＷＳ（Ｐ１）＝１３１４０バイトと、プリンタ１０のＭＳＳと、をＰＣ１００に通知する。これにより、プリンタ１０とＰＣ１００との間で、第１の通信プロトコルＰ１を利用した第２の通信セッションが確立される。
【００５５】
第２の通信セッションを利用した通信では、第１の通信セッションを利用した通信と比べて、プリンタ１０のＷＳ（Ｐ１）が小さい。従って、ＰＣ１００が連続して送信可能なフレームの個数が少なくなり得る。この場合、ＰＣ１００からプリンタ１０へのフレームの送信頻度が低くなるために、プリンタ１０でのフレームの取りこぼしが発生し難くなる。従って、図４の例では、第２の通信セッションが確立されている間に、プリンタ１０での取りこぼしが発生しない。このように、本実施例では、通信対象のデータを受信する側のデバイスであるプリンタ１０は、データの取りこぼしが発生する場合に、プリンタ１０自身のウィンドウサイズを小さな値に変更する。従って、プリンタ１０での取りこぼしの発生を適切に抑制することができる。この結果、ＰＣ１００がフレームの再送信を実行しなくて済むために、通信速度が低下するのを抑制することができる。
【００５６】
なお、第２の通信セッションが確立されている間に、プリンタ１０での取りこぼしが発生しないために、プリンタ１０の決定部３４は、第２の通信セッションが切断された後に、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝１３１４０バイトの代わりに、ＷＳ（Ｐ１）＝１４６００バイトを新たに記憶させる（図３のＳ３６）。このために、その後、、第１の通信プロトコルＰ１を利用した第３の通信セッションが新たに確立されるべき際には、プリンタ１０の通知部３６は、ＷＳ（Ｐ１）＝１４６００バイトと、プリンタ１０のＭＳＳと、をＰＣ１００に通知する。このように、本実施例では、通信対象のデータを受信する側のデバイスであるプリンタ１０は、データの取りこぼしが発生しない場合に、プリンタ自身のＷＳを大きな値に変更する。即ち、本実施例では、プリンタ１０での取りこぼしの発生を抑制しながら、ある程度大きなＷＳの値を利用して、高い通信速度を実現することができる。
【００５７】
なお、図４の例では、決定部３４は、第１及び第２の通信セッションで利用された通信プロトコルＰ１に対応するウィンドウサイズＷＳ（Ｐ１）を変更するが、他の通信プロトコルに対応するウィンドウサイズ（例えばＷＳ（Ｐ２））を変更しない。従って、第２の通信セッションが切断された後に、第２の通信プロトコルＰ２を利用した通信セッションが確立されるべき際には、通知部３６は、第２の通信セッションの通信結果に基づいて設定されるＷＳ（Ｐ１）と異なる値であるＷＳ（Ｐ２）を、ＰＣ１００に通知する。従って、プリンタ１０は、通信プロトコルに応じて、適切なＷＳの値をＰＣ１００に通知することができる。なお、変形例では、ＭＳＳと同様に、ＷＳも、複数個の通信プロトコルに共通する値であってもよい。
【００５８】
（ジャンボフレーム設定＝「ＯＮ」である場合；図５）
ジャンボフレーム設定が「ＯＮ」である場合には、プリンタ１０の決定部３４は、図５のパラメータ変更処理に従って、プリンタ１０のＭＳＳの値を変更し得る。ただし、この場合、決定部３４は、プリンタ１０のＷＳの値（即ちＷＳの初期値）を変更しない。
【００５９】
図５のパラメータ変更処理では、Ｓ４０，Ｓ４２，Ｓ５２は、図３のＳ２０，Ｓ２２，Ｓ３２と同様である。取りこぼし回数が閾値Ｔｈ１以上である場合（Ｓ４２でＹＥＳの場合）には、Ｓ４４において、決定部３４は、ＭＳＳの現在の値（即ち、メモリ２４内の設定値ＳＶとして現在記憶されているＭＳＳ）が下限値よりも大きいのか否かを判断する。ＭＳＳの下限値は、ＭＳＳの通常値（即ち１４６０バイト）である。このような下限値を採用することにより、プリンタ１０のＭＳＳの値がＭＳＳの通常値よりも小さい値になってしまって、通信速度が大幅に低下する事象が発生するのを抑制することができる。
【００６０】
ＭＳＳの現在の値が下限値よりも大きい場合（Ｓ４４でＹＥＳの場合）には、Ｓ４６において、決定部３４は、ＭＳＳの新たな値を算出する。具体的に言うと、決定部３４は、ＭＳＳの現在の値から所定値を減算することによって、ＭＳＳの新たな値を算出する。本実施例では、上記の所定値として、ＭＳＳの指定値の１０％に相当する値を採用しているが、変形例では、他の値（例えば指定値の５％に相当する値）を採用してもよい。なお、Ｓ４６では、決定部３４は、ＭＳＳの新たな値が下限値よりも小さくならないように、ＭＳＳの新たな値を算出する。
【００６１】
Ｓ４６では、さらに、決定部３４は、メモリ２４内の設定値ＳＶとして記憶されているＭＳＳの現在の値に代えて、算出済みの新たな値を記憶させる。これにより、ＭＳＳが、現在の値から、現在の値よりも小さな新たな値に変更される。なお、ＭＳＳの現在の値が下限値に等しい場合（Ｓ４４でＮＯの場合）には、決定部３４は、Ｓ４６を実行せずに、パラメータ変更処理を終了する。
【００６２】
一方において、取りこぼし回数が閾値Ｔｈ２以下である場合（Ｓ５２でＹＥＳの場合）には、Ｓ５４において、決定部３４は、ＭＳＳの現在の値が上限値よりも小さいのか否かを判断する。ＭＳＳの上限値は、ＭＳＳの指定値である。このような上限値を採用することにより、ＭＳＳの値が、ユーザによって指定された値よりも大きくなってしまうことを抑制することができる。
【００６３】
ＭＳＳの現在の値が上限値よりも小さい場合（Ｓ５４でＹＥＳの場合）には、Ｓ５６において、決定部３４は、ＭＳＳの新たな値を算出する。具体的に言うと、決定部３４は、ＭＳＳの現在の値に所定値を加算することによって、ＭＳＳの新たな値を算出する。本実施例では、Ｓ５６で利用される所定値は、Ｓ４６で利用される所定値と同じ値であるが、、変形例では、２つの所定値は、異なる値であってもよい。なお、Ｓ５６では、決定部３４は、ＭＳＳの新たな値が上限値よりも大きくならないように、ＭＳＳの新たな値を算出する。
【００６４】
Ｓ５６では、さらに、決定部３４は、メモリ２４内の設定値ＳＶとして記憶されているＭＳＳの現在の値に代えて、算出済みの新たな値を記憶させる。これにより、ＭＳＳが、現在の値から、現在の値よりも大きな新たな値に変更される。なお、ＭＳＳの現在の値が上限値に等しい場合（Ｓ５４でＮＯの場合）には、決定部３４は、Ｓ５６を実行せずに、パラメータ変更処理を終了する。
【００６５】
（図５のフローを利用する具体例；図６）
例えば、ＭＳＳの指定値が４０００バイトであり、メモリ２４内の設定値ＳＶとしてＭＳＳ＝４０００バイトが記憶されている状況を想定する。図４の具体例と同様の第１の通信セッションが確立されるべき際に、プリンタ１０の通知部３６は、ＷＳ（Ｐ１）と、ＭＳＳ＝４０００バイトと、をＰＣ１００に通知する。仮に、第１の通信セッションが確立されている間に、プリンタ１０での取りこぼしが発生したとする。この場合、プリンタ１０の決定部３４は、第１の通信セッションが切断された後に、メモリ２４内の設定値ＳＶとして、ＭＳＳ＝４０００バイトの代わりに、ＭＳＳ＝３６００バイトを新たに記憶させる（図５のＳ４６）。
【００６６】
その後、第２の通信セッションが確立されるべき際に、プリンタ１０の通知部３６は、ＷＳ（Ｐ１）と、ＭＳＳ＝３６００バイトと、をＰＣ１００に通知する。第２の通信セッションを利用した通信では、第１の通信セッションを利用した通信と比べて、プリンタ１０のＭＳＳが小さい。従って、ＰＣ１００は、プリンタ１０のＭＳＳを基準として１個のフレームのデータサイズを決定すれば、当該データサイズとして比較的に小さな値を採用し得る。この場合、１個のフレームのデータサイズが小さくなるために、プリンタ１０での取りこぼしが発生し難くなる。従って、図６の例では、第２の通信セッションが確立されている間に、プリンタ１０での取りこぼしが発生しない。このように、本実施例では、プリンタ１０は、データの取りこぼしが発生する場合に、プリンタ１０自身のＭＳＳを小さな値に変更する。従って、プリンタ１０での取りこぼしの発生を適切に抑制することができ、通信速度が低下するのを抑制することができる。
【００６７】
なお、第２の通信セッションが確立されている間に、プリンタ１０でのフレームの取りこぼしが発生しないために、プリンタ１０の決定部３４は、第２の通信セッションが切断された後に、メモリ２４内の設定値ＳＶとして、ＭＳＳ＝３６００バイトの代わりに、ＭＳＳ＝４０００バイトを新たに記憶させる（図５のＳ５６）。このように、本実施例では、プリンタ１０は、データの取りこぼしが発生しない場合に、プリンタ自身のＭＳＳを大きな値に変更する。即ち、本実施例では、プリンタ１０での取りこぼしの発生を抑制しながら、ある程度大きなＭＳＳの値を利用して、高い通信速度を実現することができる。
【００６８】
なお、ＷＳとは異なり、ＭＳＳは、複数個の通信プロトコルに共通する値である。従って、例えば、第１の通信プロトコルＰ１を利用した第２の通信セッションが切断された後に、第２の通信プロトコルＰ２を利用した第３の通信セッションが確立されるべき際に、通知部３６は、第２の通信セッションの通信結果に基づいて決定されるＭＳＳを、ＰＣ１００に通知する。従って、本実施例では、プリンタ１０は、複数個の通信プロトコルに共通するＭＳＳの値として、取りこぼしの発生を抑制し得る適切な値を通知することができる。
【００６９】
（対応関係）
プリンタ１０、ＰＣ１００が、それぞれ、「通信装置」、「外部装置」の一例である。期間Ｔの取りこぼし回数が「特定情報」の一例である。図４の例では、ウィンドウサイズＷＳ、第１の通信プロトコルＰ１が、それぞれ、「第１種のパラメータ」、「特定の通信プロトコル」の一例である。図４の例において、通信結果「取りこぼし回数≧１」が「第１の特定情報」の一例である場合には、１３１４０バイトが「現在の値よりも小さな第１の値」に対応し、通信結果「取りこぼし回数＝０」が「第１の特定情報」の一例である場合には、１４６００バイトが「現在の値よりも大きな第１の値」に対応する。図６の例では、ＭＳＳが「第１種のパラメータ」の一例である。図６の例において、通信結果「取りこぼし回数≧１」が「第１の特定情報」の一例である場合には、３６００バイトが「現在の値よりも小さな第１の値」に対応し、通信結果「取りこぼし回数＝０」が「第１の特定情報」の一例である場合には、４０００バイトが「現在の値よりも大きな第１の値」に対応する。
【００７０】
（第１実施例の変形例）
第１実施例では、制御部２０は、ジャンボフレーム設定が「ＯＮ」である場合に、図５のパラメータ変更処理を実行して、ＭＳＳの値を変更するが、ＷＳ（Ｐｔ）の値を変更しない。これに代えて、制御部２０は、ジャンボフレーム設定が「ＯＮ」である場合に、１回の通信セッションが切断される毎に、図３のパラメータ変更処理と、図５のパラメータ変更処理と、の両方を実行してもよい。従って、例えば、取りこぼし回数が比較的に大きい場合には、決定部３４は、ＷＳ（Ｐｔ）を、現在の値から、現在の値よりも小さな新たな値に変更すると共に、ＭＳＳを、現在の値から、現在の値よりも小さな新たな値に変更してもよい。また、例えば、取りこぼし回数が比較的に小さい場合には、決定部３４は、ＷＳ（Ｐｔ）を、現在の値から、現在の値よりも大きな新たな値に変更すると共に、ＭＳＳを、現在の値から、現在の値よりも大きな新たな値に変更してもよい。
【００７１】
一般的に言うと、決定部３４は、第１の特定情報が取得される場合に、第１の特定情報を用いて、第１種のパラメータの値（例えばＷＳ（Ｐｔ）の値）として第１の値を決定し、第２の特定情報が取得される場合に、第２の特定情報を用いて、第２種のパラメータの値（例えばＭＳＳの値）として第２の値を決定してもよい。本変形例では、第１の特定情報と第２の特定情報とは、同じ通信セッションが確立されている期間Ｔの間の取りこぼし回数（即ち同じ情報）である。
【００７２】
（第２実施例）
本実施例では、制御部２０は、ジャンボフレーム設定が「ＯＦＦ」である場合に、第１実施例と同様に、図３のパラメータ変更処理を実行する。ただし、制御部２０は、ジャンボフレーム設定が「ＯＮ」である場合に、図５のパラメータ変更処理の代わりに、図７のパラメータ変更処理を実行する。図７のパラメータ変更処理では、決定部３４は、取りこぼし回数が比較的に多い場合に、ＭＳＳとＷＳ（Ｐｔ）のうち、ＭＳＳの値を優先的に小さくし、取りこぼし回数が比較的に少ない場合に、ＭＳＳとＷＳ（Ｐｔ）のうち、ＷＳ（Ｐｔ）の値を優先的に大きくする。
【００７３】
Ｓ６０，Ｓ６２，Ｓ８２は、図３のＳ２０，Ｓ２２，Ｓ３２（図５のＳ４０，Ｓ４２，Ｓ５２）と同様である。取りこぼし回数が閾値Ｔｈ１以上である場合（Ｓ６２でＹＥＳの場合）には、Ｓ６４において、決定部３４は、ＭＳＳの現在の値が閾値Ｔｈ３よりも大きいのか否かを判断する。閾値Ｔｈ３は、ＭＳＳの指定値（例えば４０００バイト）よりも小さく、かつ、ＭＳＳの通常値（即ち１４６０バイト）よりも大きい値である。例えば、閾値Ｔｈ３は、ＭＳＳの指定値の５０％に相当する値である。
【００７４】
ＭＳＳの現在の値が閾値Ｔｈ３よりも大きい場合（Ｓ６４でＹＥＳの場合）には、Ｓ７２において、決定部３４は、ＭＳＳの値を、現在の値から、現在の値よりも小さな新たな値に変更する。Ｓ７２は、図５のＳ４６と同様である。なお、Ｓ６４でＹＥＳの場合のＳ７２では、決定部３４は、ＭＳＳの新たな値が閾値Ｔｈ３よりも小さくならないように、ＭＳＳの新たな値を算出する。
【００７５】
ＭＳＳの現在の値が閾値Ｔｈ３以下である場合（Ｓ６４でＮＯの場合）には、Ｓ６６において、決定部３４は、ＷＳ（Ｐｔ）の現在の値が閾値Ｔｈ４よりも大きいのか否かを判断する。閾値Ｔｈ４は、閾値Ｔｈ３と５８バイト（＝１４＋２０＋２０＋４（図２参照））との和に相当する値である。
【００７６】
ＷＳ（Ｐｔ）の現在の値が閾値Ｔｈ４よりも大きい場合（Ｓ６６でＹＥＳの場合）には、Ｓ７４において、決定部３４は、ＷＳ（Ｐｔ）の値を、現在の値から、現在の値よりも小さな新たな値に変更する。Ｓ７４は、図３のＳ２６と同様である。なお、Ｓ６６でＹＥＳの場合のＳ７４では、決定部３４は、ＷＳ（Ｐｔ）の新たな値が閾値Ｔｈ４よりも小さくならないように、ＷＳ（Ｐｔ）の新たな値を算出する。これにより、ＷＳ（Ｐｔ）の値が１個のフレームのデータサイズ（即ちＭＳＳの現在の値（閾値Ｔｈ３）＋５８バイト）よりも小さくなってしまう事象が発生するのを抑制することができる。
【００７７】
ＷＳ（Ｐｔ）の現在の値が閾値Ｔｈ４以下である場合（Ｓ６６でＮＯの場合）には、Ｓ６８に進む。なお、Ｓ６８、Ｓ７０は、それぞれ、図５のＳ４４、図３のＳ２４と同様である。また、Ｓ６８でＹＥＳの場合に実行されるＳ７２、Ｓ７０でＹＥＳの場合に実行されるＳ７４は、それぞれ、図５のＳ４６、図３のＳ２６と同様である。
【００７８】
一方において、取りこぼし回数が閾値Ｔｈ２以下である場合（Ｓ８２でＹＥＳの場合）には、Ｓ８４において、決定部３４は、ＷＳ（Ｐｔ）の現在の値が閾値Ｔｈ４（Ｓ６６で利用される閾値Ｔｈ４と同じ値）以下であるのか否かを判断する。ＷＳ（Ｐｔ）の現在の値が閾値Ｔｈ４以下である場合（Ｓ８４でＹＥＳの場合）には、Ｓ９２において、決定部３４は、ＷＳ（Ｐｔ）の値を、現在の値から、現在の値よりも大きな新たな値に変更する。Ｓ９２は、図３のＳ３６と同様である。
【００７９】
ＷＳ（Ｐｔ）の現在の値が閾値Ｔｈ４よりも大きい場合（Ｓ８４でＮＯの場合）には、Ｓ８６において、決定部３４は、ＭＳＳの現在の値が閾値Ｔｈ３（Ｓ６４で利用される閾値Ｔｈ３と同じ値）以下であるのか否かを判断する。ＭＳＳの現在の値が閾値Ｔｈ３以下である場合（Ｓ８６でＹＥＳの場合）には、Ｓ９４において、決定部３４は、ＭＳＳの値を、現在の値から、現在の値よりも大きな新たな値に変更する。Ｓ９４は、図５のＳ５６と同様である。
【００８０】
ＭＳＳの現在の値が閾値Ｔｈ３よりも大きい場合（Ｓ８６でＮＯの場合）には、Ｓ８８に進む。なお、Ｓ８８、Ｓ９０は、それぞれ、図３のＳ３４、図５のＳ５４と同様である。また、Ｓ８８でＹＥＳの場合に実行されるＳ９２、Ｓ９０でＹＥＳの場合に実行されるＳ９４は、それぞれ、図３のＳ３６、図５のＳ５６と同様である。
【００８１】
（図７のフローを利用する具体例；図８）
図８では、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝１４６００バイト（＝ＷＳ（Ｐ１）の初期値）と、ＭＳＳ＝４０００バイト（＝ＭＳＳの指定値）と、が記憶されている状況を想定している。通信セッションが確立されるべき際に、プリンタ１０の通知部３６は、ＷＳ（Ｐ１）＝１４６００バイトと、ＭＳＳ＝４０００バイトと、をＰＣ１００に通知する。プリンタ１０での取りこぼしが発生すると、プリンタ１０の決定部３４は、メモリ２４内の設定値ＳＶとして、ＭＳＳ＝４０００バイトの代わりに、ＭＳＳ＝３６００バイトを新たに記憶させる（図７のＳ６４でＹＥＳの場合のＳ７２）。その後の複数回の通信セッションでも、プリンタ１０での取りこぼしが発生する状態が続くと、決定部３４は、ＭＳＳの値を、３２００、２８００、・・・２０００バイト（即ち図７のＳ６４の閾値Ｔｈ３）まで順に変更する。
【００８２】
ＭＳＳ＝２０００バイトである状態で、プリンタ１０での取りこぼしが発生すると、決定部３４は、図７のＳ６４でＮＯと判断する。この場合、決定部３４は、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝１４６００バイトの代わりに、ＷＳ（Ｐ１）＝１３１４０バイトを新たに記憶させる（図７のＳ６６でＹＥＳの場合のＳ７４）。その後の複数回の通信セッション（特に通信プロトコルＰ１が利用される複数回の通信セッション）でも、プリンタ１０での取りこぼしが発生する状態が続くと、決定部３４は、ＷＳ（Ｐ１）の値を、１１６８０、１０２２０、・・・２０５８バイト（即ち図７のＳ６６の閾値Ｔｈ４）まで順に変更する。
【００８３】
ＷＳ（Ｐ１）＝２０５８バイトである状態で、プリンタ１０での取りこぼしが発生すると、決定部３４は、図７のＳ６６でＮＯと判断する。この場合、決定部３４は、メモリ２４内の設定値ＳＶとして、ＭＳＳ＝２０００バイトの代わりに、ＭＳＳ＝１６００バイトを新たに記憶させる（図７のＳ６８でＹＥＳの場合のＳ７２）。その後の通信セッションでも、プリンタ１０での取りこぼしが発生すると、決定部３４は、ＭＳＳの値を１４６０バイト（即ちＭＳＳの下限値（通常値））まで変更する。
【００８４】
ＭＳＳ＝１４６０バイトである状態で、プリンタ１０での取りこぼしが発生すると、決定部３４は、図７のＳ６８でＮＯと判断する。この場合、決定部３４は、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝２０５８バイトの代わりに、ＷＳ（Ｐ１）＝１５１８バイト（即ちＷＳ（Ｐ１）の下限値（ＭＳＳの現在の値＋５８バイト））を新たに記憶させる（図７のＳ７０でＹＥＳの場合のＳ７４）。
【００８５】
通常、ＭＳＳは、ウィンドウサイズと比べて、取りこぼしの発生に大きな影響を与える。例えば、ＭＳＳの値を１０％小さくすると、ウィンドウサイズの値を１０％小さくするよりも、取りこぼしの発生を効果的に抑制することができる。本実施例によると、プリンタ１０は、取りこぼしの発生回数が比較的に多い場合に、ＭＳＳ及びウィンドウサイズのうち、取りこぼしの発生に影響を与え易いＭＳＳの値を優先的に小さくする。従って、取りこぼしの発生を効果的に抑制することができる。
【００８６】
（図７のフローを利用する具体例；図９）
例えば、図８のシーケンスが実行された後、即ち、ＭＳＳ＝１４６０バイト、ＷＳ（Ｐ１）＝１５１８バイトに変更された後に、プリンタ１０での取りこぼしが発生しないと、図９に示されるように、プリンタ１０の決定部３４は、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝１５１８バイトの代わりに、ＷＳ（Ｐ１）＝２９７８バイトを新たに記憶させる（図７のＳ８４でＹＥＳの場合のＳ９２）。
【００８７】
ＷＳ（Ｐ１）＝２９７８バイトである状態で、プリンタ１０での取りこぼしが発生しないと、決定部３４は、図７のＳ８４でＮＯと判断する。この場合、決定部３４は、メモリ２４内の設定値ＳＶとして、ＭＳＳ＝１４６０バイトの代わりに、ＭＳＳ＝１８６０バイトを新たに記憶させる（図７のＳ８６でＹＥＳの場合のＳ９４）。その後の通信セッションでも、プリンタ１０での取りこぼしが発生しないと、決定部３４は、ＭＳＳの値を、２２６０バイトに変更する。
【００８８】
ＭＳＳ＝２２６０バイトである状態で、プリンタ１０での取りこぼしが発生すると、決定部３４は、図７のＳ８６でＮＯと判断する。この場合、決定部３４は、メモリ２４内の設定値ＳＶとして、ＷＳ（Ｐ１）＝２９７８バイトの代わりに、ＷＳ（Ｐ１）＝４４３８バイトを新たに記憶させる（図７のＳ８８でＹＥＳの場合のＳ９２）。その後の複数回の通信セッション（特に通信プロトコルＰ１が利用される複数回の通信セッション）でも、プリンタ１０での取りこぼしが発生しない状態が続くと、決定部３４は、ＷＳ（Ｐ１）の値を、５８９８、７３５８、・・・１４６００バイト（即ちＷＳ（Ｐ１）の上限値（初期値））まで変更する。
【００８９】
ＷＳ（Ｐ１）＝１４６００バイトである状態で、プリンタ１０での取りこぼしが発生しないと、決定部３４は、図７のＳ８８でＮＯと判断する。この場合、決定部３４は、メモリ２４内の設定値ＳＶとして、ＭＳＳ＝２２６０バイトの代わりに、ＭＳＳ＝２６６０バイトを新たに記憶させる（図７のＳ９０でＹＥＳの場合のＳ９４）。その後の複数回の通信セッションでも、プリンタ１０での取りこぼしが発生しない状態が続くと、決定部３４は、ＭＳＳの値を、３０６０、３４６０、・・・４０００バイト（即ちＭＳＳの上限値（指定値））まで順に変更する。
【００９０】
本実施例によると、プリンタ１０は、取りこぼしの発生回数が比較的に少ない場合に、ＭＳＳ及びウィンドウサイズのうち、取りこぼしの発生に影響を与え難いウィンドウサイズの値を優先的に大きくする。従って、取りこぼしの発生を抑制しながら、通信速度が向上するように、ウィンドウサイズの値を大きくすることができる。
【００９１】
（対応関係）
図８及び図９の例では、ＭＳＳ、ＷＳが、それぞれ、「第１種のパラメータ」、「第２種のパラメータ」の一例である。図８の最も上の通信結果「取りこぼし回数≧１」が「第１のタイミングで取得される第１の特定情報」の一例である場合には、ＭＳＳ＝３６００バイトが「現在の値よりも小さな第１の値」に対応し、図８の上から２番目の通信結果「取りこぼし回数≧１」が「第１のタイミングの後の第２のタイミングで取得される第２の特定情報」の一例である場合には、ＷＳ（Ｐ１）＝１３１４０バイトが「現在の値よりも小さな第２の値」に対応する。また、図９の最も上の通信結果「取りこぼし回数＝０」が「第３のタイミングで取得される第２の特定情報」の一例である場合には、ＷＳ（Ｐ１）＝２９７８バイトが「現在の値よりも大きな第２の値」に対応し、図９の上から２番目の通信結果「取りこぼし回数＝０」が「第３のタイミングの後の第４のタイミングで取得される第１の特定情報」の一例である場合には、ＭＳＳ＝１８６０バイトが「現在の値よりも大きな第１の値」に対応する。
【００９２】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【００９３】
（変形例１）上記の各実施例では、ＷＳ，ＭＳＳの値を決定するために１回の通信セッションの間の取りこぼし回数が利用されているが、これに代えて、１回の通信セッションの間の取りこぼしの有又は無を示す情報、１回の通信セッションの間の取りこぼしの確率（取りこぼし回数／受信フレームの数）を示す情報、１回の通信セッションの間の単位時間当りの取りこぼし回数を示す情報等が利用されてもよい。一般的に言うと、決定部３４は、データの取りこぼしに関する情報を用いて、ＷＳ，ＭＳＳの値を決定すればよい。
【００９４】
（変形例２）上記の各実施例及び変形例１では、生成部３０は、１回の通信セッションを基準として、「特定情報」を生成する。しかしながら、生成部３０は、通信セッションに関係ない所定期間（例えば、パラメータ変更処理が実行される直前の所定時間）を基準として、「特定情報」を生成してもよい。
【００９５】
（変形例３）上記の各実施例では、生成部３０は、ソフトウェアによって実現されるカウンタである。これに代えて、ＭＡＣチップ４０が取りこぼし回数をカウントする機能を備えていてもよい。この場合、図３のＳ２０等では、取得部３２は、ＭＡＣチップ４０から取りこぼし回数を取得してもよい。本変形例では、ＭＡＣチップが「生成部」の一例である。
【００９６】
（変形例４）上記の各実施例では、制御部２０は、１回の通信セッションが切断された直後に、パラメータ変更処理を実行する（図２のＳ１０参照）。即ち、制御部２０は、通信セッションが切断された後であって、次の通信セッションを確立するためのＳＹＮ信号の通信が実行される前に、パラメータ変更処理を実行する。これに代えて、制御部２０は、通信セッションを確立するためのＳＹＮ信号を受信した後であって、当該通信セッションを確立するためのＳＹＮ／ＡＣＫ信号を送信する前に、パラメータ変更処理を実行してもよい。また、制御部２０は、通信セッションとは無関係のタイミングで（例えば定期的に）、パラメータ変更処理を実行してもよい。即ち、決定部がパラメータの値を決定するタイミングは、上記の各実施例のタイミングに限定されず、適宜変更することができる。
【００９７】
（変形例５）「通信装置」は、プリンタ１０に限られず、他のデバイス（例えば、スキャナ装置、ＦＡＸ装置、コピー機、多機能機、電話機、ＰＣ、サーバ、携帯電話、ＰＤＡ等）であってもよい。
【００９８】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【００９９】
２：通信システム、１０：プリンタ、１００：ＰＣ、ＷＳ（Ｐ１）：通信プロトコルＰ１に対応するウィンドウサイズ、ＷＳ（Ｐ２）：通信プロトコルＰ２に対応するウィンドウサイズ、ＭＢ：メモリバッファ、ＦＳＢ：ＦＩＦＯ送信バッファ、ＦＲＢ：ＦＩＦＯ受信バッファ
【図１】
2012175560.tif 000003
【図２】
2012175560.tif 000004
【図３】
2012175560.tif 000005
【図４】
2012175560.tif 000006
【図５】
2012175560.tif 000007
【図６】
2012175560.tif 000008
【図７】
2012175560.tif 000009
【図８】
2012175560.tif 000010
【図９】
2012175560.tif 000011