네트워크

L3DSR(Layer 3 Direct Server Return) 이해하기

GEELL 2025. 9. 11. 10:29
728x90
반응형
SMALL

우리가 보통 말하는 DSR은 L2 기반으로 동작하는 DSR 방식입니다.
하지만 L3 DSR이라는 방식도 존재하며, L2 DSR과는 몇 가지 차이가 있습니다.

DSR의 기본 개념은 이전 블로그 글을 참고하세요.

https://geell.tistory.com/56

 

DSR(Direct Server Return) 이해하기

DSR(Direct Server Return)은 서버가 클라이언트로 직접 응답 패킷을 전달하는 로드밸런싱 방식입니다.즉, 클라이언트의 요청은 로드밸런서(ADC)를 거치지만, 서버의 응답은 ADC를 거치지 않고 클라이언

geell.tistory.com

 


L3DSR이란?

L3DSR은 이름에서 알 수 있듯 L3 계층(IP) 기반으로 동작하는 DSR 방식입니다.

하지만 이름과 달리, 내부 동작은 실제 NAT 기반입니다.

여기에 DSCP 설정을 추가하여 DSR처럼 동작하게 만든 방식으로, 즉 L3DSR = NAT + DSCP라고 이해하면 됩니다.


주요 특징은 다음과 같습니다.

  • 서버와 ADC가 다른 네트워크 대역에 있어도 사용 가능
  • 서버에 VIP(Service IP)를 추가하지 않아도 됨
  • ADC에서 DSCP 설정이 필요

즉, L3DSR은 L3 라우팅을 활용하여 요청을 서버로 전달하고, 서버가 클라이언트로 직접 응답하도록 설계된 방식입니다.


L3 DSR에서 DSCP 설정

 

  1. DSCP 값을 보낸다는 의미
  • DSCP는 IP 헤더 안의 필드로, 패킷에 숫자를 넣어 우선순위를 지정
  • 패킷을 생성하는 쪽(L4 장비 또는 서버)이 설정해야 하며, 설정하지 않으면 기본값 0(Best Effort)으로 전송
  1. 설정 위치
  • L4 장비(ADC): VIP로 들어오는 클라이언트 요청에 DSCP 값을 붙여 서버로 전달
  • 서버: 애플리케이션이 직접 DSCP 설정 가능 (Linux의 iptables, 소켓 옵션 등)
  1. L3DSR 환경에서는 일반적으로 L4에서 DSCP를 설정
  • 이유: 서버는 DSCP 값만 확인하면 VIP 응답 여부를 판단 가능

IP 헤더와 TOS/DSCP

  1. IP 헤더
  • 패킷의 출발지 IP, 목적지 IP, TTL, 프로토콜 등 정보를 담고 있음
  • 비유: 편지 겉봉투처럼 누가 보냈는지, 어디로 가야 하는지 표시
  1. TOS(Type of Service)
  • IP 헤더 8비트 필드로, 패킷 처리 우선순위를 정의
  • 현재는 DSCP(상위 6비트) 중심으로 QoS 처리
  1. DSCP(Differentiated Services Code Point)
  • TOS 필드 상위 6비트 사용
  • 패킷 처리 우선순위와 서비스 종류를 숫자로 표현
  • 예시:
    • 0 → Best Effort
    • 46 → Expedited Forwarding (VoIP 등)
    • 10 → Assured Forwarding

정리하면, TOS는 패킷 우선순위를 표시하는 자리, DSCP는 그 우선순위를 구체화한 값입니다.


L2 DSR과 L3 DSR 비교

구분L2DSRL3DSR
계층 L2 (MAC 기반) L3 (IP 기반)
서버와 ADC 위치 같은 브로드캐스트 도메인 필수 다른 네트워크 대역 가능
서버 VIP 설정 필요 불필요
요청 전달 방식 MAC 테이블 기반 라우팅 테이블 기반
DSCP 불필요 L4에서 설정 필요

예시: 요청과 응답 패킷 흐름

클라이언트 ip : 10.0.0.10

VIP : 20.0.0.100

서버IP : 10.0.0.1

 

L2DSR

요청 (클라이언트 → 서버)

