Wi-Fi 기술에 대해 이야기하거나 책을 볼때 자칫 혼동할 수 있는 용어들을 정리했다.
주파수
완전한 Sine 파형이 송신측으로부터 초당 몇 번 반복하는지를 말하는데, 그 단위는 헤르츠(Hz)이며 1Hz 는 1초에 한번 완전한 Sine 파형이 반복됨을 의미한다.
Power
송신에서 수신 쪽으로 전달되는 에너지의 크기를 의미하며, Power 의 크기는 얼마만큼의 에너지가 전송에 사용되었는지를 나타낸다. 전송 Power는 dBm 을 사용하며, 0dBm = 1mW, 20dBm = 100mW 에 해당한다.
Path loss
송신측과 수신측 간의 신호 유실율을 의미하며, dB(decibel)을 사용한다. Path loss 를 최소화하기 위한 방법으로는 1) 전송 전원을 최대화 하거나, 2) 수신측의 Receiver Sensitivity 를 높이는 방법이 있다.
Gain
안테나에서 얼마나 많은 에너지가 한 곳(특정한 방향)으로 집중되어 있는가에 대한 값이다. dBi 형식으로 표현되며, 이는 실질적인 안테나의 방사 에너지 패턴을 이상적인 방사 에너지 패턴인 구형(Isotropic) 안테나와 비교한 것이다.
주어진 에너지의 양은 일정하며, 에너지를 어느 쪽으로 모이게 하느냐에 따라 방향성과 Gain 이 결정된다.
SNR(Signal to Noise Ratio)
시그널이 노이즈에 의해 감소된 비율을 나타낸다. SNR 에 의해 데이터 속도가 결정된다.
SNR = log(Signal Strength) / log(noise floor) ~ = <signal Strength> - <noise floor>
간단히 말해서 RSSI 가 -60dB 이고, Noise Floor 가 -90dB 일 경우, SNR = -60-(-90) = 30 이 되며, SNR 30 에 대한 데이터 속도는 아래 표를 참조한다.
모듈레이션 별로 요구되는 SNR
Data Rate(Mbps) | Modulation Scheme | Minimum Sensitivity Per 802.11a Spec(dBm) | Approximate SNR required for proper detection(dB) |
6 | BPSK | -82 | 4 |
9 | BPSK | -81 | 5 |
12 | QPSK | -79 | 7 |
18 | QPSK | -77 | 9 |
24 | 16QAM | -74 | 12 |
36 | 16QAM | -70 | 16 |
48 | 64QAM | -66 | 20 |
54 | 64QAM | -65 | 21 |
한밤에는 손전등의 불빛이 잘 보이지만, 대낮에 밝은 곳에서는 그 빛을 볼 수 없는 것에 비유하여 보자면, 햇빛이 Noise Floor, 손전등의 불빛은 RSSI(Received Signal Strength Indicator)로, 그리고 눈이 햇빛의 여부에 따라 잘 보이고 그렇지 않고의 차이를 인지하는 것을 SNR 이라 할 수 있다.
RSSI(Received Signal Strength Indicator)
수신단에서 받아들인 신호의 세기를 말한다. RSSI 자체는 신호의 강/약만 나타낼 뿐이기 때문에 속도와의 연관성을 있다고 말하기는 어렵다. 위의 비유에서 보았듯이, 같은 RSSI 를 받았다 하더라도 Noise Floor 에 대한 내용이 가미가 되어야 의미가 있다.
RSSI 값은 칩셋마다 다르다. 예를 들어 A 사의 경우 0~60 범위를, S 사는 0~32 를 그리고 몇몇 C 사의 경우 1~100 의 범위를 사용한다.
AP(Access Point)
유/무선 통신을 브리지하는 역할을 한다. Station 의 기능을 포함하고 있다.
Station
802.11 표준을 가지고 Wireless medium 으로 통신할 수 있는 WNIC(Wireless Network Interface Card)를 장착한 디바이스다.
11n 인증방식과 암호화에 따른 속도
802.11n 모드(High Throughput)는 AES 외의 암호화에는 의미가 없는데 WEP 와 TKIP 이 유니캐스트에 대한 암호화 알고리즘으로 사용될 경우 HT 가 허용되지 않기 때문이다. 이러한 이유로 WEP 나 TKIP 이 유니캐스트에 대한 암호화로 사용될 경우 접속 속도가 이전 표준의 최고인 54Mbps 로 떨어지게 된다. 종종 802.11n AP를 사용하고 있는데, 접속 속도가 54Mbps 로 표시되고 또한 속도에 대한 개선이 없을 때는 이 내용을 다시 한번 확인할 필요가 있다.
안드로이드에서의 Wi-Fi
안드로이드에서 와이파이를 이용하여 인터넷에 접속하려면 네트워크 정보를 wpa_supplicant.conf 파일에 저장하고 wpa_supplicant 라는 데몬을 실행시키면 된다. 안드로이드에서는 wpa_supplicant 의 환경설정과 실행을 'android.net.wifi' 라는 패키지를 통해 제공하고 있다.
이 패키지 가운데 가장 핵심은 'wifiManager' 라고 하는 클래스이다. 이 클래스의 객체를 얻기 위해서는 Context.getSystemService(Context.WIFI_SERVICE) 메서드를 사용하여 안드로이드 시스템으로부터 객체를 할당받게 된다. 그리고 안드로이드 와이파이 역시 무선 통신이기 때문에 아래와 같은 작업을 수행하게 된다.
- 와이파이 환경설정
- 와이파이 무선접속 장치 스캔
- 와이파이 연결 작업
위 그림은 안드로이드에서의 무선랜을 제어하는 구조를 보여준다. 여기서 안드로이드 HAL 은 무선랜 드라이버를 로딩하고, wpa_supplicant 데몬을 동작시키고, wpa_supplicant 의 클라이언트 역할만을 수행한다. 즉 여기서 포팅의 문제는 wpa_supplicant 를 어떻게 잘 제어하는가에 달려 있다.
물론 안드로이드의 Java 쪽 무선랜 관련 프로그램을 수정해야 하는 경우도 생기지만, 실제로는 전체 동작이 어떻게 이루어지는지에 대한 이해가 최우선이다.
부팅 시퀀스
리눅스 커널이 실행하고 마지막 init 프로세스가 실행되면, 아