[임의접근] CSMA/CD, CSMA/CA

Kim Minseok·2023년 11월 20일
0

network

목록 보기
2/2

CSMA는 대표적인 임의접근 방식 프로토콜이다. 임의접근에서는 지정된 순서나 채널에 따라 매체를 나눠쓰지 않는다. 그냥 각 지국이 평등한 지위에서 아무때나 신호를 보내고 싶을 때 보낸다. 두 지국이 동시에 신호를 보낸다면 반드시 충돌이 발생한다.

참고로 또다른 다중접근 방식인 CDMA와 이름은 비슷하지만 전혀! 다른것이다.

임의접근, 다중접근, MAC이 무엇인지는 링크 참조

CSMA

CSMA는 유선 이더넷과 와이파이 등에서 사용하는 대표적인 다중접근 방식이다. Carrier-Sense Multiple Access의 준말이다. Carrier(반송파)를 Sense(감지)한다는 의미이다. 이 글에서는 그냥 반송파 = 매체라고 이해해도 좋다. 원리 자체는 아주 간단하다. 각 지국은 신호를 보내기 전에 우선 매체를 감지한다. 만약 아무도 신호를 보내지 않는다면 신호를 보낸다. 누군가 신호를 보내는 중이라면 보내지 않는다. 쉽게 말하면 눈치게임이다.

tip) 유선통신에서 왜 갑자기 반송파 얘기가 나와요? -> 유선 디지털 통신은 기저대역 전체를 반송파로 쓰는 통신으로 볼 수 있다.

정보의 전달속도한계

매체가 비어있을 때 보낸다는 아이디어 자체는 굉장히 좋아보인다. 그러나 두 지국이 동시에 매체가 비었다고 생각하고 신호를 보내기 시작한다면 골치가 아파진다. 즉 눈치게임에서 두 명이 동시에 숫자를 외처버린 것이다. 다른 지국들은 두 지국이 보내는 신호가 뒤섞여 제대로 통신을 할 수 없을 것이다.

이런 일이 발생하는 이유는 정보의 전달속도에는 한계가 존재하기 때문이다. A,B,C,D가 같은 CSMA를 사용하는 매체에 접속되어있다고 가정하자. B가 매체를 감지해보니, 아무도 메시지를 보내지 않아서 신호를 전송했다. 이 신호가 C까지 가는 데 극단적으로 대략 10초 정도 소요된다고 가정하자. B가 보낸 신호가 C에게 도달하기 전 까지는 C는 아무도 매체를 사용하지 않는다고 생각할 것이다. 만약 이 시간 동안 C가 신호를 전달한다면 B의 신호와 중첩될 것이다. 즉 이 전달시간(10초) 동안은 충돌이 발생할 수 있는 취약시간이다.

아래 그림이 이런 상황을 그래프로 나타낸 것이다. 세로축이 시간이다.

회색으로 칠해진 부분이 두 신호가 중첩된 상황이다. 그렇다면 이 문제를 어떻게 해결할 수 있을까?

지속방식

매체를 감지하고, 전송하는 방식, 즉 CSMA에서 Carrier Sense 부분을 어떻게 하는지에 따라 충돌이 발생하는 확률이 비교적 적은 경우가 있다. 이를 지속방식이라고 한다.

  • 1-지속(1-persistent)
    매체를 감지했더니 누군가 보내고 있네? 그럼 다시 매체가 빌 때 까지 기다리다 비자마자 냅다 바로 보내는 방식을 1-지속 방식이라고 한다. 유선 이더넷의 CSMA/CD는 이 방식을 사용한다.

  • 비지속
    1-지속방식은 계속해서 연속적으로 매체를 감지하는 방식이지만, 비지속은 지국마다 랜덤한 시간을 두고 감지한다. 지국마다 기다리는 시간이 다르기 때문에 보내는 타이밍도 달라진다. 따라서 비교적 충돌이 덜 일어난다는 장점은 있지만, 회선이 비어있는데도 어떤 지국도 전송을 하지 않는 경우도 존재할 수 있다. 즉 전송 효율이 떨어진다.

  • p-지속
    1-지속과 비지속을 합친 방식이다. 1지속처럼 지속적으로 매체가 빌 때 까지 감지한다. 비자마자 확률 p로 전송을 한다. 전송하지 못했다면 특정 시간(q=1-p) 만큼 기다리다가 매체를 다시 감지한다. WIFI에서의 CSMA/CA에서는 이 방식을 사용한다.

물론 충돌 가능성을 줄여주는 것이지 세가지 방법에서 모두 충돌이 발생할 수 있다. 두 가지 해결책이 있는데, 첫번째는 충돌을 감지한 뒤 재전송을 하는 것이고, 두번째는 충돌 자체를 회피하는 것이다.

CSMA/CD

CD는 Collision Detection의 약자이다. CSMA/CD를 다 풀어보면, "매체를 감지하고, 충돌을 감지"하는 기술이다. 충돌을 어떻게 감지한다는 것일까? CSMA/CD에서는 각 지국이 메시지를 보내면서 동시에 매체를 감지한다. 만약 문제없이 잘 보내고 있다면, 매체에서 감지된 신호는 송신하는 신호의 세기(전력)가 동일할 것이다. 그러나 누군가가 보낸 신호가 같이 감지된다면 신호는 내가 보내는 신호와 세기(전력)가 달라질 것이다. 이 원리로 충돌을 감지할 수 있다. 송신자는 충돌이 감지된다면 감지되는 즉시 전송을 멈추고, 임의의 시간을 기다린 뒤 전송한다.

전송시간

