반응형

WLAN: TP LINK TL-WN722N (Atheros ath9k_htc)

OS: Raspbian Jessie



처음에는 IEEE 802.11(와이파이)로 애드혹 모드(ad-hoc mode)가 HT (High Throughput)를 지원하지 않을 거라 생각했는데, 지원하는 것 같고 설정방법도 존재하는 것을 확인했다. 다만 실제로 속도가 개선되지는 못했는데, 다른 부분에서 성능상의 bottleneck이 존재할 수도 있기 때문에 좀더 조사해 봐야 한다.


어쨌든 이 글에서는 애드혹 네트워크를 구성할 때 HT 모드를 명시적으로 지정하는 방법을 설명한다. 아쉽지만 흔히 쓰는 /etc/network/interfaces 파일에서 HT 모드를 적용하는 방법은 찾을 수 없었다.

그래서 iw를 써야 한다. 명령어가 없을 경우 apt-get install iw로 설치한다.


조사해 보니 아래와 같은 명령으로 애드혹 네트워크와 함께 설정할 수 있다. [1, 2, 3]


# iw dev [인터페이스_이름] ibss join [네트워크_이름] [채널_KHz단위] [HT_모드] [Cell_ID]

# ifconfig [인터페이스_이름] [원하는_IP_주소]


무선랜 인터페이스가 어떤 HT 모드를 지원하는지 확인하려면 iw list를 통해서 나오는 디바이스 정보를 확인한다. 디바이스 이름은 wlan 대신 phy0, phy1 등으로 표시된다. wlan 몇번이 phy 몇번인지 확인하려면 귀찮은 과정을 거쳐야 하지만, 보통 무선랜카드를 1개만 USB로 연결하면 iw list에서도 디바이스가 하나만 나오므로 확인이 어렵지 않을 것이다.


출력 결과에서 Capabilities 부분에 HT20, HT40 등의 단어가 나온다면 HT20, HT40을 지원한다는 의미이다. 어떤 rate를 지원하는지는 "HT TX/RX MCS rate indexes supported: 0-7" 이러한 문장의 끝에 적힌 숫자에서 확인할 수 있다. 그리고 "Device supports HT-IBSS." 라는 문장이 있으면 애드혹 모드에서도 HT가 될 것이다.


필자가 갖고 있는 TL-WN722N 무선랜카드는 HT20, HT40을 지원한다고 나와 있다. 

HT40은 HT40+, HT40- 두 가지가 있는데, 시도해 본 결과 HT40-일 때에만 에러 없이 설정이 되었다. 



<추가>

글을 처음 쓸 당시에는 몰랐는데, HT40은 기존의 20MHz 채널 2개를 합쳐서(aggregate) 40MHz짜리 채널을 만들기 때문에 기준 주파수에서 어느 쪽으로 추가 20MHz를 붙일지 결정하기 위해서 +, - 부호를 쓰는 것이었다. 즉, 기준 채널보다 큰 주파수에서 추가로 20MHz를 갖다붙이려면 HT40+를 쓰고, 기준 채널보다 작은 주파수에서 붙이려면 HT40-를 쓴다.


채널 11번(2462 MHz)에서 HT40+가 안됐던 이유는, 11번 채널이 와이파이가 접근 가능한 2.4GHz의 주파수 대역에서 가장 끝이기 때문이다. (물론 하드웨어에 따라서 12, 13번 채널을 허용하는 경우도 간혹 있지만, ath9k_htc는 11번까지만 쓰도록 한 것 같다.)

그래서 11번 채널에 HT40-를 적용하면 기존 20MHz (2452 ~ 2472)보다 작은 주파수에서 20MHz (2432 ~ 2452)를 가져오기 때문에, 총 40MHz 채널에 대한 중앙 주파수는 2452 MHz가 된다. $ iw [인터페이스_이름] info 명령을 쳐 보면, center1 항목에서 확인할 수 있다.


결론적으로, 채널 1번으로 설정하면 HT40+밖에 안되고, 채널 6번으로 설정하면 HT40+, HT40- 모두 설정 가능하다.



예를 들어, testRpiAdhoc 이라는 이름의 애드혹 네트워크에 무선채널 11번(2.462GHz)을 쓰고, 고정IP 주소를 192.168.3.4를 할당하는 경우, 아래와 같이 설정할 수 있다.


$ sudo iw dev wlan1 ibss join testRpiAdhoc 2462 HT40- F6:D0:8C:DD:C3:AB

$ sudo ifconfig wlan1 192.168.3.4


뒤에 Cell ID는 맥주소 형식으로 임의로 입력해도 되며, 단지 애드혹 네트워크에 참여하는 기기들이 모두 같은 값을 공유하면 되는 듯 하다. 




<참고자료>

[1] https://wireless.wiki.kernel.org/en/users/documentation/iw/replace-iwconfig#join_an_ibss_ad-hoc_network

[2] http://www.spinics.net/lists/linux-wireless/msg83366.html

[3] https://forum.openwrt.org/viewtopic.php?id=29876



반응형
블로그 이미지

