TCP (Transmission Control Protocol)
- 전송 계층(Transport Layer) 프로토콜
- 연결 지향형(connection-oriented)
- 통신을 시작하기 전에 송신자와 수신자가 연결을 맺음
- 신뢰성 있는 데이터 전송(reliable transmission) 제공
TCP의 특징
- 연결 지향형
통신 전에 3-way handshake로 연결을 설정
- 신뢰성
데이터 손실, 중복, 순서 뒤바뀜을 감지하고 보정
- 흐름 제어
수신자가 처리할 수 있는 만큼만의 데이터를 전송
- 혼잡 제어
네트워크 혼잡 시 전송 속도를 조절
- 세그먼트 단위 전송
데이터는 세그먼트로 나누어 전송
TCP의 동작 과정
- 연결 설정 (3-way handshake)
- 데이터 전송
데이터를 세그먼트 단위로 나누어 전송
각 세그먼트에는 시퀀스 번호(sequence number)가 있어 순서 확인 가능
수신자가 받은 데이터에 대해 ACK(acknowledgment) 응답 전송
손실된 세그먼트는 재전송(Retransmission)
- 연결 종료 (4-way handshake)
TCP 헤더
: TCP 패킷이 전달될 때 포함하는 제어정보

이미지 출처
- [Soucre Port] 16 bit : 송신 측 포트 번호
- [Destination Port] 16bit : 수신 측 포트 번호
- [Sequence Number] 32 bit: 각 데이터 바이트 순서를 표시하는 번호
TCP는 연속3적인 바이트 스트림을 전송하므로, 수신자가 어떤 순서대로 데이터를 조립해야 하는지 알아야 함
3-way handshake에서는 연결 시작 시 초기 시퀀스 번호(ISN)를 서로 교환해서
이후 데이터 전송에 대한 기준점을 마련함
- [Acknowledgment Number] 32 bit : 다음에 받을 바이트 번호
수신자는 ACK를 통해 데이터 손실 여부를 알려줌
클라이언트 seq = 100, 서버가 ACK = 101 → 클라이언트가 seq=100 바이트를 정상 수신했다고 확인
- [Data Offset] 4bit : TCP 헤더 길이 (옵션 포함)
- [Reserved] 3bit: 예약된 필드
- [Flags(Control bits)] 9bit: TCP 제어 플래그(SYN, ACK, FIN, RST, PSH, URG 등)
- SYN: 연결 요청
- ACK: 수신 확인
- FIN: 연결 종료
- RST: 연결 리셋
- PSH: 수신 즉시 데이터 처리
- URG: 긴급 데이터 표시
- [Window Size] 16 bit: 흐름 제어: 수신 가능한 바이트 수
- [Checksum] 16 bit: 오류 검출용 체크섬
- [Urgent Pointer] 16 bit: URG 플래그가 설정된 경우 긴급 데이터 위치
- [Options] 가변: 선택적 기능 (최대 세그먼트 크기, 타이머…)
TCP 3-way handshake

이미지 출처
Client Server
| ----- SYN(seq=x) ---> | (클라이언트 연결 요청)
| <--- SYN-ACK(seq=y, ack=x+1) --- | (서버 승인)
| --- ACK(seq=x+1, ack=y+1) ---> | (클라이언트 확인)
-
SYN (Synchronize)
Client ----SYN(seq = x)----> Server
- 클라이언트 → 서버 : 연결 요청
- SYN 플래그가 설정된 TCP 패킷 전송
- 클라이언트는 자신의 초기 시퀀스 번호(ISN, Initial Sequence Number)를 함께 보냄
-
SYN-ACK (Synchronize + Acknowledge)
Client ----ACK(seq = x+1, ack = y+1)----> Server
- 서버 → 클라이언트
- 서버가 클라이언트 요청을 승인하고, 자신의 초기 시퀀스 번호를 보냄
- 동시에 클라이언트 SYN을 확인했다는 의미로 ACK 번호 = x+1 전송
-
ACK (Acknowledge)
Client ----ACK(seq = x+1, ack = y+1)----> Server
- 클라이언트 → 서버
- 클라이언트가 서버 SYN을 확인했음을 알림
- ACK 번호 = y+1
- 연결 설정 완료 → 양쪽 모두 데이터 전송 가능
3-way handshake에서 시퀀스 & ACK 번호의 의미
| 단계 | 시퀀스 번호 | ACK 번호 | 의미 |
|---|
| SYN (클라이언트→서버) | x | - | 클라이언트 초기 번호 x 설정, 서버에 연결 요청 |
| SYN-ACK (서버→클라이언트) | y | x+1 | 서버 초기 번호 y, 클라이언트 SYN 확인 |
| ACK (클라이언트→서버) | x+1 | y+1 | 클라이언트가 서버 SYN 확인, 연결 완료 |
TCP 4-way handshake
Client Server
| --- FIN ---> | (클라이언트 종료 요청)
| <--- ACK --- | (서버 확인)
| <--- FIN --- | (서버 종료 요청)
| --- ACK ---> | (클라이언트 확인, 연결 종료 완료)
- FIN (Finish) – 종료 요청
- 연결 종료를 원하는 쪽이 FIN 플래그를 설정하여 보냄
- ACK - 종료 확인
- 상대방이 FIN을 받고 ACK로 확인
- ACK 번호 = 보낸 FIN 시퀀스 번호 + 1
- 이 시점에서 한쪽은 데이터 전송 종료, 다른 쪽은 아직 데이터 전송 가능
- FIN - 반대편 종료 요청
- 상대방도 자신의 데이터 전송이 끝났음을 알리기 위해 FIN 전송
- ACK - 최종확인
- 처음 FIN을 보낸쪽이 ACK를 보내 최종확인
- ACK 번호 = 상대방 FIN 시퀀스 번호 -1
- 이제 양쪽 연결이 완전히 종료!
UDP (User Datagram Protocol)
가벼운 비연결형 통신을 제공하는 프로토콜
UDP의 특징
- 비연결형 (Conectionless)
TCP처럼 연결을 먼저 만들지 않음
바로 데이터 전송 가능
- 신뢰성 없음 (Unreliable)
패킷 손실, 순서 바뀜, 중복 수신에 대해 보장하지 않음
- 헤더 구조 간단
TCP 헤더보다 작아서 처리 속도 빠름
- 빠른 전송
실시간 전송에 유리 (VoIP, 게임, 스트리밍)
UDP 헤더

이미지 출처
- Source Port (16bit) : 발신 포트
- Destination Port (16bit) : 수신 포트
- Length (16bit) : UDP 헤더 + 데이터 길이
- Checksum (16bit): 데이터 무결성 검사 (선택 가능)
TCP & UDP
| 항목 | TCP | UDP |
|---|
| 연결 방식 | 연결형 | 비연결형 |
| 신뢰성 | 보장 | 없음 |
| 순서 보장 | 있음 | 없음 |
| 속도 | 느림 | 빠름 |
| 사용 사례 | 웹, 이메일, 파일 전송 | 게임, VoIP, 실시간 스트리밍 |