(57)【要約】【課題】最適ハッシュ関数の選定時間を短くすること。【解決手段】本発明のネットワーク機器は、ハッシュテーブルと、ハッシュカウンタテーブルと、を有し、エントリの登録／削除要求時毎に、複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリのハッシュテーブルへの登録／削除の成否に応じて当該ハッシュ値のカウンタ値を増減し、複数のハッシュ関数毎に、ハッシュカウンタテーブルにおけるカウンタ値の統計値を求め、複数のハッシュ関数の各々の統計値に基づきハッシュ関数を選定し、選定したハッシュ関数を用いて、ハッシュテーブルに登録された全てのエントリのハッシュ値を計算し、計算したハッシュ値とエントリをハッシュテーブルに展開する。【選択図】図１
2013247389.tif 000002
【特許請求の範囲】
【請求項１】
複数のハッシュ関数の中からハッシュ関数を選定するネットワーク機器であって、
ハッシュ値毎に、当該ハッシュ値の実データに関するエントリを登録するハッシュテーブルと、
前記複数のハッシュ関数の各々を用いて計算したハッシュ値毎に設定されたカウンタ値を登録するハッシュカウンタテーブルと、
前記ハッシュテーブル及び前記ハッシュカウンタテーブルの操作を行うテーブル操作部と、を有し、
前記テーブル操作部は、
前記エントリの登録／削除要求時毎に、前記複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリの前記ハッシュテーブルへの登録／削除の成否に応じて当該ハッシュ値の前記カウンタ値を増減し、前記複数のハッシュ関数毎に、前記ハッシュカウンタテーブルにおける前記カウンタ値の統計値を求め、
前記複数のハッシュ関数の各々の前記統計値に基づきハッシュ関数を選定し、選定したハッシュ関数を用いて、前記ハッシュテーブルに登録された全てのエントリのハッシュ値を計算し、計算したハッシュ値とエントリを前記ハッシュテーブルに展開する、
ネットワーク機器。
【請求項２】
前記テーブル操作部は、
前記エントリの登録要求時毎に、前記複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリの前記ハッシュテーブルへの登録が成功した場合、当該ハッシュ値の前記カウンタ値を増加させ、
前記エントリの削除要求時毎に、前記複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリの前記ハッシュテーブルからの削除が成功した場合、当該ハッシュ値の前記カウンタ値を減少させる、
請求項１に記載のネットワーク機器。
【請求項３】
前記複数のハッシュ関数毎の前記統計値は、当該ハッシュ関数を用いて計算したハッシュ値のうち前記カウンタ値が０であるハッシュ値の数であり、
前記テーブル操作部は、
前記ハッシュ関数を用いて計算したハッシュ値の前記カウンタ値に応じて、前記カウンタ値が０であるハッシュ値の数を増減する、
請求項１または２に記載のネットワーク機器。
【請求項４】
前記複数のハッシュ関数毎の前記統計値は、当該ハッシュ関数を用いて計算したハッシュ値のうち前記カウンタ値が最大値を取るハッシュ値の数であり、
前記テーブル操作部は、
前記ハッシュ関数を用いて計算したハッシュ値の前記カウンタ値を、その時点のカウンタ値の最大値と比較し、その比較結果に応じて、前記カウンタ値が最大値を取るハッシュ値の数を増減する、
請求項１または２に記載のネットワーク機器。
【請求項５】
ネットワーク機器において、複数のハッシュ関数の中からハッシュ関数を選定するためのハッシュ関数選定方法であって、
前記ネットワーク機器は、
ハッシュ値毎に、当該ハッシュ値の実データに関するエントリを登録するハッシュテーブルと、
前記複数のハッシュ関数の各々を用いて計算したハッシュ値毎に設定されたカウンタ値を登録するハッシュカウンタテーブルと、を有するものであり、
前記エントリの登録／削除要求時毎に、前記複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリの前記ハッシュテーブルへの登録／削除の成否に応じて当該ハッシュ値の前記カウンタ値を増減し、前記複数のハッシュ関数毎に、前記ハッシュカウンタテーブルにおける前記カウンタ値の統計値を求め、
前記複数のハッシュ関数の各々の前記統計値に基づきハッシュ関数を選定し、選定したハッシュ関数を用いて、前記ハッシュテーブルに登録された全てのエントリのハッシュ値を計算し、計算したハッシュ値とエントリを前記ハッシュテーブルに展開する、
ハッシュ関数選定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク機器において、複数のハッシュ関数の中から最適なハッシュ関数を選定する技術に関する。
【背景技術】
【０００２】
図13に、ルータ/スイッチ等のネットワーク機器の従来構成を示す。このネットワーク機器は、パケット受信部11と、パケット処理部12と、パケット送信部13と、テーブル（table）14と、テーブル操作部15と、を有している。
【０００３】
図13に示すネットワーク機器では、回線からのパケットをパケット受信部11にて受信すると、パケット処理部12は、テーブル14から該当するentry（エントリ）を検索し、検索したentryにて指定されたパケット処理を実施する。
【０００４】
テーブル14は、上記のパケット処理とは別に、外部サーバ20からのentry登録/削除要求時に、テーブル操作部15によりentryの登録/削除の操作が行われる。従って、パケット処理によるテーブル検索とテーブル操作とが競合し、パケット処理性能とテーブル操作性能に影響を及ぼす可能性がある。
【０００５】
近年のトラヒック増加に伴い、高い処理性能（パケット転送性能、テーブル操作性能）が望まれるネットワーク機器では、処理競合対策が必要となる。
【０００６】
ところで、tableの検索技術として、非特許文献１には、線形探索法やHash（ハッシュ）法が開示されている。
【０００７】
図14左上側に示すように、線形探索法では、entryをリスト構造でtableに登録しておく。そのため、所望のentryを検索するのに最後尾に登録されたentryの場合、全てのentryとの照合が必要になる（図14左上側の例では、最大で6回の検索が必要）。
【０００８】
これに対して、図14左下側に示すように、Hash法では、Hash関数によりのHash値を計算し、Hash値毎にentryをHash tableに登録しておく。このとき、Source portのように元空間が小さい場合、Hash関数として等号関数（y=x)を用いれば、Hash tableの状態がどの様な状態であっても、複数のentryが同一のHash値になる（Hash値の衝突）ことはなく、所望のentryを1回で検索できる。また、この場合にHash tableを作成するのに必要なメモリ容量は高々300KByte程度である。
【０００９】
しかし、図14右側に示すように、5-tuple（416bit）のように元空間が大きい場合は（10の126乗の空間）、Hash関数として等号関数を用いると、Hash tableを作成するのに必要なメモリ容量は10の126乗byteになってしまう。このことから、Hash関数として等号関数を用いることはできず、圧縮関数を用いることになるため、Hash値の衝突が発生する。その結果、図14右側の例では、所望のentryを検索するのに最大で4回の検索が必要になる。
【００１０】
ただし、図15左側に示すように、5-tupleの場合でも、entry群の状態が固定である場合には、Hash値の衝突が少なくなるような、そのentry群に沿った（entry群から逆算した）Hash関数を用いれば、所望のentryの検索回数を1回に近づけることができる（最適なHush関数を選択できたときには、図15左側のように1回の検索にできる可能性がある）。
【００１１】
しかし、図15右側に示すように、Pinhole制御用のHash tableのように、entry群の状態が変わる場合には、単一のHash関数を用いた場合、entry群の状態に因っては、Hash値の衝突が発生し、Hash法の効果が落ちるという問題が生じる（図15右側の例では、所望のentryを検索するのに、最大で4回の検索が必要になる）。
【００１２】
Pinhole制御用のHash tableのように、entry群が常に変動する場合の衝突回避策として、図16に示すように、予め複数のHash関数を用意しておき（図16の例では16個）、entry群の状態変更に対応して最適なHash関数を選定する方式（以下、本明細書では、この方式をマルチHash方式と称す）がある。
【００１３】
なお、マルチHash方式の最適Hash関数の選定アルゴリズムとしては、例えば、図17に示すように、入力パケットがHash値を基に検索を行う際に、並んでいるentry数の平均値（図17の例では、Hash値が2のときの1、30000のときの4、65535のときの1、を平均した2）が最小となるHash関数を選定する「平均値」に基づくアルゴリズムや、Hash値毎のentry数のMAX値（図17の例では、Hash値が30000のときの4）が最小となるHash関数を選定する「MAX値」に基づくアルゴリズムがある。
【００１４】
図16の例では、後者の「MAX値」に基づくアルゴリズムを採用しており、entry群がG〜Lの場合、Hash値毎のentry数のMAX値が最小なのは、MAX値が1となるHash関数10であるため、Hash関数10を選定する。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】神明達哉、外５名、「経路表を用いたＩＰパケット受信処理」、電子情報通信学会論文誌  ２００２／８  Ｖｏｌ．Ｊ８５−Ｂ  Ｎｏ．８
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、マルチHash方式では、図18に示すように、最適なHash関数を選定するに際して、Hash tableへのentryの登録/削除要求があった場合（ステップS1）、Hash tableのtable面を凍結し（ステップS2）、最適なHash関数を選定してHash tableを再構築し（ステップS3）、table面を切り替えてから（ステップS4）、table面の凍結を解除する。
【００１７】
そのため、Hash tableが凍結している間は、entryの登録/削除要求に対して対応することができず、待ち行列が発生してしまうという課題がある。
【００１８】
本発明の目的は、マルチHash方式を前提とし、最適なHash関数の選定時間を短くし、Hash tableを凍結する時間を短くすることができる技術を提供することにある。
【課題を解決するための手段】
【００１９】
本発明のネットワーク機器は、
複数のハッシュ関数の中からハッシュ関数を選定するネットワーク機器であって、
ハッシュ値毎に、当該ハッシュ値の実データに関するエントリを登録するハッシュテーブルと、
前記複数のハッシュ関数の各々を用いて計算したハッシュ値毎に設定されたカウンタ値を登録するハッシュカウンタテーブルと、
前記ハッシュテーブル及び前記ハッシュカウンタテーブルの操作を行うテーブル操作部と、を有し、
前記テーブル操作部は、
前記エントリの登録／削除要求時毎に、前記複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリの前記ハッシュテーブルへの登録／削除の成否に応じて当該ハッシュ値の前記カウンタ値を増減し、前記複数のハッシュ関数毎に、前記ハッシュカウンタテーブルにおける前記カウンタ値の統計値を求め、
前記複数のハッシュ関数の各々の前記統計値に基づきハッシュ関数を選定し、選定したハッシュ関数を用いて、前記ハッシュテーブルに登録された全てのエントリのハッシュ値を計算し、計算したハッシュ値とエントリを前記ハッシュテーブルに展開する。
【００２０】
本発明のハッシュ関数選定方法は、
ネットワーク機器において、複数のハッシュ関数の中からハッシュ関数を選定するためのハッシュ関数選定方法であって、
前記ネットワーク機器は、
ハッシュ値毎に、当該ハッシュ値の実データに関するエントリを登録するハッシュテーブルと、
前記複数のハッシュ関数の各々を用いて計算したハッシュ値毎に設定されたカウンタ値を登録するハッシュカウンタテーブルと、を有するものであり、
前記エントリの登録／削除要求時毎に、前記複数のハッシュ関数の各々を用いて当該エントリのハッシュ値を計算し、当該エントリの前記ハッシュテーブルへの登録／削除の成否に応じて当該ハッシュ値の前記カウンタ値を増減し、前記複数のハッシュ関数毎に、前記ハッシュカウンタテーブルにおける前記カウンタ値の統計値を求め、
前記複数のハッシュ関数の各々の前記統計値に基づきハッシュ関数を選定し、選定したハッシュ関数を用いて、前記ハッシュテーブルに登録された全てのエントリのハッシュ値を計算し、計算したハッシュ値とエントリを前記ハッシュテーブルに展開する。
【発明の効果】
【００２１】
本発明によれば、ハッシュ関数の選定時には、複数のハッシュ関数の各々のカウンタ値の統計値（平均値やMAX値）を検索すれば良いため、選定時間を短くすることができ、ハッシュテーブルを凍結する時間を短くすることができるという効果が得られる。
【図面の簡単な説明】
【００２２】
【図１】本実施形態のネットワーク機器の構成を示すブロック図である。
【図２】本実施形態のHash関数等の前提条件を説明する図である。
【図３】本実施形態のHash tableの面構成及び初期値を説明する図である。
【図４】本実施形態のHash tableの運用面にentryが登録されている状態を説明する図である。
【図５】本実施形態のHash counter table及び初期値を説明する図である。
【図６】本実施形態のHash counter table変更処理を説明するフロー図である。
【図７】本実施形態のHash counter table及び初期値（平均値の場合）を説明する図である。
【図８】本実施形態のHash counter table及び初期値（MAX値の場合）を説明する図である。
【図９】本実施形態のHash counter table変更処理（平均値の場合）を説明するフロー図である。
【図１０】本実施形態のHash counter table変更処理（MAX値の場合）を説明するフロー図である。
【図１１】本実施形態のHash counter table（平均値の場合）を説明する図である。
【図１２】本実施形態のHash counter table（MAX値の場合）を説明する図である。
【図１３】従来のネットワーク機器の構成を示すブロック図である。
【図１４】Hash法とその課題を説明する図である。
【図１５】Hash法の圧縮関数を用いた場合の課題を説明する図である。
【図１６】マルチHash方式を説明する図である。
【図１７】マルチHash方式における最適Hash関数の選定アルゴリズムを説明する図である。
【図１８】マルチHash方式の課題を説明する図である。
【発明を実施するための形態】
【００２３】
以下に、本発明を実施するための形態について図面を参照して説明する。
【００２４】
図1に示すように、本実施形態のネットワーク機器は、テーブル14として利用するHash関数の種類を示すHash関数IDをもつHash table（ハッシュテーブル）16を設けた点と、Hash counter table（ハッシュカウンタテーブル）17を追加した点と、が図13に示したネットワーク機器とは異なる。
【００２５】
Hash table16は、Hash値毎に、当該Hash値の実データ（例えば、5-tupleの実データ）に関するentryを登録したテーブルである。
【００２６】
Hash counter table17は、複数のHash関数の各々を用いて計算したHash値毎に設定されたcounter値を登録したテーブルである。
【００２７】
テーブル操作部15は、Hash table16に加えて、Hash counter table17の操作も行う。
【００２８】
なお、Hash table16及びHash counter table17の詳細は後述する。
【００２９】
以下、本実施形態のネットワーク機器の具体的な処理について説明する。
（1）処理1
本実施形態では、図2に示すように、5-tuple（source address(L3)、destination address(L3)、source port(L4)、destination port(L4)、protcol(L3)）の計13byteにてpinhole制御を行う際に、下記に示す2 byte(0〜65535)のHash関数を用いた高速検索を行うものとする。
【００３０】
また、rotation bitを0bit〜15bitとした16個のHash関数を定義し（その数字をそのまま関数IDとする）、これら16個のHash関数の中から、逐次最適なHash関数を選定することを考える。図2の（1）〜（3）では、rotation bitを4 bitとし、#1のデータのHash値を求めるHash関数の例を示している。すなわち、（1）上位4bitをローテーションして下位に移動し、（2）これに#1のデータを加算する。（3）（2）時に17bit目に繰り上がりが生じた場合には1を加算する。これを#1〜#13のデータで13回繰り返す。
（2）処理2
図3に、Pinhole制御を行うためのHash table16の面構成及び初期値を示す。Hash table16は２面から成り適宜片方が運用面となる。初期は０面を運用面とする。
【００３１】
Table変更処理を行うテーブル操作部15は、entry登録／削除要求された5-tupleの実データに対して、運用面のHash関数ID部に埋められたHash関数を用いてHash値を計算し、図4に示すように、当該Hash値をindexとする部分chain構造でentryの追加／削除を行う。なお、entryは、Hash値の実データのメモリ上の位置を示すメモリ位置情報になっている。
【００３２】
Table検索処理を行うパケット処理部12は、運用面のHash関数ID部に埋められたHash関数を用いてHash値を計算し、当該Hash値をindexとする部分のentryを検索し、自身の情報と一致するものがあった場合には、throughし、無ければ、dropする。
（3）処理3
図5に、Hash counter table17の構成及び初期値を示す。
【００３３】
図5に示すように、Hash counter table17の初期値は全て０とする。
【００３４】
図6に、Hash counter table17の変更処理の具体的なフローを示す。
【００３５】
テーブル操作部15は、entry登録／削除要求時毎に、0〜15のHash関数毎のHash値を計算する（ステップS101）。entry登録要求時には（ステップS102）、登録対象のentryがHash table16に存在しない場合は（ステップS105のNo）、entry登録に成功するため（ステップS106）、当該Hash値のcounter値を入手し（ステップS107）、当該counter値を+1する（ステップS109）。一方、entry削除要求時には（ステップS102）、削除対象のentryがHash table16に存在した場合は（ステップS103のYes）、entry削除に成功するため（ステップS104）、当該Hash値のcounter値を入手し（ステップS107）、当該counter値を-1する（ステップS108）。
【００３６】
なお、図6において、点線で囲んだ部分が本実施形態でentry登録／削除要求時に追加される処理になる。
（4）処理4
マルチHash方式の最適Hash関数の選定アルゴリズムとしては、例えば、図17に示したように、「平均値」に基づくアルゴリズムや、「MAX値」に基づくアルゴリズムがある。
【００３７】
本実施形態では、上記の２つのアルゴリズムを対象とし、それぞれの場合に、処理3に追加して以下の処理を行う。
（A）「平均値」に基づくアルゴリズムの場合
平均＝全entry数／（counter値が0でないHash値の数）であり、全entry数はHash関数毎に同一であることから、「平均が最小」と「counter値が0であるHash値の数が最小」は同値条件になる。そこで、図7に示すように、Hash counter table17に「 0 entryのHash値の数」欄を設け、初期値は65536とする。処理3でのcounter変更時に、0→1及び1→0に着目し、「 0 entryのHash値の数」の変更を試みる。
（B）「MAX値」に基づくアルゴリズムの場合
図8に示すように、Hash counter table17に「MAX値」の欄と、counter値がMAX値を取るHash値の数である「MAX数」の欄を設け、「MAX数」の初期値は0とする。処理3でのcounter変更時に、全Hash値のcounter値を検索することなく、「MAX値」の変更を試みる。
（5）処理5
図9に、「平均値」に基づくアルゴリズムの場合のHash counter table17の変更処理の具体的なフローを示す。
【００３８】
図9に示すように、まず、テーブル操作部15は、図6のステップS101〜S106までの処理を行い、続いて、当該Hash値のcounter値を入手する（ステップS201）。
【００３９】
entry削除要求時には、テーブル操作部15は、ステップS201で入手したcounter値が1であれば（ステップS202のYes）、「counter値が0であるHash値の数」を+1し（ステップS203）、その後に、ステップS201で入手したcounter値を-1する（ステップS204）。
【００４０】
一方、entry登録要求時には、テーブル操作部15は、ステップS201で入手したcounter値が0であれば（ステップS205のYes）、「counter値が0であるHash値の数」を-1し（ステップS206）、その後に、ステップS201で入手したcounter値を+1する（ステップS207）。
【００４１】
以上で、Hash関数毎の「counter値が0であるHash値の数」が得られる。なお、図9において、点線で囲んだ部分が本実施形態でentry登録／削除要求時に追加される処理になる。
（6）処理6
図10に、「MAX値」に基づくアルゴリズムの場合のHash counter table17の変更処理の具体的なフローを示す。
【００４２】
図10に示すように、まず、テーブル操作部15は、図6のステップS101〜S106までの処理を行い、続いて、当該Hash値のcounter値を入手する（ステップS301）。
【００４３】
entry削除要求時には、テーブル操作部15は、ステップS301で入手したcounter値をMAX値と比較し（ステップS302）、一致すれば、MAX数を-1する（ステップS303）。-1したMAX数が0であれば（ステップS304のYes）、MAX値を-1し、MAX値を-1した値と同じcounter値を持つHash値の数をMAX数とする。その後に、ステップS301で入手したcounter値を-1する（ステップS306）。
【００４４】
一方、entry登録要求時には、テーブル操作部15は、ステップS301で入手したcounter値をMAX値と比較する（ステップS307）。counter値が、MAX値を-1した値と等しい場合は、MAX数を+1し（ステップS308）、counter値がMAX値と等しい場合は、MAX値を+1し、MAX数を1にし（ステップS309）、その後に、ステップS301で入手したcounter値を+1する（ステップS310）。
【００４５】
以上で、Hash関数毎の「MAX値」が得られる。なお、図10において、点線で囲んだ部分が本実施形態でentry登録／削除要求時に追加される処理になる。
（7）処理7
テーブル操作部15は、entry登録／削除要求時に、上述の処理2〜6を行い、一定時間（例として、100msec）経過したら、一旦、entry登録／削除要求をブロッキングし（ブロッキング中に発生したentry登録／削除要求はバッファリングする）、図3のHash table16の運用面を凍結する。その間に、テーブル操作部15は、以下のアルゴリズムで最適なHash関数を選定し、選定したHash関数の関数IDを図3の運用面とは別面のHash関数ID部に埋める。
（A）「平均値」に基づくアルゴリズムの場合
図11の場合は、「0 entryのHash値の数」が最小であるHash関数の関数IDは、関数ID1と関数ID2である。
【００４６】
そのため、テーブル操作部15は、関数ID1または関数ID2のいずれか（図11の例では、関数ID1）を選定する。
（B）「MAX値」に基づくアルゴリズムの場合
図12の場合は、「MAX値」が最小であるHash関数の関数IDは、関数ID2である。
【００４７】
そのため、テーブル操作部15は、関数ID2を選定する。
【００４８】
テーブル操作部15は、上記にて埋められたHash関数を用いて、Hash table16の運用面の全entryを読み込んで、それぞれのentryについて、上記にて埋められたHash関数を用いてHash値を求め、別面のHash値の部分に図4のように、chain構造で連結していく（別面への書き込みは上書き、あるいは、一旦、全entryを削除してから上記処理を行う）。
【００４９】
上記の処理が終了したら、Hash table16の運用面を別面に切り替え、凍結を解除する（ブロッキング中であったentry登録／削除要求に対する処理は、切り替え先の面にて再スタートさせる）。
【００５０】
上述したように本実施形態では、entry登録／削除要求時毎に、複数のHash関数の各々を用いてHash値を計算し、当該entry登録／削除の成否に応じて当該Hash値のcounter値を増減し、複数のHash関数毎に、複数のHash関数におけるcounter値の平均値やMAX値（統計値）を求める。
【００５１】
そして、複数のHash関数におけるcounter値の平均値やMAX値に基づきHash関数を選定し、選定したHash関数を用いて、Hash table16に登録された全entryのHash値を計算し、計算したHash値とentryをHash table16に展開する。
【００５２】
したがって、最適なHash関数の選定時には、複数のHash関数の各々のcounter値の平均値やMAX値を検索すれば良いため、選定時間を短くすることができ、Hash table16を凍結する時間を短くすることができるという効果が得られる。
【００５３】
なお、本実施形態では、上記動作により最適なHash関数の選定時間が短くなる一方で、entry登録／削除要求時に処理が追加されることになる（図６、図９、図１０において、点線で囲んだ部分）。
【００５４】
しかし、例えば、図９の追加処理では、全entryの測定、平均の計算、全counter値の検索等が不要である。また、図１０の追加処理では、全counter値の検索等が不要である。そのため、entry登録／削除要求時の処理負荷が大きく増大することが回避できる。
【符号の説明】
【００５５】
11    パケット受信部
12    パケット処理部
13    パケット送信部
15    テーブル操作部
16    ハッシュテーブル
17    ハッシュカウンタテーブル
【図１】
2013247389.tif 000003
【図２】
2013247389.tif 000004
【図３】
2013247389.tif 000005
【図４】
2013247389.tif 000006
【図５】
2013247389.tif 000007
【図６】
2013247389.tif 000008
【図７】
2013247389.tif 000009
【図８】
2013247389.tif 000010
【図９】
2013247389.tif 000011
【図１０】
2013247389.tif 000012
【図１１】
2013247389.tif 000013
【図１２】
2013247389.tif 000014
【図１３】
2013247389.tif 000015
【図１４】
2013247389.tif 000016
【図１５】
2013247389.tif 000017
【図１６】
2013247389.tif 000018
【図１７】
2013247389.tif 000019
【図１８】
2013247389.tif 000020