Doctor Pepper

[세션 계층] 4계층 장비의 세션 테이블 관리 본문

네트워크/응용 계층

[세션 계층] 4계층 장비의 세션 테이블 관리

Doctor Pepper 2024. 11. 13. 21:38
728x90

 

 

 세션 장비는 일반적인 2계층3계층 네트워크 장비와 달리 세션을 인식하고 세션 테이블을 유지하며, 이를 통해 패킷 처리를 최적화하고 보안을 강화하는 데 중요한 역할을 한다. 세션 테이블의 정보를 활용해 패킷을 변경하거나 애플리케이션 성능을 최적화하기 위해 특정 패킷을 전달(Forward)하거나 차단(Drop)할 수 있다. 이러한 기능을 효과적으로 사용하기 위해서는 애플리케이션과 세션 장비가 세션 정보를 일관되게 유지하도록 관리해야 하며, 애플리케이션 개발 시 네트워크 중간에 위치한 세션 장비의 작동 방식을 고려하여 기능을 설계하는 것이 필수적이다. 특히 애플리케이션의 세션 유지 시간과 서비스 방향성을 고려하여 비대칭 경로를 방지하는 것이 중요하다. 네트워크에서 세션 장비가 중간에 있을 때 발생하는 문제의 대부분은 이와 같은 부분을 간과하여 발생하며, 이를 해결하기 위해 세션 장비의 설정을 조정하거나 애플리케이션 로직을 수정할 수 있다.

 

1. 세션 테이블 유지, 세션 정보 동기화

 네트워크 환경에서 세션 관리는 안정적인 통신을 유지하고 효율적인 자원 관리를 위해 필수적인 요소이다. 특히 세션 테이블 유지세션 정보의 동기화는 네트워크 통신의 신뢰성과 성능에 큰 영향을 미친다. 

 

 - 세션 테이블 유지의 필요성

 네트워크의 종단 장비가 통신을 시작할 때, 중간 세션 장비는 해당 세션의 상태를 테이블에 기록한다. 이렇게 기록된 세션 정보는 통신 중에는 물론 통신이 일시 중단된 상태에서도 일정 시간 동안 세션 테이블에 보존된다. 이는 양측 종단 장비 간의 통신이 정상적으로 종료되지 않았을 경우에도 통신을 재개할 수 있는 정보를 유지하기 위함이다.

 

 하지만, 세션 테이블은 메모리에 저장되기 때문에 제한된 자원인 메모리를 효율적으로 사용하기 위해 타임아웃 값을 설정하여 일정 시간 동안만 세션 정보를 보존하게 한다. 이 과정에서 메모리 사용률을 조정하고, 자원 낭비를 막을 수 있다.

 

 - 세션 공격 방지를 위한 타임아웃 관리

 악의적인 세션 공격으로 인해 네트워크가 과부하 상태에 빠지면, 세션 테이블의 용량을 초과해 정상적인 세션이 기록되지 못할 수 있다. 이를 방지하기 위해 세션 장비에서는 타임아웃 값을 줄여 오래된 세션을 빠르게 정리하고, 세션 테이블의 메모리 사용을 관리하는 전략을 취한다. 이는 네트워크 자원을 효율적으로 사용할 뿐만 아니라 보안 유지에도 중요한 역할을 한다.

 

 - 애플리케이션 특성과 세션 타임아웃 설정의 문제

 일반적인 애플리케이션은 중간 세션 장비의 기본 타임아웃 값에 맞추어 통신을 설정하지만, 일부 애플리케이션은 세션을 길게 유지해야 하는 특성을 가지고 있다. 예를 들어, 실시간 통신 서비스나 데이터베이스와의 장기 연결이 필요한 애플리케이션은 긴 세션 타임아웃을 요구한다.

 

 만약 중간 세션 장비의 세션 타임아웃 값이 애플리케이션의 타임아웃보다 짧다면 문제가 발생할 수 있다. 세션 장비가 세션을 끊어버리면, 애플리케이션은 세션이 여전히 유지되고 있다고 인식하게 되고, 이후 데이터 전송이 차단되는 상황이 발생한다.

 

 - 세션 정보 누락 문제 및 패킷 차단

 세션 테이블이 유지되지 않은 상태에서 SYN이 아닌 ACK로 시작하는 패킷이 세션 장비에 도달할 경우, 세션 장비는 이를 비정상 통신으로 간주하여 패킷을 차단한다. 이로 인해 애플리케이션은 예상치 못한 통신 장애를 겪을 수 있다.

 

 이 문제를 해결하기 위해 특정 옵션을 설정하여 패킷을 강제로 통과시키는 방식이 존재하지만, 이는 반대 방향의 패킷이 들어올 때 정책에 의해 차단될 가능성이 있어 제한적이다.

 

 - 세션 타임아웃 조정과 동기화 관리의 중요성

 이러한 문제를 예방하려면 세션 장비와 애플리케이션의 타임아웃을 일치시키고, 필요시 타임아웃 값을 유동적으로 조정하는 것이 좋다. 특히, 중요한 애플리케이션의 경우 세션 정보가 손실되지 않도록 타임아웃을 길게 설정하거나 세션 동기화 주기를 설정해 중간 장비와의 세션 유지가 보장되도록 해야 한다.

 

