TCP/UDP 통신 방식 (WireShark)
📌TCP/UDP?
📍 TCP
- TCP(Transmission Control Protocal) 전송 제어 프로토콜
- 3 - way handshake를 통해 연결 설정, 4 - way handshake를 통해 연결 해제
- Client 와 Server는 1:1 연결
- TCP는 데이터를 전송할 때 오류를 검사하여 전송된 데이터가 목적지에 온전하게 도달하도록 보장 (신뢰성이 높음)
- TCP는 전송이 실패한 경우 재전송 시도
- TCP는 운영체제와 독립적으로 작동하므로 시스템과 디바이스 간 상호 운용성이 높음
- 전송단위는 Segment
- Header 의 구성요소
- Source Port / Destination Port
- Sequence Number
- Acknowledgment Number
- Flags (SYN, ACK, FIN)
- Window Size
- Checksum
- Urgent Pointer
- Data
- 실제로 전송되는 애플리케이션 데이터
- ✅ 정리하면 "Header(최소 20바이트)" + "DATA" 로 이루어져 있음
📍 UDP
- UDP(User Datagram Protocal) 유저 데이터그램 프로토콜
- UDP는 패킷을 더 적은 오버헤드로 전송하여 End to End 지연을 줄임
- UDP는 일부 패킷이 누락되더라도 데이터를 전송
- 브로드캐스트 및 멀티캐스트 기능을 통해 하나의 UDP 전송을 여러 수신자에게 한 번에 전송
- 전송 단위는 Daragram
Datagram ❓
- Header의 구성요소
- Source Port / Destination Port
- Length
- Checksum ( IPv6 에선 필수로 Checksum이 들어가야 함)
- Data
- 실제로 전송되는 애플리케이션 데이터
- ✅ 정리하면 "Header(최소 8바이트)" + "DATA" 로 이루어져 있음
📍 TCP/UDP Layer
📌TCP vs UDP
📍 속도
- TCP의 전송 단위는 Segment, UDP의 전송단위는 Datagram
- Datagram보다 Segment는 더 많은 제어 정보를 포함하고 상대적으로 더 크고 복잡함
- TCP의 전송 방식은 패킷이 순차적으로 전달하는 반면 UDP는 패킷이 스트레이트로 전달
- UDP는 Datagram 방식이므로 독립적인 패킷을 사용하므로 TCP처럼 연결 설정이 필요가 없다
UDP 승 🎯
📍 신뢰도
- TCP은 연결형 서비스를 지향 UDP는 비연결형 서비스
- TCP는 전송 순서를 보장하고 UDP는 그렇지 않음
- UDP의 오류가 TCP보다 많이 발생할 확률이 높
- handshake 방식을 통해 신뢰도 향상
- TCP의 헤더가 복잡한 대신 서버와 클라이언트 간의 신뢰를 높임
TCP 승 🎯
✅ 정리하면
- TCP는 연결 지향적이므로 데이터를 신뢰성 있게 전송하는데 포커싱을 두고 있음
- 웹 페이지 로딩(HTTP/HTTPS)
- 파일 전송 (FTP)
- 데이터베이스 연결
- UDP는 비연결 지향적 이므로 데이터 전송의 신뢰성을 보장하지 않음 그대신 속도와 단순성을 중시하는 경우에 사용됨
- 동영상 스트리밍
- 온라인 게임
- DNS ( 도메인 이름을 IP 주소로 변환할 때 사용)
- TFTP ( 작은 파일을 간단하고 빠르게 전송할 때)
📌3 - way handshake, 4 - way handshake
📍 TCP
- WireShark로 실제 데이터 플로우를 비교한 것
- 3 - way handshake로 통신을 시작하고 4 - way handshake로 통신을 끝내는 것을 알 수 있다.
- 🟩 초록색 = 3 - way handshake 연결 과정
- 🟥 빨간색 🟦 파란색 = Transmitting Data 데이터 전송 과정
- ⬛ 검은색 = 4 - way handshake 연결 과정
- Client Data가 요청 헤더에 담긴 데이터를 먼저 통신하고 이후에 서버가 응답을 하는 것을 알 수 있다.
- 실험을 진행하면서 생긴 의문점 ❓
- 대부분의 정보글은 클라이언트가 먼저 FIN을 보낸다고는 하는데 실제 결과는 많이 달랐다.
- 서버가 먼저 [FIN, ACK] 보내고 이 후에 클라이언트가 [FIN, ACK]를 보낸다.
- Gpt - 4o 호출 🤖
- TCP는 양방향 통신이므로 서버가 먼저 FIN을 보낼 수 있다고 함.
- 서버가 먼저 보내는 경우는 클라이언트의 요청을 모두 처리하고 더 이상 받지 않겠다고 [FIN, ACK]를 전송
- 이 후에 클라이언트는 확인 ACK를 보냄 이어서 클라이언트도 [FIN, ACK] 전송
📍 UDP의 QUIC 프로토콜
- Youtube 영상 스트리밍을 WireShark로 관찰
- initial(1-RTT)로 시작해서 이미 접속했던 IP라면 Suceesful 0-RTT로 요청 !
- 이후에 handshake 하고 지속적으로 서버에서 protected Payload를 보내줌
📍QUIC
- Google에서 개발한 QUIC(Quick UDP Internet Connections)
- 기존의 TCP와 TLS를 개선하려는 목적에서 만들어짐
- 내장된 TLS 암호화 보유
- UDP기반의 QUIC 프로토콜은 TCP기반의 HTTPS보다 월등히 빠름
- 특히 모바일 네트워크 환경에서 큰 성과를 거둠 (특히 Youtube 영상 버퍼 스트리밍)
- HTTP/3 통신 기반임 (내장된 TLS 인증서를 가지고 있으므로 보안되어 있음 == HTTPS)
✅ 정리하면
- HTTP통신 위에 TCP 기반으로 구현된 SSL/TLS 인증서 얹음 => HTTPS
- HTTP/3 통신 위에 UDP기반으로 구현된 QUIC!
함께보면 좋은글--------------------------------------------------
참고--------------------------------------------------------------
TCP UDP 차이: 두 프로토콜 비교 | NordVPN
🌐 아직도 모호한 TCP / UDP 개념 ❓ 쉽게 이해하자
[TCP/UDP] TCP와 UDP의 특징과 차이 - MangKyu's Diary
OSI 7계층과 TCP/IP 4계층을 비교 설명해 주세요.
TCP vs. UDP: Optimising Video Streaming Performance - Gumlet
TCP vs. UDP : r/ProgrammerHumor
QUIC 프로토콜 | 구글 또 너야?. QUIC 프로토콜은 2012년 구글이 처음 발표한 범용 전송 계층… | by scalalang2 | 취미로 논문 읽는 그룹 | Medium
댓글
댓글 쓰기