관리 메뉴

피터의 개발이야기

[Network] 02. 모두가 동시에 말하면 누가 들을 수 있을까? 본문

DevOps/Network

[Network] 02. 모두가 동시에 말하면 누가 들을 수 있을까?

기록하는 백앤드개발자 2026. 7. 15. 20:01
반응형

TCP/IP를 우편 시스템으로 이해하기 — Part 1. 모두가 하나의 길을 함께 쓰려면

ㅁ 들어가며

앞의 글에서는 모든 컴퓨터를 서로 직접 연결하는 방식의 한계를 살펴보았다.

컴퓨터가 N대라면 모든 컴퓨터를 직접 연결하는 데 필요한 선은 N × (N - 1) ÷ 2개까지 늘어난다.

그래서 각 컴퓨터를 공통의 중간 지점에 연결해 길을 함께 쓰는 구조를 생각했다.

 

선의 수는 크게 줄었다.

그런데 이번에는 다른 문제가 생긴다.

하나의 길을 모두가 함께 사용하는데 두 컴퓨터가 동시에 데이터를 보내면 어떻게 될까?

회의실에서 여러 사람이 동시에 말하면 누구의 말도 제대로 알아듣기 어려운 것처럼, 공유된 통신 매체에서도 신호가 겹칠 수 있다.

이번 글의 질문은 단순하다.

길을 공유하면서도 서로의 말을 방해하지 않으려면 어떤 질서가 필요할까?


ㅁ 하나의 배달 통로를 여러 집이 함께 쓴다면

네 집이 하나의 긴 배달 통로를 공유한다고 생각해 보자.

민수의 집 ──┬── 영희의 집 ──┬── 철수의 집 ──┬── 지수의 집
             하나의 공유된 배달 통로

민수가 영희에게 편지를 보내기 위해 통로에 운반 상자를 밀어 넣는다.

이 통로는 모든 집 앞을 지나므로 철수와 지수도 상자를 볼 수 있다.

하지만 봉투에 적힌 수신인이 영희라면 영희만 편지를 받고 나머지는 지나가게 둔다.

 

초기의 공유형 이더넷도 이와 비슷한 성격을 가졌다.

하나의 통신 매체에 연결된 장비들은 그 매체를 함께 사용했다.

한 장비가 프레임을 보내면 같은 구간의 다른 장비도 신호를 접할 수 있었고,

각 장비는 목적지 MAC 주소를 확인해 자신에게 온 프레임인지 판단했다.

이 구조에서는 한 번에 한 장비가 말할 때는 문제가 없다.

문제는 두 장비가 거의 같은 순간에 전송을 시작할 때다.


ㅁ 두 개의 상자가 좁은 통로에서 부딪혔다

민수와 철수가 동시에 통로로 상자를 밀었다고 생각해 보자.

민수의 상자 ─────→  충돌  ←───── 철수의 상자

상자가 부딪히면 어느 쪽도 목적지까지 온전하게 갈 수 없다.

공유된 전기적 통신 매체에서도 두 신호가 동시에 전송되면 신호가 겹쳐 원래 데이터를 해석할 수 없게 된다.

이를 충돌(Collision)이라고 한다.

 

충돌이 발생하면 두 프레임 가운데 하나를 골라 전달할 수 있는 것이 아니다.

충돌한 전송은 실패한 것으로 보고 다시 보내야 한다.

이때 같은 통신 매체에서 서로의 전송과 충돌할 수 있는 범위를 충돌 도메인(Collision Domain)이라고 한다.

허브에 여러 컴퓨터가 연결된 환경을 생각하면 이해하기 쉽다.

컴퓨터 A ─┐
컴퓨터 B ─┼─ 허브
컴퓨터 C ─┤
컴퓨터 D ─┘

허브는 들어온 신호를 이해해 목적지를 고르는 장치가 아니다.

한 포트로 들어온 신호를 나머지 포트로 반복해 내보낸다.

따라서 허브에 연결된 장비들은 하나의 공유된 길을 사용한다. A와 C가 동시에 전송하면 서로의 신호가 충돌할 수 있다.

네 대가 연결되어 있어도 동시에 자유롭게 사용할 수 있는 네 개의 길이 생긴 것은 아니다.

하나의 길을 네 대가 나누어 쓰는 것이다.


ㅁ 먼저 듣고, 비어 있으면 말한다

사람들이 회의실에서 대화할 때는 보통 다른 사람이 말하고 있는지 먼저 듣는다. 아무도 말하지 않을 때 말을 시작한다.

공유형 이더넷에도 이와 비슷한 규칙이 있었다. 바로 CSMA/CD다.

이름은 길지만 동작은 네 단계로 나누어 생각할 수 있다.

 

ㅇ 먼저 듣는다 — Carrier Sense

장비는 전송하기 전에 통신 매체에 다른 신호가 흐르고 있는지 확인한다.

누군가 사용 중이면 기다린다.

 

ㅇ 모두 같은 길을 사용할 수 있다 — Multiple Access

