사전 이더넷
표준

이더넷

gabury1고친 사람 github-actions[bot]

이더넷은 가까이 놓인 장비들을 선으로 이어 데이터를 주고받게 해 주는 약속입니다. 보내는 쪽이 데이터 앞에 받을 장비의 번호를 적어 내보내면, 그 번호를 가진 장비가 받아 갑니다. 무사히 닿았는지는 확인하지 않고, 깨진 데이터는 알리지 않고 버립니다. 사무실과 데이터센터의 유선 망은 거의 다 이 방식으로 돕니다.

쉽고 빠른 이해

이더넷은 선으로 이어진 장비들 사이에서 데이터 한 덩이를 옆 장비에게 건네주는 약속입니다. 노트북에서 나간 데이터가 책상 밑 장비까지 가는 한 구간이 이더넷입니다.

장비마다 선을 꽂는 방법과 데이터를 적는 방법이 다르면 서로 못 알아듣습니다. 이더넷은 장비를 가려 부르는 번호 하나와 데이터 한 덩이의 모양 하나만 정해 두어, 어느 회사 장비를 사 와도 같은 선에 꽂으면 통하게 합니다.

어떻게 도나:

  1. 보내는 쪽이 데이터에 받을 쪽 번호와 보낸 쪽 번호, 그리고 오류를 잡아낼 검사 값을 붙입니다
  2. 그 덩이를 선으로 내보내면 중간 장비가 번호를 보고 그 장비가 꽂힌 선으로만 흘려보냅니다
  3. 받은 쪽은 검사 값으로 덩이가 깨졌는지 보고, 멀쩡하면 안에 든 데이터를 위층에 넘깁니다

대가는 확인이 없다는 것입니다. 덩이가 깨지거나 사라져도 이더넷은 알려 주지 않습니다. 빠진 데이터를 다시 받는 일은 위층 프로토콜이 맡습니다. 한 덩이에 실을 수 있는 크기에도 상한이 있어 큰 데이터는 여러 덩이로 나뉩니다.

상세

이 절은 이더넷이 데이터를 어떤 모양으로 싸서 내보내는지, 같은 선에 붙은 장비들이 서로를 어떻게 가려 부르는지를 봅니다. 이어서 여러 대가 선 하나를 나눠 쓰던 시절에 생긴 문제와, 지금 그 문제가 어떻게 사라졌는지를 봅니다.

이더넷은 유선 랜(Local Area Network, 근거리 통신망)을 만드는 방법입니다. 랜은 한 건물이나 한 층처럼 좁은 구역 안의 장비들을 이어 붙인 망입니다. 벽에 붙은 랜 포트, 책상 밑에 깔린 선, 서버 뒤에 꽂힌 케이블이 전부 이더넷입니다.

이더넷이 서는 계층

네트워크가 하는 일은 여러 계층으로 나눠 봅니다. 이더넷은 장비와 장비 사이 한 구간을 건너는 링크 계층에 섭니다. 먼 곳과 하는 통신도 이런 한 구간을 여러 번 이어 붙인 것입니다.

이더넷 위에는 여러 망을 건너 목적지까지 데이터를 보내는 IP(Internet Protocol, 인터넷 프로토콜)가 얹힙니다. 그보다 위에는 빠진 데이터를 다시 보내고 순서를 맞추는 TCP(Transmission Control Protocol, 전송 제어 프로토콜)가 있습니다.

flowchart TD
    T["TCP · 빠진 데이터를 다시 보낸다"]
    I["IP · 여러 망을 건너 목적지까지 보낸다"]
    E["이더넷 · 옆 장비까지 한 구간을 건넨다"]
    W["선 · 전기 신호가 흐른다"]
    T --> I --> E --> W

위에 있는 것일수록 멀리 보는 일을 맡고, 아래로 갈수록 눈앞의 한 구간만 봅니다. 위층은 아래 구간이 이더넷인지 무선인지 몰라도 됩니다. 이더넷도 자기가 나르는 알맹이가 무엇인지 몰라도 됩니다.

서로 모른 채로 맞물리는 덕분에 한쪽을 갈아 끼워도 다른 쪽을 안 고칩니다. 사무실 배선을 새 규격으로 바꿔도 그 위에서 돌던 프로그램은 손대지 않고 그냥 돕니다.

