한양과학기술고등학교

에듀테크 프로젝트 대시보드

CSMA/CA와 숨은 노드 문제

Wi-Fi는 왜 "말하면서 듣기"를 못할까?

유선 이더넷의 CSMA/CD는 보내는 도중에도 충돌을 감지하지만, 무선은 그게 불가능하다  ·  그래서 생기는 숨은 노드 문제와 해법 RTS/CTS

💻
A
IDLE
📶
B (AP)
IDLE
💻
C
IDLE
들림
A와 C는 둘 다 B와는 통신하지만, 서로의 신호는 도달 범위 밖이라 들리지 않는다 — 이것이 숨은 노드(hidden node)
// 위 두 버튼으로 "충돌 발생"과 "RTS/CTS로 회피"를 비교해보세요.

1 문제: 숨은 노드

A는 채널이 조용하다고 판단(캐리어 감지)해도, 실제로는 C가 B에게 이미 보내는 중일 수 있다. A와 C가 서로를 못 듣기 때문. 둘이 동시에 보내면 B에서만 충돌이 일어난다.

2 해결: RTS/CTS

A가 먼저 짧은 RTS(보내도 될까?)를 보내고, B가 CTS(그래, 지금 보내)를 모두에게 들리도록 응답한다. 이때 C도 CTS를 듣고 채널이 예약됐음을 안다.

3 NAV로 대기

CTS 프레임에는 "앞으로 이만큼 조용히 해달라"는 지속시간이 담겨 있다. C는 이 값으로 NAV 타이머를 세우고, A의 DATA·ACK가 끝날 때까지 전송을 미룬다.

왜 무선은 CSMA/CD(충돌 감지)를 못 쓸까? 유선은 송신 중에도 케이블의 전압 변화를 동시에 관찰할 수 있지만, 무선 안테나는 강한 자기 송신 신호에 묻혀 약한 수신 신호를 들을 수 없다(귀머거리 문제). 그래서 Wi-Fi는 충돌을 사후에 감지(CD)하는 대신, CSMA/CA(Collision Avoidance) — 애초에 충돌을 피하는 전략을 쓴다.
RTS/CTS를 쓰지 않을 때도 채널이 붐비면 각 노드는 임의 백오프(random backoff) 시간만큼 기다렸다가 재시도해 충돌 확률을 낮춘다. 이는 이더넷의 이진 지수 백오프와 같은 아이디어다.

💡 그럼 RTS/CTS도 매번 쓰면 되지, 왜 항상 켜두지 않을까?

RTS·CTS 자체도 전송 시간과 대역폭을 소모한다. 데이터 프레임이 짧거나 숨은 노드가 없는 좁은 공간(집 공유기 하나뿐인 경우)이라면 오히려 오버헤드가 더 크다. 그래서 실제 Wi-Fi는 프레임 크기가 특정 임계값(RTS Threshold)을 넘을 때만 RTS/CTS를 선택적으로 사용하도록 설정할 수 있다.