先日、某社の障害に関して、「認証関係が怪しい」と言うお話をした際に、「そもそも携帯電話ネットワークの認証系とはどういったものでしょうか」と言うご質問をいただきました。例によって私の不得手な領域のお話なので、勉強しながら解説したいと思います。
認証と言うのは要するに「本人確認」のことなのですが、携帯電話システムにおける「本人確認」とは何を指すのかと言うところから。たとえば、ネットバンキングをする場合、個人のログインIDとパスワードを入力します。この場合、「ログインIDとパスワードを知っているのは本人だけ」と言う前提のもとに、その両方が一致した場合はそれを入力したのは本人とみなす、これが「認証」です。
では携帯電話では誰が認証されているのでしょうか。下世話な話になりますが、携帯電話を使うには、お金を払わなくてはなりません。お金を払っていない人が携帯電話ネットワークを勝手に使うことを防ぐ、それが携帯電話での認証の最初のモチベーションです。
と言っても、携帯電話で通話するたびに運転免許証の顔写真を見せて本人確認をするわけにもいきません。そこで、携帯電話では「その端末を持っているのは本人だけ」と言う前提のもと、端末に対してそれが本物かどうかの確認を行います。
で面倒な話はしたくないので、ここで先回りしておきますが、多くの方式では実際には端末そのものではなく、端末の中に入っている「SIMカード」が本物かどうかを確認します。古い方式ではそうでない場合も多いのですが、もうめんどくさいのでどっちの場合はどうとかSIMを入れ替えたらどうとかの話は無視して、端末本体とSIMカードを合わせて「端末」と今後書くことにします。
で、端末が本物かどうかをどうやって見分けるのか。これを流れに沿って書いていきます。
ある人が携帯電話に加入します。そのとき、その人に貸し出す端末には、ある特定の「ID」と「パスワードっぽい知識」が中に(生のデータが絶対に読み込めない仕組みで)書き込まれています。ショップで加入手続きをすると、携帯電話会社の方でその貸し出した端末のIDをもとに、「加入者情報サーバ」にそのIDがこれこれこういうオプションをつけて加入しましたよ、と書き込みます。
次に加入した人が、携帯端末を使おうとするときです。携帯電話の無線ネットワークは、アクセスしたいという人はとりあえず一旦受け入れることになっています。そのとき、端末は自分の「ID」を無線ネットワークに伝えなければなりません。無線ネットワークはその直後、「加入者情報サーバ」に対して「なんかこのIDのヤツが使いたいと言って来たんすけど」と問い合わせます。
そこで加入者情報サーバは、よしそいつの確認は任せろ、と言うことで、「お前、本当に「ID」本人なら、この質問に答えられるよな?」と言う感じの質問を端末に対して投げつけます。ここで端末が本人であれば、「パスワードっぽい知識」からその質問に答えることが出来ますので、端末は「はい、答えは○○っす!」と元気に返答します。
加入者情報サーバは答えを照合し、合っているっぽかったら、無線ネットワークに対して「あいつ本人に間違いないわ、世話してやってくれや」と伝えて、役目終了。後は無線ネットワークがその人が本人との前提でいろんなサービスを伝える、と言うことになります。
この「端末が本物かどうか見分ける」と言うのが、加入者情報サーバの「認証」の機能です。そのため、加入者情報サーバを含む一連の設備を「認証系」と言ったりします。
また、加入者情報サーバは、各IDの端末が今無線ネットワーク上のどのへんにいるかと言うことを大雑把に覚えておくという役目も持っています。外から電話がかかってきたとき、その電話を受けた交換機の人は、加入者情報サーバに対して「あいつ今どこ?」と聞き、加入者情報サーバは「あのへんにいるから呼んでみな」と応えるわけです。それに対して交換機は「あのへん」の無線ネットワークに呼び出しを頼み、無線ネットワークが無線一斉呼び出しの仕組みを使って、「おーいIDさーん」と呼びかけて応えがあったらつないであげる、と言う仕組み。さらにMNPに関しても加入者情報サーバが対応し、交換機から「あいつ今どこ?」と聞かれたとき「あ、MNPでよそ行ってるわ、宛先教えるからあっちに聞いてみ」と答えることでMNPが実現しています。
このため、通話の発信・着信のとき以外にも、端末と認証系での会話の機会があります。それは、電源を入れたときと、無線ネットワーク上での「あのへん」から「このへん」に移動した場合。このとき端末は、「今ここにいますよ」と言う情報を加入者情報サーバに伝えます。加入者情報サーバはその通知を受け取って、端末がどこにいるかを覚えておくわけです。ちなみに「あのへん」「このへん」の地域の大きさは、事業者のポリシーや地域特性にもよるのですが、各市区町村が10個以上には分かれていないけど1個以上をまたがることもない、という程度の大きさになっているようです。
さてもう少し深い話。上のような仕組みとはいえ、実際には何千万加入者がいて秒間何十何百と言う認証リクエストをさばかなければなりません。とても一台でそれをこなすのは無理です。そこで一般には加入者情報サーバも機能を切り分けて複数のハード/ソフトでいろいろと手分けをします。
まず、標準的な技術として、各無線ネットワークのある程度の大きさ(上の「あのへん」「このへん」)ごとに「出張所」を設けます。ある端末がある出張所の下に入ってきて「ここにいるよ」と宣言したら、加入者情報サーバから出張所に加入者情報を一時的にダウンロードします。その後は、その端末がその出張所管理エリアから出ない限りは、すべての認証作業は出張所が代わりに行うことになります。
次に各事業者・ベンダごとの構成の話になりますが、基本的にこの手のシステムでは、「端末と会話する係」と「データベースを持つ係」は分離してあったりすることが多いようです。端末と会話する係(フロントエンドサーバ)はひたすら端末との会話処理を行い、必要なときだけデータベースを持つ係に情報をもらう、と言う役割分担を行うわけです。
また、データベースを持つ係(データベースサーバ)も、持っている加入者情報(レコード)の数が増えると処理負荷がどんどん増えます。さすがに一人で何千万もレコードを持っていては大変なので、ここでもたとえばIDの範囲によって何台ものサーバで分担することになります。IDの上5桁が00001番から01000番まではAサーバ、01001番から02000番はBサーバ、みたいに分けてしまうわけです。で、フロントエンドサーバは、問い合わせのあったIDによって、どのサーバに問い合わせるかを振り分けます。
さてここで障害の話。たとえば、Aデータベースサーバへのアクセス負荷が何らかの原因で急上昇してしまったとします。いろんな原因が考えられますが、たとえばデータベース内のデータがぶっ壊れたのでミラーから書き戻すプロセスが走っているとか、Aサーバの繋がっているスイッチのポートが軽く壊れちゃったとか、そういう状況。すると、Aデータベースへの問い合わせに対する反応が少しずつ遅くなります。一つ一つはわずかな遅れでも、それは徐々に蓄積していきます。それがついに「端末/無線ネットワークが痺れを切らすほどの待ち時間」になると、端末か無線ネットワークから「聞こえなかったかな?もう一回問い合わせ送るね」と言う余計なことが始まります。この余計なことがさらに負荷を押し上げます。
で、この「聞き直し」でもダメだったら、端末は本人確認が失敗したということで「接続失敗」となるわけです。しかし端末を使っている人はいきなり「失敗です」と言われても納得行かないわけで、たいていはもう一回試してみます。この「もう一回」をいろんな人がやり始めることで、さらにさらに問い合わせ数が増え、Aサーバ周りの負荷が増大していくことになります。
ここでこの問い合わせ失敗による接続失敗が起きているのはAサーバに保存されている加入者、IDが00001番から01000番までの人に限られていることがポイント。先日の某社の障害で、「関東で契約したうちの○○万人が対象」ってことは、多分この分割したデータベースサーバのどれかが落ちていた状態だったのでしょう。また、他の地域で使ってたりMNPしてたりしても影響を受けたのも、そういった場合の返答をするのもこのサーバの役割だったからです。
また、朝の通勤ラッシュ時間帯と言うことも障害に拍車をかけます。先ほども書いたとおり、「あのへん」から「このへん」に移動すると、そのときも端末は加入者情報サーバへ自分の位置を登録しようとします。このとき同時に、通話のときと同じ「認証」も走るし「出張所へのダウンロード」も発生するため、実は単なる通話以上に負荷がかかります。そして通勤ラッシュ時と言うのは、とんでもない数の人がそこそこ長い距離を一斉に移動すると言う時間帯。つまり、とんでもない数の人が相当な頻度で一斉に加入者情報サーバへ負荷をかけるという意味です。軽い障害による軽い負荷上昇でも、この時間帯に起これば大規模障害の引き金になりかねないというわけです。
と言うことで、余り細かい技術やインターフェースや用語にこだわらずに大雑把に説明してみましたが、いかがでしょうか。逆に、全部の用語をきっちり説明しろと言われても結構厳しいので、今日のところはこの辺でご勘弁をお願いいたしたく候。でわ。
[…] そしてもう一つ、これはレアなケースですが、ネットワークの「ここにいますよ」を受け取る装置が故障中の場合。認証系のお仕事で書いた加入者情報サーバのことです。このサーバかこのサーバに繋がるルート上のどこかが故障していると、やはり「オッケー分かった」の返事がもらえません。と言うことは、電波は十分に強いのに圏外表示ということも起こってしまうのです。 […]