CSMA/CAの話
https://gyazo.com/2ca058fd43f7b6166d1c8a3becee52cb
◆ 目次
CSMAとは
CSMA/CDとCSMA/CA
隠れ端末問題(Hidden Node Problem)
RTS/CTS
◆概要
IEEE802.11とかのL1、L2の話
上位プロトコルでは意識しない(OSI参照モデルのいいところ)
うまいこと交通整理してるんだよという話
◆CSMA(Carrier Sense Multiple Access)
1つのネットワークで複数の端末がアクセスするための仕組み
交差点に信号つけます みたいな話
電気(電波)は途中で止まれない
有線も無線も同じ
基本コンセプト
送れそうなら送る
有線と無線で「送れそうか」判定が違う
他に通信してるノードがいないか(Carrier Sence)
ダメそうなら待つ
◆CSMA/CDとCSMA/CA
CD(Collision Detection):衝突検知
有線LAN(Ethernet LAN)向け
電気的に衝突を検知できる
他の端末が通信しているかわかるので終わったら自分が送信する
suima.iconCSMA/CD強い人がいたら補足お願い
CA(Collision Avoidance):衝突回避
無線LAN(Wireless LAN)向け
電波は衝突検知できないので回避する
今日はCSMA/CAの話
◆CSMA/CA
有線LANみたいに他のノードの通信状況がわからない
空気を読むことが求められる(回避:Avoid)
話しかけて(送信して)応答(ACK)が返ってこなかったらちょっと待ってまた話しかける
ちょっと待つ時間が同じだとエンドレス待機になるので乱数
通路で向こうから来る人が右に避けるのか/左に避けるのか問題
◆CSMA/CAの動作 1/2
/suima-icon/send.icon送信ちゃん /suima-icon/recv.icon受信ちゃん /suima-icon/other.icon通信しないノード
位置関係: /suima-icon/send.icon /suima-icon/other.icon /suima-icon/recv.icon
/suima-icon/send.iconの電波は/suima-icon/recv.iconにも/suima-icon/other.iconにも届く
/suima-icon/send.icon:送信したい
/suima-icon/send.icon:ちょっと待ってみる(DIFS)固定時間
/suima-icon/send.icon:待ってみて誰からの電波も受信しなかったら誰も送信してないと判断
/suima-icon/send.icon:もうちょっと待ってみる(バックオフ)ランダム時間
再送するときの仕組みだけど再送かどうかで分けるのはめんどい
/suima-icon/send.icon:送信
◆CSMA/CAの動作 2/2
/suima-icon/send.icon送信ちゃん /suima-icon/recv.icon受信ちゃん /suima-icon/other.icon通信に参加しない他のノード
位置関係: /suima-icon/send.icon /suima-icon/other.icon /suima-icon/recv.icon
/suima-icon/recv.icon:なんか来た
/suima-icon/other.iconなんか来たな /suima-icon/send.iconは誰かと通信してるっぽいから送信控えよう
/suima-icon/send.icon:送信完了
/suima-icon/recv.icon:ちょっと待ってもう来なければ終わりとする(SIFS)固定時間
/suima-icon/recv.icon:終わったな ACK送るわ
/suima-icon/send.icon:送ったの届いたな
◆隠れ端末問題(Hidden node problem)
位置関係: /suima-icon/send1.icon /suima-icon/recv.icon /suima-icon/send2.icon
/suima-icon/send1.iconの電波は/suima-icon/recv.iconには届くが/suima-icon/send2.iconには届かない
/suima-icon/send2.iconの電波は/suima-icon/recv.iconには届くが/suima-icon/send1.iconには届かない
【/suima-icon/send1.iconが送信するまでの動作は省略】
/suima-icon/send1.icon:/suima-icon/recv.iconに向けて送信中
/suima-icon/send2.icon:(/suima-icon/send1.iconが送信していることを知らない)
/suima-icon/send2.icon:送りたいのでちょっと待つ
/suima-icon/send2.icon:誰も送ってないな(気づけない)送るわ
/suima-icon/recv.icon:別のとこからも来た うわあああ(衝突)
/suima-icon/send1.icon/suima-icon/send2.icon:は?
◆隠れ端末問題(Hidden node problem)まとめ
送信していいかちょっと待ってから判断する
自分には届かないけど相手には届く電波があると前提が崩れてうまくいかない
suima.iconさらし端末問題もあるよ
ノードが密集してる状態で起きる
みんなが空気読みすぎて誰もしゃべらなくなるみたいなイメージ
◆CSMA/CA with RTS/CTS
隠れ端末問題問題を解決する手法
RTS:Request To Send(送っていいかな)
CTS:Clear To Send(送っていいよ)
◆CSMA/CA with RTS/CTSの動作
位置関係: /suima-icon/send1.icon /suima-icon/recv.icon /suima-icon/send2.icon
/suima-icon/send1.iconの電波は/suima-icon/recv.iconには届くが/suima-icon/send2.iconには届かない
/suima-icon/send2.iconの電波は/suima-icon/recv.iconには届くが/suima-icon/send1.iconには届かない
/suima-icon/send1.icon:送信したい
/suima-icon/send1.icon:ちょっと待ってみる(DIFS)固定時間
/suima-icon/send1.icon:待ってみて誰からの電波も受信しなかったら誰も送信してないと判断
/suima-icon/send1.icon:もうちょっと待ってみる(バックオフ)ランダム時間
再送するときの仕組みだけど再送かどうかで分けるのはめんどい
/suima-icon/send1.icon:RTS送信 /suima-icon/recv.icon送っていい?
/suima-icon/recv.icon: RTSが来た 受信できるから応答を返す
/suima-icon/recv.icon: CTS送信 /suima-icon/send1.icon送っていいよ
/suima-icon/send1.icon:送るわ
/suima-icon/send2.iconは/suima-icon/send1.iconからのRTSは届かないが/suima-icon/recv.iconからのCTSは届く
/suima-icon/send2.icon:/suima-icon/recv.iconは忙しいらしい 気づける
/suima-icon/send1.icon:/suima-icon/recv.iconに向けて送信中
/suima-icon/send2.icon:待機中
/suima-icon/send1.icon:送信完了
/suima-icon/recv.icon:終わったな ACK返すわ
/suima-icon/send1.icon:送ったの届いたな
/suima-icon/send2.icon:お 終わったっぽい RTS送ろう
~~~ めでたし ~~~
◆CSMA/CA with RTS/CTS まとめ
許可を得て送信する
受信してるアピール
RTS/CTSなし版に比べてやり取りが多い(オーバーヘッド)ので速度(スループット)は下がることもある
区別するためにCSMA/CA with Ackと呼ぶ(らしい)
完全に衝突を防げるわけじゃない
乱数が一致してRTS同時送信で衝突とか
ノードが動いてCTSが届かなかったり
◆まとめ
有線LANでは検出できる衝突が無線LANでは検出できない
µ secの世界で交通整理してる
チャネル(位相)や周波数帯による住み分けの方が効果的
2.4GHz帯は混みやすいので5GHz帯使おう
IEEE802.11は規格(a,b,g,n,ac...)によって使える周波数帯や電波到達範囲が違う
指向性を持たせると空間利用効率が上がったりもする
https://gyazo.com/5728e46468bed1ef5bda1c8498de8cbd