[스터디] IoT - Wi-Fi 2

JOMO34·2022년 4월 15일

[스터디] IoT

목록 보기
8/11
post-thumbnail

In BSS

BSS안에서 station과 AP는 무선통신이므로 RF 즉, Carrier Signal을 사용해 데이터를 주고받는다. 이때 안테나를 통해 특정한 전송이 주변에 있는지 판단 할 수 있는데 이것은 Carrier Signal의 존재여부로 파악할 수 있다. 즉, 같은 BSS 내에서 Carrier Signal을 전송할 때 다른 Station들은 그 Carrier Signal을 센싱해서 알 수 있으므로 지금 누군가가 데이터를 주고받는지 아닌지여부를 알 수 있다. 이때 동시에 여러개가 데이터를 주고받는다면 Collision이 발생한다.

Distributed Coordination Function DCF

Wi-Fi는 각각의 노드들이 개별적으로 지금 데이터를 전송할지 말지 판단을 하는 기능이 있다. 이것은 모든 AP와 Station들이 사용한다. 누군가가 데이터를 전송하고 있으면 자신은 전송하지 않고 전송을 아무도 안하고있으면 데이터를 전송하는 그런 프로토콜이다. 그리고 이 DCF의 근간이 되는것이 CSMA이다.

CSMA = Carrier Sense Multiple Access = Sense before trnasmitting
데이터를 보내기전에 먼저 다른 디바이스가 데이터를 전송중인지 확인하는것.
802.11에서는 Collision detection(충돌 탐지)이 불가능하기 때문에 Collistion Avoidance(충돌 회피)방식을 사용함

DCF의 목적과 특징

목적
1. 동시에 두개 이상의 디바이스들이 전송을 시작해 Collision이 일어나는것을 막아주고, 최대한 채널의 쉬는시간이 없게(자원을 많이쓰게)해주는 것
2. 많은 디바이스 들이 전송을 기다리고 있을때, 공평하게 채널을 쓸수 있게 해주면서 Throughput도 높이는 것

특징
1. No Sentralized coordinators : 누군가가 조정해주는것이 아니라 각자가 판단해서 진행함.
2. No clock synchronization : Timer Syncronization이 필요없이 해야한다.

Carrier Sense Mechanisms

1.Physical Carrier Sense
실제 휴대폰 안테나는 계속 Carrier detection을 하기때문에 배터리가 줄어든다.
이때 두가지 방법으로 체크할 수 있다.
Energy detection - 특정 세기 이상의 에너지를 감지하면 Carrier Signal이라고 생각
Carrier sensing - 실제 Carrier Signal을 센싱하는 방법

2.Virtual Carrier Sense(예약제)
데이터를 보낼 노드가 일정시간동안 데이터를 전송하겠다 라는 내용이 담긴 패킷을 노드들에게 보내준다. 다른 노드들이 그 패킷을 수신하면 그 시간에는 누군가가 데이터를 보내고 있는중임을 알 수 있다.

Station은 데이터를 보낼때 위 두가지 방법을 통해 지금 데이터를 보내줄지 말지 판단을 한다. 이때 아무도 데이터를 보내주지 않는다고 판단한다 해도 바로 데이터를 전송하지 않는데 그 이유는 다른 Station들도 채널이 idle해지길 기다렸다가 바로 데이터를 보낼수도 있기 때문이다.

Inter-Frame Space IFS

무선에서의 통신은 유선매체에 비해서 packet error rate이 높기때문에 데이터가 다 갔는지 보장할 수 없다. 그래서 sender에서 데이터를 보내면 receiver가 ACK을 보내준다. 이때 receiver가 데이터를 받은 뒤 ACK을 보내주려 하는 그 잠깐 사이에 다른 Station이 데이터 전송을 한다면 그전에 데이터를 보낸 Sender는 데이터가 잘 갔는지를 모른다. 그래서 채널이 idle해진 뒤에도 내가 보내고자 하는 패킷 / 프레임 종류에 따라서 최소한으로 더 기다려야하는 +α의 시간을 만들었고 이것을 IFS라고 한다.

즉, 우선 순위가 빠른것(ACK)등은 바로 보내주고(SIFS) 우선순위가 낮은 데이터들은 보내기전에도 조금 더 기다린다(DIFS). 이때 위에서 말했듯이 DIFS를 같이 기다린 Station이 자신과 동시에 데이터를 전송한다면 Collistion이 발생하기 때문에 이것도 예방이 필요하다.

CSMA/CA

CSMA/CA는 위와같은 상황을 예방하기 위해 Random Backoff알고리즘을 사용한다.
이것은 DIFS를 기다리고 거기에 +α만큼의 시간을 더 기다리는 알고리즘인데, 이 α를 랜덤으로 정한다.
ex) 0~CW사이에서 뽑은 랜덤시간을 α로 정해서 카운트 다운(back off)을 시작해 slot마다 시간을 줄여준다. 그 후 backoff가 완료되었을때에도 채널이 idle하다면 데이터 전송을 시작한다.

