CSMA
CSMA(Carrier Sensing Mutiple Access)
ALOHA는 전송할 데이터가 있으면 바로 전송하기 때문에 충돌이 자주 일어난다. 충돌을 최소화하여 성능을 높이기 위해 각 스테이션이 보낼 상대에게 신호를 보내 상태를 점검한다. 충돌 가능성을 줄일 수는 있지만 제거는 할 수 없다. ( 전파 지연 때문 ) 그래서 충돌이 일어났을 때 처리하기 위한 방법을 추가한 방식이 CSMA/CD, CSMA/CA가 있다.
지속 방식
채널이 사용중인지 아닌지에 따라 각 스테이션은 처리하는 방식
1. 1-persistent
지속적으로 계속 사용중인지 확인하다가 채널이 사용중이지 않은 것(idle 상태)을 감지하면 즉각 프레임을 전송한다. 이 방식은 2개 이상의 스테이션이 있으면 모두 감지할 것이고 그럼 굉장히 높은 충돌 위험을 유발한다.
2. none-persistent
전송할 프레임이 있는 스테이션이 채널을 탐지 채널이 idle이면 즉각 프레임을 보낸다. idle이 아니면 임의 시간을 대기하고 있다가 다시 탐지한다. 2개 이상의 스테이션이 같은 시간에 대기하고 있다가 동시에 전송할 확률이 낮기 때문에 충돌의 위험을 낮춘다. 그러나 이 방식은 전송할 프레임이 있는 스테이션이 대기중인데도 채널이 계속 idle일 가능성이 있어 효율이 떨어진다.
3. p-persistent
환경에 맞게 확률 p값을 조정해 프레임을 보내는 방법이다. 전송 대기중인 스테이션이 많은 경우 p를 작게 한다. EX) 채널 idle을 기다리는 스테이션 수가 평균 5개면, p=0.2로 세팅 가장 좋은 방법으로 알려져 있다.
CSMA/CD (Collision Detection)
충돌을 탐지해 해결하는 방식이다.
- 전송하면서 동시에 충돌을 탐지한다.
- 충돌을 감지하면 backoff한 다음 재전송한다.
backoff : 시간적으로 지연대기를 한다는 의미(여러 슬롯시간을 의도적으로 줌)
- ACK가 없다.
- 프레임 전송을 완료할 때까지 충돌이 없으면, 프레임이 성공적으로 전송된 것으로 생각한다. (ACK의 역할)
- 보통 LAN 같은 유선에서 사용한다.
최소 프레임 크기
CSMA/CD가 동작하기 위해서는 프레임의 크기에 제한을 둬야한다.
만약 프레임 크기가 1비트인 경우:
A가 D에게 1비트 프레임 전송 →
1비트를 전송할 때까지 충돌 신호가 오지 않는다. →
성공적으로 전송된 것으로 생각 = ACK) →
하지만 D는 A가 전송을 다 한 후에 충돌이 일어나 프레임을 수신하지 못한다.
A가 전송한 첫 번째 비트가 LAN 끝의 D에 도달하기 전에 충돌을 감지할 수 있어야한다.
최소 충돌신호가 되돌아올 시간까지 A는 프레임을 전송하고 있어야 하므로 그만큼의 프레임 크기를 지녀야 한다.
그래서 프레임 전송시간(Tfr)은 최대 전파 시간(Tp, max propagation time)의 2배가 되어야 한다.
CSMA/CA (Collision Avoidance)
유선에서는 충돌을 탐지할 수 있으나 무선에서는 충돌을 탐지하기가 어려워 충돌을 회피하도록 보완한 방식
- backoff를 미리 수행한다.
- ACK 사용 (성공적인 도착을 확인할 방법이 없어서)
계속 사용중인지 감지하다가 idle인 것을 발견하면 프레임을 바로 보내지 않고 프레임 간 공간(IFS, Interframe Space) 시간만큼 그냥 멈춘다. 그리고 다시 탐지했을 때도 idle이면 동작한다.
Hidden node problem
A와 C의 전파 영역이 제한되어 있고 둘다 B에게 전송하려할 때 충돌이 발생함에도 A와 C는 그 상황을 모르게 되는 문제를 뜻한다.
RTS/CTS
hidden node problem을 해결하기 위해 도입된 방식
B에게 데이터를 보낼 게 있는 A 스테이션은 RTS(Request To Send) 요청을 보내 연결 요청을 한다. B는 주위의 스테이션에게 CTS(Clear To Send)를 브로드캐스트 한다.
C나 D같은 RTS를 보낸 적 없는 스테이션은 CTS를 받으면 NAV라는 대기시간 동안 B에게 프레임을 보낼 수 없게 된다. A가 CTS를 받으면 SIFS만큼의 대기 후에 그제야 D에게 Data를 보내게 된다. 다 보내면 B는 SIFS만큼 idle이 되면 Data가 끝났다고 인식하고 주위 스테이션에 ACK를 보낸다.
C나 D는 NAV를 종료하고 A는 전송이 끝나게 된다.