동작 과정

  • 3-Way Handshake로 세션 설정 : 애플리케이션 장비 간의 통신이 3-Way Handshake 과정을 통해 정상적으로 설정된다.
    • ① 세션 테이블 기록 : 방화벽이 세션 설정 과정을 확인한 후 세션 정보를 세션 테이블에 기록한다.
  • ②, ③ 패킷 통과 : 방화벽은 세션 테이블을 참조하여 애플리케이션 간에 오가는 패킷을 통과시킨다.
  • 일정 시간 동안 통신 중단 : 일정 시간 동안 애플리케이션 간 통신이 발생하지 않는다.
  • ④ 세션 타임아웃 발생 : 설정된 세션 타임아웃 시간이 경과하면 방화벽의 세션 테이블에서 해당 세션 정보가 만료되어 삭제된다.
  • ⑤ 통신 재개 시 패킷 드롭 : 세션이 만료된 상태에서 애플리케이션 통신이 재개되면 방화벽이 해당 세션을 인식하지 못해 패킷을 차단(드롭)한다.

 이러한 문제를 방지하기 위해, 세션 장비와 애플리케이션에서 적절한 세션 시간 설정을 통해 세션 만료 문제를 사전에 해결할 수 있다.

 

2. 세션 장비 운영 시 고려 사항

- 세션 만료 시간 조정

 세션 장비 운영자는 애플리케이션의 요구에 맞춰 세션 만료 시간을 연장할 수 있다. 이때, 애플리케이션에서 설정한 세션 유지 시간보다 방화벽의 세션 유지 시간이 더 길어야 하며, 대부분의 세션 장비에서는 포트 번호IP 주소에 따라 별도의 세션 만료 시간을 설정할 수 있다. 이를 통해 세션 유지 시간을 효과적으로 관리하고, 전체 세션 수 증가로 인한 시스템 메모리 고갈 문제를 예방할 수 있다. 다만, 정확한 세션 시간을 설정하려면 애플리케이션 측 개발자 또는 관리자가 애플리케이션의 고유한 세션 유지 시간을 세션 장비 운영자에게 미리 제공하는 것이 중요하다.

 

- 세션 테이블이 없는 ACK 패킷 수용 설정 (방화벽 장비)

 방화벽 세션 테이블에 정보가 없는 ACK 패킷이 들어올 경우, 방화벽은 기본적으로 해당 패킷을 차단한다. 하지만 방화벽 설정을 통해 세션 테이블에 없는 ACK 패킷에 대해 새로운 세션을 생성하여 통과시킬 수 있다. 다만, 이 설정은 보안 취약성을 초래할 수 있기 때문에 신중한 검토가 필요하며, 가능하면 적용하지 않는 것이 좋다.

 

