[Network] TCP와 UDP
3줄 요약
TCP는 연결형, 신뢰성 있는 통신을 제공하고 UDP는 빠르지만 신뢰성 없는 비연결형 통신을 제공
TCP는 흐름 제어, 오류 제어, 혼잡 제어 기능을 통해 안정적인 데이터 전송을 지원
UDP는 빠른 응답 속도가 필요한 실시간 서비스에 적합하며 TCP보다 오버헤드가 적음
💻 컴퓨터 네트워크 시리즈
이 시리즈는 『혼자 공부하는 네트워크』 (강민철 저)
+ 인프런 강의를 기반으로 개인적으로 복습 및 정리한 기록입니다.
📌 TCP (Transmission Control Protocol)
신뢰할 수 있는 전송을 보장하는 연결형 프로토콜
📶 통신 단계
- 연결 수립 (Three-Way Handshake)
- 데이터 송수신
- 재전송을 통한 오류 제어
- 흐름 제어
- 혼잡 제어
- 연결 종료 (Four-Way Handshake)
- MSS (Maximum Segment Size): TCP로 전송할 수 있는 최대 페이로드 크기
TCP 헤더 크기는 제외
📦 TCP 세그먼트 구조
- 송/수신 포트 번호
- 순서 번호(sequence number)
- 확인 응답 번호(acknowledgment number)
- 상대 호스트가 보낸 세그먼트에 대한 응답
- 다음으로 수신하기를 기대하는 순서 번호가 명시(일반적으로 수신한 ‘순서 번호 + 1’)
- 확인 응답 번호를 보내기 위해서 제어 비트에서 승인을 나타내는 ACK 플래그를 1로 설정
- 제어 비트(flags): SYN, ACK, FIN 등
- 현재 세그먼트에 대한 부가 정보
- 기본적으로 8비트로 구성
- ACK: 세그먼트의 승인을 나타내기 위한 비트
- SYN: 연결을 수립하기 위한 비트
- FIN: 연결을 종료하기 위한 비트
- 윈도우 크기
🔄 TCP 연결 수립: Three-Way Handshake
- 액티브 오픈(active open): 연결 시작 호스트의 연결 수립 과정
- 패시브 오픈(passive open): 연결 수락 호스트의 연결 수립 과정
⛔ TCP 연결 종료: Four-Way Handshake
- 액티브 클로즈(active close): 종료 시작 호스트의 연결 종료 과정
- 패시브 클로즈(passive close): 종료 수락 호스트의 연결 종료 과정
FIN과 ACK를 주고받으며 종료되기 때문에 상태 추적이 중요
📊 TCP 상태 (State)
TCP는 상태 기반의 stateful protocol
- 연결이 수립되지 않은 상태
- CLOSED: 아무런 연결이 없는 상태
- LISTEN: 일종의 연결 대기 상태(SYN 세그먼트를 기다리는 상태)
- 연결 수립 과정에서 주로 볼 수 있는 상태
- SYN-SENT: 연결 요청을 보낸 뒤 대기 상태(SYN+ACK 세그먼트를 기다리는 상태)
- SYN-RECEIVED: 패시브 오픈 호스트가 SYN+ACK를 보낸뒤 ACK를 기다리는 상태
- ESTABLISHED: 연결이 확립되었음을 나타내는 상태
- 연결 종료 과정에서 주로 볼 수 있는 상태
- FIN-WAIT-1: 일반적인 TCP 연결 종료 과정에 있어 첫 단계
- CLOSE-WAIT: 종료 요청인 FIN 세그먼트를 받은 패시브 클로즈 호스트가 그에 대한 응답으로 ACK세그먼트를 보낸 후 대기하는 상태
- FIN-WAIT-2: FIN-WAIT-1 상태에서 ACK 세그먼트를 받고 상대 호스트의 FIN 세그먼트를 기다리는 상태
- LAST-ACK: CLOSE-WAIT 상태에서 FIN 세그먼트를 보낸 후 이에 대한 ACK 세그먼트를 기다리는 상태
- TIME-WAIT
- 액티브 클로즈 호스트가 FIN 세그먼트를 받은 뒤, 이에 대한 ACK 세그먼트를 전송한 뒤 접어드는 상태
- 패시브 클로즈 호스트는 마지막 ACK 세그먼트를 수신하면 CLOSED 상태로 전이
- TIME-WAIT 상태의 액티브 클로즈 호스트는 일정 시간을 기다린 뒤 CLOSED 상태로 전이
상태 확인 명령:
1
2
3
4
5
6
7
8
9
10
11
12
> netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 10.11.12.13.56789 123.123.123.123.https ESTABLISHED
tcp6 0 0 10.11.12.13.56789 123.123.123.123.https SYN_SENT
tcp6 0 0 10.11.12.13.56789 123.123.123.123.https SYN_SENT
tcp4 0 0 10.11.12.13.56789 123.123.123.123.https ESTABLISHED
tcp4 0 0 10.11.12.13.56789 123.123.123.123.443 ESTABLISHED
.
.
.
📡 UDP (User Datagram Protocol)
TCP보다 단순하고 빠른 비연결형 전송 프로토콜
- 연결 수립 없이 데이터그램 전송
- 순서 보장 ❌
- 재전송 ❌
- 오류 제어 ❌
- 흐름/혼잡 제어 ❌
- 상태 정보 유지 ❌ → stateless
UDP의 장점
- 빠름
- 오버헤드 적음
활용 분야
- 실시간 스트리밍
- 인터넷 전화
- 온라인 게임
⚖️ TCP vs UDP 비교
항목 | TCP | UDP |
---|---|---|
연결 방식 | 연결형 | 비연결형 |
신뢰성 | 있음 | 없음 |
속도 | 느림 | 빠름 |
순서 보장 | O | X |
오류 제어 | O | X |
상태 유지 | O | X |
사용 사례 | 웹, 이메일, 파일 전송 등 | 스트리밍, VoIP, 게임 등 |
✅ 마무리 정리
TCP와 UDP는 전송 계층의 핵심 프로토콜로 각기 다른 특성과 용도를 지닌 프로토콜
TCP는 신뢰성과 안정성이 필요한 서비스에, UDP는 빠른 전송이 필요한 서비스에 활용
두 프로토콜의 특성과 구조를 이해하면 네트워크 동작과 성능 최적화에 큰 도움
📚 참고 자료
- 『혼자 공부하는 네트워크』 - 강민철 저
- 인프런 강의 - 혼자 공부하는 네트워크 기반 강의
읽어주셔서 감사합니다 🙌
내용이 도움이 되었거나, 틀린 부분이 있다면 댓글이나 GitHub Issue로 알려주세요 😊
This post is licensed under CC BY 4.0 by the author.