TCP (Transmission Control Protocol)
신뢰성 있는 연결 지향 전송 계층 프로토콜. 데이터의 순서 보장, 손실 재전송, 흐름 제어를 제공한다.
TCP vs UDP
| 항목 |
TCP |
UDP |
| 연결 |
연결 지향 (3-way handshake) |
비연결 |
| 신뢰성 |
보장 (재전송, 순서 보장) |
미보장 |
| 속도 |
느림 |
빠름 |
| 사용 |
HTTP, FTP, SSH, DB |
DNS, 스트리밍, 게임 |
3-Way Handshake (연결)
Client Server
│── SYN ────────▶│ (연결 요청)
│◀── SYN-ACK ────│ (요청 수락)
│── ACK ────────▶│ (확인)
│═══ 연결 수립 ═══│
4-Way Handshake (종료)
Client Server
│── FIN ────────▶│ (종료 요청)
│◀── ACK ────────│ (확인)
│◀── FIN ────────│ (서버도 종료)
│── ACK ────────▶│ (최종 확인)
│═══ 연결 종료 ═══│
TCP 헤더 주요 필드
| 필드 |
설명 |
| Source/Dest Port |
출발지/목적지 포트 |
| Sequence Number |
데이터 순서 번호 |
| Acknowledgment Number |
다음에 받을 데이터 번호 |
| Flags |
SYN, ACK, FIN, RST, PSH |
| Window Size |
수신 버퍼 크기 (흐름 제어) |
흐름 제어 & 혼잡 제어
| 기능 |
설명 |
| 흐름 제어 |
Window Size로 수신 측 버퍼 초과 방지 |
| 혼잡 제어 |
네트워크 혼잡 감지 시 전송 속도 감소 |
| 슬라이딩 윈도우 |
ACK 없이 여러 패킷 연속 전송 가능 |
주요 포트
| 포트 |
프로토콜 |
| 22 |
SSH |
| 80 |
HTTP |
| 443 |
HTTPS |
| 3306 |
MySQL |
| 5432 |
PostgreSQL |
| 6379 |
Redis |
| 27017 |
MongoDB |
메모