Network L4에서의 Session management
Session Management
L4의 네트워크 장비들은 세션을 관리하는 역할을 합니다. L4계층에서 세션을 효율적으로 관리하여 보안, 어플리케이션 성능, 네트워크 성능을 끌어 올릴 수 있습니다. 이러한 세션 관리 기법인 세션 테이블 유지/세션 정보 동기화, 비대칭 경로 문제 해결법,하나의 통신에 두개 이상의 세션이 사용될 때의 관리 방법에 대해서 알아보겠습니다.
세션 테이블 유지/ 세션 정보 동기화
종단 장비들끼리 통신을 하기시작하면 중간의 세션 장비는 세션 상태를 테이블에 기록합니다. 그런데 통신이 갑작스럽게 중단되거나 일정 기간 동안 통신이 없으면 메모리 관리를 위해 세션 정보를 세션 테이블에서 제거합니다. 이러한 세션 정보 삭제를 세션 타임아웃값을 통해 관리합니다.
하지만 여기서 문제가 발생합니다. 만약 어플리케이션의 세션 타임아웃 값이 세션 장비의 세션 타임아웃값보다 길면 세션 장비에서는 세션 정보가 없어서 어플리케이션에서는 계속 통신을 하려고 하는데 통신이 안되는 문제가 발생합니다. 즉 세션 장비의 세션 테이블에 세션 정보가 없는 상황에서(세션이 만료되어 세션 테이블에서 탈락)어플리케이션에서 세션을 시작하는 SYN 정보가 아닌 기존 통신을 이어갈 때 사용하는 ACK정보가 들어오면 세션 장비는 패킷을 차단합니다. 그러면 통신이 막혀버리는 상황이 발생합니다. 이를 해결하는 방법은 세션 운영자의 입장, 어플리케이션 개발자의 입장에서 각각 3가지가 있습니다.
세션 장비 운영자 입장에서는 세션 만료 시간을 증가하는 방법이 있습니다. 또는 세션 시간을 그대로 유지한 채로 만약 세션 테이블에 없는 정보가 없는 ACK 패킷이 들어오면 새롭게 세션을 만들어 통과시키는 방법이 있습니다. 이는 보안이 취약해진다는 단점이 있습니다. 마지막으로 세션이 만료될 경우 종단의 단말들에게 세션이 만료되었음을 통보하는 방법이 있습니다. 이렇게 양 단말에 세션의 만료를 알려주어 양 단말에서 새롭게 세션을 구축해서 통신하도록 만들 수 있습니다.
개발자 입장에서 세션 테이블의 만료로 인한 통신 차단 해결 방법은 어플리케이션에서 주기적으로 패킷을 보내는 것입니다. 주기적으로 패킷을 발생시켜 (더미 패킷) 세션 테이블이 만료되지 않고 타임아웃이 발생되기 전에 계속해서 패킷이 들어와(health check)계속해서 세션 테이블에 세션 정보가 남아있게 하는 방법입니다. 가장 권장되는 방법입니다.
비대칭 경로 문제 해결법
네트워크의 안정성을 높이기 위해 네트워크 회선과 장비를 이중화 할 수 있습니다. 이럴 경우 패킷이 지나가는 경로가 2개 이상이기 때문에 들어오는 패킷(인바운드 패킷)과 나가는 패킷(아웃바운드 패킷)의 경로가 다를 수 있습니다. 이 두개가 같은 패킷이 대칭 경로라고 하고 다른 것을 비대칭 경로라고 합니다. 근데 비대칭 경로로 갈 경우 세션 테이블에 패킷 정보가 없는 경우가 발생할 수 있습니다. 아웃바운드 패킷이 지나간 네트워크 장비와 인바운드 패킷의 경로에 있는 네트워크 장비가 서로 다르기 때문에 이러한 문제가 발생합니다.
이러한 문제의 해결책으로는 세션 테이블 동기화, 경로 보정으로 해결 가능합니다.
세션 테이블 동기화는 서로 다른 경로에 위치한 네트워크 장비의 세션 테이블을 동기화하여 비대칭 경로임에도 불구하고 동일한 네트워크 장비를 지나는 것처럼 구현할 수 있습니다. 다만 세션 테이블을 동기화하는데 걸리는 시간이 있고 동기화 하는 시간보다 패킷 응답이 빠르면 패킷이 폐기된다는 단점이 있습니다.
두번째 방법은 경로 보정입니다. 만약 네트워크 장비에서 인바운드 패킷이 통과하지 않았고 세션 테이블에 세션 정보가 없으면 세션 정보가 있고 인바운드 패킷이 통과한 네트워크 장비로 보정 경로를 만들어주어 해당 경로를 통해 패킷이 지나갈 수 있게 해주는 것입니다. 이를 위해서 네트워크 장비간 통신용 링크가 필요합니다.
하나의 통신에 두 개 이상의 세션이 사용될 때의 해결 방법
특별한 목적을 위해 하나의 통신을 위해 2개 이상의 세션이 사용되는 경우가 있습니다. 이 경우 하나의 세션이라도 끊길 경우 전체 통신이 안되는 경우가 있고 세션이 여러개이다 보니 통신에 문제가 있는지 파악하는데까지 시간이 걸릴 수 있다는 단점이 있습니다.
이렇게 2개 이상의 세션을 사용하는 통신 프로토콜로 FTP(file transfer protocol)이 존재합니다. FTP 프로토콜은 컨트롤 프로토콜과 데이터 프로토콜이 완전히 분리되어 2개의 세션을 사용해 데이터를 통신합니다.
네트워크 장비는 이런 통신 프로토콜이 요구하는 방식대로 방화벽을 열어서 데이터를 주고 받을 수 있게 해주어야합니다. 이러한 기능을 자동으로 동작시켜주는 기능을 ALG라고 합니다. ALG는 FTP 명령어를 이해하고 데이터 세션을 인지해 이에 맞게 방화벽과 NAT를 작동시켜줍니다.
출처: IT엔지니어를 위한 네트워크 입벽
Leave a comment