하나의 전송 매체를 여러 장비가 공동으로 사용한다. 특정 장비가 길을 영구히 소유하지 않는다.

 

ㅇ 비어 있으면 보낸다

다른 전송이 들리지 않으면 프레임을 보내기 시작한다.

 

ㅇ 충돌을 알아채면 멈춘다 — Collision Detection

전송 중 충돌을 감지하면 계속 보내지 않는다. 충돌 사실을 같은 구간에 알리고 전송을 중단한다.

이후 각 장비는 임의의 시간 동안 기다렸다가 다시 시도한다. 이를 임의 대기(Random Backoff)라고 한다.

듣기 → 비어 있으면 전송 → 충돌 감지 → 임의 시간 대기 → 재전송

여기서 임의로 기다린다는 점이 중요하다.

충돌한 두 장비가 똑같은 시간에 다시 보내면 또 충돌한다.

서로 다른 시간만큼 기다리면 다음 시도에서는 한 장비가 먼저 보낼 가능성이 커진다.

충돌이 반복될수록 기다릴 수 있는 시간의 범위도 넓어진다.

길이 혼잡할 때 모두가 계속 달려드는 대신 전송 시도를 늦추는 것이다.

 


ㅁ 규칙이 있어도 사람이 많아지면 느려진다

CSMA/CD는 충돌을 없애는 규칙이 아니다.

충돌 가능성이 있는 공유 매체에서 충돌을 다루는 규칙이다.

사용자가 적고 전송이 드물면 대부분 매체가 비어 있으므로 바로 보낼 수 있다.

그러나 사용자가 많아지고 전송량이 늘면 상황이 달라진다.

  1. 누군가 전송 중이라 기다리는 시간이 늘어난다.
  2. 비슷한 시점에 전송을 시작할 가능성이 커진다.
  3. 충돌한 프레임을 다시 보내느라 같은 데이터를 반복해서 전송한다.
  4. 재시도가 늘면서 실제 데이터가 사용할 수 있는 시간은 줄어든다.

도로를 여러 사람이 공유하면서 사고가 날 때마다 출발지로 돌아가 다시 출발하는 것과 비슷하다.

사람이 많을수록 길의 운송 능력보다 충돌과 대기에 더 많은 시간을 쓰게 된다.

연결되어 있다는 사실은 변하지 않는다. 모든 컴퓨터는 여전히 같은 매체에 연결되어 있다.

하지만 연결되어 있다고 해서 항상 효율적으로 통신할 수 있는 것은 아니다.

공유는 자원을 절약하지만, 공유 범위가 커질수록 서로 기다리고 충돌을 복구하는 비용도 커진다.


ㅁ 모든 사람이 모든 편지를 보게 되는 문제

공유 매체에는 충돌 외에 또 하나의 비효율이 있다.

허브는 목적지를 판단하지 않으므로 들어온 신호를 연결된 다른 포트로 내보낸다. 영희에게 보내는 프레임도 철수와 지수 쪽으로 전달된다.

각 컴퓨터는 목적지 MAC 주소를 보고 자신에게 온 프레임이 아니라면 받아들이지 않는다.

그러나 신호가 불필요한 방향으로 전달되는 것 자체는 피할 수 없다.

여기서 두 현상을 구분해야 한다.

  • 충돌: 여러 장비가 공유 매체에서 동시에 전송해 신호가 겹치는 현상
  • 브로드캐스트: 송신자가 같은 네트워크의 모든 장비에게 전달해 달라고 보낸 프레임

허브가 모든 포트로 신호를 반복하는 것과, 송신자가 의도적으로 모두에게 브로드캐스트하는 것은 같은 말이 아니다.

다만 허브 환경에서는 일반적인 단일 목적지 프레임도 다른 장비가 연결된 방향까지 퍼진다.

목적지를 아는 중간 장치가 없기 때문이다.

그렇다면 자연스럽게 다음 질문이 생긴다.

중간 장치가 수신인의 위치를 기억해서 필요한 길로만 보내면 되지 않을까?


ㅁ 오늘날에도 이더넷 충돌이 자주 일어날까?

현대의 일반적인 유선 LAN에서는 충돌을 거의 보지 않는다.

컴퓨터는 보통 허브가 아니라 스위치의 독립된 포트에 연결된다. 각 포트는 다른 포트와 분리된 전송 구간을 만들고, 송신과 수신을 동시에 할 수 있는 전이중(Full Duplex) 방식으로 동작한다.

컴퓨터 A ←──── 송신과 수신 ────→ 스위치
컴퓨터 B ←──── 송신과 수신 ────→ 스위치

A와 B는 스위치까지 각자의 링크를 사용하므로 과거의 허브처럼 하나의 전기적 매체에서 경쟁하지 않는다. 전이중 링크에서는 CSMA/CD를 사용하지 않으며 정상적인 상황에서 충돌도 발생하지 않는다.

그래서 CSMA/CD는 최신 LAN의 사용법이라기보다, 공유 매체가 가진 한계와 스위치가 필요해진 이유를 이해하는 열쇠에 가깝다.