- 세션 타임아웃 시 양 종단 장비에 세션 정보 통보

 세션 장비의 세션 만료로 인해 양 종단 장비세션 정보 불일치 문제가 발생할 수 있다. 이를 방지하기 위해, 세션 장비에서 세션 타임아웃 시 세션 정보를 삭제하는 대신, 양 종단 장비에 세션 정보 만료(RST)를 통보하는 기능을 사용할 수 있다. TCPRST 플래그를 1로 설정하여 A와 B 장비 간의 세션이 비정상 종료된 것으로 인식하게 하고, 필요한 경우 새로운 세션을 맺어 통신을 재개할 수 있다.

 

세션 만료 시의 동작 과정

  • 세션 설정 : 애플리케이션 장비 A와 B 간에 세션이 설정된다.
  • 통신 중단 : 일정 시간 동안 통신이 발생하지 않는다.
  • ① 세션 타임아웃 발생 : 설정된 세션 타임아웃 값을 초과하여 세선이 만료된다
  • ② RST 패킷 전송 : 방화벽이 양 종단 장비에 RST 패킷을 전송한다. A 장비에는 출발지 B, 도착지 A 인 RST 패킷이, B 장비에는 출발지 A, 도착지 B인 RST 패킷이 전송된다.
  • ③ 세션 종료 처리 : RST 패킷을 받은 양 종단 장비는 해당 세션을 종료하며, 통신이 필요할 경우 새로운 세션을 통해 통신이 재개된다.

 위와 같은 세션 장비의 운영 전략은 세션 만료로 인한 통신 장애를 최소화하고, 시스템 메모리 고갈 문제를 예방하여 안정적인 네트워크 운영을 돕는다.

 

3. 개발자 관점에서의 세션 유지 전략 : 주기적 패킷 발생 기능

 네트워크 세션이 중간 장비에서 타임아웃되어 통신이 끊기는 상황을 방지하려면, 애플리케이션에서 주기적으로 패킷을 발생시키는 기능을 추가하는 것이 가장 효과적이다. 이는 애플리케이션과 세션 장비의 세션 타임아웃 시간을 맞추는 역할을 한다.

 

- 세션 타임아웃 방지용 주지적 패킷(더미 패킷) 전송

 애플리케이션이 주기적으로 더미 패킷(Dummy Packet)을 보내도록 설정하면, 두 단말 간에 세션 상태 정보가 일정 시간 간격으로 체크되면서 세션이 유지된다. 중간 방화벽이나 세션 장비에서 타임아웃이 발생하기 전에 패킷이 지속적으로 발생해 세션이 자동으로 연장된다. 이 방법은 특히 네트워크 중간 세션 장비의 세션 만료 시간 문제를 해결하는 데 매우 유용하며, 최근에는 대부분의 플랫폼에서 이와 같은 기능을 구현하는 것을 권장하고 있다.

 

- 상태 체크(Health Check) 기능과 더미 패킷 전송

 

 세션 유지 기능은 단순히 주기적으로 더미 패킷을 보내는 형태에서 더 발전된 형태까지 구현이 가능하다.

대표적인 방식은 다음과 같다:

  1. 주기적 패킷 전송: 주기적으로 더미 패킷을 보내 네트워크 세션을 유지한다.
  2. 트래픽 무응답 시간 체크: 일정 시간 동안 통신이 없을 경우 더미 패킷을 전송해 세션을 유지한다.
  3. 복잡한 로직을 통한 상태 체크: 애플리케이션 상태를 체크하는 복합 로직을 도입하여, 필요 시에만 상태 체크 패킷을 전송한다.

 

4. 비대칭 경로 문제와 해결 방법

 네트워크 안정성을 높이기 위해 네트워크 회선과 장비를 이중화하는 것은 필수적이다. 이 과정에서 네트워크 경로가 두 개 이상이 될 수 있으며, 이로 인해 인바운드 패킷(외부에서 내부로 들어오는 패킷)과 아웃바운드 패킷(내부에서 외부로 나가는 패킷)이 서로 다른 경로를 거칠 수 있다. 인바운드와 아웃바운드 패킷이 같은 장비를 통과하면 이를 대칭 경로(Symmetric Path)라고 하고, 다른 장비를 통과할 경우 비대칭 경로(Asymmetric Path)라고 한다. 비대칭 경로에서는 세션 관리가 어려워지며 네트워크 성능에 영향을 미칠 수 있다.

 