선을 꽂을 수 없는 곳에서는 이더넷을 쓰지 않습니다. 옮겨 다니는 노트북과 휴대폰은 와이파이가 같은 구간을 맡고, 도시와 도시를 잇는 먼 구간은 통신사의 다른 방식이 맡습니다. 선을 꽂아 둘 수 있고 거리가 짧은 구간이면 이더넷이 값싸고 흔들림이 적어 기본 선택이 됩니다.

공통 약속이 필요한 까닭

이더넷이 없다고 해 봅시다. 회사마다 선의 굵기도, 전기 신호를 넣는 방법도, 데이터를 어디서 끊어 읽을지도 제각각입니다. 그러면 같은 방에 놓인 두 기계를 잇는 데도 그 둘만을 위한 장치를 따로 만들어야 합니다.

이더넷은 이 제각각을 덮는 얇은 공통 약속입니다. 장비를 가려 부르는 번호 하나, 데이터 한 덩이의 모양 하나, 선으로 신호를 주고받는 방법 몇 가지만 정해 둡니다. 정하는 것이 적어서 값싸게 만들 수 있습니다. 값이 싸니 어디에나 깔립니다.

장비마다 붙은 번호

같은 망에 붙은 장비들이 서로를 가려 부르는 번호가 MAC 주소(Media Access Control address, 매체 접근 제어 주소)입니다. 6바이트, 그러니까 48비트짜리 번호입니다. 네트워크 카드마다 하나씩 붙어 나오므로 컴퓨터를 켜자마자 쓸 수 있고 따로 설정할 것이 없습니다.

번호의 앞 절반은 그 카드를 만든 회사 몫입니다. 뒤 절반은 그 회사가 기계마다 다르게 매깁니다.

packet-beta
0-23: "만든 회사 몫"
24-47: "기계마다 다른 값"

회사끼리 앞 절반을 겹치지 않게 나눠 가지므로 세상에 같은 번호가 둘 나오지 않도록 맞춰져 있습니다.

받을 쪽에 적는 특별한 번호도 하나 있습니다. 그 번호를 적어 내보내면 같은 망에 붙은 장비가 모두 받아 갑니다. 이것이 브로드캐스트입니다. 상대의 번호를 아직 모를 때 「이 주소 쓰는 장비가 누구냐」고 물어보는 데 씁니다.

프레임 한 장의 생김새

이더넷이 한 번에 내보내는 데이터 한 덩이가 프레임입니다. 프레임은 앞에 붙는 안내문과 그 뒤의 알맹이로 이루어집니다. 안내문이 헤더이고 알맹이가 페이로드입니다.

헤더가 적는 것은 셋입니다. 중간 장비는 알맹이를 들여다보지 않고 이 셋만 읽습니다.

헤더가 적는 것 무엇에 쓰나
받을 쪽 MAC 주소 중간 장비가 어느 선으로 흘려보낼지 정합니다
보낸 쪽 MAC 주소 받는 쪽이 답을 돌려보낼 곳을 압니다
위층 표시 받은 쪽이 알맹이를 IP 에게 줄지 다른 프로토콜에게 줄지 압니다

프레임 맨 뒤에는 검사 값이 하나 붙습니다. 보내는 쪽이 프레임 전체를 셈해 넣어 두면 받는 쪽이 같은 셈을 다시 해 봅니다. 두 값이 다르면 오는 길에 신호가 상한 것이므로 그 프레임을 버립니다. 이런 검사 값을 체크섬이라고 합니다.

block-beta
columns 5
  h["헤더 · 앞에 붙는 안내문"]:3 p["알맹이"]:1 f["검사 값"]:1
  d["받을 쪽 MAC 주소"] s["보낸 쪽 MAC 주소"] t["위층 표시"] space:2

프레임 한 장은 이 순서로 놓입니다. 받는 쪽은 앞의 셋을 먼저 읽어 이 프레임이 자기 것인지 가리고, 맨 뒤의 검사 값으로 깨졌는지 봅니다.

버린 뒤에 다시 보내 달라고 하는 일은 이더넷이 하지 않습니다. 빠진 데이터를 다시 받는 일은 위층이 맡습니다.

한 덩이에 실을 수 있는 크기

한 프레임에 실을 수 있는 알맹이의 크기에는 상한이 있습니다. 이 상한이 MTU(Maximum Transmission Unit, 최대 전송 단위)입니다. 이더넷에서는 1500바이트입니다.

위층 IP 가 만든 데이터 한 덩이는 패킷이라고 합니다. 이더넷은 패킷 하나를 프레임의 알맹이로 받아 싣습니다. 그래서 이더넷 구간을 지나는 IP 패킷은 1500바이트를 넘지 못합니다.

