4계층 장비(세션 장비)는 세션 테이블에 패킷 정보를 저장하고 유지하는 기능이 포함되어 있다.
세션 테이블 정보를 이용하여 패킷을 바꾸거나, 패킷 포워드/드롭을 통해 보안 강화 및 애플리케이션 성능 최적화한다.
이렇게 좋은 기능을 가진 세션 장비를 잘 활용하기 위해서는 어떤 부분을 생각해야 할까?
[세션 관리 시 고려사항]
- 세션 테이블 유지 및 세션 정보 동기화
- 비대칭 경로 문제
- 하나의 통신에 두 개 이상의 세션이 사용될 때
1. 세션 테이블 유지 및 세션 정보 동기화
통신이 시작되면 세션 장비는 세션 상태를 테이블에 기록하여 이 정보를 가지고 있는다.
통신이 없더라도 통신이 정상적으로 종료되지 않았으면 일정 시간 동안 유지한다. → 세션 테이블은 메모리에 저장되기 때문에 세션 정보를 일정 시간만 저장하게 된다.
일정 시간이 끝나면 세션이 삭제되는데, 이를 세션 타임아웃(Session Timeout)이라고 한다.
모든 세션 장비는 적당한 세션 타임아웃값을 유지하여 애플리케이션의 통신을 관리하게 된다.
하지만 애플리케이션의 세션 타임아웃 값보다 세션 장비의 타임아웃 값이 짧을 경우,
기존에 하고 있던 애플리케이션의 통신이 세션 테이블에서 조회할 수 없기 때문에 중간에서 막히는 문제가 생긴다.
위와 같은 문제를 해결하기 위해서 세션 장비와 애플리케이션에서 각각 설정을 해줘야 한다.
이 설정은 세션 장비 운영자와 개발자로 나눌 수 있다.
세션 장비 운영자 |
|
1. 애플리케이션에 맞게 세션 타임아웃 시간 증가 | 세션 장비는 포트 번호 또는 IP 주소마다 별도의 세션 만료 시간을 직접 설정할 수 있음 ※ 단, 애플리케이션측 개발자가 고유의 세션 유지 시간을 미리 알려줘야 설정할 수 있음(당연함) |
2. 세션 시간을 둔 채 중간 패킷 수용할 수 있도록 설정 (방화벽만 해당) |
세션 테이블에 정보가 없는 ACK 패킷이 들어와도 세션을 새로 만든다. ※ 단, 전제척인 보안이 취약해질 수 있으므로 가능하면 적용 X |
3. 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보 | 세션 타임아웃 시 양쪽 종단 장비에 RST를 보내 애플리케이션 세션을 끊도록 한다. |
개발자 | |
애플리케이션에서 주기적인 헬스체크 기능 추가 | 주기적으로 패킷을 보내 세션 상태 정보를 체크한다. * 해당 패킷을 더미 패킷(Dummy Packet) 또는 상태 체크 패킷(Health Check Packet)이라고 한다. |
2. 비대칭 경로 문제
네트워크의 안정성을 향상하기 위해 네트워크를 이중화합니다.
이중화로 인해 경로가 2개 이상 생기기 때문에 인바운드 패킷과 아웃바운드의 패킷의 경로가 다른 경우가 생길 수 있습니다.
이때, 인바운드/아웃바운드의 경로가 같으면 대칭 경로(Symmetric Path), 다르면 비대칭 경로(Asymmetric Path)라고 합니다.
대칭 경로의 경우, 패킷이 들어오고 나가는 경로가 동일하기 때문에 하나의 세션 장비만을 통과하면서 세션 테이블을 정상적으로 만들 수 있습니다.
하지만, 네트워크 이중화를 위해 세션 장비가 2대 이상 있으면서 비대칭 경로일 경우라면 경로가 일정하지 않아 세션 테이블을 만들 수 없어 정상적으로 서비스되지 않습니다.
그래서 세션 장비를 도입할 때는 비대칭 경로가 생기지 않도록 네트워크와 경로를 디자인해야 이러한 문제를 해결할 수 있다.
디자인 방법은 2가지로 추릴 수 있다.
세션 테이블 동기화 | 세션 장비에서 경로 보정 |
- 패킷 경로를 변경하지 않고 두 개 이상의 방화벽이 하나의 장비처럼 동작하도록 세션 테이블을 동기화한다. ※ 단, 세션을 동기화하는 시간보다 패킷 응답이 빠를 경우에는 정상적으로 동작하지 않을 수 있음 (예: 데이터 센터에서 응답 시간이 빠른 애플리케이션을 이용할 때) - 이 방법은 주로 응답 시간이 비교적 긴 인터넷 게이트웨이로 방화벽이 사용될 때 유용하게 사용된다. |
- 인바운드 패킷이 통과하지 않았는데 아웃 바운드 패킷이 장비로 들어올 경우, 다른 세션 장비 쪽으로 패킷을 보내 경로를 보정한다. - MAC 리라이팅, 터널링 기법을 사용한다. |
3. 하나의 통신에 두 개 이상의 세션이 사용될 때
대부분의 프로토콜은 하나의 통신을 위해 한 개의 세션을 사용하고 있다.
2개 이상의 세션을 만드는 경우가 있는데, 이 2개의 세션이 하나의 통신을 위해 사용하고 있다는 것을 세션 장비에게 알려줘야 한다.
한 쪽 세션이 끊겨 있거나, 세션 장비의 세션 테이블에서 삭제되면 단방향 통신만 하거나 통신이 불가능해진다.
2개 이상의 다른 세션을 만드는 것은 특별한 목적으로만 사용되고 있는데, 대표적인 프로토콜이 바로 FTP(File Transfer Protocol)이다.
FTP는 네트워크에서 서버-클라이언트 사이에서 파일을 전송하는 데 사용되는 프로토콜로, 데이터를 연결(데이터 프로토콜)하는 세션과 데이터를 제어(컨트롤 프로토콜)하는 세션으로 구분할 수 있다.
- 데이터 프로토콜: 데이터를 전송
- 컨트롤 프로토콜: 데이터가 잘 전송되도록 세션을 제어
FTP는 Active Mode와 Passive Mode로 나뉘어서 동작한다.
기본 구동 방식은 Active Mode(능동형 모드)이다.
Active 모드는 데이터 연결(세션 제어)가 역방향으로 생성된다.
[Active 모드 연결 과정]
1. 가장 먼저 FTP 클라이언트가 서버의 21번(CMD) 포트로 연결 요청을 시도한다. 이때 자신의 전송 포트 1025를 포함한다.
2. 서버는 클라이언트의 요청에 대한 응답을 전송한다.
3. 서버의 20번(DATA) 포트는 전송 받았던 1025 포트로 연결을 요청한다.
4. 클라이언트가 서버의 요청에 대한 응답을 전송하면서 데이터 채널의 연결이 완료된다.
※ 여기서 주의해야 할 부분은 중간에 세션 장비(방화벽)가 있을 때, 서버가 클라이언트의 데이터 포트 연결을 요청할 수 있도록 장비 규칙을 적절하게 설정해야 한다.
NAT 환경에서는 클라이언트가 서버로 전달하는 포트 정보가 NAT에 의해 변환되기 때문에 동작이 안 될 수도 있다.
이럴 때는 Active Mode가 아닌, Passive Mode(수동형 연결)를 사용해야 한다.
Passive 모드의 데이터 연결은 클라이언트 → 서버이다.
1. FTP 클라이언트는 Passive 모드를 사용하겠다고 알린다.
2. 서버는 클라이언트에게 데이터를 수신할 수 있는 포트 번호(2024)를 알려주면서 해당 포트를 이용하여 수신하겠다고 응답한다.
3. 클라이언트가 서버가 전해준 2024 포트에 데이터를 요청한다.
4. 서버는 클라이언트 요청에 따라 데이터를 전송한다.
※ Passive 모드에서는 클라이언트 쪽에 세션 장비가 있을 경우에 특별한 작업이 필요하지 않지만, 서버 쪽에 방화벽이 있으면 다운로드를 위한 추가 포트를 열어줘야 한다.
'네트워크' 카테고리의 다른 글
DNS(Domain Name System)란? 도메인부터 시작하는 DNS 정리 (0) | 2024.12.22 |
---|---|
NAT(Network Address Translation)와 PAT(Port Address Translation) (1) | 2024.12.10 |
방화벽::4계층 장비 (2) | 2024.12.04 |
로드 밸런서 2 - 구성 방식, 동작 방식 + DSR 모드 설정 방법 (0) | 2024.11.28 |
로드 밸런서 1 - 부하 분산, 헬스 체크 (0) | 2024.11.27 |