Partech’93で話しのあったMACAの話しを、maca.ms という
ファイルを元に訳してみました。
私には図・表を見れる環境が無かったので、この部分は入っていません。
(たぶん、図はnewlink.psに入っているのでしょう)
誤訳なども多いと思いますが、なにかの役に立てば幸いです。
---
Phil Karn,KA9Q
キャリア検出を使用した多元接続方式(CDMA)は、シンプレックス方
式の無線パケット通信で広く使われてます。しかし、この方式では良く知ら
れている「隠れ端末の問題」が発生します。また、これはあまり知られてい
ませんが「見えすぎる端末の問題」と関連する問題でもあります。そこで、
MACA−衝突の無い多元接続−を新しく提案します。この提案は今までの
問題を解決するものです。MACAでは自動的に送信出力を制御することま
で行い、周波数の有効利用を行います。
基本的な隠れ端末の例は、「Y局ではX局とZ局の両方を受信できるが、
X局とZ局は互いに受信できない」というものです。このために、「X局か
らY局向け」と「Z局からY局向け」の衝突は、お互いに避けることができ
せん。(図1参照)
更に別な例をあげてみます(図2参照)。この場合、条件の良い(ロケー
ションが良い,設備が良いなど)X局は、Y局より遠く離れた局も受信でき
ます。このため、X局では近距離のY局と通信する場合、Y局より遠い局の
ある信号が入感するために、X局は送信を遅らせることになります。これで
は、ある周波数を近距離で使えるのに、使用できなくて利用効率が悪くなっ
てしまいます。場合によっては、遠くの局の間での通信量が多いこともある
でしょう。こうなるとX局は希にしか送信でき無くなります。これは高台に
設置されたデジピータで生じる問題と同じです。
そこで前述のような問題の発生を減らした、無線パケット通信における新
しい多元接続の方法を提案するものです。提案する方式はMACAと言いま
す。MACAはスペイン語ではなく、Multiple Access with Collision
Avoidance(衝突の無い多元接続)の略です。MACAはCSMA/CAと、
Eric Gustafson(N7CL;AX25開発者の一人)が提案した"prioritized ACK"
(優先権を認める)方式から成り立ってます。ちょっと違った理由からです
が、アップルのLocaltalk でもCSMA/CAは使われてます。
この方式の良いところは、隠れ端末等の問題の解決だけではありません。
ハード面の開発が必要ですがパケット毎に自動的に送信出力を制御すること
によって、人口密集地における近距離通信に使われる周波数の有効利用にな
ります。これはFCC勧告の「通信に必要となる最低限なパワーでの送信」
(FCC:97.313)と、「無線技術の向上への寄与」(FCC:97.1(b) )の両方に
合致したものと言えるでしょう。
Localtalk はCSMA/CAを使っているというか、そのものみたいなも
のです。ある局が他の局にデータを送りたいと思った時、まず送信要求の短
いRTSパケットを相手に送ります。これを受信した局は送信可のCTSパ
ケットを返します。CTSパケットを受け取ると、送り側は必要なデータパ
ケットの送信をはじめます。送信側は一定時間待ってもCTSパケットが送
られて来ない時には、RTSパケットを再び送ります。そして応答が来るま
で、前よりも少し長く待ちます。この3段階(再送は数えない)の過程が、
両者の間でやり取りされます。これ以後は、はじめにRTSパケットとデー
タパケットを送ってる局と、CTSパケットを送った応答局は、他の局との
パケットが衝突することを避けることができます。
RTSパケットは受信側にデータを受けることを教えてくれます。これは
受信側に、その用意をさせる余裕を与えてくれます。例えば、バッファーを
割り当てたり、I/Oインタフェースを待ち受け状態にするような準備です。
これがLocaltalk がCSMA/CA方式を採用している理由でもあります。
マッキントッシュで使われているHDLCコントローラの8530は、
Localtalk のRTSパケットを3バイトのFIFOに溜めることができます。
しかし、8530はデータをメモリに書き込むために、DMAを使わないの
でCPUパワーを必要とします。だからCPUは受信したRTSパケットに
答えCTSパケットを返すと、データパケットが来るまでの間、負荷の大き
い受信ループに入ります。(但しデータが来なかった時には、システムが停
止するのを避けるため時間制限はあります。)
このような特徴は、我々のHDLCコントローラを使ったパケット通信にも適
しています。(DRSIのPCPAやPaccomm のPC-100などが、同じようなICを使
っています。)しかしRTSパケットとCTSパケットが送信元と送信先の
コールサインを入れるとすると、8530のもつ3バイトのFIFOでは足
りません。このため、もっと高速な通信のためにはDMAを使うか、もっと
性能の良いICが必要になります。
CSMA/CAは他の通信が既に行われている場合、同じ周波数を利用す
る局が待たされるのは、CSMAと同じです。しかしCSMA/CAでは、
RTSやCTSパケットを受信した他の局は、どこか他に送信することは禁
止されます。これによって、その後のCTSパケットやデータパケットが、
他のパケットと衝突する確率を小さくすることができます。これがCSMA
/CAのCA(衝突回避)部分です。ところがLocaltalk では、パケットの
衝突は大きな問題ではありません。これは物理的に小さなネットワークであ
ること、キャリア検出に時間を要しないこと、伝送速度が比較的遅いこと、
そしてネットワークが正しく構築されているなら隠れ端末が存在しないため
です。だからCSMAはうまく動作します。RTSやCTSパケットの交換
は、他の理由から必要となる通信量と比べれば、衝突回避のために必要とな
る通信量の増加は殆どありません。
無線パケット通信での「隠れ端末」や「見えすぎる端末」の問題は、ケー
ブルを用いたLocaltalk などのネットワークでの問題とは大きく違います。
「隠れ端末」が存在すると、キャリアが無いことが送信可能を意味しなくな
り、逆に「見えすぎる端末」が存在すると、キャリアがあることが送信して
は駄目だとは限らなくなります。言い換えればモデムからのキャリア検出情
報が役にたたないのです。だから私は「DCD(キャリア検出)を無視する」
という根本的な解決方法を思いついたのです。つまり、CSMA/CAのキャ
リア検出機能を取り除いてしまうんです。(もっと良いDCD回路を組むの
は難しいでしょう。)
代わりに衝突回避の部分を拡張するのです。この部分をMA/CAあるい
は単にMACAと呼びましょう。衝突を回避する方法は、同じ周波数の他局
が出すRTSとCTSパケットを見ることです。他局へのRTSパケットを
受信した時、その局は相手局のCTSパケットを受信するまで送信を行いま
せん。また他局のCTSパケットを受信した場合、相手局が情報を送り終わ
るまで送信を禁止します。もしRTSやCTSパケットに応答が無い時には、
適当な時間だけ送信を禁止します。
図3の例を見て下さい。Z局はX局がY局向けに送信するのを受信できま
せん。しかし、Y局が出すX局向けの信号は受信できます。Z局はY局から
X局向けのCTSパケットを受信したら、Y局がX局からデータを受信中で
あり、送信しては駄目なことが分かるでしょう。しかしZ局はY局のCTS
パケットを受信してから、どの程度待てば良いのか分かりません。でも、こ
の解決は簡単です。X局とY局が通信する前に、X局が送るRTSパケット
に送信するデータの総量を入れておき、Y局も応答する時にCTSパケット
にデータ量を入れて送るのです。これらを受信した局は、もしデータパケッ
トを受信できなくても、衝突を避けるのに待機する必要のある時間の概略は
分かります。
ネットワーク上の局は互いに接続する限り通信できます。つまり、全ての
局はどこまでも届く送信機と、ノイズレベルの信号も受信できる受信機を持
つのと同じです。よって通信を行わない局もCTSパケットを受信すること
で、送信して届いたかのように通信が行われるのを知ることができます。こ
れにより、CTSパケットを送った局は、送られて来るデータパケットに対
する混信を防ぐことができます。よってMACAでは、普通のCSMAでは
許していた送信を防ぎ、それによる衝突が無くなり、隠れ端末問題を解決し
ます。(衝突を完全に避けることは無理ですが、この点は後で説明します。)
逆にRTSパケットを受信できても、その応答が受信できないならば、
RTSパケットに応答すべき局が止まっているか、受信できないところにあ
ると考えられます。この例が図4です。X局はY局の信号を受信できますが、
Z局は受信できないのです。Y局がZ局に情報を送りたい時、X局はY局か
らのRTSパケットは受信できますが、Z局からのCTSパケットによる応
答は受信できません。このためX局は同じ周波数で、Y局がZ局にデータパ
ケットを送る間も、送信することが可能になってしまいます。しかし、それ
らを受信することはできます。このような従来のCSMAでは混信となる時
にも、MACAでは送信の制御を行うことで、「見みえすぎる端末」の問題
を解決しています。モデムは受信したCTSパケットを必ず捉えるとは限ら
ないので、そこで送信してしまうことで、衝突の原因となります。問題は完
全に解決してないのですが、この点については後で述べます。
MACAは新しい考えではありません。多くの人(アマチュア無線家に限
らない)が通常の会話に元々使っている手順を正式なものにしただけなので
す。カクテルパーティなどでは多くの会話が同時に行われます。このような
時、しゃべる前に部屋が静かになるまで待つことは誰もしません。でも誰か
に話しかける時は、相手に自分の言うこと聞いてもらうために待ってます。
MACAのRTSパケットはボブが「よっ!トム」って言うのと同じなので
す。そしてCTSパケットは、トムが「おうボブか」って答えるのと同じで
す。これはトムにとって、ボブ以外との話しを行わないことになります。同
じことがアマチュア無線での交信でも起きます。「〇〇さんどうぞ」って最
後に送るのが、これに当たります。(電信やRTTYなら"KN"です。)
このACK(確認)パケットには、他の局が送信を禁止する時間を明確に
するための情報も含みます。この場合、送信禁止の対象はデータパケットで
す。手順により守られた局は、確認パケットを送ります。しかし、これは送
信が禁止されている局では受信できません。全部のデータパケットが衝突す
ることはないので、衝突に対して全てのパケットが回避を必要とする分けで
はありません。この場合には、ACKによる伝送速度の低下がどうしても生
じます。
もっと形式的に言うならば、MACAは同一周波数だけ見ることができる、
話中音多重(BTMA)の時分割多重形式と言えるでしょう。BTMAでは
受信機が使用中の間、副チャネルで話中音を受信機は送ります。これによっ
て、たとえデータチャネルを聞くことができなくても、その中の他の局が送
信することの無いように前もって知らせる事ができます。逆にデータチャネ
ルに既に信号が流れていても、話中音を受けてない局は勝手に送信できるの
です。だから送信しようとした時に、データチャネルに対して注意を払う必
要はなく、通話中なチャネルであるかの検出が大切なのです。送信する間は
主(データ)・副(話中音)のチャネルの意味は全く同じで、BTMAは有
効です。しかし自局の送信波からの干渉を避けるには、広帯域の周波数を使
う必要なほか、明らかにハードの複雑さが生じます。MACAでは、2局間
の通信が対等なので、この話中音とデータを同じチャネルで使っていると言
うことができます。
このままだとBTMAと違って、MACAではRTSパケット同士の衝突
が生じます。しかし、これらは一般的にCSMAが使うのと同じような方法
で、乱数を使うことによって、小さくされています。MACAではキャリア
検出がありませんので、各局はRTSやCTSを受信した後の待つ時間に乱
数を加えて、互いの局の最小待ち時間が異なるようにしてます。このような
方法で複数の局が送信ができるようになった瞬間に、全ての局が一斉に送信
する偶然性を下げています。この待ち時間は、乱数による時間とスロットタ
イムを加えたものです。そしてMACAにおけるスロットタイムはRTSパ
ケットを再送するまでの時間になります。もし2つのRTSパケットが衝突
した場合、互いに乱数を使った時間だけ待った後に、再度試みが行われます。
だから結局はどちらかが勝ち(早く送信する)ます。そして、応答局からの
CTSによって、負けた局は勝った局が送信しおわるまで送信禁止となりま
す。
RTSパケット同士の衝突する可能性は生じますが、RTSパケットより
データパケットが重要であるので、MACAの方がCSMAより有利です。
これはRTS同士の衝突の方が、データパケット同士が衝突することで生じ
る再送よりも、時間がかからないからです。MACAでは衝突を防ぐ、RTS
とCTSパケットを付加することで増える時間だけですみます。
先に言ったように基本的なMACAのプロトコルは、データパケットの衝
突を少なくするものです。但し、絶対に起きないという保証はありません。
これはCTSパケットを相手局に受信してもらえるのに必要な最低のS/N
があるからです。この為には2局間の送信出力がうまくあっている必要があ
ります。どの程度かというと、他の局に与える妨害となる信号は弱くしたい
けど、互いにCTSパケットを受信できないようでは不十分なのです。しか
し、この重大な問題は知られてません。後で話しますが、MACAでは出力
を制御するとで、この問題を非常に少なくしてます。
データパケットとRTSパケットの大きさを比べた時に、RTS/CTS
パケットのやり取りによる情報量の増加が大きすぎることもあるでしょう。
この場合には、RTS/CTSパケットのやりとり無しにデータを送って、
一連の手順を飛ばすことができます。但しこの場合でも、RTSやCTSパ
ケットによる送信禁止は、普通と変わらずに有効です。もちろん省略された
場合には衝突の危険性があります。けれども、いくつかのデータパケットに
よって、これを補えると思います。例えばTCPのWINDOW変更を認めること
です。これなら1つくらいACKを失っても、前に送ったTCPのWINDOWが
いっぱいなことを得られるなら、問題を引き起こしません。
TCPでwindowの変更が行われるのは、何年か前に半二重方式で停止&待
機モードで、運用していていたことからの忠告と、矛盾しているように見え
ます。しかし、その結論はリンク層に限ったものなのです。そして、TCP
はend-to-endのトランスポート層のプロトコルです。だからwindowの変更は、
ネットワーク内の個々の接続が半二重の時でさえも、トランスポート層では
一般的に適してます。
MACAは自動的に出力を適したように制御します。この機能には幾つか
のハードが必要になります。送信出力を制御するためのD/A変換回路、受
信機から信号強度を取り出すためのA/D変換回路です。CTSパケットを
受けた時の信号強度を読み取って、応答側は自分の出力レベルを調節するの
に使います。
ただSメータの読みを、ある点を合わせておく必要があります。これは十
分な誤り率を満足する信号強度でなくてはなりません。正しく校正されたS
メータの値は、送信機を適した出力に合わせるのを容易にします。送信機を
正しい出力レベルに合わせるのには、簡単で「強すぎる」,「弱すぎる」,
「ちょうど良い」を繰り返すだけで十分です。RTSとCTSパケットのや
りとりによって、相手局に届くのに必要なパワーの評価を更新します。これ
を元にパケットを送るのに必要な出力で送信することができます。応答局か
らのCTSパケットを返してもらうために、RTSパケットを送信する時に
は、これより少ない出力で送信します。これによってRTSパケット同士の
衝突する確率を減らすこともできます。
MACAのルールを「CTSパケットを受信したら送信を禁止する」から、
「CTSパケットを受信したら一時的に出力を制限する」に変えます。これ
は、地域毎に周波数を再利用するためです。例えばX局はY局に送る情報が
あるとします。そしてY局に届かせるには、どのくらいの出力が必要なのか
分かってます。Y局がZ局にCTSパケットで応答しているのをX局が受信
したとしても、X局は要求された時間だけ完全に送信を禁止する必要はあり
ません。ただY局に届くのに必要な出力から20dB低いところに、送信出
力を制限すれば良いのです。この間の送信は自由なのです。
この図は、使用するモデムが捉えられる比をあらわしています。
Y局の信号がZ局の信号によって潰されないように、相手局に届く範囲で
出力レベルを下げて送信します。これはカクテルパーティで、トムがボブに
「さあ、どうぞ」と言った時に、本当に話しを止めないで、小声で話しを続
けるに似ています。
CTSパケットは、これでも問題を解決してくれます。しかし、情報を送
りはじめることを告げるCTSパケットは、送信によって可能性のある全て
の衝突を防いでます。だから、妨害を受けずに通信をできることを保証する
ため、はじめに届くRTSパケットよりも大きな出力が必要となります。(
CTSは、カクテルパーティでトムが「さあ、みんな静かにして、ボブの話
しを聞こうじゃないか」と大きな声で言うのに似ています。)
みんなに届くようなパケットでは、地理的に可能性の限られたチャネルの
再利用は、行うことが難しいのを経験しました。しかし完全にダメなわけで
はありません。RTSパケットに応答した局のCTSパケットは、常にデー
タパケットが続いて来ることが予想できます。適当な期間の中に届かないか、
再送のRTSパケットが代わりに届いたなら、CTSパケットが潰されたか、
CTSパケットが衝突を妨げるのに十分な広範囲で受信できなかったかです。
だから、同じ局(同じパケットの送信を再度試みる局)からの次のRTSパ
ケットに応答する時には、より大きな出力でCTSパケットを送信します。
逆にCTSパケットを出す局は、他の信号を受信できているなら、限られた
周波数容量を増やすために、もっと小さな出力で送信してみます。ただし、
CTSを送る電力を相手の局に届くのに必要と分かっているより小さくする
ことはできません。
加えて出力の自動制御を行うMACAは、互いにRTSパケットやデータ
パケットを送るのに必要な送信出力を細かく決めます。これはCTSパケッ
トを送るのに必要な電力と過去の実績によって得ます。CSMAで良く見ら
れたように、通らなかった場合には出力を大きくすることで逃げるのを避け
る効果もあります。MACAでも出力を上げることは可能なように思えます
が、RTSパケットを送る時に、どのくらいの出力を出しているか重要でな
いのです。信号強度によってCTSパケットの電力を下げられてしまうため、
RTSパケットを送った局は、その応答を聞くことができないのです。だか
ら、はじめに行うやり取りの時の送信出力の余裕や再試行数の制限を設ける
ことで取り除けます。
もしMACAの効果を実験するなら、単一周波数で運用するアマチュア無
線を使ったパケット通信のネットワークを実用にすることが最終的にできる
でしょう。
固定された周波数を利用可能ならば、用途分けした専用周波数や一対一の
接続を作り出すことが望ましいでしょう。これは特定の環境では単一周波数
によるネットワークでとても役に立つはずです。これにはユーザが使用する
周波数(例えば多くの地域の145.01)を含んでいます。また良くあるように、
ちょっと持ち運んだり車から運用する時には、前もって複数の周波数を使っ
たネットワークとして調整しておきます。これは、特にパケットの設備が整
備されてないような僻地での緊急事態に有効です。
理想的な緊急用のパケット無線ネットワークは、任意の場所に設置された
(通信がもっとも行われている)共通周波数で運用する同じ局から構成しま
す。これらの局は自動的に近くの局を見つけて、ルーティングと自局の電波
が届く範囲の全ての通信について、最大の出力を記憶する表を作ります。
この後ルーティングのアルゴリズムに普段と違ったものを使います。通信
相手までのホップ数を単に小さくする代わりに、ルーティングのアルゴリズ
ムを相手局までの経路にある全ての局が必要とする送信電力の総量が最低に
なるようにします。これは、高周波の伝達の法則(自由空間における信号の
範囲を倍にするには、4倍の送信出力が必要です。また、大地の上ではもっ
と必要です。)のためです。この方法は相手局に接続するためのホップ数を
増やす必要があります。しかし、全てのネットワークでの処理能力は増えま
す。なぜなら低い送信電力は、干渉の無い異なったネットワークの一部とし
て、多くの情報を同時に伝送することが可能になるためです。これはまた、
その局で消費する電力を最小にします。そして、これはバッテリー運用の時
に大切なことです。まっすぐな最低のホップ数は、遅延時間を最低にする必
要がある特殊なアプリケーション用のオプションとして別に用意されます。
現時点で、MACAのアイデアは正しいでしょう。多くのシミュレーショ
ンと実験結果から、どのようにしたらうまく実際に働かせるかの多くの質問
に答えることができます。このような質問をここに幾つか用意してみました。
・MACAにより衝突を避ける方式で、RTS/CTSパケットによる増加
する時間は、普通のモデムが立ち上がる時間や、データパケットの大きさ
に比べて、どのくらい時間がかかるのでしょうか?
・出力を制御するMACAは、基本的なMACAの機能よりもどのくらい役
にたちますか?
・出力制御回路(試行錯誤によるもの)は、Sメータの回路と比べて、どの
くらいの回路になりますか?
・MACAは、どうやって色々な形式の性能の異なったモデムに対応するの
ですか?
・どうしてスレッショルド以下の局からの妨害が、重大な問題なんですか?
・MACAは他の多元接続の方法よりも、また一般的なCSMAやCSMA
/CDの全二重レピータによる運用と比べても、どのくらい周波数の利用
が効率的ですか?
これらの話題に興味を持ったならば誰でも、私(ka9q)にコンタクトを
取って欲しいと思います。