그런데 여기에는 중요한 전제조건이 있다. 프레임의 전송시간 안에 충돌이 발생 하는 경우에만 충돌을 감지할 수 있다는 것이다. 데이터를 전부 전송해버린 이후에는 충돌이 발생해도 전송자 입장에서는 알 수 없기 때문이다. 따라서 전송자는 프레임을 제일 먼 곳에 있는 지국까지 보내는 지연, 그리고 그 지국에서 보내는 지연 만큼의 시간 동안 계속해서 프레임을 전송하고 있어야 한다. 최소 프레임 전송시간(Tfr)은 최대 전파시간(Tp)의 두배가 되어야 한다. (그림으로 직접 그려보면 이해가 될 것이다.)

뒤집어 생각하면, 프레임 전송시간에 따라 충돌 감지가 가능한 최대 거리가 제한되어있다는 뜻이다. 프레임 전송시간이 길 수록 충돌감지가 가능한 거리도 멀어지고, 프레임 전송시간이 짧아질 수록 충돌감지가 가능한 거리도 짧아진다.

Q) 10BASE5 이더넷에서, 10Mbps의 전송속도를 가진 네트워크에서 최소 프레임이 64byte라면, 이론상 충돌 감지 가 가능 거리는 어느정도인가? 전파속도는 200,000,000m/s로 계산한다.

프레임전송시간 = 512bit / 10Mbps = 약 0.00005 초
따라서 최대 전파시간은 약 0.000025초이다.
최대 전파 거리는 200,000,000m/s * 0.000025 = 약 5000m

물론 이는 이론상 거리고, 실제 10BASE5 이더넷에서는 중계기를 거치는 지연으로 인해 전파가능거리가 작아진다. (약 2.5km)

백오프 시간

위에서 충돌이 감지된다면 각 지국은 각자 임의의 시간을 기다린 뒤 재전송을 한다고 했다. 이 임의의 시간을 백오프(Back-Off) 시간이라고 한다. 그렇다면 백오프시간은 어떻게 결정될까?

백오프시간 = 0에서 2^(전송시도횟수) 사이의 임의의 정수와 최대전송시간의 곱

수식 자체를 본다면 충돌횟수(전송시도횟수)가 많을수록 높을 확률로 더 오랬동안 기다렸다 송신하게 되어있다.

CSMA/CA

무선매체에서는 유선매체에서처럼 충돌을 감지하는 것이 힘들다. 크게 세가지 이유가 있다.

  1. 전송을 하면서 동시에 수신을 하는 기능을 구현하는 것이 번거롭다.
  2. 3차원 공간에 전파되는 전자기파의 특성상 감쇠가 심하기 때문에 송신자 입장에서는 자기가 송신하는 신호에 수신 신호가 전부 묻혀버린다.
  3. 같은 링크안에 있는 지국끼리도 서로 신호를 주고받지 못하는 경우(숨겨진 지국 문제)가 발생할 수 있다.

    위와 같은 경우, B와 C는 서로에게 통신이 불가능하다. 그러나 A는 두 지국의 신호를 전부 수신할 수 있다. 만약 B와 C가 동시에 전송을 하면 A는 제대로된 데이터를 수신하지 못한다. 그럼에도 B와 C는 서로에게 통신이 불가능하므로 충돌이 났다는 것을 인지하지 못한다. B에게는 C가 숨겨진 지국이고, C에게는 B가 숨겨진 지국이다.

그래서 무선에서는 충돌을 감지하지는 못하고, 충돌 자체를 회피하는 접근방식을 사용해야 한다. CA는 Collision Avoidance의 약자이다. CSMA/CA를 다 풀어보면, "매체를 감지하고, 충돌을 회피"하는 기술이다.

CSMA/CA의 단계

각 지국에서 송신하고 싶은 데이터가 있다면, 우선 RTS(전송요청)를 공중에 전파한다. 내가 누구에게 얼만큼의 데이터를 전달하고 싶다고 전파하는 것이다. RTS를 받은 해당 지국은, CTS(비움요청)을 공중에 전파한다. 나 지금 누구한데 데이터를 받아야 하는게 있으니 다들 이 시간동안은 메시지를 보내지 말아달라고 하는 것이다. CTS를 전파받은 지국들은 요청 시간동안 전송을 하지 않는다. (이를 NAV라고 한다.) 수신자가 보낸 CTS를 받은 송신자는 그제서야 원래 보내고자 했던 데이터를 전송한다.

RTS,CTS를 주고받는 것을 핸드쉐이킹이라고 한다. 핸드쉐이킹 과정에서는 당연히 충돌이 날 수 있다. 송신자는 수신자로부터 CTS 응답을 받지 못한다면 충돌이 난 것으로 간주하고 임의의 시간을 기다린 후 다시 재전송을 시도한다. 왜 이런 복잡한 과정을 거칠까? 그냥 핸드쉐이킹을 하지 않고, 바로 메시지를 전송한 뒤 수신자로부터 확인 응답을 받아서 검증하면 안되는걸까? 만약 핸드쉐이킹 없이 그냥 메시지를 전송하면 메시지의 크기만큼이나 손해를 본다. 그러나 핸드쉐이킹은 본 메시지에 비하면 크기가 작기 때문에 비교적 충돌 부담을 감수할만 한 것이다.

이러한 노력에도...

충돌문제를 해결하려는 필사적인 노력에도 결국 프레임을 전송하지 못하고 잃어버리는 경우도 생길 것이다. 그래도 데이터링크는 각 링크에 대해 오류없는 데이터 전송을 책임져야 한다. MAC에서도 해결하지 못한 충돌 문제는 상위 계층(DLC)에서 재전송/흐름제어 기법을 통해 책임을 지게 되어있다.

profile
안녕하세요! 대학생 김민석입니다.

0개의 댓글