JP2017183833A - 通信装置およびその制御方法 - Google Patents

通信装置およびその制御方法 Download PDF

Info

Publication number
JP2017183833A
JP2017183833A JP2016064396A JP2016064396A JP2017183833A JP 2017183833 A JP2017183833 A JP 2017183833A JP 2016064396 A JP2016064396 A JP 2016064396A JP 2016064396 A JP2016064396 A JP 2016064396A JP 2017183833 A JP2017183833 A JP 2017183833A
Authority
JP
Japan
Prior art keywords
packet
ack
data
data packet
generated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016064396A
Other languages
English (en)
Other versions
JP6688122B2 (ja
Inventor
佐々木 章友
Akitomo Sasaki
章友 佐々木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2016064396A priority Critical patent/JP6688122B2/ja
Publication of JP2017183833A publication Critical patent/JP2017183833A/ja
Application granted granted Critical
Publication of JP6688122B2 publication Critical patent/JP6688122B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】確認応答を使用した通信におけるデータ転送速度を向上させる。【解決手段】通信装置において、他の通信装置から送信されるデータパケットに対する確認応答パケットを生成する生成手段と、データパケットを受信した場合に、生成手段により生成された該データパケットに対応する確認応答パケットを送信する送信手段と、を有する。生成手段は、少なくとも一部のデータパケットに対する確認応答パケットの生成処理を該データパケットの受信に先立って開始する。【選択図】図3

Description

本発明は、確認応答を使用するパケット通信における通信制御技術に関するものである。
従来、データ通信において通信の信頼性を保証するため、パケット化したデータを受信した際に受信側から送信側へACK(ACKnowledgement)と呼ばれる確認応答を送信する手法がある。これにより、送信側は受信側が正常にデータを受信したことを知ることが出来る。例えば、特許文献1に示されるように、インターネット通信において広く利用されているTCP(Transmission Control Protocol)では、パケットをオクテット単位にシーケンス番号で管理している。そして、受け取ったパケットのシーケンス番号をACKパケットとして応答している。
また、TCPのACKパケットでは、受信バッファの空き容量をウィンドウサイズとして通知し、送信側は通知されたウィンドウサイズまでは、ACKパケットを受信することなくデータを連続して送信することができる。ウィンドウサイズまでデータを送信すると、送信側は、受信側からのACKパケットを受信し、新たなウィンドウサイズが通知されるまでデータを送信しない。
特開2000−22744号公報
しかしながら、TCPなどの確認応答を使用する通信方式においては、通信状況によっては次のデータを送信することができない場合がある。例えば、送信側が、ACKを受信することなく受信側の受信バッファが埋まるまでデータを送信した場合、次のデータを送信することが出来なくなる。すなわち、受信側におけるACKの生成及び送信の遅延により、送信側による次のデータの送信も遅延することになる。その結果、送信側と受信側の間のデータ転送速度が遅くなってしまうことになる。
本発明は、上記の問題点を鑑みてなされたものであり、確認応答を使用した通信におけるデータ転送速度を向上させることを目的とする。
上述の問題点を解決するため、本発明に係る通信装置は以下の構成を備える。すなわち、通信装置において、他の通信装置から送信されるデータパケットに対する確認応答パケットを生成する生成手段と、前記データパケットを受信した場合に、前記生成手段により生成された該データパケットに対応する確認応答パケットを送信する送信手段と、を有し、前記生成手段は、少なくとも一部のデータパケットに対する確認応答パケットの生成処理を該データパケットの受信に先立って開始する。
本発明によれば、確認応答を使用した通信におけるデータ転送速度を向上可能とする技術を提供することができる。
第1実施形態に係るTCP/IPスタックの構成を説明する図である。 通信装置の構成を示すブロック図である。 第1実施形態におけるACKパケット生成の動作フローチャートである。 タスクの優先順位の例を示す図である。 TCP接続管理機構の構造を示す図である。 受信パケットに対するACKパケットの送信位置及び構造を示す図である。 第1実施形態におけるACKパケット送信の動作フローチャートである。 第1実施形態に係るTCP通信における効果を説明する図である。 各種パケットの構造を示す図である。 第2実施形態におけるACKパケット生成の動作フローチャートである。 第3実施形態におけるACKパケット生成の動作フローチャートである。 第3実施形態におけるACKパケット送信の動作フローチャートである。 第4実施形態における受信パケットに対するACKパケットの送信位置を示す図である。 第4実施形態の変形例1におけるACKパケット送信の動作フローチャートである。 第4実施形態の変形例2におけるACKパケット送信の動作フローチャートである。
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
(第1実施形態)
本発明に係る通信装置の第1実施形態として、TCP/IP通信を行う通信装置を例に挙げて以下に説明する。特に、対向装置から到来するデータパケットの受信に先立って、該データ受信に対する確認応答パケット(ACKパケット)の生成処理を開始し、データパケットを受信した場合により短期間でACKパケットを送出可能とする形態について説明する。
<装置構成>
図1は、第1実施形態に係るTCP/IPスタックの構成を説明する図である。図2は、図1に示すTCP/IPスタックを搭載した通信装置212の構成を示すブロック図である。
通信装置212は、CPU202、ワークメモリであるDRAM203、CPU202が実行するプログラムなどを格納するROM209を有する。また、通信装置212は、イーサネット(商標登録)規格などのネットワーク210を介した通信を行うためのLANモジュール204を有する。
ACK生成処理タスク110は、受信したデータの確認応答であるACKパケットを生成するタスクである。アプリケーションタスク101を構成するアプリケーションは、データの送受信を行う通信アプリケーションである。第1実施形態においては、TCP/IPの送信処理はアプリケーションタスク101で行われる。
受信バッファ102は、上述の通信アプリケーションのための受信バッファであり、受信処理タスク103が受信キュー104を介して受信したデータがコピーされる。上述の通信アプリケーションによる受信データの読み出しは、受信バッファ102を介して行われる。受信キュー104は、LANドライバ106が受信したパケットが挿入されるキューである。受信キュー104は、例えばDRAM203内に構成されている。
送信キュー105は、アプリケーションタスク101のTCP/IPの送信処理により生成されたTCP/IPパケットが挿入されるキューである。送信キュー105は、例えばDRAM203内に構成されている。
LANドライバ106は、LANモジュール204を制御し、イーサネット(商標登録)規格などに準拠したLAN210を介してパケットの送受信を行う機能部である。ACKパケットバッファ107は、生成したACKパケットを埋めるバッファであり、DRAM203内に構成されている。TCP接続管理機構108は、TCP接続を管理する機能部であり、DRAM203内に構成されている。
<装置の動作>
図5は、TCP接続管理機構108の構造を示す図である。TCP接続管理機構108は、TCP接続管理構造体401、生成されたACKパケットを管理するためのACKパケット管理構造体402、TCP管理接続構造体の先頭を保持するTCP接続構造体先頭403を含む。TCP接続管理構造体401は、TCP接続管理構造体先頭403からリンクされる。また、次(後続)のTCP接続管理構造体401へは“次のTCP接続”のポインタによりリンクされている。
図3は、第1実施形態におけるACKパケット生成の動作フローチャートである。
S302では、CPU202は、タスクが実行のイベントを待機し、イベントが派生するとS303に進む。S303では、CPU202は、TCP接続管理構造体先頭403から“次のTCP接続”を抜き出す。S304では、CPU202は、次のTCP接続が存在するか否かを判定する。TCP接続がなければ(すなわち、TCP接続管理構造体401の“次のTCP接続”の値がNULLであれば)イベント待ち(S302)に戻る。TCP接続があれば(すなわち、TCP接続管理構造体401の“次のTCP接続”がNULLでなければ)S305に進む。
S305では、CPU202は、TCP接続管理構造体401から生成済み確認応答番号(生成済みACK番号)を抜き出す。S306では、CPU202は、受信バッファサイズと生成済みACK番号から生成予定のACK番号の最大値を求める。生成予定のACK番号の最大値を設定しておくことにより、無限にACKパケットを生成することを防ぐことができる。生成予定のACK番号の最大値は、例えば、受信側ウィンドウサイズに基づいて以下のように求めることができる。
生成予定のACK番号の最大値 = 受信済みシーケンス番号 + 受信側ウィンドウサイズ − 生成済みACK番号
S307では、CPU202は、生成済みACK番号と生成予定のACK番号の最大値を比較する。生成済みACK番号が生成予定のACK番号の最大値より小さければS308に進み、生成済みACK番号が生成予定ACK番号の最大値以上であった場合は、S310に進む。
S308では、CPU202は、ACKパケットを生成し、生成済みACK番号を更新する。ただし、対応するデータパケットを未受信である場合、ACKパケットの生成において、シーケンス番号とウィンドウサイズは未知のパラメータである。シーケンス番号はデータを送った場合、ウィンドウサイズはTCPを使用するアプリケーションの読み込みタイミングに依存する。そのため、ACKパケットの生成時には、シーケンス番号とウィンドウサイズに“0”を入れてチェックサムを計算してACKパケットのチェックサムに代入する。そして、ACKパケットの送信時に、確定したシーケンス番号とウィンドウサイズを代入してチェックサムにシーケンス番号とウィンドウサイズを足すようにする。ACKパケットの生成及びACK番号の更新について図6を参照して更に説明する。
図6は、受信パケットに対するACKパケットの送信位置(タイミング)及び構造を示す図である。なお、TCPでは、最大セグメントサイズ(MSS:Maximum Segment Size)より大きいサイズのデータを受信した場合、すなわち、2個のパケットを受信した場合に1個のACKパケットを送信することが推奨されている。そのため、図6においては、生成するACK番号は生成済みのACK番号に(MSS×2)を加えたものとしている。
点線の矩形で示されるパケット501は、到着する予測されるパケット(すなわち、現時点で未受信のパケット)を示している。また、パケット501には、併せて当該パケットの「シーケンス番号の開始位置」と「TCPのデータサイズ」が記述されている。例えば、パケット501では、“2”がシーケンス番号であり、“1460”がTCPのMSSサイズ(当該パケットでのデータサイズ)を示している。
三角マークで示すタイミング502は、ACKパケットが送信される時間的な位置を示している。ここでは、上述の通り、2個目のパケットの受信にしたあとに送信している例を示している。ACKパケット503は、生成されるACKパケットの構造の例を示している。図6では、受信するデータを含むパケットのシーケンス番号の初期値が“2”であり、MSSサイズ×2=2920であるため、生成するACKパケットのACK番号は、それぞれ“2922”、“5842”、“8762”となっている。
S309では、CPU202は、生成したACKパケットをACKパケット管理構造体の生成済みACKパケット管理のキューの最後にキューイングする。
S310では、CPU202は、現在注目しているTCP接続に対するACKパケットをこれ以上生成する必要はないため、次のTCP接続管理構造体401を抜き出す。
なお、イベント待ち(S302)の解除は、アプリケーションがデータを読み込んだとき、TCP−SYNパケットを受信したとき、TCP−SYNパケットを送信するときに行われる。また、TCPデータパケットを受信したとき、TCPデータパケットを送信するとき、TCP接続を切断するときにも行われる。
図4は、ACKパケットの生成(図3)の優先順位の例を示す図である。図4(a)は、アイドルタスクでACKパケットの生成を行う場合のタスクの優先順位を示している。上に行くほど優先度が高いタスクであり、下に行くほど優先度が低いタスクであることを示している。アイドルタスクは、機器組み込み型のOSにおいて、他に実行すべき処理がないアイドル状態の場合に実行される、何の処理も行わないタスクである。(a)では、ここにACK生成処理を組み込むことで、すべき処理がない場合、つまりCPUにおいて他に処理するタスクがない場合に実行することができる。
また、図4(b)は、ACKパケットの生成の専用タスクを設けた場合のタスクの優先順位を示している。(b)では、アイドルタスクよりやや優先順位が高いタスクとして、ACK生成専用のタスクを設けた場合を示している。また、(c)では、アプリケーションタスク毎に独立したACK生成処理タスクを設けた場合を示している。このように構成しても、アイドルタスクが実行される直前の状態、つまりCPUが他に処理するタスクがない場合に実行することができる。
なお、ネットワーク処理をネットワーク以外の処理よりも優先させる場合、ACK生成タスクの優先順位がネットワーク以外の処理の優先順位よりも高くなるよう構成するとよい。また、TCP接続要求受付直後やTCP接続完了後など、TCP通信開始より前に行うよう構成してもよい。
図7は、第1実施形態におけるACKパケット送信の動作フローチャートである。この動作は、TCPパケットの受信を待機し、S601でTCPパケットの受信をトリガに開始される。
S601では、CPU202は、TCPパケットを受信する。S602では、CPU202は、TCPパケットの宛先アドレス、宛先ポート番号、送信元アドレス、送信元ポート番号などから、受信したTCPパケットに対応するTCP接続管理構造体を検索する。ここでは、検索の結果、TCP接続管理構造体401が特定される。
S603では、CPU202は、受信したTCPパケットに対応するTCP接続管理構造体が存在するか否かを判断し、存在する場合はS604に進み、存在しない場合はS613に進む。S613では、CPU202は、TCP_Reset(TCP−RST)パケットを送信した後、S618に進み処理を終了する。
S604では、CPU202は、受信したパケットのデータを、当該受信パケットに対応するTCP接続管理構造体にキューイングしたり、受信したデータの順序制御を行うなどのTCP受信処理を行う。
S605では、CPU202は、受信したデータに対してACKを送信するかどうか判断する。ACKを送信しない場合はS618に進み処理を終了する。ACKを送信する場合は、S606では、CPU202は、TCP接続管理構造体のACKパケットを調査し、S607では、CPU202は、生成済みのACKパケットが存在するか否かを判断する。生成済みのACKパケットがなければ、S614では、受信したデータに対応するACKパケットを生成して送信した後、S618に進み処理を終了する。生成済みのACKパケットがあればS608に進む。
S608及びS609では、CPU202は、“受信パケットにおけるシーケンス番号とデータサイズとの和(すなわち、応答すべきACK番号)”と、“生成済みのACKパケットのACK番号”とを比較する。生成済みのACKパケットのACK番号が応答すべきACK番号より大きい場合はS614に進みACKパケットを新規に生成し送信する。一方、生成済みのACKパケットのACK番号と応答すべきACK番号とが同じである場合はS615に進み、生成済みのACKパケットのACK番号が応答すべきACK番号より小さい場合はS610に進む。
S615では、CPU202は、生成済みのACKパケットを調整する。具体的には、TCP接続管理構造体からシーケンス番号と受信バッファ残量をACKパケットに代入する。そして、それらの値をチェックサムに足し込む。その後、S616では、CPU202は、調整された生成済みのACKパケットを送信する。S617では、送信したACKパケットをフリーにした後、すなわち、現在注目しているACKパケットを破棄し、S618に進み処理を終了する。
S610では、CPU202は、次の生成済みのACKパケットがあるかどうかを調べる。次の生成済みのACKパケットがある場合はS611に進み。一方、次の生成済みのACKパケットが無い場合はS615に進み、現在注目している生成済みのACKパケットを調整して送信する。
S611では、CPU202は、“受信パケットにおけるシーケンス番号とデータサイズとの和(すなわち、応答すべきACK番号)”と、“次の生成済みのACKパケットのACK番号”とを比較する。次のACK番号の方が小さければ、S612に進み、現在の生成済みのACKパケットをフリーにした後、次の生成済みのACKを現在の生成済みのACKとして設定し、S609に戻る。一方、次のACK番号の方が大きい場合は、当該次の生成済みのACKパケットは受信していないデータに対するものであるためS615に進み、現在注目している生成済みのACKパケットを調整して送信する。
<ACKパケットにおけるIPヘッダ生成>
ACKパケットの生成処理(S308)に含まれる各種処理について図5及び図9を参照して説明する。図9(a)は、TCPのACKパケットの構造を示し、図9(b)は、TCPヘッダと仮想ヘッダの構造を示している。
TCPのACKパケットは、IPヘッダ(20バイト)、TCPヘッダ(20バイト)から構成されており、このパケットを送信することで送信側にTCPデータを受信したことを通知する。仮想ヘッダとTCPヘッダは、TCPチェックサムの計算に使われる。
まず、TCP接続管理構造体401を参照し、送信元IPアドレス、宛先IPアドレスを調べ、仮想ヘッダの送信元IPアドレス、宛先IPアドレスに代入する。仮想ヘッダのZeroには“0x00”、プロトコル番号にはTCPを示す“0x06”、TCP長にはTCPヘッダ長である“20”をそれぞれ代入する。
また、TCP接続管理構造体401を参照し、送信元ポート番号、宛先ポート番号を調べ、TCPヘッダの送信元ポート番号、宛先ポート番号にコピーする。更に、TCP接続管理構造体401を参照し、送信済みシーケンス番号と受信済みシーケンス番号を調べ、それぞれを、TCPヘッダの送信済み番号に、TCPヘッダのACK番号に代入する。
ヘッダ長には20÷4(32ビット単位で表現されるため)で“5”を代入する。Flag+ReservedにはACKパケットであるので“ACKフラグ”を立てる。更に、window sizeには、この時の残りの受信バッファサイズを代入する。チェックサムに“0”、緊急ポインタに“0”を代入する。仮想ヘッダ+TCPヘッダのチェックサムを計算し、チェックサムに代入する。次にTCPヘッダを残したまま仮想ヘッダを取り除き、IPヘッダを生成する。
次に、生成したIPヘッダの各部に値を代入する。送信元IPアドレスと宛先IPアドレスはTCP接続管理構造体401の情報を代入する。全体長にはIPヘッダ長+TCPヘッダ長である“40”を代入する。プロトコル番号にはTCPを示す“0x06”、ヘッダチェックサムには“0”を代入する。そして、ヘッダチェックサムには、IPヘッダ部分20バイトのチェックサムを計算した結果を代入する。
このように、ACKパケットの生成には、仮想ヘッダの生成、TCPヘッダの生成、仮想ヘッダのチェックサム計算、TCPヘッダのチェックサム計算、IPヘッダの生成、IPヘッダのチェックサム計算、が含まれる。このような様々なデータ処理が必要であるため、ACKパケットの生成には相応の時間を要することになる。
<効果>
図8は、第1実施形態に係るTCP通信における効果を説明する図である。図8(a)は、従来技術における送受信の動作を示しており、図8(b)は、第1実施形態における送受信の動作を示している。それぞれ、TCP接続確立後の、送信側機器から受信側機器へのデータ送信、受信側機器から送信側機器へのACK送信を例示的に示している。図8において縦方向は時間の経過を示している。特に、受信側機器における「ACK生成」「受信処理」「idle」の各時間を例示的に示している。
なお、「ACK生成」は、ACK生成からACK送信までの処理に要する時間、「受信処理」は、TCPパケット受信からアプリケーションによるデータの読み込みまでの処理に要する時間、「idle」は、CPUの空き時間である。
説明を簡単にするため、図8では、送信側機器が送信するパケットの各々で送信されるデータ量は、MSS単位であるとする。また、受信側機器の受信バッファは、MSS×4のパケットを受信するといっぱいになるとする。更に、以下の説明においては、最初の6個のパケット(A〜F)の送信について詳細に説明するが、後続のパケットにおいても同様の動作が実行される。
・従来技術における送受信の動作
送信側機器は、受信側機器のウィンドウサイズ(残りの受信バッファサイズ)分のパケット(ここでは、A、B、C、Dの4個)を送信する。受信側機器は、パケットを受信する毎に受信処理を行う。TCPでは連続して大きなパケットを受信する場合、受信側機器は、2×MSSのデータを受信するとACKを1回送信する。そのため、ここでは、受信側機器は、2個のパケット(A、B)の受信処理を行い、これらの受信処理の完了後、Bまでのパケットを受信したことを示すACK(図における「A+B」)を生成し送信する。同様に、後続の2個のパケット(C、D)の受信処理を行い、これらの受信処理の完了後、Dまでのパケットを受信したことを示すACK(図における「C+D」)を生成し、送信する。
送信側機器が上述の4個のパケット(A、B、C、D)を送った時点で相手のウィンドウサイズがいっぱいになっているため、送信側機器は、受信側機器が送信するACKを受信するまで次のパケット(E以降)を送信することができない。
送信側機器は、ACKパケット(上述の「A+B」)を受信するとウィンドウサイズが2MSS分空いたことが分かるため、2個のパケット(E、F)を送信する。この時点で、受信側機器は、2個のパケット(C、D)の受信処理とこれらのパケットに対するACK(図における「C+D」)の送信を終えている。しかしながら、受信側機器は、次のパケット(E以降)を受信していないため、アイドルタスクを実行している。その後、受信側機器は、2個のパケット(E、F)を受信すると、それぞれ受信処理を行い、Fまでのパケットを受信したことを示すACK(図における「E+F」)を生成し、送信する。
・第1実施形態における送受信の動作
送信側機器は、受信側機器のウィンドウサイズ分のパケット(ここでは、A、B、C、Dの4個)を送信する。受信側機器は、2個のパケット(A、B)の受信処理を行い、これらの受信処理の完了後、Bまでのパケットを受信したことを示すACKを生成し送信する。同様に、2個のパケット(C、D)の受信処理を行い、これらの受信処理の完了後、Dまでのパケットを受信したことを示すACKを生成し、送信する。ここまでの動作は従来技術と同じである。
ACK(「C+D」)を送信後、受信側機器は、後続のパケット(E以降)の到着までの間(すなわち、従来の動作では「idle」であった期間)、後続のパケットに対応するACKの生成処理を行う。受信側機器は、パケット(E)を受信すると当該パケットの受信処理を行い、パケット(F)を受信すると当該パケットの受信処理を行う。
受信側機器は、Fまでのパケットを受信したことを示すACK(図における「E+F」)を図7の動作に従って選択し送信する。すなわち、先行して生成済みのACKを選択し使用しているため、Fまでのパケットを受信した後、従来より短い時間で対応するACK(「E+F」)を送信することができる。以降も同様な動作を行うことにより、受信側機器がRのパケットを受信するまでの時間をδだけ短くすることができる。すなわち、同じ量のデータをより短時間に送信することが可能となっており、送信側機器から受信側機器により高速にデータを伝送することが可能となる。
以上説明したとおり第1実施形態によれば、TCP通信におけるACKパケットの生成処理を、対応するデータパケットの受信に先立って開始する。これにより、対応するデータパケットを受信した際に、ACKパケットの生成処理の少なくとも一部が完了しているため、速やかに、ACKパケットを送信することが可能となり、通信時間を短縮することが可能となる。特に、ACKパケットの生成を優先順位の低いタスクあるいはアイドルタスクにおいて実行することにより、他の処理に悪影響を与えることなく、CPUをより有効利用することが可能となる。
なお、上述の説明では、ACKパケットの生成に関連する処理を全てCPUが行っているものとして説明をしているが、一部の処理をハードウェアにオフロードするよう構成してもよい。
(第2実施形態)
第2実施形態では、所定の種別の通信接続、例えば、大量のデータを受信するTCP接続のみを対象として、第1実施形態で説明したACKパケットの生成処理を行う形態について説明する。
図10は、第2実施形態におけるACKパケット生成の動作フローチャートである。なお、図10は、図3に対して、S304とS305との間にS1111を追加したものに相当する。具体的には、S1111において、CPU202は、S304において存在すると判定されたTCP接続に対して、当該TCP接続が大量のデータを受信するTCP接続であるか否かを判断する。
そして、大量のデータを受信するTCP接続である場合にのみ、事前にACKパケットを生成する。すなわち、大量のデータを受信するTCP接続でない場合は、事前にACKパケットを生成せず、データパケットを受信後にACKパケットを生成する。
なお、大量のデータを受信するかどうかの判断は、例えば、TCP接続管理構造体401のフラグに、大量のデータを受信することを示すフラグが存在しているか否かに基づいて判定する。すなわち、大量のデータを受信するアプリケーションは、通信前や通信中に大量のデータを受信することを示すフラグをTCP接続管理構造体401に設定する。
また、アプリケーションがフラグを設定する代わりに、プロトコルスタックが、フラグを設定するよう構成してもよい。例えば、受信したパケットの先頭を読み出し、画像データ、動画データであった場合に大量のデータを受信することを示すフラグを設定するとよい。
以上説明したとおり第2実施形態によれば、画像データや音声データなどの大量のデータを受信する場合のみ事前にACKパケットを生成する。これにより、事前に生成したACKパケットに使用されるメモリ量を減らすことができ、また、CPUを他の処理に利用することが可能となる。
(第3実施形態)
第3実施形態では、同時接続数に基づいて事前に生成するACKパケットに関して制限を設ける形態について説明する。以下の説明では、同時接続数に基づいて、生成可能なACKパケットの個数の上限値(ACK_MAX)を決定する例について説明する。
図11は、第3実施形態におけるACKパケット生成の動作フローチャートである。図11は、図3に対して、S307とS308との間にS1211,S1212を追加したものに相当する。また、図12は、第3実施形態におけるACKパケット送信の動作フローチャートである。なお、図12は、図7に対して、ACKをフリー(S612,S617)にした後にS1319,S1320を追加したものに相当する。
以下の説明において、ACK_MAXは、生成するACKパケットの個数の上限値、ack_nowは、現在生成済みのACKパケットの個数をそれぞれ示すパラメータである。ACK_MAXの値は、通信装置212が搭載するメモリのサイズ等に基づいて静的に決定しても良いし、通信装置212の使用者が設定する形態でも良い。また、ack_nowの値は、例えば、通信装置212の起動時あるいはTCPスタックの起動時にゼロクリアされる(起動時には、生成済みACKパケットは0個)。
具体的には、ACKパケット生成フロー(図11)のS307において生成済みACK番号と生成予定ACK番号を比較し、生成済みACK番号が生成予定ACK番号より小さい場合S1211に進む。
S1211では、CPU202は、ack_nowとACK_MAXとを比較する。ack_nowがACK_MAXより小さければ、S1212で、ack_nowを1増やし(インクリメント)、S308でACKパケットを生成する。
一方、ACKパケット送信フロー(図12)においてACKをフリーにする場合は、ack_nowを1減らす(デクリメント)。これにより、現在生成済みのACKパケットの個数を正しく管理することが可能となる。
以上説明したとおり第3実施形態によれば、生成するACKパケットの個数に上限を設けることができる。これにより、TCPの同時接続数が多い場合などにおいて、ACKパケットを多量に生成することによるメモリの過剰な消費を防ぐことが可能となる。なお、ACK_MAXをTCP接続毎に決定するよう構成してもよい。また、TCP接続毎に異なる最大個数(ACK_MAX)を設定してもよい。TCP接続毎に異なる最大個数(ACK_MAX)を設定する場合、その上限値を接続の受信バッファサイズをMSSで割った値を使用して決定してもよい。
(第4実施形態)
第4実施形態では、受信したデータパケットのデータサイズが、予測されたサイズと一致しない場合の動作について説明する。
図13は、第4実施形態における受信パケットに対するACKパケットの送信位置を示す図である。なお、点線の矩形は受信側機器が未受信であり、実線で示す矩形は受信側端末が受信済みであることを示している。
図13(a)に示すパケット群を受信することを想定し、図13(a)のタイミング502でACKを生成したとする。しかし、実際には図13(b)に示すように、受信パケット501−03のようなパケットを受信することがある。この場合、タイミング502−02やタイミング502−03のように、ACKパケットの送信タイミング及びACK番号が、データパケットの受信タイミング及びデータサイズの区切り単位からずれることになる。
ところで、TCPでは、データの送達確認をパケット単位では無くバイト単位(シーケンス番号)で管理している。そのため、予め生成したACKパケットを送信しても、正常にデータ通信を継続することが可能である。そこで、例えば、図13(b)では、パケット501−05を受信したときに、タイミング502−02でACKパケットを送信する。
このように、生成したACKパケットの“ACK番号”と“受信したパケットのシーケンス番号+データサイズ”とが一致しない場合であっても、正常にデータ通信を継続することが可能である。すなわち、“受信したパケットのシーケンス番号+データサイズ”よりも小さいACK番号を有するACKパケットを送信することにより、ACKパケットを作り直すこと無く通信を継続することが可能となる。
・変形例1
上述のように、TCPにおいては、受信したデータパケットを単位としたACKパケットを返信しなくとも、正常に通信を継続することが出来る。ただし、受信したパケットを単位としたACKパケットを返信するよう構成してもよい。
図13(c)は、第4実施形態の変形例1における受信パケットに対するACKパケットの送信位置を示す図である。タイミング512−01、512−02において送信されるACKパケットは、上述の図13(b)のタイミング502−01、502−02において送信されるACKパケットと同様である。一方、タイミング512−03において送信されるACKパケットは、受信したパケットの単位に対する確認応答となるように生成し送信している。なお、図13(c)においては、各タイミングの下に括弧書きで生成済みACKパケットのACK番号を示している。
図14は、第4実施形態の変形例1におけるACKパケット送信の動作フローチャートである。なお、図14は、図7に対して、S1619を追加したものに相当する。図14において、S610に進むのは、現在注目している生成済みACKパケットにおいて“(受信パケットの)シーケンス番号とデータサイズとの和”が“ACK番号”より小さい場合である。具体的には、現在注目している生成済みACKパケットのACK番号がずれている場合である。
その状態において、次のACKパケットが無い場合、S1619では、CPU202は、TCP接続管理構造体の生成済みACK番号を、受信したパケットのシーケンス番号及びデータサイズに基づいた値に書き換える。これにより、例えば、タイミング512−03で送信されることになるACKパケットのACK番号は、“8762(=2+1460×6)”だったものが“8032(=5112+1460×2)”に書き換わることになる。すなわち、ACK番号のずれが修正され、受信したデータを単位としたACKパケットを返信することが可能となる。
・変形例2
ところで、受信したデータパケットのデータサイズが予測されたサイズと相違しかつ図13(b)に示すような応答を行った場合には問題が生じることがある。具体的には、図13(b)のタイミング502−02でACKパケットを送信した後、パケット501−06以降のパケットを受信しなかった場合、受信済みのデータ(パケット501−05の一部)に対するACKパケットは送信されないことになる。そこで、変形例2では、生成したACKパケットに対して強制送信のためのタイマを設け、タイマ発火時に当該ACKパケットを送信する。
図15は、第4実施形態の変形例2におけるACKパケット送信の動作フローチャートである。なお、図15は、図7に対して、S1719、S1720、S1721を追加したものに相当する。図15において、S610に進むのは、現在注目している生成済みACKパケットにおいて“(受信パケットの)シーケンス番号とデータサイズとの和”が“ACK番号”より小さい場合である。具体的には、現在注目している生成済みACKパケットのACK番号がずれている場合である。
その状態において、次のACKパケットが無い場合、S1719では、CPU202は、ACK強制送信タイマを設定する。なお、別のACKパケットを送信する場合(S614、S616)には、タイムアウトによるACKパケットを送信する必要がない。そのため、S1720、S1721においては、ACK強制送信タイマをOFFにするよう制御する。一方、ACK強制送信タイマがタイムアウトすると、これまで受信したデータに対するACKパケットとして、生成したACKパケットを送信する。
このように構成することで、受信したデータパケットのデータサイズが予測されたサイズと相違する場合においても、受信したデータに対するACKパケットの返信漏れを防ぐことが可能となる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
101 アプリケーションタスク; 102 受信バッファ; 103 受信処理タスク; 104 受信キュー; 105 送信キュー; 106 LANドライバ; 107 ACKパケットバッファ; 108 TCP接続管理機構; 110 ACK生成処理タスク

Claims (11)

  1. 通信装置であって、
    他の通信装置から送信されるデータパケットに対する確認応答パケットを生成する生成手段と、
    前記データパケットを受信した場合に、前記生成手段により生成された該データパケットに対応する確認応答パケットを送信する送信手段と、
    を有し、
    前記生成手段は、少なくとも一部のデータパケットに対する確認応答パケットの生成処理を該データパケットの受信に先立って開始する
    ことを特徴とする通信装置。
  2. 前記送信手段は、データパケットを受信した際に、該データパケットに対応する確認応答パケットが既に前記生成手段により生成されている場合は、該生成された確認応答パケットを送信し、該データパケットに対応する確認応答パケットが前記生成手段により生成されていない場合は、前記データパケットに対応する確認応答パケットの前記生成手段による生成を待機し、該生成された確認応答パケットを送信する
    ことを特徴とする請求項1に記載の通信装置。
  3. 前記生成手段は、CPUがプログラムを実行することにより実現され、
    前記生成手段は、データパケットの受信に先立った該データパケットに対する確認応答パケットの生成処理を、前記CPUにおいて該生成処理より優先度の高いタスクが存在しない場合又は該CPUがアイドル状態にある場合に、実行する
    ことを特徴とする請求項1又は2に記載の通信装置。
  4. 未受信のデータパケットに対して前記生成手段が生成可能な確認応答パケットの個数の上限値を設定する設定手段を更に有する
    ことを特徴とする請求項1から3の何れか1項に記載の通信装置。
  5. 前記通信装置と前記他の通信装置とはTCP(Transmission Control Protocol)に準拠した通信を行い、
    既に受信したデータパケットのTCPヘッダに記述されたシーケンス番号と最大セグメントサイズとに基づいて、未受信のデータパケットに対する確認応答パケットの確認応答番号を決定する決定手段を更に有する
    ことを特徴とする請求項1から4の何れか1項に記載の通信装置。
  6. 前記生成手段は、前記他の通信装置との間の通信接続が所定の種別の通信接続であることに応じて、データパケットに対する確認応答パケットの生成処理を該データパケットの受信に先立って開始する
    ことを特徴とする請求項1から5の何れか1項に記載の通信装置。
  7. 前記他の通信装置との間の通信接続が前記所定の種別の通信接続であるか否かを、当該通信接続を使用するアプリケーションによって接続管理構造体に設定されたフラグ及び当該通信接続で利用されるプロトコルスタックによって接続管理構造体に設定されたフラグの少なくとも一方に基づいて判定する判定手段を更に有する
    ことを特徴とする請求項6に記載の通信装置。
  8. データパケットを受信したとき、該データパケットにおけるシーケンス番号とデータサイズとの和と、前記生成手段により既に生成された確認応答パケットの確認応答番号と、を比較する比較手段を有し、
    前記比較手段により前記和と一致する前記確認応答番号を有する確認応答パケットが無いと判定された場合、前記送信手段は、前記和よりも小さい前記確認応答番号を有する確認応答パケットを送信する
    ことを特徴とする請求項1から7の何れか1項に記載の通信装置。
  9. データパケットを受信したとき、該データパケットにおけるシーケンス番号とデータサイズとの和と、前記生成手段により既に生成された確認応答パケットの確認応答番号と、を比較する比較手段を有し、
    前記比較手段により前記和と一致する前記確認応答番号を有する確認応答パケットが無いと判定された場合、前記生成手段は、前記和よりも小さい前記確認応答番号を有する確認応答パケットの該確認応答番号を前記和の値に書き換え、
    前記送信手段は、該書き換えを行った確認応答パケットを送信する
    ことを特徴とする請求項1から7の何れか1項に記載の通信装置。
  10. 通信装置の制御方法であって、
    他の通信装置から送信されるデータパケットに対する確認応答パケットを生成する生成工程と、
    前記データパケットを受信した場合に、前記生成工程により生成された該データパケットに対応する確認応答パケットを送信する送信工程と、
    を含み、
    前記生成工程における少なくとも一部のデータパケットに対する確認応答パケットの生成処理は、該データパケットの受信に先立って開始される
    ことを特徴とする通信装置の制御方法。
  11. コンピュータを、請求項1から9の何れか1項に記載の通信装置の各手段として機能させるためのプログラム。
JP2016064396A 2016-03-28 2016-03-28 通信装置およびその制御方法 Active JP6688122B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016064396A JP6688122B2 (ja) 2016-03-28 2016-03-28 通信装置およびその制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016064396A JP6688122B2 (ja) 2016-03-28 2016-03-28 通信装置およびその制御方法

Publications (2)

Publication Number Publication Date
JP2017183833A true JP2017183833A (ja) 2017-10-05
JP6688122B2 JP6688122B2 (ja) 2020-04-28

Family

ID=60008688

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016064396A Active JP6688122B2 (ja) 2016-03-28 2016-03-28 通信装置およびその制御方法

Country Status (1)

Country Link
JP (1) JP6688122B2 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005051738A (ja) * 2003-07-28 2005-02-24 Samsung Electronics Co Ltd モバイルアドホックネットワークにおけるトランスポート層を用いた効率的なデータの送受信方法及びその方法を用いたネットワーク装置
JP2006222960A (ja) * 2005-02-11 2006-08-24 Samsung Electronics Co Ltd マルチtcp確認応答を用いたtcp輻輳制御システム及びその方法
WO2010032533A1 (ja) * 2008-09-19 2010-03-25 日本電気株式会社 ネットワークプロトコル処理システム、及びネットワークプロトコル処理方法
JP2014507817A (ja) * 2011-01-12 2014-03-27 日本電気株式会社 通信装置、パケット再送制御方法、パケット再送制御プログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005051738A (ja) * 2003-07-28 2005-02-24 Samsung Electronics Co Ltd モバイルアドホックネットワークにおけるトランスポート層を用いた効率的なデータの送受信方法及びその方法を用いたネットワーク装置
JP2006222960A (ja) * 2005-02-11 2006-08-24 Samsung Electronics Co Ltd マルチtcp確認応答を用いたtcp輻輳制御システム及びその方法
WO2010032533A1 (ja) * 2008-09-19 2010-03-25 日本電気株式会社 ネットワークプロトコル処理システム、及びネットワークプロトコル処理方法
JP2014507817A (ja) * 2011-01-12 2014-03-27 日本電気株式会社 通信装置、パケット再送制御方法、パケット再送制御プログラム

Also Published As

Publication number Publication date
JP6688122B2 (ja) 2020-04-28

Similar Documents

Publication Publication Date Title
CN109936510B (zh) 多路径rdma传输
US8311059B2 (en) Receive coalescing and automatic acknowledge in network interface controller
US10430374B2 (en) Selective acknowledgement of RDMA packets
US7953093B2 (en) TCP/IP reordering
US8583831B2 (en) Thin client discovery
WO2014037760A1 (zh) 增加数据流传输的方法和系统
US8259728B2 (en) Method and system for a fast drop recovery for a TCP connection
JP5074872B2 (ja) プロトコル処理装置及び制御方法
WO2019001484A1 (zh) 一种实现发送端调速的方法、装置和系统
US20070291782A1 (en) Acknowledgement filtering
US8761164B2 (en) Network offloading with reduced packet loss
JP6963411B2 (ja) 通信装置、通信方法、およびプログラム
US11700321B2 (en) Transparent proxy conversion of transmission control protocol (TCP) fast open connection
US11349934B2 (en) Opportunistic transmission control protocol (TCP) connection establishment
CN112204934A (zh) 通信装置、通信方法以及通信程序
JP6688122B2 (ja) 通信装置およびその制御方法
US7213074B2 (en) Method using receive and transmit protocol aware logic modules for confirming checksum values stored in network packet
CN103636157B (zh) 一种ack信息的发送方法及装置
JP2017011580A (ja) 通信装置およびその制御方法、プログラム
US7426589B2 (en) Network interface card for reducing the number of interrupts and method of generating interrupts
JPH11317772A (ja) データ通信装置及びデータ通信方法
CN117813595A (zh) 用于远程直接存储器访问的设备和方法
US20070165661A1 (en) Information-processing system, reception device, and program
US9405719B2 (en) Circuitry to generate and/or use at least one transmission time in at least one descriptor
JP2019016842A (ja) 通信装置および制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190123

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191029

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200306

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200403

R151 Written notification of patent or utility model registration

Ref document number: 6688122

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151