네트워크 스터디 1주차 - 로드밸런싱

Jiwon An·2021년 9월 18일
0

CS/네트워크

목록 보기
2/10

로드밸런서

1. 로드밸런싱

부하 분산 또는 로드 밸런싱은 컴퓨터 네트워크 기술의 일종으로 둘 혹은 셋 이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미한다.
즉, 여러 서버가 부하를 분산 처리하는 것을 로드 밸런싱이라고 한다.
로드 밸런서는 로드 밸런싱 기술을 제공하는 서비스 또는 장치이다.

  • 네트워크 또는 서버에 가해지는 로드를 분산해주는 기술
  • 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미

2. 로드밸런싱이 필요한 이유?

로드밸런싱은 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템에서 필요한 기술이다.

서비스의 제공 초기 단계라면 적은 수의 클라이언트로 인해 서버 한 대로 요청에 응답하는 것이 가능하다.
하지만 사업의 규모가 확장되거, 클라이언트 수가 늘어나게 되면 기존 서버만으로는 정상적인 서비스가 불가능하게 된다. 증가한 트래픽에 대처할 수 있는 방법은 크게 2가지이다.

  • Scale-up
    서버 자체의 성능을 확장하는 것, 비유하자면 CPU가 i3인 컴퓨터를 i7로 업그레이드하는 것과 같다.
  • Scale-out
    기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것을 의미한다. CPU가 i3인 컴퓨터를 여러 대 추가 구입해 운영하는 것에 비유할 수 있다.
    => 이 경우, 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요하다!

3. 로드밸런싱의 종류

L2 : 데이터 링크 계층을 사용, Mac 주소 기반 부하 분산
L3 : 네트워크 계층을 사용, IP 주소 기반 부하 분산
L4 : 전송 계층을 사용, Port 기반 부하 분산
L7 : 애플리케이션 계층을 사용, 요청(URL) 기반 부하 분산

3.1 L4 로드밸런싱

  • 전송 계층의 정보(IP 주소와 포트 번호)를 기준으로 스케줄링 알고리즘을 통해 부하를 분산한다.
    • L3의 정보도 활용하니까 정확히 L3 and L4 로드 밸런싱이 맞겠지만, n번 계층을 활용한다는 것은 n-1 이하의 계층들도 활용할 수 있다는 것이며 통상 L4 로드 밸런싱이라 불린다.
  • L2보다 비용이 더 비싸지만 IP 주소나 포트 번호를 활용하여 상대적으로 더 섬세한 라우팅이 가능하다.
  • 주로 Round Robin 방식을 사용한다.

3.2 L7 로드 밸런싱

  • 애플리케이션 계층에서 동작하기 때문에 IP와 포트정보 뿐만 아니라 패킷의 URI, Payload, Http Header, Cookie 등을 바탕으로 부하를 분산한다. 그래서 콘텐츠 기반 스위칭이라고도 한다.
  • OSI 7계층의 프로토콜(HTTP, SMTP, FTP 등)을 바탕으로도 분산 처리가 가능하다.

3.3 L4와 L7의 차이

공통점

  • 들어온 패킷을 적절한 목적지로 전달(스위치) 역할 수행한다.
  • 적절한 알고리즘을 통해 로드밸런서로서의 역할을 수행한다.
  • 스위치 및 서버별 Health Check를 통해, 이중화 구성후 장애시 Standby 상태의 기기는 장애스위치의 패킷을 넘겨와 active로 동작해 서버에 넘겨준다.

차이점

  • L4는 로드밸런서에서 알고리즘을 통해 server1 또는 server2로 데이터를 전송할 지 결정을 하고 Client와 3-way handshake를 실시하여 하나의 TCP세션을 갖게 된다. (L/B는 중계역할을 한다.) 그 후, 애플리케이션 계층에서 클라이언트의 요청정보(HTTP, FTP 등)를 전달받는다.
  • L4는 TCP/UDP 패킷 정보를 분석하고 해당 패킷이 사용하는 서비스 종류별(HTTP, FTP 등)로 처리하기 때문에 프록시 문제가 발생될 수 있다.
  • L7는 L/B에서 콘텐츠 기반 스위칭을 위해 3-way handshake를 보류한다. L/B와 클라이언트 간 3-way handshake를 실시하여 따로 TCP 세션을 형성, L7과 서버는 또 다른 TCP 세션을 형성하고 데이터를 중계한다.
  • L7 패킷 분석을 통한 바이러스 감염 패킷 필터링이 가능한다.
  • L7는 L4의 서비스 단위 로드밸런싱을 극복하기 위한 포트 + 페이로드 패턴을 이용하여 패킷스위칭을 한다.

