브로드캐스트 주소
고친 사람 github-actions[bot]
브로드캐스트 주소는 같은 망에 붙은 장비 모두에게 한 번에 보내게 해 주는 목적지 주소입니다. 받을 상대를 아직 모를 때 이 주소로 물으면 망 안의 장비가 전부 듣습니다. 네트워크 카드의 번호에도 인터넷 주소에도 이 주소가 있습니다. 두 계층에서 같은 일을 맡습니다. 망과 망을 잇는 라우터에서는 대개 멈춥니다.
쉽고 빠른 이해
무슨 일을 하나 — 같은 망의 모든 장비에게 한꺼번에 말을 거는 주소입니다. 새로 켠 노트북이 「주소를 나눠 주는 서버 있나요」를 물을 때 이 주소로 보냅니다.
왜 필요한가 — 상대의 주소를 모르면 한 대를 골라 보낼 수가 없습니다. 모두에게 묻고 해당하는 장비가 답하게 하는 길이 하나는 있어야 합니다.
어떻게 도나
- 받을 주소 칸에 「모두」를 뜻하는 약속된 값을 적습니다
- 장비들을 잇는 스위치가 그 데이터를 모든 장비에게 나눠 줍니다
- 받은 장비는 저마다 읽어 보고 자기 일이 아니면 버립니다
- 라우터에 닿으면 거기서 멈춥니다
대가 — 상관없는 장비까지 전부 받아서 읽어야 합니다. 장비가 많은 망에서 자주 쓰면 모두가 그만큼 바빠집니다.
상세
사무실 천장 스피커에서 「주차장에 흰색 차 세우신 분 계세요」라는 방송이 나오면 그 층 사람이 모두 듣습니다. 차 주인만 일어나고 나머지는 하던 일을 계속합니다. 방송은 그 층 스피커로만 나가고 다른 층에는 들리지 않습니다.
브로드캐스트 주소는 받을 쪽 주소 칸에 적으면 「이 망의 모두」를 뜻하도록 약속해 둔 값입니다. 보내는 쪽은 받을 장비의 주소를 몰라도 이 값 하나로 보낼 수 있습니다. 받는 장비는 자기 주소가 아니어도 이 값이 적혀 있으면 받아서 읽습니다.
이 주소가 필요한 것은 처음 만나는 상대를 찾을 길이 따로 없기 때문입니다. 망에 새로 붙은 노트북은 자기 IP 주소(Internet Protocol address, 인터넷 프로토콜 주소)를 나눠 줄 서버가 어디 있는지 모릅니다. 그래서 모두에게 묻고 그 서버가 답하게 합니다.
「같은 망」은 망과 망을 잇는 장비인 라우터를 거치지 않고 데이터가 건네지는 범위입니다. 한 공유기에 물린 장비들이 그런 범위입니다. 브로드캐스트가 닿는 범위가 곧 이 범위라서 브로드캐스트 도메인이라는 이름으로도 부릅니다.
두 계층에 따로 있는 브로드캐스트 주소
네트워크 통신은 일을 여러 계층으로 나눠 맡습니다. 브로드캐스트 주소는 그중 두 계층에 따로 있습니다.
아래 계층은 링크 계층입니다. 같은 망 안에서 바로 옆 장비에게 데이터를 건네는 일을 맡습니다. 이 계층에서 받을 장비를 가리키는 번호가 MAC 주소(Media Access Control address, 매체 접근 제어 주소)입니다. 네트워크 카드마다 하나씩 붙어 나오는 번호입니다.
위 계층은 인터넷 계층입니다. 망을 건너 먼 목적지까지 데이터를 보내는 일을 맡습니다. 이 계층의 번호가 IP 주소입니다. 흔히 인터넷 주소라고 하면 이 번호를 가리킵니다. 그중 32비트짜리가 IPv4(Internet Protocol version 4, 인터넷 프로토콜 4판)의 주소입니다.
브로드캐스트 주소는 링크 계층에 하나, IPv4 에 둘이 있습니다. 아래 소절에서 링크 계층의 것부터 차례로 봅니다.
MAC 브로드캐스트 주소
MAC 주소는 48비트 번호입니다. 사람이 읽을 때는 8비트씩 끊어 16진수 두 글자로 적습니다. 48비트를 전부 1로 채우면 FF:FF:FF:FF:FF:FF 가 됩니다. 이 값이 링크 계층의 브로드캐스트 주소입니다.
링크 계층이 한 번에 실어 보내는 데이터 덩이를 프레임이라고 합니다. 프레임 맨 앞에는 받을 장비의 MAC 주소를 적는 칸이 있습니다. 그 칸에 이 값이 들어가면 받을 장비를 가리지 않습니다.
같은 망의 장비들을 잇는 스위치는 평소 받을 주소를 보고 그 장비가 물린 포트 하나로만 프레임을 내보냅니다. 포트는 케이블을 꽂는 구멍입니다.
받을 주소가 브로드캐스트 주소면 스위치는 들어온 포트만 빼고 모든 포트로 내보냅니다. 이렇게 모든 포트로 뿌리는 것을 플러딩이라고 합니다.
장비의 네트워크 카드도 같은 규칙을 따릅니다. 자기 번호가 아닌 프레임은 버리지만 이 주소가 적힌 프레임은 받아서 운영체제에 올립니다.
서브넷마다 정해지는 지정 브로드캐스트 주소
IPv4 의 브로드캐스트 주소는 하나로 고정돼 있지 않습니다. 망마다 하나씩 정해집니다. 공유기 아래 장비들이 192.168.10.1, 192.168.10.2 처럼 앞 세 마디가 같은 주소를 쓴다고 합시다.
이 망의 브로드캐스트 주소는 192.168.10.255 입니다. 이 소절은 그 값이 왜 255로 끝나는지 주소를 앞뒤로 쪼개 보며 따라갑니다.
IPv4 주소 32비트는 앞쪽과 뒤쪽으로 나뉩니다. 앞쪽은 어느 망인지를 가리키는 네트워크 부분입니다. 뒤쪽은 그 망 안의 장비 하나를 가리키는 호스트 부분입니다. 위 망이라면 192.168.10 이 앞쪽이고 마지막 1·2 가 뒤쪽입니다.
네트워크 부분이 같은 주소들이 모인 망 하나를 서브넷이라고 부릅니다. 앞 세 마디가 192.168.10 인 주소들이 한 서브넷입니다. 한 서브넷 안의 장비끼리는 라우터를 거치지 않고 데이터를 주고받습니다.
어디까지가 앞쪽인지는 서브넷 마스크가 알려 줍니다. 네트워크 부분에 해당하는 비트는 1로, 호스트 부분에 해당하는 비트는 0으로 채운 32비트 값입니다. 위 망이라면 255.255.255.0 입니다.
마스크를 통째로 적는 대신 네트워크 부분의 비트 수만 빗금 뒤에 붙여 적기도 합니다. 위 망은 192.168.10.0/24 라고 적습니다. 이 적는 법이 CIDR(Classless Inter-Domain Routing, 클래스 없는 도메인 간 라우팅) 표기입니다.
호스트 부분의 비트를 전부 1로 채운 주소가 그 서브넷의 브로드캐스트 주소입니다. 영어로는 directed broadcast address, 우리말로는 지정 브로드캐스트 주소라고 부릅니다. 서브넷 하나를 지정해서 그 안의 모두에게 보낸다는 뜻입니다.
block-beta columns 4 a["192"] b["168"] c["10"] d["255"] e["네트워크 부분 · 24비트"]:3 f["호스트 부분 · 8비트 전부 1"]:1
그림은 192.168.10.0/24 서브넷의 브로드캐스트 주소입니다. 앞 세 바이트가 네트워크 부분이고 마지막 한 바이트가 호스트 부분입니다. 마지막 바이트의 여덟 비트를 모두 1로 채우면 255가 되므로 이 서브넷의 브로드캐스트 주소는 192.168.10.255 입니다.
반대로 호스트 부분을 전부 0으로 채운 주소는 네트워크 주소입니다. 장비 하나가 아니라 서브넷 전체의 이름으로 씁니다. 위 서브넷에서는 192.168.10.0 입니다.
이 두 값은 장비에게 나눠 줄 수 없습니다. 그래서 호스트 부분이 n비트인 서브넷에서 장비가 쓸 수 있는 주소는 2의 n제곱에서 둘을 뺀 수입니다. /24 라면 256개 중 254개입니다.
바이트 중간에서 갈리는 서브넷
네트워크 부분과 호스트 부분의 경계가 바이트 중간에 걸리면 브로드캐스트 주소의 마지막 바이트가 255가 아닙니다. 192.168.10.64/26 을 예로 들면 네트워크 부분이 26비트, 호스트 부분이 6비트입니다.
브로드캐스트 주소는 서브넷 마스크를 뒤집는 데서 시작합니다. 비트마다 1과 0을 맞바꾸면 호스트 부분만 1이 됩니다.
뒤집은 마스크를 네트워크 주소와 비트 OR 합니다. 비트 OR 는 같은 위치의 두 비트 중 하나라도 1이면 1을 내는 연산입니다. 그러면 호스트 부분이 전부 1로 찹니다.
아래는 네 값을 나란히 놓고 마지막 바이트의 비트를 오른쪽 주석에 적은 것입니다.
네트워크 주소 192.168.10.64 // 01000000
서브넷 마스크 255.255.255.192 // 11000000
마스크 뒤집기 0.0.0.63 // 00111111
둘을 OR 192.168.10.127 // 01111111
마지막 줄이 이 서브넷의 브로드캐스트 주소 192.168.10.127 입니다.
장비에게 줄 수 있는 주소는 그 사이의 192.168.10.65 부터 192.168.10.126 까지입니다. 호스트 부분이 6비트이니 64개에서 둘을 뺀 62개입니다.
255.255.255.255 제한 브로드캐스트 주소
32비트를 전부 1로 채운 255.255.255.255 는 서브넷과 상관없이 쓰는 브로드캐스트 주소입니다. 이 주소를 제한 브로드캐스트 주소(limited broadcast address)라고 부릅니다. 보내는 장비가 붙어 있는 망 안으로만 퍼지도록 제한된다는 뜻입니다.
이 주소는 자기가 어느 서브넷에 있는지 모를 때 씁니다. 지정 브로드캐스트 주소를 만들려면 네트워크 부분을 알아야 합니다. 막 켜진 장비는 그것부터 모릅니다. 그런 장비도 이 값은 언제든 쓸 수 있습니다.
라우터는 이 주소로 가는 데이터를 다른 망으로 넘기지 않습니다. 넘기기 시작하면 장비 하나의 물음이 인터넷 전체로 번지기 때문입니다.
두 계층의 브로드캐스트 주소 비교
앞의 세 소절에서 본 주소 셋을 한 표에 놓으면 이렇습니다.
| 계층 | 이름 | 값 | 닿는 범위 |
|---|---|---|---|
| 링크 계층 | MAC 브로드캐스트 주소 | FF:FF:FF:FF:FF:FF 하나 |
같은 망의 장비 전부 |
| 인터넷 계층 | 지정 브로드캐스트 주소 | 서브넷마다 다르다. 예는 192.168.10.255 |
그 서브넷의 장비 전부 |
| 인터넷 계층 | 제한 브로드캐스트 주소 | 255.255.255.255 하나 |
보내는 장비가 붙은 망의 장비 전부 |
두 계층의 주소는 따로 놀지 않습니다. IPv4 브로드캐스트 주소로 가는 데이터는 링크 계층에서 MAC 브로드캐스트 주소를 달고 나갑니다. 그래서 망 안의 장비가 전부 그 데이터를 받습니다.
라우터에서 멈추는 브로드캐스트
브로드캐스트가 어디까지 닿는지를 그림 하나로 봅니다. 망 둘이 라우터 하나로 이어져 있습니다. 망 A 의 장비가 자기 서브넷의 브로드캐스트 주소 192.168.10.255 로 보낸다고 합시다.
flowchart TD
subgraph NA["망 A · 192.168.10.0/24"]
S["보내는 장비 · 192.168.10.255 로 보냄"] --> SW["스위치"]
SW --> H1["장비 1"]
SW --> H2["장비 2"]
end
SW --> R["라우터 · 받지만 넘기지 않는다"]
subgraph NB["망 B · 192.168.20.0/24"]
H3["장비 3 · 받지 못한다"]
end
R --- H3
스위치가 망 A 의 모든 장비에게 데이터를 나눠 줍니다. 라우터도 망 A 에 붙은 장비 하나라서 받기는 받습니다. 그러나 망 B 로는 넘기지 않으므로 장비 3 은 이 브로드캐스트를 받지 못합니다. 라우터와 장비 3 사이의 선은 케이블로 이어져 있다는 표시일 뿐입니다.
라우터가 넘길 수 있는 예외가 하나 있었습니다. 망 A 의 장비가 망 B 의 지정 브로드캐스트 주소 192.168.20.255 로 보내는 경우입니다. 라우터는 이 데이터를 보통 데이터처럼 망 B 까지 날라 줍니다. 망 B 에 닿은 뒤에야 모두에게 퍼집니다.
이 예외는 공격에 쓰였습니다. 공격자는 보내는 쪽 주소를 피해자의 주소로 속입니다. 그 물음을 먼 망의 브로드캐스트 주소로 보내면 그 망의 장비 전부가 피해자에게 한꺼번에 답합니다.
이 공격을 스머프 공격이라고 부릅니다. 요즘 라우터는 대개 다른 망에서 들어온 지정 브로드캐스트를 넘기지 않도록 막아 둡니다. 오늘날에는 지정 브로드캐스트도 대개 라우터에서 멈춥니다.
브로드캐스트로 상대를 찾는 프로토콜
브로드캐스트는 상대를 모를 때 찾는 수단입니다. 망이 돌아가는 데 꼭 필요한 물음 둘이 이 주소를 탑니다.
ARP(Address Resolution Protocol, 주소 결정 프로토콜)는 IP 주소만 아는 상대의 MAC 주소를 알아내는 프로토콜입니다. 같은 망의 장비에게 데이터를 건네려면 MAC 주소가 있어야 해서 필요합니다.
DHCP(Dynamic Host Configuration Protocol, 동적 호스트 구성 프로토콜)는 새로 붙은 장비에게 IP 주소를 나눠 주는 프로토콜입니다. 장비마다 주소를 손으로 적어 넣지 않으려고 씁니다.
두 물음을 나란히 놓으면 이렇습니다.
| 프로토콜 | 모두에게 묻는 말 | 받을 주소 |
|---|---|---|
| ARP | 이 IP 주소를 쓰는 장비의 MAC 주소가 무엇인가 | MAC 브로드캐스트 주소 |
| DHCP | 나에게 IP 주소를 나눠 줄 서버가 있나 | 255.255.255.255 와 MAC 브로드캐스트 주소 |
두 물음 모두 답은 한 장비만 합니다. ARP 는 그 IP 주소를 쓰는 장비가, DHCP 는 주소를 나눠 주는 서버가 답합니다. 나머지 장비는 받아서 읽어 본 뒤 버립니다.
모두가 받는 대가
브로드캐스트는 상관없는 장비까지 모두 깨웁니다. 받은 장비는 저마다 데이터를 올려 읽고 버리는 일을 해야 합니다. 장비가 수백 대인 망에서 브로드캐스트가 잦으면 모든 장비가 그만큼 일을 더 합니다.
그래서 망이 커지면 브로드캐스트 도메인을 잘게 나눕니다. 서브넷을 나눠 라우터로 잇거나 VLAN(Virtual Local Area Network, 가상 근거리 통신망)을 씁니다. VLAN 은 스위치 하나를 여러 개의 독립된 망처럼 가르는 기술입니다.
스위치를 고리 모양으로 잘못 이으면 더 큰 일이 납니다. 브로드캐스트 프레임이 고리를 따라 끝없이 돌며 불어나서 망이 멈춥니다. 이 장애를 브로드캐스트 스톰이라고 합니다.
애플리케이션이 브로드캐스트를 쓸 때
백엔드 코드가 브로드캐스트를 직접 쓸 일은 드뭅니다. 쓴다면 같은 망 안의 장비를 찾거나 깨울 때입니다. 꺼진 컴퓨터를 깨우는 Wake-on-LAN 이 그런 예입니다. 깨우라는 신호를 같은 망의 모두에게 브로드캐스트로 보냅니다.
브로드캐스트는 UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)로만 보낼 수 있습니다. UDP 는 연결을 맺지 않고 데이터 덩이를 던지는 방식입니다. 받는 쪽이 몇인지 따지지 않습니다. TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 상대 하나와 연결을 맺고 주고받는 방식이어서 받는 쪽이 여럿일 수 없습니다.
운영체제는 대개 실수로 모두에게 보내는 일을 막아 둡니다. 소켓에 브로드캐스트를 허락하는 SO_BROADCAST 옵션을 켜야 보낼 수 있습니다.
VPC(Virtual Private Cloud, 가상 사설 클라우드) 같은 클라우드 가상 망은 브로드캐스트를 전달하지 않는 경우가 많습니다. 브로드캐스트로 이웃을 찾는 프로그램은 거기서 아무도 못 찾습니다. 그런 환경에서는 서비스 목록을 한곳에 모아 관리하는 서비스 디스커버리를 씁니다.
IPv6 에는 없는 브로드캐스트 주소
IPv6(Internet Protocol version 6, 인터넷 프로토콜 6판)에는 브로드캐스트 주소가 없습니다. 모두에게 보내는 일은 멀티캐스트가 대신합니다. 멀티캐스트는 받겠다고 나선 장비 무리에게만 보내는 방식입니다.
이렇게 바꾼 것은 상관없는 장비를 깨우지 않으려는 것입니다. 같은 망의 모든 장비가 드는 무리도 있습니다. 그 무리의 주소 ff02::1 로 보내면 브로드캐스트와 같은 범위에 닿습니다. ARP 가 하던 일은 IPv6 에서 이웃 탐색이 멀티캐스트로 맡습니다.
관련 항목
받을 범위로 가른 전송 방식
유니캐스트 · 멀티캐스트 · 애니캐스트 · 브로드캐스트 · 멀티캐스트 주소
브로드캐스트 주소가 들어 있는 주소 체계
IP 주소 · IPv4 · IPv6 · MAC 주소 · 링크 계층 주소 · 16진수
브로드캐스트 주소를 정하는 서브넷 구성 요소
서브넷 · 서브넷 마스크 · CIDR · 프리픽스 길이 · 네트워크 주소 · 호스트 부분 · 네트워크 부분 · 서브넷팅
브로드캐스트 주소가 실리는 계층과 데이터 단위
링크 계층 · 인터넷 계층 · OSI 7계층 · 프레임 · 패킷 · 데이터그램
브로드캐스트를 퍼뜨리거나 막는 네트워크 장비
스위치 · 허브 · 브리지 · 라우터 · 네트워크 카드 · 기본 게이트웨이 · 플러딩
브로드캐스트나 그 대체 수단으로 상대를 찾는 프로토콜
ARP · DHCP · RARP · 이웃 탐색 · Wake-on-LAN · NetBIOS
브로드캐스트가 닿는 범위를 나누는 수단
브로드캐스트 도메인 · VLAN · 충돌 도메인 · 라우팅
브로드캐스트가 부르는 장애와 공격
브로드캐스트 스톰 · 스위칭 루프 · 스머프 공격 · 증폭 공격 · STP
애플리케이션이 브로드캐스트를 보내거나 대신할 때 쓰는 기술
다른 이름: broadcast address · 브로드캐스트 어드레스 · 방송 주소