브로드캐스트·멀티캐스트·애니캐스트: IP 전송 방식 완전 정리
유니캐스트·브로드캐스트·멀티캐스트·애니캐스트의 차이를 주소 범위, IGMP, 실제 활용 예시와 함께 완전히 설명합니다.
지난 글에서 TTL이 패킷 유효 기간을 제한하고 traceroute의 원리가 되는 방식을 살펴봤다. 이번 글에서는 IP 계층의 전송 방식(transmission mode)을 다룬다. 같은 데이터를 “누구에게” 보내느냐에 따라 유니캐스트·브로드캐스트·멀티캐스트·애니캐스트 네 가지로 나뉘며, 각각의 주소 체계와 프로토콜이 존재한다.
전송 방식 비교
| 방식 | 수신자 | IPv4 주소 | IPv6 지원 |
|---|---|---|---|
| 유니캐스트 | 1명 | 일반 호스트 주소 | ✓ |
| 브로드캐스트 | 서브넷 전체 | 255.255.255.255 / x.x.x.255 | ✗ (없음) |
| 멀티캐스트 | 구독 그룹 | 224.0.0.0/4 | ff00::/8 |
| 애니캐스트 | 최근접 1명 | BGP로 관리 | 기본 지원 |
IPv6는 브로드캐스트를 완전히 제거하고 멀티캐스트로 대체했다. 예를 들어 ff02::1은 링크 로컬 내 모든 노드, ff02::2는 모든 라우터에 해당한다.
브로드캐스트
브로드캐스트는 같은 서브넷에 속한 모든 호스트에게 패킷을 전달한다.
- Limited Broadcast
255.255.255.255: 현재 서브넷 안에서만 전달. 라우터가 포워딩하지 않음 - Directed Broadcast
192.168.1.255: 특정 서브넷의 모든 호스트. 기본적으로 라우터가 차단(RFC 2644)
# DHCP Discover는 브로드캐스트를 사용한다 (클라이언트가 아직 IP 모름)
Src: 0.0.0.0:68 → Dst: 255.255.255.255:67
브로드캐스트 도메인은 VLAN이나 라우터로 분리된다. 브로드캐스트가 많으면 브로드캐스트 스톰이 발생해 네트워크 성능이 크게 저하된다.
멀티캐스트
멀티캐스트는 특정 그룹에 가입(subscribe)한 호스트들에게만 패킷을 전달한다. 동일 스트림을 수백 명에게 보낼 때 유니캐스트 대비 대역폭을 크게 절약할 수 있다.
IGMP (Internet Group Management Protocol)
호스트가 멀티캐스트 그룹에 가입하거나 탈퇴할 때 라우터에게 알리는 프로토콜이다.
import socket, struct
# 멀티캐스트 소켓 생성 및 그룹 가입
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 5007))
# IP_ADD_MEMBERSHIP: 224.1.2.3 그룹에 가입
mreq = struct.pack("4sL", socket.inet_aton("224.1.2.3"), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
data, addr = sock.recvfrom(1024)
print(f"수신: {data} from {addr}")
멀티캐스트 라우팅 프로토콜로는 PIM-SM(Protocol Independent Multicast - Sparse Mode)이 주로 사용되며, RP(Rendezvous Point)를 기준으로 배포 트리를 구성한다.
IPv4 멀티캐스트 주소 범위
| 범위 | 용도 |
|---|---|
| 224.0.0.0/24 | 링크 로컬 (라우터 미전달) |
| 224.0.0.1 | All Hosts (서브넷 전체) |
| 224.0.0.2 | All Routers |
| 224.0.1.0/24 | Internetwork Control |
| 239.0.0.0/8 | 관리자 정의(사설) |
애니캐스트
애니캐스트는 동일한 IP 주소를 여러 노드가 공유하되, 라우팅상 가장 가까운 노드 하나만 실제로 수신한다. BGP 라우팅이 경로를 결정한다.
# DNS 루트 서버 K root (193.0.14.129) - 전 세계 분산
# 클라이언트는 같은 IP로 질의하지만 네트워크상 가장 가까운 인스턴스가 응답
$ dig +short NS .
# → a.root-servers.net, b.root-servers.net ... k.root-servers.net
# traceroute로 실제 경로 확인 (지역마다 다른 홉 수)
$ traceroute 193.0.14.129
대표적 활용 사례:
- DNS 루트 서버: 13개 IP이지만 실제 서버는 전 세계 600개+ (애니캐스트로 분산)
- CDN: Cloudflare, Akamai 등의 PoP 라우팅
- DDoS 완화: 공격 트래픽을 여러 PoP에 분산 흡수
IPv6에서는 서브넷의 첫 번째 주소를 라우터 애니캐스트 주소로 예약하는 등 프로토콜 수준에서 지원한다.
정리
브로드캐스트는 구현이 단순하지만 확장성이 없어 IPv6에서 제거됐다. 멀티캐스트는 스트리밍·금융 시세 같은 1:N 트래픽에 효율적이나, 네트워크 인프라 지원이 필요하다. 애니캐스트는 지리적 부하분산과 고가용성에 유용하며, DNS와 CDN의 핵심 기술이 됐다.
지난 글: TTL: 패킷의 유효 기간과 traceroute의 원리
다음 글: IPv6 SLAAC: 상태 비저장 주소 자동 구성
읽어주셔서 감사합니다. 😊