4. 로드밸런서란

  • 로드밸런싱 기술을 제공하는 서비스 또는 장치
  • 클라이언트와 네트워크 트래픽이 집중되는 서버들 또는 네트워크 허브 사이에 위치한다.
  • 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 한다.
  • 만약 Scale-out 방식으로 서버를 증설하기로 결정했다면 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요하다.

5. 로드밸런서의 주요 기능

로드밸런서는 3가지의 주요 기능을 통해 로드밸런싱을 진행한다.

  1. NAT : 사설 IP를 공인 IP를 바꾼다.
  2. 터널링 : 데이터를 캡슐화하여 연결되어진 노드만 그 데이터의 캡슐을 풀어서 볼 수 있게 해준다.
  3. DSR : 요청에 대한 응답을 할 때 로드밸런서가 아닌 클라이언트의 IP로 응답한다.

DSR(Direct Service Return)
로드밸런서를 거치지 않고 서버에서 클라이언트로 직접 응답 패킷을 전달하는 것이다.

6. 로드밸런서 동작방식 (모드 별)

6.1 Bridge/Transparent Mode

사용자가 서비스를 요청하면 L4로 전달된 목적지 IP주소를 real server IP주소로 변조하고 MAC주소를 변조해서 목적지를 찾아가는 방식이다.

6.2 Router Mode

Bridge/Transparent Mode와 유사하지만 출발지(source) MAC 주소도 변조되는 방식이다.

6.3 One Arm Mode

사용자가 real server에 접근할 때 목적지 IP는 L4 스위치 IP를 바라본다. L4에 도달하면 L4가 클라이언트에게 받은 목적지 IP주소를 L4 IP 주소에서 real server IP와 real server MAC 주소로 변조한다. 되돌아가는 IP는 L4의 IP pool의 IP 주소로 변조한다.

6.4 DSR(Direct Server Return) Mode

사용자가 real server에 접근할 때 출발지와 목적지와 IP주소를 변조하지 않고, L4에서 관리하는 real server의 MAC 주소 테이블을 확인해서 MAC 주소만 변조한다.

7. 로드밸런싱 Failover

로드밸런서도 장애가 날 수 있으므로 이중화 구성을 한다. 평소에는 active된 로드밸런서로 연결 장애가 났을 경우에는 standby(대기) 중인 로드밸런서로 연결된다. 때문에 이중화된 로드밸런서에서 Health Check(장애여부 체크)를 하고, 장애로 여분 로드밸런서가 동작할 경우 이를 통해서 서버에 접근한다.

8. 로드밸런싱 알고리즘

8.1 라운드로빈 방식(Round Robin Method)

  • 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
  • 클라이언트의 요청을 순서대로 분배하기 때문에 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합함

8.2 가중 라운드로빈 방식(Weighted Round Robin Method)

  • 각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분하는 방식
  • 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식이다. 예를 들어 A라는 서버가 5라는 가중치를 갖고 B라는 서버가 2라는 가중치를 갖는다면, 로드밸런서는 라운드로빈 방식으로 A서버에 5개, B서버에 2개의 요청을 전달함

8.3 IP 해시 방식(IP Hash Method)

  • 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식
  • 사용자의 IP를 해싱해(Hashing, 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것, 또는 그러한 함수) 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장한다.

8.4 최소 연결 방식(Least Connection Method)

  • 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽을 배분하는 방식
  • 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합함

8.5 최소 리스폰타임(Least Response Time Method)

  • 서버의 현재 연결 상태와 응답시간(Response Time, 서버에 요청을 보내고 최초 응답을 받을 때까지 소요되는 시간)을 모두 고려하여 트래픽을 배분하는 방식
  • 가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분함

NAT(Network Address Translation)


