전송계층 프로토콜, 대칭키/비대칭키 암호화 방식 그리고 로드밸런싱에 대하여

2024. 10. 31. 17:46[Node.js_6기 본캠프 TIL]

1. 전송 계층 프로토콜이란?

전송 계층의 대표적인 프로토콜은 TCP와 UDP가 있습니다. 
TCP는 메일이나 파일 전송과 같이 신뢰성이 중요한 경우에 주로 사용되는 연결 지향적 프로토콜입니다.
3 way handshaking 과정을 통해 서버와 클라이이언트 모두 데이터를 주고받을 준비가 되었다는 것을 확인한 뒤
논리적인 경로를 배정하여 데이터를 안정적으로/순서대로/에러 없이 교환할 수 있게 합니다.
데이터 전송 과정에 신뢰성이 중요하기 때문에, 3 way handshaking 과정에 흐름제어나 혼잡제어 등의 기능도
수행하는 만큼 CPU를 사용하게 되어 UDP에 비해 속도가 느리다는 특징이 있습니다.

UDP는 신뢰성보다는 연속성이 중요한 스트리밍 서비스 같은 경우에 주로 사용되는 비연결형 프로토콜입니다.
연결을 위해 할당되는 논리적인 경로 없이, 각각의 패킷이 다른 경로로 전송 및 처리됩니다.
이 과정에 TCP처럼 연결을 설정하고 해제하거나 흐름제어나 혼잡제어를 하지 않는 만큼 속도가 빠르고
네트워크 부하가 적다는 특징이 있습니다.

 

1-1. IP의 한계

네트워크 계층의 핵심 프로토콜인 IP는 기본적으로 비신뢰성/비연결형이라는 특징을 가지고 있습니다.
그저 수신지를 향해 패킷을 보내기만 할 뿐, 패킷이 순서대로 제대로 전송되었다는 것을 보장하지 않습니다.
이러한 한계를 보완하기 위해 사용되는 것이 TCP라고 할 수 있습니다.

 


1-2. 오류 제어, 흐름 제어

TCP에서 오류 제어나 흐름 제어를 위해 플래그와 제어비트를 사용합니다.
3 way handshaking 과정에 쓰는 SYN, ACK 같은 플래그가 흐름제어의 기능을 하고
패킷의 순서를 확인할 수 있는 NS, 네트워크 혼잡을 알리는 ECE 같은 제어비트를 통해 오류를 제어합니다.

 

 

2. 대칭키, 비대칭키 암호화란?

 

암복호화에 사용하는 키가 동일한 암호화 방식을 대칭키 암호화,
암복호화에 사용하는 키가 서로 다른 암호화 방식을 비대칭키 암호화 방식이라고 합니다.

대칭키 방식은 비교적 연산 속도가 빠른 편이지만
키를 교환해야 하고, 키가 탈취될 수 있으며
사용자가 증가할수록 관리할 키의 수가 방대해진다는 특징이 있습니다.
(키 사전공유, 키 배포센터, 공개키 암호 등을 통해 해결하기도 함)

비대칭 방식의 경우 public 키로 암호화하고 private 키로 복호화를 진행하기 때문에, 
탈취자가 공개되어 있는 public 키를 탈취하더라도 복호화를 할 수 없다는 특징을 가지고 있습니다.
다만 암호화/복호화를 위해 복잡한 연산 과정이 필요하기 때문에 다소 느리다는 단점이 있습니다.

 


2-1. 대칭키/비대칭키 혼합 사용

대칭키와 비대칭키의 장단점을 보완하기 위해, 혼합하여 사용하는 경우도 존재합니다.
A가 B의 공개키를 사용해서, 앞으로 통신에 사용할 대칭키를 암호화한 뒤 B에게 전달합니다.
그러면 B는 private키로 복호화한 뒤, 얻게 된 대칭키로 A에게 보낼 데이터를 암호화하게 됩니다.
A는 이미 대칭키를 가지고 있으므로, 암호문을 바로 복호화할 수 있습니다.
A와 B 모두 같은 대칭키를 사용할 수 있게 되었기 때문에, 이 뒤로는 대칭키를 사용한 암호화 통신이 가능해집니다.

 

2-2. HTTPS

비대칭키 암호화 방식만 사용할 경우 HTTP 메시지의 길이가 큰 경우 부하에 큰 무리를 줄 수 있습니다.
이 때문에 HTTPS에서 대칭키/비대칭키를 혼합한 방식을 사용합니다. 

 

 

3. 로드밸런싱이란?

특정 서버에 과도한 트래픽이 몰리게 되면, 제한된 대역폭과 병목 현상으로 인해 응답이 느려지거나 누락될 수 있습니다.
이 트래픽을 고르게 분배하기 위해 사용되는 기술을 로드밸런싱이라고 합니다.
클라이언트가 서버에 바로 요청을 하는게 아니라, 중간에 위치한 로드 밸런서에 요청을 보내면
로드 밸런서에서 해당 요청을 각 서버에 균등하게 분배하는 과정을 말합니다.

 

3-1. 로드밸런싱 알고리즘

로드밸런서가 특정 서버를 선택하여 요청을 전달할 때, 일정한 패턴으로 서버를 돌아가며 선택하기도 하고
연결이 적은 서버를 파악하여 우선적으로 선택하기도 하고,
해시라는 자료구조를 이용하여 선택하기도 합니다.

 

비즈니스 형태에 따라, 서버 구성에 따라 적절한 방식을 채택해야 합니다. 

 

3-2. 헬스체크

주기적으로 서버들의 장애 여부를 판단하여 정상 동작 중인 서버로만 트래픽을 보내는 것을 말합니다.
(L4 로드밸런서는 TCP 특성을 바탕으로 각 포트 상태를 체크하고, L7은 실제 웹페이지에 통신을 시도하여 애플리케이션 계층에서 이상이 없는지 파악한다)