951. 반송파 감지 다중 접속 및 충돌 검출 (CSMA/CD) - 유선 이더넷 채널 접근 제어 프로토콜 충돌 도메인 재전송 백오프 알고리즘
핵심 인사이트: 1980년대 1개의 굵은 구리 랜선을 사무실 직원 10명이 나눠 썼다. 둘이 동시에 데이터를 쏘면 전기 신호가 쾅 부딪혀 박살 났다(충돌). 통신 학자들은 인간의 예절을 기계에 심었다. "첫째, 말하기 전에 선에 누가 말하고 있나 귀를 대보고 들어봐(CS). 둘째, 아무도 없으면 말해! 셋째, 근데 재수 없게 동시에 말해서 쾅! 하고 충돌이 터졌어? 그럼 즉시 입을 다물고 동네방네 '충돌 났다!' 소리친 다음, 눈치 게임하듯이 각자 랜덤으로 기다렸다가 다시 말해(CD)!" 초기 유선 이더넷(랜선) 세상을 완벽하게 지배했던 가장 위대한 눈치 게임 룰, CSMA/CD다.
Ⅰ. 매체 접근 제어(MAC)의 영원한 숙제: 충돌
하나의 구리선(공유 매체)을 여러 대의 PC가 공유할 때, 2대 이상이 동시에 전기를 쏘면 전압이 겹쳐서 데이터가 걸레짝이 됩니다. 이 피 터지는 도로(Collision Domain)의 교통정리 규칙이 필요했습니다.
Ⅱ. CSMA/CD (Carrier Sense Multiple Access with Collision Detection) 🌟
IEEE 802.3 유선 이더넷(Ethernet)의 절대 표준 규약입니다.
1단계: CS (Carrier Sense) - "말하기 전에 귀 기울이기"
- 내가 데이터를 보내기 전에, 랜선에 귀를 대고 다른 놈이 지금 전기를 쏘고 있는지(Carrier) 엿듣습니다.
- 누군가 말하고 있으면(Busy) 조용히 기다리고, 랜선이 조용하면(Idle) 그제야 패킷을 밀어 넣습니다.
2단계: MA (Multiple Access) - "다중 접속의 비극"
- 10명이 다 같이 귀를 대고 기다리다가, 랜선이 조용해지는 찰나의 순간에 "지금이다!" 하고 2명이 동시에 패킷을 쏴버리는 불상사가 100% 발생합니다. 전기 신호가 쾅 부딪혀 쓰레기가 됩니다.
3단계: CD (Collision Detection) - "충돌 감지와 잼 신호" 🌟 핵심 🌟
여기가 이더넷의 위대한 발명입니다. (유선은 전압이 변하는 걸로 충돌을 쉽게 알 수 있습니다.)
- 충돌 감지: 패킷을 쏘면서도 내 귀를 열어둡니다. 내가 보낸 5V 신호와 상대방의 5V 신호가 부딪혀 전압이 10V로 확 튀어 오르는 순간! "아 ㅆㅂ 충돌 났다(Collision)!" 하고 즉각 눈치챕니다.
- 잼 신호 (Jam Signal): 충돌을 눈치챈 두 컴퓨터는 즉시 전송을 멈추고, 전국의 모든 컴퓨터에게 "야 다들 멈춰!! 충돌 났어!!!"라는 삐- 소리(잼 신호)를 32비트짜리로 요란하게 방송합니다. 이 소리를 들은 모든 컴퓨터는 전송을 멈춥니다.
4단계: 이진 지수 백오프 알고리즘 (Binary Exponential Backoff) 🌟
충돌 난 두 놈이 똑같이 1초 쉬었다 다시 쏘면 영원히 충돌이 납니다. 랜덤 눈치 게임을 돌립니다.
- 첫 충돌: 0초 또는 1초 중 '랜덤'으로 하나 골라서 쉬었다 쏩니다. (재충돌 확률 50%)
- 두 번째 겹침: 이번엔 범위가 $2^2$로 늘어나, 0~3초 중 랜덤으로 쉬었다 쏩니다. (확률 25%)
- 세 번째 겹침: 0~7초 중 랜덤 휴식.
- 충돌이 반복될수록 쉴 수 있는 시간의 범위(K)가 지수 함수($2^n$)로 미친 듯이 벌어져서, 두 컴퓨터가 똑같은 숫자를 뽑을 확률을 수학적으로 0으로 수렴하게 만들어 결국 한 놈이 먼저 쏘게 만들어주는 눈치 게임의 극의입니다. (최대 16번 충돌하면 포기하고 패킷 버림).
Ⅲ. 현대망에서의 쇠퇴 (스위치의 등장)
- 허브(Hub) 시대에는 이 눈치 게임이 필수였지만, 요즘 우리가 쓰는 스위치(Switch, 전이중 Full-Duplex) 장비는 포트마다 도로를 따로 분리해주기 때문에 충돌(Collision) 자체가 아예 일어나지 않습니다.
- 따라서 현대 유선 랜망에서는 CSMA/CD 기능이 사실상 꺼진 상태로(필요 없이) 빛의 속도로 쌩쌩 양방향 통신을 하고 있습니다.
📢 섹션 요약 비유: CSMA/CD는 '어두운 회의실에서의 완벽한 토론 예절'입니다. 어두워서 누가 말할지 안 보입니다. 첫째(CS), 말하기 전에 누군가 떠들고 있는지 조용히 귀를 기울입니다. 둘째(MA), 조용해지면 말을 꺼냅니다. 셋째(CD), 근데 눈치가 겹쳐서 나랑 철수가 동시에 "저기요!" 하고 말이 겹쳤습니다. 둘 다 깜짝 놀라 말을 멈추고 "아 겹쳤네 ㅈㅅ!(잼 신호)" 하고 소리칩니다. 넷째(백오프 알고리즘), 다시 동시에 말하면 또 겹치니까, 나는 마음속으로 3초를 세고, 철수는 랜덤으로 5초를 센 뒤에, 내가 먼저 3초 뒤에 "제가 먼저 할게요" 하고 치고 나가는 완벽한 비동기 눈치 게임 매너입니다.