- 대칭 경로와 비대칭 경로

 

 대칭 경로에서는 모든 패킷이 동일한 세션 장비를 통과하기 때문에 세션 테이블이 일관되게 유지되고, 안정적인 통신이 가능하다. 반면 비대칭 경로에서는 인바운드 패킷과 아웃바운드 패킷이 다른 세션 장비를 통과할 수 있어 세션이 분리될 위험이 있다. 이로 인해 세션 테이블이 정확하게 유지되지 않으면 패킷이 드롭되거나 통신 장애가 발생할 수 있다.

 

- 비대칭 경로에서의 세션 문제

 

 네트워크에서 2계층(Layer 2)와 3계층(Layer 3) 장비는 세션 관리를 필요로 하지 않기 때문에, 일부 네트워크 엔지니어는 세션 장비의 이러한 특성을 간과하고 비대칭 경로를 사용하는 네트워크 설계를 택하는 경우가 많다. 하지만 세션 장비가 통신 안정성을 위해 세션 정보를 테이블에 기록해야 하므로, 패킷이 인바운드와 아웃바운드 모두 동일한 경로를 통과하도록 설계하는 것이 이상적이다.

 

- 비대칭 경로 문제 해결 방안

 

  1. 세션 테이블 동기화: 세션 테이블을 동기화하여 두 대의 세션 장비가 하나의 장비처럼 동작하게 만든다. 이를 통해 비대칭 경로에서도 정상적으로 세션을 유지할 수 있으며, 패킷 경로를 강제로 변경하지 않아도 된다는 장점이 있다. 하지만 응답 속도가 매우 빠른 애플리케이션의 경우 세션 동기화 시간보다 응답이 더 빨리 처리되면 문제가 발생할 수 있다. 이 기능은 주로 인터넷 게이트웨이와 같은 긴 응답 시간을 갖는 환경에서 유용하다.
  2. 경로 보정 기능: 비대칭 경로가 발생할 경우, 세션 장비에서 경로를 보정하는 다양한 방법을 사용할 수 있다. 예를 들어, 인바운드 패킷이 지나지 않은 세션 장비로 아웃바운드 패킷이 들어올 때 이를 원래 인바운드 패킷이 지나간 다른 세션 장비로 전달하여 대칭 경로를 인위적으로 유지하는 것이다. 이 방식으로 비대칭 경로의 문제를 해결할 수 있다.

- 경로 보정 기술: MAC 리라이팅과 터널링

 

 경로 보정을 위해 MAC 주소를 변경하는 MAC 리라이팅이나 기존 패킷에 MAC 주소를 추가 인캡슐레이션하는 터널링(Tunneling) 기법이 사용된다. 이 과정에서는 방화벽 간 통신을 위한 전용 링크가 필요하다. 경로 보정 기술은 장비 제조사에 따라 구현 방식이 다르기 때문에, 도입한 장비가 지원하는 기능과 구체적인 구현 방법은 제조사나 기술 지원팀을 통해 확인하는 것이 중요하다.

 

5. 두 개 이상의 세션을 사용하는 통신 시 고려사항

 대부분의 현대 프로토콜은 단일 세션을 통해 통신을 처리하지만, 특정한 목적을 위해 두 개 이상의 세션을 사용하는 경우도 있다. 이때, 중간 세션 장비가 두 개의 세션이 하나의 통신을 위해 사용되고 있다는 사실을 인식할 수 있어야 한다. 만약 두 세션 중 하나가 끊기거나 세션 테이블에서 삭제되면, 통신은 단방향으로만 이루어지거나 아예 불가능해질 수 있다. 이와 같은 문제는 쉽게 파악되지 않아 장애가 길어질 수 있으므로 주의가 필요하다.

 

- 데이터 프로토콜과 컨트롤 프로토콜의 구분

