iBetter Books
수정

WiFi와 CSMA/CA

PART 03에서 이더넷이 CSMA/CD를 쓴다는 것을 배웠습니다. CS는 먼저 듣고, MA는 누구나 보낼 수 있으며, CD는 충돌을 감지합니다. 그런데 앞 절에서 살펴봤듯이 무선에서는 CD, 즉 충돌 감지가 어렵습니다. 내 신호와 다른 신호가 겹쳐도 내 입장에서는 감지할 방법이 없습니다. WiFi는 충돌을 감지하는 대신, 충돌이 일어나지 않도록 회피하는 방향을 택했습니다. CSMA/CA에서 CA는 Collision Avoidance, 충돌 회피입니다.

말하기 전에 조금 더 기다린다

CSMA/CA의 핵심 아이디어는 채널이 비어 있다고 바로 전송하지 않는 것입니다. 채널이 비어 있음을 확인한 뒤에도 DIFS(Distributed Inter-Frame Space)라는 최소 대기 시간을 기다립니다. 그 다음에는 무작위 백오프 시간을 추가로 기다립니다. 각 기기가 서로 다른 난수를 뽑으므로 거의 동시에 전송을 시작하는 상황을 줄입니다.

기다리는 동안 채널이 다시 사용 중이 되면 카운트다운을 멈춥니다. 채널이 비면 남은 시간부터 다시 셉니다. 이렇게 안테나로 매체를 직접 듣고 사용 여부를 판단하는 방식을 물리 반송파 감지라고 합니다.

숨은 단말 문제를 완전히 해결하기 위해 옵션으로 RTS/CTS 메커니즘을 씁니다. 노트북 A가 AP에 데이터를 보내기 전에 짧은 RTS(Request to Send) 패킷을 먼저 전송합니다. AP는 CTS(Clear to Send)로 응답합니다. CTS는 AP 주변 모든 기기에게 방송됩니다. B는 A의 RTS는 못 들었어도 AP의 CTS는 들을 수 있습니다. CTS에는 앞으로 얼마 동안 채널을 사용할 것인지가 담겨 있습니다. B는 그 시간 동안 NAV(Network Allocation Vector)라는 내부 타이머를 세팅하고 전송을 미룹니다. 이렇게 매체를 직접 듣지 않고도 다른 기기가 알려 준 예약 정보로 사용 중임을 판단하는 방식을 가상 반송파 감지라고 합니다.

이 방식은 CSMA/CD처럼 충돌 후 복구하는 것이 아니라, 충돌 자체가 일어날 여지를 줄이는 방식입니다. 단, 모든 전송에 RTS/CTS를 붙이면 오버헤드가 커지므로 대용량 프레임에만 선택적으로 사용하는 경우가 많습니다.

확인 응답이 항상 필요하다

CSMA/CD는 충돌을 감지하면 재전송합니다. CSMA/CA는 충돌을 못 감지하므로 수신측이 ACK를 반드시 돌려줘야 합니다. ACK가 오지 않으면 손실로 판단하고 재전송합니다. 유선 이더넷에서는 링크 계층 ACK가 없었지만, WiFi에서는 모든 유니캐스트 프레임에 ACK가 붙습니다.

이것이 WiFi가 유선에 비해 오버헤드가 큰 구조적 이유입니다. 공기를 매질로 쓰는 대가입니다. 다음 절에서는 이 WiFi 기술을 모바일 환경으로 확장한 셀룰러 네트워크를 살펴봅니다.