CSMA CD/CA

CSMA (Carrier Sense Multiple Access)는 Contention-Based Schemes 중에 가장 기본이 되는 Aloha나 Slotted Aloha의 보완 형이라고 보면 되는데, 이 Aloha들의 문제점은 미디어의 상태를 고려하지 않고 그냥 계속 시도를 하다 보니까 아무래도 충돌을 피할 수 없는다. 그래서 이를 보완한 것이 CSMA방식이다.

이름에서 알 수 있듯이, Media를 계속 감지를 하면서 만약 Media가 비어 있다면 즉시 전송을 시작하고 만약 Media가 사용 중이라면, 3가지 경우로 나뉜다.

CSMA의 3가지 Persistent Mechanism

1-Persistent CSMA

계속 감지하다가, 미디어가 비어 있을 때 바로 전송을 한다. 만약에 미디어가 이용 중이면 또 계속 감지하다가 비었을 때 바로 시도한다.

Non-Persistent CSMA

계속 감지하다가, 비어 있으면 바로 전송하고 만약에 이용 중이면 임의의 시간 동안 기다렸다가 (기다리는 중에 미디어를 감지하지 않는다) 다시 시도한다.

p-Persistent CSMA

1과 non-Persistent의 사이에 있는 방식인데, 계속 감지를 하는데, 비어있으면 바로 전송을 시작한다. 만약에 미디어가 이용 중이면, 미디어가 비어질 때까지 계속 감지를 한다. 그래서 비게 되면 일정 확률 p로 전송을 시도한다. 이때 전송이 되면 그냥 되는 거고 안되면 (1-p의 확률로), 다음 슬롯 시간까지 대기하다 또 일정 확률 p로 전송을 시도한다.

여기까지가 이제 기본적인 CSMA에 대한 설명이고 이제 CA (Collision Avoidance) / CD (Collision Detection)는 전송 중 충돌에 관여하기 위함이다.

만약 C가 타깃이고 A와 B 둘다 미디어가 비었다고 생각을 한 상황이다. 그런데 A가 좀 빨라서 먼저 데이터를 전송 중일 때 B도 보내려고 할 텐데, 이때 어떻게 처리하느냐에 따라 CA/CD가 나뉜다.

먼저 CSMA/CD는 충돌일 발생했음을 감지하면, 일단 전송을 중지하고, 임기의 시간만큼 기다렸다가(Random backoff) 다시 전송을 재개하는 방식이다. 순서는 다음과 같다.

CSMA/CD 동작순서

  1. 전송 중
  2. 충돌이 발생했는가?
    1. No, 그냥 전송.
    2. Yes, 다른 전송자가 충돌을 감지하지 못했을 경우를 대비해 jam signal이란 것을 보낸다.
  3. 전송 횟수 K = K+1
  4. K가 15보다 큰가?
    1. Yes, 그럼 에러로 판단하고 종료
    2. No, wait time을 위한 난수 T를 뽑는다 (0~2^K-1)
  5. wait time = T x (사용자 정의에 의한 상수), 만큼 기다린 후 1번으로 돌아간다.

CSMA/CD 같은 경우는 충돌을 모니터링하는 게 중요하기 때문에 유선 (wired) 네트워크에서 (Ethernet, 

IEEE 802.3) 주로 쓰이는데, 만약에 지속적인 모니터링이 힘든 무선 (wireless) 네트워크에서는 어떻게 충돌에 대응해야 할까? 또한 CSMA/CD의 경우 Hidden Terminal Problem 때문에 무선 네트워크에서는 쓰기 힘들다.

A와 C는 서로를 확인 할 수 없기 때문에, 둘다 B에게 전송을 시도한다.

먼저 Hidden Terminal Problem은 그림과 같이 A, B 그리고 C가 순서대로 있을 때 A와 C는 서로 볼 수 없으므로 (송수신 반경 밖이라), B가 A에게서 데이터를 전송받고 있음에도 그를 인지하지 못하고, C는 B에게 데이터를 전송하려고 해서 발생되는 충돌이다. 

아무튼 이름에서 처럼 CSMA/CA는 충돌을 회피하는 방식인데, Hidden Terminal Problem을 극복하면서 충돌을 피하는 여러 가지 제안된 방법이 있지만, 그중에 하나를 설명하면,

CSMA/CA 동작방식

먼저 RTS/CTS라는 개념이 있다.

  • RTS: Request to Send
  • CTS: Clear to Send

만약 A에서 B에 데이터를 보내고자 하면, A는 먼저 B에 RTS신호를 보내고, 이를 받은 B는 본인의 현재 상태에 따라 응답을 하는데, 만약 데이터를 받을 수 있는 상황이면, CTS를 영역 안에 있는 모든 노드에게 전파를 한다. 이때 RTS를 보낸 노드는 데이터를 보내도 된다고 생각을 하고, RTS를 보내지 않았지만, CTS를 받은 노드는 데이터를 보내면 안 된다고 인지함으로써 충돌을 피할 수 있다.

그리고 추가적으로 RTS와 CTS를 기본 콘셉트로 한 상태에서, DCF(Distributed Coordination Function)라는 전송방식이 완성이 되는데, 전송을 하고자 하는 노드가 미디어가 비어있다고 해서 바로 전송을 시작하는 게 아니라, 일단 일정 시간 대기를 한다, 이 구간을 DIFS(DCF Interframe Space)라고 부른다. 대기를 하는 이유는 혹시 다른 노드에서 이미 전송을 시작했지만 감지되지 않은 경우가 있을 수 있기 때문이다. 그리고 일정 시간 동안 계속 미디어가 비어있다면, 이제 RTS를 보낸다. 그다음 데이터를 주고받을 때마다 약간 씩의 계산 시간이 있는데 이것을 SIFS(Short Interframe Space)라고 부른다. 이렇게 DCF방식이 완성이 되는데 대표적인 예로는 IEEE 802.11를 들 수 있다.

물론 이에 따른 단점으로는 아무래도 실제 데이터를 주고받기 전까지나 후에 여러 번 통신을 해야 하므로 추가적인 overhead나 delay를 단점으로 볼 수 있다.