dns
ドメイン
domain
punycode

国際化ドメイン名(IDN)でマルチバイト文字を含め最長何文字のラベルを作れるのか

More than 3 years have passed since last update.

通常の英数字およびハイフンのみが許されるドメイン名の場合、ラベルは最長63文字となる。これはDNSのプロトコル上の制限によるものである。

国際化ドメイン名(IDN)の場合も同じ制約が適用される。ただし、IDNの場合はマルチバイト文字からPunycodeに変換した後の文字数が63文字以下でなくてはならない。元のマルチバイト文字の利用文字や順序によってPunycode変換後の文字数が変わるため、マルチバイト文字で何文字使えるかは自明ではない。

そこで、理屈上マルチバイト文字を何文字まで入れ込めるのかについて考えてみた。長い国際化ドメイン名を取るような場合の目安になれば幸いである(?)


日本語ドメイン名の場合

いわゆる日本語ドメイン名の場合、マルチバイト文字57文字が最長。


  • 例: あああああああああああああああああああああああああああああああああああああああああああああああああああああああああ.jp (xn--l8jaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.jp)

ただし、これほどの文字数が入るのは同じ文字を連続したような場合に限られる。というのも、Punycodeでは同じ文字が繰り返されると圧縮効率が高くなる性質があるためである。

同じ文字を使ってはいけないルールだと、マルチバイト文字44文字が最長のような気がする。


  • 例:ぁあぃだばどいぅうつぇえぉひたおかがきぎぴぞにくぐぶけげへぺそてこごさぜざしねせじずすち.jp (xn--k8jcdefghijklmnopqrstuvwxyzzzzzzzz5d5d5d5d5d5d5d5d5d5d5d5d.jp)

これは試行錯誤で作ったものなので、いずれロジカルに最長を示したい。


日本以外の国際化ドメイン名の場合

コードポイントが小さい文字を使えばもう1文字縮みそうな気がしているが、いまのところそのような文字が見つかっていない。

上記IDNテーブル中で、U+0080以降で最初に使えそうな文字はU+00DF(ß、ドイツ語のエスツェット)かと思うが、これだと「あ」と変わらず、連続57文字が最長になる。

下記のようにU+00A3(£、ポンド記号)を使ったドメインが実在するようだが、£はシンボルの一種でありドメイン名に使える文字には見えない。昔は取得可能だったが新規では取れない、といった状況かもしれない。

もしこれがIDNのルール上現在でも合法であり、受け付けているドメインがあるなら、ポンド記号(もしくはセント記号など付近の文字)の58文字連続が最長のラベルということになる。