JP2007110680A - 通信装置、通信プログラム、通信制御方法および記録媒体 - Google Patents
通信装置、通信プログラム、通信制御方法および記録媒体 Download PDFInfo
- Publication number
- JP2007110680A JP2007110680A JP2006200315A JP2006200315A JP2007110680A JP 2007110680 A JP2007110680 A JP 2007110680A JP 2006200315 A JP2006200315 A JP 2006200315A JP 2006200315 A JP2006200315 A JP 2006200315A JP 2007110680 A JP2007110680 A JP 2007110680A
- Authority
- JP
- Japan
- Prior art keywords
- packet
- size
- unit
- data
- packet buffer
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
【課題】低資源の装置であっても、余剰なトラフィックを抑制し、必要最小限のメモリ量で、CPU負荷の少ないTCPのWin制御方式を実現すること。
【解決手段】通信装置は、受信したデータパケット数と固定サイズに基づいて算出されるバッファサイズと、受信したデータサイズにより算出されるバッファサイズを比較し、比較の結果、前記受信したデータパケット数と固定サイズに基づいて算出されたバッファサイズの方が小さい場合、前記算出されたバッファサイズを告知ウィンドウサイズとして設定し、通信相手装置にACKを送信する。
【選択図】図9
【解決手段】通信装置は、受信したデータパケット数と固定サイズに基づいて算出されるバッファサイズと、受信したデータサイズにより算出されるバッファサイズを比較し、比較の結果、前記受信したデータパケット数と固定サイズに基づいて算出されたバッファサイズの方が小さい場合、前記算出されたバッファサイズを告知ウィンドウサイズとして設定し、通信相手装置にACKを送信する。
【選択図】図9
Description
本発明は、ネットワークを介して、TCP/IPプロトコルを用いて通信を行なう通信装置、通信プログラム、通信制御方法および記憶媒体に関するものである。
通信プロトコルとしてTCP/IPプロトコルが広く用いられている。TCP/IPプロトコルを用いた通信では、多くの場合、通信装置において階層的に処理が行なわれる。
非特許文献1では、通信処理における階層モデル(OSI参照モデル)として、物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、アプリケーション層の7階層が定義されている。TCP/IPがよく用いられているLAN(Local Area Network)などでは、物理層、および、データリンク層として、Ethernet(登録商標)が多く用いられている。データリンク層をMAC層と呼ぶこともある。TCP/IPでは、ネットワーク層としてIPv4やIPv6等のプロトコル(以下単にIP)を、トランスポート層としてTCPを用いる。また、多くの場合、セッション層は、ソケットAPI呼ばれるAPIとして定義できる。
MAC層において用いられる電文形式をMACフレームと呼ぶ。また、IPにおいて用いられる電文形式をIPパケットと呼ぶ。さらに、TCPにおいて用いられる電文形式をTCPセグメントと呼ぶ。さらに、アプリケーション層で送受信するデータをアプリケーションデータと呼ぶ。なお、本明細書中では、アプリケーションデータサイズが0の場合も、TCPセグメントに含める。尚、以下ではMACフレーム、IPパケット、TCPセグメントの全部又は一部を総称して、単にデータパケットと呼ぶ。
TCPセグメントの送信時において、通常、1つのTCPセグメントは1つのIPパケットに格納される。IPパケットは、通常1つ、あるいは必要に応じて複数のMACフレームに分割されて格納される。受信時において、通常1つ、あるいは必要に応じて複数のMACフレームからIPパケットが抽出され、IPパケットからTCPセグメントが抽出される。さらに、TCPセグメントからアプリケーションデータが抽出される。なお、ここでは、各層において、他のプロトコル、例えば、トランスポート層においてUDPを使用する通信が混在した場合などは省略する。
TCPは、通信装置間において、送信側装置から送出されたTCPセグメントが何らかの影響で正常に送達できなかった場合でも、再送機能により、確実なデータの転送を実現するプロトコルである。
また、TCPは、通信装置間のネットワークにおいて、無駄なトラフィックの増大を抑制するためのウィンドウ制御と呼ばれるフロー制御機能を持つ(例えば、非特許文献2参照。)。
<TCPの動作概要>
図24は、ネットワーク3を介して接続された2つの通信装置1、通信装置2の間において、一方の通信装置2から他方の通信装置1へデータを転送する例を示した図である。以降の説明では、通信装置2はデータを送信する装置であり、通信装置1は、通信装置2が送信したデータを受信する装置とする。
図24は、ネットワーク3を介して接続された2つの通信装置1、通信装置2の間において、一方の通信装置2から他方の通信装置1へデータを転送する例を示した図である。以降の説明では、通信装置2はデータを送信する装置であり、通信装置1は、通信装置2が送信したデータを受信する装置とする。
通信装置2から通信装置1へデータを転送する場合、データに転送のための情報を付加したデータパケットを使用する。この1つのデータパケットに格納できるデータのサイズは、フレームの最大転送サイズを指定するMTUや、TCPセグメントについての最大量(最大セグメントサイズ。以降、MSS)によって規制される。MTUは、通信装置が接続するインタフェースメディアの種類に従って、例えばEthernet(登録商標)の場合は1500byteが初期状態として設定される。
MSSは、TCP通信の最初の通信路(コネクション)確立時に決定され、より具体的には、通信装置1と通信装置2がお互いに自身のMSSをTCPセグメントに乗せて通知し、通信装置2が小さい方のMSSに決定する。TCPコネクション確立後、通信装置2から通信装置1へ実際にデータを転送できる状態となるが、転送するデータがMSSを超える場合などにおいては、複数のパケットに分割して格納し、通信装置2から通信装置1に送られる。このパケットには、格納したデータを識別するための情報であるシーケンスナンバー(以下、Seq)、TCPのデータ長(以下、LEN)、および、次に受信すべきデータのシーケンス番号を示す確認応答番号(以下、Num)などが含まれる。
通信装置1はデータパケットを受信した場合、所定のタイミングにより、所定のシーケンス番号を含むTCPセグメントを受信したことを示すACK(ACKnowledgement:応答確認パケット。以下、単にACK)を通信装置1が全て受け取ったか否かを、通信装置2が確認することを可能としている。通信装置2が送信したデータパケットが、何らかの影響で通信装置1が正常に受信できず(以下、パケットが消失したと表現する)、その結果、通信装置2が送信したパケットに対する通信装置1からのACKを受信しなかった場合、通信装置2は、該当するパケットを再送する。これにより、確実に全てのデータを転送することを可能としている。このとき、再送の間隔を制御するために、通信装置2がデータを送ってから、ACKを受信するまでにかかる時間をRTT(ROUND TRIP TIME)として定義し、用いる場合がある。なお、一般的にRTTは1つのパケットが送信元から宛先まで行き、再び戻ってくるまでに要する時間のことを指す。
さらにTCPのウィンドウ制御について説明を行なう。TCPでは、受信側から送信側へ通知する、告知ウィンドウ(TCP Window。以下、Win)という概念を取り入れており、通信装置1(データを受信する装置)は、ACKの1つのパラメータとしてWinを含めることにより、ACKを送信する時点にて、受信可能なデータ量を通信装置2(データを送信する装置)に通知する。通信装置1がACKのパラメータとして含める告知ウィンドウの大きさのことを告知ウィンドウサイズといい、ウィンドウサイズは送信側装置がACKを待たずに送信できるデータの大きさを示す。このことにより、通信装置2から送信されるTCPセグメントのデータ量を制御し、通信装置1によって受信できないために無駄となるパケットがネットワークに流れ、ネットワークの通信許容量が低下することを防ぐことができる。非特許文献2では、「Winは、通信装置1に現在受信する準備がされているオクテットの数(確認番号から始まる)を示している」、と記載されている。
通常、受信装置のウィンドウ制御では、コネクション毎の受信バッファの残りデータサイズをWinとして決定し、このWinを含め送出することによりTCP通信でのフロー制御を行う。
図25は、従来のTCPの受信側でのウィンドウ制御の概要について、図24の例を用いて説明する図である。
ここでは、説明を簡略化するために1つのデータパケット内に格納されるTCPセグメントのデータ長(以下、LEN)を1000にし、SeqやWinの単位や値も、これに合わせている。通信装置2はアプリケーションデータを受信しないこととすることにより、TCPヘッダのパラメータの1つである、要求する次のACKNumber(以下、Num)において、通信装置2から送信されるACKのNumは常に固定値であるため、省略する。これらの実際の値は、通信装置や通信装置間の伝送路の特性に依存し、TCPの接続時において決定されるが、この説明は省略する。
また、図25は通信装置2と通信装置1とのTCP接続時のコネクション設立後、通信装置1がいくつかのパケットを受信し、そのパケットが処理途中であり、受信する準備がされているオクテットの数(パケットバッファの受信可能データサイズ)が少なくなっている(Win=6000)状態を示している。
通信装置2のWin状態を図25の左側に示す(W21、W22)。Win状態内の数値は、Seqを示しており、1000byte分のWinを示す。例えば、「1」であれば、1001から2000まで、「2」であれば、2001から3000までのSeqを表現している。Win状態で番号の表示のない網掛け部分は、送信できない、またはACKを受信して送信済みであるSeqであり、番号が表示されている部分は送信可能なSeqを示す。例えば、W22は、Seq1001から2000、Seq2001から3000のデータは、既に送信済みであり、かつ、通信装置1からそれらに対するACKを受信済みであり、Seq3001から9000までのパケットを送信可能であり、それ以降のSeqを持つパケットは送信できないことを示している。
(1)Winの通知
受信側装置である通信装置1は、次に受信すべきデータのシーケンス番号を示す確認応答番号(以下、Num)と、Winを通信装置2に通知する(P11)。ここでは、Numを1001、図示しないP11以前の状態から、Winを6000としたとする。
受信側装置である通信装置1は、次に受信すべきデータのシーケンス番号を示す確認応答番号(以下、Num)と、Winを通信装置2に通知する(P11)。ここでは、Numを1001、図示しないP11以前の状態から、Winを6000としたとする。
(2)Winの設定とデータ送信
Winを受信した通信装置2は、通知されたNumからWin分進んだ箇所までを、送信側で送信可能なウィンドウとして設定する(W21)。この場合、Seq1から6000までに設定する。通信装置1の要求するシーケンス番号(以下、Seq)のデータから順に、Winを超えない範囲でデータを送信する。ここでは、Winは6000としたので、最大、Seqが1001から6000までACKを受信するまでに送信することができる。ここでは、Seq1001から2000、Seq2001から3000のパケットを送信したこととする(P21、P22)。
Winを受信した通信装置2は、通知されたNumからWin分進んだ箇所までを、送信側で送信可能なウィンドウとして設定する(W21)。この場合、Seq1から6000までに設定する。通信装置1の要求するシーケンス番号(以下、Seq)のデータから順に、Winを超えない範囲でデータを送信する。ここでは、Winは6000としたので、最大、Seqが1001から6000までACKを受信するまでに送信することができる。ここでは、Seq1001から2000、Seq2001から3000のパケットを送信したこととする(P21、P22)。
(3)データ受信とWinの更新、通知
通信装置1は、受信したパケットに含まれるSeqまでのデータを受信したら、自身のウィンドウを受信バッファの残りバッファサイズに基づいて更新し、受信可能なデータ量を確認する。ここでは、Seq3000まで受信し、受信したパケットは全て処理完了していることとすると、Numは3001、後述するウィンドウ制御により残りバッファサイズに基づいてWinを6000と決定する。通信装置1は、上記で設定したNumとWinを含めたACKを通信装置2に送信する(P12)。
通信装置1は、受信したパケットに含まれるSeqまでのデータを受信したら、自身のウィンドウを受信バッファの残りバッファサイズに基づいて更新し、受信可能なデータ量を確認する。ここでは、Seq3000まで受信し、受信したパケットは全て処理完了していることとすると、Numは3001、後述するウィンドウ制御により残りバッファサイズに基づいてWinを6000と決定する。通信装置1は、上記で設定したNumとWinを含めたACKを通信装置2に送信する(P12)。
(4)送信側Winの更新
通信装置2は、受信したNumとWinにより、送信側自身の輻輳制御用の送信ウィンドウを更新する(W22)。ここでは、Seq3001から9000までに設定する。この後、Seq3001から順にデータを送信することが可能になる。
通信装置2は、受信したNumとWinにより、送信側自身の輻輳制御用の送信ウィンドウを更新する(W22)。ここでは、Seq3001から9000までに設定する。この後、Seq3001から順にデータを送信することが可能になる。
以上のように受信側装置ではウィンドウ制御を行い、送信側装置から送出されるTCPセグメントのデータ量の制御を実現するTCP通信でのフロー制御を可能としている。
次に、通信装置内におけるパケットの受信処理の概要を示す。
<パケット受信処理の概要>
図24の通信装置1のハードウェアに関するブロック図の一例について説明する。上記と同様、通信装置1は、データの受信を行なう装置である。図24ではシステムバス11上にNIC(Network Interface Card)12、CPU13、メモリ14が接続されている。
図24の通信装置1のハードウェアに関するブロック図の一例について説明する。上記と同様、通信装置1は、データの受信を行なう装置である。図24ではシステムバス11上にNIC(Network Interface Card)12、CPU13、メモリ14が接続されている。
NIC12はMAC(Media Access Control)機能を持っており、ネットワーク3から受信したパケット10を一時的に保持するFIFO(First−In First−Out)メモリ15を持つ。
通信装置1はネットワーク3から例えばEthernet(登録商標)などの有線ケーブルを通して受信したパケット10を一時的にNIC12のFIFOメモリ15に蓄積し、蓄積されたパケットはCPU13によって、NIC12のFIFOメモリ15からシステムのメモリ14にシステムバス11を通して移動される。
なお、上記NIC12のFIFOメモリ15からメモリ14への移動において、別途DMAコントローラを具備し、CPUではなく、DMAコントローラにより移動される場合もある。
図26に、図24に示した通信装置1におけるTCPセグメントの受信処理の概要を示す。通信装置の機能構成は、アプリケーション20、プロトコルスタック30及び物理40の各レイヤに大別できる。
アプリケーションレイヤ20の機能は、通信装置1上で動作するアプリケーションにより実現される。
物理レイヤ40は、NIC12の有する機能(MAC機能)により実現される。
プロトコルスタック30は、TCP31、UDP32、ICMP33などのプロトコルを実現する機能部、および、IP34、Interface35から構成される。
IP34は、送信するデータにIPヘッダを付与したり、受信したIPパケットを分解し、TCP、UDP、ICMPなどの各プロトコル機能部に渡したりする。
TCP機能部31は、前述したウィンドウ制御を行ってWinを決定するウィンドウ制御部38を有する。
Interface35は、IP34から渡されるデータにEtherヘッダを付与して物理レイヤ40を実現するハードウェアであるNIC12に渡したり、NIC12から渡されたデータパケットから、Etherヘッダを取り除いたりする。
また、プロトコルスタック30において、パケットは、パケットバッファ36と呼ばれるメモリで管理される。パケットバッファ36は、図24に示したメモリ14に含まれる。通常、パケットバッファ36は、メモリ取得・解放のオーバーヘッドを減らすため固定長ブロックメモリで管理されている。一般的に固定長ブロックのサイズとして、MSS付近に設定されることが多い。
ソケットキュー37は、プロトコル処理が完了したパケット10をアプリケーションデータとして、アプリケーションが受信処理を行なうまで、一時的にパケットバッファに格納した状態で保持するFIFO(First−In First−Out)メモリである。なお、ここでは、データをパケットバッファに格納した状態でソケットキュー37に保持していると説明したが、実装によっては、他の別のメモリ領域を使用して、ソケットキューに保持する方法、パケットバッファに格納してソケットキューに保持しておく方法や、パケットバッファを使用しつつ、データコピーを行なう方法がある。
アプリケーション20は、プロトコルスタック30により処理され、ソケットキュー37に保持されているデータを受信する。
NIC12から移動されたパケット10は、システムバス11を介して、プロトコルスタック30内に移動され、パケットバッファ36に格納される。パケット10は、プロトコルスタック30内では、常にパケットバッファ36に格納されてヘッダ処理、プロトコル処理が行われる。この例において、パケット10は、TCPセグメントであるため、TCPのプロトコル処理が完了した後、パケットバッファ36に格納された状態で、ソケットキュー37に保持される。
ソケットキュー37に保持されたパケット10は、アプリケーション20により任意のタイミングで受信され、パケットバッファ36は、受信された後、開放され、新たなパケットのために使用することが可能となる。
<TCP通信中の通信装置内の処理と、Win通知>
図27に従来の受信側ウィンドウ制御による、送信側への送信抑制を示した図であり、通信装置1が、通信装置2からネットワークを介して、送信されるパケットP1、P2、P3に含まれるデータを受信する例を示している。
図27に従来の受信側ウィンドウ制御による、送信側への送信抑制を示した図であり、通信装置1が、通信装置2からネットワークを介して、送信されるパケットP1、P2、P3に含まれるデータを受信する例を示している。
尚、図27では、通信装置2と通信装置1とのTCP接続時のコネクション設立に至るまでの通信のシーケンスを省略する。
図27において、ACKz(x,y)は、受信側装置である通信装置1が送信するACKを示す。Pz(x,y)は、送信側装置である通信装置2が送信するデータを含むデータパケットを示す。xは、通信装置1が受信可能なWinを示し、yは1パケットに含まれるデータサイズ(以下、LEN)を示す。また、zは、通信装置1、通信装置2が送信した順番に別々の値を付与する。
また、通信装置1は、受信可能なWinを含むACKを通信装置2へ送信するが(ST1)、ここでは、通信装置1における1つのパケットバッファのサイズが1500byte、MSSサイズを1460byteとし、図示しないST1以前の状態から、Win(図27中のW)として3×1460byteを通知したこととする。
また、通信装置1は、通信装置1と通信装置2とのTCPコネクションのために、最大保持データ量Dmax(例として8000byte)のサイズの受信バッファを持つとする。
まず、通信装置2は、ACK1を受信する。通信装置2は、通信装置1に対してACK内に示されたWin(3×1460byte)までのデータが送信可能であることを識別する。
次に、通信装置2は、P1〜P3までのデータパケットを送出する。ここで、送信側装置である通信装置2は、スロースタート等の送信側輻輳制御との関係で、必ずしも受信した全てのWinサイズのTCPセグメントを送出する必要はなく、ここでは、LENが1460byteのパケットPz(z=1〜3)を送信することとする。
次に、通信装置1は、P1〜P3までのデータパケットをネットワーク3を通して受信する。通信装置1は、受信したデータパケットP1〜P3をNIC12にて一時的にFIFOメモリ15に格納する。図27には図示しないCPU13は、任意のタイミングでパケットバッファに格納して、プロトコルスタックにパケットを移動する。このとき、受信したパケットは、1パケットごとにパケットバッファ36に格納される。
パケットバッファ36に格納されたパケットは、プロトコルスタック30において、各々のデータパケットP1〜P3について、データパケット毎にヘッダ処理、プロトコル処理を行い、ソケットキュー37にアプリケーションデータとして保持され、アプリケーション20が受信するのを待つ(ST2、ST3、ST4)。
次に、通信装置1は、Win制御部38によって現在の受信可能なデータサイズに基づいてWinとして算出し告知するウィンドウサイズWadを決定する。このWadを含むACK2を通信装置2へ送信する(ST5)。現在受信可能なデータサイズWdは、一例として図28に示すように、最大保持データ量Dmaxから実受信データ量Dcurを減算することにより算出される。
ST5では、最大保持データ量Dmaxと受信したP1〜P3についての実受信データ量Dcurの差分、Dmax−Dcurであり、Wd=(8000−1460×3)byteである。
アプリケーション20は、任意のタイミングでソケットキュー37からデータパケットP1〜P3より抽出されたデータを受信し、アプリケーションがソケットキューから受信したサイズ分、ウィンドウ制御部の保持するWinの値を大きくし、データを受信したパケットバッファを開放する(ST6)。
以上のような処理を繰り返し、受信側装置である通信装置1は、TCP通信時におけるWin制御を行なう。
このように、従来のTCPを用いた通信における受信側装置のウィンドウ制御は、所定の時間に受信したデータのサイズに基づくものであり、受信側装置の受信バッファが受信することができる残りのデータサイズに基づいてウィンドウサイズを決定していた。
「マスタリングTCP/IP 入門偏 第3版」、竹下隆史、村山公保、荒井透、苅田幸雄[平成14年2月25日] 標準仕様書「RFC793」、IETF、[平成17年5月18日検索]、インターネット<URL:http://www.ietf.org/rfc/rfc793.txt>
「マスタリングTCP/IP 入門偏 第3版」、竹下隆史、村山公保、荒井透、苅田幸雄[平成14年2月25日] 標準仕様書「RFC793」、IETF、[平成17年5月18日検索]、インターネット<URL:http://www.ietf.org/rfc/rfc793.txt>
しかしながら、従来の受信データのサイズに基づく受信側ウィンドウ制御を、ネット家電のようにCPUが低速な装置やメモリ資源が少ない装置(以下、低性能な装置)に適用した場合、装置が多量のショートパケットを受信するときなどの受信側装置の処理負荷が増加するときに、送信側に対するフロー制御が充分でないことがある。
例えば、図27では、通信装置2は1460byteのデータパケットを送信した例を示したが、通信装置2の送出するTCPセグメントのサイズは、必ずしもMSSに近いTCPセグメントを含むパケットではなく、実際にはアプリケーションの実装方法や、No Delay送信、もしくは、極端に小さいデータサイズのパケット(以降、ショートパケット)のDoS攻撃などにより、ショートパケットが多量に送信されることがある。
送信されたショートパケットを多量に受信すると、受信側装置では、各々のデータパケットに対して、前述したようにNICでのデータパケット受信からアプリケーション部でのアプリケーションデータの抽出までの処理が必要となる。
ショートパケットを多量に受信した際に、通信装置に従来のウィンドウ制御を適用すると、受信側装置は前述のパケット毎の処理により多くのパケット処理が完了していないにもかかわらず、受信バッファの残りデータサイズ(Dmax−Dcur)は依然として大きいこととなる。従って送信側に通知する告知ウィンドウサイズは大きいものとなってしまい、結果としてこの告知ウィンドウサイズの通知を受けた送信側装置は、通知された告知ウィンドウサイズに見合うサイズや数のデータパケットを送出する。
このような場合には、受信側の状態を反映したフロー制御が充分に行われていない。
このため、受信側装置のデータパケット受信状況を適切に反映した告知ウィンドウサイズを送信側装置に通知することが望ましい。
前記従来の課題を解決するために、本願発明は、通信装置であって、データパケットを受信するパケット受信部と、受信したパケットを保持するパケット保持部と、告知ウィンドウサイズを決定するウィンドウ制御部と、決定された前記告知ウィンドウサイズを含め、受信したデータパケットに対応したACKを生成するACK生成部と、生成された前記ACKをデータパケットに含めて送出するデータパケット送出部と、を含み、前記ウィンドウ制御部は、保持データパケット数と固定サイズとに基づいて告知ウィンドウサイズを決定することを特徴とする。
本発明の通信装置は、受信装置の保持データパケット数に基づいて、送信側装置からの余剰なトラフィックを抑制することができるフロー制御を実現することができる。
以下本発明の実施の形態について、図面を参照しながら説明する。
(実施の形態1)
図2に、本発明の一実施の形態に係るネットワーク構成例および通信装置のハードウェア構成例を示す。
図2に、本発明の一実施の形態に係るネットワーク構成例および通信装置のハードウェア構成例を示す。
<<ネットワーク構成>>
通信装置1および通信装置2はネットワーク3と有線または無線で接続する通信機能を持つ装置であり、例えば、Ethernet(登録商標)インタフェースを備えた装置(例えばPCや、ネットワーク通信が可能な家電装置など)である。
通信装置1および通信装置2はネットワーク3と有線または無線で接続する通信機能を持つ装置であり、例えば、Ethernet(登録商標)インタフェースを備えた装置(例えばPCや、ネットワーク通信が可能な家電装置など)である。
ネットワーク3は有線または無線を含むネットワークであり、インターネットなどの公衆ネットワーク、インターネットVPNなどのプライベートネットワーク、家電製品を相互に接続するホームネットワークなどが例として挙げられる。
実施の形態1では、通信装置1と通信装置2の間でTCPのコネクションを確立し、通信装置2から通信装置1にデータを送信する。ここで、TCPのコネクションにおけるデータ送信の関係において、データ送信元の通信装置2を送信側装置、データ送信先の通信装置1を受信側装置と呼ぶ。例えば、FTP(File Transfer Protocol)サーバである送信側装置(例えばPC)からFTPクライアントとして動作するアプリケーションが動作する受信側装置がファイルをダウンロードする場合や、POP(Post Office Protocol)サーバである送信装置から、電子メールを扱うアプリケーションが動作する受信側装置で電子メールを受信する場合などが想定できる。
本実施の形態では、通信装置1を本発明の一実施の形態に係る通信装置として説明を行なう。なお、通信装置2は、送信側装置として、本発明が適用されていない従来のウィンドウ制御を行う通信装置であってもよいし、本発明が適用された受信処理の機能部を持つ通信装置であってもよい。
<<通信装置の機能構成図>>
以下、通信装置1の本発明の一実施の形態が係る機能構成について、図2を用いて説明を行なう。
以下、通信装置1の本発明の一実施の形態が係る機能構成について、図2を用いて説明を行なう。
(a)NIC12:
NIC12は、システムバス11上に接続されたハードウェアである。CPU13によって渡されたデータをネットワーク3に送信する機能とネットワーク3から受信したデータを受信する機能を有する。ネットワーク3から受信したデータを一時的に保持したり、CPU13から渡されたデータを一時的に保持したりするFIFOメモリ15をもつ。なお、FIFOメモリは、受信用FIFOメモリと送信用FIFOメモリが独立していても良い。
NIC12は、システムバス11上に接続されたハードウェアである。CPU13によって渡されたデータをネットワーク3に送信する機能とネットワーク3から受信したデータを受信する機能を有する。ネットワーク3から受信したデータを一時的に保持したり、CPU13から渡されたデータを一時的に保持したりするFIFOメモリ15をもつ。なお、FIFOメモリは、受信用FIFOメモリと送信用FIFOメモリが独立していても良い。
(b)CPU13:
CPU13は、NIC12のFIFOメモリ15に格納されたデータをメモリ14に移動する(読み出し)機能と、メモリ14に格納されているデータをNIC12のFIFOメモリ15に移動する(書き込み)機能をもつ。また、メモリ14に格納さているデータに対してデータの解析や送信用データの作成処理など、TCPを含むプロトコル処理も行なう。また、通信アプリケーションや、必要に応じてその他のプログラムをメモリ14を使用しながら実行する機能を持つ。
CPU13は、NIC12のFIFOメモリ15に格納されたデータをメモリ14に移動する(読み出し)機能と、メモリ14に格納されているデータをNIC12のFIFOメモリ15に移動する(書き込み)機能をもつ。また、メモリ14に格納さているデータに対してデータの解析や送信用データの作成処理など、TCPを含むプロトコル処理も行なう。また、通信アプリケーションや、必要に応じてその他のプログラムをメモリ14を使用しながら実行する機能を持つ。
(c)メモリ14:
送信するデータ、および、受信するデータを含む、データを保持する機能を持つ。
送信するデータ、および、受信するデータを含む、データを保持する機能を持つ。
なお、メモリ14とNIC12のFIFO15間におけるデータの転送は、別途DMAコントローラを具備し、CPUではなく、DMAコントローラにより転送を行なう場合もある。
なお、各プロトコル処理は、CPU13により実施されるのではなく、別途ハードウェアでそれぞれ実施されてもよい。
以下、通信装置1について、図2で示した構成例におけるCPU13で実施されるプログラムを例として図3を用いてさらに詳細に説明を行なう。
図2に示した機能構成は、図1に示したCPU13上で動作するソフトウェアとして実現可能である。なお、図2の構成図は、受信側装置として、本発明に係るTCPデータの受信処理を中心として記載しているが、TCPデータの送信処理を行なうための他の機能部を具備していてもよい。
以下、各機能部の説明を記述するにあたり、本発明が係る受信処理についてのみ詳細に記述し、TCPデータ送信処理に係る機能および動作の説明は省略する。
なお、図3においては、データの流れをいくつかの種類の線を用いてあらわしている。実線はパケットまたはデータの流れを示すデータフロー、点線は制御信号(通知またはパラメータ)の流れを示す制御フローである。
図3において、通信装置1は、ネットワーク部1300と、プロトコルスタック部1200と、アプリケーション部1100から構成される。
ネットワーク部1300は、ネットワーク3からデータパケットを受信する。本実施の形態では、ネットワーク部はMAC処理部を有し、ネットワーク3から受信したパケットについてMAC処理を行い、FIFOメモリ15に保持しておく機能、および、プロトコルスタック部1200から渡されるパケットに対して、MAC処理を行い、ネットワーク3へ送信する機能を持つ。
プロトコルスタック部1200は、ネットワーク部1300より受信するデータパケットまたはネットワーク部1300へ送信するデータパケットを処理する機能部であり、その詳細な構成として、パケットバッファ管理部1400、API部1210、TCP処理部1220、IP処理部1230、Interface処理部1240、を有している。
TCP処理部1220は、受信データ管理部1221、Win制御部1222、ACK生成部1224、TCP送信部1225、およびTCP受信部1226を有する。なお、通信装置1には、UDPプロトコル、ICMPプロトコル、ICMPv6プロトコルなどの処理を行なう機能部を有してもよい。
アプリケーション部1100は、プロトコルスタック部との間で、アプリケーションデータを受信および送信することにより、FTPなどのアプリケーション処理を行なう機能を持つ。
(1)パケットバッファ管理部1400
パケットバッファ管理部1400は、通信装置全体の使用可能パケットバッファ数SPBenを管理しており、パケットバッファの開放処理、獲得処理を行なう。パケットバッファは、アプリケーションデータやネットワークからの受信データを所定の単位で格納するものであり、TCPヘッダやIPヘッダも含むことが可能なメモリ管理単位である。管理するデータの実体は、図2のメモリ14に配置される。なお、パケットバッファだけでなく、図2に記載のメモリ14を管理している機能部に対して、使用可能な領域があるか、否かを問い合わせて、使用可能な領域があれば、それをパケットバッファとして利用する機能を持っていてもよい。なお、パケットバッファは、メモリ取得・解放のオーバーヘッドを減らすためには、固定長ブロックメモリで管理されることが望ましいが、可変長ブロックメモリであっても構わない。
パケットバッファ管理部1400は、通信装置全体の使用可能パケットバッファ数SPBenを管理しており、パケットバッファの開放処理、獲得処理を行なう。パケットバッファは、アプリケーションデータやネットワークからの受信データを所定の単位で格納するものであり、TCPヘッダやIPヘッダも含むことが可能なメモリ管理単位である。管理するデータの実体は、図2のメモリ14に配置される。なお、パケットバッファだけでなく、図2に記載のメモリ14を管理している機能部に対して、使用可能な領域があるか、否かを問い合わせて、使用可能な領域があれば、それをパケットバッファとして利用する機能を持っていてもよい。なお、パケットバッファは、メモリ取得・解放のオーバーヘッドを減らすためには、固定長ブロックメモリで管理されることが望ましいが、可変長ブロックメモリであっても構わない。
(2)API部1210
API部1210は、アプリケーション部1100とTCP処理部1220との間の要求・データの受け渡し、および、その処理完了の通知を行なう機能部である。アプリケーション部1100の保有する機能としては例えばFTPクライアントなどが挙げられる。アプリケーション部1100からのデータ受信要求に応じて、TCP処理部1220にデータの受け渡しを要求し、TCP処理部1220から渡されたデータを、アプリケーション部1100が処理できるように必要に応じて変換やコピーを行ない、その処理の完了をTCP処理部1220に通知する。なお、データ送信に関する記述は省略する。
API部1210は、アプリケーション部1100とTCP処理部1220との間の要求・データの受け渡し、および、その処理完了の通知を行なう機能部である。アプリケーション部1100の保有する機能としては例えばFTPクライアントなどが挙げられる。アプリケーション部1100からのデータ受信要求に応じて、TCP処理部1220にデータの受け渡しを要求し、TCP処理部1220から渡されたデータを、アプリケーション部1100が処理できるように必要に応じて変換やコピーを行ない、その処理の完了をTCP処理部1220に通知する。なお、データ送信に関する記述は省略する。
(3)TCP処理部1220
TCP処理部1220は、IP処理部1230から受け取ったTCPセグメントから、API部1210に渡すアプリケーションデータに変換する機能部である。TCP処理部1220はソケットキューを管理する。ソケットキューは、コネクションごとに管理されるパケットバッファ管理のためのリストであり、API部1210、および、IP処理部1230とのデータの受け渡しのために一時的にデータを保持する。また、TCP処理部1220は、TCP通信の開始・終了(コネクションの確立・切断)に応じて、ソケットキューの作成、削除を行なう。TCP処理部1220は、IP処理部1230からパケットバッファを受け取り保持し、受け取った一つ、あるいは、複数のデータパケットに含まれるデータを抽出し、送信元アドレス、宛先アドレス、送信元ポート、宛先ポートなどを基に、対応するTCP通信の単位(コネクション)に対するソケットキューにパケットバッファを関連付ける。また、API部1210からのデータの受け渡し要求に応じて、コネクションに対するソケットキューに関連付けられたパケットバッファから、該当するデータを受け渡し、パケットバッファをソケットキューから関連付け解除し、パケットバッファを開放する。また、IP処理部1230から受け取ったTCPセグメントに対するACKを作成しIP処理部1230に受け渡す。なお、TCPデータ送信に関する記述は省略する。
TCP処理部1220は、IP処理部1230から受け取ったTCPセグメントから、API部1210に渡すアプリケーションデータに変換する機能部である。TCP処理部1220はソケットキューを管理する。ソケットキューは、コネクションごとに管理されるパケットバッファ管理のためのリストであり、API部1210、および、IP処理部1230とのデータの受け渡しのために一時的にデータを保持する。また、TCP処理部1220は、TCP通信の開始・終了(コネクションの確立・切断)に応じて、ソケットキューの作成、削除を行なう。TCP処理部1220は、IP処理部1230からパケットバッファを受け取り保持し、受け取った一つ、あるいは、複数のデータパケットに含まれるデータを抽出し、送信元アドレス、宛先アドレス、送信元ポート、宛先ポートなどを基に、対応するTCP通信の単位(コネクション)に対するソケットキューにパケットバッファを関連付ける。また、API部1210からのデータの受け渡し要求に応じて、コネクションに対するソケットキューに関連付けられたパケットバッファから、該当するデータを受け渡し、パケットバッファをソケットキューから関連付け解除し、パケットバッファを開放する。また、IP処理部1230から受け取ったTCPセグメントに対するACKを作成しIP処理部1230に受け渡す。なお、TCPデータ送信に関する記述は省略する。
(4)IP処理部1230
IP処理部1230は、Interface処理部1240から受け取ったIPパケットが格納されたパケットバッファからTCPセグメントが格納されているものを抽出し、TCP処理部1220に受け渡す機能部である。また、TCP処理部1220から受け取った、TCPセグメントが格納されているパケットバッファにIPヘッダを追加してIPパケットを構築し、Interface処理部1240に受け渡す。なお、TCP以外のプロトコルであるUDPなどの処理を行ってもよい。
IP処理部1230は、Interface処理部1240から受け取ったIPパケットが格納されたパケットバッファからTCPセグメントが格納されているものを抽出し、TCP処理部1220に受け渡す機能部である。また、TCP処理部1220から受け取った、TCPセグメントが格納されているパケットバッファにIPヘッダを追加してIPパケットを構築し、Interface処理部1240に受け渡す。なお、TCP以外のプロトコルであるUDPなどの処理を行ってもよい。
(5)Interface処理部1240
Interface処理部1240は、MAC処理部1310から受け取ったMACフレームからIPパケットを抽出し、パケットバッファ管理部1400にパケットバッファ獲得要求を行い、パケットバッファにIPパケットを格納し、IP処理部1230に受け渡す機能部である。また、IP処理部1230から受け取った、IPパケットが格納されているパケットバッファにMACヘッダを追加してMACフレームを構築しMAC処理部1310に受け渡す。
Interface処理部1240は、MAC処理部1310から受け取ったMACフレームからIPパケットを抽出し、パケットバッファ管理部1400にパケットバッファ獲得要求を行い、パケットバッファにIPパケットを格納し、IP処理部1230に受け渡す機能部である。また、IP処理部1230から受け取った、IPパケットが格納されているパケットバッファにMACヘッダを追加してMACフレームを構築しMAC処理部1310に受け渡す。
(6)MAC処理部1310
MAC処理部1310は、図2に示したNIC12が受け取ったデータをInterface処理部1240に受け渡す機能部である。この処理は、図2のNIC12のFIFOメモリ15から図2のメモリ14にデータを渡す(読み出し)処理である。また、Interface処理部1240から受け取ったMACフレームをNIC12に渡す機能部である。この処理は、図2のメモリ14からNIC12のFIFOメモリ15に渡す(書き込み)処理である。
MAC処理部1310は、図2に示したNIC12が受け取ったデータをInterface処理部1240に受け渡す機能部である。この処理は、図2のNIC12のFIFOメモリ15から図2のメモリ14にデータを渡す(読み出し)処理である。また、Interface処理部1240から受け取ったMACフレームをNIC12に渡す機能部である。この処理は、図2のメモリ14からNIC12のFIFOメモリ15に渡す(書き込み)処理である。
以下、上記のTCP処理部1220のさらに詳細な構成について図3を使用して説明する。
(3−a)受信データ管理部1221
受信データ管理部1221は、TCP受信部1226から受け取ったデータが格納されているパケットバッファを、ソケットキューに関連付けした状態で管理する。本実施の形態での受信データ管理部1221は、各ソケットキューに対して、以下の2つの値を管理している。
受信データ管理部1221は、TCP受信部1226から受け取ったデータが格納されているパケットバッファを、ソケットキューに関連付けした状態で管理する。本実施の形態での受信データ管理部1221は、各ソケットキューに対して、以下の2つの値を管理している。
[保持データパケット数PBcur]
1つのTCP通信(コネクション)において、データパケットを現在何個保持しているかを示す数であり、本実施の形態ではソケットキューに関連付けされているパケットバッファの個数を示す。
1つのTCP通信(コネクション)において、データパケットを現在何個保持しているかを示す数であり、本実施の形態ではソケットキューに関連付けされているパケットバッファの個数を示す。
[最大保持データパケット数PBmax]1つのTCP通信(コネクション)のために、保持することができる最大のデータパケット数を示す最大数であり、本実施の形態では受信データ管理部1221内のソケットキューに関連付け可能な最大パケットバッファの個数を示す。
尚、受信データ管理部1221は、さらに以下の2つの値を管理してもよい。
[最大保持データ量Dmax]
1つのTCP通信(コネクション)のために、ソケットキューに保持可能な最大データ量(byte数)を示す。ここでは、DmaxはPBmaxとパケットバッファのサイズとの積であるとする。尚、DmaxはPBmaxの値とは独立して、例えば8192byte等に設定することも可能である。
1つのTCP通信(コネクション)のために、ソケットキューに保持可能な最大データ量(byte数)を示す。ここでは、DmaxはPBmaxとパケットバッファのサイズとの積であるとする。尚、DmaxはPBmaxの値とは独立して、例えば8192byte等に設定することも可能である。
[実受信データ量Dcur]
1つのTCP通信(コネクション)において、ソケットキューに関連づけられているパケットバッファに格納されているデータ量(byte数)の総計を示す。
1つのTCP通信(コネクション)において、ソケットキューに関連づけられているパケットバッファに格納されているデータ量(byte数)の総計を示す。
また、受信データ管理部1221は、ソケットキューを、TCP通信の開始・終了(コネクションの確立・切断)に応じて作成、削除を行なう。さらに、アプリケーション部1100からの受信要求に対し、ソケットキューに関連づけられたパケットバッファに格納されたデータを、API部1210を介してアプリケーション部1100に渡し、データを格納していたパケットバッファをパケットバッファ管理部1400に開放要求する。
また、受信データ管理部は、Win制御部1222からの最大保持データパケット数PBmaxと、現在保持データパケット数PBcurの問い合わせに対し応答する。
また、受信データ管理部1221が最大保持データ量Dmaxと、実受信データ量Dcurとを保持する場合は、Win制御部1222からの最大保持データ量Dmaxと、実受信データ量Dcurの受け渡し要求に対し応答する。
なお、最大保持データパケット数PBmax、および、最大保持データ量Dmaxは、通常、ソケットキュー作成時にAPI部1210により設定されるが、その後に動的に変更要求を受けてもよい。
なおまた、ソケットキュー作成時、パケットバッファ管理部1400に対して、最大保持データパケット数PBmax分のパケットバッファを固定的に確保することを要求してもよい。要求を行なうことにより、現在保持している保持データパケット数PBcurが、最大保持データパケット数PBmaxに到達する前に、パケットバッファ管理部1400から取得できなくなることを防ぐことができる。
(3−b)Win制御部1222
Win制御部1222は、受信データ管理部1221に問い合わせ、保持データパケット数PBcurからWin(告知ウィンドウのサイズWad)を決定する。また、ACK生成部のWin受け渡し要求に対して、告知Winサイズを応答する。
Win制御部1222は、受信データ管理部1221に問い合わせ、保持データパケット数PBcurからWin(告知ウィンドウのサイズWad)を決定する。また、ACK生成部のWin受け渡し要求に対して、告知Winサイズを応答する。
なお、告知WinサイズWadの決定方法の詳細については後述する。
(3−e)ACK生成部1224
ACK生成部1224は、TCP受信部1226よりSeqを受け取った場合、Win制御部1222に問い合わせ、受け取った告知WinサイズWadとTCP受信部1226より受け取ったSeqよりACKを作成し、TCP送信部1225に渡す機能をもつ。
ACK生成部1224は、TCP受信部1226よりSeqを受け取った場合、Win制御部1222に問い合わせ、受け取った告知WinサイズWadとTCP受信部1226より受け取ったSeqよりACKを作成し、TCP送信部1225に渡す機能をもつ。
(3−f)TCP送信部1225
ACK生成部1224から受け取ったTCPセグメントに必要なTCPヘッダ情報を設定しIP処理部1230に渡す機能をもつ。
ACK生成部1224から受け取ったTCPセグメントに必要なTCPヘッダ情報を設定しIP処理部1230に渡す機能をもつ。
(3−g)TCP受信部1226
TCP受信部1226は、TCPセグメントからデータを抽出する処理を実施し、パケットバッファに格納したまま、抽出したデータを受信データ管理部1221に渡す機能をもつ。また、Seqが順序通りであった場合に次のSeqをACK生成部1224に渡す機能をもつ。なお、ACK生成部1224へ次のSeqを渡す機能は、毎回発生しなくてもよい。このとき、ACK生成部1224への通知は、複数回に1回の割合で通知されたり、遅延ACKアルゴリズムにより、システムのタイマから所定時間経過後に行われたりする。遅延ACKアルゴリズムは、ACKの送信を抑えることにより、効率的なTCP通信を実現するアルゴリズムである。その詳細は非特許文献1に記載の通りであるため、ここでは説明を省略する。
TCP受信部1226は、TCPセグメントからデータを抽出する処理を実施し、パケットバッファに格納したまま、抽出したデータを受信データ管理部1221に渡す機能をもつ。また、Seqが順序通りであった場合に次のSeqをACK生成部1224に渡す機能をもつ。なお、ACK生成部1224へ次のSeqを渡す機能は、毎回発生しなくてもよい。このとき、ACK生成部1224への通知は、複数回に1回の割合で通知されたり、遅延ACKアルゴリズムにより、システムのタイマから所定時間経過後に行われたりする。遅延ACKアルゴリズムは、ACKの送信を抑えることにより、効率的なTCP通信を実現するアルゴリズムである。その詳細は非特許文献1に記載の通りであるため、ここでは説明を省略する。
<<TCPセグメント受信とACK送信処理>>
図3を用いて、TCPセグメントの受信時の処理と、ACK送信処理について説明を行なう。通信装置1は、データパケットを受信し、受信したパケットからアプリケーションデータを抽出し、アプリケーション部1100にて処理を行なう。また、所定のタイミングでTCPセグメントを受信したことを示すACKを送信する。
図3を用いて、TCPセグメントの受信時の処理と、ACK送信処理について説明を行なう。通信装置1は、データパケットを受信し、受信したパケットからアプリケーションデータを抽出し、アプリケーション部1100にて処理を行なう。また、所定のタイミングでTCPセグメントを受信したことを示すACKを送信する。
(ステップ1)パケット受信からTCP処理部1220までの処理(ST701)
まず、TCPセグメントを受信する処理から、TCP処理部1220までの処理を説明する。
まず、TCPセグメントを受信する処理から、TCP処理部1220までの処理を説明する。
通信装置1では、MAC制御部1310よりパケットを受信し、Interface処理部1240がMAC制御部1310よりデータを取得する。この際、Interface処理部1240は、パケットバッファ管理部1400にパケットバッファ獲得要求を行い、パケットバッファをパケットバッファ管理部1400より獲得し、受信したパケットに含まれるデータをパケットバッファに格納する。
パケットバッファ管理部1400は、Interface処理部1240に渡したパケットバッファ数に応じて、使用可能パケットバッファ数SPBenを減らす。なお、1つのパケットバッファに格納可能なデータサイズ(1パケットバッファサイズ)よりも、受信したパケットのデータサイズが大きい場合、パケットバッファをチェーン構造にすることにより、複数のパケットバッファを1つのパケットとして扱ってもよい。
さらにInterface処理部1240は、MACヘッダの解析などの処理を行い、IPパケットを抽出し、IPパケットが格納されているパケットバッファをIP処理部1230に渡す。
IP処理部1230は、IPヘッダ解析などのIP処理を行い、上位のプロトコルがTCPであることを判定すると、TCPセグメントを抽出し、TCPセグメントが格納されているパケットバッファをTCP処理部1220へ渡す。なお、IP処理部1230におけるIP処理はRFCに記載の処理を逸脱しないため、ここでの説明は省略する。
(ステップ2)TCP受信部1226からソケットキューへの関連付け処理(ST702、ST703)
次に、IP処理部1230から渡されたパケットバッファに対する、TCP受信部1226の処理から、受信データ管理部1221におけるソケットキューへの関連付け処理までを説明する。
次に、IP処理部1230から渡されたパケットバッファに対する、TCP受信部1226の処理から、受信データ管理部1221におけるソケットキューへの関連付け処理までを説明する。
ST701によりTCPセグメントと判断された受信パケットは、TCP受信部1226において、TCPセグメントからアプリケーションデータを抽出する処理を実施し、パケットバッファに格納したまま、抽出したデータを受信データ管理部1221に渡す(ST702)。
受信データ管理部1221は、受信したパケットバッファをソケットキューに関連付ける。また、ソケットキューに関連付けた保持データパケット数に応じて保持データパケット数PBcurを増やす。
また、TCPヘッダ部に含まれるSeqまでの全てのデータを受信していた場合、受信したTCPヘッダに含まれるSeqまでのデータは受信していることを示すために、通信装置2に対してACK送信要求を行なう。
TCP受信部1226は、ACK送信要求として、次のSeqをACK生成部1224に渡す(ST703)。ただし、ACKの送信は毎回行なう必要はなく、複数回に1回の割合で通知されたり、遅延ACKアルゴリズムにより、システムのタイマから所定時間経過後に行われたりしてもよい。
(ステップ3)アプリケーション部1100によるデータ受信処理
次に、受信データ管理部1221のソケットキューに関連付けられているパケットバッファに格納されているデータをアプリケーション部1100が受信する処理までを説明する。
次に、受信データ管理部1221のソケットキューに関連付けられているパケットバッファに格納されているデータをアプリケーション部1100が受信する処理までを説明する。
アプリケーション部1100は、API部1210に対して、データの受信要求を行なう。API部1210は、受信要求に対して、受信データ管理部1221のソケットキューに関連づけられているデータの受け渡し要求を行なう。受け渡し要求を受けた受信データ管理部1221は、ソケットキューに関連付けられているパケットバッファに格納されるデータをAPI部1210に渡し、API部1210はアプリケーション部1100に渡す。アプリケーション部1100は、受け渡されたデータを処理する(ST704)。
なお、受信データ管理部1221は、API部1210の受け渡し要求に対し、ソケットキューに関連付けられている全てのパケットバッファに格納されているデータを渡しても良いし、一部のデータを渡してもよい。
API部1210にデータを渡した後、受信データ管理部1221は、API部1210に渡したデータを格納していたパケットバッファの開放要求をパケットバッファ管理部1400に行い、パケットバッファ管理部1400は、パケットバッファを開放する(ST705)。さらに受信データ管理部1221は、ソケットキューから関連付けを外したパケットバッファ数や受信データ量に応じて、現在の保持データパケット数PBcur、および、実受信データ量Dcurを更新する。このとき、パケットバッファ管理部1400においても開放したパケットバッファ数に応じて、使用可能パケットバッファ数SPBenを増やす。
(ステップ4)ACK生成処理
次に、TCP受信部1226がACK生成要求を行った後の、ACK生成部1224の処理について説明する。
次に、TCP受信部1226がACK生成要求を行った後の、ACK生成部1224の処理について説明する。
ST702においてACK生成要求を受けたACK機能部は、告知WinサイズWadを設定するために、Win制御部1222に告知WinサイズWadを問い合わせる(ST706)。
Win制御部1222は、受信データ管理部1221に最大保持データパケット数PBmaxと、現在保持データパケット数PBcurを問い合わせて受け取り(ST707)、これらにより残りパケットバッファサイズWpbを算出する。残りパケットバッファサイズWpbは、パケットバッファ管理部1400が管理しているパケットバッファのうち、既にパケットを保持するために利用しているパケットバッファ以外のパケットバッファ数と、1つのパケットバッファに格納可能なデータサイズの積により算出される値である。次に、告知WinサイズWadを決定し、ACK生成部1224に渡す(ST708)。
なお、告知WinサイズWadの算出方法の詳細は後述する。
ACK生成部1224は、Win制御部1222に渡された告知WinサイズWadをACKのパラメータに含め、TCP送信部1225に送信要求を行なう(ST709)。
(ステップ5)ACK送信
最後に、ACK送信要求を受けたTCP送信部1225の処理からデータパケット送信までの処理を説明する。
最後に、ACK送信要求を受けたTCP送信部1225の処理からデータパケット送信までの処理を説明する。
TCP送信部1225は、ACK生成部1224からのACK送信要求を受けて、パケットバッファ管理部1400にパケットバッファ獲得要求を行い、パケットバッファを獲得する(ST710)。
パケットバッファ管理部1400は、使用可能パケットバッファ数SPBenの更新を行なう。獲得したパケットバッファに対し、上記でWin制御部1222から受け取った告知Winサイズを含んだACKのデータを格納し、TCPヘッダを作成し、ACKのデータに付加する。作成したACKをIP処理部1230に送信要求を行なう。なお、ACKのデータ、およびTCPヘッダの各パラメータの設定についてはRFC記載の範囲を逸脱しないため、説明を省略する。
送信要求を受けたIP処理部は、IPヘッダ追加などのIP処理を行い、Interface処理部1240はMACヘッダ追加などの処理を行い、MAC処理部1310に渡し、MAC処理部1310は、構築されたACKの送信を行なう(ST711)。なお、IP処理部1230、Interface処理部1240、MAC処理部の処理については、RFCに記載の処理を逸脱しないため、説明は省略する。
パケット送信後、Interface処理部1240は、パケットバッファ管理部1400にパケットバッファの開放要求を行う(ST712)。
パケットバッファ管理部1400は、開放処理、および、使用可能パケットバッファ数SPBenの更新を行なう。
以上のように、通信装置はTCPセグメントを受信し、ACKの送信を行なう。
<<告知Winサイズの算出方法>>
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、余剰なトラフィックを抑制する。
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、余剰なトラフィックを抑制する。
図1を用いて、Win制御部1222における告知WinサイズWadの算出方法の説明を行なう。
ここでは、告知WinサイズWadの算出の説明の一例として、1パケットバッファに1500byteのデータを格納可能であり、最大保持データパケット数PBmaxを8個とする。又、ショートパケットの例としてTCPセグメント1つに100byteのデータを含むパケット5個を受信し、受信した全てのパケットがプロトコルスタックで処理中でありソケットキューに関連付けられて保持されている場合を用いて、説明を行なう。
まず、Win制御部1222は、ACK生成部1224から告知WinサイズWadの問い合わせを受ける(S801)。
次に、Win制御部1222は、受信データ管理部1221に対して、最大保持データパケット数PBmaxと、現在保持データパケット数PBcurを問い合わせ、各値を受け取る(S802)。
次に、Win制御部1222は、最大保持データパケット数PBmaxと現在保持データパケット数PBcurの差分から保持可能である、残り保持データパケット数PBremを算出する(S803)。
S803で算出される保持可能残り保持データパケット数PBremと、最大保持データパケット数PBmax及び現在保持データパケット数PBcurとの関係を図4に示す。
次に、Win制御部1222は、1パケットバッファのサイズを固定サイズSとして、本実施の形態では1つのパケットバッファのサイズである1500byteを取得する(S804)。
次に、Win制御部1222は、保持可能な残り保持データパケット数PBremと固定サイズSとの積により、残りパケットバッファサイズWpbを算出する(S805)。
図5に、S803で算出される保持可能残り保持データパケット数PBremと、最大保持データパケット数PBmax及び現在保持データパケット数PBcurとの関係を示す。
図5は、対象となる1つのTCP通信に対するPBmax、PBcur、PBremの関係を示した図であり、1パケットバッファサイズに比べ、1つのパケットバッファに含まれるデータ量が小さい状態の一例である。具体的には、図5は、1パケットに100byteのデータを含んだパケットを5個受信し、これらを5個のパケットバッファに保持している状態を示している。
このように1パケットバッファに含まれるデータ量が少ない状態が発生するのは、通信相手のMTUサイズが小さく設定されている場合や、TELNETなどのように1つのパケットに少ないTCPデータ量しか含まずに送信するようなアプリケーションを用いた場合である。TELNETは、入力された文字を1文字ずつパケットに含め、データを送信するため、1パケットに含まれるデータ長の少ないTCP通信となる。また、TCPヘッダオプションが0であり、かつ、TCPセグメントサイズが140byteの場合、図5に示す通信が発生する。
図5には、S805で算出される、最大保持データパケット数PBmax、現在保持データパケット数PBcur、保持可能残り保持データパケット数PBremの各値の一例を示している。現在の保持データパケット数PBcurは5個であり、1つのパケットバッファには100byteのデータが格納されている。また、最大保持データパケット数PBmaxは、8個であるため、保持可能残り保持データパケット数PBremは8−5=3個である。1パケットバッファサイズは1500Kbyteであるため、残りパケットバッファサイズWpbは(3×1500byte)である。
最後に、算出したWpbを告知WinサイズWadとして決定する(図1のS806)。
以上の構成により、残り保持データパケット数が少なくなった状態においても、通信装置が受信して現在保持している保持データパケット数から算出したWpbをWinサイズとして告知する。これにより、パケットが受信できず、再送による無駄なトラフィックが発生する状況を防ぐことができる。
例えば、前述のように100byteのショートパケットを連続して受信し、全てのパケットを保持している状況で、告知WinとしてDcurに基づいて算出される告知WinであるWdと、告知WinとしてPBcurに基づいて算出される告知WinであるWpbとの比較を図6に示す。Wadとして、常にWdを告知する場合、保持しているデータパケットが処理されず、残り保持データパケット数がなくなった状態においても、Wadと比較して大きいサイズのWdを告知するために、送信側装置からパケットが送信され、無駄なトラフィックが発生する。一方で、Wadとして、Wdと比較して小さいサイズのWpbを告知する本発明では、残り保持データパケット数からWpbが算出されるため、告知Winのサイズを小さくでき、無駄なトラフィックが発生することを防ぐことができる。
又、1500byteのパケットを連続して受信し、全てのパケットを保持している状況で、告知WinとしてDcurに基づいて算出される告知WinであるWdと、告知WinとしてPBcurに基づいて算出される告知WinであるWpbとの比較を図7に示す。図7のように比較的長いサイズのパケットの受信であれば、告知WinのサイズWadはDcurを基にしたものと同じように告知Winを決定することができる。
尚、上述の説明では、保持データパケット数は、ソケットキューに関連付けられているパケット数であるとしたが、保持データパケット数は告知ウィンドウを決定するために必要となるパケット数であればよい。
例えば、受信したパケットが対象のTCP通信であることが判断され、ソケットキューに関連付けられていなくても、TCP通信であることが判断された直後からアプリケーション部に受信される前までのパケット数とすることができる。また、受信したパケット全てから告知ウィンドウサイズを算出する場合であれば、通信装置がデータパケットを受信し、NICに記憶されてから、アプリケーション部に受信される前までの全てのパケットとすることができる。
また、告知ウィンドウサイズ計算後、ACK生成中にパケットを受信した場合は、その受信したパケットを保持パケット数に含んでも、含まなくてもよい。保持パケット数に含む場合は、告知ウィンドウサイズを再計算する処理が必要となる。
なお、残りパケットバッファサイズWpbの算出は、受信データ管理部1221が実施し、ACK生成部に渡しても良い。
(実施の形態2)
図8に、実施の形態2の通信装置の構成図を示す。図中、実施の形態1と共通する部分には共通の番号を付与している。
図8に、実施の形態2の通信装置の構成図を示す。図中、実施の形態1と共通する部分には共通の番号を付与している。
本実施の形態では、受信データ管理部1221は、各ソケットキューに対して前述したPBcur、PBmax、Dmax、及びDcurの4つの値を管理しており、Dmaxとして8192byteが設定されている。
又、本実施の形態は、実施の形態1で説明したWin制御部の中にサイズ取得部1222aとWin抑制部1222bとを分離して含む点が、実施の形態1と異なっている。
他の機能部については第1実施例と同様であるため説明を省略し、サイズ取得部1222aとWin抑制部1222bとについて以下説明する。
サイズ取得部1222aは、受信データ管理部1221に問い合わせ(ST707a)、応答された最大保持データ量Dmaxと、実受信データ量Dcurから、受信可能データ量Wdを算出する。また、Win抑制部1222bからの受信可能データ量Wdの問い合わせに対して応答する(ST706a、ST706b)。
受信可能データ量Wdは例えば、DmaxからDcurを減算することにより算出される。
前記算出に基づくWdは、最大保持データ量Dmaxと実受信データ量Dcurの差分となるが、受信可能データ量Wdは、必ずしも、前記演算により算出される必要はなく、最大保持データ量Dmaxと実受信データ量Dcurの差分に一定値を掛け合わせることにより算出したりしても構わない。
Win抑制部1222bは、サイズ取得部1222aに問い合わせ、応答された受信可能データ量Wdを得る。
また、Win抑制部1222bは、受信データ管理部1221に問い合わせて得た最大保持データパケット数PBmaxと保持データパケット数PBcurから残りパケットバッファサイズWpbを算出する。Wpb算出の方法は実施の形態1記載と同様であるため説明を省略する。
本実施の形態では、Win抑制部1222bは、受信可能データ量Wdと残りバッファパケットサイズWpbとを比較し、小さい方の値をWin(告知WinサイズWad)として決定する。
また、ACK生成部のWin受け渡し要求に対して、告知Winサイズを応答する。
次に、図9を用いてWin抑制部1222bがACK生成部1224から告知WinサイズWadの問い合わせを受けた後の、Win抑制部1222bにおける告知WinサイズWadの算出方法の一例の説明を行なう。
本実施の形態では、告知WinサイズWadの算出を説明するため、1パケットバッファに1500byteのデータを格納可能であり、最大保持データパケット数Pmaxを8個、最大保持データ量Dmaxを8192byteとする。
TCPパケット1パケットに100byteのデータを含むパケット5個がソケットキューに関連付けられている場合を用いて、説明を行なう。
(Calc−1)受信可能データ量の取得(ST81)
まず、Win抑制部1222bは、サイズ取得部1222aに対して、受信可能データ量Wdを問い合わせる(ST81)。
まず、Win抑制部1222bは、サイズ取得部1222aに対して、受信可能データ量Wdを問い合わせる(ST81)。
次に、サイズ取得部1222aは、受信データ管理部1221に最大保持データ量Dmaxと、実受信データ量Dcurを問い合わせる。サイズ取得部1222aは、受信データ管理部1221から受信した最大保持データ量Dmaxと、実受信データ量Dcurの差分から受信可能データ量Wdを算出し、Win制御部1222に応答する。なお、受信可能データ量の算出は、受信データ管理部1221が実施し、Win制御部1222に渡してもよい。
図10に最大保持データ量Dmax、実受信データ量Dcur、および、受信可能データ量Wdの関係を示す。図10には、各数値の一例も示しており、アプリケーション部1100からの受信要求を待つために関連づけられている実受信データ量Wdは、100byte×5=500byteであり、最大受信データ量Dmaxが8192であるため、受信可能データ量Wdは7692byteである。
(Calc−2)残りパケットバッファサイズWpbの算出(ST82)
次に、Win抑制部1222bは、実施の形態1と同様に受信データ管理部1221に対して、最大保持データパケット数PBmaxと、保持データパケット数PBcurを問い合わせ、各値を受け取る。
次に、Win抑制部1222bは、実施の形態1と同様に受信データ管理部1221に対して、最大保持データパケット数PBmaxと、保持データパケット数PBcurを問い合わせ、各値を受け取る。
Win制御部1222は、実施の形態1と同様、図11に示す、PBmax、PBcur、及びPBremの関係により、最大保持データパケット数PBmaxと保持データパケット数PBcurの差分から保持可能残り保持データパケット数PBremを算出する。
次に、PBremと固定サイズSとの積により、残りパケットバッファサイズWpbを算出する。
なお、残りパケットバッファサイズWpbの算出は、受信データ管理部1221が実施し、Win制御部1222に渡しても良い。
図11に最大パケットバッファ数PBmax、現在パケットバッファ数PBcur、保持可能残りパケットバッファ数PBremの関係を示す。図11は、1パケットバッファサイズに比べ、1つのパケットバッファに含まれるデータ量が小さい状態である。
具体的には、図11は、1パケットに100byteのデータを含んだパケットを5個受信した状態を示している。
図11には、最大パケットバッファ数PBmax、現在パケットバッファ数PBcur、保持可能残りパケットバッファ数PBremの各値の一例も示している。現在パケットバッファ数PBcurは5個であり、1つのパケットバッファには100byteのデータが格納されている。また、最大パケットバッファ数PBmaxは、8個であるため、保持可能残りパケットバッファ数PBremは8−5=3個である。1パケットバッファサイズは1500byteであるため、残りパケットバッファサイズWpbは4500byteである。
(Calc−3)告知WinサイズWadの設定(ST83、ST84、ST85、ST86)
さらに、Win抑制部1222bは、ST81においてWin制御部1222より渡された受信可能データ量Wdと、ST82において算出した残りパケットバッファサイズWpbとを比較する(ST83)。
さらに、Win抑制部1222bは、ST81においてWin制御部1222より渡された受信可能データ量Wdと、ST82において算出した残りパケットバッファサイズWpbとを比較する(ST83)。
本実施の形態では、告知するWinサイズWadは受信したパケットを必ず受信できるように設定するため、小さい方を告知WinサイズWadとする。
つまり、残りパケットバッファサイズWpbの方が小さければ、それを告知WinサイズWadに設定し(ST84)、一方、受信可能データ量Wdの方が小さければ、それを告知WinサイズWadに設定し(ST85)、設定した告知WinサイズWadをACK生成部に渡す(ST86)。
図12の例では、ST81においてWin制御部1222により渡された受信データ量は7692byteであり、ST82において算出された残りパケットバッファサイズWpbは、4500byteであるため、告知Winサイズは残りパケットバッファサイズWpbである、4500Kbyteとする。
以上の構成により、残りパケットバッファ数が少なくなった状態においても、残りパケットバッファ数から算出した残りパケットバッファ数をWinサイズとして告知することにより、自身で受信できない数のパケットを通信相手装置に送信させないように抑制することができる。これにより、パケットが受信できなかった場合の再送による無駄なトラフィックが発生することを防ぐことができる。
また、比較に基づいて告知Winの算出方法を切り替えるため、受信不可能であるにも関わらず、パケットを受信することを防ぎ、CPU処理負荷をかけてしまうことを防ぐことができる。例えば、上述のショートパケット(100byteデータ)を複数保持する状況で、PBcurに基づいて算出されるWpbと、Dcurに基づいて算出されるWbとを、図13に示す。
図13に示すように、保持パケット数が0からWpbとWbとが交差する保持パケット数nまではWdをWadとし、保持パケット数がnより大きい場合にはWpbをWadとして決定するため、保持パケット数に応じて段階的な告知Winの決定をすることができる。
このため、多量のパケットを短時間に受信し、保持データパケット数が多くなった場合にのみ、告知Winを急峻に小さくすることができ、装置のパケット処理状況に応じた送信抑制を実現することができる。
尚、Win抑制部1222bは、比較の結果、告知WinサイズWadを残りパケットバッファサイズWpbとした場合は、TCP受信部に対して、遅延ACKアルゴリズムの使用を無効する命令を送り、受信可能データ量Wdとした場合は、遅延ACKアルゴリズムを有効にする命令を送ることもできる(ST713)。
この場合は、さらに、残りパケットバッファサイズWpbをWinサイズとして告知した場合、TCP受信部に遅延ACKアルゴリズムを無効にする命令を送ることにより(ST713)、より早くACKを送信可能となり、変更されたWinサイズを告知することができる。
(実施の形態3)
実施の形態3は、実施の形態2において、告知Winサイズの算出方法で残りパケットバッファサイズWpbを算出する際に、パケットバッファ管理部1400bに使用可能パケットバッファ数SPBenを問い合わせ、受け取った値を元に判断し、残りパケットバッファサイズWpbを算出する機能を追加する点で、実施の形態2と異なる形態である。
実施の形態3は、実施の形態2において、告知Winサイズの算出方法で残りパケットバッファサイズWpbを算出する際に、パケットバッファ管理部1400bに使用可能パケットバッファ数SPBenを問い合わせ、受け取った値を元に判断し、残りパケットバッファサイズWpbを算出する機能を追加する点で、実施の形態2と異なる形態である。
本実施の形態の説明では、<通信装置1の機能構成>のうち、実施の形態2と共通していない部分、および、<<告知Winサイズの算出方法>>に関して説明する。
<<ネットワーク構成および構成図>>
図14は、本発明の一実施の形態である実施の形態3の通信装置1の機能構成例を示した図である。実施の形態3におけるネットワーク構成および構成図について、実施の形態2の<<ネットワーク構成および構成図>>と共通していない部分について説明し、それ以外に関しては説明を省略する。
図14は、本発明の一実施の形態である実施の形態3の通信装置1の機能構成例を示した図である。実施の形態3におけるネットワーク構成および構成図について、実施の形態2の<<ネットワーク構成および構成図>>と共通していない部分について説明し、それ以外に関しては説明を省略する。
図14の通信装置1の機能構成を以下に示す。受信データ管理部1221、Win抑制部1222c、パケットバッファ管理部1400bを除き、他の機能は実施の形態1と同様のためここでは説明を省略する。受信データ管理部1221、Win抑制部1222b、パケットバッファ管理部1400bは実施の形態2に記載の機能に加え、以下の機能を追加する。
(1b)パケットバッファ管理部1400b
パケットバッファ管理部1400bは、さらに通信装置全体の最大パケットバッファ数SPBmaxと、通信装置全体で現在使用しているパケットバッファ数SPBcurと、SPBmaxと、SPBcurの差分として算出される、通信装置全体の残りパケットバッファ数SPBremと、既存のTCP通信(コネクション)が使用可能パケットバッファ数の使用可能閾値Tを有する。
パケットバッファ管理部1400bは、さらに通信装置全体の最大パケットバッファ数SPBmaxと、通信装置全体で現在使用しているパケットバッファ数SPBcurと、SPBmaxと、SPBcurの差分として算出される、通信装置全体の残りパケットバッファ数SPBremと、既存のTCP通信(コネクション)が使用可能パケットバッファ数の使用可能閾値Tを有する。
Win抑制部1222bからの使用可能パケットバッファ数SPBenの問い合わせに対し、使用しているパケットバッファ数SPBremが使用可能閾値Tより多ければ、使用可能パケットバッファ数SPBenを渡す機能を追加する。使用可能閾値は、他に新しくTCP通信が確立することにより、必要と判断されるパケットバッファ数、また、現在の通信のための最大パケットバッファ数PBmaxを考慮し、値を設定することが望ましい。
また、パケットバッファ管理部1400bは、もし、通信装置全体の残りパケットバッファ数SPBremが使用可能閾値Tより少ない場合は、その旨をWin抑制部1222bに通知する。通信装置全体の残りパケットバッファ数SPBremが使用可能閾値Tより少ない旨の通知方法としては、本実施の形態では、SPBenの値として負値を返すこととするが、必ずしも負値とする必要はなく、SPBremが使用可能閾値Tより少ないことを示すものであればよい。
なお、使用可能閾値Tは、パケットバッファ管理部1400bの保持するパケットバッファ数の割合を定義してもよいし、絶対値としてもよい。また、現在未開設のソケット数に応じて動的に変化しても良いし、システム固定値であっても良い。また、使用可能閾値Tを持たず、パケットバッファ管理部1400bの管理している全ての使用可能なパケットバッファを、対象となるTCP通信に割り当ててもよい。
(3−c−2)Win抑制部1222c
Win抑制部1222cは、残りパケットバッファサイズWpbを算出する際に、パケットバッファ管理部1400bに使用可能パケットバッファ数SPBenを問い合わせ、受け取った値を元に、残りパケットバッファサイズWpbを算出する機能を追加する。
Win抑制部1222cは、残りパケットバッファサイズWpbを算出する際に、パケットバッファ管理部1400bに使用可能パケットバッファ数SPBenを問い合わせ、受け取った値を元に、残りパケットバッファサイズWpbを算出する機能を追加する。
また、Win抑制部1222cは、残りパケットバッファ数SPBremが使用可能閾値Tより小さい場合、実施の形態2に記載の算出方法にて、残りパケットバッファサイズWpbを算出する。
<告知Winサイズの算出方法>
図15は、本実施の形態における、Win抑制部1222cにおける告知WinサイズWadの算出方法を示した一例の説明を行なうための図である。本実施の形態では、残りパケットバッファサイズWpbの算出方法、および、その後の告知WinサイズWadの算出方法が、実施の形態2とは異なる。ST811、ST812について説明を行い、それ以外の処理については、実施の形態1と同様のため、ここでの説明は省略する。
図15は、本実施の形態における、Win抑制部1222cにおける告知WinサイズWadの算出方法を示した一例の説明を行なうための図である。本実施の形態では、残りパケットバッファサイズWpbの算出方法、および、その後の告知WinサイズWadの算出方法が、実施の形態2とは異なる。ST811、ST812について説明を行い、それ以外の処理については、実施の形態1と同様のため、ここでの説明は省略する。
Win抑制部1222cは、ACK生成部からの告知Winの問い合わせを受け、パケットバッファ管理部1400bに使用可能パケットバッファ数SPBenを問い合わせる(ST811)。
次に、残りパケットバッファ数SPBremと使用可能閾値Tとを比較し、SPBremがTに対して小さいか、否かを確認する(ST812)。
判定の結果、残りパケットバッファ数SPBremが小さい場合(ST812でYES)は、実施の形態2に記載のST81からの処理と同様である。
一方、小さくなかった場合(ST812でNO)は、実施の形態2に記載のST81と同様にWdを取得する(ST81a)し、残りパケットバッファサイズWpbの算出を行なう(ST82b)。
残りパケットバッファサイズWpbは、パケットバッファ管理部1400bから受信した使用可能パケットバッファ数SPBenと、固定サイズSとして本実施の形態では1パケットバッファサイズの積により算出する。
以下に、図16と、図17を用いて、具体的な告知WinサイズWadの算出方法を説明する。
図16は、通信装置全体のパケットバッファ数SPBmaxと、通信装置全体で使用されているパケットバッファ数SPBcurと、通信装置全体の残りパケットバッファ数SPBremと、使用可能閾値Tと、使用可能パケットバッファ数SPBenの関係を示した図である。本実施の形態の一例として、SPBmaxは16、SPBcurは10とし、使用可能閾値Tは新規通信のために確保しておくパケットバッファ数のみを考慮し、4とし、動的には変更しないものとする。
以下に、SPBremと、SPBenの算出方法を示す。
図17は、使用されているパケットバッファに含まれるデータも考慮した、通信装置全体の現在パケットバッファ数SPBcur、パケットバッファ管理部1400bの使用可能パケットバッファ数SPBenの関係の一例を示す図である。図17は図5が1つのTCP通信に対するパケットバッファ数の関係図であるのに対し、通信装置全体のパケットバッファに着目している。なお、図5と同様に、1パケットバッファサイズは1500byteとし、図中には記載していないが、最大保持データ量Dmaxは16Kbyteと設定されているとする。
図17には、パケットバッファ管理部1400bが管理している通信装置全体のパケットバッファSPBmaxが記載されている(四角形2002のパケットバッファ)。この中には、以下のカテゴリに含まれるパケットバッファが存在する。
・通信装置全体で使用中の現在パケットバッファ(四角2000に囲まれた10個のパケットバッファ)
このうち、四角2000aで示されるパケットバッファは、対象となるTCP通信にて使用中の現在パケットバッファは7個とする。
このうち、四角2000aで示されるパケットバッファは、対象となるTCP通信にて使用中の現在パケットバッファは7個とする。
・パケットバッファ管理部1400bの使用可能なパケットバッファSPBen(四角2003に囲まれた2個のパケットバッファ)
・新規通信のために確保されたパケットバッファT(四角形2001に囲まれた4個のパケットバッファ)
具体的に、図17のパケットバッファ管理部1400bの状態における、告知WinサイズWadの算出方法について説明する。なお、本実施の形態においても、実施の形態2と同様に、1つのTCP通信の最大パケットバッファ数PBmaxは8として説明を行う。
・新規通信のために確保されたパケットバッファT(四角形2001に囲まれた4個のパケットバッファ)
具体的に、図17のパケットバッファ管理部1400bの状態における、告知WinサイズWadの算出方法について説明する。なお、本実施の形態においても、実施の形態2と同様に、1つのTCP通信の最大パケットバッファ数PBmaxは8として説明を行う。
まず、ST811からST82bにおいて、残りパケットバッファサイズWpbを求める。パケットバッファ管理部1400bにおける使用可能パケットバッファ数SPBenは2個であることから、残りパケットバッファサイズWpbは、使用可能パケットバッファ数と固定サイズS(1500byte)との積により算出され、3000byteとなる。
次に、残りパケットサイズWpbと、受信可能データ量Wdを比較し(ST83)、小さい方を告知Winサイズに設定する(ST84、ST85)。受信可能データ量Wdは、DmaxとDcurとの差分(16Kbyte−1Kbyte)により、15Kbyteとなる。したがって、告知WinサイズWadは、受信可能データ量Wdと残りパケットバッファサイズWpbを比較し、小さい値である、残りパケットバッファサイズWpb(3000byte)となる。
一方、実施の形態2によるWpbの算出を行うと、PBmaxが8、PBcurが7であることから、PBremは1となり、Wpbは1×1500となり、1500byteとなる。つまり、本実施の形態で説明した状況において、通信装置全体で使用可能パケットバッファ数を管理している本実施の形態に示す方法は、1つのTCP通信ごとにパケットバッファ数を管理した場合に比べ、大きな告知ウィンドウサイズを通信相手に告知することが可能である。
以上の構成により、1つのTCP通信においてソケットキューに最大保持データパケット数を越えるパケットバッファを関連付けられるような通信が発生しても、パケットバッファ管理部が新規に対象となるTCP通信に対して、パケットバッファを割り当てることが可能となる。そのため、通信装置のアプリケーションデータ処理のタイミングよりも、ソケットキューに最大保持データパケット数を関連付けられる方が早くパケットを受信した場合も、システム全体の保持データパケット数までパケットを受信することが可能となる。
(実施の形態4)
実施の形態4は、実施の形態2において、異常検出、および通知方法を新たに追加した形式である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、異常検出、および通知方法に関して説明する。
実施の形態4は、実施の形態2において、異常検出、および通知方法を新たに追加した形式である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、異常検出、および通知方法に関して説明する。
<<ネットワーク構成および構成図>>
図18は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態2におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図18は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態2におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図18に通信装置1の機能構成を以下に示す。異常通知部1228、RST生成部1229、Win抑制部1222d、表示部1600を除き、他の機能は実施の形態1と同様のためここでは説明を省略する。Win抑制部1222dは実施の形態1に記載の機能に加え、以下の機能を追加する。
(3−c−4)Win抑制部1222d
Win抑制部1222dは、ACK生成部1224からのWin受け渡し要求に対し、告知WinサイズWadを算出する際、告知WinサイズWadとして、残りパケットバッファサイズWpbを連続で設定した回数を数える残りパケットバッファサイズ設定カウンタCntを保持する。残りバッファサイズ設定カウンタCntは、告知WinサイズWadとして、受信可能データ量Wdを設定したら、0に戻される。残りパケットバッファサイズ設定カウンタCntが規定の回数を越えると、通信装置2が多数の少量データを含むTCPセグメントを連続で送信してきていることと判断でき、異常な通信であると判断し、異常通知部1228に異常通知を行なう機能を追加する。
Win抑制部1222dは、ACK生成部1224からのWin受け渡し要求に対し、告知WinサイズWadを算出する際、告知WinサイズWadとして、残りパケットバッファサイズWpbを連続で設定した回数を数える残りパケットバッファサイズ設定カウンタCntを保持する。残りバッファサイズ設定カウンタCntは、告知WinサイズWadとして、受信可能データ量Wdを設定したら、0に戻される。残りパケットバッファサイズ設定カウンタCntが規定の回数を越えると、通信装置2が多数の少量データを含むTCPセグメントを連続で送信してきていることと判断でき、異常な通信であると判断し、異常通知部1228に異常通知を行なう機能を追加する。
(3−i)異常通知部1228
異常通知部1228は、Win抑制部1222dより異常通知を受けると、以下の3つの処理を行なう。
異常通知部1228は、Win抑制部1222dより異常通知を受けると、以下の3つの処理を行なう。
(異常通知a)異常通知パケットの送信
異常を知らせる異常通知パケットを送信する(ST719)。異常通知パケットは、UDP、ICMPなどのプロトコルを用いて、パケットの中に異常を通知する文字列などのデータを含む。より具体的な例としては、syslogなどのUDPプロトコルを利用してもよい。syslogメッセージとして、通信相手である、通信装置2のIPアドレス、サブネットマスク、異常を検出したTCP通信の通信装置1におけるポート番号、および、プロトコルなどを含める。また、異常通知パケットの宛先は、ユニキャストであっても、マルチキャストであってもよい。ユニキャスト送信の場合の宛先は、通信相手である通信装置2、通信ログを管理するサーバなどがあげられる。また、マルチキャスト送信の場合、同一ネットワークアドレスを持つ装置へのマルチキャスト、同一リンク内の装置へのマルチキャストなどがあげられる。
異常を知らせる異常通知パケットを送信する(ST719)。異常通知パケットは、UDP、ICMPなどのプロトコルを用いて、パケットの中に異常を通知する文字列などのデータを含む。より具体的な例としては、syslogなどのUDPプロトコルを利用してもよい。syslogメッセージとして、通信相手である、通信装置2のIPアドレス、サブネットマスク、異常を検出したTCP通信の通信装置1におけるポート番号、および、プロトコルなどを含める。また、異常通知パケットの宛先は、ユニキャストであっても、マルチキャストであってもよい。ユニキャスト送信の場合の宛先は、通信相手である通信装置2、通信ログを管理するサーバなどがあげられる。また、マルチキャスト送信の場合、同一ネットワークアドレスを持つ装置へのマルチキャスト、同一リンク内の装置へのマルチキャストなどがあげられる。
(異常通知b)RSTパケットの送信
通信装置2との間の通信を強制的に切断するために、RSTパケットの送信を行なう。具体的には、通信装置2の異常を検出したTCP通信に対して、RST生成部1229にRST生成要求を行なう。
通信装置2との間の通信を強制的に切断するために、RSTパケットの送信を行なう。具体的には、通信装置2の異常を検出したTCP通信に対して、RST生成部1229にRST生成要求を行なう。
(異常通知c)ユーザへ通知
表示部1600に通知を行い、異常な通信を検出した旨をユーザに通知する。通知する内容は、(a)異常通知パケットに含まれるデータなどを含む。
表示部1600に通知を行い、異常な通信を検出した旨をユーザに通知する。通知する内容は、(a)異常通知パケットに含まれるデータなどを含む。
(3−j)RST生成部1229
RST生成部は、異常通知部1228からの要求を受け(ST720)、TCPのプロトコル処理に基づいて、RSTのパケットを生成し、TCP処理部に作成要求を行なう(ST721)。なお、本機能については、RFC記載の範囲を逸脱しないため、詳細な説明を省略する。
RST生成部は、異常通知部1228からの要求を受け(ST720)、TCPのプロトコル処理に基づいて、RSTのパケットを生成し、TCP処理部に作成要求を行なう(ST721)。なお、本機能については、RFC記載の範囲を逸脱しないため、詳細な説明を省略する。
(8)表示部1600
異常通知部1228から通知を受けて(ST722)、ユーザへ異常を通知するために、文字列などを表示する機能を持つ。表示部1600は、LCD、PDPなどのディスプレイが使用される。なお、正常動作中もユーザへの異常通知以外の情報、画像、および映像などを表示させても構わない。
異常通知部1228から通知を受けて(ST722)、ユーザへ異常を通知するために、文字列などを表示する機能を持つ。表示部1600は、LCD、PDPなどのディスプレイが使用される。なお、正常動作中もユーザへの異常通知以外の情報、画像、および映像などを表示させても構わない。
<異常検出、および通知方法>
異常な通信の検出方法、および、検出後の通知方法の一例について説明する。なお、TCP受信部1226までのTCPセグメントの受信処理、および、アプリケーション部1100がデータの受信要求を行なう処理については、実施の形態2と同様であるため説明を省略する。
異常な通信の検出方法、および、検出後の通知方法の一例について説明する。なお、TCP受信部1226までのTCPセグメントの受信処理、および、アプリケーション部1100がデータの受信要求を行なう処理については、実施の形態2と同様であるため説明を省略する。
図19は、図9の告知Winサイズ設定処理に、異常検出処理ルーチンを追加した一例の図である。ACK生成部1224からの告知Winサイズの問い合わせから告知Winの設定を行なう処理までは、実施の形態2または実施の形態1と同様のため、ここでの説明は省略する。
ACK生成部1224から告知Winサイズを設定後、異常検出ルーチンST410を実行する。
図20を用いて、異常検出ルーチンの一例について説明を行なう。本実施の形態の一例では、残りパケットバッファ設定カウンタCntの異常通知閾値を5として説明を行なう。なお、異常通知閾値は、5以外でも構わない。
まず、異常検出ルーチンでは、告知Winサイズとして、残りパケットバッファサイズWpbを設定したか、否かを確認する(ST411)。告知WinサイズWadとして残りパケットバッファサイズWpbを設定した場合は、残りパケットバッファ設定カウンタCntを+1する(ST412)。一方、受信可能データ量Wdとした場合は、残りパケットバッファ設定カウンタCntを0とし(ST413)、処理を完了する。
告知WinサイズWadとして、残りパケットバッファサイズWpbを設定し、残りパケットバッファ設定カウンタCntが異常通知閾値よりも小さい場合は、何もせずに完了する。
一方、異常通知閾値を越えていた場合、異常通知を行い(ST415)、処理を完了する。異常通知の方法については、上記で説明を行った(異常通知a)、(異常通知b)、(異常通知c)の通りである。
以上の構成により、異常なTCP通信を検出した際、通信相手に通知することにより、対向装置停止などの処置を行なうトリガとすることができる。また、ユーザに通知することにより、自身の装置に対して、異常な対向機器に対するフィルタリング、対向機器の確認、停止などの処置を行なうことができる。また、ログを管理するサーバや、マルチキャストにより、異常を通知することにより、異常通知パケットを受信した装置は、異常だと判断された装置が攻撃者であることを仮定し、事前に対処することができる。
(実施の形態5)
実施の形態5は、実施の形態2において、データ複写機能を追加した形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、データ複写機能に関して説明をする。
実施の形態5は、実施の形態2において、データ複写機能を追加した形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、データ複写機能に関して説明をする。
<ネットワーク構成および構成図>
図21は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態5におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図21は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態5におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図21に通信装置1の機能構成を以下に示す。ここでは、新規に追加するCPU負荷監視部1500、データ複写部1227と、一部機能を追加する受信データ管理部1221cについて説明を行なう。これ以外の機能に関しては、実施の形態2または実施の形態1と同様のためここでは説明を省略する。
(7)CPU負荷監視部1500
CPU負荷監視部1500は、図1に記載のCPU13の負荷を監視しており、CPU使用率を管理している。CPU使用率は、メモリ14から読み出し、メモリ14への書き込み処理、TCPを含むプロトコル処理、および、通信アプリケーションにおける処理などの通信のための処理だけでなく、その他のプログラムを実行しているときの処理も含む。CPU使用率が高い状態をCPU負荷が高い、CPU使用率が低い状態をCPU負荷が低いと定義する。CPU負荷監視部1500は、後述の(3−a−3)に示す受信データ管理部1221cからのCPU使用率の確認要求に対し、CPU使用率が所定の値よりも低い場合に、受信データ管理部1221cに負荷低下通知を行なう機能を持つ。また、受信データ管理部1221cからの確認要求の有無に関わらず、CPU負荷監視部1500がCPU使用率を定期的に確認を行い、受信データ管理部1221cに負荷低下通知を行っても良い。
CPU負荷監視部1500は、図1に記載のCPU13の負荷を監視しており、CPU使用率を管理している。CPU使用率は、メモリ14から読み出し、メモリ14への書き込み処理、TCPを含むプロトコル処理、および、通信アプリケーションにおける処理などの通信のための処理だけでなく、その他のプログラムを実行しているときの処理も含む。CPU使用率が高い状態をCPU負荷が高い、CPU使用率が低い状態をCPU負荷が低いと定義する。CPU負荷監視部1500は、後述の(3−a−3)に示す受信データ管理部1221cからのCPU使用率の確認要求に対し、CPU使用率が所定の値よりも低い場合に、受信データ管理部1221cに負荷低下通知を行なう機能を持つ。また、受信データ管理部1221cからの確認要求の有無に関わらず、CPU負荷監視部1500がCPU使用率を定期的に確認を行い、受信データ管理部1221cに負荷低下通知を行っても良い。
(3−a−3)受信データ管理部1221c
受信データ管理部1221cは、TCP受信部1226から受け取ったパケットバッファを、ソケットキューに関連付けする際に、ソケットキューが所定の条件を満たす場合に、CPU負荷監視部1500に対し、CPU使用率の確認要求を行い、負荷低下通知を受け取った場合、データ複写部1227によりデータ複写を実施する機能を追加する。所定の条件としては、次のような条件が例として考えられる。
受信データ管理部1221cは、TCP受信部1226から受け取ったパケットバッファを、ソケットキューに関連付けする際に、ソケットキューが所定の条件を満たす場合に、CPU負荷監視部1500に対し、CPU使用率の確認要求を行い、負荷低下通知を受け取った場合、データ複写部1227によりデータ複写を実施する機能を追加する。所定の条件としては、次のような条件が例として考えられる。
[所定条件]
(1)実受信データ量Dcurを、保持データパケット数PBcurで除算した値が、所定の値(バイト)以下であること。
(1)実受信データ量Dcurを、保持データパケット数PBcurで除算した値が、所定の値(バイト)以下であること。
前記条件は、1パケットバッファ当たりに含まれるデータ量が少ない場合を意味する。
(2)保持データパケット数PBcurが、最大保持データパケット数PBmax以上であること。保持データパケット数数PBcurが多くなり、最大保持データパケット数PBmaxを越える場合、つまり、これ以上ソケットキューにつなげない場合を意味する。
(3)ソケットキューに接続するパケットバッファのデータ長が、所定の値(バイト)以下であること。ソケットキューに接続するがショートパケットである場合を意味する。
本実施の形態では、(1)の条件を一例として使用して説明を行なう。なお、必ずしも、(1)から(3)の条件を所定の条件とする必要はない。
(3−h)データ複写部1227
ソケットキューに関連付けられているパケットバッファに格納されているデータを、同じソケットキューに関連付けられている他のパケットバッファに複写し、複写が完了したパケットバッファの開放要求を、パケットバッファ管理部1400に対して行なう機能を持つ。
ソケットキューに関連付けられているパケットバッファに格納されているデータを、同じソケットキューに関連付けられている他のパケットバッファに複写し、複写が完了したパケットバッファの開放要求を、パケットバッファ管理部1400に対して行なう機能を持つ。
本実施の形態において、データの複写を行なうタイミングとして、(1)TCP受信部1226が受信データ管理部1221cにパケットバッファを渡すタイミング、(2)受信データ管理部1221cからの確認要求の有無に関わらず、CPU負荷監視部から負荷低下通知を受信データ管理部1221cに対して行なうタイミング、の2つのタイミングがある。
<TCPパケット受信時>
まず、(1)TCP受信部1226が受信データ管理部1221cにパケットバッファを渡すタイミングについて説明する。なお、TCP受信部1226までのTCPパケットの受信処理、および、アプリケーション部1100がデータの受信要求を行なう処理については、実施の形態1と同様であるため説明を省略する。
まず、(1)TCP受信部1226が受信データ管理部1221cにパケットバッファを渡すタイミングについて説明する。なお、TCP受信部1226までのTCPパケットの受信処理、および、アプリケーション部1100がデータの受信要求を行なう処理については、実施の形態1と同様であるため説明を省略する。
TCP受信部1226が受信データ管理部1221cにパケットバッファを渡した後(ST702)、受信データ管理部1221cは、ソケットキューにパケットバッファを関連付ける。このとき、受信データ管理部1221cは、ソケットキューに関連付けられている現在パケットバッファ数PBcurが、実受信データ量Dcurに対して所定のパケットバッファ数を越えていないかを確認する。本実施の形態では、ソケットキューに関連付けされているパケットバッファ全部の平均として、1パケットバッファサイズの半分以上が1つのパケットバッファに格納されていない場合にデータ複写を行なうこととし、データ複写を行なう条件は、次の演算より示すことができる。
実受信データ量Dcurを保持データパケット数PBcurで除算した値が、1パケットバッファサイズ×1/2より小さいという条件であること。
前記条件を基に、保持データパケット数PBcurが、ちょうど所定のパケットバッファ数である、とすることにより、所定のパケットバッファ数を算出すると、所定のパケットバッファ数は、2×実受信データ量Dcurを1パケットバッファサイズで除算した値となる。
ソケットキューに関連付けられている保持データパケット数PBcurが、上記の所定のバッファ数を超えている場合、受信データ管理部1221cは、CPU負荷監視部1500にCPU使用率の確認要求を行なう。CPU負荷監視部1500は、CPU使用率が低い場合、負荷低下通知を行なう(ST730)。負荷低下通知を受けた受信データ管理部1221cは、データの複写処理を行なう。
<CPU負荷監視部1500からの負荷低下通知時>
次に、(2)受信データ管理部1221cからの確認要求の有無に関わらず、CPU負荷監視部から負荷低下通知を受信データ管理部1221cに対して行なうタイミングについて説明する。CPU負荷監視部1500は定期的に、CPU使用率を確認し、CPU負荷が低い場合は、受信データ管理部1221cに負荷低下通知を行なう(ST730)。受信データ管理部1221cは負荷低下通知を受けると、ソケットキューに関連付けられている保持データパケット数PBcurが、実受信データ量Dcurに対して所定の値を越えているか否かを確認する。所定の値については、TCPパケット受信時と同様のため省略する。所定の値を越えていた場合は、データの複写処理を行なう。
次に、(2)受信データ管理部1221cからの確認要求の有無に関わらず、CPU負荷監視部から負荷低下通知を受信データ管理部1221cに対して行なうタイミングについて説明する。CPU負荷監視部1500は定期的に、CPU使用率を確認し、CPU負荷が低い場合は、受信データ管理部1221cに負荷低下通知を行なう(ST730)。受信データ管理部1221cは負荷低下通知を受けると、ソケットキューに関連付けられている保持データパケット数PBcurが、実受信データ量Dcurに対して所定の値を越えているか否かを確認する。所定の値については、TCPパケット受信時と同様のため省略する。所定の値を越えていた場合は、データの複写処理を行なう。
<データの複写処理>
図22を用いて、データ複写処理の一例を説明する。データの複写処理は、ソケットキューの先頭に関連付けられているパケットバッファから順に、次に関連付けられているパケットバッファ(以降、次パケットバッファと呼ぶ)に格納されているデータを対象としているパケットバッファに複写することを繰り返す。
図22を用いて、データ複写処理の一例を説明する。データの複写処理は、ソケットキューの先頭に関連付けられているパケットバッファから順に、次に関連付けられているパケットバッファ(以降、次パケットバッファと呼ぶ)に格納されているデータを対象としているパケットバッファに複写することを繰り返す。
まず、ソケットキューの先頭に関連付けられているパケットバッファを対象パケットバッファとし、次パケットバッファが存在するかを確認する(ST311)。次パケットバッファが存在しない場合は、対象パケットバッファが最後のパケットバッファであるため、現在パケットバッファ数を更新し(ST318)、データ複写処理は完了とする。
一方、次パケットバッファが存在する場合は、対象パケットバッファの空きパケットバッファサイズと、次パケットバッファに格納しているデータサイズを比べ(ST312)、空きパケットバッファが大きい場合は、次パケットバッファに格納されているデータを全て複写し(ST313)、小さい場合は、空きパケットバッファサイズ分を複写する(ST314)。次パケットバッファのデータを全て複写した場合は、そのパケットバッファは不要であるため、パケットバッファ管理部1400に対して、開放要求し、ソケットキューとの関連付けを外し(ST315)、次パケットバッファの次パケットバッファを対象パケットバッファの次パケットバッファに変更する(ST316)。開放要求を受けたパケットバッファ管理部1400は、パケットバッファを開放する。この処理が完了したら、対象パケットバッファを次パケットバッファとし、ST311に戻り、ソケットキューの最後のパケットバッファまで繰り返す。この処理により多数のパケットバッファに格納されていたデータを少数のパケットバッファに格納することができる。
なお、本実施の形態の一例では、データ複写処理を図22の処理方法によって説明したが、多数のパケットバッファに格納されていたデータを少数のパケットバッファに複写できれば、必ずしも図22の処理方法である必要はない。また、ST312において、対象パケットバッファの空きパケットバッファサイズと、次パケットバッファに格納しているデータサイズを比べ、空きパケットバッファが大きい場合は、次パケットバッファに格納されているデータを全て複写するように説明したが、必ずしも空きパケットバッファサイズを全て埋めるデータサイズを複写する必要はない。
図23を用いて、TCPパケット受信時のデータ複写処理の一例について、さらに具体的に説明を行なう。図23は、TCPパケットを受信し、ソケットキューに関連付けた後の状態であり、1パケットバッファサイズは1Kbyte、現在パケットバッファ数は10個であり、1つのパケットバッファには100byteのデータが格納されている。この状態において、所定のパケットバッファ数は2×1000/1000より2となり、保持データパケット数は、10個であるから、所定のパケットバッファ数を越えている。そのため、CPU負荷監視部1500にCPU負荷の確認要求を行い、負荷低下通知を受けた場合に、データ複写処理を図22の処理方法により実施する。データ複写処理中に、不要となったパケットバッファ9個を全て開放要求し、保持データパケット数を1に更新する。
以上の構成により、本実施の形態は、実施の形態1から実施の形態4に記載した方法により、告知ウィンドウサイズを急激に下げることによるスループットの低下を防止するという効果が得られる。
具体的には、データ複写を行なうことにより、保持データパケット数PBcurが少なくなるため、残り保持データパケット数PBremが多くなり、急激に告知WinサイズWadを下げることを防ぎ、スループットを下げることを防ぐことができる。
また、副次的な効果として、ソケットキューに関連付けられているパケットバッファ数を少なくすることにより、効率的にデータをアプリケーション部が受信することができる。また、CPU負荷監視部1500から定期的に負荷停止通知を行なうことにより、TCPパケットの受信とは無関係に、データの複写機能を実施することができる。
(実施の形態6)
実施の形態6は、実施の形態2において、MAC受信可能量算出部1311を追加した形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、MAC受信可能量算出部1311に関して説明をする。
実施の形態6は、実施の形態2において、MAC受信可能量算出部1311を追加した形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、MAC受信可能量算出部1311に関して説明をする。
<ネットワーク構成および構成図>
図29は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態6におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図29は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態6におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
MAC処理部1310と、MAC処理部1310におけるFIFOメモリの役割について説明する。
MAC処理部1310は、ネットワークから到達したパケットを最初に受信する。その後、所定のタイミングで、Interface処理部1240がパケットバッファに格納する。このとき、MAC処理部1310は、MAC処理部1310からInterface処理部1240に引き上げられるまで、受信したパケットを保持しておく必要がある。その受信したパケットを保持しておくハードウェアがFIFOメモリである。つまり、通信装置1に到達したパケットは、必ずFIFOメモリに一時的に保持され、Interface処理部1240によって、パケットバッファに格納される。そのため、FIFOメモリに空きがない場合、通信装置1内に使用可能なパケットバッファが多く残っていたとしても、通信装置1は、ネットワークから到達したパケットをMAC処理部1310でロスすることになる。パケットロスが発生すると、TCPの再送、および、通信装置2による輻輳制御が発生し、結果的にスループットが低下する。
図29に通信装置1の機能構成を以下に示す。ここでは、新規に追加するMAC受信可能量算出部1311と、実施の形態2とは一部機能の異なるWin抑制部1222eについて説明を行なう。これ以外の機能に関しては、実施の形態2と同様のため、ここでは説明を省略する。なお、MAC受信可能量算出部1311は、図29ではMAC処理部1310に含まれているが、MAC処理部1310以外に配置されても構わない。
(9)MAC受信可能量算出部1311
最初に、MAC受信可能量算出部1311について説明する。MAC受信可能量算出部1311は、MAC処理部1310におけるFIFOメモリの使用状態を監視しており、FIFOメモリの空き容量から算出されるMAC受信可能ウィンドウサイズWmacを算出し、Win抑制部1222bに通知する機能を持つ。なお、MAC処理部1310におけるFIFOメモリのメモリ管理方式は、パケット単位による管理、受信データサイズによる管理が考えられるが、いずれの管理方式でも構わない。本実施の形態では、パケット単位によるデータ管理方式として説明を行う。
最初に、MAC受信可能量算出部1311について説明する。MAC受信可能量算出部1311は、MAC処理部1310におけるFIFOメモリの使用状態を監視しており、FIFOメモリの空き容量から算出されるMAC受信可能ウィンドウサイズWmacを算出し、Win抑制部1222bに通知する機能を持つ。なお、MAC処理部1310におけるFIFOメモリのメモリ管理方式は、パケット単位による管理、受信データサイズによる管理が考えられるが、いずれの管理方式でも構わない。本実施の形態では、パケット単位によるデータ管理方式として説明を行う。
また、Win抑制部1222eの実施の形態2と異なる点は、MAC受信可能量算出部1311にMAC受信可能ウィンドウサイズWmacを問い合わせ、告知Winサイズの算出時に用いる点である。
<<告知Winサイズの算出方法>>
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、MAC処理部1310のFIFOメモリの空き容量を考慮することにより、MAC処理部1310におけるパケットロスを回避し、TCP再送の発生を抑制する。
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、MAC処理部1310のFIFOメモリの空き容量を考慮することにより、MAC処理部1310におけるパケットロスを回避し、TCP再送の発生を抑制する。
図30を用いて、Win制御部1222における告知WinサイズWadの算出方法の説明を行なう。
本実施の形態では、告知WinサイズWadの算出を説明するため、1パケットバッファに1500byteのデータを格納可能であり、最大保持データパケット数Pmaxを8個、最大保持データ量Dmaxを8192byteとする。また、MAC処理部1310のFIFOメモリは最大6パケットまで保持可能とする。
なお、ここでは、MAC処理部1310のFIFOメモリは、4パケットは保持されており、実施の形態2と同様に、TCPパケット1パケットに100byteのデータを含むパケット5個がソケットキューに関連付けられている場合を用いて、説明を行なう。
受信可能データ量の取得(ST81)、残りパケットバッファサイズWpbの算出(ST82)は、実施の形態2と同様のため、説明を省略する。
(Calc−4)MAC受信可能ウィンドウサイズWmacの算出(ST87)
Win抑制部1222eは、MAC受信可能量算出部1311に問い合わせる。MAC受信可能量算出部1311は、MAC処理部1310におけるFIFOメモリの使用状況を確認する。本実施の形態では、データは4パケット保持されており、残り2パケット保持することができる。MAC受信可能量算出部1311は、2×1500byte=3000byteをMAC受信可能ウィンドウサイズWmacとして、Win抑制部1222eに通知する。
Win抑制部1222eは、MAC受信可能量算出部1311に問い合わせる。MAC受信可能量算出部1311は、MAC処理部1310におけるFIFOメモリの使用状況を確認する。本実施の形態では、データは4パケット保持されており、残り2パケット保持することができる。MAC受信可能量算出部1311は、2×1500byte=3000byteをMAC受信可能ウィンドウサイズWmacとして、Win抑制部1222eに通知する。
なお、Ethernet(登録商標)の伝送速度が遅い、RTTが長いなどの要因で、次のパケットがネットワークから到達するまでにFIFOメモリからパケットバッファに引き上げることができる場合、その引き上げ可能なパケット処理数をWmac算出時に考慮してもよい。
(Calc−5)告知WinサイズWadの設定(ST88、ST86)
Win抑制部1222eは、ST81にて算出された受信可能データ量Wd、残りパケットバッファサイズWpb、MAC受信可能ウィンドウサイズWmacを比較し、最小となる値を告知ウィンドウサイズWadとして設定する(ST88)。本実施の形態では、受信可能データ量Wdは7692byte、残りパケットバッファサイズWpbは4500byte、MAC受信可能ウィンドウサイズWmacは3000byteであるため、MAC受信可能ウィンドウサイズWmacが最小となる。よって、告知WinサイズWadにMAC受信可能ウィンドウサイズWmacは3000byteを設定する。
Win抑制部1222eは、ST81にて算出された受信可能データ量Wd、残りパケットバッファサイズWpb、MAC受信可能ウィンドウサイズWmacを比較し、最小となる値を告知ウィンドウサイズWadとして設定する(ST88)。本実施の形態では、受信可能データ量Wdは7692byte、残りパケットバッファサイズWpbは4500byte、MAC受信可能ウィンドウサイズWmacは3000byteであるため、MAC受信可能ウィンドウサイズWmacが最小となる。よって、告知WinサイズWadにMAC受信可能ウィンドウサイズWmacは3000byteを設定する。
設定した告知WinサイズWadをACK生成部に渡す(ST86)。
以上の構成により、MAC受信可能ウィンドウサイズWmacを考慮することにより、到達したパケットを受信できなくなることを防止し、TCPパケットの再送を防ぐことができる。本構成は、通信装置1の告知Winサイズ分をバースト的に送信するような通信装置2が通信相手である場合に、より効果が高い。
(実施の形態7)
実施の形態7は、実施の形態2において、RTT受信可能量算出部1250を追加し、パケットバッファ管理部1400の代わりに実施の形態3で説明したパケットバッファ管理部1400bを用いた形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、RTT受信可能量算出部1250に関して説明をする。なお、パケットバッファ管理部1400bは、パケットバッファ管理部1400に管理する値に加え、通信装置全体の残りパケットバッファ数SPBrem、既存のTCP通信(コネクション)が使用可能パケットバッファ数の使用可能閾値Tなどを管理している。本実施の形態では、使用可能閾値Tは0とし、通信装置全体の残りパケットバッファ数PBrem=通信装置1全体で使用可能パケットバッファ数SPBenとして、説明を行う。
実施の形態7は、実施の形態2において、RTT受信可能量算出部1250を追加し、パケットバッファ管理部1400の代わりに実施の形態3で説明したパケットバッファ管理部1400bを用いた形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、RTT受信可能量算出部1250に関して説明をする。なお、パケットバッファ管理部1400bは、パケットバッファ管理部1400に管理する値に加え、通信装置全体の残りパケットバッファ数SPBrem、既存のTCP通信(コネクション)が使用可能パケットバッファ数の使用可能閾値Tなどを管理している。本実施の形態では、使用可能閾値Tは0とし、通信装置全体の残りパケットバッファ数PBrem=通信装置1全体で使用可能パケットバッファ数SPBenとして、説明を行う。
<ネットワーク構成および構成図>
図31は、本発明の一実施形態が係る通信装置1の機能構成例を示した図である。実施の形態7におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図31は、本発明の一実施形態が係る通信装置1の機能構成例を示した図である。実施の形態7におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図31に通信装置1の機能構成を以下に示す。ここでは、新規に追加するRTT受信可能量算出部1250と、一部機能を変更するWin抑制部1222fについて説明を行なう。これ以外の機能に関しては、実施の形態2と同様のため、ここでは説明を省略する。なお、RTT受信可能量算出部1250は、図31ではTCP処理部1220に含まれているが、必ずしもTCP処理部1220に含まれていなくても構わない。
(10)RTT受信可能量算出部1250
RTT受信可能量算出部1250は、TCPのRTT(ROUND TRIP TIME)、単位時間あたりに処理するパケット数から、RTT間に処理可能なパケット数であるRTT受信可能パケットサイズWrttを算出し、Win抑制部1222fに通知する機能(ST743)を持つ。ここで、「単位時間あたりに処理するパケット数」、および、「RTT間に処理可能なパケット数」の「処理」は、パケットバッファに格納して保持していたデータを、アプリケーション1100が引き上げ、そのデータを保持するのに使用していたパケットバッファが開放する処理まで、を指す。
RTT受信可能量算出部1250は、TCPのRTT(ROUND TRIP TIME)、単位時間あたりに処理するパケット数から、RTT間に処理可能なパケット数であるRTT受信可能パケットサイズWrttを算出し、Win抑制部1222fに通知する機能(ST743)を持つ。ここで、「単位時間あたりに処理するパケット数」、および、「RTT間に処理可能なパケット数」の「処理」は、パケットバッファに格納して保持していたデータを、アプリケーション1100が引き上げ、そのデータを保持するのに使用していたパケットバッファが開放する処理まで、を指す。
RTT受信可能量算出部1250におけるRTTの算出方法の一例を示す。RTTの算出方法として、通信装置1がTCPパケット受信処理中に、通信装置1がデータパケット受信を通知するために送信するACKパケットの送信時刻と、そのACKパケットに起因して通信装置2が送信するデータパケットの受信時刻、の差分から算出される方法を用いる。具体的には、TCP送信部1225より送信されるACKパケットの送信時刻(ST741)と、TCP受信部1226で受信する、そのACKパケットに起因するデータパケットの受信時刻(ST742)をそれぞれ監視しておき、その差分により、RTTを算出する。ACKパケットとデータパケットの関連の判断基準は、通信装置1が送信するACKパケットに含むNumと、通信装置2が送信するデータパケットのSeqが同一の場合、ACKパケットに対するデータパケットとするものである。
なお、本実施の形態では、ACKパケットとそれに起因するデータパケットの関連によりRTTを算出したが、TCP接続確立(3ウェイハンドシェイク)時のSYNパケットに対する、SYN+ACKパケットの受信時刻より算出してもよい。また、TCPパケット以外のプロトコルにより、RTTを算出しても構わない。
次に、単位時間あたりに処理するパケット数の取得方法について説明する。単位時間あたりに処理するパケット数は、事前に与えられていてもよいし、通信中にAPI部1210を介して、動的に与えられてもよい。また、パケットバッファ管理部1400がアプリケーション1100におけるパケットバッファ開放処理を監視しており、受信動作中の開放処理の間隔から統計的に算出を行ってもよい。
Win抑制部1222fの実施の形態2と異なる点は、RTT受信可能量算出部1250にRTT受信可能パケットサイズWrttの問い合わせを行い、告知Winサイズの算出時に、RTT受信可能パケットサイズWrttを用いる点である。
<<告知Winサイズの算出方法>>
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、RTT間に処理可能なパケット数を考慮することにより、パケットロスを抑制し、TCPの転送速度の低下を抑制することができる。
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、RTT間に処理可能なパケット数を考慮することにより、パケットロスを抑制し、TCPの転送速度の低下を抑制することができる。
図32を用いて、Win制御部1222における告知WinサイズWadの算出方法の説明を行なう。
本実施の形態では、告知WinサイズWadの算出を説明するため、1パケットバッファに1500byteのデータを格納可能であり、通信装置全体の残りパケットバッファ数PBremを10個、最大保持データ量Dmaxを8192byteとする。
なお、ここでは、TCPパケット1パケットに100byteのデータを含むパケット1個がソケットキューに関連付けられている場合を用いて、説明を行なう。また、RTTは10msecとし、単位時間あたりに処理するパケット数は事前に通知されており、10msecあたり、5個とする。
受信可能データ量の取得(ST81)、残りパケットバッファサイズWpbの算出(ST82b)は、実施の形態2と同様のため、説明を省略する。
(Calc−6)RTT受信可能パケットサイズWrttの算出(ST891)
Win抑制部1222fは、RTT受信可能量算出部1250に問い合わせる。RTT受信可能量算出部1250は、事前にTCP送信部1225のACKパケット送信時刻と、TCP受信部1226での、それに起因するデータパケットの受信時刻よりRTTを算出しておく。RTT受信可能量算出部1250は、RTTと、単位時間あたりに処理するパケット数より、RTT受信可能パケットサイズWrttをWrtt=RTT×(単位時間あたりに処理するパケット数)×(パケットバッファサイズ)により算出する。本実施の形態では、RTTは10msec、10msecあたりに処理可能なパケット数は5個、パケットバッファサイズは、1500byte、保持データパケット数は1、であるから、5×1500=7500byteとなる。
Win抑制部1222fは、RTT受信可能量算出部1250に問い合わせる。RTT受信可能量算出部1250は、事前にTCP送信部1225のACKパケット送信時刻と、TCP受信部1226での、それに起因するデータパケットの受信時刻よりRTTを算出しておく。RTT受信可能量算出部1250は、RTTと、単位時間あたりに処理するパケット数より、RTT受信可能パケットサイズWrttをWrtt=RTT×(単位時間あたりに処理するパケット数)×(パケットバッファサイズ)により算出する。本実施の形態では、RTTは10msec、10msecあたりに処理可能なパケット数は5個、パケットバッファサイズは、1500byte、保持データパケット数は1、であるから、5×1500=7500byteとなる。
(Calc−7)告知WinサイズWadの設定(ST892)
Win抑制部1222fは、ST82により算出された残りパケットバッファサイズWpbと、RTT受信可能パケットサイズWrttと、ST81において算出された受信可能データ量Wd、との最小値を告知ウィンドウサイズWadとして設定する(ST88)。本実施の形態では、受信可能データ量Wdは8092byte、残りパケットバッファサイズWpbは10500byte、RTT受信可能パケットサイズWrttは、7500byteである。よって、告知WinサイズWadに最小値である、RTT受信可能パケットサイズWrtt7500byteを設定する。
Win抑制部1222fは、ST82により算出された残りパケットバッファサイズWpbと、RTT受信可能パケットサイズWrttと、ST81において算出された受信可能データ量Wd、との最小値を告知ウィンドウサイズWadとして設定する(ST88)。本実施の形態では、受信可能データ量Wdは8092byte、残りパケットバッファサイズWpbは10500byte、RTT受信可能パケットサイズWrttは、7500byteである。よって、告知WinサイズWadに最小値である、RTT受信可能パケットサイズWrtt7500byteを設定する。
最後に、設定した告知WinサイズWadをACK生成部に渡す(ST86)。
なお、RTT受信可能サイズWrttを算出する際、RTTを継続的に計測し、増加傾向にあればWrttを増加、減少傾向にあればWrttを減少など、統計情報を算出し、その情報により、RTT受信可能サイズWrttを上記の算出値から増減させてもよい。
<<パケットロス時のWrtt減算処理>>
なお、RTT受信可能パケットサイズWrttを算出する際に、パケットロスを考慮してもよい。
なお、RTT受信可能パケットサイズWrttを算出する際に、パケットロスを考慮してもよい。
通信装置1は、ネットワーク揺らぎなどの影響により、MAC処理部1310のFIFOメモリに空きがない場合、パケットをロスする可能性がある。パケットをロスした場合、通信装置1は、ロスしたパケットに対するACKパケットを送信しないため、通信装置2は、TCPの輻輳制御を行い、1度に送信するデータ量を段階的に抑制する。この処理を繰り返すと、結果として転送速度が低下する。そのため、RTT受信可能量算出部1250は、パケットロスの発生を、通信装置2の輻輳制御による送信データ量の低下と判断し、RTT受信可能バッファサイズWrttを一定量減らすことで、通信装置2の輻輳制御による送信データ量の低下を防ぐ。
パケットロスを考慮する場合、MAC処理部1310は、ネットワークから到達したパケットをFIFOメモリに空きがなく、格納できなかったことを記憶するパケットロス記憶機能と、パケットロスの情報をWin抑制部1222bに通知する機能(ST744)をさらに有するものとする。
パケットロスを考慮した算出方法の一例を、図33を用いて示す。図33は、図32の処理に、ST891bを追加したものである。
RTT受信可能量算出部1250は、図32と同様の処理により受信可能パケットサイズWrttを算出後(ST891)、MAC処理部1310に対し、前回のACKパケット送信以降にパケットロスが発生したかを問い合わせる。MAC処理部1310は、問い合わせに対し、パケットロス数を通知し、RTT受信可能量算出部1250は、パケットロス数とパケットバッファサイズを基づいてロス検知緩和サイズを算出し、RTT受信可能サイズWrttから減算する(ST893)。ロス検知緩和サイズはパケットロス数とパケットバッファサイズの積により算出してもよい。
以降の処理に関しては、図32と同様であるため、説明を省略する。
以上の構成により、RTT受信可能パケットサイズWrttを告知ウィンドウサイズWadとして設定することで、通信装置2からの、受信可能なパケットサイズを越えるパケットの送信を抑制し、TCPの転送速度の低下を抑制することができる。また、MAC処理部1310におけるパケットロスを検知し、RTT受信可能サイズを減算することで、通信装置2の輻輳制御による送信データ量の低下を防ぐことができる。
なお、輻輳制御を検知する方法は、パケットのロスを検知する方法以外でも構わない。
(実施の形態8)
実施の形態8は、実施の形態2において、Wpb調整量算出部1251を追加した形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、Wpb調整量算出部1251に関して説明をする。
実施の形態8は、実施の形態2において、Wpb調整量算出部1251を追加した形態である。本実施の形態の説明では、通信装置1の機能構成のうち、実施の形態2と共通していない部分、および、Wpb調整量算出部1251に関して説明をする。
<ネットワーク構成および構成図>
図34は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態8におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図34は、本発明の一実施の形態が係る通信装置1の機能構成例を示した図である。実施の形態8におけるネットワーク構成および構成図について、実施の形態2のネットワーク構成および構成図と共通していない部分について説明し、それ以外に関しては説明を省略する。
図34に通信装置1の機能構成を以下に示す。ここでは、新規に追加するWpb調整量算出部1251と、一部機能を変更する受信データ管理部1221d、Win抑制部1222gについて説明を行なう。これ以外の機能に関しては、実施の形態2と同様のため、ここでは説明を省略する。なお、Wpb調整量算出部1251は、図34ではTCP処理部1220に含まれているが、必ずしもTCP処理部1220に含まれていなくても構わない。
受信データ管理部1221dは、アプリケーション1100からのデータ受信要求が発生する時刻、および保持していたパケットバッファの開放数を監視し、単位時間当たりのパケットバッファの開放数を単位時間処理パケット数として管理する機能をさらに有する。
Wpb調整量算出部1251は、Wpb調整量αrttを算出し、Win抑制部1222gに通知する機能を持つ。本実施の形態では、Wpb調整量αrttの算出方法の一例として、受信データ管理部1221dが管理している単位時間処理パケット数に基づいて算出する方法を説明する。
Win抑制部1222gは、告知WinサイズWadを設定する際、残りパケットバッファWpbに対し、Wpb調整量αrttに加算する機能をさらに有する。
<<告知Winサイズの算出方法>>
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、次のパケットが到達するまでの時間に処理可能なパケット数を考慮することにより、告知Winサイズの急激な低下を抑制することにより、TCPの転送速度の低下を抑制することができる。
本実施の形態では、以下で説明を行なう告知Winサイズの算出方法により、次のパケットが到達するまでの時間に処理可能なパケット数を考慮することにより、告知Winサイズの急激な低下を抑制することにより、TCPの転送速度の低下を抑制することができる。
図35を用いて、Win抑制部1222gにおける告知WinサイズWadの算出方法の説明を行なう。
本実施の形態では、1パケットバッファに1500byteのデータを格納可能であり、最大保持データパケット数PBmaxを8個、最大保持データ量Dmaxを8192byteとする。
また、ここでは、TCPパケット1パケットに100byteのデータを含むパケット6個がソケットキューに関連付けられている場合を用いて、説明を行なう。また、単位時間処理パケット数は、受信データ管理部1221dがソケットキューにパケットバッファが関連づけられる時刻、およびアプリケーション1100からの受信要求を受け、パケットバッファが開放される時刻を監視し、統計的に算出されており、10msecあたり、3個とする。さらに本実施の形態では、RTTを次のデータパケットを受信するまでの時間として利用し、RTTを10msecとする。RTTの算出方法は実施の形態7の記載と同様のため、説明を省略する。
受信可能データ量の取得(ST81)、残りパケットバッファサイズWpbの算出(ST82)は、実施の形態2と同様のため、説明を省略する。
(Calc−8)Wpb調整量αrttの算出(ST893)
Win抑制部1222gは、Wpb調整量算出部1251に問い合わせ、Wpb調整量αrttを取得する。以下に、Wpb調整量αrttの算出方法の一例を示す。
Win抑制部1222gは、Wpb調整量算出部1251に問い合わせ、Wpb調整量αrttを取得する。以下に、Wpb調整量αrttの算出方法の一例を示す。
最初に、Wpb調整量算出部1251は、Wpb調整量αrttを算出する。本実施の形態では、RTTは10msec、10msecあたりの単位時間処理数は3個、パケットバッファサイズは、1500byteであるから、Wpb調整量αrttは、3×1500=4500byteを処理可能となる。
図36は、保持データパケット数PBcur、残りパケットバッファ数PBrem、Wpb調整量αrttの関係図を示したものである。実施の形態2では、残りパケットバッファ数PBremと固定サイズSの積により、残りパケットバッファサイズWpbを算出し、告知Winサイズの候補としていた。一方、本実施の形態では、次のパケットが到達するまでに処理できるパケットバッファ数を考慮し、Wpb調整量αrttを残りパケットバッファサイズWpbに加える。図36では、Wpb調整量αrttが、保持データパケット数PBcurのうち、次のパケットが到達するまでに処理できるパケット数であることを示している。
なお、Wpb調整量αrttの算出方法は、本実施の形態で説明した方法の他に、MAC処理部1310への問い合わせ結果から得られるパケットロスの発生量に基づいて、Wpb調整量αrttを減らす方法、などの方法が挙げられる。
(Calc−8)告知WinサイズWadの設定(ST894)
Win抑制部1222gは、残りパケットバッファサイズWpbに、Wpb調整量αrttを加算し、ST81において渡された受信可能データ量Wdと、を比較し、小さい値となる方を告知ウィンドウサイズWadとして設定する。本実施の形態では、受信可能データ量Wdは7692byte、残りパケットバッファサイズWpb+Wpb調整量αrttは((8−6)×1500+4500)=7500byteである。小さい方を告知WinサイズWadとするので、告知WinサイズWadに残りパケットバッファサイズWpb+Wpb調整量αrttを設定する。
Win抑制部1222gは、残りパケットバッファサイズWpbに、Wpb調整量αrttを加算し、ST81において渡された受信可能データ量Wdと、を比較し、小さい値となる方を告知ウィンドウサイズWadとして設定する。本実施の形態では、受信可能データ量Wdは7692byte、残りパケットバッファサイズWpb+Wpb調整量αrttは((8−6)×1500+4500)=7500byteである。小さい方を告知WinサイズWadとするので、告知WinサイズWadに残りパケットバッファサイズWpb+Wpb調整量αrttを設定する。
設定した告知WinサイズWadをACK生成部に渡す(ST86)。
以上の構成により、Wpb調整量αrttを残りパケットバッファサイズWpbサイズに加算することで、残りパケットバッファサイズの減少による、告知Winサイズの急激な低下を防ぐことができ、TCPの転送速度の低下を抑制することができる。
(その他変形例)
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
(2)上記の各装置を構成する構成要素の一部または全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
(3)上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。前記ICカードまたは前記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記ICカードまたは前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカードまたは前記モジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
(4)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(5)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
本発明は、TCPに基づく受信処理を行なうあらゆる通信装置に適用可能である。
1 受信側装置
2 送信側装置
3 ネットワーク
10 パケット
11 システムバス
12 NIC
13 CPU
14 メモリ
15 FIFOメモリ
20 アプリケーション
30 プロトコルスタック
31 TCP層
32 UDP層
33 ICMP層
34 IP層
35 Interface層
36 パケットバッファ
37 ソケットキュー
40 ネットワーク
1100 アプリケーション部
1200 プロトコルスタック部
1210 API部
1220 TCP処理部
1221,1221c,1221d 受信データ管理部
1222 Win制御部
1222a サイズ取得部
1222b,1222e,1222f,1222g Win抑制部
1224 ACK生成部
1225 TCP送信部
1226 TCP受信部
1227 データ複写部
1228 異常通知部
1229 RST生成部
1230 IP処理部
1240 Interface処理部
1250 RTT受信可能量算出部
1251 Wpb調整量算出部
1300 ネットワーク部
1310 MAC処理部
1311 MAC受信可能量算出部
1400,1400b パケットバッファ管理部
1500 CPU負荷監視部
1600 表示部
2000 実施の形態2における対象となるTCP通信の保持データパケット数
2001 実施の形態2における新規通信のためのパケットバッファ
2002 実施の形態2における通信装置全体のパケットバッファ
2003 実施の形態2における使用可能なパケットバッファ
2 送信側装置
3 ネットワーク
10 パケット
11 システムバス
12 NIC
13 CPU
14 メモリ
15 FIFOメモリ
20 アプリケーション
30 プロトコルスタック
31 TCP層
32 UDP層
33 ICMP層
34 IP層
35 Interface層
36 パケットバッファ
37 ソケットキュー
40 ネットワーク
1100 アプリケーション部
1200 プロトコルスタック部
1210 API部
1220 TCP処理部
1221,1221c,1221d 受信データ管理部
1222 Win制御部
1222a サイズ取得部
1222b,1222e,1222f,1222g Win抑制部
1224 ACK生成部
1225 TCP送信部
1226 TCP受信部
1227 データ複写部
1228 異常通知部
1229 RST生成部
1230 IP処理部
1240 Interface処理部
1250 RTT受信可能量算出部
1251 Wpb調整量算出部
1300 ネットワーク部
1310 MAC処理部
1311 MAC受信可能量算出部
1400,1400b パケットバッファ管理部
1500 CPU負荷監視部
1600 表示部
2000 実施の形態2における対象となるTCP通信の保持データパケット数
2001 実施の形態2における新規通信のためのパケットバッファ
2002 実施の形態2における通信装置全体のパケットバッファ
2003 実施の形態2における使用可能なパケットバッファ
Claims (16)
- 通信装置であって、
データパケットを受信するパケット受信部と、
受信したデータパケットを保持するパケット保持部と、
告知ウィンドウサイズを決定するウィンドウ制御部と、
受信したデータパケットに対応したACKを、決定された前記告知ウィンドウサイズを含めて生成するACK生成部と、
生成された前記ACKをデータパケットに含めて送出するデータパケット送出部と、
を含み、
前記ウィンドウ制御部は、保持データパケット数と固定サイズとに基づいて算出される残りパケットバッファサイズを告知ウィンドウサイズに決定すること、を特徴とする通信装置。 - 前記ウィンドウ制御部は、前記残りパケットバッファサイズと、残り受信バッファサイズとを比較し、
比較の結果、前記残りパケットバッファサイズの方が小さい場合、前記残りパケットバッファサイズに基づいて告知ウィンドウサイズを決定すること、を特徴とする請求項1に記載の通信装置。 - 前記通信装置は、遅延ACKアルゴリズムに基づいてACKを送出可能であり、
前記ウィンドウ制御部は、前記比較の結果、前記残りパケットバッファサイズの方が小さい場合、遅延ACKアルゴリズムの動作を無効とすることを特徴とする請求項2記載の通信装置。 - 前記ウィンドウ制御部は、前記通信装置全体の使用可能バッファ数と前記通信装置全体で管理するバッファ数から算出される所定の閾値とを比較し、
前記比較の結果、前記使用可能バッファ数の値が小さい場合に、
前記使用可能バッファ数と固定サイズとに基づいて、告知ウィンドウサイズを決定することを特徴とする、請求項1または請求項2に記載の通信装置。 - 異常通知部をさらに備え、
前記ウィンドウ制御部は、前記比較の結果、前記残りパケットバッファサイズの方が小さい場合、さらに異常通知を行うことを特徴とする請求項2記載の通信装置。 - CPU負荷監視部をさらに備え、
CPU負荷監視部が、CPU負荷が低いことを検知した場合、受信データ管理部に通知し、
前記受信データ管理部は、
前記保持データパケットを他のデータパケットに複写することにより、前記保持データパケット数を減らす
ことを特徴とする請求項1または請求項2に記載の通信装置。 - 通信装置が実行する通信制御方法であって、
データパケットを受信するステップと、
受信したパケットを保持するステップと
告知ウィンドウサイズを決定するステップと、
受信したデータパケットに対応したACKを、決定された前記告知ウィンドウサイズに基づき生成するステップと、
生成された前記ACKをデータパケットに含めて送出するステップと、
を含み、
前記告知ウィンドウサイズを決定するステップは、保持データパケット数と固定サイズとに基づいて算出される残りパケットバッファサイズを告知ウィンドウサイズに決定すること、を特徴とする通信制御方法。 - コンピュータを、
データパケットを受信する手段と、
受信したパケットを保持する手段と
告知ウィンドウサイズを決定する手段と、
受信したデータパケットに対応したACKを決定された前記告知ウィンドウサイズに基づき生成する手段と、
生成された前記ACKをデータパケットに含めて送出する手段と、
を含み、
前記告知ウィンドウサイズを決定する手段を、保持データパケット数と固定サイズとに基づいて算出される残りパケットバッファサイズを告知ウィンドウサイズに決定する手段、
として機能させるための通信プログラム。 - コンピュータを、
データパケットを受信する手段と、
受信したパケットを保持する手段と
告知ウィンドウサイズを決定する手段と、
受信したデータパケットに対応したACKを決定された前記告知ウィンドウサイズに基づき生成する手段と、
生成された前記ACKをデータパケットに含めて送出する手段と、
を含み、
前記告知ウィンドウサイズを決定する手段は、保持データパケット数と固定サイズとに基づいて算出される残りパケットバッファサイズを告知ウィンドウサイズに決定する手段、
として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。 - MAC処理部と、MAC受信可能量算出部をさらに備え、
MAC処理部は、ネットワークから受信したパケットを一時的に保持する機能を有し、
MAC受信可能量算出部は、告知ウィンドウサイズ算出時、MAC処理部で受信可能なパケット数、または、バッファ数からMAC受信可能ウィンドウサイズを算出し、
前記ウィンドウ制御部は、前記残りパケットバッファサイズと、前記残り受信バッファサイズと、前記MAC受信可能ウィンドウサイズと、を比較し、
比較の結果、最も小さいものを告知ウィンドウサイズに決定すること、を特徴とする請求項2に記載の通信装置。 - RTT受信可能量算出部をさらに備え、
RTT受信可能量算出部は、通信相手とのRTT(ROUND TRIP TIME)を算出し、
さらに、所定の方法によって算出された単位時間に処理する受信パケット数と、
前記RTTから、RTT受信可能パケットサイズを算出し、
前記ウィンドウ制御部は、前記残りバッファサイズと、前記残り受信バッファサイズと、前記RTT受信可能パケットサイズと、を比較し、最小値を告知ウィンドウサイズに決定する、ことを特徴とする請求項2に記載の通信装置。 - API部をさらに備え、
前記RTT受信可能量算出部は、前記単位時間に処理する受信パケット数をAPI部により通知されることができる、ことを特徴とする請求項11に記載の通信装置。 - 前記RTT受信可能量算出部は、前記単位時間に処理する受信パケット数を統計的に観測し、前記単位時間に処理する受信パケット数を算出するために、その情報を用いる、ことを特徴とする請求項11に記載の通信装置。
- 前記RTT受信可能量算出部は、ACKパケットの送信時刻と、送信したACKパケットに起因するデータパケットの受信時刻の差分から算出されるRTTを算出し、そのRTTを前記RTT受信可能パケットサイズの算出に用いること、を特徴とする請求項11に記載の通信装置。
- 前記RTT受信可能量算出部は、受信するパケットをMAC処理部で保持できなかった場合に、前記RTT受信可能パケットサイズを減らすこと、を特徴とする請求項11に記載の通信装置。
- 残りパケットバッファサイズ調整量算出部をさらに備え、
前記残りパケットバッファサイズ調整量算出部は、所定の方法によって単位時間処理パケット数を算出し、
前記ウィンドウ制御部は、前記残りパケットバッファサイズと、残り受信バッファサイズとの比較前に、前記単位時間処理パケット数を基づいて、前記残りパケットバッファサイズを所定量だけ減少させること、を特徴とする請求項2または請求項10に記載の通信装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006200315A JP2007110680A (ja) | 2005-09-15 | 2006-07-24 | 通信装置、通信プログラム、通信制御方法および記録媒体 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005267841 | 2005-09-15 | ||
JP2006200315A JP2007110680A (ja) | 2005-09-15 | 2006-07-24 | 通信装置、通信プログラム、通信制御方法および記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007110680A true JP2007110680A (ja) | 2007-04-26 |
Family
ID=38036141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006200315A Pending JP2007110680A (ja) | 2005-09-15 | 2006-07-24 | 通信装置、通信プログラム、通信制御方法および記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007110680A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101212796B1 (ko) | 2008-06-13 | 2012-12-14 | 삼성전자주식회사 | 상향 링크 서비스 제공 단말, 기지국 및 방법 |
US8514792B2 (en) | 2008-06-13 | 2013-08-20 | Samsung Electronics Co., Ltd. | Mobile station, base station, and method for uplink service |
WO2014141437A1 (ja) * | 2013-03-14 | 2014-09-18 | 株式会社日立製作所 | 通信ノード装置、帯域制御方法、及び計算機読み取り可能な記憶媒体 |
WO2015037274A1 (ja) * | 2013-09-10 | 2015-03-19 | 株式会社東芝 | 負荷軽減装置、サーバ装置及び負荷軽減方法 |
KR101521783B1 (ko) * | 2009-04-29 | 2015-05-29 | 에스케이 텔레콤주식회사 | Rws 자동 조정 시스템 및 방법 |
JP7506701B2 (ja) | 2022-03-16 | 2024-06-26 | 株式会社デンソーテン | 通信制御装置および通信方法 |
-
2006
- 2006-07-24 JP JP2006200315A patent/JP2007110680A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101212796B1 (ko) | 2008-06-13 | 2012-12-14 | 삼성전자주식회사 | 상향 링크 서비스 제공 단말, 기지국 및 방법 |
US8514792B2 (en) | 2008-06-13 | 2013-08-20 | Samsung Electronics Co., Ltd. | Mobile station, base station, and method for uplink service |
KR101521783B1 (ko) * | 2009-04-29 | 2015-05-29 | 에스케이 텔레콤주식회사 | Rws 자동 조정 시스템 및 방법 |
WO2014141437A1 (ja) * | 2013-03-14 | 2014-09-18 | 株式会社日立製作所 | 通信ノード装置、帯域制御方法、及び計算機読み取り可能な記憶媒体 |
WO2015037274A1 (ja) * | 2013-09-10 | 2015-03-19 | 株式会社東芝 | 負荷軽減装置、サーバ装置及び負荷軽減方法 |
JP2015055933A (ja) * | 2013-09-10 | 2015-03-23 | 株式会社東芝 | 負荷軽減装置、サーバ装置及び負荷軽減方法 |
JP7506701B2 (ja) | 2022-03-16 | 2024-06-26 | 株式会社デンソーテン | 通信制御装置および通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5020076B2 (ja) | 低頻度ackのシステムに適した高性能tcp | |
JP5816718B2 (ja) | 通信装置、通信システム、およびデータ通信の中継方法 | |
EP3075110B1 (en) | Controlling a transmission control protocol window size | |
US8943206B2 (en) | Network bandwidth detection and distribution | |
JP5258938B2 (ja) | 通信装置 | |
EP2632102A1 (en) | Method and device for data transmission | |
JP2002152308A (ja) | データ通信システム、その通信方法及びその通信プログラムを記録した記録媒体 | |
US20080298376A1 (en) | Network communication with path mtu size discovery | |
JP2014524092A (ja) | 単一ソケットポイントツーマルチポイント性能による高信頼性仮想双方向データストリーム通信のためのシステムおよび方法 | |
WO2014031046A1 (en) | Tcp proxy server | |
WO2018121742A1 (zh) | 一种流数据的传输方法和装置 | |
JP2013191931A (ja) | 情報処理装置、輻輳制御方法および輻輳制御プログラム | |
JP2007110680A (ja) | 通信装置、通信プログラム、通信制御方法および記録媒体 | |
JP5832335B2 (ja) | 通信装置および通信システム | |
Thubert | IPv6 over low-power Wireless Personal Area network (6LoWPAN) selective fragment recovery | |
JP4244159B2 (ja) | 受信装置、通信システムおよびプログラム | |
JP7067544B2 (ja) | 通信システム、通信装置、方法およびプログラム | |
JP2007013449A (ja) | シェーパー制御方法、データ通信システム、ネットワークインタフェース装置及びネットワーク中継装置 | |
JP2008053888A (ja) | 通信装置、プログラム、情報記憶媒体および通信制御方法 | |
JP4650792B2 (ja) | セッション中継装置、セッション中継方法及びセッション中継プログラム | |
US8588064B2 (en) | Transport layer that warns application of potential bottleneck and methods thereof | |
CN116566920A (zh) | 一种数据传输控制方法及相关装置 | |
JP2006148727A (ja) | アプリケーションモニタ装置 | |
McCann et al. | RFC1981: Path MTU Discovery for IP version 6 | |
Thubert | RFC 8931: IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Selective Fragment Recovery |