(57)【特許請求の範囲】
【請求項１】
NAT(Network  Address  Translation)を用いて、ISPが自身のネットワーク内部のホストに、プライベートアドレスのような内部ネットワーク用の独自アドレスを付与し、ネットワーク内部のホストが、ネットワーク外部の（つまりインターネット上の）ホストと通信するときに、ネットワークの出口に設置されたNATにおいて、ネットワーク内部の独自アドレスを、そのときに空いているグローバルIPv4アドレスへ変換することによって、数少ないグローバルIPv4アドレスを有効活用してインターネットアクセスを提供する通信ネットワークにおいて、
前記ネットワーク内部ホストが同時に複数のネットワーク外部ホストと通信する際に、（通常のNATでは、各通信に異なる{グローバルIPv4アドレス，ポート番号}を付与していたのに対して）通信相手の外部ネットワークホストのグローバルIPv4アドレスを識別子として利用することで、該ネットワーク内部ホストに同一の{グローバルIPv4アドレス，ポート番号}を付与する方式を利用した場合に、必要となる{グローバルIPv4アドレス，ポート番号}の数を、パケットトレースデータを用いて推定する装置におけるアドレス・ポート数推定方法であって、
現在は該ISPはネットワーク内部ホストにグローバルIPv4アドレスを用いて通信サービスを提供しているとき、
パケットヘッダ解析手段が、前記ネットワークからインターネットへ向かうパケットをキャプチャし、フローキー  {srcIP，dstIP，srcPort，dstPort，Protocol}の５つ組みを同じくするパケット群をフローとして抽出し、フロー記憶手段に格納するパケットヘッダ解析ステップと、
フロー集計手段が、各{srcIP#i，dstIP#j}ペアにおいて、時点tにおいて通信中のフロー数をN(t，i，j)と定義し、前記フロー記憶手段に格納されているパケットトレースデータからN(t，i，j)をカウントするフロー集計ステップと、
アドレス・ポート数推定手段が、仮に、当該ISPがNATを用いてインターネットアクセスを提供する際に、NATにおいて必要となる{グローバルIPv4アドレス，ポート番号}の数として、Nmax(t，i)=maxj  N(t，i，j)を時点tに内部ホストiに割り当てが必要な{グローバルIPv4アドレス，ポート番号}を算出するアドレス・ポート数推定ステップと、
を行うことを特徴とするNATにおけるアドレス・ポート数推定方法。
【請求項２】
フロー管理手段が、前記フロー記憶手段に、前記パケットヘッダ解析ステップで抽出されたフローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}と最後にパケットが到着した時刻Tlast_iの２つを記憶し、
前記パケットトレースデータの時刻の先頭パケットを前記フロー記憶手段から読み出し、該パケットのフローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}が、該フロー記憶手段に既に登録されているかチェックし、新規であれば、該フロー記憶手段に該パケットのフローキーと、該パケットの到着時刻をTlast_iに登録し、既に登録されている場合は、Tlast_iを該パケットの到着時刻に更新し、該パケットがTCPかつFINまたはRSTにフラグが立っていたら、該フロー記憶手段から当該エントリを削除し、
さらに、前記フロー記憶手段に登録されているフローを一定周期τ毎にチェックし、現在の時刻と前記Tlast_iを比較し、その差が予め定めたタイマーの値よりも大きければ、当該エントリを該フロー記憶手段から削除し、
前記フロー集計ステップにおいて、
時点tにおいてペア{srcIP#i，dstIP#j}に関して前記フロー記憶手段にエントリされているフロー数をカウントし、それをN(t，i，j)とする
請求項１記載のNATにおけるアドレス・ポート数推定方法。
【請求項３】
前記フロー集計ステップにおいて、
予め定めた一定周期τ毎にt番目の時点（1≦t≦M、Mは測定回数、ただしt=1は、パケットトレースを開始した時刻からinactive  timer時間経過後の時刻に設定）におけるフロー数Nmax(t，i)を求めておき、
前記アドレス・ポート数推定ステップにおいて、
N*(i)=F_t，x(Nmax(t，i))を、前記内部ホストiに必要な{グローバルIPv4アドレス，ポート番号}（但し、関数F_t、x()は、tに関して、上位xパーセント値を返す関数とし、xは予め定めるパラメータ（例えばx=1パーセント））とし、
前記N*(i)を降順にソートし、予め定めたyに関して上位yパーセント番目（例えばy=1パーセント）のi_yに対するN*(i_y)を求め、それを、各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する
請求項１記載のNATにおけるアドレス・ポート数推定方法。
【請求項４】
前記アドレス・ポート数推定ステップにおいて、
時点tにおける通信中のフロー総数Ntotal(t)=Σi  Nmax(t，i)とし、Ntotal*=F_t、x(Ntotal(t))を計算し、その値を該パケットトレースを実施した測定点において多重されているホスト数Yと、NATを用いて収容したいホスト数Zを用いて、Z/Y×Ntotal*を計算し、その値を、NATを用いて収容したいホスト数Z全体に対して必要となる{グローバルIPv4アドレス，ポート番号}数として算出する
請求項１記載のNATにおけるアドレス・ポート数推定方法。
【請求項５】
前記フロー集計ステップにおいて、
各dstIP#jに対して、時点tでのフロー数Nd(t，j)をカウントし、
前記アドレス・ポート数推定ステップにおいて、
Ndmax(t)=max  j  Nd(t、j)を求め、Ndmax*=F_t，x(Ndmax(t))を計算し、その値を前記パケットヘッダ解析ステップで該パケットトレースを実施した測定点において多重されているホスト数Yに対して、NATを用いて収容する際に必要となる{グローバルIPv4アドレス，ポート番号}数として算出する
請求項１記載のNATにおけるアドレス・ポート数推定方法。
【請求項６】
通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の比較をする方法として、
前記アドレス・ポート数推定ステップにおいて、
前記フロー集計ステップで求められたフロー数Nmax(t，i)=Σj  N(t，i，j)を入力として、前記N*(i_y)を求め、該N*(i_y)をネットワーク外部ホストのアドレスを識別子として利用しない方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
一方で、Nmax(t、i)=maxj  N(t，i，j)を入力として前記N*(i_y)を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
評価手段が、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する評価ステップを行う
請求項３記載のNATにおけるアドレス・ポート数推定方法。
【請求項７】
通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の比較をする方法として、
前記アドレス・ポート数推定ステップにおいて、
前記Nmax(t，i)=Σj  N(t，i，j)を入力として前記Ntotal*を求め、該Ntotal*をネットワーク外部ホストのアドレスを識別子として利用しない方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
一方で、Nmax(t，i)=maxj  N(t，i，j)を入力として前記Ntotal*を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
評価手段が、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する評価ステップを行う
請求項４記載のNATにおけるアドレス・ポート数推定方法。
【請求項８】
NAT(Network  Address  Translation)を用いて、ISPが自身のネットワーク内部のホストに、プライベートアドレスのような内部ネットワーク用の独自アドレスを付与し、ネットワーク内部のホストが、ネットワーク外部の（つまりインターネット上の）ホストと通信するときに、ネットワークの出口に設置されたNATにおいて、ネットワーク内部の独自アドレスを、そのときに空いているグローバルIPv4アドレスへ変換することによって、数少ないグローバルIPv4アドレスを有効活用してインターネットアクセスを提供する通信ネットワークにおいて、
前記ネットワーク内部ホストが同時に複数のネットワーク外部ホストと通信する際に、（通常のNATでは、各通信に異なる{グローバルIPv4アドレス，ポート番号}を付与していたのに対して）通信相手の外部ネットワークホストのグローバルIPv4アドレスを識別子として利用することで、該ネットワーク内部ホストに同一の{グローバルIPv4アドレス，ポート番号}を付与する方式を利用した場合に、必要となる{グローバルIPv4アドレス，ポート番号}の数を、パケットトレースデータを用いて推定するアドレス・ポート数推定装置であって、
現在は該ISPはネットワーク内部ホストにグローバルIPv4アドレスを用いて通信サービスを提供しているとき、
前記ネットワークからインターネットへ向かうパケットをキャプチャし、フローキー  {srcIP，dstIP，srcPort，dstPort，Protocol}の５つ組みを同じくするパケット群をフローとして抽出し、フロー記憶手段に格納するパケットヘッダ解析手段と、
各{srcIP#i，dstIP#j}ペアにおいて、時点tにおいて通信中のフロー数をN(t，i，j)と定義し、前記フロー記憶手段に格納されているパケットトレースデータからN(t，i，j)をカウントするフロー集計手段と、
仮に、当該ISPがNATを用いてインターネットアクセスを提供する際に、NATにおいて必要となる{グローバルIPv4アドレス，ポート番号}の数として、Nmax(t，i)=maxj  N(t，i，j)を時点tに内部ホストiに割り当てが必要な{グローバルIPv4アドレス，ポート番号}を算出するアドレス・ポート数推定手段と、
を有することを特徴とするNATにおけるアドレス・ポート数推定装置。
【請求項９】
前記パケットヘッダ解析手段で抽出されたフローキーi＝{srcIP#i、dstIP#i、srcPort#i、dstPort#i、Protocol#i}と最後にパケットが到着した時刻Tlast_iの２つを前記フロー記憶手段に格納する手段と、
前記パケットトレースデータの時刻の先頭パケットを前記フロー記憶手段から読み出し、該パケットのフローキーi＝{srcIP#i、dstIP#i、srcPort#i、dstPort#i、Protocol#i}が、該フロー記憶手段に既に登録されているかチェックし、新規であれば、該フロー記憶手段に該パケットのフローキーと、該パケットの到着時刻をTlast_iに登録し、既に登録されている場合は、Tlast_iを該パケットの到着時刻に更新し、該パケットがTCPかつFINまたはRSTにフラグが立っていたら、該フロー記憶手段から当該エントリを削除する手段と、
前記フロー記憶手段に登録されているフローを一定周期τ毎にチェックし、現在の時刻と前記Tlast_iを比較し、その差が予め定めたタイマーの値よりも大きければ、当該エントリを該フロー記憶手段から削除する手段と、
を有するフロー管理手段を更に有し、
前記フロー集計手段は、
時点tにおいてペア{srcIP#i、dstIP#j}に関して前記フロー記憶手段にエントリされているフロー数をカウントし、それをN(t、i、j)とする手段を含む
請求項８記載のNATにおけるアドレス・ポート数推定装置。
【請求項１０】
前記フロー集計手段は、
予め定めた一定周期τ毎にt番目の時点（1≦t≦M、Mは測定回数、ただしt=1は、パケットトレースを開始した時刻からinactive  timer時間経過後の時刻に設定）におけるフロー数Nmax(t，i)を求める手段を含み、
前記アドレス・ポート数推定手段は、
N*(i)=F_t，x(Nmax(t，i))を、前記内部ホストiに必要な{グローバルIPv4アドレス，ポート番号}（但し、関数F_t、x()は、tに関して、上位xパーセント値を返す関数とし、xは予め定めるパラメータ（例えばx=1パーセント））とし、該N*(i)を降順にソートし、予め定めたyに関して上位yパーセント番目（例えばy=1パーセント）のi_yに対するN*(i_y)を求め、それを、各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する手段を含む
請求項８記載のNATにおけるアドレス・ポート数推定装置。
【請求項１１】
前記アドレス・ポート数推定手段は、
時点tにおける通信中のフロー総数Ntotal(t)=Σi  Nmax(t，i)とし、Ntotal*=F_t、x(Ntotal(t))を計算し、その値を該パケットトレースを実施した測定点において多重されているホスト数Yと、NATを用いて収容したいホスト数Zを用いて、Z/Y×Ntotal*を計算し、その値を、NATを用いて収容したいホスト数Z全体に対して必要となる{グローバルIPv4アドレス，ポート番号}数として算出する手段を含む
請求項８記載のNATにおけるアドレス・ポート数推定装置。
【請求項１２】
前記フロー集計手段は、
各dstIP#jに対して、時点tでのフロー数Nd(t，j)をカウントする手段を含み、
前記アドレス・ポート数推定手段は、
Ndmax(t)=max  j  Nd(t、j)を求め、Ndmax*=F_t，x(Ndmax(t))を計算し、その値を前記パケットヘッダ解析手段で該パケットトレースを実施した測定点において多重されているホスト数Yに対して、NATを用いて収容する際に必要となる{グローバルIPv4アドレス，ポート番号}数として算出する手段を含む
請求項８記載のNATにおけるアドレス・ポート数推定装置。
【請求項１３】
前記アドレス・ポート数推定手段は、
前記フロー集計手段で求められたフロー数Nmax(t，i)=Σj  N(t，i，j)を入力として、前記N*(i_y)を求め、該N*(i_y)をネットワーク外部ホストのアドレスを識別子として利用しない方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する第１の推定手段と、
一方で、Nmax(t，i)=maxj  N(t，i，j)を入力として前記N*(i_y)を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する第２の推定手段と、を含み、
前記第１の推定手段と前記第２の推定手段で算出された{グローバルIPv4アドレス，ポート番号}数を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する評価手段を更に有する
請求項１０記載のNATにおけるアドレス・ポート数推定装置。
【請求項１４】
前記アドレス・ポート数推定手段は、
前記Nmax(t，i)=Σj  N(t，i，j)を入力として前記Ntotal*を求め、該Ntotal*をネットワーク外部ホストのアドレスを識別子として利用しない方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出する第３の推定手段と、
一方で、Nmax(t，i)=maxj  N(t，i，j)を入力として前記Ntotal*を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出する第４の推定手段と、を含み、
前記第３の推定手段と前記第４の推定手段で算出された{グローバルIPv4アドレス，ポート番号}数を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する評価手段を更に有する
請求項１１記載のNATにおけるアドレス・ポート数推定装置。
【請求項１５】
請求項８乃至１４のいずれか１項に記載のアドレス・ポート数推定装置を構成する各手段としてコンピュータを機能させるためのアドレス・ポート数推定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、NAT(Network Address Translation)におけるアドレス・ポート数推定方法及び装置及びプログラムに係り、特に、IPv4アドレス枯渇問題への対策として、ISP(Internet Service Provider)がNATを用いて通信ネットワークを構成する際に、NATで必要となるIPv4アドレスを推定するためのＮＡＴにおけるアドレス・ポート数推定方法及び装置及びプログラムに関する。
【背景技術】
【０００２】
IP(Internet Protocol)ネットワークが広く利用されてくるに伴って、IPネットワークの利用形態やアプリケーションも多様化し、それに伴ってネットワークへ加わるトラヒックも多様化している。一方で、トラヒックは年々増加しており、トラヒックがネットワークへどのようなインパクトを与えるかを見積もることが非常に重要となってきている。例えば、動画共有トラヒックや、ビデオやTVなどのリッチコンテンツ配信によるトラヒックなどの増加が指摘されている（例えば、非特許文献１参照）。
【０００３】
一方、上記のように、１通信当りのトラヒック量が多いことに加えて、例えば、近年のアプリケーションでは、一つのホストが多数のフローを同時に発生することが指摘されている（非特許文献２参照）。また、SYN floodingやネットワークスキャンなどの異常トラヒックによって大量のフローが生成されることもある。このようなフロー数の多いトラヒックがネットワークに加わると、large scale NAT(LSN)へのインパクトが大きくなると予想される。ここで、LSNとは、IPv4アドレス枯渇問題への対策として考えられている方式である（例えば、非特許文献３参照）。図８-(a)に示すように、ISPは、LSNを内部ネットワークと外部ネットワークの境界に設置し、内部ネットワークでは独自のアドレスを用い、それを内部ホストに割り当て、インターネットへアクセスする際にはLSNにおいて内部ホストの独自アドレスをグローバルIPv4アドレスへ変換することで、インターネット上のホストとの通信を可能にしている。
【０００４】
NAT444、dual stack (DS)-lite、address+port (A+P)方式呼ばれる３つの方式が提案されている（例えば、非特許文献３参照）。
【０００５】
図８-(a)のNAT444では、宅内のエンドホスト１０は、宅内で用いるプライベートIPv4アドレスXを用いて、Customer Premise Equipment (CPE)-NAT２０へパケットを送信する。CPE-NAT２０で、アドレスXは、ISP内で用いる独自アドレスYに変換される。この独自アドレスは例えば「ISPシェアドアドレス」（例えば、非特許文献４参照）と呼ばれるものを利用する。これは、Internet assigned numbers authority(IANA)によって未割当のIPv4アドレスを、ISP間でシェア可能なアドレスとして規定するという案である。独自アドレスYを付与されたパケットはLSN３０まで転送され、そこで、グローバルIPv4アドレスに変換後、インターネットへと転送される。
【０００６】
図８-(b)のDS-liteでは、ISPはIPv6を内部で利用する。図８-(a)と同様に、エンドホスト１１からのパケットはプライベートアドレスXでDS-lite home gateway (HGW)２１まで転送され、そのパケットはLSN３１までIPv4 over an IPv6トンネルを用いてLSN３１まで転送される。そして、LSN３１で、そのパケットのアドレスを、グローバルIPv4アドレスに変換する。
【０００７】
図８-(c)のA+P方式では，LSNを用いる代わりに、ネットワークのエッジであるCPE-NAT２２において，プライベートアドレスXをグローバルIPv4アドレスZに変換する。その後、例えば、LSNまではIPv4 over an IPv6トンネルを用いて転送する。
【０００８】
以上の方式において、グローバルIPv4アドレスを割り当てる際には、通常のNetwork Address Port Translation (NAPT)のように、その時点で空いているIPv4アドレスとポート番号を、一つのフローに対して割り当てる。そうすると、一人のエンドホストが多数のフローを生成するような通信を行っていると、そのエンドホストに多くの{グローバルIPv4アドレス，ポート番号}を割り当てる必要があるため、このようなフロー数の多いトラヒックは、LSNへのインパクトが大きくなる。そのため、このようなインパクトを定量的に評価して今後のネットワークアーキテクチャを検討していく必要がある。
【０００９】
LSNへのトラヒックのインパクト評価として、非特許文献５〜７の報告がある。これらは、ホスト当りの生成フロー数の平均やその分布がどうなっているかを、実測データから算出している。例えば、非特許文献７では、一部のホストが多数のフローを生成していることを示している。
【００１０】
一方、必要なグローバルIPv4アドレス数を低減化させる方法として、通信相手であるインターネット上のホストのアドレスを識別子として利用する方法について提案されている。この方法では、例えば同時に２つの通信（フロー）がネットワーク内部ホストとネットワーク外部ホスト間で発生したとき、外部ホストのアドレスを通信の識別子として利用することで、内部ホストに対して割り当てる{グローバルIPv4アドレス，ポート番号}は同じものを使うことを可能にしている。この技術から、以下のようなアドレス割当方法が考えられる。
【００１１】
例えば、ネットワーク外部ホストX1（インターネット上のホスト）129.60.20.1とネットワーク内部ホストY1（プライベートアドレス・ポート番号＝192.168.0.1:1000）と通信し、ネットワーク外部ホストX2 129.60.20.2とネットワーク内部ホストY2（192.168.0.2:1000）と通信しているとする。通常のNAPTだと，２つの内部ホストに対して、それぞれ別の{グローバルIPv4アドレス，ポート番号}を割り当てる。例えば、192.168.0.1:1000⇔129.60.227.1:1000，192.168.0.2:1000⇔129.60.227.1:1001、というように、２つのプライベートアドレス・ポートに対して、129.60.227.1:1000，129.60.227.1:1001という２つのグローバルIPv4：ポートを割り当てる。これに対して、通信相手のアドレスを識別子として利用する方法では、以下のような対応表を保持することで、129.60.227.1:1000という同一のグローバルIPv4：ポート番号を２つの通信に付与する。
【００１２】
【表１】
0005547019.tif 000002
上記の対応表を管理すれば、もし外部ネットワークから宛先アドレス，ポート＝129.60.227.1:1000のパケットが到着したとき、そのパケットの送信元アドレスをチェックし、それが129.60.20.1であれば、129.60.227.1:1000⇒192.168.0.1:1000に変換すればよい。送信元アドレスが129.60.20.2であれば、129.60.227.1:1000⇒192.168.0.2:1000に変換すればよい。
【先行技術文献】
【非特許文献】
【００１３】
【非特許文献１】Cisco Visual Networking Index: Forecast and Methodology, 2008-2013,  http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537/  ns705/ns827/white_paper_c11-481360.pdf
【非特許文献２】S. Miyakawa, "From IPv4 only To v4/v6 Dual Stack," IETF72 IAB  Technical Plenary, Aug. 2008. http://www.kokatsu.jp/blog/ipv4/event/081006_07.pdf
【非特許文献３】T. Nishitani et al., "Common functions of large scale NAT (LSN)," draftnishitani-cgn-02, IETF, May 2009.
【非特許文献４】Y. Shirasaki et al., "NAT444 with ISP shared address,"   draft-shirasakinat444-isp-shared-addr-03 (work in progress), March 2009.
【非特許文献５】G. Maier et al., "On dominant characteristics of residential broadband   Internet traffic," ACM IMC 2009.
【非特許文献６】http://www.janog.gr.jp/meeting/janog24/program/d2p5.html
【非特許文献７】屏, "ISPへのNAT導入によるユーザ影響評価," 電子情報通信学会誌, Vol. 93, No. 6, pp. 473-478, 2010年6月.
【発明の概要】
【発明が解決しようとする課題】
【００１４】
以上のように、ネットワーク外部ホストのアドレス情報を利用することで、LSNで必要な{グローバルIPv4アドレス，ポート番号}の数を削減することが期待される。しかしながら、具体的にどのようなアドレス割当を実施すれば、どの程度、グローバルIPv4アドレス数を削減できるかを定量的に見積もる方法はこれまでに報告されていなかった。
【００１５】
本発明は、上記の点に鑑みなされたもので、ネットワーク外部ホストのアドレス情報を利用したLSNを考えた際に、パケットトレースデータを用いて、LSNで必要なグローバルIPv4アドレス数を推定することが可能なNATにおけるアドレス・ポート数推定方法及び装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記の課題を解決するために、本発明（請求項１）は、NATを用いて、ISPが自身のネットワーク内部のホストに、プライベートアドレスのような内部ネットワーク用の独自アドレスを付与し、ネットワーク内部のホストが、ネットワーク外部の（つまりインターネット上の）ホストと通信するときに、ネットワークの出口に設置されたNATにおいて、ネットワーク内部の独自アドレスを、そのときに空いているグローバルIPv4アドレスへ変換することによって、数少ないグローバルIPv4アドレスを有効活用してインターネットアクセスを提供する通信ネットワークにおいて、
前記ネットワーク内部ホストが同時に複数のネットワーク外部ホストと通信する際に、（通常のNATでは、各通信に異なる{グローバルIPv4アドレス，ポート番号}を付与していたのに対して）通信相手の外部ネットワークホストのグローバルIPv4アドレスを識別子として利用することで、該ネットワーク内部ホストに同一の{グローバルIPv4アドレス，ポート番号}を付与する方式を利用した場合に、必要となる{グローバルIPv4アドレス，ポート番号}の数を、パケットトレースデータを用いて推定する装置におけるアドレス・ポート数推定方法であって、
現在は該ISPはネットワーク内部ホストにグローバルIPv4アドレスを用いて通信サービスを提供しているとき、
パケットヘッダ解析手段が、前記ネットワークからインターネットへ向かうパケットをキャプチャし、フローキー  {srcIP，dstIP，srcPort，dstPort，Protocol}の５つ組みを同じくするパケット群をフローとして抽出し、フロー記憶手段に格納するパケットヘッダ解析ステップと、
フロー集計手段が、各{srcIP#i，dstIP#j}ペアにおいて、時点tにおいて通信中のフロー数をN(t，i，j)と定義し、前記フロー記憶手段に格納されているパケットトレースデータからN(t，i，j)をカウントするフロー集計ステップと、
アドレス・ポート数推定手段が、仮に、当該ISPがNATを用いてインターネットアクセスを提供する際に、NATにおいて必要となる{グローバルIPv4アドレス，ポート番号}の数として、Nmax(t，i)=maxj  N(t，i，j)を時点tに内部ホストiに割り当てが必要な{グローバルIPv4アドレス，ポート番号}を算出するアドレス・ポート数推定ステップと、を行う。
【００１７】
また、本発明（請求項２）は、フロー管理手段が、前記フロー記憶手段に、前記パケットヘッダ解析ステップで抽出されたフローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}と最後にパケットが到着した時刻Tlast_iの２つを記憶し、
前記パケットトレースデータの時刻の先頭パケットを前記フロー記憶手段から読み出し、該パケットのフローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}が、該フロー記憶手段に既に登録されているかチェックし、新規であれば、該フロー記憶手段に該パケットのフローキーと、該パケットの到着時刻をTlast_iに登録し、既に登録されている場合は、Tlast_iを該パケットの到着時刻に更新し、該パケットがTCPかつFINまたはRSTにフラグが立っていたら、該フロー記憶手段から当該エントリを削除し、
さらに、前記フロー記憶手段に登録されているフローを一定周期τ毎にチェックし、現在の時刻と前記Tlast_iを比較し、その差が予め定めたタイマーの値よりも大きければ、当該エントリを該フロー記憶手段から削除し、
前記フロー集計ステップにおいて、
時点tにおいてペア{srcIP#i，dstIP#j}に関して前記フロー記憶手段にエントリされているフロー数をカウントし、それをN(t，i，j)とする。
【００１８】
また、本発明（請求項３）は、前記フロー集計ステップにおいて、
予め定めた一定周期τ毎にt番目の時点（1<=t<=M、  Mは測定回数、ただしt=1は、パケットトレースを開始した時刻からinactive  timer時間経過後の時刻に設定）におけるフロー数Nmax(t，i)を求めておき、
前記アドレス・ポート数推定ステップにおいて、
N*(i)=F_t，x(Nmax(t，i))を、前記内部ホストiに必要な{グローバルIPv4アドレス，ポート番号}（但し、関数F_t、x()は、tに関して、上位xパーセント値を返す関数とし、xは予め定めるパラメータ（例えばx=1パーセント））とし、
前記N*(i)を降順にソートし、予め定めたyに関して上位yパーセント番目（例えばy=1パーセント）のi_yに対するN*(i_y)を求め、それを、各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する。
【００１９】
また、本発明（請求項４）は、前記アドレス・ポート数推定ステップにおいて、
時点tにおける通信中のフロー総数Ntotal(t)=Σi Nmax(t，i)とし、Ntotal*=F_t、x(Ntotal(t))を計算し、その値を該パケットトレースを実施した測定点において多重されているホスト数Yと、NATを用いて収容したいホスト数Zを用いて、Z/Y×Ntotal*を計算し、その値を、NATを用いて収容したいホスト数Z全体に対して必要となる{グローバルIPv4アドレス，ポート番号}数として算出する。
【００２０】
また、本発明（請求項５）は、前記フロー集計ステップにおいて、
各dstIP#jに対して、時点tでのフロー数Nd(t、j)をカウントし、
前記アドレス・ポート数推定ステップにおいて、
Ndmax(t)=max  j  Nd(t，j)を求め、Ndmax*=F_t，x(Ndmax(t))を計算し、その値を前記パケットヘッダ解析ステップで該パケットトレースを実施した測定点において多重されているホスト数Yに対して、NATを用いて収容する際に必要となる{グローバルIPv4アドレス，ポート番号}数として算出する。
【００２１】
また、本発明（請求項６）は、通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の比較をする方法として、
前記アドレス・ポート数推定ステップにおいて、
前記フロー集計ステップで求められたフロー数Nmax(t，i)=Σj  N(t，i，j)を入力として、前記N*(i_y)を求め、該N*(i_y)をネットワーク外部ホストのアドレスを識別子として利用しない方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
一方で、Nmax(t、i)=maxj  N(t、i、j)を入力として前記N*(i_y)を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
評価手段が、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する第１の評価ステップを行う。
【００２２】
また、本発明（請求項７）は、通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の比較をする方法として、
前記アドレス・ポート数推定ステップにおいて、
前記Nmax(t，i)=Σj  N(t，i，j)を入力として前記Ntotal*を求め、該Ntotal*をネットワーク外部ホストのアドレスを識別子として利用しない方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
一方で、Nmax(t，i)=maxj  N(t，i，j)を入力として前記Ntotal*を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出し、
評価手段が、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する第２の評価ステップを行う。
【発明の効果】
【００２３】
上記のように、本発明によれば、ISPがNATを用いて通信ネットワークを構成する際に、パケットトレースデータを用いてLSNで必要なグローバルIPv4アドレス数を推定することができるため、アドレス割り当ての際に、グローバルIPv4アドレス数をどの程度削減できるか等を見積もることが可能となる。
【図面の簡単な説明】
【００２４】
【図１】本発明の概念を説明するための図である。
【図２】NATによる動作実施に必要なアドレス・ポート数の例である。
【図３】本発明の第８の実施の形態におけるシステム構成図である。
【図４】本発明の第８の実施の形態におけるアドレス・ポート数推定装置の構成図である。
【図５】本発明の第１の実施例における動作のフローチャートである。
【図６】本発明の第４の実施例におけるアドレス・ポート数推定装置の構成図である。
【図７】外部ホストアドレスを用いた場合と用いなかった場合のホスト当りの必要なアドレス，ポート数の分布である。
【図８】本発明において対象となるLarge scale NATの説明図である。
【発明を実施するための形態】
【００２５】
以下図面と共に、本発明の実施の形態を説明する。
【００２６】
まず、本発明における基本的な考え方についてのべる。
【００２７】
図１は、本発明の概念を説明するための図である。
【００２８】
図１（ｂ）は、本発明で扱うネットワーク外部ホストのアドレスを利用したときのアドレス変換方法を説明するための図である。比較として、図１（ａ）に、本発明で扱うネットワーク外部ホストのアドレスを利用しない場合を示す。
【００２９】
ここでは、ISPが収容しているホストＡが、LSNを介して、ネットワーク外部ホストと通信をする場合を例にしている。具体的には、ホストＡが、外部ホストxとyの２つと同時に通信を行おうとしている。その際、図１（ａ）において、ホストＡはISP内の独自アドレス192.168.0.1を用いて、srcIP:srcPort=192.168.0.1:1024として、dstIP xに向けてパケットを送信している。LSNでは、そのパケットのsrcIPsrcPortをグローバルIPv4アドレスである129.0.0.1:1000に変換する。同様に、srcIP:srcPort=192.168.0.1:1025からdstIP yへのパケットについては、srcIPsrcPortをグローバルIPv4アドレスである129.0.0.1:1001に変換する。
【００３０】
これに対して、通信相手であるネットワーク外部ホストのアドレス（この例では、dstIP xとdstIP y）を利用した図１（ｂ）のケースについては、srcIP:srcPort=192.168.0.1:1024からdstIP xへパケットが送信されたら、LSNにおいてグローバルIPv4アドレスである129.0.0.1:1000に変換するとともに、通信相手であるアドレスdstIP xを記憶しておく。同様に、srcIP:srcPort=192.168.0.1:1025からdstIP yへパケットが送信されたら、LSNにおいてグローバルIPv4アドレスである129.0.0.1:1000に変換するとともに、通信相手であるアドレスdstIP yを記憶しておく。こうすることで、ネットワーク外部から、dstIP:dstPort=129.0.0.1:1000となるパケットを受信したら、そのパケットのsrcIPを読み出し、もしsrcIPがxであれば、dstIP:dstPort=192.168.0.1:1024に変換して、ネットワーク内部へ転送し、srcIPがyであればdstIP:dstPort=192.168.0.1:1025に変換して、ネットワーク内部へ転送する。この場合、２つの通信に対して、129.0.0.1:1000という一つのグローバルIPv4アドレス，ポート番号だけで済む。
【００３１】
上記のようなアドレス変換を想定した場合、どのような通信のときにどれくらい必要なアドレス，ポート数が削減できるかについて、図２の例を用いて説明する。
【００３２】
図２のケースＡでは、ネットワーク内部のホスト(srcIP A)が、ネットワーク外部のホストdstIP 1と３本のフローを張っている。この場合、外部ホストのアドレスであるdstIP 1を利用してもしなくても、３つの{グローバルIPv4アドレス，ポート番号}をsrcIP Aに付与する必要がある。
【００３３】
これに対して、ケースBでは、srcIP Aが、ネットワーク外部ホストdstIP1、 2、 3の３つと通信しており、それぞれ一本のフローが張られている。この場合、外部ホストのdstIPを利用する場合には、一つの{グローバルIPv4アドレス，ポート番号}を３本のフローに割り当てることができる。それに対して、dstIPを利用しない場合には、３つの{グローバルIPv4アドレス，ポート番号}を３本のフローに割り当てる必要がある。（ここで、３本のフローのsrcPortはそれぞれ異なると仮定している。）
ケースCでは、dstIP 1と４本のフローを張り、dstIP 2とは1本のフローを張っている。この場合、dstIPを利用しない方式だと、５個の{グローバルIPv4アドレス，ポート番号}を計5本のフローに対して割り当てる必要がある。それに対して、dstIPを利用する方式では、dstIP 1向けのフロー数4本と、dstIP 2向けのフロー１本のうち、その最大値である４個のグローバルIPv4アドレス，ポート番号}を割り当てればよいことになる。
【００３４】
以上をまとめると、各ケースに対して必要な{グローバルIPv4アドレス，ポート}の数は、以下の表のようになる。２カラム目は、各srcIPのフロー数であり、それがdstIPを利用しない方式で必要な{グローバルIPv4アドレス，ポート}の数となる。３カラム目は、dstIP jのフロー数N(j)を求め、その最大値maxｊN(j)であり、それがdstIPを利用する方式で必要な{グローバルIPv4アドレス，ポート}の数となる。
【００３５】
【表２】
0005547019.tif 000003
つまり、dstIP毎のフロー数の最大値を求めることで、通信相手である外部ホストのアドレスdstIPを利用する方式で必要となる{グローバルIPv4アドレス，ポート}の数を見積もることが可能となる。以下でその具体的な方法を列挙する。
【００３６】
［第１の実施の形態］
本実施の形態においては、まず、現在は、ISPはネットワーク内部ホストにグローバルIPv4アドレスを用いて通信サービスを提供しているものとし、そのネットワークからインターネットへ向かうパケットをキャプチャする。 {srcIP，dstIP，srcPort，dstPort，Protocol}の５つ組みを同じくするパケット群をフローと定義し、各{srcIP#i， dstIP#j}ペアにおいて、時点tにおいて通信中のフロー数をN(t，i，j)と定義し、パケットトレースデータからN(t，i，j)をカウントする。そして、仮に、このISPがNATを用いてインターネットアクセスを提供する際に、NATにおいて必要となる{グローバルIPv4アドレス，ポート番号}の数として、Nmax(t，i)=maxj N(t，i，j)を時点tに内部ホストiに割り当てが必要な{グローバルIPv4アドレス，ポート番号}の数を算出することを特徴とする。
【００３７】
なお、表２の例でのNmax(t，i)の値は、Nmax(t，A)= max {N(t，A，1)}= max  {3}=3，Nmax(t，B)= max {N(t，B，1)， N(t，B，2)， N(t，B，3)}= max{1，1，1}=1，Nmax(t，C)= max {N(t，C，1)， N(t，C，2)}= max{4，1}=4となる。
【００３８】
［第２の実施の形態］
本実施の形態においては、前述の第１の実施の形態における、ある時点ｔにおける通信中のフロー数N(t，i，j)を求める。その手順は以下の通りとする。
【００３９】
まず、予めフロー毎の状態を管理するフロー管理テーブルを記憶手段内に用意しておく。フロー管理テーブルでは、フローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}と最後にパケットが到着した時刻Tlast_iの２つを記憶しておく。
【００４０】
次に、パケットトレースデータの時刻の先頭パケットを読み出し、該パケットのフローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}が、フロー管理テーブルに既にエントリされているかチェックする。新規であれば、フロー管理テーブルに、該パケットのフローキーと、そのパケットの到着時刻をTlast_iにエントリする。既出フローからのパケットであれば、Tlast_iをそのパケットの到着時刻に更新する。なお、パケットがTCPかつFINまたはRSTにフラグが立っていたら、フロー管理テーブルからエントリを削除する。
【００４１】
一方、上記のフロー管理テーブルにエントリされているフローを一定周期τ毎にチェックする。その際、現在の時刻とTlast_iを比較し、その差が予め定めたタイマーの値inactive_timerよりも大きければ、フロー管理テーブルから削除する。
【００４２】
以上の準備の下、時点tにおいてペア{srcIP#i、dstIP#j}に関してフロー管理テーブルにエントリされているフロー数をカウントし、それをN(t，i，j)とする。
【００４３】
［第３の実施の形態］
本実施の形態では、予め定めた一定周期τ毎にt番目の時点（1<=t<=M、 Mは測定回数、ただしt=1は、パケットトレースを開始した時刻からinactive timer時間経過後の時刻に設定）におけるNmax(t，i)を求めておき、N*(i)=F_t，x(Nmax(t，i))を、ホストiに必要な{グローバルIPv4アドレス，ポート番号}とする。なお、関数F_t，x()は、tに関して、上位xパーセント値を返す関数とし、xは予め定めるパラメータ（例えばx=1パーセント）とする。
【００４４】
次に、N*(i)を降順にソートし、予め定めたyに関して上位yパーセント番目（例えばy=1パーセント）のi_yに対するN*(i_y)を求め、それを、各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出することを特徴とする。
【００４５】
この第３の実施の形態について補足する。
【００４６】
まず、inactive timer時間経過までのフロー数の情報を使わない理由は、inactive timer時間経過するまでは、パケットトレースデータから算出される通信中フロー数は、パケットトレース測定開始以前から通信中のフローが含まれていない可能性があるためである。例えばパケットトレース測定開始直前までパケットを送出しており、測定開始以降パケットを送出していないフローが存在した場合、そのフローはパケットトレースデータからは存在を検知できない。ただし、もし通信中のフローであれば、inactive timer時間経過するまでにパケットを送出するはずであるため、inactive timer時間というウォームアップ時間を設けることでパケットトレース測定開始以前のフローについてもカウントすることができる。
【００４７】
次に、N*(i)=F_t，x(Nmax(t、i))における関数F_t，xに補足する。例えばτ=1msとして、M=360000とする（つまり１時間分）と、その１時間の間でフロー数Nmax(t，i)は時々刻々と変化するが、xを上位1/360000×100パーセント値とすれば、Nmax(t，i)の、１時間にわたっての最大値がN*(i)となり、N*(i)の{グローバルIPv4アドレス，ポート}数を用意しておけば、任意の時点において必要なアドレス，ポート数がカバーできることになる。
【００４８】
「上位yパーセント番目（例えばy=1パーセント）のi_yに対するN*(i_y)を求め、それを、各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出」ということについて補足する。例えばy=1パーセントに設定すると、この手順で各ホストに必要な{グローバルIPv4アドレス，ポート番号}の数を割り当てておけば、99パーセントのホストには必要なアドレス，ポート数を割り当てていることになる。
【００４９】
なお、ここでのアドレス，ポート番号割り当て方式は、図１で述べたA＋P方式のように、各ホストにネットワークのエッジで{グローバルIPv4アドレス，ポート番号}を割り振る方式を想定している。また、図１のNAT444やDS-lite方式のようにLSNでホストを多重して{グローバルIPv4アドレス，ポート番号}を割り当てる場合においても、ホスト毎に利用可能な{グローバルIPv4アドレス，ポート番号}の範囲を固定的に割り当てて運用する場合に、１ホスト当り必要な{グローバルIPv4アドレス，ポート番号}の数を当該実施の形態で推定した値に設定可能である。
【００５０】
［第４の実施の形態］
本実施の形態においては、フロー数集計処理を行う。
【００５１】
フロー数Ntotal(t)=Σi Nmax(t，i)とし、Ntotal*=F_t、x(Ntotal(t))を計算し、その値を該パケットトレースを実施した測定点（ノード間におけるアドレス・ポート数推定装置の設置点）において多重されているホスト数Yと、NATを用いて収容したいホスト数Zを用いて、Z/Y×Ntotal*を計算し、その値を、NATを用いて収容したいホスト数Z全体に対して必要となる{グローバルIPv4アドレス，ポート番号}数として算出することを特徴とする。
【００５２】
ここでは、図１のNAT444やDS-lite方式のように複数のホストを多重してLSNでアドレス変換を行う場合に、全体でどれくらいの{グローバルIPv4アドレス，ポート番号}の組を用意しておけばよいかを推定している、なお、第３の実施の形態のように、一つのホストに固定的にアドレス、ポートの範囲を割り当てるのではなく、その時点で空いているアドレス，ポートを通信要求のあったホストに動的に割り当てる方式を想定して、ホスト全体で必要な{グローバルIPv4アドレス，ポート番号}の数を見積もっている。
【００５３】
［第５の実施の形態］
本実施の形態では、各dstIP#jに対して、時点tでのフロー数Nd(t，j)をカウントし、Ndmax(t)=max j Nd(t，j)を求め、Ndmax*=F_t，x(Ndmax(t))を計算し、その値を該パケットトレースを実施した測定点において多重されているホスト数Yに対して、NATを用いて収容する際に必要となる{グローバルIPv4アドレス，ポート番号}数として算出することを特徴とする。
【００５４】
この方法では、異なる外部ホスト（つまり異なるdstIP）と通信していれば、同じsrcIPか別のsrcIPからの通信かを区別することなく、同じ{グローバルIPv4アドレス，ポート番号}を付与するというアドレス割り当て方式を想定した場合に必要な{グローバルIPv4アドレス，ポート番号}を見積もっている。なお、第４の実施の形態では、あるsrcIPが異なるdstIPと通信している場合に限り、同じ{グローバルIPv4アドレス，ポート番号}を付与している場合を対象としている。
【００５５】
この第５の実施の形態の拡張として、パケットトレースデータが測定箇所ホスト数Yだとすると、そのデータでsrcIPをランダムに間引くことで擬似的にホスト数Y'（＜Y）を模擬し、そのときのNdmax*を算出し、ホスト数Yが変化したときのNdmax*の変化を関数に当てはめることで、ホスト数が仮にZ（＞Y）になったときにNdmax*がどうなるか推定し、NATを用いて収容したいホスト数Z全体に対して必要となる{グローバルIPv4アドレス，ポート番号}数として算出する。具体例として、ホスト数がYのときのNdmax*をNdmax*(Y)と書くことにすると、ホスト数がZとなったときの
Ndmax*(Z)＝{Ndmax*(Y)-Ndmax*(Y')}/(Y-Y')×(Z-Y)+Ndmax*(Y)
で推定する。
【００５６】
［第６の実施の形態］
本実施の形態においては、通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式を比較をする。
【００５７】
まず、Nmax(t，i)=Σj N(t，i、j)として、それを入力として第３の実施の形態と同様の手順でN*(i_y)を求め、該N*(i_y)をネットワーク外部ホストのアドレスを識別子として利用しない方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する。一方で、Nmax(t，i)=maxj N(t，i，j)を入力として第３の実施の形態に記載のようにの手順でN*(i_y)を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する。そして、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する。
【００５８】
［第７の実施の形態］
本実施の形態では、第６の実施の形態とは異なる方法で、通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式を比較をする。
【００５９】
まず、Nmax(t，i)=Σj N(t，i，j)として、それを入力として第４の実施の形態と同様の手順でNtotal*を求め、該Ntotal*をネットワーク外部ホストのアドレスを識別子として利用しない方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出する。
【００６０】
一方で、Nmax(t，i)=maxj N(t，i，j)を入力として第４の実施の形態と同様の手順でNtotal*を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出する。そして、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価する。
【００６１】
［第８の実施の形態］
本実施の形態では、上記の第１〜第７で示した方法を実現するための推定装置を示す。
【００６２】
図３は、本発明の第８の実施の形態におけるシステム構成を示す。
【００６３】
同図に示すように、NATにおけるアドレス・ポート数推定装置１００は、ノード２００Ａ，２００Ｂ間のリンクに挿入される形態で利用される。あるいは、ノード(スイッチやルータ)において、パケットをポートへミラーして、そのポートの先に当該アドレス・ポート数推定装置１００を設置してもよい。あるいは、パケットを図３の構成で一旦キャプチャしておき、後処理でパケットを先頭から読み出して、後述する処理を行うようにしてもよい。
【００６４】
図４は、本発明の第８の実施の形態における装置構成を示す。
【００６５】
同図に示すアドレス・ポート数推定装置１００は、パケットヘッダ解析部１１０、フロー管理部１２０、フロー数集計部１３０、アドレス・ポート数推定部１４０から構成される。
【００６６】
パケットヘッダ解析部１１０は、到着したパケットからフローキーを抽出する。
【００６７】
フロー管理部１２０は、内部のメモリまたは接続される記憶媒体にフロー管理テーブル１２１を有し、パケットヘッダ解析部１１０で抽出されたフローキーとパケット到着時刻を管理する。
【００６８】
フロー数集計部１３０は、前述の第２の実施の形態または第５の実施の形態で示した方法で、パケットトレースデータから時点tでの通信中のフロー数を算出する。
【００６９】
アドレス・ポート数推定部１４０は、以下のいずれかの方法によりアドレス・ポート数を推定する。
【００７０】
・特定の時点tに内部ホストに割当が必要となる{グローバルIPv4アドレス，ポート番号}を算出する(第１の実施の形態の方法)；
・任意の時点に内部ホストに必要となる{グローバルIPv4アドレス，ポート番号}を算出する(第３の実施の形態の方法)；
・NAT全体で必要となる{グローバルIPv4アドレス，ポート番号}を算出する(第４または第５の実施の形態の方法)；
・ネットワーク外部ホストのアドレスを識別子として利用した場合と利用しなかった場合必要となる{グローバルIPv4アドレス，ポート番号}を求め、これらの評価を行う手段（後述の第４、第５の実施例の評価部）に出力する(第６または第７の実施の形態の方法)：
【実施例】
【００７１】
以下、図面と共に本発明の実施例を説明する。
【００７２】
［第１の実施例］
以下の実施例では、前述の図４に示すアドレス・ポート数推定装置の構成に基づいて説明する。
【００７３】
本実施例では、前述の第２の実施の形態の方法で、時点tでの通信中のフローを算出し、第１の実施の形態の方法で、特定の時点tに内部ホストに割り当てが必要となる{グローバルIPv4アドレス，ポート番号}を算出する例を説明する。
【００７４】
図５は、本発明の第１の実施例の動作のフローチャートである。
【００７５】
以下、アドレス・ポート数推定装置１００の各構成要素の動作を図５のフローチャートにしたがって説明する。
【００７６】
パケットヘッダ解析部１１０は、前段のノードからパケットが到着すると、そのパケットのフローキー＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}を読み出し、フロー管理部１２０にフローキーを通知する。その後、パケットを後段のノードに転送する（図５、S1）。
【００７７】
フロー管理部１２０は、内部のメモリまたはディスク装置等の記憶媒体にフロー管理テーブル１２１を用意し、そのテーブル１２１に、フローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}と最後にパケットが到着した時刻Tlast_iの２つを記憶しておく。フロー管理部１２０は、該パケットのフローキーi＝{srcIP#i，dstIP#i，srcPort#i，dstPort#i，Protocol#i}が、フロー管理テーブル１２１に既にエントリされているかチェックする（図５、S2）。新規であれば（図５、Ｓ２，no）、フロー管理テーブル１２１に該パケットのフローキーと、そのパケットの到着時刻TnowをTlast_iにエントリする（図５、Ｓ３）。既出フローからのパケットであれば(図５、Ｓ２，ｙｅｓ)、フロー管理テーブル内のTlast_iを読み出し、そのパケットの到着時刻に更新する（図５、S5）。なお、パケットがTCPかつFINまたはRSTにフラグが立っていたら（図５、S4），フロー管理テーブルからエントリを削除する（図５、S6）。
【００７８】
一方、フロー管理部１２０は、上記のフロー管理テーブル１２１にエントリされているフローを一定周期τ毎にチェックする（図５、S7）。その際、現在の時刻とTlast_iを比較し（図５、S8）、その差が予め定めたタイマーの値inactive_timerよりも大きければ(図５、Ｓ８，yes)、フロー管理テーブルから削除する（図５、S9）。
【００７９】
フロー数集計部１３０は、一定周期τ毎に、フロー管理テーブルを参照し、現時点tにおいて、{srcIP#i, dstIP#j}のペア毎にフロー管理テーブル１２１にエントリされているフロー数をカウントし、それをN(t,i,j)とする（図５、S10）。その値を，アドレス・ポート数推定部１４０に通知する。
【００８０】
アドレス・ポート数推定部１４０は、時点tに内部ホストiに割り当てが必要な{グローバルIPv4アドレス，ポート番号}の数として、Nmax(t,i)=maxj N(t，i，j)を計算する。Nmax(t,i)の値をメモリ（図示せず）に蓄積していき、パケット測定を開始した時刻からinactive timer時間経過後の時刻をt=1番目の時刻として、t=M番目（Mはあらかじめ定める測定回数）までのデータがメモリ（図示せず）に蓄積されたら、 N*(i)=F_t,x(Nmax(t,i))を、ホストiに必要な{グローバルIPv4アドレス，ポート番号}とする。なお、関数F_t,x()は、tに関して、上位xパーセント値を返す関数とし、xは予め定めるパラメータ（例えばx=1パーセント）とする。次に、N*(i)を降順にソートし、予め定めたyに関して上位yパーセント番目（例えばy=1パーセント）のi_yに対するN*(i_y)を求め、それを各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出する。
【００８１】
［第２の実施例］
本実施例は、前述の第４の実施の形態の方法に対応する、アドレス・ポート数推定部１４０の動作を示す。
【００８２】
アドレス・ポート数推定部１４０は、時点tにおける通信中のフロー総数をNtotal(t)=Σi Nmax(t,i)とし、
Ntotal*=F_t,x(Ntotal(t))
を計算し、その値を該パケットトレースを実施した測定点において多重されているホスト数Yと、NATを用いて収容したいホスト数Zを用いて、
Z/Y×Ntotal*
を計算し、その値をNATを用いて収容したいホスト数Z全体に対して必要となる{グローバルIPv4アドレス，ポート番号}数として算出する。
【００８３】
アドレス・ポート数推定部１４０以外の動作は、前述の第１の実施例と同様であるのでその説明は省略する。
【００８４】
［第３の実施例］
本実施例では、前述の第５の実施の形態の方法に対応する、フロー数集計部１３０、アドレス・ポート数推定部１４０の動作を示す。
【００８５】
フロー数集計部１３０は、各外部のホストdstIP#jに対して、時点tでのフロー数Nd(t，j)をカウントし、アドレス・ポート数推定部に出力する。
【００８６】
アドレス・ポート数推定部１４０は、時点tにおける通信中のフロー数の最大値
Ndmax(t)=max j Nd(t,j)
を求め、
Ndmax*=F_t,x(Ndmax(t))
を計算し、その値を該パケットトレースを実施した測定点において多重されているホスト数Yに対して、NATを用いて収容する際に必要となる{グローバルIPv4アドレス，ポート番号}数として算出する。
【００８７】
フロー数集計部１３０、アドレス・ポート数推定部１４０以外の動作は、前述の第１の実施例と同様であるのでその説明は省略する。
【００８８】
［第４の実施例］
図６は、本発明の第４の実施例のアドレス・ポート数推定装置の構成を示す。
【００８９】
同図に示す構成は、図４の構成に、両者を比較することでネットワーク外部ホストのアドレスを識別子として利用する方式の有効性を評価するための評価部１５０を付加したものである。
【００９０】
アドレス・ポート数推定部１４０は、通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の比較をする方法として、時点tにおいて通信中のフロー数をN(t,i,j)としたとき、時点tにおける通信中のフロー数の最大値をNmax(t,i)=Σj N(t,i,j)として、それを入力として第１の実施例と同様の手順でN*(i_y)を求め、該N*(i_y)をネットワーク外部ホストのアドレスを識別子として利用しない方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出し、評価部１５０に出力する。また、一方で、Nmax(t,i)=maxj N(t，i，j)を入力として第１の実施例の手順でN*(i_y)を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式における各ホストに割当が必要な{グローバルIPv4アドレス，ポート番号}数として算出し、評価部１５０に出力する。
【００９１】
評価部１５０は、アドレス・ポート数推定部１４０から入力されたネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の双方の{グローバルIPv4アドレス，ポート番号}数を取得して、有効性の評価を行う。具体例として，ネットワーク外部ホストのアドレスを識別子として利用する方式における{グローバルIPv4アドレス，ポート番号}として算出された値Aと、ネットワーク外部ホストのアドレスを識別子として利用しない方式における{グローバルIPv4アドレス，ポート番号}として算出された値Bを用いて、（B-A）÷Aを、外部ホストのアドレスを識別子として利用することによるアドレス・ポート数削減度として算出する。
【００９２】
アドレス・ポート数推定部１４０、評価部１５０以外の動作は、前述の第１の実施例と同様であるのでその説明は省略する。
【００９３】
［第５の実施例］
本実施例では、前述の第７の実施の形態に対応する例を示す。
【００９４】
通信相手である、ネットワーク外部ホストのアドレスを識別子として利用する方式と利用しない方式の比較をする方法として、Nmax(t,i)=Σj N(t,i,j)として、それをアドレス・ポート数推定部１４０の入力として第２の実施例と同様の手順でNtotal*を求め、該Ntotal*をネットワーク外部ホストのアドレスを識別子として利用しない方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出し、評価部１５０に出力する。一方で、Nmax(t,i)=maxj N(t,i,j)を入力として第２の実施例の手順でNtotal*を算出した値をネットワーク外部ホストのアドレスを識別子として利用する方式において必要な{グローバルIPv4アドレス，ポート番号}数として算出し、評価部１５０に出力する。
【００９５】
評価部１５０は、ネットワーク外部のホストアドレスを識別子として利用する方式、及び、利用しない方式の両方の{グローバルIPv4アドレス，ポート番号}数を評価する。具体例として，ネットワーク外部ホストのアドレスを識別子として利用する方式における{グローバルIPv4アドレス，ポート番号}として算出された値Aと、ネットワーク外部ホストのアドレスを識別子として利用しない方式における{グローバルIPv4アドレス，ポート番号}として算出された値Bを用いて、（B-A）÷Aを、外部ホストのアドレスを識別子として利用することによるアドレス・ポート数削減度として算出する。
【００９６】
アドレス・ポート数推定部１４０以外の動作は、前述の第１の実施例と同様であるのでその説明は省略する。
【００９７】
［第６の実施例］
前述の第１の実施例では、フロー管理部１２０において、一定周期τ毎にフロー管理テーブル１２１からフローの削除を行っていたが、以下の手順でN(t，i，j)を求めてもよい。
【００９８】
フロー管理部１２０では、フロー管理テーブル１２１に、フローキーiおよび最初のパケットが到着した時刻Tfirst_i、最後のパケットが到着した時刻Tlast_iを記憶している。
【００９９】
フロー管理部１２０は、パケットが到着したら、フロー管理テーブル１２１を参照して、既にエントリ済みのフローか否かをチェックし、未エントリフローであれば、そのパケットの到着時刻Tnowを、Tfirst_iおよびTlast_iにセットする。エントリ済みフローで、Tlast_i+inactive timer<Tnowであれば、Tlast_i←Tlast_i+inactive timerにセットした後、そのフローの情報を予め用意したフロー情報出力ファイル（図示せず）へ追記出力する。そうでなければ、Tlast_i←Tnowと更新してフロー管理テーブル１２１へ保持しておく。
【０１００】
なお、到着パケットがTCPかつFINまたはRSTフラグが立っていたら、Tlast_i←Tnowにセットした後、そのフローの情報をフロー情報出力ファイル（図示せず）へ追記出力する。
【０１０１】
以上を一定期間実施した後、フロー管理テーブル１２１に残っているフローについては、Tlast_i←Tnowにセットした後、そのフローの情報をフロー情報出力ファイル（図示せず）へ追記出力する。
【０１０２】
フロー数集計部１３０は、以上の手順で作成されたフロー情報出力ファイルを用いて、{srcIP#i, dstIP#j}のペア毎に、時点tにおいて通信中のフロー（つまりTfirst_i<t<Tlast_iを満たすフロー）の数をカウントし、それをN(t,i,j)とする。
【０１０３】
以降の処理は、第１の実施例と同様であるので、その説明を省略する。
【０１０４】
上記の実施の形態及び実施例で説明したように、本発明によれば、ネットワーク外部ホストのアドレス情報を利用したLSNを考えた際に、パケットトレースデータを用いて、LSNで必要なグローバルIPv4アドレス数を推定する方法およびその装置を提供することにある。
【０１０５】
あるインターネットアクセストラヒックデータ１時間分に対して、本実施例４を適用したところ、x=1/360000×100パーセント、y=1パーセント、inactive timer=15秒に設定し、1msの周期でフロー数をカウントしたときに、１ホスト当りに割当が必要な{グローバルIPv4アドレス，ポート番号}数を推定したところ、ネットワーク外部ホストのアドレスを用いない場合に比べて、用いた場合には、必要なアドレス，ポート数は35.5%削減可能であることが確認できている。参考として、外部ホストアドレスを用いた場合と用いなかった場合の、ホスト当りの必要なアドレス・ポート数の分布を図７に示す。X軸が必要なアドレス，ポート数で、Y軸が必要なアドレス，ポート数がx以上であるホストの割合を示している。なお、この図の、外部アドレス利用あり、なしの曲線がY=0.01と交差するときのXの値が、アドレス利用あり、なしのときに必要なアドレス・ポート数を意味する．それらをそれぞれA,Bとすると、（B-A）÷A＝0.355となり、アドレス・ポート数削減度として算出される。
【０１０６】
以上説明したように、本発明によれば、ネットワーク外部ホストのアドレス情報を利用したLSNを考えた際に、パケットトレースデータを用いて、LSNで必要なグローバルIPv4アドレス数を推定する方法およびその装置を提供することにある。
【０１０７】
なお、図４、図６に示すアドレス・ポート数推定装置の各構成要素の動作をプログラムとして構築し、アドレス・ポート数推定装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１０８】
また、構築されたプログラムをハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬記憶媒体に格納し、コンピュータにインストールする、または、配布することが可能である。
【０１０９】
本発明は、上記の実施の形態及び実施例に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【符号の説明】
【０１１０】
１００  アドレス・ポート数推定装置
１１０  パケットヘッダ解析部
１２０  フロー管理部
１２１  フロー管理テーブル
１３０  フロー数集計部
１４０  アドレス・ポート数推定部
１５０  評価部
【図１】
0005547019.tif 000004
【図２】
0005547019.tif 000005
【図３】
0005547019.tif 000006
【図４】
0005547019.tif 000007
【図５】
0005547019.tif 000008
【図６】
0005547019.tif 000009
【図７】
0005547019.tif 000010
【図８】
0005547019.tif 000011