무선 LAN은 여전히 공기라는 매체를 여러 장비가 공유한다. 다만 전송하면서 충돌을 감지하기 어려워 충돌을 피하려는 CSMA/CA 계열의 방법을 사용한다. 공유 자원에는 여전히 질서가 필요하다는 원리는 남아 있다.


ㅁ 우편 비유를 네트워크 용어로 바꾸면

이 글에서 살펴본 장면을 네트워크 용어와 연결하면 다음과 같다.

우편 시스템의 모습 네트워크 용어 의미
여러 집이 함께 쓰는 통로 Shared Medium 여러 장비가 하나의 전송 매체를 공유하는 구조
들어온 상자를 모든 방향으로 전달 Hub / Repeater 신호를 해석하지 않고 다른 포트로 반복하는 장치
좁은 통로에서 상자가 부딪힘 Collision 동시 전송된 신호가 겹쳐 프레임이 손상되는 현상
서로 부딪힐 수 있는 배달 구역 Collision Domain 같은 충돌의 영향을 받는 네트워크 범위
한쪽이 말할 때 다른 쪽은 기다림 Half Duplex 송신과 수신을 동시에 수행하지 못하는 통신 방식
먼저 듣고 충돌하면 다시 시도 CSMA/CD 공유형 이더넷에서 매체 접근과 충돌을 처리하는 방식
양방향 전용 통로 Full Duplex 송신과 수신을 동시에 수행하는 통신 방식

허브 기반 이더넷은 하나의 Shared MediumCollision Domain을 여러 장비가 공유하는 Half Duplex 환경이다.

이 환경에서는 누군가 전송 중일 때 다른 장비가 기다려야 하며, 동시 전송이 발생하면 CSMA/CD로 충돌을 처리한다.

스위치는 포트마다 충돌 도메인을 분리한다.

여기에 Full Duplex가 사용되면 송신 경로와 수신 경로가 분리되므로 충돌을 조정하기 위한 CSMA/CD도 필요하지 않다.

즉, 허브에서 스위치로의 변화는 단순히 더 빠른 장비로 교체한 것이 아니다.

하나의 충돌 도메인을 모두가 공유하던 구조에서, 장비마다 독립된 통신 구간을 사용하는 구조로 바뀐 것이다.

 


ㅁ 직접 관찰해 보기

현대의 Linux 컴퓨터에서는 현재 링크가 전이중으로 동작하는지 확인해 볼 수 있다.

먼저 인터페이스 이름을 찾는다.

ip -brief link

유선 인터페이스가 eth0이라면 다음과 같이 링크 정보를 확인한다.

sudo ethtool eth0

출력에서 다음 항목을 살펴본다.

Speed: 1000Mb/s
Duplex: Full
Link detected: yes

Duplex: Full은 송신과 수신이 분리된 전이중 링크라는 뜻이다.

인터페이스의 통계도 확인할 수 있다.

ip -s link show eth0

현대적인 스위치 환경이라면 충돌 수치는 보통 0이다. 드라이버와 운영체제에 따라 충돌 통계를 표시하는 위치나 지원 여부는 다를 수 있다.

중요한 것은 충돌을 억지로 재현하는 일이 아니다.

지금 충돌이 보이지 않는 이유가 스위치와 전이중 링크가 공유 매체의 충돌 범위를 없앴기 때문이라는 점을 확인하는 것이다.


ㅁ 핵심 정리

  • 공유형 통신 매체에서는 여러 장비의 동시 전송이 충돌할 수 있다.
  • 허브는 목적지를 판단하지 않고 들어온 신호를 다른 포트로 반복한다.
  • CSMA/CD는 먼저 듣고 전송하며, 충돌하면 임의의 시간 뒤 다시 시도하는 규칙이다.
  • 참여자와 전송량이 늘면 대기, 충돌, 재전송 비용도 커진다.
  • 충돌과 브로드캐스트는 서로 다른 현상이다.
  • 현대의 스위치 기반 전이중 이더넷에서는 일반적으로 CSMA/CD와 충돌이 발생하지 않는다.

핵심 용어: Shared Medium, Hub, Repeater, Collision, Collision Domain, Half Duplex, CSMA/CD, Random Backoff, Full Duplex

하나의 길을 공유하는 것만으로는 충분하지 않았다. 누구에게 가는 데이터인지 알고, 필요한 길로만 보내는 장치가 필요했다.

 


ㅁ 다음 이야기

허브는 데이터를 받으면 연결된 모든 방향으로 신호를 보낸다.

하지만 동네 우체국은 모든 편지를 모든 집에 배달하지 않는다. 어느 집이 어느 방향에 있는지 알고 필요한 배달길을 선택한다.

네트워크의 중간 장치도 수신인의 위치를 기억할 수 있을까?

다음 글에서는 「스위치는 어떻게 편지가 갈 길을 기억할까?」라는 질문을 통해 MAC 주소 학습과 전달, 그리고 목적지를 모를 때의 플러딩을 살펴본다.

반응형
Comments