티스토리 뷰

위 사진은 802.11의 프레임 포맷이다.

오류 제어를 위한 CRC 부분이 있고 Data는 2312 바이트까지 전송이 가능하다.

근데 앞서 말했듯이 PHY포맷의 헤더 부분은 고정된 최저 속도로만 전송이 가능하며 payload부분의 속도를 모듈레이션 선택에 따라 조절할수 있다고 했다. 헤더보다 데이터 전송 속도가 10배정도 빠르게 되면 헤더가 전체 데이터 전송에 80%를 차지할만큼 오버헤드가 엄청 커질수 있다.

따라서 프레임을 쪼개는 fragmentation을 하는것보다 오히려 프레임을 합쳐서 헤더가 차지하는 비율을 적게 만드는게 좋다.

이것을 aggregation이라고 한다.


프레임 포맷에는 주소 필드가 4개나 존재한다. AP는 무선 신호를 받아서 유선신호로 바꾼다음 라우터로 보내서 외부 인터넷망과 연결될수 있게 끔한다. AP는 브릿지 모드로 동작한다. AP끼리는 distribution system을 통해서 연결 되어 있다.


ad hoc mode에서는 distribution 이라는 시스템이 존재 하지 않기 때문에 주소가 4개나 필요가 없다.


BSSID가 다르면 같은 채널에서 통신을 하더라도 패킷을 버려버린다. AP의 맥어드레스가 BSSID이다.

어드레스 1에는 전송자의 맥 주소 어드레스 2에는 데이터를 수신하는 수신자의 맥주소가 항상 들어간다.


ACK의 Duration필드가 있는 이유는 fragment의 ACK가 다음 fragment의 RTS/CTS로 작용하기 때문이다.

이 ACK의 duration은 현재 시간 부터 다음 fragment의 ack 수신까지 걸리는 시간이 적혀있고, 이걸 수신한 다른 노드들은 NAV를 설정해서 불필요한 캐리어 센싱을 하지 않게 도와준다.

CTS에는 리시버 주소만 필요하다.

로밍기능은 같은 ESS(Extended Service Set)에 있는 노드들끼리 연결을 유지시켜주는 기능이며, GSM에서의 로밍과는 차이가 있다.지하철에서 와이파이가 지속적으로 끊기는 이유가 GSM에서의 로밍과는 다른 ESS내에서만 유지가 되는 로밍이기 때문이다.

AP들은 비컨 프레임을 주기적으로 전송한다. 근데 이 비컨 프레임은 여러 채널에 전송된다. 와이파이를 키면 핸드폰이 여러 채널의 비컨프레임을 수신하려고 노력한다. 비컨프레임을 받았을때 AP의 존재를 알게 된다.

맥 프로토콜의 관리를 위해서 위의 기능들이 구현 되어야 한다.


인증요청,인증 응답을 성공 적으로 주고 받고 연결 요청 연결 응답을 통해 와이파이에 연결 된다.

인증은 되었지만 AP에 너무많은 요청이 들어온 경우 연결요청은 거부할수있다.


비컨 프레임을 활용한 동기화


앞의 PCF에서 슈퍼프레임의 시작과 끝을 비컨프레임이 알려주게 된다. 모든 노드들의 시작과 끝이 비컨 프레임을 통해서 동기화 되었기 때문에 이런 통신이 가능한것이다.


AP의 존재 또는 AP의 변화 정보를 알려준다는 의미로 정보의 동기화라고도 한다.


비컨이 너무 자주 발생하면 다른 노드들의 전송 기회를 뺏기도 하고, 그렇다고 비컨 프레임 주기가 너무 길어지면 연결이 끊기기도 한다.

그래서 적당히 200~500ms정도로 인터벌이 설정 되어 있다.


802.11의 DCF는 기본적으로 best effort방식으로 동작한다. 최선을 다해서 패킷을 전송하지만 보장하지는 않는다.