Backoff Example

BSS가 Association할때 CW를 미리 정해준다. 이때 B1과 B2가 각각 α로 25와 20을 뽑았다고 했을때 B2가 먼저 backoff가 끝나므로 데이터를 보내준다(idle한경우). 이때 B1은 남은 5의 α를 버린뒤 새로 뽑지않고 그 α를 가지고 있다가 다시 채널이 idle 되었을때 마저 backoff한다.
이때 B2가 B1에 남은 숫자인 5보다 더 작은 α를 뽑아서, 데이터를 연속해서 보낼 수도 있다. 하지만 전체적으로 봤을때에는 모든 클라이언트가 공평하게 데이터를 전송하게 된다.
만약 B2가 B1의 남은 시간과 동일한 α를 뽑을 수도 있다. 이러면 Collision이 발생한다. 이 확률을 줄이려고 CW값을 높게 잡아줄 수도 있는데 이때는 실제 데이터를 보내는 시간보다 모든 클라이언트가 기다리는 시간이 더 길어질 것이다(오버헤드). 또, 그렇다고 CW값을 무조건적으로 낮추면 collision이 일어날 확률이 높아진다. 따라서 적당한 합의점을 마련해야한다.

Binary Exponential Backoff in DCF

만약 Collision이 일어나서 두개 이상의 클라이언트가 데이터를 보냈다면 재전송이 이루어져야 한다. 이때, CW값을 전값에 2배를 늘려서 충돌확률을 낮춰주는 알고리즘이다. 만약 전값보다 2배를 늘렸는데도 충돌이 일어난다면 계속 2배씩 CW값을 늘려준다. 만약 collision이 일어나지 않았다면 CW값을 다시 초기값으로 낮춰준다.

Throughput Efficiency

다시 정리하자면 위에 그림처럼 A가 먼저 전송을 시작했는데 B, C, D가 보낼 데이터가 생겼다면 일단 전송이 끝나고 ACK이 전송이 되야하므로 DIFS시간만큼 기다려준다. 그 후 0~CW값중 랜덤값을 뽑은 뒤에 backoff를 해서 순서대로 데이터를 보내주는 것이다. 이때 누군가 데이터를 보내면 또 ACK이 전송되어야하므로 DIFS시간만큼 기다린다.

위 그림에서 알 수 있듯이 BSS에 몇개의 Station이 존재하냐에 따라 Collision이 날 확률도 달라지고, Throughput도 달라진다.

Optional use RTS/CTS

HIdden node problem같은 문제가 발생하는 경우(신호가 Attenuate 되기때문에 C는 A가 신호를 보내고 있음을 모른다)를 예방하기 위해 선택적으로 RTS/CTS를 사용한다.

A와 B가 서로 AP에게 데이터를 보내고 싶어할때, 바로 보내지 않고 AP에게 자신이 데이터를 전송하는데 걸리는 시간인 X가 포함되어있는 채널을 예약하는 메시지 RTS(Request to send)를 보낸다.
이때, RTS조차 COllision이 일어날 수 있기때문에 AP는 RTS를 잘 받았다는 CTS(Clear to send)라는 메시지를 A와 B 둘다에게 보내준다. 이때에도 RTS에 담겨있던 채널 예약시간 X가 담겨있고, B는 그 X의 시간동안 데이터를 보내주지 않는다.
마지막으로 데이터 전송이 끝나고 AP가 데이터 전송이 완료되었다는 ACK을 A와 B에게 보내면 그때부터 다시 Backoff에 들어간다.

RTS/CTS가 정상적으로 전달되면 Collision이 발생하지 않는다는 장점이 있지만, RTS에 들어가있는 X는 CTS를 받는시간 + 데이터를 보내는시간 + ACK을 받는시간까지 한번에 계산되어 있으므로 데이터의 실제 전송시간은 적다. 즉, Overhead가 심하다는 단점이 존재한다.
따라서 보내야하는 데이터의 길이에 따라서 RTS/CTS의 사용여부를 결정해야한다.
데이터의 길이가 짧으면 사용을 하지 않는게 더 좋고, 길이가 길면 데이터 전송시간 동안 Collision이 발생할 확률이 높으므로 RTS/CTS를 사용하는것이 좋다.

802.11 enhanced capabilities

Rate adaptation : 데이터를 전송할 때 효율이 높은 modulation기법(BPSK QPSK)을 사용하면 더 좋겠지만 기본적으로 채널 상태가 좋아야한다. 그래서 802.11에서는 Sender가 보낼 수 있는 modulation기법을 여러 개 준비해놓은 뒤 채널 상태에 기반해서 가장 최적의 modulation기법을 선택해서 사용한다.

Power management : 오늘날 배터리를 사용하는 노드에서는 Power 관리 기법이 중요하기 때문에 sleep을 하는등 Power management를 위한 기술들도 존재한다.

이 이외에도 다양한 기법들이 사용된다.

profile
요새 공부하는 것들

0개의 댓글