이번 문서 'L4 스위치 쉽기 이해하기'와 '서버 부하 분산 쉽게 이해하기', 다음에 이어질 문서인 'L4/L7 로드밸런싱 쉽게 이해하기'는 L4/L7 Network Swtich인 'F5 Networks' 장비를 기준으로 설명합니다. Alteon(Radware), Brocade, Cisco, Piolink, Pumkin, Citrix의 관점에서는 다소 다를 수 있습니다.
이번 문서를 시작으로 로드밸런싱의 핵심이자 상징인 L4 스위치(Layer 4 Switch)에 대해 알아보고자 합니다. L4 스위치는 단순히 서버의 부하 분산을 처리하는 장비가 아니라 Layer 4 Protocol, Layer 7 Protocol들의 Header를 이용한 부하 분산 처리가 가능하기 때문에 기능이 매우 많습니다. 그중에서도 네트워크 엔지니어, 서버 엔지니어뿐만 아니라 개발자들도 알아두면 좋은 현업에서 자주 사용하는 기능을 소개하겠습니다.
L4 스위치란?
앞 문서인 서버 부하 분산 쉽게 이해하기에서 다음과 같은 언급을 하였습니다.
서버 부하 분산은 부하 분산 Network Switch 혹은 소프트웨어가 담당합니다. 즉 외부로부터의 요청을 서버가 직접 받는 것이 아닌 '부하 분산 Network Switch' 혹은 '소프트웨어'가 받은 후 이를 서버로 적절히 나누어 주는 것입니다.
출처: 서버 부하 분산 쉽게 이해하기
[네트워크 엔지니어 환영의 AWS 기술블로그]
위의 설명처럼 L4 스위치는 로드밸런싱(서버 부하 분산)을 처리하는 장비입니다. 외부에서 들어오는 모든 요청은 서버가 아닌 L4 스위치를 거쳐야 하며 모든 요청을 L4 스위치가 받아 서버들에게 적절히 나누어 줍니다. L4 스위치는 부하 분산뿐만 아니라 TCP, UDP, HTTP과 같은 Protocol들의 Header를 분석하여 그 정보를 바탕으로 부하 분산을 실시하고 거기에 더해 Source IP 혹은 Destination IP를 NAT(Network Address Translation)하여 보낼 수 있습니다.
클라이언트와 서버가 '3-way handshake'를 거쳐 논리적 연결이 생성되었음을 나타내는 Connection을 생성하면 중간자 역할의 L4 스위치 역시 Connection을 생성하여 리스트를 관리합니다.(이 과정에서 3-way handshake 또한 L4 스위치를 통해 실시됩니다.) 논리적 연결을 통해 데이터를 주고받던 서버 혹은 클라이언트가 4-way handshake(연결 종료 과정)를 실시하여 Connecion을 제거하면 4-way handshake의 중재자인 L4 스위치 또한 Connection을 삭제합니다.
L4 스위치의 Connection은 Connection time out 값을 가지는데 이는 일정 시간 동안 사용되지 않은 Connection을 삭제하고 클라이언트와 서버 측에 필요시 Connection을 새로 맺도록 'Reset' Flag가 담긴 Packet을 전송할 수 있도록 합니다. 'L4 스위치 시리즈 문서'는 위의 내용을 집중적으로 설명합니다.
L4 스위치가 필요한 이유
그렇다면 L4 스위치는 왜 필요한 것일까요? 서버가 한 대만 존재한다고 생각해봅시다. 이 서버는 웹 서비스를 제공합니다. 그리고 공인 IP '123.111.43.2'을 가지고 있으며 사용자들은 이 IP로 접속합니다.(DNS 설명은 생략~!) 사용자가 점점 늘어나 서버를 늘려야 할 상황이 왔습니다.
서버 한 대를 더 늘렸고 '123.111.43.3'의 IP를 할당하였습니다. 외부에서 웹 서비스에 접속하기 위해 '123.111.43.2' 혹은 '123.111.43.3'의 IP로 접속하여야 합니다. 지금까지 사용자들은 '123.111.43.2'로만 접속해왔습니다. 앞으로도 그럴 테지요. 이제 어떻게 해야 할까요? '123.111.43.2'의 서버에 접속하면 공지로 '123.111.43.3' 서버가 추가되었으니 거기로도 접속이 가능하다고 알려야 할까요? 2대면 그래도 될지 모르겠습니다.
서버가 3대, 4대, 5대 계속 늘어난다면 어떨까요? 설령 공지를 띄워 부하가 어느 정도 나누어진다 해도 고르게 분산되는 것은 장담할 수 없습니다. 그래서 필요한 것이 '로드밸런싱'입니다. 일일이 서버에게 요청을 전달할 필요 없이 L4 스위치에 모든 요청을 전달하고 L4 스위치가 서버들에게 요청을 그대로 전달하는 것이죠.
무언가 많이 달라졌군요. 하나씩 살펴보도록 하겠습니다. 먼저 서버가 가지고 있던 각각의 공인 IP가 사라졌습니다. 모든 요청을 L4로 받기 위해 L4 스위치만이 공인 IP '123.111.43.1'을 갖게 되며 모든 사용자들은 이 공인 IP로 요청을 보내게 됩니다. 모든 요청을 L4 스위치가 받으니 서버들이 공인 IP를 갖게 될 이유가 없습니다. 공인 IP를 통해 L4 스위치로 진입하는만큼 서버로 들어올 필요가 없어졌으니까요. 서버들은 L4 스위치를 통해서만 통신을 하게 되므로 L4 스위치와 서버는 사설 IP를 통해 통신을 주고받게 됩니다. 그리하여 L4 스위치는 외부 접속용 공인 IP(123.111.43.1) 한 개와 서버 통신용 사설 IP(192.168.1.1) 한 개를 갖게 되었습니다.
여기서 부가적인 사실을 하나 더 알 수 있습니다. L4 스위치를 두고 나니 서버가 사설 IP를 갖게 되어 외부에서 서버의 IP를 알 수 없으니 서버에 직접 접속할 방법이 사라졌습니다. 이를 다시 말하면 외부에서 서버에 악의적인 트래픽 공격(DDoS 등)을 하고자 하여도 서버의 IP를 모르기 때문에 직접적인 공격이 불가능하다는 것입니다.
L4 스위치의 구성 요소
무언가 또 바뀌었네요. IP 주소 뒤에 보니 '80'이라는 숫자가 붙어있습니다. 이를 이해하기 위해서는 TCP/IP 쉽게 이해하기 문서의 다음 구절을 보아야 합니다.
TCP는 IP의 정보뿐만 아니라 Port를 이용하여 연결합니다. 한쪽 단말(Endpoint)에 도착한 데이터가 어느 입구(Port)로 들어가야 하는지 알아야 연결을 시도할 수 있기 때문이지요. 위의 TCP Header를 보시면 Source Port와 Destination Port를 확인할 수 있습니다. 예를 들어, 양쪽 단말(Endpoint) 이 HTTP로 이루어진 문서를 주고받고자 할 경우 데이터 통신을 하려면 Endpoint의 3306 Port도 아니고, 21 Port도 아닌 80 Port로 연결해야 합니다.
출처: TCPIP 쉽게 이해하기
[네트워크 엔지니어 환영의 AWS 기술블로그]
80이라는 숫자는 Port입니다. 여기서 왜 이름이 'L4 스위치'인지 드러나는군요. OSI 7 Layer 중 Layer 4의 정보인 Port를 사용하기 때문입니다. 서버는 다양한 서비스를 제공합니다. 하나의 서버에서 웹 서비스를 제공하더라도 80, 8080, 8888 Port 등 종류별로 다양한 웹서비스를 제공할 수 있습니다. 만약 Port를 모른 상태에서 IP 정보만을 가지고 접속한다면 어느 Port로 접속해야 할지 모르겠죠? 그래서 L4 스위치에는 외부에서 접속할 IP뿐만 아니라 Port를 명시해주어야 합니다.
지금까지 설명한 것들에 이름을 모두 붙여 보았습니다. 먼저 외부 사용자들이 접속 시 사용하는 IP(123.111.43.1)와 Port(80)을 갖고 있는 L4 스위치의 구성 요소를 Virtual Sever라고 합니다. 또한 Virtual Server의 IP를 VIP(Virtual Server IP)라고 부르지요. L4 스위치는 다수의 Virtual Server를 가질 수 있습니다. 이 Virtual Server에 도달한 요청을 서버(IP와 Port가 명시된)들의 집합에 전달하게 되는데 이 집합을 Pool이라 합니다. 특정 Virtual Server에 전달된 요청들은 그 Virtual Server에 연결된 Pool에만 전달됩니다. Pool의 소속원으로서 IP와 Port로 구성되는 서버를 Pool Member라 부릅니다. Pool은 다수의 Pool Member로 구성됩니다. Pool Member는 단순 IP가 아닌 IP와 Port로 이루어진 서버이기 때문에 IP가 같더라도 Port가 다르다면 엄연히 다른 Pool Member입니다.
L4 스위치의 역할과 구성요소들을 살펴보았습니다. 다음 문서에서는 L4 스위치의 트래픽 플로우에 대해 알아보겠습니다.
'Network Infra 쉽게 이해하기 > L4 & L7 Network 쉽게 이해하기' 카테고리의 다른 글
L4 스위치 쉽게 이해하기 #3(NAT) (7) | 2020.09.05 |
---|---|
L4 스위치 쉽게 이해하기 #2(Traffic Flow) (16) | 2020.06.21 |
서버 부하 분산 쉽게 이해하기 (4) | 2020.05.23 |
TCP/IP 쉽게 이해하기 (46) | 2020.05.16 |
Port 쉽게 이해하기 (6) | 2020.04.26 |
댓글