無線LANの高速化技術の振り返り

無線LANの高速化技術を振り返ってみました。無線LANで通信速度を高速化させる要素はおおまかに言うと、以下になります。

  • 変調方式の符号化効率
  • 最大ストリーム数
  • 最大帯域幅

それぞれの意味ですが専門的なことはよくわからないので、車に荷物(通信パケット)を積んだイメージで書いてみます。

変調方式の符号化効率ですが、これは1台の車に積める荷物の量になります。一度にたくさん荷物を積めたほうが効率が良いですし、高速化の要素となります。最大ストリーム数は、車が通る道の数になります。たくさん道があったほうが渋滞はおきませんので高速で荷物を運べます。最大帯域幅は、車が通る道の幅です。道幅が広いほうがすいすい進みますので、早く荷物を届けられます。

これを踏まえて無線LAN規格がどのように高速化してきたかを表にしてみると、以下のようになります。

表には書いていませんが、無線LANの最初の規格はIEEE802.11で最大伝送速度は2Mbpsでした。それが802.11bで11Mbpsになりました。802.11aおよび802.11gではOFDM(Orthogonal Frequency Division Multiplexing)という技術を取り入れ、最大伝送速度を54Mbpsまで向上しました。OFDMは802.11ac(wifi5)まで使われています。

802.11n(wifi4)になると最大伝送速度が600Mbpsまで向上しました。11nではチャネルボンディングとMIMO(Multiple-Input and Multiple-Output)という技術を取り入れたことが大きいです。

チャネルボンディングは、1チャネルが20MHzの帯域幅をまとめて使えるようにする技術です。11gでは1つのチャネルでしたが、11nでは2つのチャネルをまとめて40MHzで使えるようにしました。MIMOは、複数のアンテナで同時にデータを送受信することで一度にたくさんのデータを送ることを可能にしました。昔の無線LANのアクセスポイントはアンテナが1つでしたが、今はアンテナがたくさんあるものが多いです。

802.11ac(wifi5)ではチャネルボンディング、変調方式、最大ストリーム数を11nのときからアップさせることで理論上の最大速度を6.9Gbpsにしています。

なお、11acではMU-MIMO(Multi User MIMO)という技術も取り入れられています。MU-MIMOとは、複数の端末で複数のアンテナを同時に使って通信速度を早める技術です。MIMOでは1台の端末がアクセスポイントの複数のアンテナを同時に使って通信速度を早めていましたが、複数のアンテナをフルに使えないときがあります。スマホなどは端末の内部にアンテナを2本しか組み込めないためアクセスポイントの残りのアンテナが余ってしまうのです。MU-MIMOであれば余ったアンテナを他の端末が使うことができ効率よく通信ができます。

802.11ax(wifi6)ではOFDMA(Orthogonal Frequency Division Multiple Access)という技術を取り入れています。OFDMでは1つのチャネルを1台の端末が占有していたのですが、OFDMAでは1つのチャネルをRU(Resource Unit)という単位で分割して複数の端末に割り当てるようにしました。これにより1つのチャネル幅を無駄なく使えるようになり理論上の最大速度は9.6Gbpsになりました。

また、11axでは11acのときと同じくMU-MIMOを使っているのですが、MU-MIMOにも変更が加わっています。11acのときのMU-MIMOでは端末は4台まででしたが11axでは最大8台まで可能となりました。また11acのときのMU-MIMOはダウンロードのみでしたが、11axではアップロードでも使えるようになっています。

最後に802.11be(wifi7)ですが、2022年5月時点で規格策定中です。11beは実測30Gbpsのスループットを目指し、2024年5月の標準化完了を目指しているようです。技術としては、MLD(Multi Link Device)という機器に搭載された複数の無線インターフェイスを連携させて、伝送路を複数確立することで高速通信を実現させるマルチリンク機能が使われるようです。

ICMPリダイレクトはどういうときに使われるのか?