상한을 둔 까닭은 한 장비가 선을 오래 붙들지 못하게 하려는 것입니다. 프레임 한 장이 길면 그동안 다른 장비는 기다려야 합니다. 상한이 있으면 순서가 돌아오는 간격이 일정해집니다.

장비와 설정이 받쳐 주면 이 상한을 1500바이트보다 크게 잡을 수도 있습니다. 이렇게 키운 프레임이 점보 프레임입니다. 한 번에 더 많이 실으니 같은 데이터를 보내는 데 필요한 프레임 수가 줄어듭니다.

선 하나를 여럿이 나눠 쓰던 시절

처음의 이더넷은 굵은 선 하나에 장비 여럿을 매다는 모양이었습니다. 한 장비가 보낸 신호는 선 전체로 퍼져 모두에게 닿았고, 받을 쪽 번호가 자기 것이 아닌 장비는 그 프레임을 버렸습니다. 선은 하나뿐이라 동시에 둘이 보내면 신호가 뒤섞여 둘 다 못 쓰게 됩니다. 이 뒤섞임이 충돌입니다.

충돌을 다루는 약속이 CSMA/CD(Carrier Sense Multiple Access with Collision Detection, 반송파 감지 다중 접속과 충돌 검출)입니다. 이름은 길지만 하는 일은 사람들이 말할 때 지키는 예의와 같습니다. 남이 말하는 중이면 기다리고, 말이 겹치면 둘 다 멈췄다가 각자 다른 시간만큼 쉬었다 다시 말합니다.

flowchart TD
    A[보낼 프레임이 생겼다] --> B{선에 신호가 흐르나}
    B -->|흐른다| C[끝날 때까지 기다린다]
    C --> B
    B -->|비었다| D[내보내면서 선을 계속 듣는다]
    D --> E{다른 신호와 부딪혔나}
    E -->|아니다| F[보내기를 마친다]
    E -->|부딪혔다| G[무작위로 고른 시간만큼 쉰다]
    G --> H[부딪힐수록 고르는 범위를 배로 넓힌다]
    H --> B

그림의 마지막 칸이 지수 백오프입니다. 부딪힌 둘이 같은 시간을 기다리면 다시 부딪히므로 각자 무작위로 고르고, 거듭 부딪히면 고르는 범위를 넓혀 서로 비켜 갈 틈을 만듭니다.

이 방식에는 한계가 있습니다. 한 선에 매달린 장비가 늘수록 부딪힐 확률이 오르고, 그러면 보내는 시간보다 기다리는 시간이 길어집니다. 선을 나눠 쓰는 장비 무리를 충돌 도메인이라고 부릅니다. 이 무리가 커질수록 한 대가 쓸 수 있는 몫이 줄어듭니다.

충돌을 없앤 스위치

지금의 이더넷은 선을 나눠 쓰지 않습니다. 장비마다 자기 선을 하나씩 가지고 스위치에 꽂습니다. 앞에서 중간 장비라고 부른 것이 스위치입니다. 스위치는 프레임을 받아 받을 쪽 번호를 보고, 그 장비가 꽂힌 선으로만 내보냅니다.

예전에는 허브라는 장비가 받은 신호를 모든 선으로 퍼뜨렸습니다. 아래 그림의 위쪽이 그 모양이고, 아래쪽이 지금의 모양입니다.

flowchart TD
    subgraph 옛날["선 하나를 나눠 쓴다 · 충돌 도메인 하나"]
        H1["허브"]
        H1 --- PC1["장비 1"]
        H1 --- PC2["장비 2"]
        H1 --- PC3["장비 3"]
    end
    subgraph 지금["장비마다 제 선을 쓴다 · 충돌이 없다"]
        SW["스위치"]
        SW --- PC4["장비 4"]
        SW --- PC5["장비 5"]
        SW --- PC6["장비 6"]
    end

허브에 꽂힌 장비 셋은 한 무리로 묶여 서로 부딪힙니다. 아래쪽 스위치는 어느 번호가 어느 선에 있는지를 표로 기억해 두고 그 선으로만 보냅니다. 이 표는 프레임이 지나갈 때 보낸 쪽 번호를 읽어 스스로 채웁니다.

선이 나뉘면 보내기와 받기를 동시에 할 수 있습니다. 이것이 전이중입니다. 부딪힐 상대가 없으니 CSMA/CD 를 쓸 일도 없어집니다. 오늘날 사무실 망에서 충돌이라는 말을 들을 일이 거의 없는 까닭입니다.

