(58)【調査した分野】(Int.Cl.,DB名)
入力回線からパケットを受信するパケット受信部と、前記パケット受信部が受信したパケットをスイッチングするスイッチと、前記スイッチがスイッチングしたパケットを、出力回線を介して送信するパケット送信部と、を含むパケット中継装置が実行するパケット中継方法であって、
モニタリング対象となるフローを識別する条件を含むパケットが属するフローを識別する条件を設定する複数のフローエントリを連想メモリに保持する第1手順と、
前記連想メモリの連続したアドレス範囲と実行すべきアクションを指定する情報を保持するアクションレジスタとを対応付けるアドレス範囲情報を保持する第2手順と、
同一の前記アクションに関連付けられた前記フローを識別する条件を設定する前記複数のフローエントリを、同一の前記アドレス範囲内の複数のアドレスに登録する第3手順と、
受信した前記パケットのヘッダ情報を前記連想メモリに入力する第4手順と、
入力された前記パケットのヘッダ情報がいずれかの前記フローエントリの条件を満たす場合、前記条件が満たされるフローエントリのアドレスを出力する第5手順と、
前記連想メモリから出力されたアドレスを含むアドレス範囲を判定する第6手順と、
前記判定されたアドレス範囲に対応する前記アクションレジスタから読み出した情報に従って、受信した前記パケットに関して実行すべきアクションを決定する第7手順と、
受信した前記パケットに関して前記決定したアクションを実行する第8手順と、を含むことを特徴とするパケット中継方法。
【発明を実施するための形態】
【0017】
以下に、本発明を実施するための実施形態を図面に従い説明する。
【0018】
図1は、本発明の実施形態のパケット中継装置4の構成例を示すブロック図である。
【0019】
図1に示すパケット中継装置4は、パケット受信回路40、パケット送信回路41、受信側パケット検索部42、送信側パケット検索部43、スイッチ44、レジスタ45、及び各種のメモリを備える。上記のパケット中継装置4のうち各種のメモリ以外の部分が一つ又は複数のASICによって構成され、それに各種のメモリが外付けされてもよい。受信側パケット検索部42は、フロー検索部421、フロー統計採取部422、フロー統計機能用CPU423及び経路検索部420を含む。送信側パケット検索部43は、フロー検索部431、フロー統計採取部432及びフロー統計機能用CPU433を含む。各種のメモリは、フロー検索部421によって参照されるフロー検索CAM4210及びフロー検索RAM4211、フロー統計採取部422によって参照されるフロー統計採取RAM4220、経路検索部420によって参照される経路検索CAM4200及び経路検索RAM4201、並びに、フロー検索部431によって参照されるフロー検索CAM4310及びフロー検索RAM4311を含む。以下、パケット中継装置4全体及びそれを構成する各部について説明する。
【0020】
パケット中継装置4は、複数の入力回線47と複数の出力回線48に接続され、入力回線47から入力したパケットをヘッダ情報に基づき特定される出力回線48に出力する。パケット中継装置4には管理端末46が接続されており、後述する各種のテーブルに対する設定情報は管理端末46から入力されてレジスタ45に一時的に蓄積され、各種のテーブルの制御部に出力されて各テーブルに設定される。パケット受信回路40は、入力回線47からパケットが入力すると、パケットを格納し、パケットのヘッダ情報を受信側パケット検索部42に出力する。さらにパケット受信回路40は、パケットが入力した入力回線を識別する入力回線番号(又は識別子)とパケットのByte長を含む内部ヘッダを、パケットヘッダ情報に付加して受信側パケット検索部42に出力してもよい。
【0021】
受信側パケット検索部42は、入力されたパケットヘッダ情報のうちの宛先IPアドレス(DIP:Destination IP Address)を経路検索部420に出力する。経路検索部420は、入力された宛先IPアドレスを経路検索CAM4200に出力する。経路検索CAM4200には宛先IPアドレスのリストを登録したテーブルが格納されており、入力された宛先IPアドレスに一致する宛先IPアドレスが登録されたエントリのアドレスを経路検索部420に出力する。
【0022】
経路検索部420は、経路検索CAM4200から入力されたアドレスを経路検索RAM4201に出力する。経路検索RAM4201には、宛先IPアドレスが登録された経路検索CAM4200のアドレスと同一のアドレスに、上述の宛先IPアドレスのパケットを出力すべき出力回線と出力する際に書き換えるべき宛先MACアドレス(DMAC:Destination MAC address)が登録されている。経路検索部420から入力されたアドレスを読み出しアドレスとして、経路検索RAM4201を読み出すことによって、出力すべき出力回線と出力する際に書き換えるべき宛先MACアドレスが得られる。
【0023】
経路検索RAM4201は、出力回線と宛先MACアドレスを経路検索部420に出力する。経路検索部420は、出力回線と宛先MACアドレスをパケット受信回路40に出力し、パケット受信回路40はパケットの内部ヘッダのうち出力回線の情報を登録し、ヘッダ情報のうち宛先MACアドレスを書き換える。
【0024】
上述の経路検索の処理と並行して、受信側パケット検索部42は、入力されたパケットヘッダ情報のうちのL2(Layer2)情報、L3(Layer3)情報及びL4(Layer4)情報をフロー検索部421に出力する。フロー検索部421は、受信側パケット検索部42からパケットヘッダ情報のうちのL2情報、L3情報及びL4情報をフロー検索CAM4210に出力する。フロー検索CAM4210には、フローエントリのリストを登録したフローテーブル42100が格納されている。各フローエントリには、L2情報、L3情報及びL4情報によってフローを定義するフロー条件が設定されている。フロー検索CAM4210は、入力されたパケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリを検索して、一致したフローエントリのアドレスをフロー検索部421に出力する。
【0025】
以下では、本発明の一実施形態として、NetFlowをはじめとするフロー統計機能の例を用いて説明する。
【0026】
図2は、本発明の実施形態のフロー検索CAM4210に格納されたフローテーブル42100の構成例を示す説明図である。
【0027】
図2のフローテーブル42100は、統計採取用エントリ421000、統計採取用エントリ421001、IPv4登録用エントリ421002、IPv6登録用エントリ421003、及び非IP登録用エントリ421004といった各種のフローエントリから構成される。統計採取用エントリ421000には、フロー統計を採取する個別のフローに一致するフロー条件が設定される。IPv4登録用エントリ421002には、フロー統計の採取対象として登録したい全てのIPv4フローに一致するフロー条件が設定される。IPv6登録用エントリ421003には、フロー統計の採取対象として登録したい全てのIPv6フローに一致するフロー条件が設定される。非IP登録用エントリ421004には、フロー統計の採取対象として登録したい全ての非IPフローに一致するフロー条件が設定される。
【0028】
なお、IPv4/IPv6/非IPのフローを区別せずに一つの登録用エントリが設けられてもよいし、別の条件によって登録用エントリを区別する場合には、それぞれの条件に対応するフロー条件が設定されても良い。登録用エントリを区別することによって、例えば登録処理を実行するCPUを登録用エントリ毎に独立させることで負荷分散したり、登録対象とするフローの条件又はフロー数等の登録に係る条件を独立に設定したりすることが可能となる。
【0029】
図2には二つの統計採取用エントリ(すなわち統計採取用エントリ421000及び421001)のみを示したが、実際のフローテーブル42100は任意の数の統計採取用エントリを含み得る。
【0030】
フロー統計機能による処理の流れの概要を説明する。まず、管理端末46からフロー統計機能による統計採取の対象としたいフロー条件をパケット中継装置4に入力する。入力されたフロー条件はレジスタ45に一時的に蓄積され、フロー統計機能用CPU423に出力される。フロー統計機能用CPU423は、レジスタ45から入力されたフロー条件を、IPv4フローの場合はフローテーブル42100のIPv4登録用エントリ421002に、IPv6フローの場合はフローテーブル42100のIPv6登録用エントリ421003に、非IPフローの場合はフローテーブル42100の非IP登録用エントリ421004に設定する。また詳細は後述するが、フロー統計機能用CPU423は、これらの登録用エントリに対応するアクションを設定したエントリをフロー検索RAM4211に、これらの登録用エントリに対応する統計を採取するエントリをフロー統計採取RAM4220に設定する。
【0031】
パケット中継装置4に入力されたパケット(以下、当該パケットと記載)が統計採取用エントリ421000等のいずれの統計採取用エントリのフロー条件にも一致せず(又は、いずれの統計採取用エントリにもフロー条件が設定されておらず)、当該パケットがIPv4登録用エントリ421002、IPv6登録用エントリ421003、非IP登録用エントリ421004のいずれかのフロー条件に一致する場合、当該パケットが属するフローに関する登録要求がフロー統計機能用CPU423に通知される。フロー統計機能用CPU423は、当該パケットのパケットヘッダ情報に基づいて、フローテーブル42100の統計採取用エントリ421000を、登録用エントリよりも優先的に一致と判定されるフローテーブル42100の未使用エントリのアドレス(すなわち、未使用エントリのアドレスのうち、いずれの登録用エントリよりも上位のアドレス)に設定する。以降、当該パケットと同一フローに属するパケットがパケット中継装置4に入力されると、登録用エントリよりも優先的に統計採取用エントリ421000に一致すると判定されるので、フロー統計採取部422が、登録処理ではなく統計採取処理を実行する。
【0032】
図3は、本発明の実施形態の統計採取用エントリ421000の構成例を示す説明図である。
【0033】
なお、統計採取用エントリ421001、IPv4登録用エントリ421002、IPv6登録用エントリ421003、非IP登録用エントリ421004も
図3と同様の構成とすることができる。
【0034】
統計採取用エントリ421000には、フロー統計を採取する個別のフローに一致するフロー条件として、回線4210000、VLAN4210001、EtherType4210002、SMAC(Source MAC Address)4210003、DMAC(Destination MAC Address)4210004、IPVER(IP Version)4210005、TOS(Type Of Service)4210006、SIP(Source IP Address)4210007、DIP(Destination IP Address)4210008、PRT(Protocol)4210009、SPORT(Source PORT)4210010、及びDPORT(Destination PORT)4210011から構成される。
【0035】
フロー検索部421は、フロー検索CAM4210から入力されたアドレスをフロー検索RAM4211に出力する。
【0036】
図4は、本発明の実施形態のフロー検索RAM4211に格納されたアクションテーブル42110の構成例を示す説明図である。
【0037】
図4のアクションテーブル42110は、アクションエントリ421100〜421104から構成される。入力されたパケットのL2情報、L3情報及びL4情報に一致するフロー条件が登録されたフローエントリが登録されたフロー検索CAM4210のアドレスと同一のフロー検索RAM4211のアドレスに、検索の用途に応じて当該パケットに対して実施すべきアクションを記載したアクションエントリ4213が登録されている。
【0038】
図5は、本発明の実施形態のアクションエントリ421100の構成例を示す説明図である。
【0039】
アクションエントリ421100には、フロー統計を採取すべきか否かというアクションを示す統計採取フラグ4211000、フロー統計を確率的に採取すべきか否かというアクションを示す確率制御フラグ4211001、フロー統計を確率的に採取する際の確率制御カウンタ識別子4211002、及び、当該パケットをフロー統計採取対象パケットと判断し当該パケットを識別するに相当するフロー条件をフローエントリとして登録すべきことをフロー統計機能用CPU423に通知するアクションを示す登録通知フラグ4211003等が登録される。これらのアクションの詳細に関しては後述する。
【0040】
上記は検索の用途がフロー統計機能である場合の例であるが、検索の用途がミラーリングである場合には、当該パケットをミラーリングすべきか否かというアクションを示す情報、フロー統計を確率的に実施すべきというアクションを示す情報等がアクションエントリ421100に登録される(図示省略)。
【0041】
あるいは、検索の用途がフィルタリングである場合には、当該パケットを廃棄すべきか否かというアクションを示す情報がアクションエントリ421100に登録される(図示省略)。
【0042】
あるいは、検索の用途がQoSの優先度判定である場合には、入力パケットに対して装置内で制御すべき優先度を示す情報がアクションエントリ421100に登録される。
【0043】
以下、検索の用途がフロー統計機能である場合について説明する。フロー検索部421から入力された、当該パケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリのアドレスを読み出しアドレスとして、フロー検索RAM4211を読み出すことによって、フロー統計の採取に関する各種のアクションを示すアクションエントリ421100の情報が得られる。フロー検索RAM4211からは、アクションエントリ421100の情報がフロー検索部421に出力される。フロー検索部421は、当該パケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリのアドレスとアクションエントリ421100の情報とをフロー統計採取部422に出力する。
【0044】
図6は、本発明の実施形態のフロー統計採取部422の構成例を示すブロック図である。
【0045】
フロー統計採取部422は、確率制御判定部4221、確率制御部4222、確率制御カウンタテーブル4223及び統計採取判定部4224から構成される。また、フロー統計採取部422にはフロー統計採取RAM4220が接続されている。
【0046】
フロー検索部421からフロー統計採取部422に、当該パケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリのアドレスとアクションエントリ421100の情報が入力されると、確率制御判定部4221は、アクションエントリ421100の情報のうち確率制御フラグ4211001がフロー統計の採取を確率的に実施することを示す値になっていればフロー統計の採取を確率的に実施すること、確率制御フラグ4211001がフロー統計の採取を確率的に実施することを示す値になっていなければフロー統計の採取を確率的に実施しないことを判定する。
【0047】
確率制御判定部4221は、フロー統計の採取を確率的に実施すると判定した場合には、アクションエントリ421100の情報のうち確率制御カウンタ識別子4211002を確率制御部4222に出力する。確率制御部4222は、確率制御カウンタ識別子4211002を読み出しアドレスとして確率制御カウンタテーブル4223を読み出す。
【0048】
図7は、本発明の実施形態の確率制御カウンタテーブル4223の構成例を示す説明図である。
【0049】
確率制御カウンタテーブル4223は、確率制御カウンタ識別子4211002毎に確率制御カウンタ42230と統計採取確率42235を備えた確率制御エントリ422300から構成されている。パケットが入力される毎に、確率制御カウンタテーブル4223から、確率制御カウンタ42230と統計採取確率42235が確率制御部4222によって読み出される。統計採取確率42235には、確率0〜100%に応じて0〜100の値が設定される。確率制御部4222は、確率制御カウンタを読み出す毎に一様な確率で0〜100の値を再計算して、次のパケットに対する確率制御カウンタテーブル4223の読み出し処理の前に、当該パケットに対する読み出しアドレスと同一のアドレスを書き込みアドレスとして確率制御カウンタテーブル4223に書き戻す。
【0050】
確率制御部4222によって読み出された確率制御カウンタ42230と統計採取確率42235は、確率制御判定部4221に出力される。確率制御判定部4221は、確率制御カウンタ42230と統計採取確率42235の値の大きさを比較して、確率制御カウンタ42230が統計採取確率42235以下である場合には、当該パケットに対し統計採取することを示す信号を統計採取判定部4224に出力する。確率制御カウンタ42230が統計採取確率42235より大きい場合には、当該パケットに対し統計採取しないことを示す信号を統計採取判定部4224に出力する。確率制御判定部4221においてフロー統計の採取を確率的に実施しないと判定された場合には、上述の処理は行われない。
【0051】
統計採取判定部4224では、アクションエントリ421100の情報のうち統計採取フラグ4211000が統計採取すべきことを示す値であり、かつ確率制御判定部4221から当該パケットに対し統計採取することを示す信号が入力された場合には、当該パケットに対する統計採取を行う。アクションエントリ421100の情報のうち統計採取フラグ4211000が統計採取すべきことを示す値であり、かつ確率制御判定部4221においてフロー統計の採取を確率的に実施しないと判定された場合にも当該パケットに対
する統計採取を行う。その他の場合は、統計採取を行わない。
【0052】
例えば、確率制御カウンタ識別子4211002に従って確率制御カウンタ42230が読み出された場合、0〜99のうちいずれかが新たな確率制御カウンタ42230の値として再計算される。再計算によって0〜99のいずれの値が得られる確率も一様であるため、例えば統計採取確率42235の値が50であった場合、確率制御カウンタ42230の値が50以下となる確率は50%である。その結果、50%の確率でフロー統計の採取が行われる。
【0053】
図7には、複数の確率制御カウンタ42230〜42234及びそれぞれに対応する統計採取確率42235〜42239を示す。例えば、複数の統計採取確率42235〜42239にそれぞれ異なる値を設定することによって、フローごとに任意の確率で統計を採取することができる。
【0054】
統計採取判定部4224における統計採取の処理を説明する。統計採取判定部4224にはフロー統計採取RAM4220が接続されている。
【0055】
図8は、本発明の実施形態のフロー統計採取RAM4220の構成例を示す説明図であ
る。
【0056】
フロー統計採取RAM4220には、フロー統計テーブル42200が格納される。フロー統計テーブル42200は、フロー検索部421からフロー統計採取部422に入力された、当該パケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリのアドレス毎に、パケット数422000とByte数422005を採取するフィールドを備えた統計採取エントリ4220000から構成されている。
【0057】
パケットが入力されると、当該パケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリのアドレスを読み出しアドレスとしてフロー統計採取RAM4220が読み出され、当該パケットの属するフローのパケット数422000とByte数422005が統計採取判定部4224に出力される。統計採取判定部4224は、読み出されたパケット数422000に1を加算し、読み出されたByte数422005に当該パケットのパケットヘッダ情報に付加された内部ヘッダ情報に含まれる当該パケットのByte長を加算する。そして、統計採取判定部4224は、加算後のパケット数422000とByte数422005を、次のパケットに対するフロー統計採取RAM4220の読み出し処理の前に、当該パケットに対する読み出しアドレスと同一のアドレスを書き込みアドレスとしてフロー統計採取RAM4220書き戻す。これによって、統計採取判定部4224における統計採取の処理が完了する。
【0058】
図8には、複数のパケット数422000〜422004及びそれぞれに対応するByte数422005〜422009を示す。これらを使用することで、フロー毎に統計採取を行うことができる。
【0059】
統計採取判定部4224に出力されたアクションエントリ421100の情報のうち登録通知フラグ4211003が登録通知すべきことを示す値である場合には、フロー統計採取部422は、当該パケットのパケットヘッダ情報をフロー統計機能用CPU423に出力する。すると、フロー統計機能用CPU423は、フロー検索CAM4210に格納されたフローテーブル42100の統計採取用エントリ421000のうち未使用エントリを検索し、当該パケットのパケットヘッダ情報に基づいて未使用エントリに当該パケットが一致するフロー条件を設定する。また、フロー統計機能用CPU423は、フロー条件を設定した当該統計採取用エントリ421000アドレスと同一のフロー検索RAM4211のアドレスに、当該パケットに対するアクションエントリ4213を登録する。また、フロー統計機能用CPU423は、フロー条件を設定した当該統計採取用エントリ421000アドレスと同一のフロー統計採取RAM4220のアドレスに、当該パケットに対する統計採取エントリ4220000を登録する。
【0060】
以上の受信側のフロー統計機能の処理が完了すると、当該パケットはスイッチ44を経由してパケット送信回路41に出力される。パケットヘッダ情報が送信側パケット検索部43に出力され、受信側のフロー統計機能と同様の処理が送信側においても実行される。なお、フロー統計機能は受信側と送信側の両方で実行されてもよいし、一方のみで実行さてもよい。例えば、フロー検索部431がフロー検索CAM4310及びフロー検索RAM4311を参照してフロー検索部421と同様の処理を実行してもよい。フロー検索部421によるフロー検索結果に従って、フロー統計採取部432がフロー統計採取部422と同様のフロー統計処理を実行し、フロー統計機能用CPU433がフロー統計機能用CPU423と同様に各種の設定処理を実行してもよい。以下の説明は、受信側パケット検索部42を対象としているが、送信側パケット検索部43にも適用され得る。
【0061】
次に、受信側パケット検索部42のフロー検索部421に関し、
図9等を用いて説明する。
【0062】
図9は、本発明の実施形態のフロー検索部421の構成例を示すブロック図である。 フロー検索部421は、本発明の実施形態のアドレス空間毎アクション指定部4212と、本発明の実施形態のアドレス範囲1用アクションレジスタ42121と、本発明の実施形態のアドレス範囲2用アクションレジスタ42122と、本発明の実施形態のアドレス範囲3用アクションレジスタ42123と、本発明の実施形態のアドレス範囲4用アクションレジスタ42124と、を備える。また、フロー検索CAM4210の検索結果のアドレスは、アドレス空間毎アクション指定部4212の備えるアドレス比較部42120に出力される。なお、アドレス範囲1用アクションレジスタ42121〜アドレス範囲4用アクションレジスタ42124には、それぞれ、アドレス範囲1〜アドレス範囲4に対応するアクションを指定するアクションエントリと同様の情報が格納される(
図4及び
図5参照)。
【0063】
本発明の実施形態の検索の処理の流れについて説明する。フロー検索CAM4210内のフローテーブルにおいて、同一アクションをもつフローエントリは、フロー検索CAM4210内のフローエントリのリストにおいてアドレスの連続した空間に配置する。このようなフローテーブルを実現するためのフローエントリの並べ替えについては後述する(
図13A〜
図15等参照)。また、アドレス比較部42120は、アドレス範囲1用アクションレジスタ42121、アドレス範囲2用アクションレジスタ42122、アドレス範囲3用アクションレジスタ42123、及びアドレス範囲4用アクションレジスタ42124に対応するアドレス範囲の上限値と下限値を指定する情報を保持する。
【0064】
アドレス範囲n(n:1〜4)用アクションレジスタには、下限値以上、上限値以下のアドレスに対するアクションエントリが設定される。この上限値と下限値とアクションは、フロー統計機能用CPU423によって設定される。アドレス範囲1用アクションレジスタ42121に対応する下限値をL1、上限値をU1、アドレス範囲2用アクションレジスタ42122に対応する下限値をL2、上限値をU2、アドレス範囲3用アクションレジスタ42123に対応する下限値をL3、上限値をU3、アドレス範囲4用アクションレジスタ42124に対応する下限値をL4、上限値をU4とする。なお、各アドレス範囲に重なりは無いものとし、L1≦U1<L2≦U2<L3≦U3<L4≦U4を満たすようにL1、U1、L2、U2、L3、U3、L4、U4が設定される。
【0065】
なお、
図9は、フロー検索の結果に応じて実行され得るアクションが4種類ある場合を一例として示している。実行され得るアクションがN種類ある場合には、上記のアドレス範囲1用アクションレジスタ42121等と同様のアクションレジスタがN個用意され、それぞれのアクションレジスタに対応するアドレス範囲の上限値及び下限値が設定される。
【0066】
図10は、本発明の実施形態のアドレス比較部42120の構成例を示すブロック図である。
【0067】
アドレス比較部42120は、アドレス範囲テーブル421201と、アドレス範囲判定部421202とを備える。アドレス範囲テーブル421201は、各アドレス範囲の上限値及び下限値を指定する情報と、各アドレス範囲とアクションレジスタとを対応付ける情報と、を含む。なお、値の小さいアドレスが上位アドレスであるため、あるアドレス範囲の上限値は、そのアドレス範囲の最下位アドレスに相当する。
【0068】
図10の例では、アドレス範囲テーブル421201に各アドレス範囲の上限値U1〜U4が設定されている。この例では各アドレス範囲の下限値の設定が省略されているが、上記の下限値L1〜L4の情報がさらにアドレス範囲テーブル421201に含まれてもよいし、あるアドレス範囲の上限値の下位側に隣接するアドレスが、そのアドレス範囲の下位側に隣接するアドレス範囲の下限値として扱われてもよい。この場合、最上位のアドレス範囲1の下限値はフロー検索CAM4210の最上位アドレスである。また、最下位のアドレス範囲4の上限値U4の設定は省略されてもよい。その場合、アドレス範囲4の上限値は、フロー検索CAM4210の最下位アドレスとなる。
【0069】
また、この例では、アドレス範囲テーブル421201の先頭のエントリに登録されたアドレス範囲(すなわち上限値がU1であるアドレス範囲)が、アドレス範囲1用アクションレジスタ42121に対応づけられる。同様に、アドレス範囲テーブル421201の2番目〜4番目のエントリに登録されたアドレス範囲が、それぞれ、アドレス範囲2用アクションレジスタ42122〜アドレス範囲4用アクションレジスタ42124に対応づけられる。
【0070】
アドレス範囲判定部421202は、アドレス範囲テーブル421201に登録された各アドレス範囲の上限値及び下限値と、アドレス比較部42120に入力されたアドレスとを比較して、入力されたアドレスがどのアドレス範囲に含まれるかを判定する。
【0071】
以下、
図9及び
図10を参照して、アドレス比較部42120等が実行する処理を説明する。
【0072】
フロー検索部421がフロー検索の検索対象とするパケットのパケットヘッダ情報をフロー検索CAM4210に入力する。フロー検索CAM4210は、入力されたパケットのL2情報、L3情報及びL4情報に一致するフロー条件が設定されたフローエントリを検索して、一致したフローエントリのアドレスをフロー検索部421内のアドレス空間毎アクション指定部4212内のアドレス比較部42120に出力する。上述のフロー検索CAM4210から入力されたアドレスをADRと表記する。
【0073】
アドレス比較部42120のアドレス範囲判定部421202は、ADRと、アドレス範囲n用アクションレジスタに対応するアドレス範囲の上限値と下限値であるL1、U1、L2、U2、L3、U3、L4、U4との大小を比較して、当該アドレスがいずれのアドレス範囲n用アクションレジスタに対応するかを判定する。アドレス範囲判定部421202は、L1≦ADR≦U1であればADRに対するアクションをアドレス範囲1用アクションレジスタ42121から読み出し、L2≦ADR≦U2であればADRに対するアクションをアドレス範囲2用アクションレジスタ42122から読み出し、L3≦ADR≦U3であればADRに対するアクションをアドレス範囲3用アクションレジスタ42123から読み出し、L4≦ADR≦U4であればADRに対するアクションをアドレス範囲4用アクションレジスタ42124から読み出す。以上の処理によって当該パケットのADRに対して実行すべきアクションが読み出され、アクション判定部42125にて当該パケットに対して実行すべきアクションが判定されて、フロー統計採取部422に出力される。
【0074】
図11は、本発明の実施形態のパケット中継装置4によって実行される処理のタイムチャートである。具体的には、
図11は、上述の処理に関し、特にフロー検索部421からフロー検索の検索対象とするパケットのパケットヘッダ情報をフロー検索CAM4210に入力してから、アドレス範囲n用アクションレジスタを読み出すまでの処理のタイムチャートである。本実施例によるフロー検索性能の高速化の効果について説明する。
【0075】
アクションエントリにより構成されるアクションテーブルがRAMに格納されている場合と、本実施例のように、アドレス範囲毎のアクションエントリがアドレス範囲n用アクションレジスタに格納される場合と比較する。
【0076】
RAMにアクションエントリにより構成されるアクションテーブルが格納されている場合、フロー検索の機能種別数の分だけRAMを読み出す回数が性能ネックとなる。一方、
図11で示すように、フロー検索を必要とする機能の数と同数のレジスタのセットをフロー検索部421を構成するASICに内蔵すればよく、機能種別数が増えても読み出し回数は変わらず性能ネックを解消することができる。
【0077】
図9には、説明を簡単にするために、フロー検索を必要とする複数の機能のうち1つ(例えばフロー統計機能)に対応するフロー検索CAM4210のフローテーブルと、それに対応するアドレス空間毎アクション指定部4212を示した。しかし、実際には、既に説明したように、例えばフロー検索を必要とする機能が4つある場合には、フロー検索CAM4210は4つのフローテーブルを含み、一つの検索コマンドに対して4つの検索結果を出力することができる。
【0078】
この場合、フロー検索部421は、それぞれの機能に対応する(すなわちそれぞれのフローテーブルに対応する)4つのアドレス空間毎アクション指定部4212を有してもよい。それぞれのフローテーブルにおいて、同一アクションをもつフローエントリは、フロー検索CAM4210内のフローエントリのリストにおいてアドレスの連続した空間に配置される。それぞれのアドレス空間毎アクション指定部4212は、それぞれの機能において実行され得るアクションに対応する複数のアクションレジスタを有し、それぞれのアクションレジスタに対応するアドレス範囲が設定される。
【0079】
その結果、フロー検索CAM4210から4つの検索結果が得られると、4つのアドレス空間毎アクション指定部4212が並行してそれぞれの検索結果に応じたアクションレジスタへのリードコマンドを発行し、リード結果を取得し、アクションを判定することができる。これによって、
図11に示すように、1つのパケットに対する処理時間を短縮することができる。
【0080】
上記のように、複数の機能の全てに対応する複数のアドレス空間毎アクション指定部4212が用意される場合には、フロー検索RAM4211は不要となるが、一つ以上のアドレス空間毎アクション指定部4212とフロー検索RAM4211が組み合わせて使用されてもよい。例えば、フロー検索部421が、4つの機能のうち1つ(例えばフロー統計機能)のみに対応する1つのアドレス空間毎アクション指定部4212を有し、その他の機能(例えばフィルタ、QoS及びミラーリング)については従来と同様にフロー検索RAM4211が使用されてもよい。その場合、フィルタ、QoS及びミラーリングについてはフロー検索RAM4211からの読み出しを順次実行する必要があるが、フロー統計機能についてはその他の機能のためのフロー検索RAM4211の検索と並行してアクションレジスタを参照することができるため、処理時間を短縮することができる。
【0081】
なお、特許文献3において、フロー検索を必要とする機能の数の分だけ外付けするRAMを増やせば、機能ごとのアクションエントリの読み出しを並行して行うことが可能になるため、読み出し回数による性能ネックを解消することができる。しかし、その場合はASICに複数のRAMを外付けする必要がある。ASICにRAMを外付け接続するためにはASICの外部ピンにより接続する必要があるが、複数のRAMを外付けするにはその分だけ必要なピン数が増してしまい、コストが上昇する。それに対し、本実施形態のようにレジスタにアクションエントリを格納する場合、外付けピンを必要としないので上述の課題は生じない。
【0082】
また、レジスタにはRAMのように多数のエントリを格納することはできないが、そもそもRAMの場合はアドレス毎にアクションエントリを登録しているために多数のアクションエントリを登録する必要があるのに対し、本実施形態のレジスタの場合はアドレス範囲毎にアクションエントリを登録するので多数のアクションエントリを登録する必要はない。このため、多数のエントリを格納できないことは課題とならない。特にフロー検索機能の用途がフロー統計機能である場合、アクションの種別の数は統計採取有無×登録通知有無×登録用CPU数×確率制御のレート種別数といった程度で限られている。このことは、フロー検索RAM4211内の一つのアクションテーブル42110に非常に多くのアクションエントリが格納されていたとしても、実際には、それらの多くの内容が同一であることを意味する。したがって、同一の内容の複数のアクションエントリを一つのレジスタに集約することによって、レジスタに格納すべきアクションエントリの数はRAMに登録可能なアクションエントリ数より圧倒的に少なくなる。このため、フロー統計機能は本実施例の適用対象として適している。
【0083】
次に、本実施形態におけるフローエントリのフロー条件の設定方法について説明する。
図12は、本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの一例を示す説明図である。
【0084】
設定前のフローテーブルにおいて、
フローエントリ1(フロー検索CAMアドレス1):フロー条件A→アクション1
フローエントリ2(フロー検索CAMアドレス2):フロー条件B→アクション2
フローエントリ3(フロー検索CAMアドレス3):フロー条件C→アクション1
フローエントリ4(フロー検索CAMアドレス4):フロー条件D→アクション1
であり、フローエントリの優先関係は
フローエントリ1>フローエントリ2>フローエントリ3>フローエントリ4
(すなわち、フローエントリ1の優先順位が最も高く、フローエントリ4の優先順位が最も低い)であるものとする。
【0085】
本発明の実施形態によれば、アクション1とアクション2を伴うフローエントリを、各々フロー検索CAMの連続したアドレス範囲に配置することとなり、
フローエントリ1(フロー検索CAMアドレス1):フロー条件A→アクション1
フローエントリ3(フロー検索CAMアドレス2):フロー条件C→アクション1
フローエントリ4(フロー検索CAMアドレス3):フロー条件D→アクション1
フローエントリ2(フロー検索CAMアドレス4):フロー条件B→アクション2
と配置し直す必要がある。
【0086】
この例において、フロー条件A〜Dのいずれの組み合わせのいずれも互いに背反であれば、一つのパケットが複数の条件を同時に満たすことがあり得ないため、上記のようにフローエントリが並べ替えられても、実行されるアクションが変更されることはない。例えばフロー条件Cを満たすパケットが入力された場合、そのパケットがフロー条件A、B及びDのいずれも満たすことがないため、フローエントリがどのような順で登録されていても必ずアクション1が実行される。
【0087】
しかし、フロー条件A〜Dの組み合わせの少なくとも一つが互いに背反でない場合、フローエントリが並べ替えられたために実行されるアクションが変更されることがある。例えば、フロー条件B及びCのいずれも満たすパケットが入力された場合、フローエントリが並べ替えられる前であれば先にフロー条件Bが判定されるため、アクション2が実行されるが、フローエントリが並べ替えられた後であればフロー条件Cが先に判定されるため
アクション1が実行される。
【0088】
例えば、フローエントリ2が
図2のいずれかの統計採取用エントリであり、フローエントリ3が
図2のいずれかの登録用エントリである場合、上記のような並べ替えに起因するアクションの変更によって、本来は実行されるはずの統計採取が実行されなくなる。
【0089】
このようなフローエントリの並べ替えに起因するアクションの変更を防ぐことを目的として、フローエントリ間の優先関係を維持するには、フロー条件Bに一致するパケットが
フローエントリ3及びフローエントリ4のいずれのフロー条件にも一致しないようにする
必要があるため、フロー条件を以下のように変更する必要がある。
フローエントリ1(フロー検索CAMのアドレス1):フロー条件A→アクション1
フローエントリ3(フロー検索CAMのアドレス2):not フロー条件B and フロー条件C→アクション1
フローエントリ4(フロー検索CAMのアドレス3):not フロー条件B and フロー条件D→アクション1
フローエントリ2(フロー検索CAMのアドレス4):(not フロー条件C and not フロー条件D) and フロー条件B→アクション2
ただし、フローエントリ2の「(not フロー条件C and not フロー条件D) and」の条件は省略してもよい。このように、本発明適用後のフローエントリのフロー条件は、互いに背反となる。これが
図12における本発明のフローテーブルであり、以上が設定前のフローテーブルに基づいたフローテーブルを設定する処理の流れである。
【0090】
なお一般にフローエントリ3、フローエントリ4のようにフロー条件の論理式に付加される条件があり、またフロー条件が範囲指定を含む場合、フロー検索CAM4210上に展開されるエントリ数は増加する。例えば、フロー条件Bが5(二進数表記で101)、フロー条件Cが4〜7(二進数表記で1xx、xはdon’t care、つまり任意の値であることを示す)である場合に、not フロー条件B and フロー条件Cは4、6、7となり、これをフロー検索CAM4210上にビットを用いた二進数として展開することで生成されるエントリは100、11xの2エントリに増加する。
【0091】
パケット中継装置4は、フロー検索CAM4210に含まれる空きフローエントリ数(すなわちまだフロー条件が設定されていない、これからフロー条件を設定できるエントリ数)を示す情報を出力し、管理端末46がその情報を画像表示装置(図示省略)等に表示してもよい。通常、どのようなフロー条件が設定されているかが分かれば、そのフロー条件を設定するためにどれだけのフローエントリが消費されるかが推定できる。上記のように、フローエントリを並べ替えて、それに伴ってフロー条件を変更した結果、フローエントリを並べ替える前より多くのフローエントリが消費される場合があるため、空きフローエントリ数に基づいてフロー条件の変更が行われたか否かを推定することができる。例えばユーザが明示的にいくつかのフロー条件を設定した場合、そのフロー条件に基づいて消費されるフローエントリ数を計算できるが、実際にそれより多くのフローエントリが消費された場合には、上記のようなフローエントリの並べ替えとフロー条件の変更が行われたと推定することができる。
【0092】
図13A及び
図13Bは、本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの処理の一例を示すフローチャートである。
【0093】
具体的には、
図13A及び
図13Bは、
図12に示したフローエントリの並べ替えの処理の流れを一般化したものである。
図13A及び
図13Bでは、フローエントリ数はN、アクション種別はX、Y、Zの3種であるものとする。設定前のフローテーブルのフローエントリ番号をi=1〜Nとする。ここで、設定前のフローテーブルのフローエントリ番号は、各フローエントリの優先順位(すなわち各フローエントリに設定されたフロー条件の優先順位)を示す値であり、後述する並べ替えが行われる前の各フローエントリのフロー検索CAM4210におけるアドレスの値に等しい。設定前のフローテーブルにおけるフローエントリiのフロー条件をC0(i)とする。設定前のフローテーブルのフローエントリiに対応するアクションをA0(i)とする。設定前のフローテーブルに本実施形態を適用後のフローテーブルのフローエントリ番号(すなわち並べ替えられた後のフロー検索CAMにおけるフローエントリのアドレス)をj=1〜Nとする。なお、上述の通りフロー条件が範囲指定を含む場合は一般に本実施形態適用後のフローエントリ数は増加するが、ここでは説明の単純化のためフローエントリ数の増加はないものとする。
【0094】
本実施形態適用後のフローテーブルのフローエントリjのフロー条件をC(j)とする。本実施形態適用後のフローテーブルのフローエントリjのアクションをA(j)とする。アクションXに対応するフローエントリのみで構成されるXフローエントリのフローエントリ数と、そのフローエントリ番号をxとする。アクションYに対応するフローエントリのみで構成されるYフローエントリのフローエントリ数と、そのフローエントリ番号をyとする。アクションZに対応するフローエントリのみで構成されるZフローエントリのフローエントリ数と、そのフローエントリ番号をzとする。アクションXとなるフローエントリxのフロー条件をCX(x)とする。CX(x)に関するx=0〜xの論理積をΠ(x=0〜x)とする。本実施形態適用のためのフローエントリxのフロー条件の中間状態をCIX(x)とする。本実施形態適用のためのフローエントリyのフロー条件の中間状態をCIY(y)とする。本実施形態適用のためのフローエントリzのフロー条件の中間状態をCIZ(z)とする。
【0095】
以下、設定前のフローテーブルに本発明を適用するフローチャートの一例として
図13A及び
図13Bの処理の流れを説明する。
【0096】
フロー統計機能用CPU423は、設定前のフローテーブルに対する本発明の適用処理を開始する(ステップ601)。最初に、フロー統計機能用CPU423は、i=1、j=1、x=0、y=0、z=0、CX(0)=1、CY(0)=1、CZ(0)=1とする初期化を行う(ステップ602)。次に、フロー統計機能用CPU423は、A0(i)=Xであるか判定する(ステップ603)。
【0097】
ステップ603の判定結果がYESの場合には、フロー統計機能用CPU423は、xに1を加算し、C0(i)にフローエントリiより優先順位が高いフローエントリのうちアクションY又はZに対応するフローエントリのフロー条件の否定条件の論理積を乗じた条件をCIX(x)とする。すなわち、CIX(x)<=C0(i)and(Π(y=0〜y)notCY(y))and(Π(z=0〜z)notCZ(z))によってCIX(x)が求められる。さらに、アクションY及びアクションZに関するCIY(y)及びCIZ(z)の演算のため、フロー統計機能用CPU423は、CX(x)をC0(i)とする(ステップ604)。
【0098】
ステップ603の判定結果がNOである場合には、フロー統計機能用CPU423は、A0(i)=Yであるか判定する(ステップ605)。ステップ605の判定結果がYESの場合には、フロー統計機能用CPU423は、yに1を加算し、C0(i)にフローエントリiより優先順位が高いフローエントリのうちアクションZ又はXに対応するフロ
ーエントリのフロー条件の否定条件の論理積を乗じた条件をCIY(y)とする。すなわち、CIY(y)<=C0(i)and(Π(z=0〜z)notCZ(z))and(Π(x=0〜x)notCX(x))によってCIY(y)が求められる。さらに、アクションZ及びアクションXに関するCIZ(z)及びCIX(x)の演算のため、フロー統計機能用CPU423は、CY(y)をC0(i)とする(ステップ606)。
【0099】
ステップ605の判定結果がNOである場合には、フロー統計機能用CPU423は、zに1を加算し、C0(i)にフローエントリiより優先順位が高いフローエントリのうちアクションX又はYに対応するフローエントリのフロー条件の否定条件の論理積を乗じた条件をCIZ(z)とする。すなわち、CIZ(z)<=C0(i)and(Π(x=0〜x)notCX(x))and(Π(y=0〜y)notCY(y))によってCIZ(z)が求められる。さらに、アクションX及びアクションYに関するCIX(x)及びCIY(y)の演算のため、フロー統計機能用CPU423は、CZ(z)をC0(i)とする(ステップ607)。
【0100】
以上の処理を終了すると、フロー統計機能用CPU423は、iに1を加算する(ステップ608)。次に、フロー統計機能用CPU423は、i=N+1であるか判定する(ステップ609)。ステップ609の判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ603の判定処理以降の処理を繰り返す。
【0101】
ステップ609の判定結果がYESの場合には、フロー統計機能用CPU423は、C(j)=CIX(j)とし、A(j)=Xとする(ステップ610)。次に、フロー統計機能用CPU423は、jに1を加算する(ステップ611)。次に、フロー統計機能用CPU423は、j=x+1であるか判定する(ステップ612)。ステップ612の判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ610以降の処理を繰り返す。
【0102】
ステップ612の判定結果がYESの場合には、フロー統計機能用CPU423は、C(j)=CIY(j−x)とし、A(j)=Yとする(ステップ613)。次に、フロー統計機能用CPU423は、jに1を加算する(ステップ614)。次に、フロー統計機能用CPU423は、j=x+y+1であるか判定する(ステップ615)。ステップ615の判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ613以降の処理を繰り返す。
【0103】
ステップ615の判定結果がYESの場合には、フロー統計機能用CPU423は、C(j)=CIZ(j−x−y)とし、A(j)=Zとする(ステップ616)。次に、フ
ロー統計機能用CPU423は、jに1を加算する(ステップ617)。次に、フロー統
計機能用CPU423は、j=x+y+z1であるか判定する(ステップ618)。ステップ618の判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ616以降の処理を繰り返す。
【0104】
ステップ618の判定結果がYESの場合には、本実施形態のフローテーブル作成のフローチャートの処理を完了する(ステップ619)。
【0105】
図13A及び
図13Bには、説明を簡単にするために、各フローエントリを3つのアドレス範囲のいずれかに登録する処理の例を示した。しかし、
図9に示すように、4つのアクションが定義され、それらに対応する4つのアドレス範囲が設定される場合、
図13Aの処理に、ステップ603又は605等と同様の分岐と、それに伴うステップ604、606又は607と同様の処理との組が追加され、それに合わせて
図13Bの処理も変更される。定義されるアクション数がさらに増えれば同様の変更がさらに必要になるが、いずれの場合も、実行される処理の概要は
図13A及び
図13Bから理解される通りである。後述する
図14A、
図14B及び
図15についても同様である。
【0106】
以上の
図13A及び
図13Bの処理によれば、同一のアクションに関連付けられたフローエントリが同一のアドレス範囲内に登録されるように、フロー検索CAM4210内のフローテーブルのフローエントリが並べ替えられる。これによって、フローエントリ毎ではなくフローエントリのアドレス範囲ごとにアクションエントリを保持することが可能になり、保持すべき情報量が激減するため、アクションエントリと同等の情報をASIC内のアクションレジスタに保持することが可能になる。これによって、搭載されるRAMを増やすことなく、複数の機能に対応して実行されるべきアクションを判定する処理を並行して実行することで、処理が高速化される。
【0107】
さらに、この並べ替えによって、優先順位の低いフローエントリ(ここではフローエントリ1と記載)が優先順位の高いフローエントリ(ここではフローエントリ2と記載)より上位のアドレスに登録される場合には、フローエントリ1に設定されたフロー条件(ここではフロー条件1と記載)と、フローエントリ2に設定されたフロー条件(ここではフロー条件2と記載)との重複部分をフロー条件1から除外することによって生成された新たなフロー条件が、フローエントリ1に設定される。
【0108】
例えば、上記のフロー条件1及び2がそれぞれ
図12の例におけるフロー条件C及びBである場合、上記の新たなフロー条件は、「フロー条件C and not B」となる。このようにフロー条件を変更することによって、優先順位の上下関係とフロー検索CAM4210内のアドレスの順位の上下関係とが逆転した二つのフローエントリに設定されたフロー条件が互いに背反となるため、実行されるアクションがフローエントリの並べ替えの影響を受けなくなる。
【0109】
上記のように、
図13A及び
図13Bの処理によって並べ替えられた後のフローエントリのアドレスは、各フローエントリの優先順位を表していない。このため、パケット中継装置4は、各フローエントリの優先順位を示す情報を、並べ替えが実行された後も保持し続ける。具体的には、例えば、パケット中継装置4は、並べ替えが実行される前の(すなわちアドレスの上下関係がフローエントリの優先順位の上下関係を表している)フローテーブルの各フローエントリの内容とそのアドレスとを示す情報を、
図1に示したいずれかのRAM又は図示しないRAMに保持してもよい。この情報は、フローテーブルに新たなフローエントリを追加するときに参照される場合がある(
図14A等参照)。
【0110】
なお、並べ替えが行われる前のフローテーブル内のフローエントリの全ての組み合わせにおいて、フロー条件が互いに背反である場合もある。例えば、NetFlowをはじめとするフロー統計機能に使用されるフローテーブルの場合、
図2に示すように、各統計採取用エントリには、モニタリング対象となるフローを識別する条件が設定される。
【0111】
図2を参照して説明したように、入力されたパケットがいずれの統計採取用エントリのフロー条件も満たさず、IPv4登録用エントリ421002等のフロー条件を満たす場合、当該パケットのヘッダ情報の少なくとも一部が、新たな統計採取用エントリのフロー条件として設定される。その結果、フローテーブル42100内の統計採取用エントリの全ての組み合わせのフロー条件が互いに背反となる。
【0112】
すなわち、入力された一つのパケットがいずれの統計採取用エントリのフロー条件も満たさない場合、及び、いずれか一つの統計採取用エントリのフロー条件を満たす場合はあるが、複数の統計採取用エントリのフロー条件を満たす場合はない。したがって、例えばフローテーブル42100内の複数の統計採取用エントリ421000〜421001等のみを並べ替える場合には、各統計採取用エントリに設定されたフロー条件を変更する必要がない。
【0113】
これに対して、一般に、QoS又はフィルタリング等の対象となるフローを検索するためのフローテーブルにおいては、フロー条件が互いに背反とならないフローエントリの組み合わせが存在し得る。そのようなフローテーブルにおいては、上記の通りにフロー条件が変更される。
【0114】
図13A及び
図13Bは、フロー統計機能用CPU423によって実行される。これは、本発明の実施形態の一例として、アドレス範囲に基づくアクションの判定をフロー統計機能に適用する例を示しているためである。実際には、本発明は他の機能、例えばQoS機能又はフィルタリング機能等にも適用することができる。その場合、例えば図示しないQoS機能用CPU及びフィルタリング機能用CPUが上記と同様の処理を実行してもよいし、一つのCPUが複数の機能のために上記と同様の処理を実行してもよい。後述する
図14A、
図14B及び
図15に示す処理についても同様である。
【0115】
図14A及び
図14Bは、本発明の実施形態のフローテーブルにおけるフローエントリの追加の処理の一例を示すフローチャートである。
【0116】
図14A及び
図14Bでは、アクション0に対応するフローエントリ数(すなわち、アクション0に対応するアドレス範囲内のフローエントリ数)をiとする。アクション1に対応するフローエントリ数をjとする。アクション2に対応するフローエントリ数をkとする。アクション0に対応するフローエントリの追加アドレスをIとする。アクション1に対応するフローエントリの追加アドレスをJとする。アクション2に対応するフローエントリの追加アドレスをKとする。アクション0に対応するアドレス範囲の下限アドレス
L0=0とする。アクション0に対応するアドレス範囲の上限アドレスU0=iとする。アクション1に対応するアドレス範囲の下限アドレスL1=i+1とする。アクション1に対応するアドレス範囲の上限アドレスU1=i+j+1とする。アクション2に対応するアドレス範囲の下限アドレスL2=i+j+2とする。アクション2に対応するアドレス範囲の上限アドレスU2=i+j+k+2とする。初期値としてi=0、j=0、k=0、I=0、J=1、K=2とする。
【0117】
以下、フローエントリ追加の処理の流れを
図14A及び
図14Bに沿って説明する。最初に、フローエントリ追加の指示が発行される(ステップ701)。この指示は、少なくとも、追加されるフローエントリに設定されるフロー条件と、そのフロー条件を満たすパケットが入力されたときに実行されるべきアクション(すなわち、追加されるフローエントリに対応するアクション)と、を指定する情報を含み、さらに、追加されるフローエン
トリの優先順位を示す情報を含んでもよい。
【0118】
次に、フロー統計機能用CPU423は、追加フローエントリがアクション0に対応するか判定する(ステップ702)。
【0119】
ステップ702の判定結果がYESの場合には、フロー統計機能用CPU423は、n=0とする(ステップ703)。次に、フロー統計機能用CPU423は、アドレスU2−nのフローエントリをアドレスU2−(n−1)にコピーする(ステップ704)。次に、フロー統計機能用CPU423は、nに1を加算する(ステップ705)。次に、フロー統計機能用CPU423は、n=k+1であるか判定する(ステップ706)。ステップ706の判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ704以降の処理を繰り返す。
【0120】
ステップ706の判定結果がYESの場合には、フロー統計機能用CPU423は、m=0とする(ステップ707)。次に、フロー統計機能用CPU423は、アドレスU1−mのフローエントリをアドレスU1−(m−1)にコピーする(ステップ708)。次に、フロー統計機能用CPU423は、mに1を加算する(ステップ709)。次に、フロー統計機能用CPU423は、m=j+1であるか判定する(ステップ710)。ステップ710判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ708以降の処理を繰り返す。
【0121】
ステップ710の判定結果がYESの場合には、フロー統計機能用CPU423は、iに1を加算し(ステップ711)、アドレスIにフローエントリを追加し(ステップ712)、Iに1を加算し(ステップ713)、Jに1を加算し(ステップ714)、Kに1を加算する(ステップ715)。
【0122】
ステップ702の判定結果がNOである場合には、フロー統計機能用CPU423は、追加フローエントリがアクション1に対応するか判定する(ステップ716)。ステップ716の判定結果がYESの場合には、フロー統計機能用CPU423は、n=0とする(ステップ717)。次に、フロー統計機能用CPU423は、アドレスU2−nのフローエントリをアドレスU2−(n−1)にコピーする(ステップ718)。次に、フロー統計機能用CPU423は、nに1を加算する(ステップ719)。次に、フロー統計機能用CPU423は、n=k+1であるか判定する(ステップ720)。ステップ720の判定結果がNOの場合には、フロー統計機能用CPU423は、ステップ718以降の処理を繰り返す。
【0123】
ステップ720の判定結果がYESの場合には、フロー統計機能用CPU423は、jに1を加算し(ステップ721)、アドレスJにフローエントリを追加し(ステップ722)、Jに1を加算し(ステップ723)、Kに1を加算する(ステップ724)。
【0124】
ステップ716の判定結果がNOである場合には、フロー統計機能用CPU423は、kに1を加算し(ステップ725)、アドレスKにフローエントリを追加し(ステップ726)、Kに1を加算する(ステップ727)。
【0125】
以上で本実施形態におけるフローエントリ追加の処理を完了する(ステップ728)。
【0126】
なお、フロー統計機能用CPU423は、上記の
図14A及び
図14Bの処理によって複数のアドレス範囲の上限値及び下限値のうち少なくとも一つが変更された場合には、その変更をアドレス範囲テーブル421201にも反映させる。この処理は、例えばステップ728で実行されてもよい。
【0127】
以上の
図14A及び
図14Bによれば、フローエントリの追加の指示が発行された場合、追加されるフローエントリに対応するアクションに対応するフロー検索CAM4210のアドレス範囲より下位のアドレス範囲のフローエントリがさらに少なくとも一つ下位のアドレスに移動し、その移動によって生じた空きアドレスに、指示されたフローエントリが追加される。さらに、この移動によるアドレス範囲の変更がアドレス範囲テーブル421201にも反映される。これによって、フローエントリが追加された場合にも、フローエントリのアドレス範囲に基づいてアクションを判定することが可能になる。
【0128】
ここで、フローエントリの追加の指示が、追加されるフローエントリの優先順位を示す情報を含んでいる場合、フロー統計機能用CPU423は、その情報に従って、パケット中継装置4が保持している各フローエントリの優先順位を示す情報を更新してもよい。例えば、各フローエントリの優先順位を示す情報に、追加されるフローエントリの優先順位と同一の優先順位を有するフローエントリが既に登録されている場合、その既に登録されているフローエントリ及びそれより下位の優先順位を有するフローエントリの優先順位をさらに一つ下位に繰り下げ、追加されるフローエントリの優先順位を示す情報を追加してもよい。
【0129】
さらに、追加されるフローエントリに設定されたフロー条件と、既に登録されているいずれかのフローエントリに設定されたフロー条件とが互いに背反でない場合には、それらの条件のいずれかを変更する必要がある場合がある。この変更は、更新された各フローエントリの優先順位を示す情報に基づいて、
図13A及び
図13Bを参照して説明した方法によって実行されるため、ここでは説明を省略する。
【0130】
なお、各アドレス範囲は、予め空きアドレスを含むように設定されていてもよい。その場合には、フローエントリを追加しようとするアドレス範囲に空きアドレスが残っている限り、追加を指示されたフローエントリを空きアドレスに追加すればよいため、
図14A及び
図14Bに示す処理は実行しなくてよい。
【0131】
図15は、本発明の実施形態のフローテーブルにおけるフローエントリの削除の処理の一例を示すフローチャートである。
【0132】
最初に、フローエントリdを削除する指示が発行される(ステップ800)。次に、フロー統計機能用CPU423は、フローエントリdを削除する(ステップ801)。次に、フロー統計機能用CPU423は、m=dとする(ステップ802)。次に、フロー統計機能用CPU423は、アドレスm+1に登録されているフローエントリをアドレスmにコピーする(ステップ803)。次に、フロー統計機能用CPU423は、m<U2であるか判定する(ステップ804)。ステップ804の判定結果がYESの場合には、フロー統計機能用CPU423は、mに1を加算する(ステップ805)。次に、フロー統計機能用CPU423は、ステップ803以降の処理を繰り返す。
【0133】
ステップ804の判定結果がNOの場合には、フロー統計機能用CPU423は、d≦U0であるか判定する(ステップ806)。ステップ806の判定結果がYESの場合には、フロー統計機能用CPU423は、U0から1を減算し、L1から1を減算し、U1から1を減算し、L2から1を減算し、U2から1を減算する(ステップ807)。
【0134】
ステップ806の判定結果がNOの場合には、フロー統計機能用CPU423は、d≦U1であるか判定する(ステップ808)。ステップ808の判定結果がYESの場合には、フロー統計機能用CPU423は、U1から1を減算し、L2から1を減算し、U2から1を減算する(ステップ809)。ステップ808の判定結果がNOの場合には、フロー統計機能用CPU423は、U2から1を減算する(ステップ810)。以上で本実施形態におけるフローエントリ削除の処理を完了する(ステップ811)。
【0135】
なお、フロー統計機能用CPU423は、上記の
図15の処理によって複数のアドレス範囲の上限値及び下限値のうち少なくとも一つが変更された場合には、その変更をアドレス範囲テーブル421201にも反映させる。この処理は、例えばステップ811で実行されてもよい。
【0136】
以上の
図15によれば、フローエントリの削除の指示が発行された場合、削除されるフローエントリに対応するアクションに対応するフロー検索CAM4210のアドレス範囲より下位のアドレス範囲のフローエントリが少なくとも一つ上位のアドレスに移動する。さらに、この移動によるアドレス範囲の変更がアドレス範囲テーブル421201にも反映される。これによって、フローエントリが削除された場合にも、フローエントリのアドレス範囲に基づいてアクションを判定することが可能になる。
【0137】
なお、各アドレス範囲が空きアドレスを含むことが許容される場合には、削除されたフローエントリのアドレスを空きアドレスとして扱えばよいため、
図15に示す処理は実行しなくてよい。
【0138】
図14A、
図14B及び
図15に示したフローエントリの追加又は削除に伴うフローエントリの移動が行われる場合、追加又は削除されるフローエントリがフロー検索CAM4210の上位にあるほど、移動するフローエントリの数が多くなる。フロー統計機能用CPU423の負荷を軽減するためには、移動するフローエントリの数は少ない方が望ましい。このため、フロー統計機能用CPU423は、アクションごとに、そのアクションに対応するフローエントリの追加又は削除が行われる頻度を計算し、その頻度が低いアクションを指定するアクションレジスタに対応するアドレス範囲が、その頻度が高いアクションを指定するアクションレジスタに対応するアドレス範囲より上位になるように、
図13A及び
図13Bに示した各フローエントリの移動を実行してもよい。これによって、移動するフローエントリ数を抑制し、フロー統計機能用CPU423の負荷を軽減することが期待できる。
【0139】
以上の本発明の実施形態によれば、フロー検索を必要とする機能が増えたために、1回の検索コマンドで実行される検索数が増えた場合にも、RAMの読み出し性能がネックとならず、フロー検索性能を低下させずに維持できるパケット中継装置を、RAMの増設なしに実現することができる。
【0140】
次に、パケット中継装置4において、アクション種別毎またはフロー毎の最大エントリ数を指定するユーザインタフェースについて説明する。本ユーザインタフェースにより、アクション種別毎またはフロー毎の統計採取上の重要度に応じて、使用可能なエントリ数資源を指定することができる。また、
図14A、
図14Bにおけるアクション0のフローエントリ数i、アクション1のフローエントリ数j、アクション2のフローエントリ数kの各々に対する上限値を設定することができる。ユーザインターフェースは、管理端末46が有する入力部により提供され、パケット中継装置4は、アクション種別毎またはフロー毎の最大エントリ数を指定に従って、アクション種別毎またはフロー毎の最大エントリ数を設定する。
【0141】
アクション種別毎またはフロー毎の最大エントリ数としては例えば、IPv4フローを指定するIPv4フロー登録用最大エントリ数(
図5の421002の最大エントリ数)、フローテーブルに登録するIPv6フローを指定するIPv6フロー登録用最大エントリ数(
図5の421003の最大エントリ数)、フローテーブルに登録する非IPフローを指定する非IPフロー登録用最大エントリ数(
図5の421004の最大エントリ数)を指定する。登録処理を行うCPUが複数あって登録処理を分散する場合、CPU毎に登録処理を分担するフローを上記のフロー登録用エントリにより指定することができる。
【0142】
また、統計採取する確率を示すレート種別をアクション種別としてアクション種別毎またはフロー毎の最大エントリ数を指定する場合は、統計採取用エントリ42110の確率制御フラグ4211001が統計採取の確率制御を実施することを示す値であり、かつ確率制御カウンタ識別子4211002が同一の値である統計採取用エントリの最大エントリ数を指定する。
【0143】
上記のアクション種別毎またはフロー毎の最大エントリ数を指定するユーザインタフェースは、例えば以下のような指定方法となる。
【0144】
[アクション種別毎またはフロー毎最大エントリ数指定コマンド] [最大エントリ数] -[エントリタイプ指定] -[対象フロー指定] -
エントリタイプとしては例えば、登録用エントリ(reg)、統計採取用エントリ(cnt)がある。登録用エントリの場合は、登録処理を実行するCPUを識別できる識別子により指定することができる。あるいは登録処理を実行するCPUを搭載する装置を収容する回線または登録処理を実行するCPUを搭載する拡張ボードを搭載するスロット番号で指定することもできる。対象フローは、パケットヘッダ情報(例えばプロトコル種別等)により指定してもよい。
【0145】
まず、ユーザインタフェースにより入力される、プロトコル種別毎の最大登録エントリ数を指定するコマンドの例を示す。
【0146】
designate_entry_num 10 -type reg -prt IPv4 ・・・1801
designate_entry_num 1 -type reg -prt IPv6 ・・・1802
designate_entry_num 3 -type reg -prt notIP ・・・1803
1801に示すコマンドは、IPv4フロー(-prt IPv4)の登録用エントリ(-type reg)の最大エントリ数として、10エントリを指定するコマンド (designate_entry_num)である。1802に示すコマンドはIPv6フロー(-prt IPv6)の登録用エントリ(-type reg)の最大エントリ数として、1エントリを指定するコマンド(designate_entry_num)である。1803に示すコマンドは、非IPフロー(-prt notIP)の登録用エントリ(-type reg)の最大エントリ数として、3エントリを指定するコマンド(designate_entry_num)である。
【0147】
次に、ユーザインタフェースにより入力される、登録処理を実行するCPU毎の最大登録エントリ数を指定するコマンドの例を示す。
【0148】
designate_entry_num 10 -type reg -cpu 0 ・・・1901
designate_entry_num 1 -type reg -cpu 1 ・・・1902
designate_entry_num 3 -type reg -cpu 2 ・・・1903
1901に示すコマンドは、CPU0(-cpu 0)の登録用エントリ(-type reg)の最大エントリ数として、10エントリを指定するコマンド(designate_entry_num)である。1902に示すコマンドは、CPU1(-cpu 1)の登録用エントリ(-type reg)の最大エントリ数として、1エントリを指定するコマンド(designate_entry_num)である。1903に示すコマンドは、CPU2(-cpu 2)の登録用エントリ(-type reg)の最大エントリ数として、3エントリを指定するコマンド(designate_entry_num)である。
【0149】
最後に、ユーザインタフェースにより入力される、レート種別毎の最大統計採取エントリ数を指定するコマンドの例を示す。
【0150】
designate_entry_num 2000 -type cnt -prt IPv4 -rate 10% ・・・2001
designate_entry_num 4000 -type cnt -prt IPv4 -rate 5% ・・・2002
designate_entry_num 1000 -type cnt -prt IPv6 -rate 50% ・・・2003
2001に示すコマンドは、レート10%(-rate 10%)のIPv4フロー(-prt IPv4)の統計採取用エントリ(-type cnt)の最大エントリ数として、2000エントリを指定するコマンド(designate_entry_num) を示す。2002に示すコマンドは、レート5%(-rate 5%)のIPv4フロー(-prt IPv4)の統計採取用エントリ(-type cnt)の最大エントリ数として、4000エントリを指定するコマンド(designate_entry_num) を示す。2003に示すコマンドは、レート50%(-rate 50%)のIP6フロー(-prt IPv6)の統計採取用エントリ(-type cnt)の最大エントリ数として、1000エントリを指定するコマンド(designate_entry_num) を示す。
【0151】
アクション種別毎またはフロー毎の最大エントリ数が設定された場合、
図14A,Bは以下のように変更される。フロー統計機能用CPU423は、追加フローエントリがアクション0である場合(ステップ702のYES)、アクションエントリ0のフローエントリ数iと設定されるアクション0の最大フローエントリ数imaxを大小比較する。比較結果がi≦imaxである場合、フロー統計機能用CPU423は、フローエントリの追加処理(ステップ703〜715)を実施し、その他の場合、フローエントリの追加処理をせずに終了する。この場合、フロー統計機能用CPU423は、最大フローエントリ数の指定によりフローエントリの追加がなされなかったことを示すアラートを管理端末の表示画面に出力してもよい。同様に、追加フローエントリがアクション1である場合(ステップ716のYES)、フロー統計機能用CPU423は、アクションエントリ1のフローエントリ数jと設定されたアクション1の最大フローエントリ数jmaxを大小比較する。比較結果がj≦jmaxである場合、フロー統計機能用CPU423は、フローエントリの追加処理を実施し(ステップ717〜724)、その他の場合にはフローエントリの追加処理をせずに終了する。さらに、追加フローエントリーが、アクション0でもアクション1でもない場合、フローエントリ数kと設定される最大フローエントリ数kmaxを大小比較して、k≦kmaxである場合にはフローエントリの追加処理を実施し(ステップ725〜727)、その他の場合にはフローエントリの追加処理をせずに終了する。
【0152】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。また、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えてもよく、また、ある実施形態の構成に他の実施形態の構成を加えてもよい。また、各実施形態の構成の一部について、他の構成の追加・削除・置換してもよい。
【0153】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によってハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによってソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納してもよい。
【0154】
また、図面には、実施形態を説明するために必要と考えられる制御線及び情報線を示しており、必ずしも、本発明が適用された実際の製品に含まれる全ての制御線及び情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されてて
もよい。