전송 계층
OSI 모델의 4번째 계층으로, 두 호스트 간의 데이터 전송을 담당한다.
주요기능
- 데이터 전송의 신뢰성: 데이터가 손실되지 않고 올바른 순서로 정확하게 전달되도록 보장.
- 흐름 제어: 수신자의 처리 속도에 맞춰 데이터 전송 속도를 조절.
- 오류 제어: 데이터 전송 중 발생할 수 있는 오류를 탐지하고 수정.
- 세그멘테이션: 큰 데이터 블록을 작은 세그먼트로 나누어 전송.
프로토콜
- TCP (Transmission Control Protocol)
데이터 전송 간 손실이 거의 발생하지 않는 프로토콜로, 세그먼트 단위로 데이터가 전송된다. 사용자에게 데이터를 전송하기 전에, 논리적 경로(가상회선)를 설정하고, 각 패킷에는 가상회선 식별자(VCI, Virtual Circuit Identifier)가 포함되며 모든 패킷을 전송하면 가상회선이 연결 해제되고 패킷들은 전송된 순서대로 도착한다.
세그먼트
세그먼트: TCP가 데이터를 전송할 때 사용하는 데이터의 크기.
TCP 특징
- 연결 지향적 방식. (가상회선 패킷 교환 방식)
- 전송 순서를 보장한다.
- A/S 가 되기 때문에 데이터의 전송이 실패한 경우 재전송을 시도한다.
- 고객 맞춤형 서비스로 수신자의 용량에 따라 데이터 전송 속도를 최적화한다.
- 데이터를 전송할 때, 오류를 검사해 데이터가 목적지에 온전하게 도달하도록 보장한다.
- UDP에 비해서 느린 속도를 가진다.
- UDP (User Datagram Protocol)
사용자 데이터 프로토콜의 약자로, 안전성보다는 빠른 속도를 추구한다. UDP 특징에 비롯하여, UDP는 불특정 다수에게 데이터를 전송하는 데에 유리하다. 데이터그램 단위로 데이터가 전송되며 비연결지향적이므로 연결 작업이 별도로 필요하지 않다. 핸드셰이킹으로 주고 받는 별도의 신뢰성 작업이 없기 때문에 속도는 빠르지만, 별도의 신뢰성 작업이 없기 때문에 TCP헤더에 비해 들어가는 정보량도 적어서 보내는 데이터의 크기가 작고, 전송 순서를 보장하지 않는다.
UDP 특징
- 비연결 지향적 방식. (데이터그램 패킷 교환 방식)
- 데이터의 전송 순서를 보장하지 않기에, 도착하는 순서를 알 수 없다.
- 데이터 손실 발생 가능성 존재. A/S 불가.
- 브로드 캐스트 : LAN에 있는 네트워크 장비로 데이터를 일괄적이게 전송한다.
- TCP / UDP 비교
IP의 한계
IP(Internet Protocol)는 네트워크 계층의 프로토콜로, 패킷을 라우팅하는 역할을 수행한다.
한계
- 신뢰성 부족: 데이터의 전달 여부를 보장하지 않으며, 패킷 손실 시 재전송 기능이 없다.
- 비연결형: 연결을 설정하지 않고 데이터를 전송하기 때문에 순서가 보장되지 않으며, 패킷의 순서가 바뀔 수 있다.
- MTU(Maximum Transmission Unit): IP 패킷의 크기 제한이 있어 큰 데이터를 전송할 때는 세그먼트로 나누어야 한다.
OSI 모델에서 네트워크 계층(Network Layer)과 전송 계층(Transport Layer)은 서로 다른 역할을 담당하지만, 데이터 전송 과정에서 밀접하게 연결되어 있다. 전송 계층은 데이터의 신뢰성과 흐름 제어를 담당하고, 네트워크 계층인 IP는 패킷의 라우팅과 주소 지정 역할을 한다. 그렇다면 전송 계층은 왜 필요할까? 그것은 바로 IP의 한계에서 찾을 수 있다! IP는 데이터 패킷을 전달하는 데 기본적인 기능을 제공하지만, 데이터의 신뢰성을 보장하지 않는다. 이 때문에 전송 계층 프로토콜(TCP, UDP...)이 필요하며, 이를 통해 데이터가 올바르게 전송되고 오류가 처리된다. 즉, IP의 한계를 이해함으로써 전송 계층 프로토콜이 어떻게 이러한 한계를 극복하고, 데이터 전송의 신뢰성을 높이는지 알 수 있다. 예를 들어, TCP는 IP의 비신뢰성 문제를 해결하기 위해 체크섬과 재전송 메커니즘을 사용하는 것이다.
오류 / 흐름 제어
- 오류 제어
데이터 전송 중 발생할 수 있는 오류를 탐지하고 수정하는 메커니즘. TCP에서는 체크섬을 사용해 오류를 탐지하고, 재전송 요청을 통해 오류를 수정한다. 오류가 발생한 패킷은 다시 전송되며, 이를 통해 데이터의 정확성을 보장한다.
체크섬
체크섬(Checksum): 데이터 전송에서 오류를 탐지하기 위해 사용되는 간단한 오류 검출 기법. 데이터 블록의 모든 바이트(혹은 비트)를 합산하여 특정 값을 생성하고, 이 값을 데이터와 함께 전송한다. 수신자는 수신한 데이터의 체크섬을 다시 계산하여 송신자가 보낸 체크섬과 비교한다.
- 흐름 제어
수신자가 데이터를 처리하는 속도에 맞춰 송신자의 전송 속도를 조절하는 방법. TCP에서는 슬라이딩 윈도우(Sliding Window) 기법을 사용해 수신 버퍼의 크기에 맞게 데이터를 전송한다. 이를 통해 네트워크 혼잡을 방지하고 데이터 손실을 줄일 수 있다.
슬라이딩 윈도우
슬라이딩 윈도우(Sliding Window): 전송 계층에서 데이터 전송의 흐름을 제어하기 위한 기법. 이 방식은 송신자와 수신자 간의 데이터 전송을 효율적으로 관리하고, 네트워크 혼잡을 방지하는 데 도움을 준다.
- 윈도우 크기 설정: 송신자는 전송할 수 있는 데이터의 양을 정해진 크기의 윈도우로 정의한다. 이 윈도우 크기는 수신자의 버퍼 크기에 따라 달라질 수 있다.
- 전송: 송신자는 윈도우 크기 내에서 여러 세그먼트를 동시에 전송할 수 있다. 예를 들어, 윈도우 크기가 4인 경우, 송신자는 4개의 세그먼트를 연속적으로 전송할 수 있다.
- ACK 수신: 수신자는 올바르게 수신한 데이터에 대해 ACK(acknowledgment)를 송신자에게 보내고, 이 ACK가 도착하면 송신자는 윈도우를 슬라이드시켜 새로운 데이터 세그먼트를 전송할 수 있다.
- 윈도우 이동: ACK를 받으면 송신자는 이전에 보낸 데이터의 일부를 삭제하고, 새로운 데이터 세그먼트를 전송할 수 있다. 이 과정을 반복하여 데이터 전송이 이루어진다.
대칭키와 비대칭키 암호화
- 대칭키 암호화
송신자와 수신자가 동일한 키(대칭키)를 사용하여 데이터를 암호화하고 복호화하는 방식.
특징
- 키 관리: 송신자와 수신자는 비밀 키를 안전하게 공유해야 한다. 키가 유출되면 보안이 위험해질 수 있다.
- 속도: 대칭키 암호화는 일반적으로 빠르고 효율적이다. 큰 데이터 블록을 빠르게 처리할 수 있다.
예시
AES(Advanced Encryption Standard), DES(Data Encryption Standard)...
- 비대칭키 암호화
두 개의 키(공개 키와 개인 키)를 사용하는 방식. 공개 키는 누구나 사용할 수 있지만, 개인 키는 소유자만 알고 있어야 한다.
특징
- 키 관리: 송신자는 수신자의 공개 키로 데이터를 암호화하고, 수신자는 자신의 개인 키로 데이터를 복호화한다. 이로 인해 키 공유의 필요성이 줄어든다.
- 속도: 대칭키에 비해 일반적으로 속도가 느리다. 하지만 보안성이 높다.
예시
RSA, ECC(Elliptic Curve Cryptography)...
대칭키 / 비대칭키 혼합 사용
대칭키와 비대칭키를 혼합 사용하는 방식은 보안성과 효율성을 동시에 만족시키기 위해 자주 사용된다.
사용 방식
- 키 교환: 비대칭키 암호화를 사용하여 대칭키를 안전하게 교환한다. 송신자는 수신자의 공개 키로 대칭키를 암호화하여 전송.
- 데이터 전송: 송신자는 대칭키를 사용하여 데이터를 암호화하여 전송하고, 수신자는 수신한 대칭키로 데이터를 복호화한다.
대칭키와 비대칭키 암호화 방식이 혼합적으로 사용하는 대표적인 예시로는, 웹에서 안전한 통신을 보장하기 위해 설계된 프로토콜인 HTTPS가 있다. HTTPS에서 비대칭키 암호화는 주로 초기 키 교환 단계에서 사용된다. 사용자가 웹사이트에 접속할 때, 웹사이트의 공개 키를 통해 대칭키를 안전하게 전달하고, 이후 데이터 전송에는 대칭키를 사용하는 방식이다.
HTTPS
HTTPS(HyperText Transfer Protocol Secure)는 웹에서 안전한 통신을 제공하기 위한 프로토콜이다.
SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터 전송을 암호화하기 때문에, 중간에서 데이터를 가로채거나 변조하는 것이 어렵다. 또한, 서버 인증서를 사용하여 웹사이트의 신뢰성을 검증한다. 사용자는 실제로 접속하고자 하는 서버와 안전하게 통신하고 있는지를 확인할 수 있다. 마지막으로 HTTPS는 데이터가 전송 중에 변조되지 않았음을 보장한다.
로드밸런싱
네트워크 트래픽을 여러 서버에 분산시켜 서버의 부하를 고르게 하는 기술. 로드밸런서는 일반적으로 하드웨어 또는 소프트웨어 형태로 구현되며, 클라이언트의 요청을 적절한 서버로 라우팅한다.
장점
- 성능 향상: 여러 서버에 부하를 분산시켜 사용자 요청을 처리하는 속도를 높인다.
- 고가용성: 특정 서버에 장애가 발생하더라도 다른 서버가 요청을 처리할 수 있어 시스템의 가용성을 높인다.
- 확장성: 트래픽 증가 시 새로운 서버를 추가하여 용량을 쉽게 확장할 수 있다.
로드밸런싱 알고리즘
- 라운드 로빈(Round Robin)
요청을 순차적으로 각 서버에 분배. 서버의 부하가 비슷할 때 간단하고 효과적이다. 모든 서버에 동일하게 요청을 분배하고 고르게 요청하므로 대표적으로 흔히 사용하는 로드밸런싱 알고리즘 중 하나다.
- 최소 연결(Minimum Connections)
현재 연결 수가 가장 적은 서버에 요청을 보낸다. 이는 동시 연결 수가 서버마다 다를 때 유용하다.
- 가중치 기반(Weighted Round Robin)
각 서버에 가중치를 부여하여, 가중치에 따라 요청을 분배한다. 각 서버의 성능 차이를 반영할 수 있다.
- IP 해시(IP Hash)
클라이언트의 IP 주소를 해시하여 특정 서버에 요청을 보낸다. 동일한 클라이언트는 항상 같은 서버에 연결되므로 세션 유지에 유리하다.
헬스체크
로드밸런서가 각 서버의 상태를 모니터링하여 정상적으로 작동하는지 확인하는 과정. 로드밸런서는 주기적으로 서버에 헬스체크 요청을 보내 응답을 확인하는데, 서버가 응답하지 않거나 비정상적으로 동작하는 경우, 로드밸런서는 해당 서버를 요청 처리에서 제외한다. 이후, 장애가 발생했던 서버가 정상으로 돌아오면, 다시 로드밸런싱 대상에 포함시키게 된다.
'CS' 카테고리의 다른 글
컨텍스트 스위칭? (0) | 2024.11.12 |
---|---|
프로세스(Process) / 스레드(Thread) ? (0) | 2024.11.08 |
TCP 서버를 공부하기 전에... (2) | 2024.10.17 |
객체 지향? (0) | 2024.10.16 |
IOCP? (1) | 2024.10.15 |