1. 개요

- 가장 널리 쓰이는 무선랜 프로토콜인 와이파이의 경우 호스트들이 AP(access point)라는 전파 수신 장치를 향해 와이파이 프레임 전파를 발송하고(이처럼 하나의 AP를 향해 여러 호스트들이 전파를 쏘는 집합을 BSS, basic service set라 한다), AP는 이를 수신하여 이더넷 프레임으로 변환하여 이를 라우터에게 전송한다. 이때 발송하는 전파는 공기를 따라 퍼져나가게 되고, 여러 호스트에서 동시에 전파를 발송하면 AP에서 수신할 때에는 이들 전파 사이에 collision이 발생하게 되므로 와이파이 무선랜 환경은 broadcast medium에 해당한다.

- 일반적인 유선랜 환경과는 달리 와이파이 환경에서 호스트가 게이트웨이에 접속하려면 사전에 반드시 AP를 거쳐야 하므로, 와이파이 프레임의 헤더에는 게이트웨이의 MAC 주소 외에 AP의 MAC 주소를 담는 필드가 추가로 있다. (이를 수신한 AP가 프레임에서 자신의 MAC 주소를 삭제하고 일반적인 이더넷 프레임으로 바꾸어 게이트웨이에게 전송하게 된다.)

- AP들은 보통 초당 10회 정도의 빈도로 ‘이 AP는 이 위치에 있다’라는 신호를 자신의 MAC 주소 등 정보와 함께 발송한다(이를 담은 프레임을 beacon이라 한다). 따라서 호스트는 특별히 작업을 수행하지 않고도 AP의 정보를 얻어 AP에 접속할 수 있다. (이처럼 호스트가 특별한 작업 없이도 AP의 정보를 얻는 것을 두고 passive scanning이라 한다.)

- 만약 호스트가 자신이 속하던 AP와 물리적 거리가 멀어져 그 AP와 통신을 중단하고 근처 가까운 다른 AP에 접속하게 되면 기존 연결돼 있던 TCP connection이 끊어질까? 결론은 No. TCP connection은 소켓과 소켓 사이의 연결이고, TCP connection에서의 소켓은 IP 주소와 포트 번호로 인덱싱을 한다. (하나의 TCP connection을 형성한 IP 주소 - 소켓 번호 튜플은 전 세계 인터넷을 통틀어 그 튜플 단 하나로 고유하기 때문.) 아예 게이트웨이가 바뀌어 DHCP 서버로부터 IP 주소를 다시 할당받는 경우가 아니라면 인터넷에 접속하는 AP가 바뀐다 해도 기존 연결돼 있던 TCP connection은 끊어지지 않는다. (3G나 LTE 같은 무선통신을 사용하는 경우 단시간 내에 굉장히 먼 거리를 이동한다 하더라도 그 동안 TCP connection이 중단되는 것 같은 모습을 보이는 경우가 없는데, 이는 3G, LTE 서비스를 제공하는 ISP가 구축한 서브넷의 물리적 규모가 그만큼 광대함을 뜻한다.)

2. CSMA/CA(collision avoidance)

와이파이는 CSMA/CD 방식을 사용할 수 없다. 케이블로 연결된 유선랜 환경에서는 한 호스트에서 발송한 전기 신호가 굉장히 먼 호스트에까지도 신호 세기가 크게 변하지 않고 잘 전달이 되기 때문에 collision detection에 어려움이 없으나, 공기를 통해 전파가 퍼지는 무선랜 환경에서는 한 호스트에서 발송한 전파가 거리의 세제곱에 반비례하여 세기가 약해져 collision detection에 어려움이 크기 때문이다. 와이파이가 사용하는 프로토콜 방식을 CSMA/CA라 하며, 다음과 같은 특징이 있다.

1) listen before trasmit

- 와이파이 또한 CSMA의 하나이므로, 호스트나 AP는 전파를 쏘기 전에 앞서 다른 호스트가 전파를 쏘고 있지는 않는지 얼마 정도의 시간을 기다린다. (호스트가 전파 쏘기 전에 기다리는 시간을 DIFS, 이를 수신한 AP가 ACK를 쏘기 전에 기다리는 시간을 SIFS라 한다.)

