하나의 송신자가 데이터를 누구에게 보내는가에 따라 구분되는 전송 방식

1. 유니캐스트 (Unicast)
1️⃣ 개념
- 1 : 1 통신
- 한 송신자가 특정한 하나의 수신자에게만 데이터를 전송
2️⃣ 특징
- 가장 기본적인 통신 방식
- 목적지 IP 주소가 단일 호스트
- 다른 호스트는 데이터 수신 불가
- 트래픽 제어와 보안에 유리
3️⃣ 예시
- 웹 브라우징 (클라이언트 ↔ 웹 서버)
- SSH, FTP
- 이메일 전송
- 대부분의 TCP 통신
4️⃣ 필기

2. 브로드캐스트 (Broadcast)
1️⃣ 개념
- 1 : N 통신
- 한 송신자가 같은 네트워크에 있는 모든 호스트에게 데이터 전송
- 대상이 정해져 있지 않고 모든 호스트에게 데이터 전송. 호스트 측에서 필터링 가능
2️⃣ 특징
- 목적지 주소: 브로드캐스트 주소
- IPv4 예:
255.255.255.255
- 네트워크 전체에 패킷 확산
- 트래픽 과다 및 보안 이슈 발생 가능
- 라우터를 넘어가지 않음 (로컬 네트워크 한정)
3️⃣ 예시
- ARP 요청
→ “이 IP 주소 누구야?”
- DHCP Discover
→ “IP 주소 줄 수 있는 서버 있어?”
- 네트워크 장비 탐색
4️⃣ 필기

5️⃣ 실습
1) Server
package com.mtcoding.ex09;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.CopyOnWriteArrayList;
class ClientThread implements Runnable{
Socket socket;
PrintWriter sender;
Scanner receiver;
public ClientThread(Socket socket, PrintWriter sender, Scanner receiver) {
this.socket = socket;
this.sender = sender;
this.receiver = receiver;
}
@Override
public void run() {
// 새로운 스레드 대기중
while(true){
System.out.println("[server] 새로운 메시지 수신 대기중----------------");
String msg = receiver.nextLine();
for (ClientThread t : ChatServer.boxes){
t.sender.println(msg);
System.out.println("[server] 새로운 메시지 전체 브로드캐스팅----------------");
}
}
}
}
public class ChatServer {
static List<ClientThread> boxes = new CopyOnWriteArrayList<>();
public static void main(String[] args) {
try {
// 1. 초기화
ServerSocket ss = new ServerSocket(10000);
while(true){
Socket socket = ss.accept(); // main 스레드 대기
System.out.println("[server] 클라이언트연결됨--------");
PrintWriter sender = new PrintWriter(socket.getOutputStream(), true);
Scanner receiver = new Scanner(socket.getInputStream());
ClientThread t1 = new ClientThread(socket, sender, receiver);
boxes.add(t1);
new Thread(t1).start();
System.out.println("[server] 클라이언트 Socket, Buffer 2개, Thread 생성되서 Box 담김-------");
}
} catch (Exception e) {
System.out.println("서버 오류 : "+e.getMessage());
}
}
}
2) Client
package com.mtcoding.ex09;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ChatClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 10000);
System.out.println("[client] 서버와 소켓이 연결되었음 -----------------");
Scanner keyboard = new Scanner(System.in);
Scanner receiver = new Scanner(socket.getInputStream());
PrintWriter sender = new PrintWriter(socket.getOutputStream(), true);
// 1. 송신 스레드
new Thread(() -> {
while(true){
System.out.println("[client] 쓰기 스레드 키보드 입력 대기중--------");
String msg = keyboard.nextLine();
sender.println(msg);
}
}).start();
// 2. 읽기 스레드
new Thread(() -> {
while(true){
System.out.println("[client] 읽기 스레드 다른 사람 메시지 수신 대기중--------");
String msg = receiver.nextLine();
System.out.println(msg);
}
}).start();
} catch (Exception e) {
System.out.println("클라이언트 오류 : "+e.getMessage());
}
}
}
3) Server 결과

4) Client1 결과

5) Client2 결과

3. 멀티 캐스트 (Multicast)
1️⃣ 개념
- 1 : 그룹 통신
- 한 송신자가 특정 그룹에 속한 호스트들에게만 데이터 전송
2️⃣ 특징
- 수신자는 멀티캐스트 그룹에 가입해야 수신 가능
- 필요 없는 호스트는 트래픽을 받지 않음
- 브로드캐스트보다 효율적
- 주로 UDP 기반
- IPv4 멀티캐스트 주소 범위
→
224.0.0.0 ~ 239.255.255.2553️⃣ 예시
- IPTV, 실시간 스트리밍
- 온라인 강의 생중계
- 화상 회의
- 주식 시세 실시간 전송
4️⃣ 필기

4. 비교표
구분 | 유니캐스트 | 브로드캐스트 | 멀티캐스트 |
통신 방식 | 1 : 1 | 1 : 전체 | 1 : 그룹 |
수신 대상 | 특정 호스트 | 동일 네트워크 전체 | 그룹에 가입한 호스트 |
트래픽 효율 | 중 | 낮음 | 높음 |
라우터 통과 | 가능 | 불가 | 가능(설정 필요) |
대표 예 | 웹, 이메일 | ARP, DHCP | IPTV, 스트리밍 |
Share article