단계출발지 IP목적지 IP출발지 MAC목적지 MAC비고
클라이언트 → L4 10.0.0.10 20.0.0.100 CC BB 클라이언트가 VIP로 요청
L4 → 서버 10.0.0.10 20.0.0.100 BB AA L4가 MAC만 서버 MAC으로 변경

응답 (서버 → 클라이언트)

단계출발지 IP목적지 IP출발지 MAC목적지 MAC비고
서버 → 클라 20.0.0.100 10.0.0.10 AA CC 서버가 VIP를 자기 IP처럼 사용, 클라이언트로 직접 응답

L3DSR

요청 (클라이언트 → 서버)

단계출발지 IP목적지 IP출발지 MAC목적지 MAC비고
클라 → L4 10.0.0.10 20.0.0.100 CC BB 클라이언트가 VIP로 요청
L4 → 서버 10.0.0.10 10.0.0.1 BB AA 라우팅 기반으로 서버에 전달(MAC 아닌 L3 기반)

응답 (서버 → 클라이언트)

단계출발지 IP목적지 IP출발지 MAC목적지 MAC비고
서버 → 클라 20.0.0.100 10.0.0.10 AA CC 서버가 VIP로 응답, 클라이언트에 직접 전달

L2/L3 DSR 구분 이유

  1. 네트워크 구성의 유연성
  • L2 DSR: 같은 브로드캐스트 도메인 필수, VLAN 제한 있음
  • L3 DSR: 서버가 다른 대역에 있어도 가능, 라우팅 테이블만 있으면 VIP → 서버 포워딩 가능
  1. 규모 확장성
  • L3 DSR은 대규모, 멀티 네트워크 환경에서 유리
  1. 패킷 처리 방식 차이
  • L2 DSR: MAC 테이블만 보고 전달
  • L3 DSR: 라우팅 테이블을 보고 패킷 경로 결정
  • IP 헤더는 그대로지만 패킷 전달 방식이 다름

 

동작 방식

DSR
클라이언트 >  L3 > L4 >  L3 > SERVER
DST : ADC MAC , VIP

DST : SERVER MAC , VIP

DST : 클라이언트 MAC, 클라이언트 IP




L3DSR
[L4와 스위치 사이를 반복해서 오가는 상황]
클라이언트 >  L3 > L4 >  L3 > SERVER
DST : ADC MAC , VIP

DST : L3 MAC , VIP

DST : 클라이언트 MAC, 클라이언트 IP




[라우팅을 NAT+DSCP로 해서 정상적인 L3DSR 상황]
클라이언트 >  L3 > L4 >  L3 > SERVER
DST : ADC MAC , VIP

DST : L3 MAC , SERVER IP

DST : 클라이언트 MAC, 클라이언트 IP

 

 

L3DSR TCPDUMP 확인

 

동작원리

TCPDUMP에서는 TOS가 HEX 값으로 표시된다.

예시)

TOS 10진수 TOS HEX 설명
0 0x00 기본값, Best Effort
40  0x28 서비스 트래픽 표시
184 0xB8 우선순위 높은 트래픽

 

 

 

 

- v 명령어를 추가 하여 패킷의 추가 헤더 정보, 플래그, TTL, 패킷 길이, 옵션 등을 확인 할 수 있다.

 

위 사진 과 같이 

클라이언트 → ADC로 요청이 이동할 때는 DSCP 값이 아직 설정되지 않기 때문에 TOS 값은 0x00으로 표시됩니다.

ADC → 서버로 요청이 전달될 때는 ADC에서 DSCP 값을 붙이므로, 서버로 이동하는 패킷에서는 ADC에서 설정한 값이 TCPDump에서 확인됩니다.

예시: DSCP = 10 → TOS 10 → HEX 0x28

 

 

 

서버(리눅스)에 DSCP설정

 

# 들어오는 DSCP 10 패킷 마킹
iptables -t mangle -A PREROUTING -m dscp --dscp 10 -j CONNMARK --set-mark 10

# POSTROUTING에서 마킹 정보 복원
iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark

# TC filter에서 마킹 10 잡아서 VIP로 NAT
tc filter add dev enp1s0f0 parent 10: protocol ip prio 10 handle 0xa fw flowid 1:1 action nat egress 11.11.11.21 22.22.22.100

728x90
반응형
LIST