説明

ホスト名設定方法、プログラム、及び、通信装置

【課題】ホスト名を管理するサーバが存在しないと、ホスト名が重複することがある。
【解決手段】機器3はデフォルト候補ホスト名を持つ。機器3は、機器3以外のリンクローカルネットワーク1内に存在する機器2のホスト名を取得する。機器3は、デフォルト候補ホスト名を候補ホスト名とし、該取得したホスト名と機器3の候補ホスト名が重複しない場合、候補ホスト名をホスト名として設定する。重複する場合、該機器2のホスト名と重複しないホスト名を生成して設定する。

【発明の詳細な説明】
【0001】
【発明の属する技術分野】
本発明は、ホスト名設定方法、プログラム、及び、通信装置に関する。
【0002】
【従来の技術】
インターネットにおいて、ホスト名とIPアドレスの対応をとることは普通に行われている。この対応をとることを名前解決という。ホスト名とは、例えば「host.canon.co.jp」や「host」といった、人間が読みやすくした文字列であり、多くの場合、あるパソコン1台や機器1台といった機器毎に人間がつけるものである。本発明では、前者をFully Qualified Domain Name(以下FQDNと記す)、後者をホスト名と呼び区別する。
【0003】
IPアドレスは例えばInternet Protocol Version4(以下IPv4と記す)であるならば192.10.0.1といった表記がなされ、Internet Protocol Version 6(以下IPv6と記す)であるならば2001:0340:1000::1といった表記がなされる。
【0004】
IPv6において、機器同士で直接メッセージをやりとりすることにより名前解決を行う仕組みがインターネットドラフト(Matt Crawford、「IPv6 Node Information Queries」、draft−ietf−ipngwg−icmp−name−lookups−09.txt、May 17, 2002。以下ドラフトと記す)で提案されている。
【0005】
ドラフトでは、以下のようにして名前解決を行うことが説明されている。
【0006】
ICMPv6パケットを用いて機器間で直接メッセージのやり取りを行う。問い合わせ元から問い合わせ先への問い合わせ用のICMPv6パケットを「Node Information Query」(以下NI Queryと記す)、問い合わせ先から問い合わせ元への返答用のICMPv6パケットを「Node Information Reply」(以下NI Replyと記す)と定義している。
【0007】
問い合わせ元は、NI Queryを問い合わせ先に送信する。NI Queryには、問い合わせ先のどの情報が欲しいかといった要求が含まれている。問い合わせ先はNI Queryを受信し、チェックを行って返信を行うと決定した場合、NI Queryに含まれる要求に沿うデータをNI Replyに含み、NI Replyを問い合わせ元に送信する。問い合わせ元は、NI Replyを受信し、NI Replyをチェックし、要求に沿うデータが含まれていれば、それを取り出す。
【0008】
問い合わせ方法にはSubjectアドレスを用いる方法と、Subject名を用いる方法の2種類が挙げられている。
【0009】
最初にSubjectアドレスを用いる方法について説明する。問い合わせ元が、NI Queryに、Subjectアドレスと称されるIPv6アドレスを含め、問い合わせ先にNI Queryを送信する。問い合わせ先は、NI Queryを受信後、NI Query内のSubjectアドレスをチェックし、問い合わせ先が返答する必要があるSubjectアドレスであるならば、NI Queryに記された要求に従い、FQDN(ホスト名の場合もある)もしくは問い合わせ先のユニキャストアドレスを返信する。Subjectアドレスは、大抵問い合わせ先のユニキャストアドレスであり、NI Queryの送信先アドレスも問い合わせ先のユニキャストアドレスである。
【0010】
次に、Subject名を用いる方法について説明する。Subject名を用いる方法では、問い合わせ元がNI QueryにSubject名となる文字列を含め、問い合わせ先にNI Queryを送信する。その際、問い合わせ元が問い合わせ先のユニキャストアドレスを所持せず、Subject名がFQDNかまたはホスト名の場合、以下のようにして作成したNode Informationグループアドレス(以下NIグループアドレスと記す)という名前のリンクローカルスコープマルチキャストアドレスを送信先アドレスとする。
【0011】
NIグループアドレスの作成方法は以下のとおりである。ホスト名を一方向ハッシュ関数(ドラフトではMD5(R. Rivest、「The MD5 Message−Digest Algorithm」、RFC1321、April 1992))に通し、128ビットのデータを得る。一方向ハッシュ関数とは、関数hとその定義域のある値xが与えられて、h(x)=h(y)となるようなyを求めることが難しいような関数のことである。さらに、衝突困難ハッシュ関数というのがあり、この関数は、関数hが与えられていて、h(x)=h(y)となるような一対の値(x、y)を求めることが難しいような関数である。両者をまとめて一方向ハッシュ関数と呼ぶことが多々あり、本提案でもその慣習に習う。つまり、一方向ハッシュ関数とは、本関数を用いて生成したデータ列から元データを算出することが難しく、また異なる元データAとBから本関数を用いて生成したデータ列が一致することが稀な関数のことである。一方向ハッシュ関数については、例えば「現代暗号」(岡本龍明、山本博資 著、産業図書株式会社、シリーズ/情報科学の数学、ISBN4−7828−5353−X C3355)の12章などの他、暗号関係の書籍に詳しい説明があるので、本発明での詳細な説明は省略する。
【0012】
この128ビットの最初の32ビットに、「ff02:0:0:0:0:2::/96」のプレフィックスを追加して、マルチキャストアドレスを作成する。この作成したマルチキャストアドレスをNIグループアドレスとする。NI Queryを受信した問い合わせ先は、NI Queryの送信先アドレスをチェックし、問い合わせ先のユニキャストアドレス、エニキャストアドレス、問い合わせ先が参加しているリンクローカルスコープマルチキャストアドレス(NIグループアドレスも含まれる)でない場合、パケットを廃棄する。それ以外の場合、問い合わせ先は、ポリシーに従い返信するかどうか決定し、NI Queryに記された要求に従い、名前もしくはユニキャストアドレスを返信する。
【0013】
【発明が解決しようとする課題】
ドラフトの仕組みを用いることにより、機器同士が直接通信を行い、ホスト名を取得することは可能となった。
【0014】
しかしながら、ホスト名が重複した場合にどのような処置を行うかは、ドラフト外のことであり既定されていない。
【0015】
ホスト名の重複を回避することは、名前解決を行う上で必要である。回避策の1つとして、メーカーが機器に事前に非常に長いシリアル番号をホスト名として仕込んでおき、重複する確率を下げることは可能である。しかし、ユーザが他の機器に任意にホスト名をつけることは可能なので、重複する可能性は依然存続する。
【0016】
つまり、ネットワーク上で重複したホスト名を検出し、重複を回避する仕組みが必要となる。
【0017】
本発明は、上記の問題に鑑みてなされたものであり、重複しない名前を生成し設定することを目的とする。
【0018】
【課題を解決するための手段】
上記目的を達成するために、本発明は、他装置のホスト名を取得する取得手順と、該取得した他装置のホスト名と異なるホスト名を自装置のホスト名として設定する設定手順とを備え、重複しないホスト名を設定することを特徴とする。
【0019】
あらかじめ設定されているホスト名が、他の装置のホスト名と重複していれば、他の装置のホスト名と重複しないように、あらかじめ設定されているホスト名に、付加情報を加えて、自装置のホスト名に設定する。
【0020】
【発明の実施の形態】
本発明の実施の形態を、図面を参照しながら説明する。
【0021】
(第1の実施の形態)
本実施の形態では、リンクローカルネットワーク1に、機器2が接続されている場合を想定する。この環境に、機器を追加、削除などを行う場合を説明する。
【0022】
図1は、本実施の形態を適用する環境を示す図である。リンクローカルネットワーク1があり、printerというホスト名を持ち、リンクローカルスコープIPv6アドレス「fe80::1001」を持つ、機器2が存在する。リンクローカルネットワーク1の物理層の種類は特に種類は問わない。イーサネット(登録商標)、IEEE802.11、Bluetoothなど、物理層の上位でIPv6による通信ができれば問題ない。ただし、マルチキャストアドレスによる通信とユニキャストアドレスによる通信が行える必要がある。機器2は、NI Queryを受信し、ホスト名を含めたNI Replyを返信する。本実施の形態では、物理層がイーサネット(登録商標)の場合を例とする。
【0023】
図2は、機器2の一般的な構成を示す図である。CPU201が機器2の全体の動作を制御する。RAM202は一時記憶装置であり、ROM203はプログラムなど、消去不可能なデータが組み込まれているRead Only Memoryである。ネットワークインタフェース204は、機器2が外部機器とデータ送受信を行う際に使用するインタフェースである。バス205は、各モジュールを接続する内部バスである。さらに、ハードディスクなどの大容量記憶装置、ディスプレイやキーボード、マウス、プリントアウト部といった入出力機器用のインタフェースなどを備えていてもよい。機器2は、ネットワークインタフェース204により、リンクローカルネットワーク1と接続可能で、IPv6通信が行えれば問題ない。
【0024】
―機器をネットワークに追加する場合―
ここで、図1に示された環境に機器3が追加される場合を想定する。この環境は、図3で示される。機器3の一般的な構成を図4に示す。基本的に機器2と同じであり、リンクローカルネットワーク1と接続可能でIPv6通信が行えれば問題ない。
【0025】
機器3がリンクローカルネットワーク1に接続された場合の動作を、図5に示すフローチャートを参照しながら説明する。
【0026】
図5のS101において、本発明の実施の形態の動作がスタートする。スタート時、機器3には予めROM303に仕込まれたデフォルト候補ホスト名があるものとする。デフォルト候補ホスト名とは、ネットワーク参照されるホスト名用に仕込まれている文字列データであるが、まだネットワーク参照される状態になっていない、単なる文字列データのことである。デフォルト候補ホスト名は、ROM303に記録されている。本実施の形態では、デフォルト候補ホスト名を「printer」とする。このデフォルト候補ホスト名は、後述するS107において、取得したホスト名と初回に比較される場合の候補ホスト名となる。
【0027】
図5のフローチャートは、他装置(機器2)のホスト名を取得する取得手順(S104)と、該取得した他装置のホスト名と異なる自装置のホスト名の候補文字列を生成する生成手順(S113)と、候補文字列をホスト名として設定する設定手順(S109)とを備え、重複しないホスト名を設定するホスト名設定プログラムであり、ホスト名設定方法を示す。また、ネットワークインタフェース304は、他装置(機器2)のホスト名を取得し、CPU201は、該取得した他装置のホスト名と異なる自装置のホスト名の候補文字列を生成し、候補文字列をホスト名として設定する。
【0028】
本実施の形態では、デフォルト候補ホスト名を機器の属性を示す「printer」とするが、例えば「tv」、「camera」、「videocamera」、 「digitalcamera」、「player」、「modem」など、他の文字列でもかまわない。さらに、ホスト名に機器の製品名を示す文字列、例えば、「pixus950i」「pixus850i」、「lbp900」でもかまわない。さらに、「canon」などのメーカー名が含まれていても、無論かまわない。デフォルト候補ホスト名は、その機器を判別する際にわかりやすいものが望ましい。またDNS関連のRFC(K. Harrenstien、M. Stahl、E. Feinler、「DOD INTERNET HOST TABLE SPECIFICATION」、RFC952、October 1985とR. Braden、「Requirements for Internet Hosts −− Application and Support」、RFC1123、October 1989)で規定された文字のみを使用するのが望ましい。
【0029】
具体的なスタート時は、例えば電源ONされた機器3がリンクローカルネットワーク1にコネクタで接続されたときや、接続されていたが電源OFFだった機器3が電源ONされたときなどが相当する。機器3のCPU301が、ROM303内のプログラム、もしくはROM303からRAM302にコピーされたプログラムを起動して実行開始となる。CPU301は、このプログラムを実行するコンピュータである。スタート時、S103で生成される名前解決リスト(後述)にデータが記録されていた場合、初期化しておく。
【0030】
また、機器3は、S110に遷移して終了するまでの間に、他ホストからホスト名を問い合わせるNI Queryを受信した場合、Codeフィールド 0(ゼロ)、データフィールド 空のNI Replyを返信するように設定されている。
【0031】
スタート後、S102において、CPU301はRFC2460に従い、ネットワークインタフェース304のMACアドレスよりインタフェースIDという64ビットのIDを生成する。ここで、ネットワークインタフェース304にMACアドレスのような数字がない場合は、RFC2460に詳細に記述されて処理を行う。次に、インタフェースIDとfe80::/64というリンクローカルを示す64ビットのプレフィックスを併せ、リンクローカルアドレスを生成する。次に、リンクローカルアドレスが同じリンクローカルネットワーク1内で重複しないかどうか、重複アドレス検出(Duplicated Address Detection、以下DADと記す)を行う。重複したアドレスがリンクローカルネットワーク1上に存在しなかった場合、生成したリンクローカルアドレスを設定し、使用可能とする。重複した場合、別のリンクローカルアドレスを生成し、同様にDADを試行し、重複するか再び検査する。何度か試行してリンクローカルアドレスを設定できない場合、NOとなり、S110に遷移し終了する。
【0032】
S102においてリンクローカルアドレスを設定できた場合、YESとなり、S103に遷移する。
【0033】
S103において、他のホストが存在するか検査する。具体的には、CPU301はリンクローカルオールノードマルチキャストアドレス(ff02::1)宛にICMPv6エコー要求メッセージを送信し、ICMPv6エコー応答メッセージが返信されるかチェックする。ここで、機器3(自分)以外の機器からのICMPv6エコー応答メッセージがない場合、リンクローカルネットワーク1上には自分以外の機器が存在しないと判断できるので、NOとなり、S109に遷移する。S109において、CPU301はデフォルト候補ホスト名をホスト名として有効にし、ネットワーク参照される(他機器からNI Queryによるホスト名の問い合わせがあった場合、この有効となったホスト名を含めたNI Replyを返すようにする)ようにし、S110に遷移して終了する。
【0034】
機器3(自分)以外の機器からのICMPv6エコー応答メッセージがある場合、リンクローカルネットワーク1上に他の機器が存在すると判断できるので、S103はYESとなり、図6に示される名前解決リスト(後述)をRAM302もしくは読み書き可能な記録媒体上に生成し、S104に遷移する。図3の例では、機器2が存在し、機器2がICMPv6エコー応答メッセージを機器3に返信する。機器3は、返信があった場合、その返信の送信元アドレスを収集し、RAM302内の図6に示すようなリストに記録しておく。これを名前解決リストと称することにする。図6の管理番号とは、返信された送信元アドレスに順番に振った管理上の番号であり、1から昇順に振られるものとする。ただし、この管理番号は名前解決リスト内で一意に送信元アドレスを区別できればよい。さらに送信元アドレスをキーとしてリストを管理することも可能であるので、管理番号はなくてもよい。また名前解決リストはRAM302内に必ずしも存在する必要はなく、読み書き可能な記録領域、例えばハードディスクなどでも問題ない。図3の例では、機器2のIPv6アドレスが記録される。S103において図6に示すように生成した名前解決リストは、名前解決処理に以後使用できるので、リスト生成後、アプリケーションソフトウェアは名前解決の必要がある場合、図6に示したリストを参照してもよい。
【0035】
S104において、機器3は、RAM302に記録した送信元アドレスを送信先アドレスとしたNI Queryを生成、送信し、相手機器のホスト名取得を行う。ここで、NI Queryの送信は、Ethernet(登録商標)やIEEE802.3で用いられているExpornential Backoffアルゴリズムに従い、再送するものとする。例えば、台形型バイナリ・エクスポーネンシャル・バックオフ(truncated binary exponential backoff)を用いて、再送信間隔TをT[ms]=10×nで決定されるものとする。整数nは0≦n<(2のk剰)の範囲からランダムに選択する。ただし、kは衝突回数で最大値は10であり、10回試行されるものとする。このアルゴリズムはEthernet(登録商標)において長年用いられてきたものであり、混雑時には確率的に再送時の衝突の可能性を減らし、非混雑時には再送遅延が小さくなるように設計されている。
【0036】
S105において、NI Replyが返信されたか確認し、NI Reply中に通信相手のホスト名が含まれているかチェックする。ここで、NI Replyがタイムアウトその他の理由により1つも返信されない場合や、NI Replyが返信されたが、コードフィールドの値が1で、ホスト名の返答を拒否され、ホスト名が1つも含まれていなかった場合、NOとなり、S109に遷移する。コードフィールドの値が1もしくは2の場合、図6に示すような名前解決リストにおいて、対応する機器のIPv6アドレス、管理番号、ホスト名の部分を全て削除する。ただし、後述のコードフィールド0、データフィールド空のNI Replyが返答された場合、ホスト名が含まれていると判断することとする。ホスト名を設置中の機器は、このようなNI Replyを返答する。このようなNI Reply が返答された場合、図7において、そのIPv6アドレスは記述されているが、ホスト名の部分が空になる。もし、機器2がホスト名を設定中であれば、管理番号1の行は、IPv6アドレス「fe80::1001」が記述されるが、ホスト名の部分は、空のままとなる。S105がNOとなれば、S109において、候補ホスト名をホスト名として有効にし、ネットワーク参照されるようにし、S110に遷移して終了する。
【0037】
S105において1つ以上のホスト名を取得できた場合、図7に示すように、RAM302内にS103で生成された名前解決リストで、対応するIPv6アドレスの行にホスト名を記録する。図3の例では、機器2のIPv6アドレス「fe80::1001」と同じ行に、機器2のホスト名「printer」が記録される。1つ以上のホスト名を取得できたので、YESとなり、S106に遷移する。
【0038】
S106において、ホスト名設定中の他機器がないかチェックする。具体的には、図7において、IPv6アドレスは記述されているが、ホスト名の部分が空である行がないか、チェックする。なければNOとなり、S107に遷移する。図3の例ではないので、S107に遷移する。あればYESとなり、図11のS1101に遷移する。図11のアルゴリズムについては、後述する。
【0039】
S107において、取得した全てのホスト名と、候補ホスト名を比較する。1回目の比較の際は、ROM303内に記録されているデフォルト候補ホスト名を読み出し、候補ホスト名とする。デフォルト候補ホスト名をRAM302内に一時書き出して候補ホスト名として使用してもよい。こうして用意した候補ホスト名を、図7で示した「printer」といった取得したホスト名の文字列と一致するか比較する。
【0040】
S108において、重複するホスト名があったか判断する。本実施例では、候補ホスト名である「printer」と、取得したホスト名である「printer」が一致するので、YESとなり、S111に遷移する。もし取得した複数のホスト名に、候補ホスト名「printer」と一致するものがなければ、NOとなる。その場合、S109に遷移し、S109において、候補ホスト名をホスト名として有効にし、ネットワーク参照されるようにし、S110に遷移して終了する。
【0041】
S111において、試行回数をインクリメントする。例えば、試行回数の初期値が0だとすると、ここで1インクリメントされるとすれば1となる。S111においてインクリメント、と記述したが、デクリメントでもかまわない。つまり、何回試行したかカウントできれば問題ない。
【0042】
S112において、試行回数が試行限度回数を超えたかチェックする。例えば、試行限度回数が5回であるならば、今回、試行回数は1であるので、試行限度回数より大きくないのでNOとなり、S113に遷移する。S112において、試行回数が試行限度回数を超過した場合、S110に遷移し終了となる。
【0043】
S113において、新たな候補ホスト名を生成する。候補ホスト名を生成するアルゴリズムは既に色々提案されている。本実施の形態では、図8に示す方法を行う。
【0044】
図5のS113より図8のS801に遷移してスタートする。S811において、試行回数がN回以上かチェックする。N回は、このアルゴリズムを組み込む機器の種類によって異なってくる。本実施の形態では仮にN=10とする。S811において、試行回数がN回以上ならYESとなり、S821に、N回より少ないならS812に遷移する。S812において、シーケンシャルな処理を基本とした新たな候補ホスト名を生成し、S831に遷移して、候補ホスト名生成アルゴリズムは終了する。S811でYESとなり、S821に遷移した場合、S821において、試行回数がN+S回以上かチェックする。S回は、S822で行う処理を何度行うかという回数である。先のN回と同様、このSも組み込む機器や環境を想定して設定すべき値である。本実施の形態では、仮に5回とする。ここで、試行回数がN+S回より少ない場合、S822に遷移する。S822において、ランダムな処理を基本とした新たな候補ホスト名を生成し、S831に遷移して終了する。
【0045】
一方、試行回数がN+S回以上の場合、新たな候補ホスト名を生成せず、S831に遷移し終了となる。なお、試行回数がN+S回になると、S112がYESになるように、S112の試行限度回数を設定しておけば、S821のチェックは、不要である。すなわち、デフォルト候補ホスト名と、S104で取得したホスト名の比較を1回目の試行とすると(すなわち、試行回数の初期値を1とすると)、2回目の試行からN回目の試行の前までは(例えば、2回目から9回目の試行は)、S812で、新たな候補ホスト名を生成し、N回目の試行からN+S回目の試行の前までは(例えば、10回目から14回目の試行は)、S822で、新たな候補ホスト名を生成し、N+S回目(15回目)の試行は、行わずに(S112がYESとなるので、図8の処理には進まず)、終了する。
【0046】
図8に示したアルゴリズムでは、シーケンシャルな処理を先に試行し、ランダムな処理を後に試行するようにしている。これは、例えばprinter1, printer2 ,printer3, printer4, …といったシーケンシャルな番号がついたホスト名のほうが、printer82734724, printer74387284, …といった乱数がつくホスト名よりも、人間が把握しやすいためである。
【0047】
したがって、IPv6通信機器が複数台同時に起動しない場合は、シーケンシャルな番号が振られた、人間にとって識別しやすいホスト名を自動的に設定できる、という効果が得られる。
【0048】
S812の処理の一例を図9、S822の処理の一例を図10にそれぞれ示す。
【0049】
図9で示すアルゴリズムはS901からスタートする。S902において、古い候補ホスト名からデフォルト候補ホスト名を除去する。図3の例の場合、古い候補ホスト名は「printer」であり、デフォルト候補ホスト名は「printer」であるので、除去すると文字列なし(NULL)となる。S911において、除去した結果がNULLであるか判定する。NULLであればYESとなり、S912に遷移する。そうでなければNOとなり、S913に遷移する。S912において、除去した結果がNULLであった、つまり古い候補ホスト名には数字が付与されていなかったので、1をデフォルト候補ホスト名の後ろに加え、新しい候補ホスト名とする。図3の例では、S912に遷移し、デフォルト候補ホスト名は「printer」であるので、新しい候補ホスト名は「printer1」となる。その後、S921に遷移して終了する。
【0050】
S911においてNULLでなかった場合、S913に遷移する。例えば、古い候補ホスト名が「printer3」であるとすると、デフォルト候補ホスト名「printer」を除去した結果は「3」となり、S911からS913に遷移する。S913において、数字に1をインクリメントし、デフォルト候補ホスト名の後ろに加え、新しい候補ホスト名とする。例えば、「3」がS913に入力された場合、3に1をインクリメントし「4」となり、その値をデフォルト候補ホスト名「printer」に加え、「printer4」が新しい候補ホスト名として生成される。
【0051】
図10で示すアルゴリズムはS1001からスタートする。図9のS902、S911と同様に、S1002、S1011において、古い候補ホスト名からデフォルト候補ホスト名を除去し、その結果がNULLとなるか判断する。除去した結果がNULLでない場合、NOとなり、S1013に遷移する。S1013において、乱数を生成し、S1011で除去された結果である数字と同じ場合は、違う数字となるまで乱数の生成を繰り返す。除去された結果である数字と異なった場合、生成した乱数をデフォルト候補ホスト名の後ろに加え、新しい候補ホスト名とし、S1021に遷移して終了する。例えば、S1011において除去した結果が「10」である場合、S1013において乱数を生成する。仮に乱数を「72683741」とすると、乱数は「10」と一致しないので、デフォルト候補ホスト名「printer」のうしろに加えて「printer72683741」という新しい候補ホスト名を生成し、S1021に遷移して終了となる。
【0052】
本実施の形態では、図9で、デフォルト候補名の後ろに数字が加えられているので、図8で示したアルゴリズムのおいて、S1011がYESとなって、S1012を通過することはありえないが、ここでは、アルゴリズムの整合性という観点から記述しておく。S1012に遷移してきた場合、乱数を生成し、デフォルト候補ホスト名のうしろに生成した乱数を加え、新しい候補ホスト名とし、S1021に遷移して終了する。例えば、S1012において、「82749273」という乱数が生成され、デフォルト候補ホスト名の後ろに加えられ、「printer82749273」という新しい候補ホスト名が生成される。しかしながら、S822の処理は、S1002で、デフォルト候補ホスト名を除去し、S1013で、新たな乱数を加えるだけで、十分である。
【0053】
以上、図5のS113で行われる処理について、図8、9、10を用いて具体的に説明した。
【0054】
ここで図5のS113の処理後に説明を戻す。S113において新しい候補ホスト名が生成されたら、S107に遷移する。S107において、再び、生成された新たな候補ホスト名と、取得したホスト名を比較する。以後S108において重複するホスト名がない場合(NO)となるか、S112において試行限度回数を超える(YES)となり、S110に遷移するまでS107からS113の処理を繰り返す。図3の例では、初回、候補ホスト名は「printer」であり、図7で示した取得したホスト名のリストに、「printer」というホスト名が存在したので、S108において重複するホスト名ありと判断した。その後、試行回数は初期値0(ゼロ)とすると、S111において1インクリメントされて1となる。S112においてインクリメントされた試行回数「1」は、試行限度回数を「15」とすると、試行限度回数を超えていないのでS113に遷移する。S113において、試行回数は1なので、図8、図9で示したアルゴリズムにより処理され、新たな候補ホスト名として「printer1」が出力される。S113からS107に遷移し、再び比較が行われる。新たな候補ホスト名である「printer1」は、図7R>7で示したリスト内のホスト名のどれとも一致しないので、NOとなり、S109において「printer1」が、重複しない、機器3のホスト名として有効になり、ネットワーク参照されるように設定される。そして、S110において終了する。
【0055】
すなわち、本形態では、S104で、ネットワークインタフェース304により、ネットワークに接続されている装置(機器2)のホスト名を取得し、CPU301は、取得したホスト名と重複しないホスト名を、自装置のホスト名に設定する。ROM203には、ホスト名の候補が記憶されており、CPU301は、このROM203に記憶されているホスト名が、他の装置(機器2)のホスト名と重複しなければ、このROM203に記憶されているホスト名を、自装置のホスト名に設定する。CPU301は、このROM203に記憶されているホスト名(デフォルトホスト名)が、他の装置(機器2)のホスト名と重複していれば、他の装置(機器2)のホスト名と重複しないように、このデフォルトホスト名(printer)に、付加情報(数字)を加えて、自装置のホスト名に設定する。この付加情報は、数字に限らず、アルファベットでもよい。
【0056】
図11で示されるアルゴリズムについて記す。図11で行われる処理は、図5のS106がYESとなった場合に実行される処理であり、本提案が同時に2台以上の機器で実行された場合に発生する。このような場合が想定されるケースとしては、例えば、停電後電源スイッチがONのままの複数の機器が、停電復帰後、一斉に起動した場合などが考えられる。図11で示す処理は、そのような場合の一例の処理である。図11で示す処理について説明する。
【0057】
図5のS106において、ホスト名設定中の機器(ホスト名が未設定の機器)が発見された場合、S1101に遷移する。S1101においてスタート後、S1111において、乱数を生成し、デフォルト候補ホスト名の後ろに加えて新しい候補ホスト名とする。例えば、デフォルト候補ホスト名が「printer」の場合、乱数「34827397」が生成され、候補ホスト名「printer34827397」が生成される。
【0058】
生成後、S1112においてある時間待つ。これは、複数機器の同時起動を考慮した待ちである。例えば、先に説明したExpornential Backoffアルゴリズムを用いて待機する。ある時間待ったら、S1113に遷移する。
【0059】
S1113において、名前解決リストより、ホスト名設定中の機器に対してNI Queryを送信する。ここで、ホスト名設定中の機器は、名前解決リスト中ではIPv6アドレスが記述されているが、ホスト名の部分が空として表現される。
【0060】
S1114にてNI Replyを受信後、NI Replyから送信元アドレスとホスト名を読み出し、名前解決リストに記述する。ここでNI Replyの処理は、先に、S105で述べたように、コードフィールドが1もしくは2である場合、対応するIPv6アドレスのある行を削除する。コードフィールドが0である場合、データフィールドよりホスト名を読み出す。すなわち、ホスト名が未設定の装置がネットワークに接続されている場合には、再度、ホスト名を取得する。
【0061】
S1121において、S1111において生成した候補ホスト名が、名前解決リストのホスト名と重複するかチェックする。重複したら、YESとなり、S1111に戻る。重複しなかったらNOとなり、S1131に遷移する。
【0062】
S1131において、設定中の機器がないかチェックする。具体的には、名前解決リストでホスト名の部分が空の行がないかチェックする。あればNOとなり、S1112に遷移する。なければYESとなり、S1111で生成した新しい候補ホスト名は、機器3のホスト名として有効になり、ネットワーク参照されるように設定し、S1141に遷移して終了する。S1141で終了後、図5のS110に遷移し、本提案のアルゴリズムは終了となる。S1121とS1131を行う順番は、逆でもよい。また、好ましい実施例では、S1121でYESとなる回数、S1131でNOとなる回数をカウントし、再試行の回数を制限する。ホスト名を設定できない場合、図5のS110で終了後、例えばユーザに「ホスト名の自動設定ができませんでした」などといったメッセージを表示する、「ホスト名自動設定失敗ランプ」を点灯させるなどのエラー表示を行ったほうがよい。
【0063】
以上の処理により、以下のことが実現された。リンクローカルネットワーク1において、「printer」というホスト名を持つ機器2が存在する状況において、新たな機器3をリンクローカルネットワーク1に追加すると、機器3は、機器2のホスト名を自動的に取得して機器2のホスト名と重複しないホスト名「printer1」を自分自身に設定した。つまり、機器3は、リンクローカルネットワーク1において、重複せず人間が判別しやすいホスト名を自動的に設定した。
【0064】
また、デフォルト候補ホスト名に文字列を付加するという方式により、結果的に設定されるホスト名は、「デフォルト候補ホスト名+文字列」という型となる。これより、人間がホスト名を見たとき、ホスト名のデフォルト候補ホスト名部分により、機器がデフォルト候補ホスト名に関するグループである、ということを瞬時に知ることが可能となる。例えば、図3の例では「printer」というデフォルト候補ホスト名を用いたので、機器がプリンタに属すると容易に識別可能である。さらに、デフォルト候補ホスト名が製品名、メーカー名、その他の場合、その命名による識別効果を得ることができる。
【0065】
これにより、外部のインターネットと接続せず、名前解決を行うサーバが存在しない、一時的なアドホックネットワークが発生する場合、ホスト名を人間が手動で機器に設定する必要なく、機器を自動的に設定されたホスト名で指定できるようになるので便利である。例えば、複数のノートパソコンと複数のプロジェクターを用いた会議において、ノートパソコン内の資料をプロジェクターに転送して表示する際、プロジェクターを簡単なホスト名で指定可能となる。
【0066】
以後、好ましい実施の形態では、例えば機器2が機器3にNI Queryを送信し、機器3のホスト名を取得する。機器3以外の各機器が、NI Queryの送信元に、ある時間待機してからNI Queryを送信し、機器3のホスト名を取得するようにすれば、DNSサーバなしで、リンクローカルネットワーク1上に存在する機器の名前解決(ホスト名からIpv6アドレスへの変換)を、全ての機器が行うことが可能となる。
【0067】
また、機器を複数台追加するときも、同様に行える。充分な時間間隔を持って、1台ずつ追加するのであれば、機器3を追加したときと同様に、問題なくホスト名を自動的に設定することが可能である。また、複数台同時に追加したときも図11の処理があるので対応可能である。
【0068】
―機器をネットワークから除去する場合―
図12のように、リンクローカルネットワーク1上に、機器2、機器3が接続されている状況を想定する。ここで、機器2のRAM202には図13に示すIPv6アドレスとホスト名のリストが、機器3のRAM302には図7に示すリストが、先の機器をネットワークに追加する場合で説明した方法を用いて記録されているものとする。
【0069】
このような状況において、機器2がリンクローカルネットワーク1から除去された場合を想定する。除去だけでなく、電源OFFなど、通信不可能になった場合でも同様である。
【0070】
上記状況において、機器3は機器2への通信が発生するまで何も行わない。機器2のホスト名を指定した通信が発生したら、機器3は図7の名前解決リストを参照し、機器2のIpv6アドレスを用いて、機器2への通信を試みる。通信が成功した場合、何も行わない。その通信にエラーが発生した場合、図14に示すアルゴリズムがスタートする。このアルゴリズムは、CPU301が実行するプログラムである。機器3のCPU301は、ROM303内のこのプログラム、もしくはROM303からRAM302にコピーされたこのプログラムを起動して実行開始する。CPU301は、このプログラムを実行するコンピュータである。図14において、S1401でスタート後、S1402において、相手機器への通信がタイムアウトで失敗したか判定する。タイムアウトで失敗した場合、YESとなり、S1403に遷移し、名前解決リストから通信が失敗したIPv6アドレスと対応するホスト名を削除し、S1404に遷移して終了する。S1402において、それ以外の原因で通信が失敗した場合、何もせずにS1404に遷移して終了とする。
【0071】
―機器をネットワークから除去し、再び追加する場合―
前述の「機器をネットワークから除去する場合」ののち、再び機器2を追加する場合を想定する。機器2も、最初の「機器をネットワークに追加する場合」の機器3と同様の動作をするものとする。
【0072】
リンクローカルネットワーク1において、機器3が「printer1」というホスト名で動作している。ここで機器2を追加すると、図5のS108において、候補ホスト名「printer」と取得した(機器3の)ホスト名「printer1」の比較の結果、一致しないのでNOとなる。NOとなるのでS109に遷移し、機器2は「printer」をホスト名として使用可能となる。
【0073】
(第2の実施の形態)
第1の実施の形態では、他の機器のホスト名を取得するために、最初にICMPv6エコー要求メッセージを送信して、返答があった機器に対してのみNI Queryを送信していた(図5を参照)。しかし、図15に示すように、ICMPv6エコー要求を送信せず、NI Queryをリンクローカルオールノードマルチキャストアドレスに送信してもよい。
【0074】
図5と図15の違いは、S1501からS1503に示した部分だけであるので、その部分についてのみ説明する。それ以外の動作は実施例1と同様なので省略する。
【0075】
図15のS102において、IPv6アドレスを設定後、S1501に遷移する。
【0076】
S1501において、CPU301はNI Queryを生成し、リンクローカルオールノードマルチキャストアドレス宛に送信する。S1502において返信があったかチェックする。なければNOとなり、S109に遷移し、候補ホスト名(ここでは比較が発生しなかったのでデフォルト候補ホスト名)をホスト名として有効にし、S110に遷移して終了となる。あればS1503に遷移する。S1503において、返信されたNI Replyにホスト名が含まれていたかチェックする。なければS109に遷移して、上記と同様の処理を行う。あればS106に遷移し、以後、第1の実施の形態で説明したように処理を継続する。
【0077】
(第3の実施の形態)
第1の実施の形態において、図9で示したシーケンシャルな候補ホスト名生成アルゴリズムは、処理が単純ではあるが、N個以上の機器にシーケンシャルな番号つきのホスト名をつけることができなかった。
【0078】
図16に示したシーケンシャルな候補ホスト名生成アルゴリズムは、ソートが必要ではあるが、NI Queryを行った時点において、最大の番号を持つホスト名の次の番号を設定することが可能となる。
【0079】
図16において、図8のS812より遷移してS1601よりスタートとなる。また、図5R>5のS112がNOの場合に実行するS113の処理として、図16の処理を実行するようにしてもよい。S1602において、CPU301は、RAM302内の名前解決リスト内に記録した複数のホスト名のうち、デフォルト候補ホスト名と前方一致するホスト名から、デフォルト候補ホスト名を除去する。例えば、複数のホスト名として、printer1, printer2, …,printer99, printer100、cameraの101種があり、デフォルト候補ホスト名が「printer」であるとする。前記101種に対し、「printer」で前方一致検索すると、cameraは一致しないので、printer1, printer2, …,printer99, printer100までの100種が前方一致したホスト名となる。ここで、前方一致した複数のホスト名からデフォルト候補ホスト名を除去する。すると、1,2、…99、100という数字が得られる。
【0080】
S1603において、除去した後の数字をソートする。前記の例だと、1から100までの数字がソートされる。
【0081】
S1604において、最大の数字に1をインクリメントしてデフォルト候補ホスト名の後ろに加えて、新しい候補ホスト名とする。例えば、先の例で最大の数字は100であるので、1をインクリメントし、101となる。この数字を、デフォルト候補ホスト名「printer」の後ろに追加し、「printer101」という新しい候補ホスト名を生成する。
【0082】
その後、S1605に遷移し、終了となり、図8のS831に戻る。以降は、S1604で生成したホスト名をホスト名として有効にする。
【0083】
なお、図5のS106で設定中の機器が合った場合に、図11のS1112、1113、1114を実施して、他の機器のホスト名を取得した後に、図16の処理により、取得したホスト名から自装置のホスト名を設定することもできる。
【0084】
また、図15のステップS1501、1502、1503を実施して、他の機器のホスト名を取得した後に、図16の処理により、取得したホスト名から自装置のホスト名を設定することもできる。
【0085】
(他の実施例の形態)
本発明の前提として、名前解決を行うサーバ(例えばDNSサーバ)が存在しない環境を前提としたが、名前解決を行うサーバが存在しても、登録を行わない限り問題はない。
【0086】
NI Queryによるホスト名の問い合わせに返答せず、名前解決サーバにホスト名を登録している機器(仮に機器1とする)があるとする。例えば「camera」というホスト名であるとする。ここで、リンクローカルネットワーク上に機器1と名前解決サーバのみが存在する状況で、他の機器(仮に機器2とする)が本発明の仕組みを使用した場合を想定する。機器2が本発明の仕組みを使用し、機器1にNI Queryを送信しても返信がない。その場合、機器2はデフォルト候補ホスト名をホスト名として使用する。例えばそれが「camera」というホスト名であっても、機器2のホスト名を名前解決サーバに登録しなければ、名前解決サーバ上で機器1のホスト名と衝突しないので問題ない。
【0087】
【発明の効果】
以上説明したように、本発明によれば、ホスト名を管理するサーバが存在しない状況でも、重複しないホスト名を設定することが可能となる。
【図面の簡単な説明】
【図1】第1の実施の形態で本発明を適用するネットワークの図である。
【図2】第1の実施の形態で本発明を実施する機器2の一般的な構成を示す図である。
【図3】第1の実施の形態で本発明を適用する状況を示す図である。
【図4】第1の実施の形態で本発明を実施する機器3の一般的な構成を示す図である。
【図5】第1の実施の形態の動作を示すフローチャート図である。
【図6】名前解決リストの例を示す図である。
【図7】名前解決リストの例で示す図である。
【図8】候補ホスト名生成アルゴリズムを示すフローチャート図である。
【図9】候補ホスト名生成アルゴリズム内で、シーケンシャルな処理を基本とした候補ホスト名を生成するアルゴリズムを示すフローチャート図である。
【図10】候補ホスト名生成アルゴリズム内で、ランダム処理を基本とした候補ホスト名を生成するアルゴリズムを示すフローチャート図である。
【図11】設定中の機器が発見された場合に動作する候補ホスト名生成アルゴリズムを示すフローチャート図である。
【図12】機器3をリンクローカルネットワーク1から除去する場合を説明するための図である。
【図13】機器2に記録されている名前解決リストの例を示す図である。
【図14】機器を除去するときに行うアルゴリズムを示すフローチャート図である。
【図15】図5のアルゴリズムと、ホスト名収集方法が異なる場合の動作を示すフローチャート図である。
【図16】図9で示したアルゴリズムと別のシーケンシャルな処理を基本とした候補ホスト名を生成するアルゴリズムを示すフローチャート図である。
【符号の説明】
1 ネットワーク
205 バス
305 バス

【特許請求の範囲】
【請求項1】
他装置のホスト名を取得する取得手順と、
該取得した他装置のホスト名と異なるホスト名を自装置のホスト名として設定する設定手順とを備え、
重複しないホスト名を設定することを特徴とするホスト名設定方法、ホスト名設定プログラム、または、該ホスト名設定方法を実行する通信装置。

【図1】
image rotate



【図2】
image rotate



【図3】
image rotate



【図4】
image rotate



【図5】
image rotate



【図6】
image rotate



【図7】
image rotate



【図8】
image rotate



【図9】
image rotate



【図10】
image rotate



【図11】
image rotate



【図12】
image rotate



【図13】
image rotate



【図14】
image rotate



【図15】
image rotate



【図16】
image rotate