전송 계층에서는 네트워크 구성 요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공한다.
그렇다면 전송 계층 프로토콜은 무엇일까?
전송 계층 프로토콜은 통신을 원하는 두 시스템 간에 데이터를 신뢰성 있게 전송하도록 관리하고 데이터의 흐름을 제어하는 어떤 방식과 순서로 데이터를 주고받을지 정한 규칙이다.
전송 계층의 프로토콜에는 TCP와 UDP로 나누어지게 된다.
신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜
TCP는 송신자가 수신자와 연결하는 3 핸드셰이크 과정을 거치게 되는데 이를 통해서 논리적인 연결을 확보해놓고 통신하는 방식이다.
데이터를 세그먼트 단위로 보내게 되며 각 세그먼트에는 시퀀스번호와 Ack 번호가 포함되어 있어 수신자로부터 데이터를 받았음을 의미하는 ACK가 오지 않을 경우 중간에 손실되었다고 판단하여 데이터를 다시 보내게 된다.
세그먼트를 보낼 떄 메시지와 함께 TCP 헤더를 부착하여 보내게 되는데 출발지 포트번호,목적지 포트 번호 등과 같이 많이 있지만
시퀀스 번호 - 데이터의 순서를 식별하는 번호
ACK 번호 - 수신자가 다음에 기대하는 시퀀스 번호
윈도우 크기 - 흐름 제어를 위한 수신 버퍼 크기
체크섬 - 오류 제어를 위한 체크섬
만 확인하고 가자.
데이터 전송을 끝내고 연결을 끊어야할 때는 4-way 핸드 셰이크를 통해서 연결 종료를 한다.
장점
신뢰성 있는 전송: 손실된 패킷의 재전송 과 순서 보장
데이터 흐름 및 혼잡 제어: 네트워크 상황에 맞게 전송 속도 조절
데이터 무결성: 체크섬을 통해 오류를 감지
단점
속도가 느림: 신뢰성을 보장하기 위해 추가적인 절차(오버헤드)가 많음
리소스 소모가 큼: 연결 관리,재전송으로 인해 메모리와 CPU 사용이 많아짐
IP 프로토콜의 경우에 TCP와 엮어서 많이 이야기 한다.
패킷을 목적지까지 효율적으로 전달하기 위한 프로토콜
장치 간 통신을 위해 IP 주소를 사용하지만 TCP와 다르게 비신뢰성,비연결성을 특징으로 하는 프로토콜이다.
기능으로는
주소 지정: 각 네트워크 장치에 고유한 IP주소 부여
패킷 분할 및 재조립: 큰 데이터를 작은 패킷으로 나누어 전송, 수신측에서 다시 조립
라우팅: 패킷을 여러 네트워크를 거쳐 목적지까지 전달(최적의 경로를 찾아서 선택)
특징으로는
비신뢰성: IP는 패킷 손실, 중복, 순서 뒤바뀜을 감지하거나 수정하지 않음
비연결성: 송신자와 수신자간의 연결 없이 패킷을 전송
최선형 전송: IP는 항상 최선의 경로로 패킷을 전달하지만 성공을 보장하지 않음
종류: IPv4, IPv6
기본적으로 그냥 IP로는 단점이 많기때문에 TCP와 함께 사용하는 경우가 많다.(TCP/IP)
송신자와 수신자 간의 연결 설정 과정 없이 그냥 데이터를 보내는 것
헤더가 단순하여 오버헤드가 적고 속도가 빠르지만 데이터의 순서 보장, 재전송 등 신뢰성을 위한 부가 기능이 없다.
실시간 성능이 중요한 서비스(스트리밍)에서 유리하다.
TCP와 다르게 데이터의 손실,순서 꼬임 등이 발생하더라도 재전송하지않고 데이터를 폐기한다.
장점
빠른 데이터 전송: 연결 과정 없이 오버헤드가 적어 속도가 빠름
실시간 성능: 지연 없이 데이터를 전송해야 하는 환경에서 적합
간단한 프로토콜: 구현과 사용이 쉽고 가볍다.
단점
신뢰성 부족: 데이터 손실이나 순서 뒤바뀜을 처리하지 않음
오류 정정 불가: 오류 발생시, 패킷을 버림
보안 취약: 연결 없이 데이터를 전송하므로 스푸핑(트래픽을 공격자의 컴퓨터로 우회하여 개인 정보 탈취)나 DDos(엄청나게 많은 패킷을 보내어 서버를 먹통으로 만들어버림)에 약하다.
1.비신뢰성: 최선의 경로로 전달하나 성공 여부를 보장하지 않음
패킷 손실,중복, 뒤바뀜 등의 문제점이 생기나 이를 TCP와 같은 프로토콜과 함께 사용하여 ACK와 재전송을 통해 비신뢰성을 보완한다.
2.비연결성: IP라는 연결을 설정하지 않고 패킷을 전송한다.
송신자와 수신자 간에 세션을 유지하거나 상태를 관리하지 않는다.
연결 상태를 관리하지 않으므로 경로가변경되거나 장애가 발생해도 송신자는 알 수 없다.
이런 문제점을 TCP나 QUIC UDP와 같은 상위 계층에서 연결을 관리하며 재연결과 순서 보장을 수행하는 것으로 해결할 수 있다.
3. 보안 부족: 암호화나 인증 같은 보안 메커니즘이 기본적으로 포함되어 있지 않다.(IP 자체로는 보안 위협에 취약)
IPSec와 같은 프로토콜을 통해 인증,암호화,무결성을 강화한다.
IPSec의 기능
1.퍼블릭 인터넷을 통해 데이터를 전송할 때 라우터 보안을 제공합니다.
2.애플리케이션 데이터를 암호화합니다.(대칭,비대칭 키)
3.알려진 발신자가 보낸 데이터를 빠르게 인증합니다.
4.두 엔드포인트 간에 전송되는 모든 데이터를 암호화하는, IPsec 터널이라는 암호화된 회로를 설정하여 네트워크 데이터를 보호합니다.
4. 조각화로 인한 성능 저하: 네트워크의 서로 다른 MTU(인터넷 연결 장치가 수용할 수 있는 최대 데이터 패킷 크기 - Byte) 크기에 맞추어 큰 패킷을 더 작은 패킷으로 분할하여 전송하게 된다.
성능 문제: 조각화된 패킷 중 하나만 손실되더라도 전체 패킷을 재전송 해야한다.
라우터의 부하: 라우터는 조각화와 재조립 과정에서 추가적인 작업을 수행해야하기에 네트워크에 부하를 준다.
PMTUD(MTU보다 큰 패킷이 올 경우, 더 작은 패킷으로 재전송해야하는데 이 에러메시지가 오지 않을 때까지 반복하며 더이상 받지 않을 경우 최종 MTU 크기를 결정하는 알고리즘)와 같은 알고리즘을 사용하여 최대 MTU 크기를 미리 탐색해 조각화를 최소화한다.
5.IPv4의 주소 부족 문제: 32비트의 주소 체계로 약 43억 개의 주소를 제공하지만 인터넷 사용자와 IoT 장치의 급증으로 주소 고갈 문제가 발생
1. NAT: IP 주소 부족 문제를 해결하기 위해 하나의 공인 IP주소를 여러장치에 공유하도록 하는 기술
해결방안: IPv6으로 전환하여 128비트 주소 체계를 도입함으로써 무제한(지구의 모든 모래알 수보다 큼..)의 IP 주소를 제공
비효율적으로 사용된 IP 주소 블록을 회수하여 재배포한다.
혼잡 제어 부족: IP는 네트워크의 혼잡 상태를 감지하거나 제어할 수 없다. => 패킷 도착시 큐가 풀일 경우 패킷이 폐기되는 문제가 발생
네트워크 경로가 복잡해지면 패킷 손실이 빈번하게 일어남
TCP는 혼잡 상태를 감지하고 혼잡 제어 알고리즘을 사용해 전송 속도를 조절
QUIC와 같은 프로토콜로 네트워크 혼잡을 정교하게 관리
데이터 전송 중에 발생할 수 있는 오류(데이터의 손실,중복,순서 오류)로 부터 데이터의 무결성을 보장하고 전송된 데이터가 송수신자 간에 동일하게 유지되도록 하는 것이다.
종류
체크섬, 순환 중복 검사, stop and wait, Go Back N, Selective Repeat 등이 있다.
네트워크 내에서 패킷 수가 과도하게 증가하는 현상을 방지하고 제거하기 위한 기능
송신자와 수신자 간의 데이터 전송 속도를 조절하여 수신자가 처리할 수 있는 속도를 초과하지 않도록 한다.
수신자의 버퍼가 넘치거나 데이터가 손실 되는 것을 방지하며 효율적인 데이터 전송을 통해 네트워크 자원을 효과적으로 사용할 수 있게 한다.
윈도우 기반 흐름 제어
슬라이딩 윈도우:수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게하여 데이터의 흐름을 동적으로 조절하는 제어 기법, 수신자는 자신의 버퍼 상태를 기반으로 송신자에게 윈도우 크기를 조절
AIMD(패킷 보내고 문제 x -> 윈도우 크기 1씩 증가), Slow Start(각 ACK 패킷 마다 윈도우 크기 1씩), Fast Retransmit(빠른 재전송 - 중복해서 ACK2를 받는경우 혼잡한 상황이라 판단하여 윈도우 크기를 줄임)
동일한 키를 사용하여 데이터를 암호화,복호화하는 방식
종류: AES,DES,3DES
장점
대칭키 암호화는 비대칭키 암호화에 비해 상대적으로 빠름 -> 대용량 데이터 처리에 유리
암호화 및 복호화 과정이 단순하여 리소스를 적게 사용
단점
키 배포 문제: 송신자와 수신자 간에 비밀키를안전하게 공유하는 것이 어려움
스케일 문제: 여러 사용자가 있을 경우 각 사용자마다 키를 배분해야하므로 키 관리가 복잡해짐
사용 사례: 파일 암호화, 디스크 암호화, 네트워크 트래픽 보호 등
두개의 키(공개키와 개인키)를 사용하여 데이터를 암,복호화하는 방식 -> 공개키는 배포, 개인키는 비밀
송신자 -> 수신자의 공개 키를 사용하여 메시지를 암호화
수신자 -> 수신지의 비밀 키(개인 키)로 메시지를 복호화
종류: RSA,DSA,ECC
장점
키 배포의 용이성: 공개 키를 공개하고 개인키는 비밀로 유지함으로써 안전
보안성: 공개 키가 유출되더라도 개인키가 보호되어 안전
단점
속도: 대칭키 암호화에 비해 상대적으로 느리고 대량의 데이터 처리에 비효율적
복잡성: 알고리즘이 복잡하여 리소스를 많이 사용
공개키로 세션키를 암호화 -> 이를 보냄 -> 개인키로 세션키를 복호화하여 해당하는 세션키로 데이터를 주고받음
키 생성: 수신자는 대칭키(세션 키)를 생성합니다.
비대칭키 암호화: 수신자는 자신의 공개 키를 송신자에게 제공합니다.
세션 키 전송: 송신자는 생성된 세션 키를 수신자의 공개 키로 암호화하여 전송합니다.
세션 키 복호화: 수신자는 자신의 개인 키를 사용하여 암호화된 세션 키를 복호화합니다.
데이터 암호화: 송신자는 세션 키를 사용하여 데이터를 대칭키 암호화 방식으로 암호화하여 전송합니다.
데이터 복호화: 수신자는 같은 세션 키를 사용하여 데이터를 복호화합니다.
SSL/TLS 프로토콜 - 인증서, 서버가 믿을 수 있는지 확인하는데 사용
클라이언트가 서버에 연결 요청을 보내고, 서버는 자신의 인증서를 클라이언트에 전송합니다.
클라이언트는 인증서를 검증한 후 세션 키를 생성하고 서버에 전송합니다
장점
속도와 보안성의 균형: 빠른 대칭키 암호화를 사용하면서도, 안전한 비대칭키 암호화를 통해 키 교환 문제를 해결합니다.
유연성: 필요에 따라 다양한 대칭키 알고리즘을 사용할 수 있으며, 각기 다른 환경에 맞춰 적용할 수 있습니다.
단점
복잡성: 시스템이 더 복잡해지며, 구현과 관리가 더 어려워질 수 있습니다.
성능 오버헤드: 비대칭키 암호화는 상대적으로 느리기 때문에, 초기 핸드셰이크 과정에서 성능 저하가 발생할 수 있습니다.
웹에서 데이터 통신을 안전하게 하기위해 HTTP에서 SSL/TLS와 같은 서버 확인용 프로토콜을 추가한 것으로
데이터의 무결성과 기밀성을 보장하고 웹사이트와 사용자 간의 통신을 암호화하여 안전한 데이터 전송을 제공한다.(서버와 클라간 세션키)
장점
보안성: 데이터 암호화를 통해 해커나 중간 공격자로부터 데이터를 보호한다.
신뢰성: 사용자는 브라우저에서 HTTPS 연결을 확인할 수 있고 해당 웹 사이트가 신뢰할 수 있는 사이트임을 확인할 수 있다.(자물쇠 표시)
검색 엔진 최적화: 검색엔진에서 HTTPS를 사용하는 웹사이트를 우선적으로 노출시켜 웹 사이트의 검색 순위가 높아질 수 있다.
데이터 무결성: 데이터가 전송되는 동안 수정되지 않았음을 보장하므로 사용자와 서버 간의 통신의 정확성을 유지
해시 함수는 임의의 길이의 데이터를 입력받아 고정된 길이의 해시 값을 생성하는 알고리즘
MAC는 데이터와 비밀 키를 사용하여 생성된 해시 값으로, 데이터의 무결성과 인증을 동시에 제공합니다.
여러 서버 또는 자원에 트래픽을 분산시키는 기술,
웹 서비스나 애플리케이션의 성능을 최적화하고 가용성을 높이기 위해 사용된다.
로드 밸런서를 통해 클라이언트의 요청을 여러 서버에 고르게 분배함으로써, 시스템의 과부하를 방지하고 장애 발생시에도
안정적인 서비스 제공을 가능하게 한다.
목적
성능 향상: 여러 서버에 트래픽을 분산시켜 각 서버의 부하를 줄이고 응답 속도를 향상시킵니다.
가용성 및 신뢰성 증대: 특정 서버가 실패하더라도 다른 서버로 요청을 전달하여 서비스를 지속할 수 있다.
유연성: 서버 추가 및 제거가 용이하여 트래픽 변화에 따라 인프라를 유연하게 조정할 수 있다.
동작 원리
클라이언트 요청 수신: 클라이언트가 서버에 요청을 보냅니다.
로드 밸런서로 요청 전달: 요청은 로드 밸런서에 도달합니다.
서버 선택: 로드 밸런서는 다양한 알고리즘을 사용하여 적절한 서버를 선택합니다.
서버로 요청 전달: 선택된 서버에 요청을 전달하고, 서버의 응답을 클라이언트에게 반환합니다.
라운드 로빈 (Round Robin): 요청을 순서대로 각 서버에 분배합니다.
요청을 순서대로 분배하기 떄문에 여러 대의 서버가 동일한 스펙을 갖고 있고 서버와의 연결이 오래 지속되지 않는 경우에 활용하기 적합
최소 연결 (Least Connections): 현재 연결 수가 가장 적은 서버에 요청을 보냅니다.
자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합하다.
최소 응답 시간 (Least Response Time): 응답 시간이 가장 짧은 서버에 요청을 보냅니다.
가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분하는 방식
IP 해시 (IP Hash): 클라이언트의 IP 주소를 기반으로 서버를 선택하여 특정 클라이언트가 항상 같은 서버에 연결되도록 합니다.
사용자의 IP를 해싱해 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것
서버나 서비스의 상태를 모니터링하고 정상적으로 작동하는지 확인하는 프로세스
상태 모니터링: 서버나 서비스가 정상적으로 작동하고 있는지 지속적으로 확인
장애 조기 감지: 문제가 발생하기 전에 조기에 감지하여 서비스 중단을 방지
자동 복구: 비정상적인 상태를 감지하면 자동으로 복구 프로세스를 트리거하여 시스템의 가용성을 유지
로드 밸런싱: 비정상 상태의 서버를 로드 밸런서에서 제외하여, 클라이언트의 요청이 정상 서버로만 전달되도록 한다.
주기적 요청: 헬스체크 에이전트가 일정한 간격으로 서버에 요청을 보냄
상태 확인: 헬스 체크 요청에 대한 응답으로 자신의 상태 정보를 반환, 응답 코드/응답 시간/ 서버의 CPU,메모리 사용량 등의 정보를 포함
결과 분석: 헬스 체크 에이전트를 받은 응답을 분석하여 서버가 정상,비정상인지를 판단
조치: 서버가 정상 - 계속 진행 / 서버가 비정상: 로드 밸런서에서 제외, 관리자에게 경고
가용성 증가: 비정상적인 서버를 신속하게 식별하고, 서비스 중단 없이 클라이언트 요청을 처리할 수 있습니다.
자동화된 운영: 문제 발생 시 자동으로 조치가 이루어져 운영 비용을 절감할 수 있습니다.
신뢰성 향상: 사용자에게 안정적이고 신뢰할 수 있는 서비스를 제공함으로써 고객 만족도를 높입니다.