[노트북 A] [노트북 B]
\ /
\ /
\ /
\ /
\ /
[AP]
위의 문제처럼 바로 데이터를 보내면 AP에서 충돌이 발생할 수 있기 때문에 A는 바로 데이터를 보내지 않음.
AP에게 짧은 RTS 제어 프레임만 먼저 보냄. (A: "AP야, 나 데이터 보내도 돼?”)
그러면 A의 RTS를 받은 AP는 모두에게 CTS를 보낸다. (AP: "A가 지금부터 데이터를 보낼 거니까, 다른 장치들은 기다려.”)
다른 장치들이 AP의 CTS를 받으면 “지금 A가 AP로 데이터를 보내는구나.. 나는 기다려야겠다”하면서 데이터를 보내지 않음. 이렇게 충돌이 회피됨.
A는 이때 실제 DATA를 전송함.
AP는 데이터를 받으면 ACK를 응답함.
→ 기다리는 시간은 RTS/CTS안에 “숫자(시간)”로 명시되어 있다.
RTS/CTS 프레임 안에는 Duration이라는 숫자값이 들어가는데 이 숫자값 만큼 기다린다.
예시
A → RTS
(Duration: 500μs)
이렇게 보내면
"A가 앞으로 500마이크로초 동안 채널 사용할 예정” 이런 프레임이 되는것이다.
이에 따라 AP는 다른 장치들에게 아래와 같이 동일한 duration을 담은 CTS를 보낸다.
AP → CTS
(Duration: 500μs)
이 CTS를 받은 다른 장치들은 "500μs 동안은 내가 전송하면 안 되겠구나” 하게 되는 것.
장치들은 이 기다리는 시간을 스스로 저장하게 되는데 이를 NAV라고 한다.
NAV = Network Allocation Vector
B가 CTS 받으면
→ NAV = 500μs 설정
→ 그 시간 동안 전송 금지
시간이 지나서 NAV = 0이 되면
→ 다시 채널 사용 가능