
기존의 네트워크 장비라고 하면 스위치와 라우터처럼 2계층과 3계층 장비를 떠올리는 경우가 많습니다.
하지만 NAT, 방화벽, 로드 밸런서 같은 장비가 등장하면서 네트워크 장비는 4계층 이상의 정보까지 이해하고 처리하는 방향으로 확장되었습니다.
4계층 장비는 단순히 IP 주소만 보는 것이 아니라 포트 번호, TCP 상태, 세션의 방향과 순서까지 이해해야 합니다.
이 때문에 4계층 이상의 장비를 흔히 세션 장비(Session Device)라고 부릅니다.
이번 글에서는 세션 장비의 특징과 대표적인 장비인 로드 밸런서와 방화벽, 그리고 운영할 때 주의해야 할 사항을 정리해보겠습니다.
4계층 장비는 TCP나 UDP와 같은 전송 계층 정보를 이해하고 동작합니다.
특히 TCP 기반 통신에서는 다음과 같은 정보를 확인할 수 있습니다.
이런 정보를 이용해 통신 상태를 추적하고 그 내용을 세션 테이블(Session Table)에 저장합니다.
Client
↓
[ Firewall / Load Balancer ]
↓
Server
세션 정보
Client IP / Port
Server IP / Port
TCP 상태
Timeout
따라서 4계층 장비를 이해할 때 가장 중요한 개념은 세션 테이블입니다.
세션 장비에서는 특히 다음 세 가지가 중요합니다.
장비는 현재 통신 중인 연결 상태를 세션 테이블에 저장합니다.
세션 정보에는 유지 시간이 존재하기 때문에 일정 시간 동안 통신이 없으면 해당 정보가 삭제될 수 있습니다.
세션 기반 장비에서는 요청과 응답이 가능하면 같은 장비를 통과해야 합니다.
Client
↓ 요청
Firewall A
↓
Server
Server
↓ 응답
Firewall A
↓
Client
이처럼 요청과 응답이 같은 장비를 통과하는 것을 대칭 경로(Symmetric Path)라고 합니다.
로드 밸런서와 같은 장비는 단순히 패킷을 전달하는 것이 아니라 IP 주소나 애플리케이션 정보를 변경하기도 합니다.
따라서 네트워크 중간에 세션 장비가 존재한다면 네트워크뿐 아니라 서버와 애플리케이션도 이를 고려해야 합니다.
로드 밸런서는 여러 서버에 트래픽을 분산해 부하를 나누는 장비입니다.
서버 한 대의 성능을 계속 높이는 방법에는 비용과 한계가 있습니다.
그래서 서버의 성능을 높이는 Scale Up보다 여러 서버를 추가하는 Scale Out 방식을 사용하는 경우가 많습니다.
┌─ Server 1
Client → LB ─┼─ Server 2
└─ Server 3
사용자는 여러 서버의 존재를 알 필요 없이 하나의 서비스 주소로 접근합니다.
로드 밸런서는 요청을 받아 여러 서버 중 하나로 전달합니다.
L4 로드 밸런싱은 TCP와 UDP 같은 4계층 정보를 이용해 트래픽을 분산합니다.
주로 다음 정보를 기준으로 동작합니다.
Source IP
Destination IP
Source Port
Destination Port
Protocol
사용자가 접근하는 주소를 VIP(Virtual IP)라고 하고 실제 서비스를 처리하는 서버의 주소를 Real IP라고 합니다.
Client
↓
VIP
↓
L4 Switch
↓
Real Server
├─ 10.0.0.10
├─ 10.0.0.11
└─ 10.0.0.12
로드 밸런서는 사용자의 요청을 받아 여러 Real Server 중 하나로 전달합니다.
L7 로드 밸런서는 단순히 IP와 Port만 확인하는 것이 아니라 애플리케이션 프로토콜의 내용까지 확인합니다.
대표적으로 다음과 같은 정보를 활용할 수 있습니다.
예를 들어 URI에 따라 서로 다른 서버로 요청을 전달할 수도 있습니다.
/image/*
↓
Image Server
/api/*
↓
API Server
이처럼 애플리케이션 계층까지 이해하는 장비를 ADC(Application Delivery Controller)라고 부릅니다.
ADC는 로드 밸런싱뿐 아니라 여러 기능을 수행할 수 있습니다.
| 구분 | L4 Load Balancer | L7 Load Balancer |
|---|---|---|
| 기준 | TCP/UDP | HTTP 등 애플리케이션 |
| 주요 정보 | IP, Port | Header, URI, 콘텐츠 |
| 처리 계층 | 4계층 | 7계층 |
| 특징 | 단순하고 빠른 분산 | 세밀한 트래픽 제어 |
| 대표 장비 | L4 Switch | ADC |
L4는 어디로 보낼지를 IP와 Port를 기반으로 판단하고, L7은 어떤 요청인지까지 이해한 뒤 서버를 선택할 수 있다는 차이가 있습니다.
방화벽은 네트워크를 통과하는 트래픽을 정책에 따라 허용하거나 차단하는 보안 장비입니다.
일반적인 방화벽은 단순히 IP와 Port만 확인하는 것이 아니라 세션 상태를 함께 확인합니다.
Internal Network
↓
Firewall
↓
Internet
방화벽 역시 세션 테이블을 유지합니다.
예를 들어 내부 사용자가 먼저 인터넷 서버로 요청했다고 가정해보겠습니다.
Internal → Internet
방화벽은 해당 통신 정보를 세션 테이블에 저장합니다.
이후 인터넷 서버에서 응답이 들어오면 기존 세션을 확인합니다.
Internet → Internal
기존 요청에 대한 응답이라고 판단하면 패킷을 통과시킵니다.
이처럼 연결 상태를 저장하고 확인하는 방식을 Stateful Inspection이라고 합니다.
Client → Server
↓
Session 생성
Server → Client
↓
기존 Session 확인
↓
허용
세션 정보를 이용하면 방화벽은 단순히 패킷 하나만 보는 것이 아니라 통신의 앞뒤 관계를 이해할 수 있습니다.
덕분에 정책을 보다 단순하게 구성할 수 있습니다.
세션 테이블은 메모리를 사용하기 때문에 모든 세션을 무한정 저장할 수 없습니다.
따라서 일정 시간 동안 통신이 없으면 세션을 삭제합니다.
이를 Session Timeout이라고 합니다.
문제는 애플리케이션과 방화벽의 세션 유지 시간이 서로 다를 때 발생합니다.
Client ───────── Server
Session 유지
Firewall
Session 삭제
Client와 Server는 연결이 유지되고 있다고 생각하지만 중간 방화벽에서는 세션이 이미 삭제된 상태일 수 있습니다.
이 상태에서 다시 패킷이 전송되면 방화벽은 해당 패킷을 기존 세션의 정상적인 패킷으로 인식하지 못하고 차단할 수 있습니다.
1. TCP Session 생성
↓
2. 정상 통신
↓
3. 오랫동안 통신 없음
↓
4. Firewall Session Timeout
↓
5. Application 다시 통신
↓
6. Firewall Drop
세션 타임아웃 문제를 해결하는 방법은 크게 네트워크 장비와 애플리케이션 관점으로 나누어 볼 수 있습니다.
필요하다면 특정 서비스의 Session Timeout 값을 증가시킬 수 있습니다.
Application Timeout
<
Firewall Timeout
방화벽에서 세션을 삭제할 때 TCP RST 패킷을 양쪽 단말에 보내 기존 연결을 명확히 종료시키는 방법도 사용할 수 있습니다.
보다 일반적인 방법은 Keepalive와 같이 주기적으로 패킷을 발생시키는 것입니다.
Client
│
├── Keepalive
├── Keepalive
├── Keepalive
↓
Server
일정 시간마다 트래픽이 발생하면 방화벽에서도 세션이 계속 갱신되므로 Session Timeout으로 인한 문제를 줄일 수 있습니다.
네트워크는 장애에 대비하기 위해 장비와 회선을 이중화하는 경우가 많습니다.
하지만 이 과정에서 요청과 응답이 서로 다른 방화벽을 통과하면 문제가 생길 수 있습니다.
Client
↓
Firewall A
↓
Server
↓
Firewall A
↓
Client
Client
↓
Firewall A
↓
Server
↓
Firewall B
↓
Client
Firewall A에는 요청 세션 정보가 있지만 Firewall B에는 해당 세션이 없습니다.
따라서 Firewall B에서는 응답 패킷을 정상적인 통신으로 인식하지 못할 수 있습니다.
가장 좋은 방법은 처음부터 대칭 경로가 유지되도록 네트워크를 설계하는 것입니다.
부득이하게 비대칭 경로를 사용해야 한다면 다음과 같은 방법을 사용할 수 있습니다.
다만 이런 기능을 사용할수록 장비의 처리 과정이 복잡해질 수 있으므로 처음부터 경로를 잘 설계하는 것이 중요합니다.
대부분의 현대 애플리케이션은 하나의 연결 안에서 통신하지만 일부 프로토콜은 여러 세션을 사용합니다.
대표적인 예가 FTP입니다.
FTP는 다음 두 종류의 통신을 사용합니다.
Control Session
+
Data Session
즉 명령을 전달하는 연결과 실제 데이터를 전달하는 연결이 분리되어 있습니다.
이 경우 방화벽이나 NAT 같은 세션 장비에서는 두 연결이 하나의 서비스와 관련되어 있다는 사실을 이해해야 합니다.
Active Mode에서는 제어 연결은 클라이언트가 서버로 시작하지만 데이터 연결은 반대 방향으로 만들어질 수 있습니다.
Control
Client → Server
Data
Server → Client
따라서 방화벽 환경에서는 데이터 연결을 위해 추가적인 처리가 필요할 수 있습니다.
Passive Mode에서는 데이터 연결도 클라이언트가 서버 방향으로 시작합니다.
Control
Client → Server
Data
Client → Server
방화벽이나 NAT 환경에서는 Active Mode보다 처리하기 쉬운 구조입니다.
다만 서버가 데이터 통신에 사용할 포트를 별도로 열어주어야 합니다.
4계층 이상의 장비를 이해할 때 핵심은 결국 세션입니다.
Session Device
│
┌───────────┼───────────┐
↓ ↓ ↓
Load Balancer Firewall NAT
│ │
└──── Session Table ────┘
│
TCP / UDP 상태
│
Timeout / Direction
│
Packet 처리
2계층과 3계층 장비가 주로 주소와 경로를 기준으로 동작한다면, 4계층 이상의 장비는 통신의 상태와 방향까지 함께 관리한다는 차이가 있습니다.
이번 장에서 기억해야 할 핵심은 다음과 같습니다.
가장 핵심적인 차이를 한 문장으로 정리하면 다음과 같습니다.
스위치와 라우터가 주소와 경로를 본다면, 방화벽과 로드 밸런서는 통신의 상태인 세션까지 본다.