개발지식 먹는 하마 님의 블로그

TCP와 UDP 본문

Web

TCP와 UDP

devhippo 2025. 3. 17. 16:56
인터넷상에서는 데이터를 안전하게 전달하기 위한 규칙이 있다.
이를 전송 계층 프로토콜이라고 한다.

 

대표적인 전송 계층 프로토콜에는 TCP와 UDP가 있다.
두 방법의 가장 큰 차이는 신뢰성을 고려하는 지의 여부이다.

프로토콜 TCP UDP
신뢰성 고려 3 Way HandShake로 신뢰성 있는 연결 비신뢰성
속도 느림 빠름
공통점 PORT가 존재한다

📌 TCP ( Transmission Control Protocol )

신뢰성 있는 데이터 전송을 보장하는 연결 지향형 프로토콜

  • 신뢰성 있는 데이터
    데이터를 송수신하기 전에 3 Way HandShake를 통해 연결을 설정한다.
  • 오류 처리
    손상된 패킷 감지 후 재전송한다.
  • 흐름 제어 및 혼잡 제어
    데이터가 올바르게 전송될 수 있도록 전송 속도 등을 조절한다.

 

📌 3 Way HandShake

데이터를 전송하기 전에 먼저 수행하여 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장한다.

또한, TCP는 SEQ 번호를 설정해 패킷의 올바른 순서로 도착하도록 보장한다.

✅ SEQ(시퀀스) 번호

TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 각 패킷마다 고유한 SEQ 번호를 부여한다.

  • 올바른 순서 확인
  • 누락된 패킷 확인
  • 중복된 데이터인지 확인

https://teamsparta.notion.site/Spring-1-3d597349a4734ff88009afadf1a2100b?pvs=25#fffdc67dfb084d1685717bd538ddb08d

*SYN (Synchronize) 동기화     *ACK (Acknowledge) 인정하다


1) SYN 패킷 전송

클라이언트가 서버에게 SYN 패킷을 전송한다.
(저희 쪽 계약 조건 확인해 보시죠)

클라이언트 상태 -  SYN_SENT
클라이언트의 SEQ = 1000

2) SYN, ACK 패킷 전송

서버는 클라이언트가 보낸 SYN 패킷을 받고 ACK 패킷과 함께 반환한다.
(확인했습니다. 이쪽 계약 조건은 이렇습니다 확인해 주세요)

서버 상태 - SYN_RECEIVED
서버의 SEQ = 3000
서버의 ACK = 1000 ( 클라이언트의 SEQ ) + 1 

3) ACK 패킷 전송

클라이언트는 서버가 보낸 SYN-ACK 패킷을 받고, ACK 패킷을 보내며 연결을 완료한다.
(괜찮네요 이렇게 체결하시죠. 계약 성립!)

서버 상태 - ESTABLISHED
클라이언트의 SEQ = 1001
클라이언트의 ACK = 3000 (서버의 SEQ) + 1

 


📌 UDP ( User Datagram Protocol )

비연결형, 신뢰성이 없지만 빠른 전송이 중요한 실시간 통신에 적합한 프로토콜

기능이 없고 연결을 하지 않아 속도가 빠르지만,
잘못된 데이터가 전송되지 않도록 Checksum을 통해 데이터 무결성을 검사한다.

 

'Web' 카테고리의 다른 글

DTO (Data Transfer Object)  (0) 2025.03.31
웹 서비스 구조 및 흐름을 비유와 함께 이해하기  (0) 2025.03.20
REST API와 RESTful API  (0) 2025.03.20
HTTP Message  (0) 2025.03.18
API 간략 정리  (0) 2025.02.17