Bryan_

,
반응형

Tested OS: Raspbian, Ubuntu 14.04.2 LTS (amd64), Ubuntu 11.04 (i386)

Wireless LAN card: TP-LINK TL-WN722N (chipset: Atheros ath9k_htc)


실험을 위한 애드혹 네트워크 구성을 하는 과정에서, /etc/network/interfaces 파일을 가이드라인에 맞게 고쳤는데도 애드혹 네트워크가 생성되지 않아서 원인을 찾던 중 하나를 발견했다. 사실 이것이 데비안 계열 리눅스에서 발생하는 문제인지, 아니면 ath9k_htc 칩셋에서 지원하지 못하는 것인지는 모르겠다.


일단 가이드라인대로 /etc/network/interfaces 파일을 설정하는 방법은 아래와 같다:


# 무선랜 인터페이스 이름이 "wlan0"일 경우로 가정

auto wlan0

iface wlan0 inet static

address 192.168.3.100  # 연결할 기기마다 1~254 사이의 아무 숫자나 겹치지 않게 정한다.

netmask 255.255.255.0

wireless-channel 11 주변 다른 무선랜 채널 상황을 고려해서 1,6,11 중에서 정한다. 

wireless-essid testAdhocNet # 가급적이면 하이픈(-) 없이, 영문과 숫자조합으로만...

wireless-mode ad-hoc


위와 같이 파일을 저장하고 나서,

만약 Ubuntu desktop을 쓰면서 network-manager 서비스가 실행중이라면 종료한다.

$ sudo service network-manager stop


그리고 네트워크 재시작을 한다.

$ sudo /etc/init.d/networking restart


이후 iwconfig 명령으로 무선랜 인터페이스에 대해서 아래와 같이 "Ad-Hoc" 모드로 나타나는지 확인한다.

$ iwconfig

lo        no wireless extensions.


eth0      no wireless extensions.


wlan0     IEEE 802.11bgn  ESSID:"testAdhocNet"  

          Mode:Ad-Hoc  Frequency:2.462 GHz  Cell: 8A:E1:09:41:AD:43   

          Tx-Power=16 dBm   

          Retry  long limit:7   RTS thr:off   Fragment thr:off

          Power Management:off


내 경우는 ESSID에 하이픈(-)을 2개 이상 넣고서 맨 처음 애드혹 네트워크 설정을 했더니 계속 Mode: Managed로 표시되는 문제가 있었다. 아직 정확한 원인은 모르겠다.

더 황당한 것은, 하이픈을 다 뺀 이름으로 애드혹 네트워크 생성을 성공하고 나서, 다시 하이픈이 2개 이상 들어간 ESSID로 바꿨더니, 그 후로는 하이픈이 들어간 이름으로도 애드혹 네트워크가 문제없이 생성되는 것이었다.


일단은 가장 안정적인 설정(하이픈이 없이 순수 영문과 숫자 조합으로만 ESSID 설정)으로 하는 것이 좋을 것 같다.



반응형
블로그 이미지

Bryan_

,
반응형

<테스트한 환경>

OS: Ubuntu 11.04 Desktop (32bit, kernel 2.6.38-8-generic)

네트워크 인터페이스: TP-LINK TL-WN722N (802.11b/g/n)



연구실험 목적으로 와이파이 무선 애드혹 네트워크를 구성해서 쓰면서 유난히 연결이 안되는 경우가 자주 있었는데, 경험을 바탕으로 몇 가지 원인을 나열해 보고자 한다.



(1) Ubuntu desktop의 Network Manager 서비스와 /etc/network/interfaces 파일 간의 설정 불일치


고정IP와 채널 설정 등 가장 확실하게 설정할 수 있는 방법은 우분투(Ubuntu)를 기준으로 /etc/network/interfaces 파일을 수정하는 것이다. 그런데 Ubuntu desktop에서 쓰는 서비스인 network-manager는 /etc/network/interfaces 파일을 참고하지 않고 별도로 설정을 보관한다. 즉, network manager에서 그래픽 유저 인터페이스(GUI)를 이용해서 설정을 변경하더라도 /etc/network/interfaces 파일에 반영되지는 않는다.

반대로 /etc/network/interfaces 파일을 수정하면 network-manager의 상태 메세지가 그 변경 내역을 반영하는 것 같지만, 별로 신뢰가 가지 않는다. 가끔 network-manager가 오작동을 하면서 시스템 전체가 다운되는(커널 패닉; kernel panic) 현상도 겪었다.


개인적으로는 network-manger 서비스를 삭제해 버리고, 오직 /etc/network/interfaces 파일을 통해서만 모든 네트워크 설정을 하는 것을 추천한다. 그래픽 인터페이스가 아니라서 직관적이지는 않겠지만, 이것이 오작동 없이 설정하는 가장 확실한 방법이다. 우분투에서 network-manger 서비스 삭제는 아래와 같이 할 수 있다.

$ sudo apt-get remove network-manager


만약 network-manager를 삭제하는 대신 일시적으로 서비스를 중단하고 싶다면 service disable 명령어를 이용한다.

