보내기 전에 다른 유저가 데이터를 전송하고 있는지 체크 후 전송하는 방식입니다. 기본적으로 idle 상태라면, 데이터를 전송합니다. 아닐 경우, 3가지 방식이 있습니다.
채널이 전송 가능한 상태인지 계속해서 체크한다는 의미입니다.
채널이 idle 상태로 바뀌면 그 즉시 무조건 전송합니다.
채널이 idle 상태로 바뀌면 p의 확률로 전송합니다. 아닐 경우, 1 단위 시간만큼 기다린 후 반복합니다.
라고 하면, n개의 메시지를 보내야 할 때, 전송할 확률은
입니다. 이는 Binomial 확률입니다.
idle 상태인 경우 즉시 전송합니다. 아닐 경우, 랜덤한 시간만큼 기다린 후 다시 전송을 시도합니다.
충돌은 CSMA의 경우에도 여전히 발생합니다.
이렇게 전파를 통해 데이터를 전송하는데, 이 경우 주변 기기들이 이 신호를 받기까지 시간이 걸립니다. 따라서 전송하는데 발생하는 딜레이 때문에 충돌이 발생하게 됩니다. 이 경우, 충돌이 발생하면 모든 패킷은 사용할 수 없게 되어 버려지게 됩니다.
이 딜레이들을 전송 지연, 전파 지연이라고 합니다.
전송할 데이터 패킷 전부가 링크에 올라가는데 까지 걸리는 시간입니다. 이는 보낼 데이터의 크기, 링크의 data-rate/bandwidth 에 의해 결정됩니다.
전달될 신호가 목적지까지 도착하는데 걸리는 시간입니다. 이는 링크 간 거리, 링크의 전송 속도 에 의해 결정됩니다.
CSMA에서 충돌로 인한 피해가 매우 큽니다. (충돌시 겹친 패킷은 모두 사용 불가) 이를 위해 충돌의 피해를 줄이고자 나온 방법입니다.
이렇게 충돌이 발생한걸 감지하면, 전송을 중단합니다.
CSMA/CD 방식의 경우 2가지 observation이 발생합니다.
하지만, 무선 통신의 경우 두가지 모두 매우 어렵습니다.
무선 통신의 경우, 거리가 멀어질수록 신호의 세기는 급격히 줄어듭니다. 수신자는 SINR threshold 이상의 신호만 감지할 수 있는데, 거리가 멀 수록 신호가 약해지다 SINR 이하일 경우, 해당 신호를 감지할 수 없습니다.
또한 B도 전송을 한다면, B에서는 A가 보낸 신호가 묻혀 충돌 감지가 어렵습니다.
수신자 입장에서의 신호 세기를 결정할 수 없습니다. 아래 사진을 보면
C에서 A > B 신호는 감지할 수 없습니다. 따라서 C는 데이터 전송 가능 상태입니다. 만약 B에게 전송한다면, B의 입장에서는 A와 C가 보낸 두 신호 모두를 감지할 수 있는 상태이고, 이로 인해 충돌이 발생합니다. 이 때 A도 당연히 C > B 신호를 감지할 수 없기에 A도 전송 가능 상태가 됩니다.
이런 상황이 되고, C와 A는 서로 전송한 신호를 감지할 수 없기 때문에 정보를 전송하여 충돌이 발생합니다. 이러한 문제를 Hidden Terminal Problem (HTP) 라고 합니다.
이 경우를 살펴보면, X > Y 신호를 A는 탐지할 수 있습니다. 하지만 B는 탐지할 수 없기 때문에 A > B 전송은 사실상 충돌이 발생하지 않습니다. 수신자 입장에서는 충돌이 없지만, 발신자 입장에서는 충돌이 일어날 것으로 판단해버리기 때문에 데이터를 전송하지 않고, 이로 인해 효율이 떨어지게 됩니다. 이러한 문제를 Exposed Terminal Problem (ETP) 라고 합니다.