다른 노드가 비컨 인터벌 될때까지 데이터 전송을 끝내지 못한 경우 미디움이 free될때까지 기다렸다가 비컨 프레임을 전송한다.

비컨 프레임은 우선순위가 굉장히 높다 (PIFS를 사용한다)

SIFS만큼 기다렸다가 전송하게 되면 ACK와 CTS와 충돌하게 되므로 네트워크에 악영향을 미칠수 있다.


ad hoc mode에서는 ap가 없기 때문에 IBSS내에서 누가 비컨 프레임을 보내야 할지 결정해야 하는데, 랜덤으로 결정한다.

IBSS에 참여하고 있는지 안하는지는 비컨 프레임 수신여부로 판단할수 있다.


802.11 맥 프로토콜에는 전력 소므를 줄이기 위한 기능이 구현 되어 있다. Transceiver를 power off하는 것이다.

전송할때만 전력 소모가 되는게 아니라, receiving하는데에도 전력이 많이 사용된다.

누가 데이터를 전송하고 있는지 없는지를 판단하는 것이다 

그렇다고 Transceiver를 끄는 경우 주변 노드가 나에게 데이터를 보내줄수 없고 나도 전송을 할수가없다. 


항상 끄는게 아니라 sleep과 awake를 주기성을 가지면서 반복해야한다.

대부분의 경우 전력 소모를 줄이기 위한 가장 기초적이며 많이 사용되는 방법이다.



인프라 모드에서 ap가 TIM과 DTIM(비컨에포함됨)을 노드들에게 주기를 알려줌으로써 문제를 쉽게 해결한다.

ad hoc mode도 이걸 응용해서 ATIM이라는것을 주변 노드와 교환한다.

Traffic indicator map


ap의 데이터 수신자 목록이 TIM에 기록 되어 있다. DTIM은 멀티 캐스트 또는 브로드 캐스트가 있다 없다는 정보를 기록한다.


내가 수신자 리스트에 없는 경우 한 주기 동안 쭉 슬립하면 된다. 우리는 비컨 인터벌을 알고 있으니까 비컨이 올때쯤 미리 깨어나서 비컨을 수신한다.

DTIM interval은 비컨에 기록되어 있는것인데 브로드 캐스트 or 멀티 캐스트 패킷이 몇개의 비컨 주기 마다 전송 될것인가가 기록돼있다.


비컨 4개마다 DTIM이 있다 = 비컨 주기 4번 마다 브로드 캐스트가 발생할것이다 = 주기 4번마다 너는 무조건 깨어나라

비컨을 받자마자 sleep에 들어간다.(broadcast발생 주기가 아니라면)


내가 수신자 목록에 있는 경우 sleep에 들어가지 않고 ap가 나에게 데이터를 전송할때까지 쭉 깨어있다.


이렇게 주기적으로 sleep and awake를 반복하는것을 duty cycling이라고 하며 이 주기는 ap가 결정한다.


ap가 없는 경우 이런 문제가 복잡해진다.


WIFI ad hoc mode에서는 모든 노드가 서로 통신이 가능하다고 가정한다.


멀티 홉인 경우 모든 노드가 서로 통신 할 수 없는 경우가 있다. 

이런 경우에는 이렇게 AP에 의한 주기적으로 잠들었다 깨는 방식이 동작하지 않는다.


ad hoc mode에서 비컨을 발생시키는 노드는 랜덤 노드라고 했다. 

처음에 비컨 주기를 모르는 상태에서 비컨이 언제 생성될지 모르니까 일정 시간 동안 비컨이 발생 안되더라도 계속 기다린다.


비컨을 받고 ATIM을 발생 시킨다.ATIM을 통해서 내가 어떤 노드에게 보낼 데이터가 있다고 표현한다.

그리고 나서 데이터를 주고 받아서. 비컨 주기 동안 슬립 되는것을 방지한다.



 










댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함