TCP는 connection-oriented
, reliable
프로토콜로, 데이터의 신뢰성을 보장하며 다음과 같은 특징을 가집니다.
신뢰성 : 데이터가 손실되지 않도록 확인 및 재전송을 지원합니다.
흐름 제어 : 송신자와 수신자의 데이터 처리 속도를 조절하여 오버플로우를 방지합니다.
혼잡 제어 : 네트워크 혼잡을 완화하기 위해 데이터를 효율적으로 송수신합니다.
세그먼트 관리 : 큰 데이터를 작은 세그먼트로 나눠 전송하고, 수신 측에서 이를 재조합합니다.
사용 사례 : 웹 브라우징(HTTP, HTTPS), 이메일(SMTP/IMAP/POP3), 파일 전송(FTP) 등
reliability 제공을 위해, GBN과 SR 프로토콜의 결합으로 사용.
=> checksum, 재전송, ack, timeout
segment
segment 단위로 데이터 분할하여 연속된 byte stream 으로 전송, 수신측은 sequence number를 통해 순서 확인
reliability를 위해 error control과 retransmission
UDP는 connectionless
, unreliable
한 프로토콜로, TCP와 비교하여 단순하고 빠르지만 신뢰성은 보장하지 않는다. application level단에서의 error control을 제공받아, 최소화된 오버헤드를 통해 빠른 전송 속도를 우선하는 프로토콜이다.
datagram
고정된 크기의 datagram 단위로 분할하여 전송. 자신의 헤더에 데이터를 첨가하여 ip에게 전달하여 전송.
datagram의 독립적인 처리로 순서를 보장하지 않고 손실/순서 뒤바뀜이 있더라도 재전송 이뤄지지 않음.
ip address와 port number의 결합인 socket address 이용하여 제공.
매우 단순한 프로토콜로 flow control과 error control 매커니즘이 없다. (다만 checksum은 존재)
즉, error control, flow control없이 경량화된 형식이기에,
대용량 데이터를 전송해야하거나 신뢰성이 중요한 전송이 아니라,
TFTP (Trivial File Transfer Protocol)과 같이 내부적으로 flow control, error control을 포함한 프로세스에 적합하다.
적은 오버헤드로 bandwidth 절약과 빠른 전송이 가능하므로 multicast에 적합하다.
cf. RUDP (Reliable User Datagram Protocol)
UDP 기반으로 신뢰성을 높인 프로토콜연결 설정: 비연결형, TCP처럼 연결을 설정하지 않음.
신뢰성 추가 기능:
데이터 전송 확인 (ACK)
오류 검출 및 재전송
순서 보장
오버헤드: 낮음, UDP의 단순성 유지.
사용 사례: 실시간 응용 프로그램, 멀티미디어 스트리밍 등.
SCTP는 TCP와 UDP의 장점을 결합한 프로토콜로, 주로 미션 크리티컬한 애플리케이션에 사용된다.
신뢰성, 순서 보장, 다중 스트림 등의 기능 제공
주요 용도: 실시간 음성/비디오 통신, 금융 거래
데이터를 안전하게 보호하기 위한 암호화 방식으로 대칭키와 비대칭키가 존재한다.
대칭키의 경우, symmetric
의 의미는 송신자와 수신자가 동일한 하나의 키를 사용하여 데이터를 암호화, 복호화한다는 의미이다.
이러한 대칭성을 가진 만큼,
구현도 간단하고 암호화와 복호화의 속도가 빠르다는 장점을 가진다.
그러나, 동일한 키를 사용하는 만큼 해당 키가 유출될 경우 보안 전체가 위험한 취약점을 가지고 있다. 따라서 이러한 키를 안전하게 저장하고 공유하는 key 분배에 관한 이슈가 크다.
DES(Data Encryption Standard) : 한때 널리 사용되었으나 보안성이 낮아 현재는 거의 사용되지 않음
AES(Advanced Encryption Standard) : 현재 가장 널리 사용되는 대칭키 암호화 방식으로, 높은 보안성과 효율성을 가짐
Blowfish
파일 암호화
데이터베이스 암호화
VPN(가상 사설망) 통신
비대칭키 암호화 방식에서는
public key
와 private key
두 개의 키를 사용한 암호화를 한다.
public key
는 공개되어 누구나 알 수 있고, 데이터의 암호화하는 데에 사용하는 반면,
private key
는 소유자 개인만이 알고 있으며, 데이터의 복호화에 사용된다.
간단하게 시나리오를 생각해보자면,
송신자 Alice와 수신자 Bob을 가정하자.
목표는 송신자 Alice가 수신자 Bob에게 기밀 메시지를 전송하여 Bob만 그 메시지에 대해 복호화를 할 수 있도록 보장하는 것이다.
수신자의 key pair 생성
Bob은 public key를 누구나 사용하도록 공개하며, 자신만 사용가능한 private key를 생성한다.public key의 공유
Bob은 생성한 public key를 Alice에게 전달하여 Alice가 암호화할 수 있도록 한다.송신자의 암호화, 전달
Alice는 공유받은 public key를 통해 메시지를 암호화한다. 이 암호화된 암호문을 Bob에게 전달한다.수신자의 복호화
Bob은 전달받은 암호문을 자신의 private key로 복호화한다.
Load Balancing은 네트워크 트래픽을 여러 서버에 분산시켜 한 서버에 과부하가 걸리지 않도록 시스템의 성능과 안정성을 향상시키는 기술이다.
과도한 트래픽이 몰리게 되면, 부하가 가중되어 발열 문제를 일으키고, 메모리가 트래픽을 감당하지 못해 누수가 생길 수 있을 뿐더러, 제한된 대역폭 안에서 병목 현상으로 인해 응답이 느려지거나 심지어는 누락될 수도 있다.
이러한 부하를 조절하기 위해 Load Balancer를 통해 Load Balancing 을 통해 트래픽을 고르게 분배한다.
로드 밸런서의 주요 기능 중에 헬스 체크라는 것이 존재한다. 이는 로드 밸런서가 연결된 서버/서비스의 상태에 대한 지속적인 모니터링을 통해 장애 탐지와 복구를 하는 기능이다.
다중화된 서버 환경에서 문제가 있는 서버가 존재하는지, 그리고 요청에 대해 올바르게 응답 가능한 상태인지 주기적으로 모니터링한다.
모니터링 시 이러한 장애가 발견될 경우 자동으로 트래픽을 정상 서버로 우회시키고, 이러한 문제가 해결될 시 다시 트래픽을 서버에 보내도록 관리한다.
정상상태의 서버일 때에만 처리하는 것을 통해 시스템의 가용성과 안정성을 확보한다.
이 로드 밸런서는 다양한 방법의 알고리즘으로 구현된다.
DNS 리스트 순서대로 요청을 순차적으로 분배
클라이언트 요청이 들어온 ip를 해싱하여 정확한 위치 도달 보장
클라이언트-서버 간의 세션이 일관되게 유지
각 서버의 연결이 가장 적은 서버부터 트래픽 분배
가장 응답 시간이 짧은, 즉 가장 빠르게 응답가능한 서버로 요청을 전달