NAT(네트워크 주소 변환)은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다.(패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 한다/)
쉽게 말해, 하나의 공인 IP를 여러개의 사설 IP로 변환하는 시스템이다.
랜카드를 두 개 이상 가진 공유기(라우터)가 사설망과 외부망의 사이에서 중개자 역할을 하는 것이다.
주변에서 많이 쓰는 공유기가 바로 대표적인 NAT 시스템이다.

NAT를 사용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함이다. NAT는 IPv4의 주소 부족 문제를 해결하기 위한 방법으로서 고안되었으며, 주로 비공인(사설, local) 네트워크 주소를 사용하는 망에서 외부의 공인망(public, 예를 들면 인터넷)과의 통신을 위해 네트워크 주소를 변환하는 것이다.

즉, 내부 망에서는 사설 IP 주소를 사용하여 통신하고, 외부망과의 통신시에 NAT를 거쳐 공인 IP주소로 자동 변환한다.

NAT를 사용하는 목적

  • 인터넷의 공인 IP주소를 절약할 수 있다.
    인터넷의 공인 IP주소는 한정되어 있기 때문에 가급적 이를 공유할 수 있도록 하는 것이 필요한데, NAT를 사용하면 사설 IP주소를 사용하면서 이를 공인 IP주소와 상호변환할 수 있도록 하여 공인 IP주소를 다수가 함께 사용할 수 있도록 함으로써 이를 절약할 수 있는 것이다.
  • 인터넷이란 공공망과 연결되는 사용자들의 고유한 사설망을 침입자들로부터 보호할 수 있다.
    공개된 인터넷과 사설망 사이에 방화벽(Firewall)을 설치하여 외부 공격으로부터 사용자의 통신망을 보호하는 기본적인 수단으로 활용할 수 있다. 이때 외부 통신망 즉 인터넷 망과 연결하는 장비인 라우터에 NAT를 설정할 경우 라우터는 자신에게 할당된 공인 IP주소만 외부로 알려지게 하고, 내부에서는 사설 IP주소만 사용하도록 하여 필요시에 이를 서로 변환시켜 준다. 따라서 외부 침입자가 공격하기 위해선 사설망의 내부 사설 IP주소를 알아야 하기 때문에 공격이 불가능해지므로 내부 네트워크를 보호할 수 있게 된다.

동작원리

NAT는 1:1의 주소매핑을 수행하기 때문에 NAT 라우터로 들어온 inside -> outside 패킷(또는 그 반대)만이 주소 전환의 대상이 된다.

즉, IP의 헤더라는 부분을 체크하여 NAT 테이블에 의해 해당 주소로 바꾼다음 checksum을 다시 계산하여 IP의 헤더를 바꾼다.
애플리케이션 계층에서 까지 NAT의 주소 전환이 반영되려면 NAT는 IP 주소의 참조내용을 담고 있는 애플리케이션 데이터 부분을 새로운 주소로 변환해야 한다.
자세한 설명)

1. 사설망 -> 외부망

사설망에서 외부망으로 통신을 시도하면 해당 패킷은 무조건 공유기를 거치게 되어 있다. 여기서는 의미상 게이트웨이라고 하겠다. 당연하게도 처음 발신자가 게이트웨이에게 패킷을 전달했을 때 ‘보내는 사람의 IP’를 나타내는 SRC_IP는 사설망 내부의 발신자 주소로 채워져 있다. 하지만 만약에 이것이 그대로 전달될 경우, 수신자가 응답하는 상대의 주소는 사설망 내부의 IP가 되므로 전세계의 수많은 사설망 중 어디로 보내야 할 지 알 수가 없게 된다. 이런 이유 때문에 외부에서 사설망으로의 접근이 불가능하여 NAT가 보안이 뛰어나다는 장점도 있다.

그래서 통신을 위해 게이트웨이는 패킷을 받아 패킷 안의 IP주소를 자신의 공인IP로 임의수정하여 목적지로 발신한다.

2. 외부망 -> 사설망

패킷을 받은 수신자는 목적지 IP 주소에 게이트웨이가 집어넣은 공인IP를 넣어서 패킷을 발신할 것이고, 해당 패킷은 게이트웨이에게 도달하게 될 것이다.
게이트웨이가 발신자의 IP를 수정하여 발신할 때 게이트웨이는 내부에 갖고 있는 테이블에 이를 기록해 둔다. 어떤 주소에서 어떤 주소로, 무슨 프로토콜을 사용하여 발신했는지를 기록한 후, 응답 패킷이 되돌아오면 그 값을 찾아서 해당하는 사설망 기기에게 발신하는 것이다.