이더넷이 약속하지 않는 것

이더넷의 약속은 보내 보겠다는 것 하나입니다. 이것이 최선형 전달입니다. 무엇을 약속하지 않는지 알아야 위층에 무엇을 맡길지 정할 수 있습니다.

약속하지 않는 것 그래서 생기는 일
도착 스위치에 프레임이 몰리면 넘치는 만큼 버려집니다
알림 프레임이 버려져도 보낸 쪽은 그것을 모릅니다
순서 한 구간 안에서는 대체로 순서가 지켜지지만 보장은 아닙니다

이 빈틈은 위층이 메웁니다. TCP 는 보낸 데이터에 번호를 매기고 잘 받았다는 확인 응답을 기다려, 오지 않으면 다시 보냅니다. 이더넷은 그 일을 안 하는 대신 한 구간을 건네는 일만 단순하게 맡아서 장비를 값싸게 만들 수 있습니다.

백엔드 일에서 이더넷을 만나는 대목

응용 프로그램이 이더넷 프레임을 직접 만드는 일은 없습니다. 운영체제가 붙이고 떼는 일을 대신하기 때문입니다. 그래도 이더넷이 정한 값이 위층으로 올라와 코드에 닿는 대목이 셋 있습니다.

첫째는 크기입니다. 1500바이트 상한에서 IP 와 TCP 의 안내문을 뺀 만큼이 한 번에 나가는 데이터의 크기가 됩니다.

겉포장이 하나 더 붙는 경우가 있습니다. 데이터 한 덩이를 다른 덩이 안에 넣어 남의 망을 건너보내는 것을 터널이라고 합니다. 가상 망이나 터널을 쓰면 그 겉포장만큼 한 번에 실을 수 있는 크기가 줄어듭니다.

이때 보내는 쪽과 받는 쪽이 잡은 상한이 어긋나면 작은 요청은 오가지만 큰 요청만 멈춰 섭니다. 작은 요청은 줄어든 크기 안에 들어가고 큰 요청만 상한에 걸리기 때문입니다.

둘째는 같은 망 안에서의 통신입니다. 망과 망 사이를 이어 주는 장비가 라우터입니다. 서버 둘이 같은 망에 있으면 데이터는 라우터를 거치지 않고 MAC 주소만으로 건너갑니다. 상대의 IP 주소에 해당하는 MAC 주소를 알아내는 일은 ARP(Address Resolution Protocol, 주소 결정 프로토콜)가 맡습니다.

셋째는 한 선이 한 번에 실어 나를 수 있는 양, 곧 대역폭입니다. 이 양은 그 선과 네트워크 카드가 지원하는 속도까지입니다. 서버 한 대에 트래픽이 몰려 그 값에 가까워지면 프레임이 버려지고 패킷 손실로 나타납니다. 이때는 선을 여러 개 묶거나 더 높은 규격으로 갈아 끼웁니다.

관련 항목

이더넷 프레임을 이루는 구성 요소

프레임 · 헤더 · 페이로드 · MAC 주소 · 체크섬 · 프리앰블 · MTU · 점보 프레임

이더넷 위에 얹혀 도는 프로토콜

IP · IPv4 · IPv6 · ARP · TCP · UDP · DHCP · PPPoE

이더넷 프레임을 받아 넘기는 장비

스위치 · 허브 · 라우터 · 네트워크 카드 · 기본 게이트웨이 · 방화벽

선 하나를 나눠 쓸 때 부딪힘을 다루는 방식

CSMA/CD · 충돌 도메인 · 지수 백오프 · 반이중 · 전이중

이더넷을 정의하는 표준과 배선 규격

IEEE 802.3 · IEEE · 트위스티드 페어 · 광섬유 · 10BASE-T · 오토 니고시에이션

이더넷과 같은 구간을 맡는 다른 링크 계층 방식

와이파이 · PPP · 블루투스 · 토큰 링 · 링크 계층

이더넷 망을 논리로 가르고 묶는 기법

VLAN · 서브넷 · 스패닝 트리 프로토콜 · 링크 애그리게이션 · 포트 미러링

이더넷 구간에서 자주 나는 장애

패킷 손실 · 브로드캐스트 스톰 · 네트워크 루프 · 대역폭 · 병목

이더넷이 속하는 상위 분류

네트워크 · LAN · 프로토콜 · 표준 · OSI 7계층

이더넷 구간을 들여다보는 명령과 도구

tcpdump · Wireshark · ethtool · ping · ifconfig

다른 이름: Ethernet · 유선 랜