ICMPの主な機能として「エラー通知」と「問い合わせ」があります。エラー通知は、パケットが何らかの理由で送信先のノードまで到達できなかった場合やパケットが経路の途中で破棄されてしまった場合、および、最適経路が他にあることを知らせたい場合に、送信元のノードにその旨のメッセージを通知する機能です。問い合わせは、特定のノードに対してネットワーク診断のために問い合わせを行い、応答を受け取る機能です。pingコマンドが問い合わせの代表的なコマンドです。

ICMPのタイプ
0:Echo Reply(エコー応答)
3:Destination Unreachable(宛先到達不能)
5:Redirect(経路変更)
8:Echo Request(エコー要求)
11:Time Exceeded(時間超過)

エラー通知で使われるタイプは「3、5、11」です。問い合わせではタイプ「0、8」が使われます。ICMPリダイレクトはタイプ5の経路変更の機能の1つです。

では、ICMPリダイレクトはどういうときに使われるのでしょうか?

これについて例を示して説明してみます。以下のようなネットワークがあったとします。パソコン1からパソコン4は、それぞれNetwork1からNetwork4に属しています。

パソコン1からパソコン4のデフォルトゲートウェイを考えてみた場合、パソコン1および2はRouter1になります。パソコン4はRouter2です。では、パソコン3のデフォルトゲートウェイはRouter1かRouter2のどちらにするべきでしょうか?

答えを言うと、どちらでも構いません。どちらを設定しても通信はできます。パソコン3のデフォルトゲートウェイをRouter1にした場合、パソコン3はパソコン4と通信ができるのか?と思うかもしれませんが、通信はできます。Router1はNetwork4がどこにあるかを知っているのでパケットをRouter2に転送してくれます。

またこのときにRouter1はパケットをRouter2に転送するだけではなく、パソコン3に対して「パソコン4向けの通信はRouter2のほうが近いから、Router2のほうに送りなさい」という旨の通知を送ります。これがICMPリダイレクトというものです。

通知を受け取ったパソコン3は次回からパソコン4向けの通信をRouter2に送るようになります。これはパソコン3が自身で持つツーティングテーブルにパソコン4向けのルーティング情報を追加することで実現します。ただこれはセキュリティ上の問題(※)となることもあり、ICMPリダイレクトを受け取ってもOSで無視する設定になっていることが多いです。

(※)悪意ある者がICMPリダイレクトを意図的に送ることで、ルーティングテーブルを好きなように書き換えることが可能となってしまうため。

実際にICMPリダイレクトのパケットをキャプチャしてみました。先ほどの例に示したようなネットワークの構築はできないので、少し小細工をしてICMPリダイレクトをキャプチャしました。

ルーター機能を持つ無線LANにパソコンA、Bを接続します。パソコンA、Bは同一のネットワークです。パソコンAからパソコンBにpingを打つと、パソコンA、B間でエコー要求とエコー応答のやり取りが行われます。

ここでパソコンAのARPテーブルを手動で書き換えます。パソコンBのMACアドレスを無線LANのものにします。これでパソコンAからパソコンBにpingを打つとどうなるかというと、パソコンAは無線LANに対してエコー要求を送ります。無線LANは自分宛てでないエコー要求が来たので、このエコー要求をパソコンBに転送します。それと同時にパソコンAにICMPリダイレクトを送ります。

ちなみに戻りのパケット(パソコンBからのエコー応答)は無線LANを経由しません。パソコンBからパソコンAに直接送られます。

このときのやりとりをWiresharkでキャプチャしたものが以下です。ICMPリダイレクトのパケットを表示しています。

赤枠がICMPリダイレクトのタイプとコードです。ICMPリダイレクトはタイプが 5、コードが 1 です。青枠の Gateway address は、無線LANが 192.168.0.7 のほうが近いから直接そちらに送りなさい、ということをパソコンAに伝えています。黄色枠には元々のパケット(無線LANが転送したパケット)が格納されています。

ちなみに今回は意図的にARPテーブルを書き換えてパケットを無線LANに向けたわけですが、これはARPスプーフィング(ARP spoofing)という攻撃手法と同じです。ARPスプーフィングはARP要求に対して偽のARP応答を返すことで不正なARPテーブルのエントリを作成させる手法です。使い方によっては便利でもあるけれど、悪用もされやすい、ということです。