멀티캐스트와 브로드캐스트: 네트워크 데이터 전송의 두 가지 방식

컴퓨터 네트워킹에서 하나의 장치에서 여러 대의 장치로 데이터를 보내는 기술을 "다대다 통신"이라고 합니다. 이러한 기술은 주로 브로드캐스트멀티캐스트라는 두 가지 주요 모드로 구분됩니다.

1. 브로드캐스트 (Broadcast): 네트워크 전체에 데이터 전달

기본 개념

브로드캐스트는 특정 네트워크 범위 내(일반적으로 LAN)에서 한 노드가 데이터 패킷을 보내면, 해당 범위 내 모든 다른 노드들이 이 데이터를 수신하고 처리하는 방식입니다.

동작 원리

  • 대상 주소: IPv4에서는 255.255.255.255과 같은 제한된 브로드캐스트 주소나 서브넷 내 최고 주소(192.168.1.255)를 사용합니다.
  • 하드웨어 처리: 네트워크 인터페이스 카드(NIC)가 패킷의 대상 MAC 주소가 FF:FF:FF:FF:FF:FF인 경우 이를 CPU로 전달합니다.
  • 성능 문제: 필요 없는 장치들도 CPU 자원을 소모하여 패킷을 분석해야 하며, 브로드캐스트 패킷이 너무 많으면 브로드캐스트 폭풍이 발생할 수 있습니다.

활용 사례

  • ARP 요청: IP 주소에 대한 MAC 주소를 찾기 위해 사용됩니다.
  • DHCP: 네트워크에 새로 연결된 장치가 DHCP 서버를 탐지하기 위해 브로드캐스트 메시지를 보냅니다.

2. 멀티캐스트 (Multicast): 선택받은 그룹만에게 데이터 전달

기본 개념

멀티캐스트는 특정 그룹의 장치들만 데이터를 받을 수 있도록 하는 기술입니다. 이 그룹에 가입된 장치들만 데이터를 수신합니다.

동작 원리

  • D 클래스 주소: 224.0.0.0부터 239.255.255.255까지의 특별한 IP 주소 범위를 사용합니다.
  • IGMP 프로토콜: 멀티캐스트의 핵심 역할을 담당하며, 장치들은 IGMP를 통해 자신이 어떤 그룹의 멤버인지 선언합니다.
  • 효율적인 라우팅: 라우터와 스위치는 특정 그룹의 멤버가 없는 포트에는 데이터를 전달하지 않아 대역폭을 절약합니다.

활용 사례

  • 스트리밍 미디어/IPTV: 많은 사람들이 동시에 동일한 콘텐츠를 시청할 때 효율적입니다.
  • 금융 정보 전송: 주식 시세 등의 실시간 정보를 필요한 거래 터미널에만 제공합니다.

3. 비교: 브로드캐스트와 멀티캐스트의 차이점

항목 브로드캐스트 (Broadcast) 멀티캐스트 (Multicast)
범위 네트워크 내 모든 장치 관심 있는 장치들만
확장성 좋지 않음. 네트워크 규모가 커질수록 부하 증가 매우 우수. 대규모 분산 가능
라우터 지원 라우터에서 차단됨 PIM 등 멀티캐스트 라우팅 프로토콜 지원
자원 소비 관련 없는 장치도 불필요하게 처리 가입된 장치들만 처리

4. 왜 TCP를 사용하지 않는가?

멀티캐스트와 브로드캐스트는 대부분 UDP 위에서 작동합니다. 이는 TCP가 일대일 연결을 요구하고, 재전송 및 혼잡 제어 등을 처리하기 때문입니다. 예를 들어, 만약 1만 명에게 데이터를 보내는데 일부 사용자의 패킷 손실로 인해 재전송 요청이 들어오면 서버는 과부하 상태에 빠질 것입니다. 반면 UDP는 "최선을 다해 전송"하는 방식으로 효율성을 유지합니다.

5. 구현: C# 코드 예제

C#에서는 System.Net.Sockets 네임스페이스의 UdpClient 클래스를 사용하여 브로드캐스트와 멀티캐스트를 구현할 수 있습니다.

브로드캐스트 예제

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class BroadcastSender
{
    static void Main()
    {
        using (UdpClient client = new UdpClient())
        {
            client.EnableBroadcast = true;
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 7777);
            
            string message = "네트워크 전체에 전달되는 메시지!";
            byte[] data = Encoding.UTF8.GetBytes(message);

            client.Send(data, data.Length, endPoint);
            Console.WriteLine("메시지가 브로드캐스트되었습니다.");
        }
    }
}

멀티캐스트 예제

송신자 코드
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MulticastSender
{
    static void Main()
    {
        using (UdpClient client = new UdpClient())
        {
            IPAddress multicastAddress = IPAddress.Parse("239.1.1.1");
            IPEndPoint remoteEndPoint = new IPEndPoint(multicastAddress, 8888);

            client.Ttl = 2; // TTL 설정

            string message = "특정 그룹에 전달되는 메시지!";
            byte[] data = Encoding.UTF8.GetBytes(message);

            client.Send(data, data.Length, remoteEndPoint);
            Console.WriteLine("메시지가 멀티캐스트 그룹에 전달되었습니다.");
        }
    }
}
수신자 코드
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MulticastReceiver
{
    static void Main()
    {
        UdpClient receiver = new UdpClient(8888);
        IPAddress multicastAddress = IPAddress.Parse("239.1.1.1");

        try
        {
            receiver.JoinMulticastGroup(multicastAddress);
            Console.WriteLine("멀티캐스트 그룹에 가입되었습니다.");

            while (true)
            {
                IPEndPoint remoteEP = null;
                byte[] data = receiver.Receive(ref remoteEP);
                string message = Encoding.UTF8.GetString(data);
                Console.WriteLine($"[{remoteEP}]로부터 수신: {message}");
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            receiver.DropMulticastGroup(multicastAddress);
            receiver.Close();
        }
    }
}

주요 고려사항

  • 포트 일치: 송신자의 대상 포트와 수신자의 바인딩 포트가 반드시 일치해야 합니다.
  • 권한 및 방화벽: 브로드캐스트를 사용할 경우 EnableBroadcast 속성이 활성화되어야 합니다. 또한 방화벽 설정이 올바르게 구성되어 있어야 합니다.
  • 네트워크 인터페이스 선택: 멀티캐스트 그룹에 가입할 때 특정 네트워크 인터페이스를 지정할 수 있습니다.

태그: C# UDP Multicast Broadcast

6월 2일 21:54에 게시됨