부하 분산 또는 로드 밸런싱은 컴퓨터 네트워크 기술의 일종으로 둘 혹은 셋 이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미한다.
즉, 여러 서버가 부하를 분산 처리하는 것을 로드 밸런싱이라고 한다.
로드 밸런서는 로드 밸런싱 기술을 제공하는 서비스 또는 장치이다.
- 네트워크 또는 서버에 가해지는 로드를 분산해주는 기술
- 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미
로드밸런싱은 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템에서 필요한 기술이다.
서비스의 제공 초기 단계라면 적은 수의 클라이언트로 인해 서버 한 대로 요청에 응답하는 것이 가능하다.
하지만 사업의 규모가 확장되거, 클라이언트 수가 늘어나게 되면 기존 서버만으로는 정상적인 서비스가 불가능하게 된다. 증가한 트래픽에 대처할 수 있는 방법은 크게 2가지이다.
L2 : 데이터 링크 계층을 사용, Mac 주소 기반 부하 분산
L3 : 네트워크 계층을 사용, IP 주소 기반 부하 분산
L4 : 전송 계층을 사용, Port 기반 부하 분산
L7 : 애플리케이션 계층을 사용, 요청(URL) 기반 부하 분산
로드밸런서는 3가지의 주요 기능을 통해 로드밸런싱을 진행한다.
DSR(Direct Service Return)
로드밸런서를 거치지 않고 서버에서 클라이언트로 직접 응답 패킷을 전달하는 것이다.
사용자가 서비스를 요청하면 L4로 전달된 목적지 IP주소를 real server IP주소로 변조하고 MAC주소를 변조해서 목적지를 찾아가는 방식이다.
Bridge/Transparent Mode와 유사하지만 출발지(source) MAC 주소도 변조되는 방식이다.
사용자가 real server에 접근할 때 목적지 IP는 L4 스위치 IP를 바라본다. L4에 도달하면 L4가 클라이언트에게 받은 목적지 IP주소를 L4 IP 주소에서 real server IP와 real server MAC 주소로 변조한다. 되돌아가는 IP는 L4의 IP pool의 IP 주소로 변조한다.
사용자가 real server에 접근할 때 출발지와 목적지와 IP주소를 변조하지 않고, L4에서 관리하는 real server의 MAC 주소 테이블을 확인해서 MAC 주소만 변조한다.
로드밸런서도 장애가 날 수 있으므로 이중화 구성을 한다. 평소에는 active된 로드밸런서로 연결 장애가 났을 경우에는 standby(대기) 중인 로드밸런서로 연결된다. 때문에 이중화된 로드밸런서에서 Health Check(장애여부 체크)를 하고, 장애로 여분 로드밸런서가 동작할 경우 이를 통해서 서버에 접근한다.
NAT(네트워크 주소 변환)은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다.(패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 한다/)
쉽게 말해, 하나의 공인 IP를 여러개의 사설 IP로 변환하는 시스템이다.
랜카드를 두 개 이상 가진 공유기(라우터)가 사설망과 외부망의 사이에서 중개자 역할을 하는 것이다.
주변에서 많이 쓰는 공유기가 바로 대표적인 NAT 시스템이다.
NAT를 사용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함이다. NAT는 IPv4의 주소 부족 문제를 해결하기 위한 방법으로서 고안되었으며, 주로 비공인(사설, local) 네트워크 주소를 사용하는 망에서 외부의 공인망(public, 예를 들면 인터넷)과의 통신을 위해 네트워크 주소를 변환하는 것이다.
즉, 내부 망에서는 사설 IP 주소를 사용하여 통신하고, 외부망과의 통신시에 NAT를 거쳐 공인 IP주소로 자동 변환한다.
NAT는 1:1의 주소매핑을 수행하기 때문에 NAT 라우터로 들어온 inside -> outside 패킷(또는 그 반대)만이 주소 전환의 대상이 된다.
즉, IP의 헤더라는 부분을 체크하여 NAT 테이블에 의해 해당 주소로 바꾼다음 checksum을 다시 계산하여 IP의 헤더를 바꾼다.
애플리케이션 계층에서 까지 NAT의 주소 전환이 반영되려면 NAT는 IP 주소의 참조내용을 담고 있는 애플리케이션 데이터 부분을 새로운 주소로 변환해야 한다.
자세한 설명)
사설망에서 외부망으로 통신을 시도하면 해당 패킷은 무조건 공유기를 거치게 되어 있다. 여기서는 의미상 게이트웨이라고 하겠다. 당연하게도 처음 발신자가 게이트웨이에게 패킷을 전달했을 때 ‘보내는 사람의 IP’를 나타내는 SRC_IP는 사설망 내부의 발신자 주소로 채워져 있다. 하지만 만약에 이것이 그대로 전달될 경우, 수신자가 응답하는 상대의 주소는 사설망 내부의 IP가 되므로 전세계의 수많은 사설망 중 어디로 보내야 할 지 알 수가 없게 된다. 이런 이유 때문에 외부에서 사설망으로의 접근이 불가능하여 NAT가 보안이 뛰어나다는 장점도 있다.
그래서 통신을 위해 게이트웨이는 패킷을 받아 패킷 안의 IP주소를 자신의 공인IP로 임의수정하여 목적지로 발신한다.
패킷을 받은 수신자는 목적지 IP 주소에 게이트웨이가 집어넣은 공인IP를 넣어서 패킷을 발신할 것이고, 해당 패킷은 게이트웨이에게 도달하게 될 것이다.
게이트웨이가 발신자의 IP를 수정하여 발신할 때 게이트웨이는 내부에 갖고 있는 테이블에 이를 기록해 둔다. 어떤 주소에서 어떤 주소로, 무슨 프로토콜을 사용하여 발신했는지를 기록한 후, 응답 패킷이 되돌아오면 그 값을 찾아서 해당하는 사설망 기기에게 발신하는 것이다.
이렇게 테이블을 만들어서 저장해놓고 찾아가는 방법으로 이 문제를 해결할 수는 있지만 만약 두 기기가 동시에 접속을 요청한다면? 이는 NAPT에서 해결된다.
NAT의 통신 방식은 큰 문제가 하나 있다. 바로 여러 개의 사설망 내의 기기가 동시에 같은 외부망 주소로 접속을 요청하는 경우이다.
원래라면 요청한 곳의 주소와 포트를 보고 해당하는 사설망 주소를 찾아서 보내주어야 하는데, 해당하는 주소가 여러 개일 경우 중복되므로 이를 처리할 방법이 없는 것이다. 이를 해결하기 위해 만들어진 것이 NAPT이다.
NAPT는 Network Address Port Translation의 약자로, NAT에서는 발신자의 사설망-외부망 IP를 바꿔서 보내주는 역할만을 수행했다면 이제는 포트까지 바꿔서 보내는 역할을 한다. 이러면서 NAPT의 테이블은 NAT의 테이블에서 Port에 해당하는 컬럼이 추가된다. 이렇게 변경한 결과 게이트웨이는 발신자의 포트 번호를 보고도 구별할 수 있게 되었다. 만약 발신자의 포트 번호까지 같게 패킷이 보내지는 경우에는 위 그림처럼 Private Port를 임의의 SRC 포트로 바꿔서 보내면 되므로 아무런 문제가 없다.
VPN은 인터넷과 같은 공중망을 마치 전용회선처럼 사용해 보안성을 향상하면서도 사설망을 이용하지 않았기 때문에 비용문제까지 해결한 네트워크이다.
예를 들어, 본사가 서울이고 지사가 부산임을 가정할 때, 전용선을 구축하려 한다면 거리에 비례해 막대한 비용이 발생하게 되고 이것은 현실적으로 불가능하다. 이 때, VPN을 사용하면 비용을 절감하는 것은 물론이고 지사의 직원이 본사의 서버와 중요 데이터를 송수신할 경우 공중망 사용시 정보 유출 위험이 있으므로 이것을 방지하기 위해서도 VPN을 사용한다.
공중망을 통해 데이터가 송수신 되더라도 정보 유출이 없도록 라우터 체계를 비공개하고, 데이터를 암호화고, 사용자 인증 기능을 추가하는 등 다양한 방법으로 보안 기능을 제공한다.
위 그림에 네모난 통로같은 것이 있는데 이것은 VPN을 구성하는 기술 요소 중 하나인 ‘터널링'이라고 한다.
VPN은 터널링부터 시작한다고 보면 된다.
터널링이란 연결해야 할 두 지점간에 마치 터널이 뚫린 것처럼 통로를 생성하는 것을 말한다. 그리고 이 터널은 터널링을 지원하는 프로토콜을 사용하여 구현되고 있으며 사설망과 같은 보안 기능을 제공하게 된다.
경유지를 통하지 않고 두 지점을 바로 연결시켰기 때문에 tracert 명령어를 사용해보면 라우팅 경유지 정보가 아래와 같은 방식으로 출력되지 않게 된다. 아래는 실제 패킷 트레이서(traceroute)를 활용해 터널링하기 전과 후의 변화를 확인해본 것인데 위 IP 구성과 비교해보면 경유지 정보가 출력되지 않은 것을 확인할 수 있다. 보통 터널링되는 데이터를 페이로드(Payload)라고 지칭하여 터널링 구간에서 페이로드는 캡슐화가 된다.
터널링을 지원하는 프로토콜에는 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계층 프로토콜로 나뉘는 것이다.
터널링 프로토콜을 사용한 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