전송 계층의 역할
네트워크 계층(IP)이 호스트 간 통신을 담당한다면, 전송 계층은 호스트 내 특정 애플리케이션 프로세스까지 데이터를 전달합니다.
포트 (Port)
포트: 같은 호스트 내에서 여러 애플리케이션을 구분하는 번호 (16 bit, 0 ~ 65,535)
| 범위 | 구분 | 예시 |
|---|---|---|
| 0 ~ 1,023 | 잘 알려진 포트 (Well-Known) | HTTP:80, HTTPS:443, SSH:22 |
| 1,024 ~ 49,151 | 등록된 포트 (Registered) | MySQL:3306, Spring Boot:8080 |
| 49,152 ~ 65,535 | 동적 포트 (Ephemeral) | 클라이언트 측 임시 포트 |
주요 포트 번호 — AWS / 백엔드 필수
| 포트 | 프로토콜 | 설명 |
|---|---|---|
| 22 | SSH | EC2 원격 접속 |
| 80 | HTTP | 웹 서버 |
| 443 | HTTPS | 보안 웹 서버 |
| 3306 | MySQL | RDS 데이터베이스 |
| 8080 | HTTP-alt | Spring Boot 기본 포트 |
| 53 | DNS | 도메인 이름 조회 |
| 67/68 | DHCP | IP 자동 할당 |
TCP vs UDP
| 항목 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결형 (3-way handshake 후 통신) | 비연결형 (바로 전송) |
| 신뢰성 | 높음 (순서 보장 + 재전송) | 낮음 (유실 시 재전송 없음) |
| 속도 | 상대적으로 느림 | 빠름 |
| 헤더 크기 | 20 ~ 60 byte | 8 byte (고정) |
| 흐름/혼잡 제어 | 있음 | 없음 |
| 사용 예 | HTTP, HTTPS, FTP, SSH, DB | DNS, DHCP, 동영상 스트리밍, 온라인 게임 |
TCP 세그먼트 헤더
주요 제어 비트(플래그)
| 비트 | 이름 | 의미 |
|---|---|---|
| SYN | Synchronize | 연결 수립 요청 |
| ACK | Acknowledgement | 수신 확인 |
| FIN | Finish | 연결 종료 요청 |
| RST | Reset | 연결 강제 초기화 |
| PSH | Push | 버퍼링 없이 즉시 전달 |
연결 수립 — 3-way Handshake
연결 종료 — 4-way Handshake
TIME_WAIT: A가 보낸 마지막 ACK가 유실되었을 때 B의 FIN 재전송을 받을 수 있도록 잠시 대기합니다.
오류 제어 — ARQ 방식 비교
ARQ (Automatic Repeat reQuest): 오류 감지 시 자동으로 재전송하는 메커니즘
Stop-and-Wait ARQ
| 장점 | 단점 |
|---|---|
| 구현 단순, 신뢰성 높음 | 네트워크 자원 낭비, 처리량 낮음 |
Go-Back-N ARQ (파이프라이닝)
| 장점 | 단점 |
|---|---|
| Stop-and-Wait보다 처리량 높음 | 오류 없는 세그먼트도 재전송 |
Selective Repeat ARQ
| 장점 | 단점 |
|---|---|
| 불필요한 재전송 없음, 효율 최고 | 수신 버퍼 관리 복잡 |
흐름 제어 — 슬라이딩 윈도우
수신자가 처리할 수 있는 데이터량을 수신 윈도우(rwnd) 로 알려주면, 송신자는 ACK 없이 그 크기만큼 연속으로 보낼 수 있습니다.
수신자 버퍼가 가득 찰수록 rwnd 값이 줄어들고, 비면 다시 늘어납니다.
혼잡 제어
네트워크 자체의 혼잡(패킷 손실·지연)을 막기 위해 송신량을 조절합니다.
혼잡 감지 신호
| 신호 | 의미 | 대응 |
|---|---|---|
| ACK 3번 중복 수신 | 특정 세그먼트 손실 (경미한 혼잡) | 빠른 재전송 (Fast Retransmit) |
| 타임아웃 발생 | 심각한 혼잡 | 혼잡 윈도우 1로 리셋 |
슬로 스타트 + AIMD 흐름
혼잡 제어 상태 전환 요약
| 현재 상태 | 이벤트 | 다음 상태 |
|---|---|---|
| 슬로 스타트 | cwnd < ssthresh | cwnd × 2 (지수 증가) |
| 슬로 스타트 | cwnd ≥ ssthresh | 혼잡 회피(선형 증가)로 전환 |
| 혼잡 회피 | ACK 3중 중복 | ssthresh = cwnd/2, 빠른 복구 |
| 혼잡 회피 | 타임아웃 | cwnd = 1, ssthresh = cwnd/2, 슬로 스타트 재시작 |
AWS / Spring Boot에서 TCP 적용
| 개념 | 실제 적용 |
|---|---|
| 포트 22 | EC2 SSH 접속 시 보안 그룹 인바운드 허용 필요 |
| 포트 8080 | Spring Boot 앱 배포 시 보안 그룹 개방 |
| 포트 3306 | RDS MySQL 연결 (프라이빗 서브넷 내부만 허용) |
| 3-way Handshake | HTTP 요청마다 TCP 연결 수립 (HTTP/1.1 keep-alive로 재사용) |
| 4-way Handshake | 연결 종료, TIME_WAIT은 서버 성능에 영향 가능 |
| ALB (로드밸런서) | 클라이언트↔ALB, ALB↔EC2 각각 독립된 TCP 연결 |
정리
| 개념 | 핵심 |
|---|---|
| 포트 | 호스트 내 프로세스 식별 (IP + 포트 = 소켓) |
| TCP | 연결형, 신뢰성, 오류·흐름·혼잡 제어 |
| UDP | 비연결형, 빠름, 단순 |
| 3-way Handshake | SYN → SYN+ACK → ACK |
| 슬라이딩 윈도우 | 흐름 제어, 수신 버퍼 크기만큼 연속 전송 |
| 슬로 스타트 + AIMD | 혼잡 제어 기본 알고리즘 |
다음 포스트: 응용 계층 — HTTP, DNS, URI