3. NAPT

이렇게 테이블을 만들어서 저장해놓고 찾아가는 방법으로 이 문제를 해결할 수는 있지만 만약 두 기기가 동시에 접속을 요청한다면? 이는 NAPT에서 해결된다.


NAT의 통신 방식은 큰 문제가 하나 있다. 바로 여러 개의 사설망 내의 기기가 동시에 같은 외부망 주소로 접속을 요청하는 경우이다.
원래라면 요청한 곳의 주소와 포트를 보고 해당하는 사설망 주소를 찾아서 보내주어야 하는데, 해당하는 주소가 여러 개일 경우 중복되므로 이를 처리할 방법이 없는 것이다. 이를 해결하기 위해 만들어진 것이 NAPT이다.

NAPT는 Network Address Port Translation의 약자로, NAT에서는 발신자의 사설망-외부망 IP를 바꿔서 보내주는 역할만을 수행했다면 이제는 포트까지 바꿔서 보내는 역할을 한다. 이러면서 NAPT의 테이블은 NAT의 테이블에서 Port에 해당하는 컬럼이 추가된다. 이렇게 변경한 결과 게이트웨이는 발신자의 포트 번호를 보고도 구별할 수 있게 되었다. 만약 발신자의 포트 번호까지 같게 패킷이 보내지는 경우에는 위 그림처럼 Private Port를 임의의 SRC 포트로 바꿔서 보내면 되므로 아무런 문제가 없다.

VPN, 터널링, 터널링 프로토콜

1. VPN(Virtual Private Network)

VPN은 인터넷과 같은 공중망을 마치 전용회선처럼 사용해 보안성을 향상하면서도 사설망을 이용하지 않았기 때문에 비용문제까지 해결한 네트워크이다.

예를 들어, 본사가 서울이고 지사가 부산임을 가정할 때, 전용선을 구축하려 한다면 거리에 비례해 막대한 비용이 발생하게 되고 이것은 현실적으로 불가능하다. 이 때, VPN을 사용하면 비용을 절감하는 것은 물론이고 지사의 직원이 본사의 서버와 중요 데이터를 송수신할 경우 공중망 사용시 정보 유출 위험이 있으므로 이것을 방지하기 위해서도 VPN을 사용한다.

공중망을 통해 데이터가 송수신 되더라도 정보 유출이 없도록 라우터 체계를 비공개하고, 데이터를 암호화고, 사용자 인증 기능을 추가하는 등 다양한 방법으로 보안 기능을 제공한다.

  • 사설망(Private Network)
    특정 조직 내에서만 사용되는 네트워크로 인증된 사용자만이 사용 가능하며 보안성이 우수하지만 설치비용이나 관리비용이 든다는 단점이 존재
  • 공중망(Public Network)
    인터넷처럼 모두에게 공개된 네트워크로 보안성이 취약함

위 그림에 네모난 통로같은 것이 있는데 이것은 VPN을 구성하는 기술 요소 중 하나인 ‘터널링'이라고 한다.

2. VPN 구성 기술 - 터널링

VPN은 터널링부터 시작한다고 보면 된다.

터널링이란 연결해야 할 두 지점간에 마치 터널이 뚫린 것처럼 통로를 생성하는 것을 말한다. 그리고 이 터널은 터널링을 지원하는 프로토콜을 사용하여 구현되고 있으며 사설망과 같은 보안 기능을 제공하게 된다.


경유지를 통하지 않고 두 지점을 바로 연결시켰기 때문에 tracert 명령어를 사용해보면 라우팅 경유지 정보가 아래와 같은 방식으로 출력되지 않게 된다. 아래는 실제 패킷 트레이서(traceroute)를 활용해 터널링하기 전과 후의 변화를 확인해본 것인데 위 IP 구성과 비교해보면 경유지 정보가 출력되지 않은 것을 확인할 수 있다. 보통 터널링되는 데이터를 페이로드(Payload)라고 지칭하여 터널링 구간에서 페이로드는 캡슐화가 된다.

3. VPN 구성 기술 - 터널링 프로토콜

