キャリア・グレードNATでは,膨大な数の既存インターネット・ユーザーを収容できるだけの規模が求められます。キャリア・グレードNATの配下に収容するのは,従来はグローバルIPアドレスを割り振っていたユーザーです。そのユーザーを多数収容するのですから,従来のルーターやファイアウォールとは比べ物にならないほど大量の,グローバル・アドレスとプライベート・アドレス,ポート番号の関連付けを表す「セッション」を処理できることが求められます。
セッションを管理する際には,「NATテーブル」という情報を使います。NATテーブルは,セッションの情報を保持するデータで,キャリア・グレードNAT装置のメモリー上に置かれます。これは,パケットをNATでどのように変換するかを示す「道しるべ」と考えればいいでしょう。
32ビットOSでは管理できないメモリー量が必要
では,NATテーブルはどのくらいのメモリーを必要とするのでしょうか。筆者が開発に携わったキャリア・グレードNAT用のソフトウエアの場合,1セッションを処理するのにだいたい130~140バイトのメモリーを消費すると試算しました(ネットワークバリューコンポネンツ調べ)。そして一つのグローバル・アドレスは,TCPとUDPそれぞれ6万5335個のポートを持ちます。仮に2048個のグローバル・アドレスを使ってNATの処理を実現しようとすると,TCPとUDPあわせて2億6800万セッション程度になります。
この2億6800万セッションに,1セッションを処理するのに必要なメモリー量をかけると,だいたい36Gバイトのメモリーが必要になります(図1)。このメモリーを管理するには,64ビットOSが必要になります。一般的なブロードバンド・ルーターが採用している32ビットOSでは,4Gバイト以下のメモリー空間しか管理できません。このことからも,通常のNATとの差は歴然です。
キャリア・グレードNAT(装置)の能力は,保持できるNATテーブルのサイズと,処理できるトラフィックによって決まります(図2)。もっとも,NATテーブルは常時同じ大きさである必要はありません。筆者が開発に携わったキャリア・グレードNATのソフトウエアの実装では,常に「使われているセッションの数」を扱えるだけのNATテーブルを保持するようになっています。使われなくなったセッションは,NATテーブルから廃棄される仕組みなのです。これはキャリア・グレードNATで,有限のグローバル・アドレスとポート番号を再利用するために必要な機能です。キャリア・グレードNATは,あらゆるコンピューティング資源を再利用するという考え方で構築されたシステムなのです。
さて次回は,ユーザーがキャリア・グレードNAT環境に移行した際,アプリケーションの挙動にどのような変化があり,アプリケーションの設定をどう変えていくべきなのかを整理して解説します。これは,数多くのユーザーと通信事業者にとって関心が高いところでしょう。この項目について,筆者がキャリア・グレードNAT実証環境でテストした結果をご紹介します。
ネットワークバリューコンポネンツ ニュービジネスチーム