###1. TCP/IP 프로토콜의 자체적인 문제점TCP/IP는 '신뢰성'과 '연결성'을 최우선으로 설계되었으나, 이로 인해 보안과 효율성 측면에서 약점이 존재합니다.
####A. 보안(Security) 측면: "신뢰 기반 설계의 취약점"TCP/IP는 통신 상대를 기본적으로 신뢰한다는 가정하에 설계되었습니다. 인증이나 암호화가 기본 프로토콜 레벨(Layer 3, 4)에 내장되어 있지 않습니다.
####B. 효율성(Efficiency) 측면: "구조적 병목"* HOL Blocking (Head-of-Line Blocking): TCP는 패킷의 순서를 엄격하게 지킵니다. 만약 앞선 패킷 하나가 손실되면, 그 뒤에 도착한 정상 패킷들도 앞선 패킷이 재전송되어 올 때까지 처리되지 못하고 대기해야 합니다. 이는 속도 저하의 주원인이 됩니다. (HTTP/3에서 QUIC 프로토콜이 등장한 배경)
###2. 서버 소켓의 상태: Listen & Accept서버가 클라이언트의 연결 요청을 처리하는 과정에서 사용되는 시스템 콜(System Call)이자 상태(State)입니다. 소켓 프로그래밍의 핵심 단계입니다.
####A. Listen (수신 대기)서버가 bind()를 통해 특정 포트를 점유한 후, "나는 이제 연결 요청을 받을 준비가 되었다"고 운영체제에 알리는 단계입니다.
connect()(SYN 패킷 전송)를 시도하면, 서버는 바로 연결되는 것이 아니라 일단 이 큐(Queue)에 들어갑니다. listen(socket, backlog_size) 함수의 두 번째 인자로 이 큐의 크기를 결정합니다.####B. Accept (연결 수락)listen 상태의 대기열(Queue)에 쌓여 있는 "연결이 완료된(ESTABLISHED)" 요청을 하나씩 꺼내서 실제 통신을 시작하는 단계입니다.
listen 소켓은 계속 "안내 데스크" 역할만 하고, accept가 반환한 "새로운 소켓"이 실제 클라이언트와 1:1로 데이터를 주고받는 역할을 합니다.###3. TCP Slow Start (슬로우 스타트)TCP의 혼잡 제어(Congestion Control) 알고리즘의 첫 단계입니다. 네트워크의 상태를 모르기 때문에, 처음에는 조심스럽게 전송량을 늘려가는 방식입니다.
####개념 및 목적연결이 막 수립되었을 때, 네트워크가 현재 어느 정도의 데이터를 감당할 수 있는지 알 수 없습니다. 이때 갑자기 대량의 데이터를 보내면 네트워크 혼잡(Congestion)이 발생하여 패킷이 유실될 수 있습니다. 이를 방지하기 위해 전송 속도를 낮은 상태에서 시작하여 지수 함수적으로 증가시키는 방법입니다.
####동작 과정1. 초기화: 송신 측은 혼잡 윈도우 크기(cwnd, Congestion Window)를 아주 작은 값(보통 1 MSS, Maximum Segment Size)으로 설정합니다.
2. 전송: cwnd 크기만큼 패킷을 보냅니다.
3. 증가 (Exponential Growth): 수신 측으로부터 ACK(수신 확인)를 받을 때마다 cwnd를 증가시킵니다.
요약하자면: "네트워크 상황을 모르니 간을 보면서, 괜찮다 싶으면 속도를 2배씩 빠르게 올려보는 전략"입니다.