Switches
contents
1. L2 스위치 (2계층 - 데이터 링크 계층)
"가장 고전적인" 스위치입니다.
보통 책상 밑이나 서버 랙에 설치되어 동일한 네트워크(LAN) 내의 장치들을 연결해 주는 장비입니다.
- 판단 기준 데이터: MAC 주소.
- 작동 방식:
- 프레임(데이터)을 받습니다.
- 목적지 MAC 주소를 확인합니다.
- 자신의 내부 메모리(CAM 테이블)를 조회하여 해당 MAC 주소가 어떤 물리적 포트에 꽂혀 있는지 확인합니다.
- 데이터를 오직 그 특정 포트로만 보냅니다.
- 핵심 기능: VLAN (가상 LAN):
- L2 스위치는 하나의 물리적 스위치를 논리적으로 쪼개서 여러 개의 격리된 네트워크로 만들 수 있습니다.
- 예시: 1~10번 포트는 "개발팀"(VLAN 10), 11~20번 포트는 "인사팀"(VLAN 20).
- 한계: L2 스위치만으로는 VLAN 10의 기기가 VLAN 20과 통신할 수 없습니다. 완벽히 격리되어 있기 때문입니다.
- 개발자 관련성:
docker network create my-net명령어를 실행하면, 도커는 소프트웨어 정의 L2 브리지를 생성합니다. 이 네트워크 안의 컨테이너들은 내부 IP(결국 MAC으로 변환됨)를 사용해 서로 통신할 수 있지만, 다른 네트워크의 컨테이너와는 격리됩니다.
2. L3 스위치 (3계층 - 네트워크 계층)
"스위치의 탈을 쓴 라우터"입니다.
L3 스위치는 라우팅(Routing) 기능을 수행할 수 있는 스위치입니다. 스위치의 빠른 속도와 라우터의 지능을 결합한 장비입니다.
- 판단 기준 데이터: IP 주소.
- 작동 방식:
- 같은 서브넷(네트워크) 내의 장치들에 대해서는 L2 스위치처럼 작동합니다.
- 하지만 기기 A(VLAN 10, IP 192.168.10.5)가 기기 B(VLAN 20, IP 192.168.20.5)와 통신하려 할 때, L3 스위치는 게이트웨이 역할을 합니다.
- IP 패킷을 검사하고 라우팅 테이블을 확인한 뒤, 서로 다른 VLAN 간에 트래픽을 라우팅해 줍니다.
- 왜 라우터를 안 쓰고 이걸 쓰나요?
- 속도 때문입니다. 전통적인 라우터는 소프트웨어(CPU)로 라우팅을 처리하지만, L3 스위치는 하드웨어 칩(ASIC)으로 라우팅을 처리합니다. 내부 네트워크 라우팅에 있어서는 압도적으로 빠릅니다.
- 개발자 관련성:
- AWS나 GCP에서 VPC를 만들고 서브넷(Public vs Private)을 나눌 때, 이 서브넷 간의 트래픽을 처리하는 "가상 라우터"는 기능적으로 L3 스위치입니다.
- 쿠버네티스에서 CNI 플러그인(Calico, Flannel 등)은 노드 1의 파드 A가 노드 2의 파드 B와 통신할 수 있도록 L3 라우팅을 처리합니다.
3. L4 스위치 (4계층 - 전송 계층)
"로드 밸런서(Load Balancer)"입니다.
백엔드 개발자에게 가장 흥미로운 부분입니다. L4 스위치는 단순히 '누구(IP)'인지 뿐만 아니라, '어떤 서비스(Port)' 를 원하는지까지 신경 씁니다.
- 판단 기준 데이터: IP 주소 + TCP/UDP 포트.
- 작동 방식 (세션 관리):
- 가상 IP(VIP)로 향하는 패킷을 받습니다.
- 포트 번호를 확인합니다 (예: HTTP는 80, MySQL은 3306).
- 알고리즘(라운드 로빈, 최소 연결 등)에 따라 백엔드 서버 풀(Pool) 중 하나로 트래픽을 분산시킵니다.
- 핵심 기능:
- NAT (네트워크 주소 변환): 목적지 IP를 VIP에서 실제 백엔드 서버의 Real IP로 바꿔줍니다.
- 헬스 체크 (Health Checks): 백엔드 서버의 특정 포트로 계속 신호를 보냅니다. 만약 자바 앱이 죽어서 8080 포트 응답이 없으면, L4 스위치는 그 서버로 트래픽을 보내지 않습니다.
- 세션 고정 (Sticky Sessions): 사용자 A의 패킷이 트랜잭션이 끝날 때까지 항상 서버 A로만 가도록 보장합니다.
- 개발자 관련성:
- 쿠버네티스 Service (Type: LoadBalancer): 전형적인 L4 구현체입니다. 특정 포트를 리스닝하다가 무작위 파드(Pod)로 트래픽을 던져줍니다.
- AWS NLB (Network Load Balancer): 이것이 L4 스위치입니다. 패킷의 내용(HTTP 헤더 등)은 보지 않고 오직 TCP 패킷 흐름만 보고 처리하기 때문에 초당 수백만 건의 요청을 처리할 수 있습니다.
요약 비교
| 특징 | L2 스위치 | L3 스위치 | L4 스위치 |
|---|---|---|---|
| 주요 기능 | 연결 (동일 네트워크) | 라우팅 (네트워크 간 연결) | 로드 밸런싱 & 분산 |
| OSI 계층 | 데이터 링크 (2계층) | 네트워크 (3계층) | 전송 (4계층) |
| 사용 주소 | MAC 주소 | IP 주소 | IP 주소 + TCP/UDP 포트 |
| 속도 | 가장 빠름 (하드웨어 스위칭) | 매우 빠름 (하드웨어 라우팅) | 빠르지만 CPU 사용 |
| 지능 | 낮음 (단순 배달원) | 중간 (우체국 분류 담당자) | 높음 (교통 관제사) |
| 사용 예시 | 사무실 PC끼리 연결 | 개발망과 인사망 연결 | 웹 서버 5대에 트래픽 분산 |
💡 보너스: L7 스위치 (애플리케이션 계층)
백엔드 개발자라면 L4와 자주 비교되는 L7 스위치도 알아야 합니다.
- L4 스위치: "80번 포트로 트래픽이 왔네. 서버 A로 보내야지." (패킷 내용물은 안 뜯어봄).
- L7 스위치 (예: Nginx, AWS ALB): "80번 포트로 트래픽이 왔네. 패킷을 열어서 HTTP 헤더를 읽어보자. 어라, URL이
/api/v1/users네? 이건 User 마이크로서비스로 보내야겠다. URL이/api/v1/billing이면 Billing 마이크로서비스로 보내야지."
여러분의 쿠버네티스 환경에서는:
- L2: 파드(Pod) 네트워크.
- L3: 서비스(Service)의 ClusterIP.
- L4: 서비스(Service)의
type: LoadBalancer. - L7: 도메인(
myapp.com)이나 경로(/app)에 따라 라우팅해주는 Ingress Controller (Nginx/Traefik).
references