2) ACK

- 유선랜 환경에서는 한쪽 호스트에서 전기신호를 쏘면 그 랜 안의 모든 호스트가 전기신호 발송 사실을 알 수 있으므로, 한 호스트가 전기신호를 발송하는 동안 다른 호스트가 전기신호를 발송하지 않았다면 그 호스트가 발송한 전기신호는 게이트웨이에 무사히 잘 전달되었음을 알 수 있다. 그러나 무선랜 환경에서는 호스트가 전파를 발송했을 때 그 사실만으로는 그것이 AP에 collision 없이 잘 도착했는지 알 수가 없다. 따라서 와이파이에서는 호스트에게 전파가 정상적으로 도착했음을 알리기 위해 AP가 그에 대한 ACK를 전송한다. 호스트는 일정 시간을 기다리며, ACK를 수신했다면 collision없이 전파가 잘 전송됐다고 보고 ACK가 도착하지 않는다면 collision이 발생했다고 보고 재전송을 수행한다.

- 한 AP에 너무 많은 호스트가 접속해 있으면 collision이 발생할 일이 너무 많아 아무리 AP가 ACK를 전송하더라도 호스트가 이를 수신하지 못해 호스트가 계속 재전송을 반복하는 경우가 있을 수 있다. 재전송 횟수가 너무 많아지면 그 지점에서 네트워크 통신이 사실상 중단될 수 있으므로, 와이파이 표준은 최대 7회의 재전송만을 허용하고 그래도 ACK가 수신되지 않을 경우 그냥 다음 프레임으로 넘어가게 한다. (이러한 경우가 패킷 손실이 일어나는 유형 중의 하나다.)

3) RTS/CTS(ready to send/clear to send)

- collision이 발생했다면 이를 곧바로 알 수 있어 바로 발송을 중단할 수 있는 유선랜 환경과 달리, 무선랜 환경에서는 collision이 발생했는지 알려면 호스트가 전파를 발송 후 ACK가 오는지 타이머를 설정해놓고 타이머가 종료될 때까지 기다려야 그제야 비로소 collision이 발생했음을 알 수 있다. 즉 무선랜 환경에서는 collision이 한번 발생하면 어마어마한 시간 낭비가 생기는 것이다.

- 따라서 CSMA/CA에서는 데이터를 전송하기 전에 데이터를 전송하려는 호스트가 그 주변 호스트들에게 ‘지금부터 내가 AP를 점유할 것이니 다른 호스트들이 그 동안 전파를 쏘지 않게 해달라’라는 내용의 전파를 AP에게 쏜다. (이 메시지를 RTS라 한다.) 이를 수신한 AP는 주변 다른 모든 호스트에게 ‘지금부터 AP를 점유하려 하는 호스트가 있으므로 그 호스트가 프레임 전송을 끝낼 때까지 다른 호스트들은 전파를 쏘지 마라’라는 내용의 전파를 쏜다. (이 메시지를 CTS라 한다.)

- CTS는 ACK와 유사한 기능이 있어, RTS를 전송한 호스트는 CTS를 수신하지 않는다면 보내려고 하는 본래 프레임을 전송하지 않고 다시 RTS를 전송한다. 한편 CTS를 수신한 호스트는 그 이후로 AP를 향해 보내려고 했던 본래 프레임을 전송하고, 그에 대한 ACK를 AP가 전송함으로써 그 호스트의 그 차례에서의 AP 사용이 종료한다. 이때 전송하는 ACK는 다른 호스트들에게도 전송되며, 앞차례 호스트가 AP를 점유하느라 보낼 프레임이 있어도 보내지 못하고 대기하던 호스트는 이 ACK를 수신한 후 RTS를 전송하게 된다.

- TCP의 경우 connection 구축을 위해 3-way handshake라는 3단계 과정이 필요했는데, 이는 TCP의 경우 reliable한 통신을 보장하기 위해 리시버가 센더가 리시버의 sequence number를 정상적으로 수신했는지 확인하는 절차가 필요하기 때문이었다. CSMA/CA은 reliable한 통신을 보장하는 것보다 collision을 피하는 것에 초점이 맞춰진 프로토콜이므로 이런 추가 단계는 필요하지 않다.