터널링을 지원하는 프로토콜에는 2계층 터널링 프로토콜인 PPTP(Point-to-point Tunneling Protocol), L2TP(Layer 2 Tunneling Protocol), L2F(Layer 2 Forwarding Protocol), 3계층(네트워크) 터널링 프로토콜인 IPSec(IP Security Protocol), MPLS, GRE(Generic Routing Encapsulation) 그리고 추가적으로 7계층(어플리케이션, 정확히는 4~7계층 사이) 프로토콜인 SSL VPN이 있다. 즉, 프로토콜이 적용되는 계층에 따라 2계층, 3계층, 4계층 프로토콜로 나뉘는 것이다.

PPTP(2계층)

  • MS 사에서 개발한 프로토콜로 페이로드를 암호화하고 IP헤더로 캡슐화하여 전송한다.
  • VPN에 비밀번호를 사용해 로그인하게 되는데 보안성이 미약해 요즘엔 거의 사용하지 않는 프로토콜이다.
  • 하나의 터널에 하나의 연결만을 허용한다.

L2F(2계층)

  • 시스코 사에서 개발한 프로토콜로 TCP가 아닌 UDP를 사용한다는 특징이 있다.
  • PPTP와는 다르게 하나의 터널에 여러 연결을 허용한다.

L2TP(2계층)

  • PPTP와 L2F를 결합한 방법으로 PPTP와 캡슐화 방식은 동일하지만 추가적으로 IPSec의 ESP를 도입해 보안 기능을 제공한다.

IPSec(3계층)

  • IPSec은 네트워크 계층의 보안을 위해 IETF에 의해 제안되었으며 VPN 구현에 널리 쓰이고 있다.
  • AH(Authentication Header)와 ESP(Encapsulation Security)를 통해 데이터의 인증, 무결성, 기밀성을 제공하며, 전송모드와 터널모드 2가지가 존재한다.
  • IPSec을 사용하면 IP헤더와 페이로드로 이루어져 있는 IP패킷이 터널 안으로 들어가면서 AH가 추가된 후 캡슐화가 이루어지고 ESP 헤더가 삽입되면서 IP패킷이 암호화되게 된다.
  • 두 가지 전송 모드의 차이는, 본문 상단에 링크시켜 놓은 ‘IPSecVPN의 정의 두 가지 모드(전송모드, 터널모드)’를 참조하자

MPLS(3계층)

  • MPLS는 시스코 사에서 정한 표준 중 하나로 이 MPLS 통신 네트워크를 이용해 VPN을 제공하는 것이 MPS VPN이다.
  • 여타 VPN 구조에 비해 도입 및 운영이 간단하고 비용이 저렴하다고 한다.

SSL(4~7계층)

  • 넷스케이프 사에서 만든 프로토콜로 웹서버와 웹브라우저 간의 안전한 통신을 목적으로 한다.
  • IPSec과 기능은 거의 동일하나 암호화 방식이나 하드웨어가 불필요한 점 등 차이가 있다.

4. VPN 보안 기능

터널링 프로토콜을 사용한 VPN은 데이터 기밀성, 데이터 무결성, 데이터 인증, 접근통제 기능을 제공한다.

  • 데이터 기밀성
    송수신되는 데이터의 기밀을 지키기 위해 암호화하여 전송한다.

  • 데이터 무결성
    송수신되는 데이터의 내용이 중간에 변경되지 않았음을 보장하기 위해 암호화 및 전자서명을 사용한다.

  • 데이터 인증
    수신한 데이터가 알맞는 송신자에 의해 전송됐음을 보장한다.

  • 접근통제
    인증된 사용자에게만 접근을 허용한다.


참고

로드밸런싱
https://velog.io/@yanghl98/OS%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1-Load-Balancing-%EC%A0%95%EC%9D%98-%EC%A2%85%EB%A5%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
https://vaert.tistory.com/189
https://gruuuuu.github.io/network/lb01/
https://jaehoney.tistory.com/73

NAT
https://jwprogramming.tistory.com/30
https://knowledgemarble.tistory.com/227
https://5kyc1ad.tistory.com/254

VPN
https://liveyourit.tistory.com/3

profile
🚀 백엔드 2년차 개발자입니다 🚀 성장의 즐거움으로 아자자자!🤣

0개의 댓글