프로토콜은 데이터 프로토콜컨트롤 프로토콜로 나눌 수 있다. 데이터 프로토콜은 실제 데이터를 전송하며, 컨트롤 프로토콜은 세션의 연결 상태와 같은 통신의 원활한 진행을 보장한다. 대부분의 최신 프로토콜은 이러한 컨트롤 기능을 프로토콜 내부에서 헤더나 별도 메시지로 처리하지만, 특정한 목적이나 구형 프로토콜의 경우 이 두 프로토콜이 분리되어 있을 수 있다. 대표적인 예가 FTP(File Transfer Protocol)로, FTP는 컨트롤 프로토콜과 데이터 프로토콜이 완전히 분리되어 있고, 통신 방식이 다른 Active 모드Passive 모드를 제공한다.

 

 

- FTP Active 모드

 

 Active 모드는 명령어를 전달하는 컨트롤 프로토콜과 데이터를 전달하는 데이터 프로토콜의 방향이 반대로 동작하는 방식이다. 일반적인 클라이언트-서버 통신과 달리, FTP에서 컨트롤 프로토콜은 클라이언트에서 서버로 통신을 시작하지만, 데이터 프로토콜은 서버에서 클라이언트로 데이터를 푸시한다.

  • 클라이언트는 1023번 이상의 TCP 포트를 사용해 FTP 서버에 접속하고, 서버는 TCP 포트 21번을 사용한다.
  • 클라이언트가 서버에 1025번 포트를 통해 데이터를 수신하겠다고 알린다.
  • 서버는 클라이언트에 1025번 포트를 사용해 데이터를 송신하겠다고 응답한다.
  • 서버에서 데이터를 전송하면, 클라이언트가 이를 수신하고 응답한다.

 

 Active 모드 사용 시 중간 방화벽이나 세션 장비가 있을 경우, 방화벽에서 반대 방향 통신을 허용해야 한다. 특히 NAT(Network Address Translation) 환경에서는 ALG(Application Layer Gateway) 기능을 통해 FTP 명령어를 인식하고 반대 방향 데이터 세션을 자동으로 허용하도록 설정해야 한다. ALG 기능이 있는 방화벽은 FTP 명령어를 분석하여 적절한 포트와 NAT 설정을 자동으로 적용한다.

 

- FTP Passive 모드

 

 Passive 모드는 Active 모드의 단점을 보완하기 위해 고안된 방식으로, 클라이언트에서 서버로 요청을 보내 다운로드를 수행하는 방식이다. Passive 모드에서도 컨트롤과 데이터 프로토콜이 분리되어 있지만, 데이터 전송 방향이 Active 모드와는 달리 클라이언트에서 서버로 요청하는 구조이다.

  1. 클라이언트는 서버에 접속하여 Passive 모드를 요청한다. 클라이언트는 1023번 이상의 TCP 포트를 사용하고, 서버는 TCP 포트 21번을 사용한다.
  2. 서버는 클라이언트에 데이터 수신에 사용할 포트(예: 2024번 포트)를 알려준다.
  3. 클라이언트는 서버에 2024번 포트로 데이터 요청을 보내고, 서버는 해당 포트로 데이터를 전송한다.

Passive 모드는 클라이언트 측 방화벽이나 세션 장비에서 추가 작업 없이 동작할 수 있다는 장점이 있지만, 서버 측에 방화벽이 있을 경우 데이터 다운로드용 포트를 추가로 개방해야 한다. FTP 서버는 Passive 모드에서 사용할 데이터 포트의 범위를 설정할 수 있어, 보안 요구 사항에 따라 필요한 포트를 미리 설정할 수 있다.

 

 

 

 세션 장비는 네트워크 성능과 보안을 유지하는 데 필수적인 역할을 하며, 세션 테이블 유지, 세션 타임아웃 관리, 애플리케이션과의 동기화가 중요하다. 이를 통해 애플리케이션과 네트워크 간의 원활한 통신을 보장하고, 중간 장비에서 발생할 수 있는 세션 종료 문제를 방지할 수 있다.

 

728x90