$ sudo service network-manager disable




(2) 다른 유선/무선 네트워크 설정과 같은 IP주소 대역을 쓰는 경우


별 생각 없이 애드혹 네트워크를 구성하면서 고정IP 주소를 192.168.0.X 또는 192.168.1.X를 쓰는 경우가 많이 있다. 하지만 대부분의 경우 공유기를 통해 연결하는 유선랜 연결에서 할당받는 유동 IP 주소가 대부분 192.168.0.X 또는 192.168.1.X라는 사실을 염두에 둬야 한다.

필자의 경우 무선 와이파이는 애드혹 네트워크로 설정하고 유선랜은 원격 ssh 접속 및 디버그 용도로 쓰려고 했는데, 공교롭게도 유선과 무선이 같은 대역의 IP 주소를 쓰는 바람에 기대하던 대로 연결되지 않는 현상을 겪었다.

애드혹 네트워크를 고정IP로 쓰는 경우, (게다가 애드혹 모드에서 고정 IP를 쓰지 않으면 제대로 연결되지도 않음) 다른 네트워크과 서브넷(subnet) 주소가 겹치지 않도록 주의하자. (예를 들어, 192.168.3.X 대역을 쓰는 식으로 주소를 확실하게 구분할 것)




(3) Cell 정보가 잘못되어서 생기는 문제


애드혹 네트워크의 경우 고정된 게이트웨이(공유기의 역할)가 따로 있지 않지만, 설정상으로는 가상의 게이트웨이처럼 Cell 정보를 갖고 있다. 콘솔에서 iwconfig를 입력하면 맥 주소 형태로 된 cell 정보를 확인할 수 있다. 같은 애드혹 네트워크에 있는 모든 노드가 같은 cell 정보를 공유한다.


(iwconfig 명령을 통해서 확인할 수 있는 애드혹 네트워크의 각종 정보. 밑출 친 부분이 Cell 정보이다.
Cell 값은 특정 노드의 맥주소는 아니고, 재구성할 때마다 임의의 값을 할당받는 것으로 보인다.)


아직 정확한 원인은 모르지만, 설정상 전혀 이상이 없는데도 갑자기 애드혹 네트워크 상의 노드들끼리 전혀 통신을 못하는 경우가 있다. 그래서 각 노드를 하나씩 네트워크 재설정도 해 보고,  (sudo /etc/init.d/networking restart) 각 노드를 재부팅도 해 봤으며, USB 무선랜 카드를 뽑았다가 다시 연결하기도 했지만 여전히 되지 않았다.


확인해본 결과 노드를 하나씩 재설정/재부팅해서는 안 된다. 아마 Cell 정보에 문제가 있었던 것 같은데, 장비를 하나씩 재시작하면 네트워크가 켜져 있는 다른 노드가 계속 기존의 설정을 유지하고 있기 때문에, 그 노드로부터 잘못된 정보를 받아 와서 다시 공유하게 된다. 그러므로 확실하게 하려면, 모든 노드가 다같이 전원을 껐다가 켜야 한다. (애드혹 네트워크를 완전히 없앴다가 다시 만들자는 얘기) 이렇게 하면 iwconfig를 통해서 Cell 정보가 변경된 것을 확인할 수 있으며, 다시 노드들끼리 정상적으로 통신이 된다.




(4) 신호 세기와 물리적인 공간 특성으로 인한 문제


필자의 경우 넓은 지역에 먼 거리를 두고 노드를 배치할 필요가 없어서 이 문제가 치명적이지 않았다. 하지만 건물 안에서 멀티홉(multi-hop) 네트워크를 구성하기 위해 복도와 방을 이용해서 배치해본 결과, 벽과 코너의 구조로 인해서 신호를 받지 못하거나 신호가 미약한 상황을 만들어낼 수는 있었다. (사족: 하지만 결국은 실내 공간에서 물리적인 배치만 가지고 멀티홉 네트워크 만들기는 실패했다. 왜냐하면 어떻게든 미약한 신호가 닿을 경우 한번에 연결하려고 하지 중간 노드를 통해서 가려는 시도를 안하기 때문이다. ㅠㅠ 결국 라우팅 프로토콜에 약간의 예외처리를 해서 소프트웨어적으로 멀티홉을 구성해야 했다.)


필요에 따라 신호 세기를 조정해서 전송 범위(transmission range)를 바꿀 수 있다. 신호 세기가 세면 당연히 전송 범위가 늘어난다. 신호 세기는 아래와 같이 조정할 수 있다.

$ sudo iwconfig [네트워크_인터페이스_번호] txpower [신호세기]


신호 세기의 단위는 dBm이며, 0~20 사이의 값만 허용된다.


(iwconfig를 이용해서 신호 세기를 4dBm으로 설정한 경우)


또한 무선랜에서는 data rate가 낮을 수록 또한 전송 거리가 늘어나기도 한다. 그러나 아쉽게도 애드혹 모드에서는 data rate 설정을 변경할 수 없으니 참고하자.







반응형
블로그 이미지

Bryan_

,